forked from MapComplete/MapComplete
		
	Merge branch 'develop' into feature/walls-and-buildings
This commit is contained in:
		
						commit
						07bf3e3d34
					
				
					 18 changed files with 520 additions and 196 deletions
				
			
		|  | @ -10,5 +10,5 @@ ports: | |||
| vscode: | ||||
|   extensions: | ||||
|     - "esbenp.prettier-vscode" | ||||
|     - "eamodio.gitlens", | ||||
|     - "GitHub.vscode-pull-request-github" | ||||
|     - "eamodio.gitlens" | ||||
|     - "GitHub.vscode-pull-request-github" | ||||
|  |  | |||
|  | @ -1,147 +1,147 @@ | |||
| { | ||||
|     "id": "doctors", | ||||
|     "name": { | ||||
|         "en": "doctors" | ||||
|   "id": "doctors", | ||||
|   "name": { | ||||
|     "en": "doctors" | ||||
|   }, | ||||
|   "description": { | ||||
|     "en": "This layer shows doctor offices, dentists and other healthcare facilities" | ||||
|   }, | ||||
|   "source": { | ||||
|     "osmTags": { | ||||
|       "or": [ | ||||
|         "amenity=doctors", | ||||
|         "amenity=dentist", | ||||
|         "healthcare=physiotherapist" | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   "title": { | ||||
|     "render": { | ||||
|       "en": "Doctors Office {name}" | ||||
|     }, | ||||
|     "description": { | ||||
|         "en": "This layer shows doctor offices, dentists and other healthcare facilities" | ||||
|     }, | ||||
|     "source": { | ||||
|         "osmTags": { | ||||
|             "or": [ | ||||
|                 "amenity=doctors", | ||||
|                 "amenity=dentist", | ||||
|                 "healthcare=physiotherapist" | ||||
|             ] | ||||
|         } | ||||
|     }, | ||||
|     "title": { | ||||
|         "render": { | ||||
|             "en": "Doctors Office {name}" | ||||
|         }, | ||||
|         "mappings": [ | ||||
|             { | ||||
|                 "if": "amenity=doctors", | ||||
|                 "then": "Doctors Office {name}" | ||||
|             }, | ||||
|             { | ||||
|                 "if": "amenity=dentist", | ||||
|                 "then": "Dentists office {name}" | ||||
|             }, | ||||
|             { | ||||
|                 "if": "healthcare=physiotherapist", | ||||
|                 "then": "Physiotherapists office {name}" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     "minzoom": 13, | ||||
|     "tagRenderings": [ | ||||
|         "images", | ||||
|         "opening_hours", | ||||
|         "phone", | ||||
|         "email", | ||||
|         "website", | ||||
|         { | ||||
|             "question": { | ||||
|                 "en": "What is the name of this doctors place?" | ||||
|             }, | ||||
|             "render": { | ||||
|                 "en": "This doctors place is called {name}" | ||||
|             }, | ||||
|             "freeform": { | ||||
|                 "key": "name" | ||||
|             }, | ||||
|             "id": "name" | ||||
|         }, | ||||
|         { | ||||
|             "condition": "amenity=doctors", | ||||
|             "id": "specialty", | ||||
|             "render": { | ||||
|                 "en": "This doctor is specialized in {healthcare:speciality}" | ||||
|             }, | ||||
|             "question": { | ||||
|                 "en": "What is this doctor specialized in?" | ||||
|             }, | ||||
|             "freeform": { | ||||
|                 "key": "healthcare:speciality" | ||||
|             }, | ||||
|             "mappings": [ | ||||
|                 { | ||||
|                     "if": "healthcare:speciality=general", | ||||
|                     "then": { | ||||
|                         "en": "This is a general practitioner" | ||||
|                     } | ||||
|                 }, | ||||
|                 { | ||||
|                     "if": "healthcare:speciality=gynaecology", | ||||
|                     "then": { | ||||
|                         "en": "This is a gynaecologist" | ||||
|                     } | ||||
|                 }, | ||||
|                 { | ||||
|                     "if": "healthcare:speciality=psychiatry", | ||||
|                     "then": { | ||||
|                         "en": "This is a psychiatrist" | ||||
|                     } | ||||
|                 }, | ||||
|                 { | ||||
|                     "if": "healthcare:speciality=paediatrics", | ||||
|                     "then": { | ||||
|                         "en": "This is a paediatrician" | ||||
|                     } | ||||
|                 } | ||||
|             ] | ||||
|         } | ||||
|     ], | ||||
|     "presets": [ | ||||
|         { | ||||
|             "title": { | ||||
|                 "en": "a doctors office" | ||||
|             }, | ||||
|             "tags": [ | ||||
|                 "amenity=doctors" | ||||
|             ] | ||||
|         }, | ||||
|         { | ||||
|             "title": { | ||||
|                 "en": "a dentists office" | ||||
|             }, | ||||
|             "tags": [ | ||||
|                 "amenity=dentist" | ||||
|             ] | ||||
|         }, | ||||
|         { | ||||
|             "title": { | ||||
|                 "en": "a physiotherapists office" | ||||
|             }, | ||||
|             "tags": [ | ||||
|                 "healthcare=physiotherapist" | ||||
|             ] | ||||
|         } | ||||
|     ], | ||||
|     "filter": [ | ||||
|         { | ||||
|             "id": "opened-now", | ||||
|             "options": [ | ||||
|                 { | ||||
|                     "question": { | ||||
|                         "en": "Opened now" | ||||
|                     }, | ||||
|                     "osmTags": "_isOpen=yes" | ||||
|                 } | ||||
|             ] | ||||
|         } | ||||
|     ], | ||||
|     "mapRendering": [ | ||||
|         { | ||||
|             "icon": { | ||||
|                 "render": "circle:white;./assets/layers/doctors/doctors.svg" | ||||
|             }, | ||||
|             "iconSize": "40,40,center", | ||||
|             "location": [ | ||||
|                 "point", | ||||
|                 "centroid" | ||||
|             ] | ||||
|         } | ||||
|     "mappings": [ | ||||
|       { | ||||
|         "if": "amenity=doctors", | ||||
|         "then": "Doctors Office {name}" | ||||
|       }, | ||||
|       { | ||||
|         "if": "amenity=dentist", | ||||
|         "then": "Dentists office {name}" | ||||
|       }, | ||||
|       { | ||||
|         "if": "healthcare=physiotherapist", | ||||
|         "then": "Physiotherapists office {name}" | ||||
|       } | ||||
|     ] | ||||
|   }, | ||||
|   "minzoom": 13, | ||||
|   "tagRenderings": [ | ||||
|     "images", | ||||
|     "opening_hours", | ||||
|     "phone", | ||||
|     "email", | ||||
|     "website", | ||||
|     { | ||||
|       "question": { | ||||
|         "en": "What is the name of this doctors place?" | ||||
|       }, | ||||
|       "render": { | ||||
|         "en": "This doctors place is called {name}" | ||||
|       }, | ||||
|       "freeform": { | ||||
|         "key": "name" | ||||
|       }, | ||||
|       "id": "name" | ||||
|     }, | ||||
|     { | ||||
|       "condition": "amenity=doctors", | ||||
|       "id": "specialty", | ||||
|       "render": { | ||||
|         "en": "This doctor is specialized in {healthcare:speciality}" | ||||
|       }, | ||||
|       "question": { | ||||
|         "en": "What is this doctor specialized in?" | ||||
|       }, | ||||
|       "freeform": { | ||||
|         "key": "healthcare:speciality" | ||||
|       }, | ||||
|       "mappings": [ | ||||
|         { | ||||
|           "if": "healthcare:speciality=general", | ||||
|           "then": { | ||||
|             "en": "This is a general practitioner" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "healthcare:speciality=gynaecology", | ||||
|           "then": { | ||||
|             "en": "This is a gynaecologist" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "healthcare:speciality=psychiatry", | ||||
|           "then": { | ||||
|             "en": "This is a psychiatrist" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "healthcare:speciality=paediatrics", | ||||
|           "then": { | ||||
|             "en": "This is a paediatrician" | ||||
|           } | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   ], | ||||
|   "presets": [ | ||||
|     { | ||||
|       "title": { | ||||
|         "en": "a doctors office" | ||||
|       }, | ||||
|       "tags": [ | ||||
|         "amenity=doctors" | ||||
|       ] | ||||
|     }, | ||||
|     { | ||||
|       "title": { | ||||
|         "en": "a dentists office" | ||||
|       }, | ||||
|       "tags": [ | ||||
|         "amenity=dentist" | ||||
|       ] | ||||
|     }, | ||||
|     { | ||||
|       "title": { | ||||
|         "en": "a physiotherapists office" | ||||
|       }, | ||||
|       "tags": [ | ||||
|         "healthcare=physiotherapist" | ||||
|       ] | ||||
|     } | ||||
|   ], | ||||
|   "filter": [ | ||||
|     { | ||||
|       "id": "opened-now", | ||||
|       "options": [ | ||||
|         { | ||||
|           "question": { | ||||
|             "en": "Opened now" | ||||
|           }, | ||||
|           "osmTags": "_isOpen=yes" | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   ], | ||||
|   "mapRendering": [ | ||||
|     { | ||||
|       "icon": { | ||||
|         "render": "circle:white;./assets/layers/doctors/doctors.svg" | ||||
|       }, | ||||
|       "iconSize": "40,40,center", | ||||
|       "location": [ | ||||
|         "point", | ||||
|         "centroid" | ||||
|       ] | ||||
|     } | ||||
|   ] | ||||
| } | ||||
|  | @ -164,9 +164,9 @@ | |||
|         "de": "Wie hoch ist der Bordstein?" | ||||
|       }, | ||||
|       "render": { | ||||
|         "en": "Kerb height: {{kerb:height}}", | ||||
|         "nl": "Stoeprandhoogte: {{kerb:height}}", | ||||
|         "de": "Bordsteinhöhe: {{kerb:height}}" | ||||
|         "en": "Kerb height: {kerb:height}", | ||||
|         "nl": "Stoeprandhoogte: {kerb:height}", | ||||
|         "de": "Bordsteinhöhe: {kerb:height}" | ||||
|       }, | ||||
|       "freeform": { | ||||
|         "key": "kerb:height", | ||||
|  |  | |||
|  | @ -26,7 +26,142 @@ | |||
|     "es": "Una capa que muestra aparcamientos para coches" | ||||
|   }, | ||||
|   "tagRenderings": [ | ||||
|     "images" | ||||
|     "images", | ||||
|     { | ||||
|       "id": "parking-type", | ||||
|       "mappings": [ | ||||
|         { | ||||
|           "if": "parking=surface", | ||||
|           "then": { | ||||
|             "en": "This is a surface parking lot", | ||||
|             "nl": "Dit is een bovengronds parkeerterrein" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "parking=street_side", | ||||
|           "then": { | ||||
|             "en": "This is a parking bay next to a street", | ||||
|             "nl": "Dit is een parkeerplek langs een weg" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "parking=underground", | ||||
|           "then": { | ||||
|             "en": "This is an underground parking garage", | ||||
|             "nl": "Dit is een ondergrondse parkeergarage" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "parking=multi-storey", | ||||
|           "then": { | ||||
|             "en": "This is a multi-storey parking garage", | ||||
|             "nl": "Dit is een bovengrondse parkeergarage met meerdere verdiepingen" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "parking=rooftop", | ||||
|           "then": { | ||||
|             "en": "This is a rooftop parking deck", | ||||
|             "nl": "Dit is een parkeerdek op een dak" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "parking=lane", | ||||
|           "then": { | ||||
|             "en": "This is a lane for parking on the road", | ||||
|             "nl": "Dit is een strook voor parkeren op de weg" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "parking=carports", | ||||
|           "then": { | ||||
|             "en": "This is parking covered by carports", | ||||
|             "nl": "Dit is parking overdekt met carports" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "parking=garage_boxes", | ||||
|           "then": { | ||||
|             "en": "This a parking consisting of garage boxes", | ||||
|             "nl": "Dit is een parking bestaande uit garageboxen" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "parking=layby", | ||||
|           "then": { | ||||
|             "en": "This is a parking on a layby", | ||||
|             "nl": "Dit is een parkeerplek op een layby" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "parking=sheds", | ||||
|           "then": { | ||||
|             "en": "This is a parking consisting of sheds", | ||||
|             "nl": "Dit is een parking bestaande uit schuren" | ||||
|           } | ||||
|         } | ||||
|       ], | ||||
|       "question": { | ||||
|         "en": "What kind of parking is this?", | ||||
|         "nl": "Wat voor parking is dit?" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "id": "capacity-disabled", | ||||
|       "freeform": { | ||||
|         "key": "capacity:disabled", | ||||
|         "type": "pnat", | ||||
|         "placeholder": { | ||||
|           "en": "Amount of parking spots reserved for disabled people", | ||||
|           "nl": "Aantal parkeerplaatsen voor gehandicapten" | ||||
|         } | ||||
|       }, | ||||
|       "mappings": [ | ||||
|         { | ||||
|           "if": "capacity:disabled=yes", | ||||
|           "then": { | ||||
|             "en": "There are disabled parking spots, but it is not known how many", | ||||
|             "nl": "Er zijn parkeerplaatsen voor gehandicapten, maar het is niet bekend hoeveel er zijn" | ||||
|           }, | ||||
|           "hideInAnswer": true | ||||
|         }, | ||||
|         { | ||||
|           "if": "capacity:disabled=no", | ||||
|           "then": { | ||||
|             "en": "There are no disabled parking spots", | ||||
|             "nl": "Er zijn geen parkeerplaatsen voor gehandicapten" | ||||
|           }, | ||||
|           "hideInAnswer": true | ||||
|         } | ||||
|       ], | ||||
|       "question": { | ||||
|         "en": "How many disabled parking spots are there at this parking?", | ||||
|         "nl": "Hoeveel parkeerplaatsen voor gehandicapten zijn er op deze parking?" | ||||
|       }, | ||||
|       "render": { | ||||
|         "en": "There are {capacity:disabled} disabled parking spots", | ||||
|         "nl": "Er zijn capacity:disabled} parkeerplaatsen voor gehandicapten" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "id": "capacity", | ||||
|       "freeform": { | ||||
|         "key": "capacity", | ||||
|         "type": "pnat", | ||||
|         "placeholder": { | ||||
|           "en": "Amount of parking spots", | ||||
|           "nl": "Aantal parkeerplaatsen" | ||||
|         } | ||||
|       }, | ||||
|       "question": { | ||||
|         "en": "How many parking spots are there at this parking?", | ||||
|         "nl": "Hoeveel parkeerplaatsen zijn er op deze parking?" | ||||
|       }, | ||||
|       "render": { | ||||
|         "en": "There are {capacity} parking spots", | ||||
|         "nl": "Er zijn {capacity} parkeerplaatsen" | ||||
|       } | ||||
|     } | ||||
|   ], | ||||
|   "presets": [ | ||||
|     { | ||||
|  | @ -52,7 +187,7 @@ | |||
|   }, | ||||
|   "allowMove": { | ||||
|     "enableRelocation": false, | ||||
|     "enableImproveAccuraccy": true | ||||
|     "enableImproveAccuracy": true | ||||
|   }, | ||||
|   "mapRendering": [ | ||||
|     { | ||||
|  |  | |||
|  | @ -7,8 +7,7 @@ | |||
|     "en": "A layer showing pedestrian crossings with rainbow paintings" | ||||
|   }, | ||||
|   "source": { | ||||
|     "osmTags":  | ||||
|       "highway=crossing" | ||||
|     "osmTags": "highway=crossing" | ||||
|   }, | ||||
|   "minzoom": 17, | ||||
|   "title": { | ||||
|  | @ -38,7 +37,7 @@ | |||
|   ], | ||||
|   "tagRenderings": [ | ||||
|     "images", | ||||
|     {  | ||||
|     { | ||||
|       "id": "crossing-with-rainbow", | ||||
|       "question": { | ||||
|         "en": "Does this crossing has rainbow paintings?" | ||||
|  | @ -77,10 +76,12 @@ | |||
|     { | ||||
|       "icon": { | ||||
|         "render": "./assets/themes/rainbow_crossings/crossing.svg", | ||||
|         "mappings": [{ | ||||
|           "if": "crossing:marking=rainbow", | ||||
|           "then": "./assets/themes/rainbow_crossings/logo.svg" | ||||
|         }] | ||||
|         "mappings": [ | ||||
|           { | ||||
|             "if": "crossing:marking=rainbow", | ||||
|             "then": "./assets/themes/rainbow_crossings/logo.svg" | ||||
|           } | ||||
|         ] | ||||
|       }, | ||||
|       "iconSize": "40,40,center", | ||||
|       "location": [ | ||||
|  | @ -89,4 +90,4 @@ | |||
|       ] | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| } | ||||
|  | @ -1,13 +1,19 @@ | |||
| { | ||||
|   "id": "mapcomplete-changes", | ||||
|   "title": { | ||||
|     "en": "Changes made with MapComplete" | ||||
|     "en": "Changes made with MapComplete", | ||||
|     "nl": "Wijzigingen gemaakt met MapComplete", | ||||
|     "de": "Mit MapComplete vorgenommene Änderungen" | ||||
|   }, | ||||
|   "shortDescription": { | ||||
|     "en": "Shows changes made by MapComplete" | ||||
|     "en": "Shows changes made by MapComplete", | ||||
|     "nl": "Toont wijzigingen gemaakt met MapComplete", | ||||
|     "de": "Zeigt die mit MapComplete vorgenommenen Änderungen" | ||||
|   }, | ||||
|   "description": { | ||||
|     "en": "This maps shows all the changes made with MapComplete" | ||||
|     "en": "This maps shows all the changes made with MapComplete", | ||||
|     "nl": "Deze kaart toont alle wijzigingen die met MapComplete werden gemaakt", | ||||
|     "de": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen" | ||||
|   }, | ||||
|   "maintainer": "", | ||||
|   "icon": "./assets/svg/logo.svg", | ||||
|  | @ -22,7 +28,8 @@ | |||
|     { | ||||
|       "id": "mapcomplete-changes", | ||||
|       "name": { | ||||
|         "en": "Changeset centers" | ||||
|         "en": "Changeset centers", | ||||
|         "de": "Zentrum der Änderungssätze" | ||||
|       }, | ||||
|       "minzoom": 0, | ||||
|       "source": { | ||||
|  | @ -36,35 +43,47 @@ | |||
|       ], | ||||
|       "title": { | ||||
|         "render": { | ||||
|           "en": "Changeset for {theme}" | ||||
|           "en": "Changeset for {theme}", | ||||
|           "nl": "Wijzigingset voor {theme}", | ||||
|           "de": "Änderungssatz für {theme}" | ||||
|         } | ||||
|       }, | ||||
|       "description": { | ||||
|         "en": "Shows all MapComplete changes" | ||||
|         "en": "Shows all MapComplete changes", | ||||
|         "nl": "Toont alle wijzigingen met MapComplete", | ||||
|         "de": "Zeigt alle MapComplete Änderungen" | ||||
|       }, | ||||
|       "tagRenderings": [ | ||||
|         { | ||||
|           "id": "render_id", | ||||
|           "render": { | ||||
|             "en": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>" | ||||
|             "en": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>", | ||||
|             "nl": "Wijzigingset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>", | ||||
|             "de": "Änderungssatz <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "id": "contributor", | ||||
|           "render": { | ||||
|             "en": "Change made by <a href='https://openstreetmap.org/user/{_last_edit:contributor}' target='_blank'>{_last_edit:contributor}</a>" | ||||
|             "en": "Change made by <a href='https://openstreetmap.org/user/{_last_edit:contributor}' target='_blank'>{_last_edit:contributor}</a>", | ||||
|             "nl": "Wijziging gemaakt door <a href='https://openstreetmap.org/user/{_last_edit:contributor}' target='_blank'>{_last_edit:contributor}</a>", | ||||
|             "de": "Geändert von <a href='https://openstreetmap.org/user/{_last_edit:contributor}' target='_blank'>{_last_edit:contributor}</a>" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "id": "theme", | ||||
|           "render": { | ||||
|             "en": "Change with theme <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>" | ||||
|             "en": "Change with theme <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>", | ||||
|             "nl": "Wijziging met thema <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>", | ||||
|             "de": "Änderung mit Thema <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>" | ||||
|           }, | ||||
|           "mappings": [ | ||||
|             { | ||||
|               "if": "theme~http.*", | ||||
|               "then": { | ||||
|                 "en": "Change with <b>unofficial</b> theme <a href='https://mapcomplete.osm.be/theme.html?userlayout={theme}'>{theme}</a>" | ||||
|                 "en": "Change with <b>unofficial</b> theme <a href='https://mapcomplete.osm.be/theme.html?userlayout={theme}'>{theme}</a>", | ||||
|                 "nl": "Wijziging met <b>officieus</b> thema <a href='https://mapcomplete.osm.be/theme.html?userlayout={theme}'>{theme}</a>", | ||||
|                 "de": "Änderung mit <b>inoffiziellem</b> Thema <a href='https://mapcomplete.osm.be/theme.html?userlayout={theme}'>{theme}</a>" | ||||
|               } | ||||
|             } | ||||
|           ] | ||||
|  | @ -364,7 +383,9 @@ | |||
|                 } | ||||
|               ], | ||||
|               "question": { | ||||
|                 "en": "Themename contains {search}" | ||||
|                 "en": "Themename contains {search}", | ||||
|                 "nl": "Themanaam bevat {search}", | ||||
|                 "de": "Themenname enthält {search}" | ||||
|               } | ||||
|             } | ||||
|           ] | ||||
|  | @ -380,7 +401,9 @@ | |||
|                 } | ||||
|               ], | ||||
|               "question": { | ||||
|                 "en": "Made by contributor {search}" | ||||
|                 "en": "Made by contributor {search}", | ||||
|                 "nl": "Gemaakt door bijdrager {search}", | ||||
|                 "de": "Erstellt von {search}" | ||||
|               } | ||||
|             } | ||||
|           ] | ||||
|  | @ -396,7 +419,9 @@ | |||
|                 } | ||||
|               ], | ||||
|               "question": { | ||||
|                 "en": "<b>Not</b> made by contributor {search}" | ||||
|                 "en": "<b>Not</b> made by contributor {search}", | ||||
|                 "nl": "<b>Niet</b> gemaakt door bijdrager {search}", | ||||
|                 "de": "<b>Nicht</b> erstellt von {search}" | ||||
|               } | ||||
|             } | ||||
|           ] | ||||
|  | @ -411,7 +436,9 @@ | |||
|           { | ||||
|             "id": "link_to_more", | ||||
|             "render": { | ||||
|               "en": "More statistics can be found <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>" | ||||
|               "en": "More statistics can be found <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>", | ||||
|               "nl": "Meer statistieken kunnen <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>hier</a> gevonden worden", | ||||
|               "de": "Weitere Statistiken finden Sie <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>hier</a>" | ||||
|             } | ||||
|           }, | ||||
|           { | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| { | ||||
|   "id": "onwheels", | ||||
|   "title": { | ||||
|       "en": "OnWheels" | ||||
|     "en": "OnWheels" | ||||
|   }, | ||||
|   "description": { | ||||
|       "en": "On this map, publicly wheelchair accessible places are shown and can be easily added" | ||||
|  | @ -30,11 +30,11 @@ | |||
|     "doctors", | ||||
|     "walls_and_buildings" | ||||
|   ], | ||||
|   "overrideAll" : { | ||||
|     "minzoom" : "15", | ||||
|     "mapRendering" : [ | ||||
|   "overrideAll": { | ||||
|     "minzoom": "15", | ||||
|     "mapRendering": [ | ||||
|       { | ||||
|         "label" : null | ||||
|         "label": null | ||||
|       } | ||||
|     ] | ||||
|   } | ||||
|  |  | |||
|  | @ -1,6 +1,8 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <svg | ||||
|    viewBox="0 0 600 600" | ||||
|    width="600" | ||||
|    height="600" | ||||
|    version="1.1" | ||||
|    id="svg20" | ||||
|    sodipodi:docname="crossing.svg" | ||||
|  |  | |||
| Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB | 
|  | @ -1,5 +1,5 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"> | ||||
| <svg xmlns="http://www.w3.org/2000/svg" width="600" height="600" viewBox="0 0 600 600"> | ||||
|   <rect fill="#750787" width="600" height="600" /> | ||||
|   <rect fill="#004dff" width="500" height="600" /> | ||||
|   <rect fill="#008026" width="400" height="600" /> | ||||
|  |  | |||
| Before Width: | Height: | Size: 733 B After Width: | Height: | Size: 758 B | 
|  | @ -15,7 +15,6 @@ | |||
|   "startZoom": 16, | ||||
|   "widenFactor": 2, | ||||
|   "layers": [ | ||||
|     "rainbow_crossings", | ||||
|     { | ||||
|       "builtin": "rainbow_crossings", | ||||
|       "override": { | ||||
|  | @ -25,11 +24,14 @@ | |||
|         "=presets": [], | ||||
|         "source": { | ||||
|           "osmTags": { | ||||
|             "and+": ["crossing:marking=rainbow"] | ||||
|             "and+": [ | ||||
|               "crossing:marking=rainbow" | ||||
|             ] | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "rainbow_crossings", | ||||
|     { | ||||
|       "builtin": "cycleways_and_roads", | ||||
|       "override": { | ||||
|  | @ -38,6 +40,4 @@ | |||
|       } | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | @ -4122,7 +4122,7 @@ | |||
|                     "placeholder": "Höhe des Bordsteins" | ||||
|                 }, | ||||
|                 "question": "Wie hoch ist der Bordstein?", | ||||
|                 "render": "Bordsteinhöhe: {{kerb:height}}" | ||||
|                 "render": "Bordsteinhöhe: {kerb:height}" | ||||
|             }, | ||||
|             "kerb-type": { | ||||
|                 "mappings": { | ||||
|  |  | |||
|  | @ -3256,6 +3256,7 @@ | |||
|         "name": "Direction visualization" | ||||
|     }, | ||||
|     "doctors": { | ||||
|         "description": "This layer shows doctor offices, dentists and other healthcare facilities", | ||||
|         "filter": { | ||||
|             "0": { | ||||
|                 "options": { | ||||
|  | @ -3278,6 +3279,10 @@ | |||
|             } | ||||
|         }, | ||||
|         "tagRenderings": { | ||||
|             "name": { | ||||
|                 "question": "What is the name of this doctors place?", | ||||
|                 "render": "This doctors place is called {name}" | ||||
|             }, | ||||
|             "specialty": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|  | @ -4188,7 +4193,7 @@ | |||
|                     "placeholder": "Height of the kerb" | ||||
|                 }, | ||||
|                 "question": "What is the height of this kerb?", | ||||
|                 "render": "Kerb height: {{kerb:height}}" | ||||
|                 "render": "Kerb height: {kerb:height}" | ||||
|             }, | ||||
|             "kerb-type": { | ||||
|                 "mappings": { | ||||
|  | @ -4685,6 +4690,65 @@ | |||
|                 "title": "a car parking" | ||||
|             } | ||||
|         }, | ||||
|         "tagRenderings": { | ||||
|             "capacity": { | ||||
|                 "freeform": { | ||||
|                     "placeholder": "Amount of parking spots" | ||||
|                 }, | ||||
|                 "question": "How many parking spots are there at this parking?", | ||||
|                 "render": "There are {capacity} parking spots" | ||||
|             }, | ||||
|             "capacity-disabled": { | ||||
|                 "freeform": { | ||||
|                     "placeholder": "Amount of parking spots reserved for disabled people" | ||||
|                 }, | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "There are disabled parking spots, but it is not known how many" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "There are no disabled parking spots" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "How many disabled parking spots are there at this parking?", | ||||
|                 "render": "There are {capacity:disabled} disabled parking spots" | ||||
|             }, | ||||
|             "parking-type": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "This is a surface parking lot" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "This is a parking bay next to a street" | ||||
|                     }, | ||||
|                     "2": { | ||||
|                         "then": "This is an underground parking garage" | ||||
|                     }, | ||||
|                     "3": { | ||||
|                         "then": "This is a multi-storey parking garage" | ||||
|                     }, | ||||
|                     "4": { | ||||
|                         "then": "This is a rooftop parking deck" | ||||
|                     }, | ||||
|                     "5": { | ||||
|                         "then": "This is a lane for parking on the road" | ||||
|                     }, | ||||
|                     "6": { | ||||
|                         "then": "This is parking covered by carports" | ||||
|                     }, | ||||
|                     "7": { | ||||
|                         "then": "This a parking consisting of garage boxes" | ||||
|                     }, | ||||
|                     "8": { | ||||
|                         "then": "This is a parking on a layby" | ||||
|                     }, | ||||
|                     "9": { | ||||
|                         "then": "This is a parking consisting of sheds" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "What kind of parking is this?" | ||||
|             } | ||||
|         }, | ||||
|         "title": { | ||||
|             "render": "Car parking" | ||||
|         } | ||||
|  | @ -4990,6 +5054,35 @@ | |||
|             "render": "Bookcase" | ||||
|         } | ||||
|     }, | ||||
|     "rainbow_crossings": { | ||||
|         "description": "A layer showing pedestrian crossings with rainbow paintings", | ||||
|         "name": "Crossings with rainbow paintings", | ||||
|         "presets": { | ||||
|             "0": { | ||||
|                 "description": "Pedestrian crossing", | ||||
|                 "title": "a crossing" | ||||
|             } | ||||
|         }, | ||||
|         "tagRenderings": { | ||||
|             "crossing-with-rainbow": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "This crossing has rainbow paintings" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "No rainbow paintings here" | ||||
|                     }, | ||||
|                     "2": { | ||||
|                         "then": "No rainbow paintings here" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "Does this crossing has rainbow paintings?" | ||||
|             } | ||||
|         }, | ||||
|         "title": { | ||||
|             "render": "Crossing" | ||||
|         } | ||||
|     }, | ||||
|     "recycling": { | ||||
|         "description": "A layer with recycling containers and centres", | ||||
|         "filter": { | ||||
|  |  | |||
|  | @ -4053,7 +4053,7 @@ | |||
|                     "placeholder": "Hoogte van de stoeprand" | ||||
|                 }, | ||||
|                 "question": "Hoe hoog is deze stoeprand?", | ||||
|                 "render": "Stoeprandhoogte: {{kerb:height}}" | ||||
|                 "render": "Stoeprandhoogte: {kerb:height}" | ||||
|             }, | ||||
|             "kerb-type": { | ||||
|                 "mappings": { | ||||
|  | @ -4535,6 +4535,65 @@ | |||
|                 "title": "een parking voor auto's" | ||||
|             } | ||||
|         }, | ||||
|         "tagRenderings": { | ||||
|             "capacity": { | ||||
|                 "freeform": { | ||||
|                     "placeholder": "Aantal parkeerplaatsen" | ||||
|                 }, | ||||
|                 "question": "Hoeveel parkeerplaatsen zijn er op deze parking?", | ||||
|                 "render": "Er zijn {capacity} parkeerplaatsen" | ||||
|             }, | ||||
|             "capacity-disabled": { | ||||
|                 "freeform": { | ||||
|                     "placeholder": "Aantal parkeerplaatsen voor gehandicapten" | ||||
|                 }, | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Er zijn parkeerplaatsen voor gehandicapten, maar het is niet bekend hoeveel er zijn" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "Er zijn geen parkeerplaatsen voor gehandicapten" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "Hoeveel parkeerplaatsen voor gehandicapten zijn er op deze parking?", | ||||
|                 "render": "Er zijn {capacity:disabled} parkeerplaatsen voor gehandicapten" | ||||
|             }, | ||||
|             "parking-type": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Dit is een bovengronds parkeerterrein" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "Dit is een parkeerplek langs een weg" | ||||
|                     }, | ||||
|                     "2": { | ||||
|                         "then": "Dit is een ondergrondse parkeergarage" | ||||
|                     }, | ||||
|                     "3": { | ||||
|                         "then": "Dit is een bovengrondse parkeergarage met meerdere verdiepingen" | ||||
|                     }, | ||||
|                     "4": { | ||||
|                         "then": "Dit is een parkeerdek op een dak" | ||||
|                     }, | ||||
|                     "5": { | ||||
|                         "then": "Dit is een strook voor parkeren op de weg" | ||||
|                     }, | ||||
|                     "6": { | ||||
|                         "then": "Dit is parking overdekt met carports" | ||||
|                     }, | ||||
|                     "7": { | ||||
|                         "then": "Dit is een parking bestaande uit garageboxen" | ||||
|                     }, | ||||
|                     "8": { | ||||
|                         "then": "Dit is een parkeerplek op een layby" | ||||
|                     }, | ||||
|                     "9": { | ||||
|                         "then": "Dit is een parking bestaande uit schuren" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "Wat voor parking is dit?" | ||||
|             } | ||||
|         }, | ||||
|         "title": { | ||||
|             "render": "Parking voor auto's" | ||||
|         } | ||||
|  | @ -6434,4 +6493,4 @@ | |||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
|  |  | |||
|  | @ -741,6 +741,10 @@ | |||
|         "shortDescription": "Publicly accessible towers to enjoy the view", | ||||
|         "title": "Observation towers" | ||||
|     }, | ||||
|     "onwheels": { | ||||
|         "description": "On this map, publicly weelchair accessible places are shown and can be easily added", | ||||
|         "title": "OnWheels" | ||||
|     }, | ||||
|     "openwindpowermap": { | ||||
|         "description": "A map for showing and editing wind turbines.", | ||||
|         "title": "OpenWindPowerMap" | ||||
|  | @ -863,6 +867,10 @@ | |||
|         "shortDescription": "A map showing postboxes and post offices", | ||||
|         "title": "Postbox and Post Office Map" | ||||
|     }, | ||||
|     "rainbow_crossings": { | ||||
|         "description": "On this map, rainbow-painted pedestrian crossings are shown and can be easily added", | ||||
|         "title": "Rainbow pedestrian crossings" | ||||
|     }, | ||||
|     "shops": { | ||||
|         "description": "On this map, one can mark basic information about shops, add opening hours and phone numbers", | ||||
|         "shortDescription": "An editable map with basic shop information", | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| { | ||||
|   "name": "index", | ||||
|   "name": "MapComplete", | ||||
|   "short_name": "MapComplete", | ||||
|   "start_url": "index.html", | ||||
|   "lang": "en", | ||||
|  |  | |||
|  | @ -36,7 +36,7 @@ | |||
|     "generate:schemas": "ts2json-schema -p Models/ThemeConfig/Json/ -o Docs/Schemas/ -t tsconfig.json -R . -m \".*ConfigJson\" && ts-node scripts/fixSchemas.ts ", | ||||
|     "generate:service-worker": "tsc service-worker.ts && git_hash=$(git rev-parse HEAD) && sed -i \"s/GITHUB-COMMIT/$git_hash/\" service-worker.js", | ||||
|     "optimize-images": "cd assets/generated/ &&  find -name '*.png' -exec optipng '{}' \\; && echo 'PNGs are optimized'", | ||||
|     "reset:layeroverview": "echo {\\\"layers\\\":[], \\\"themes\\\":[]} > ./assets/generated/known_layers_and_themes.json && echo {\\\"layers\\\": []} > ./assets/generated/known_layers.json && rm ./asssets/generated/layers/* && rm ./assets/generated/themes/*", | ||||
|     "reset:layeroverview": "echo {\\\"layers\\\":[], \\\"themes\\\":[]} > ./assets/generated/known_layers_and_themes.json && echo {\\\"layers\\\": []} > ./assets/generated/known_layers.json && rm -f ./asssets/generated/layers/*.json && rm -f ./assets/generated/themes/*.json && npm run generate:layeroverview && ts-node scripts/generateLayerOverview.ts --force", | ||||
|     "generate": "mkdir -p ./assets/generated; npm run reset:layeroverview; npm run generate:images; npm run generate:charging-stations; npm run generate:translations; npm run generate:licenses; npm run generate:layeroverview; npm run generate:service-worker", | ||||
|     "generate:charging-stations": "cd ./assets/layers/charging_station && ts-node csvToJson.ts && cd -", | ||||
|     "prepare-deploy": "npm run generate:service-worker && ./scripts/build.sh", | ||||
|  |  | |||
|  | @ -165,7 +165,7 @@ async function createManifest(layout: LayoutConfig, alreadyWritten: string[]): P | |||
|     const ogDescr = Translations.T(layout.description ?? "").txt; | ||||
| 
 | ||||
|     const manifest = { | ||||
|         name: name, | ||||
|         name: ogTitle, | ||||
|         short_name: ogTitle, | ||||
|         start_url: `${layout.id.toLowerCase()}.html`, | ||||
|         lang: "en", | ||||
|  | @ -257,7 +257,7 @@ async function createLandingPage(layout: LayoutConfig, manifest, whiteIcons, alr | |||
|         .replace(/<!-- THEME-SPECIFIC -->.*<!-- THEME-SPECIFIC-END-->/s, themeSpecific) | ||||
|         .replace(/<!-- DESCRIPTION START -->.*<!-- DESCRIPTION END -->/s, layout.shortDescription.textFor(targetLanguage)) | ||||
|         .replace("<script src=\"./index.ts\"></script>", `<script src='./index_${layout.id}.ts'></script>`); | ||||
| 
 | ||||
| 0 | ||||
|     try { | ||||
|         output = output | ||||
|             .replace(/<!-- DECORATION 0 START -->.*<!-- DECORATION 0 END -->/s, `<img src='${icon}' width="100%" height="100%">`) | ||||
|  | @ -320,10 +320,9 @@ async function main(): Promise<void> { | |||
|         writeFile(manifestLocation, manif, err); | ||||
| 
 | ||||
|         // Create a landing page for the given theme
 | ||||
|         createLandingPage(layout, manifest, whiteIcons, alreadyWritten).then(landing => { | ||||
|             writeFile(enc(layout.id) + ".html", landing, err) | ||||
|         }); | ||||
|         createIndexFor(layout) | ||||
|         const landing = await createLandingPage(layout, manifest, whiteIcons, alreadyWritten) | ||||
|         writeFile(enc(layout.id) + ".html", landing, err) | ||||
|         await createIndexFor(layout) | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -71,7 +71,7 @@ self.addEventListener('fetch', | |||
|                 event.respondWith(new Response(JSON.stringify({"service-worker-version": version}))); | ||||
|                 return | ||||
|             } | ||||
|             const shouldBeCached = origin.host === requestUrl.host && origin.host !== "127.0.0.1:1234"  && origin.host !== "localhost" && !origin.host.endsWith(".gitpod.io") | ||||
|             const shouldBeCached = origin.host === requestUrl.host && origin.hostname !== "127.0.0.1"  && origin.hostname !== "localhost" && !origin.host.endsWith(".gitpod.io") | ||||
|             if (!shouldBeCached) { | ||||
|                 console.log("Not intercepting ", requestUrl.toString(), origin.host, requestUrl.host) | ||||
|                 // We return _without_ calling event.respondWith, which signals the browser that it'll have to handle it himself
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue