From f9e68f5710493a8defeb7cbe28f3c35e6530443f Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Wed, 6 Apr 2022 21:36:46 +0200 Subject: [PATCH 01/71] Ignore VScode settings --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f3b001674..5c20f9502 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ Folder.DotSettings.user index_*.ts .~lock.* *.doctest.ts +.vscode \ No newline at end of file From b4052b8f6355a2c6c8f5cbdce803d81e606807d3 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Wed, 6 Apr 2022 21:37:31 +0200 Subject: [PATCH 02/71] First version of transit/bus theme --- assets/layers/shelter/license_info.json | 12 + assets/layers/shelter/shelter.json | 88 ++++++ assets/layers/shelter/shelter.svg | 1 + assets/layers/shops/shops.json | 44 +-- .../layers/transit_routes/transit_routes.json | 141 ++++++++++ assets/layers/transit_stops/bus_stop.svg | 3 + assets/layers/transit_stops/license_info.json | 15 + .../layers/transit_stops/transit_stops.json | 260 ++++++++++++++++++ .../mapcomplete-changes.json | 8 +- assets/themes/transit/transit.json | 51 ++++ langs/layers/en.json | 183 ++++++++++++ langs/themes/en.json | 4 + 12 files changed, 788 insertions(+), 22 deletions(-) create mode 100644 assets/layers/shelter/license_info.json create mode 100644 assets/layers/shelter/shelter.json create mode 100644 assets/layers/shelter/shelter.svg create mode 100644 assets/layers/transit_routes/transit_routes.json create mode 100644 assets/layers/transit_stops/bus_stop.svg create mode 100644 assets/layers/transit_stops/license_info.json create mode 100644 assets/layers/transit_stops/transit_stops.json create mode 100644 assets/themes/transit/transit.json diff --git a/assets/layers/shelter/license_info.json b/assets/layers/shelter/license_info.json new file mode 100644 index 000000000..6dab5c0d0 --- /dev/null +++ b/assets/layers/shelter/license_info.json @@ -0,0 +1,12 @@ +[ + { + "path": "shelter.svg", + "license": "MIT", + "authors": [ + "Diemen Design" + ], + "sources": [ + "https://icon-icons.com/icon/map-shelter/158301" + ] + } +] \ No newline at end of file diff --git a/assets/layers/shelter/shelter.json b/assets/layers/shelter/shelter.json new file mode 100644 index 000000000..803b6ef42 --- /dev/null +++ b/assets/layers/shelter/shelter.json @@ -0,0 +1,88 @@ +{ + "id": "shelter", + "name": { + "en": "Shelter" + }, + "description": { + "en": "Layer showing shelter structures" + }, + "source": { + "osmTags": { + "and": [ + "amenity=shelter" + ] + } + }, + "minzoom": 13, + "title": { + "render": { + "en": "Shelter" + } + }, + "mapRendering": [ + { + "location": [ + "point", + "centroid" + ], + "icon": "./assets/layers/shelter/shelter.svg" + } + ], + "tagRenderings": [ + { + "id": "shelter-type", + "mappings": [ + { + "if": "shelter_type=public_transport", + "then": { + "en": "This is a shelter at a public transport stop." + } + }, + { + "if": "shelter_type=picnic_shelter", + "then": { + "en": "This is a shelter protecting from rain at a picnic site." + } + }, + { + "if": "shelter_type=gazebo", + "then": { + "en": "This is a gazebo." + } + }, + { + "if": "shelter_type=weather_shelter", + "then": { + "en": "This is a small shelter, primarily intended for short breaks. Usually found in the mountains or alongside roads." + } + }, + { + "if": "shelter_type=lean_to", + "then": { + "en": "This is a shed with 3 walls, primarily intended for camping." + } + }, + { + "if": "shelter_type=pavilion", + "then": { + "en": "This is a pavilion" + } + }, + { + "if": "shelter_type=basic_hut", + "then": "This is a basic hut, providing basic shelter and sleeping facilities." + } + ], + "question": { + "en": "What kind of shelter is this?" + }, + "render": { + "en": "Shelter type: {shelter_type}" + }, + "freeform": { + "key": "shelter_type", + "type": "string" + } + } + ] +} \ No newline at end of file diff --git a/assets/layers/shelter/shelter.svg b/assets/layers/shelter/shelter.svg new file mode 100644 index 000000000..266a9eb7c --- /dev/null +++ b/assets/layers/shelter/shelter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/layers/shops/shops.json b/assets/layers/shops/shops.json index 9f5a32dce..401fd0c01 100644 --- a/assets/layers/shops/shops.json +++ b/assets/layers/shops/shops.json @@ -412,29 +412,37 @@ "filter": [ { "id": "shop-type", - "options": [{ - "fields": [{ - "name": "search", - "type": "string" - }], - "osmTags": "shop~^.*{search}.*$", - "question": { - "en": "Only show shops selling {search}" + "options": [ + { + "fields": [ + { + "name": "search", + "type": "string" + } + ], + "osmTags": "shop~^.*{search}.*$", + "question": { + "en": "Only show shops selling {search}" + } } - } ] }, { "id": "shop-name", - "options": [{ - "fields": [{ - "name": "search", - "type": "string" - }], - "osmTags": "name~^.*{search}.*$", - "question": { - "en": "Only show shops with name {search}" + "options": [ + { + "fields": [ + { + "name": "search", + "type": "string" + } + ], + "osmTags": "name~^.*{search}.*$", + "question": { + "en": "Only show shops with name {search}" + } } - }]} + ] + } ] } \ No newline at end of file diff --git a/assets/layers/transit_routes/transit_routes.json b/assets/layers/transit_routes/transit_routes.json new file mode 100644 index 000000000..b29464746 --- /dev/null +++ b/assets/layers/transit_routes/transit_routes.json @@ -0,0 +1,141 @@ +{ + "id": "transit_routes", + "name": { + "en": "Bus lines" + }, + "description": { + "en": "Layer showing bus lines" + }, + "source": { + "osmTags": { + "and": [ + "type=route", + "route=bus" + ] + } + }, + "minzoom": 15, + "title": { + "render": { + "en": "Bus line" + }, + "mappings": [ + { + "if": "name~*", + "then": { + "en": "{name}" + } + } + ] + }, + "mapRendering": [ + { + "color": { + "render": { + "en": "#ff0000" + }, + "mappings": [ + { + "if": "colour~*", + "then": "{colour}" + } + ] + } + } + ], + "tagRenderings": [ + { + "id": "name", + "freeform": { + "key": "name", + "type": "string", + "placeholder": "Bus XX: From => Via => To" + }, + "render": "{name}", + "question": { + "en": "What is the name for this bus line? (i.e. Bus XX: From => Via => To)" + } + }, + { + "id": "from", + "freeform": { + "key": "from", + "type": "string", + "placeholder": "City, Stop Name" + }, + "render": { + "en": "This bus line begins at {from}" + }, + "question": { + "en": "What is the starting point for this bus line?" + } + }, + { + "id": "via", + "freeform": { + "key": "via", + "type": "string", + "placeholder": "City, Stop Name" + }, + "render": { + "en": "This bus line goes via {via}" + }, + "question": { + "en": "What is the via point for this bus line?" + } + }, + { + "id": "to", + "freeform": { + "key": "to", + "type": "string", + "placeholder": "City, Stop Name" + }, + "render": { + "en": "This bus line ends at {to}" + }, + "question": { + "en": "What is the ending point for this bus line?" + } + }, + { + "id": "colour", + "freeform": { + "key": "colour", + "type": "color" + }, + "render": { + "en": "This bus line has the color {colour}" + }, + "question": { + "en": "What is the colour for this bus line?" + } + }, + { + "id": "network", + "freeform": { + "key": "network", + "type": "string" + }, + "render": { + "en": "This bus line is part of the {network} network" + }, + "question": { + "en": "What network does this bus line belong to?" + } + }, + { + "id": "operator", + "freeform": { + "key": "operator", + "type": "string" + }, + "render": { + "en": "This bus line is operated by {operator}" + }, + "question": { + "en": "What company operates this bus line?" + } + } + ] +} \ No newline at end of file diff --git a/assets/layers/transit_stops/bus_stop.svg b/assets/layers/transit_stops/bus_stop.svg new file mode 100644 index 000000000..1b061c00b --- /dev/null +++ b/assets/layers/transit_stops/bus_stop.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/layers/transit_stops/license_info.json b/assets/layers/transit_stops/license_info.json new file mode 100644 index 000000000..47a736deb --- /dev/null +++ b/assets/layers/transit_stops/license_info.json @@ -0,0 +1,15 @@ +[ + { + "path": "bus_stop.svg", + "license": "CC0", + "authors": [ + "Andy Allan", + "Michael Glanznig", + "Paul Norman", + "Paul Dicker" + ], + "sources": [ + "https://github.com/gravitystorm/openstreetmap-carto/blob/master/symbols/highway/bus_stop.svg" + ] + } +] \ No newline at end of file diff --git a/assets/layers/transit_stops/transit_stops.json b/assets/layers/transit_stops/transit_stops.json new file mode 100644 index 000000000..43daa2ada --- /dev/null +++ b/assets/layers/transit_stops/transit_stops.json @@ -0,0 +1,260 @@ +{ + "id": "transit_stops", + "name": { + "en": "Transit Stops" + }, + "description": { + "en": "Layer showing different types of transit stops." + }, + "source": { + "osmTags": { + "or": [ + "highway=bus_stop" + ] + } + }, + "minzoom": 15, + "title": { + "render": { + "en": "Transit Stop" + }, + "mappings": [ + { + "if": "name~*", + "then": { + "en": "Stop {name}" + } + } + ] + }, + "mapRendering": [ + { + "location": [ + "point", + "centroid" + ], + "icon": { + "render": "./assets/layers/transit_stops/bus_stop.svg", + "mappings": [] + }, + "label": "
{name}
" + } + ], + "calculatedTags": [ + "_routes=feat.memberships()", + "_contained_routes_properties=feat.memberships().map(p => {return {id: p.relation.id, name: p.relation.properties.name} }).filter((v,i,a)=>a.findIndex(t=>(JSON.stringify(t) === JSON.stringify(v)))===i)", + "_contained_route_ids=JSON.parse(feat.properties._contained_routes_properties ?? '[]').map(p => p.id)", + "_contained_routes=JSON.parse(feat.properties._contained_routes_properties ?? '[]').map(p => `
  • ${p.name ?? 'bus route'}
  • `).join('')", + "_contained_routes_count=JSON.parse(feat.properties._contained_routes_properties ?? '[]').length" + ], + "tagRenderings": [ + { + "id": "stop_name", + "render": { + "en": "This stop is called {name}" + }, + "freeform": { + "key": "name", + "type": "string", + "addExtraTags": [ + "noname=" + ], + "placeholder": { + "en": "Name of the stop" + } + }, + "mappings": [ + { + "if": { + "and": [ + "noname=yes", + "name=" + ] + }, + "then": { + "en": "This stop has no name" + } + } + ], + "question": { + "en": "What is the name of this stop?" + }, + "placeholder": "Name of the stop" + }, + "images", + { + "id": "shelter", + "mappings": [ + { + "if": "shelter=yes", + "then": { + "en": "This stop has a shelter" + } + }, + { + "if": "shelter=no", + "then": { + "en": "This stop does not have a shelter" + } + }, + { + "if": "shelter=separate", + "then": { + "en": "This stop has a shelter, that's separately mapped" + }, + "hideInAnswer": true + } + ], + "question": { + "en": "Does this stop have a shelter?" + } + }, + { + "id": "bench", + "mappings": [ + { + "if": "bench=yes", + "then": { + "en": "This stop has a bench" + } + }, + { + "if": "bench=no", + "then": { + "en": "This stop does not have a bench" + } + }, + { + "if": "bench=separate", + "then": { + "en": "This stop has a bench, that's separately mapped" + }, + "hideInAnswer": true + } + ], + "question": { + "en": "Does this stop have a bench?" + } + }, + { + "id": "bin", + "mappings": [ + { + "if": "bin=yes", + "then": { + "en": "This stop has a bin" + } + }, + { + "if": "bin=no", + "then": { + "en": "This stop does not have a bin" + } + }, + { + "if": "bin=separate", + "then": { + "en": "This stop has a bin, that's separately mapped" + }, + "hideInAnswer": true + } + ], + "question": { + "en": "Does this stop have a bin?" + } + }, + "wheelchair-access", + { + "id": "tactile_paving", + "mappings": [ + { + "if": "tactile_paving=yes", + "then": { + "en": "This stop has tactile paving" + } + }, + { + "if": "tactile_paving=no", + "then": { + "en": "This stop does not have tactile paving" + } + } + ], + "question": { + "en": "Does this stop have tactile paving?" + } + }, + { + "id": "lit", + "mappings": [ + { + "if": "lit=yes", + "then": { + "en": "This stop is lit" + } + }, + { + "if": "lit=no", + "then": { + "en": "This stop is not lit" + } + } + ], + "question": { + "en": "Is this stop lit?" + } + }, + { + "id": "departures_board", + "mappings": [ + { + "if": "departures_board=yes", + "then": { + "en": "This stop has a departures board of unknown type" + }, + "hideInAnswer": true + }, + { + "if": "departures_board=realtime", + "then": { + "en": "This stop has a board showing realtime departure information" + } + }, + { + "if": "passenger_information_display=yes", + "then": { + "en": "This stop has a board showing realtime departure information" + }, + "hideInAnswer": true + }, + { + "if": "departures_board=timetable", + "then": { + "en": "This stop has a timetable showing regular departures" + } + }, + { + "if": "departures_board=interval", + "then": { + "en": "This stop has a timetable containing just the interval between departures" + } + }, + { + "if": "departures_board=no", + "then": { + "en": "This stop does not have a departures board" + } + } + ] + }, + { + "render": { + "en": "

    {_contained_routes_count} routes stop at this stop

    " + }, + "condition": "_contained_routes~*", + "id": "contained_routes" + } + ], + "filter": [], + "allowMove": false +} \ No newline at end of file diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index b03b39e7a..bb65497b7 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -231,10 +231,6 @@ "if": "theme=openwindpowermap", "then": "./assets/themes/openwindpowermap/logo.svg" }, - { - "if": "theme=parking-lanes", - "then": "./assets/svg/bug.svg" - }, { "if": "theme=parkings", "then": "./assets/themes/parkings/parkings.svg" @@ -295,6 +291,10 @@ "if": "theme=toilets", "then": "./assets/themes/toilets/toilets.svg" }, + { + "if": "theme=transit", + "then": "./assets/layers/transit_stops/bus_stop.svg" + }, { "if": "theme=trees", "then": "./assets/themes/trees/logo.svg" diff --git a/assets/themes/transit/transit.json b/assets/themes/transit/transit.json new file mode 100644 index 000000000..271510c2f --- /dev/null +++ b/assets/themes/transit/transit.json @@ -0,0 +1,51 @@ +{ + "id": "transit", + "maintainer": "Robin van der Linde", + "version": "20220406", + "title": { + "en": "Bus routes" + }, + "description": { + "en": "Plan your trip with the help of the public transport system." + }, + "icon": "./assets/layers/transit_stops/bus_stop.svg", + "startZoom": 20, + "startLat": 53.21333, + "startLon": 6.56963, + "layers": [ + "transit_stops", + "transit_routes", + { + "builtin": "bike_parking", + "override": { + "minzoom": 19, + "minzoomVisible": 19 + } + }, + { + "builtin": "parking", + "override": { + "minzoom": 19, + "minzoomVisible": 19 + } + }, + { + "builtin": "shelter", + "override": { + "minzoom": 19, + "minzoomVisible": 19, + "source": { + "osmTags": { + "and": [ + "amenity=shelter", + "shelter_type=public_transport" + ] + } + } + }, + "hideTagRenderingsWithLabels": [ + "shelter-type" + ] + } + ] +} \ No newline at end of file diff --git a/langs/layers/en.json b/langs/layers/en.json index ddeee9e6f..dd0c9fc87 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -4400,6 +4400,39 @@ "render": "Recycling facility" } }, + "shelter": { + "description": "Layer showing shelter structures", + "name": "Shelter", + "tagRenderings": { + "shelter-type": { + "mappings": { + "0": { + "then": "This is a shelter at a public transport stop." + }, + "1": { + "then": "This is a shelter protecting from rain at a picnic site." + }, + "2": { + "then": "This is a gazebo." + }, + "3": { + "then": "This is a small shelter, primarily intended for short breaks. Usually found in the mountains or alongside roads." + }, + "4": { + "then": "This is a shed with 3 walls, primarily intended for camping." + }, + "5": { + "then": "This is a pavilion" + } + }, + "question": "What kind of shelter is this?", + "render": "Shelter type: {shelter_type}" + } + }, + "title": { + "render": "Shelter" + } + }, "shops": { "deletion": { "extraDeleteReasons": { @@ -4409,6 +4442,22 @@ } }, "description": "A shop", + "filter": { + "0": { + "options": { + "0": { + "question": "Only show shops selling {search}" + } + } + }, + "1": { + "options": { + "0": { + "question": "Only show shops with name {search}" + } + } + } + }, "name": "Shop", "presets": { "0": { @@ -5082,6 +5131,140 @@ "render": "Trail" } }, + "transit_routes": { + "description": "Layer showing bus lines", + "mapRendering": { + "0": { + "color": { + "render": "#ff0000" + } + } + }, + "name": "Bus lines", + "title": { + "mappings": { + "0": { + "then": "{name}" + } + }, + "render": "Bus line" + } + }, + "transit_stops": { + "description": "Layer showing different types of transit stops.", + "name": "Transit Stops", + "tagRenderings": { + "bench": { + "mappings": { + "0": { + "then": "This stop has a bench" + }, + "1": { + "then": "This stop does not have a bench" + }, + "2": { + "then": "This stop has a bench, that's separately mapped" + } + }, + "question": "Does this stop have a bench?" + }, + "bin": { + "mappings": { + "0": { + "then": "This stop has a bin" + }, + "1": { + "then": "This stop does not have a bin" + }, + "2": { + "then": "This stop has a bin, that's separately mapped" + } + }, + "question": "Does this stop have a bin?" + }, + "contained_routes": { + "render": "

    {_contained_routes_count} routes stop at this stop

    " + }, + "departures_board": { + "mappings": { + "0": { + "then": "This stop has a departures board of unknown type" + }, + "1": { + "then": "This stop has a board showing realtime departure information" + }, + "2": { + "then": "This stop has a board showing realtime departure information" + }, + "3": { + "then": "This stop has a timetable showing regular departures" + }, + "4": { + "then": "This stop has a timetable containing just the interval between departures" + }, + "5": { + "then": "This stop does not have a departures board" + } + } + }, + "lit": { + "mappings": { + "0": { + "then": "This stop is lit" + }, + "1": { + "then": "This stop is not lit" + } + }, + "question": "Is this stop lit?" + }, + "shelter": { + "mappings": { + "0": { + "then": "This stop has a shelter" + }, + "1": { + "then": "This stop does not have a shelter" + }, + "2": { + "then": "This stop has a shelter, that's separately mapped" + } + }, + "question": "Does this stop have a shelter?" + }, + "stop_name": { + "freeform": { + "placeholder": "Name of the stop" + }, + "mappings": { + "0": { + "then": "This stop has no name" + } + }, + "question": "What is the name of this stop?", + "render": "This stop is called {name}" + }, + "tactile_paving": { + "mappings": { + "0": { + "then": "This stop has tactile paving" + }, + "1": { + "then": "This stop does not have tactile paving" + } + }, + "question": "Does this stop have tactile paving?" + } + }, + "title": { + "mappings": { + "0": { + "then": "Stop {name}" + } + }, + "render": "Transit Stop" + } + }, "tree_node": { "description": "A layer showing trees", "name": "Tree", diff --git a/langs/themes/en.json b/langs/themes/en.json index 80a08d43f..cd6a854a6 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -1312,6 +1312,10 @@ "description": "A map of public toilets", "title": "Open Toilet Map" }, + "transit": { + "description": "Transit", + "title": "Transit" + }, "trees": { "description": "Map all the trees!", "shortDescription": "Map all the trees", From 4a224e53969ef9a80ba239e3869efa4fea16cd8c Mon Sep 17 00:00:00 2001 From: paunofu Date: Sat, 2 Jul 2022 10:15:23 +0000 Subject: [PATCH 03/71] Translated using Weblate (Catalan) Currently translated at 61.6% (414 of 672 strings) Translation: MapComplete/Core Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/ca/ --- langs/ca.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/langs/ca.json b/langs/ca.json index 7c2b0f105..e54fa66db 100644 --- a/langs/ca.json +++ b/langs/ca.json @@ -252,6 +252,9 @@ }, "searchWikidata": "Cercar a Wikidata", "wikipediaboxTitle": "Viquipèdia" + }, + "welcomeExplanation": { + "addNew": "Toqueu el mapa per afegir un nou PDI." } }, "image": { @@ -273,7 +276,10 @@ "uploadMultipleDone": "{count} imatges afegides. Gràcies per ajudar.", "uploadingMultiple": "Pujant {count} imatges…", "uploadingPicture": "Pujant la teva imatge…", - "willBePublished": "La teva foto serà publicada: " + "willBePublished": "La teva foto serà publicada: ", + "nearbyPictures": { + "browseNearby": "Cerca imatges properes…" + } }, "importHelper": { "introduction": { From 85b0e1edc6c51b02d5050afd36efc7070de216b8 Mon Sep 17 00:00:00 2001 From: paunofu Date: Sat, 2 Jul 2022 09:47:24 +0000 Subject: [PATCH 04/71] Translated using Weblate (Catalan) Currently translated at 36.3% (117 of 322 strings) Translation: MapComplete/themes Translate-URL: https://hosted.weblate.org/projects/mapcomplete/themes/ca/ --- langs/themes/ca.json | 79 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 7 deletions(-) diff --git a/langs/themes/ca.json b/langs/themes/ca.json index 29777fa7a..f04841f3a 100644 --- a/langs/themes/ca.json +++ b/langs/themes/ca.json @@ -4,7 +4,7 @@ "title": "Mapa obert de desfibril·ladors (DEA)" }, "artwork": { - "description": "Benvingut a Open Artwork Map, un mapa d'estàtues, busts, grafitis i altres obres d'art del tot el món", + "description": "Un mapa obert d'estàtues, busts, grafitis i altres obres d'art del tot el món", "title": "Open Artwork Map" }, "benches": { @@ -13,10 +13,13 @@ "title": "Bancs" }, "bicycle_rental": { - "title": "Lloguer de bicicletes" + "title": "Lloguer de bicicletes", + "description": "En aquest mapa, trobaràs nombroses estacions de lloguer de bicicletes que són conegudes per OpenStreetMap", + "shortDescription": "Un mapa amb estacions de lloguer de bicicletes i botigues de lloguer de bicicletes" }, "bookcases": { - "title": "Open Bookcase Map" + "title": "Open Bookcase Map", + "description": "Una llibreria pública és un xicotet armari al carrer, una caixa, una vella cabina telefònica o algun altre objecte on es guarden llibres. Tothom pot col·locar o agafar un llibre. Aquest mapa pretén recollir totes aquestes llibreries. Pots descobrir noves llibreries pròximes i, amb un compte gratuït de OpenStreetMap, afegir ràpidament les teues llibreries favorites." }, "cafes_and_pubs": { "description": "Bars i pubs", @@ -29,7 +32,8 @@ "name": "Llocs d'acampada", "presets": { "0": { - "title": "un lloc d'acampada" + "title": "un lloc d'acampada", + "description": "Afig un nou lloc d'acampada oficial. Són llocs designats per a passar la nit amb la teua caravana. Poden semblar-se a un càmping real o simplement a un aparcament. Pot ser que no estiguen senyalitzats en absolut, sinó que simplement estiguen definits per una decisió municipal. Un aparcament normal destinat als acampadors en el qual no s'espera que es passe la nit, no és un càmping. " } }, "tagRenderings": { @@ -37,13 +41,65 @@ "mappings": { "0": { "then": "Hi ha accés a internet" + }, + "1": { + "then": "Hi ha accés a Internet" + }, + "2": { + "then": "No hi ha accés a Internet" + } + }, + "question": "Aquest lloc proporciona accés a Internet?" + }, + "caravansites-capacity": { + "question": "Quants acampadors poden allotjar-se ací? (ometre si no hi ha un nombre evident de places o vehicles permesos)", + "render": "{capacity} els acampadors poden utilitzar aquest lloc al mateix temps" + }, + "caravansites-description": { + "render": "Més detalls sobre aquest lloc: {description}", + "question": "T'agradaria afegir una descripció general d'aquest lloc? (No repeteixis informació prèviament preguntada o mostrada a dalt. Si us plau mantín-la objectiva - les opinions van en les «reviews»)" + }, + "caravansites-fee": { + "mappings": { + "1": { + "then": "Es pot utilitzar gratuïtament" + }, + "0": { + "then": "Heu de pagar per l'ús" + } + }, + "question": "Aquest lloc cobra una taxa?" + }, + "caravansites-internet-fee": { + "mappings": { + "0": { + "then": "Heu de pagar un extra per accedir a Internet" + }, + "1": { + "then": "No cal pagar extra per l'accés a Internet" + } + }, + "question": "Has de pagar per l'accés a Internet?" + }, + "caravansites-charge": { + "question": "Quant cobra aquest lloc?", + "render": "Aquest lloc cobra {charge}" + }, + "caravansites-long-term": { + "mappings": { + "1": { + "then": "No hi han hostes permanents aquí" + }, + "0": { + "then": "Hi ha alguns punts per al lloguer a llarg termini, però també es pot romandre diàriament" } } } } } }, - "title": "Llocs d'acampada" + "title": "Llocs d'acampada", + "description": "Aquest lloc recull tots els llocs oficials de parada de caravanes i els llocs on es poden abocar les aigües grises i negres. Pots afegir detalls sobre els serveis prestats i el cost. Afig fotos i ressenyes. Aquest és un lloc web i una aplicació web. Les dades s'emmagatzemen en OpenStreetMap, per la qual cosa seran gratuïts per sempre i podran ser reutilitzats per qualsevol aplicació." }, "charging_stations": { "title": "Estacions de càrrega" @@ -290,9 +346,18 @@ "title": "Arbres" }, "waste": { - "title": "Brossa" + "title": "Brossa", + "description": "Mapa que mostra papereres i infraestructures de reciclatge." }, "waste_basket": { "title": "Papepera" + }, + "binoculars": { + "title": "Binoculars", + "shortDescription": "Un mapa amb prismàtics fixos", + "description": "Un mapa amb prismàtics fixos en un pal. Sol trobar-se en llocs turístics, miradors, a la part alta de torres panoràmiques o ocasionalment en una reserva natural." + }, + "cyclofix": { + "title": "Cyclofix - un mapa obert per a ciclistes" } -} \ No newline at end of file +} From 7d445ee60d699891dc39f648acffeb4c90e974bf Mon Sep 17 00:00:00 2001 From: paunofu Date: Sat, 2 Jul 2022 10:08:26 +0000 Subject: [PATCH 05/71] Translated using Weblate (Catalan) Currently translated at 12.6% (247 of 1960 strings) Translation: MapComplete/Layer translations Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layers/ca/ --- langs/layers/ca.json | 65 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/langs/layers/ca.json b/langs/layers/ca.json index 231cd932e..385960150 100644 --- a/langs/layers/ca.json +++ b/langs/layers/ca.json @@ -45,7 +45,8 @@ }, "title": { "render": "Obra d'art" - } + }, + "description": "Un mapa obert d'estàtues, busts, grafitis i altres obres d'art del tot el món" }, "barrier": { "name": "Barreres", @@ -830,6 +831,66 @@ "then": "24/7" } } + }, + "recycling-accepts": { + "mappings": { + "8": { + "then": "Ací es poden reciclar ampolles de vidre" + }, + "9": { + "then": "Ací es pot reciclar vidre" + }, + "10": { + "then": "Ací es poden reciclar diaris" + }, + "11": { + "then": "Ací es pot reciclar paper" + }, + "2": { + "then": "Ací es poden reciclar llaunes" + }, + "7": { + "then": "Ací es poden reciclar residus orgànics" + }, + "1": { + "then": "Ací es poden reciclar els cartons de begudes" + }, + "12": { + "then": "Ací es poden reciclar ampolles de plàstic" + }, + "14": { + "then": "Ací es pot reciclar plàstic" + }, + "13": { + "then": "Ací es poden reciclar envasos de plàstic" + }, + "20": { + "then": "Ací es pot reciclar el rebuig" + } + } + }, + "recycling-centre-name": { + "render": "Aquest centre de reciclatge s'anomena {name}" + }, + "recycling-type": { + "mappings": { + "0": { + "then": "Açò és un contenidor de reciclatge" + }, + "1": { + "then": "Açò és un centre de reciclatge" + } + } + }, + "container-location": { + "mappings": { + "2": { + "then": "Aquest contenidor està situat a l'aire lliure" + } + } + }, + "operator": { + "render": "Aquesta infraestuctura de reciclatge està operada per {operator}" } } }, @@ -965,4 +1026,4 @@ } } } -} \ No newline at end of file +} From 76e90905b61669c17565011754314cddb9d00bcb Mon Sep 17 00:00:00 2001 From: kjon Date: Fri, 1 Jul 2022 13:36:17 +0000 Subject: [PATCH 06/71] Translated using Weblate (German) Currently translated at 100.0% (1960 of 1960 strings) Translation: MapComplete/Layer translations Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layers/de/ --- langs/layers/de.json | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/langs/layers/de.json b/langs/layers/de.json index 9d5aa66f5..efaad6ec1 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -5053,10 +5053,22 @@ }, "4": { "then": "Die Hauptsprache dieser Schule ist unbekannt" + }, + "1": { + "then": "Französisch ist die Hauptsprache von {name}" + }, + "3": { + "then": "Deutsch ist die Hauptsprache von {name}" + }, + "2": { + "then": "Niederländisch ist die Hauptsprache von {name}" } }, "question": "Was ist die Hauptsprache dieser Schule?
    Welche Sprache wird mit den Schülern in den nicht sprachbezogenen Kursen und mit der Verwaltung gesprochen?
    ", - "render": "{school:language} ist die Hauptsprache von {title()}" + "render": "{school:language} ist die Hauptsprache von {title()}", + "freeform": { + "placeholder": "Sprache in Englisch in Kleinbuchstaben" + } }, "school-name": { "question": "Wie lautet der Name dieser Schule?", @@ -6227,4 +6239,4 @@ } } } -} \ No newline at end of file +} From 7b8776f1824a3289424a9c0a809074cfc65d79f5 Mon Sep 17 00:00:00 2001 From: paunofu Date: Sat, 2 Jul 2022 10:04:25 +0000 Subject: [PATCH 07/71] Translated using Weblate (Spanish) Currently translated at 60.4% (1185 of 1960 strings) Translation: MapComplete/Layer translations Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layers/es/ --- langs/layers/es.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/langs/layers/es.json b/langs/layers/es.json index f2b061f1c..1c3bc0083 100644 --- a/langs/layers/es.json +++ b/langs/layers/es.json @@ -3259,7 +3259,7 @@ }, "operator": { "question": "¿Que empresa opera esta facilidad de reciclado?", - "render": "Esta facilidad de reciclado la opera {operator}" + "render": "Esta infraestructura de reciclado la opera {operator}" }, "recycling-accepts": { "mappings": { @@ -4031,4 +4031,4 @@ } } } -} \ No newline at end of file +} From 6819dcc7a20e83e69026fd0f14b35e2b4dfc4b40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Babos=20G=C3=A1bor?= Date: Fri, 1 Jul 2022 11:07:13 +0000 Subject: [PATCH 08/71] Translated using Weblate (Hungarian) Currently translated at 12.3% (242 of 1960 strings) Translation: MapComplete/Layer translations Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layers/hu/ --- langs/layers/hu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/langs/layers/hu.json b/langs/layers/hu.json index 1e00fef50..ae05d270d 100644 --- a/langs/layers/hu.json +++ b/langs/layers/hu.json @@ -781,4 +781,4 @@ } } } -} \ No newline at end of file +} From 6f51a4b3bd730a4ab8a37dbcad99deb3103cdbdb Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sat, 2 Jul 2022 23:24:48 +0200 Subject: [PATCH 09/71] Housekeeping... --- Docs/BuiltinIndex.md | 4 + Docs/BuiltinLayers.md | 1 + Docs/Layers/crossings.md | 1 + Docs/Layers/cycleways_and_roads.md | 6 +- Docs/Layers/dogshop.md | 277 ++++-- Docs/Layers/kerbs.md | 128 +++ Docs/Layers/shops.md | 279 ++++-- Docs/TagInfo/mapcomplete_cycle_infra.json | 35 + .../mapcomplete_kerbs_and_crossings.json | 726 ++++++++++++++ Docs/TagInfo/mapcomplete_personal.json | 889 +++++++++++++++++- Docs/TagInfo/mapcomplete_pets.json | 805 +++++++++++++++- Docs/TagInfo/mapcomplete_shops.json | 805 +++++++++++++++- assets/contributors.json | 8 +- assets/layers/artwork/artwork.json | 3 +- assets/layers/recycling/recycling.json | 50 +- assets/layers/school/school.json | 12 +- assets/themes/artwork/artwork.json | 2 +- .../themes/bicycle_rental/bicycle_rental.json | 6 +- assets/themes/binoculars/binoculars.json | 9 +- assets/themes/bookcases/bookcases.json | 3 +- assets/themes/campersite/campersite.json | 57 +- assets/themes/cyclofix/cyclofix.json | 3 +- assets/themes/waste/waste.json | 3 +- assets/translators.json | 16 +- langs/ca.json | 14 +- langs/layers/ca.json | 50 +- langs/layers/de.json | 20 +- langs/layers/es.json | 2 +- langs/layers/hu.json | 2 +- langs/layers/it.json | 364 +++++++ langs/themes/ca.json | 90 +- langs/themes/it.json | 4 + 32 files changed, 4364 insertions(+), 310 deletions(-) create mode 100644 Docs/Layers/kerbs.md create mode 100644 Docs/TagInfo/mapcomplete_kerbs_and_crossings.json diff --git a/Docs/BuiltinIndex.md b/Docs/BuiltinIndex.md index 83872f143..1670e123b 100644 --- a/Docs/BuiltinIndex.md +++ b/Docs/BuiltinIndex.md @@ -136,6 +136,7 @@ - playground - recycling - school + - shops - tertiary_education - veterinary @@ -159,6 +160,7 @@ - kindergarten_childcare - recycling - school + - shops - tertiary_education - veterinary @@ -182,6 +184,7 @@ - kindergarten_childcare - recycling - school + - shops - tertiary_education @@ -202,6 +205,7 @@ - climbing_gym - food - kindergarten_childcare + - shops - veterinary diff --git a/Docs/BuiltinLayers.md b/Docs/BuiltinLayers.md index 8754f882e..5ad662e77 100644 --- a/Docs/BuiltinLayers.md +++ b/Docs/BuiltinLayers.md @@ -817,6 +817,7 @@ The following layers are included in MapComplete: - [hydrant](./Layers/hydrant.md) - [import_candidate](./Layers/import_candidate.md) - [information_board](./Layers/information_board.md) + - [kerbs](./Layers/kerbs.md) - [kindergarten_childcare](./Layers/kindergarten_childcare.md) - [left_right_style](./Layers/left_right_style.md) - [map](./Layers/map.md) diff --git a/Docs/Layers/crossings.md b/Docs/Layers/crossings.md index aaf3f4d5f..644447e10 100644 --- a/Docs/Layers/crossings.md +++ b/Docs/Layers/crossings.md @@ -28,6 +28,7 @@ Crossings for pedestrians and cyclists - [cycle_infra](https://mapcomplete.osm.be/cycle_infra) + - [kerbs_and_crossings](https://mapcomplete.osm.be/kerbs_and_crossings) - [personal](https://mapcomplete.osm.be/personal) diff --git a/Docs/Layers/cycleways_and_roads.md b/Docs/Layers/cycleways_and_roads.md index 468ba725b..7d2222aec 100644 --- a/Docs/Layers/cycleways_and_roads.md +++ b/Docs/Layers/cycleways_and_roads.md @@ -17,6 +17,7 @@ All infrastructure that someone can cycle over, accompanied with questions about - This layer is shown at zoomlevel **16** and higher - This layer is needed as dependency for layer [barrier](#barrier) - This layer is needed as dependency for layer [crossings](#crossings) + - This layer is needed as dependency for layer [kerbs](#kerbs) @@ -28,6 +29,7 @@ All infrastructure that someone can cycle over, accompanied with questions about - [cycle_infra](https://mapcomplete.osm.be/cycle_infra) + - [kerbs_and_crossings](https://mapcomplete.osm.be/kerbs_and_crossings) - [personal](https://mapcomplete.osm.be/personal) @@ -42,10 +44,10 @@ Elements must have the all of following tags to be shown on this layer: - - highway=cycleway|cycleway=lane|cycleway=shared_lane|cycleway=track|cyclestreet=yes|highway=residential|highway=tertiary|highway=unclassified|highway=primary|highway=secondary|highway=path&bicycle=designated + - highway=cycleway|cycleway=lane|cycleway=shared_lane|cycleway=track|cyclestreet=yes|highway=residential|highway=tertiary|highway=unclassified|highway=primary|highway=secondary|highway=tertiary_link|highway=primary_link|highway=secondary_link|highway=service|highway=footway|highway=pedestrian|highway=living_street|highway=path&bicycle=designated -[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22cyclestreet%22%3D%22yes%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cycleway%22%3D%22lane%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cycleway%22%3D%22shared_lane%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cycleway%22%3D%22track%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22cycleway%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22residential%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22tertiary%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22unclassified%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22primary%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22secondary%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22bicycle%22%3D%22designated%22%5D%5B%22highway%22%3D%22path%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22cyclestreet%22%3D%22yes%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cycleway%22%3D%22lane%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cycleway%22%3D%22shared_lane%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cycleway%22%3D%22track%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22cycleway%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22residential%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22tertiary%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22unclassified%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22primary%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22secondary%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22tertiary_link%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22primary_link%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22secondary_link%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22service%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22footway%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22pedestrian%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22living_street%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22bicycle%22%3D%22designated%22%5D%5B%22highway%22%3D%22path%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) diff --git a/Docs/Layers/dogshop.md b/Docs/Layers/dogshop.md index 6195f5798..3dd700051 100644 --- a/Docs/Layers/dogshop.md +++ b/Docs/Layers/dogshop.md @@ -61,11 +61,11 @@ this quick overview is incomplete attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | [string](../SpecialInputElements.md#string) | [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) -[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | +[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | Multiple choice | [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [hobby](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhobby) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) +[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | [](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | -[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | @@ -94,36 +94,239 @@ This is rendered with This shop is called {name} -### shops-shop +### shops-type-from-id -The question is What does this shop sell? - -This rendering asks information about the property [shop](https://wiki.openstreetmap.org/wiki/Key:shop) - -This is rendered with This shop sells {shop} +The question is What kind of shop is this? - - Convenience store corresponds with shop=convenience - - Supermarket corresponds with shop=supermarket - - Clothing store corresponds with shop=clothes - - Hairdresser corresponds with shop=hairdresser + - Farm Supply Shop corresponds with shop=agrarian + - Liquor Store corresponds with shop=alcohol + - Anime / Manga Shop corresponds with shop=anime + - Antiques Shop corresponds with shop=antiques + - Appliance Store corresponds with shop=appliance + - Art Store corresponds with shop=art + - Baby Goods Store corresponds with shop=baby_goods + - Bag/Luggage Store corresponds with shop=bag - Bakery corresponds with shop=bakery - - Car repair (garage) corresponds with shop=car_repair - - Car dealer corresponds with shop=car + - Bathroom Furnishing Store corresponds with shop=bathroom_furnishing + - Beauty Shop corresponds with shop=beauty + - Bedding/Mattress Store corresponds with shop=bed + - Beverage Store corresponds with shop=beverages + - Bicycle Shop corresponds with shop=bicycle + - Boat Store corresponds with shop=boat + - Bookmaker corresponds with shop=bookmaker + - Book Store corresponds with shop=books + - Brewing Supply Store corresponds with shop=brewing_supplies + - Butcher corresponds with shop=butcher + - Camera Equipment Store corresponds with shop=camera + - Candle Shop corresponds with shop=candles + - Cannabis Shop corresponds with shop=cannabis + - Car Dealership corresponds with shop=car + - Car Parts Store corresponds with shop=car_parts + - Car Repair Shop corresponds with shop=car_repair + - RV Dealership corresponds with shop=caravan + - Carpet Store corresponds with shop=carpet + - Catalog Shop corresponds with shop=catalogue + - Charity Store corresponds with shop=charity + - Cheese Store corresponds with shop=cheese + - Drugstore corresponds with shop=chemist + - Chocolate Store corresponds with shop=chocolate + - Clothing Store corresponds with shop=clothes + - Coffee Store corresponds with shop=coffee + - Collectibles Shop corresponds with shop=collector + - Computer Store corresponds with shop=computer + - Candy Store corresponds with shop=confectionery + - Convenience Store corresponds with shop=convenience + - Copy Store corresponds with shop=copyshop + - Cosmetics Store corresponds with shop=cosmetics + - Country Store corresponds with shop=country_store + - Arts & Crafts Store corresponds with shop=craft + - Curtain Store corresponds with shop=curtain + - Dairy Store corresponds with shop=dairy + - Deli corresponds with shop=deli + - Department Store corresponds with shop=department_store + - DIY Store corresponds with shop=doityourself + - Door Shop corresponds with shop=doors + - Dry Cleaner corresponds with shop=dry_cleaning + - E-Cigarette Shop corresponds with shop=e-cigarette + - Electrical Equipment Store corresponds with shop=electrical + - Electronics Store corresponds with shop=electronics + - Erotic Store corresponds with shop=erotic + - Fabric Store corresponds with shop=fabric + - Produce Stand corresponds with shop=farm + - Fashion Accessories Store corresponds with shop=fashion_accessories + - Fireplace Store corresponds with shop=fireplace + - Fishing Shop corresponds with shop=fishing + - Flooring Supply Shop corresponds with shop=flooring + - Florist corresponds with shop=florist + - Framing Shop corresponds with shop=frame + - Frozen Food Store corresponds with shop=frozen_food + - Fuel Shop corresponds with shop=fuel + - Funeral Home corresponds with shop=funeral_directors + - Furniture Store corresponds with shop=furniture + - Tabletop Game Store corresponds with shop=games + - Garden Center corresponds with shop=garden_centre + - Bottled Gas Shop corresponds with shop=gas + - General Store corresponds with shop=general + - Gift Shop corresponds with shop=gift + - Greengrocer corresponds with shop=greengrocer + - Hairdresser corresponds with shop=hairdresser + - Hairdresser Supply Store corresponds with shop=hairdresser_supply + - Hardware Store corresponds with shop=hardware + - Health Food Shop corresponds with shop=health_food + - Hearing Aids Store corresponds with shop=hearing_aids + - Herbalist corresponds with shop=herbalist + - Hifi Store corresponds with shop=hifi + - Hobby Shop corresponds with shop=hobby + - Household Linen Shop corresponds with shop=household_linen + - Houseware Store corresponds with shop=houseware + - Hunting Shop corresponds with shop=hunting + - Interior Decoration Store corresponds with shop=interior_decoration + - Jewelry Store corresponds with shop=jewelry + - Kiosk corresponds with shop=kiosk + - Kitchen Design Store corresponds with shop=kitchen + - Laundry corresponds with shop=laundry + - Leather Store corresponds with shop=leather + - Lighting Store corresponds with shop=lighting + - Locksmith corresponds with shop=locksmith + - Lottery Shop corresponds with shop=lottery + - Mall corresponds with shop=mall + - Massage Shop corresponds with shop=massage + - Medical Supply Store corresponds with shop=medical_supply + - Military Surplus Store corresponds with shop=military_surplus + - Mobile Phone Store corresponds with shop=mobile_phone + - Model Shop corresponds with shop=model + - Money Lender corresponds with shop=money_lender + - Motorcycle Dealership corresponds with shop=motorcycle + - Motorcycle Repair Shop corresponds with shop=motorcycle_repair + - Music Store corresponds with shop=music + - Musical Instrument Store corresponds with shop=musical_instrument + - Newspaper/Magazine Shop corresponds with shop=newsagent + - Nutrition Supplements Store corresponds with shop=nutrition_supplements + - Optician corresponds with shop=optician + - Outdoors Store corresponds with shop=outdoor + - Online Retailer Outpost corresponds with shop=outpost + - Paint Store corresponds with shop=paint + - Party Supply Store corresponds with shop=party + - Pastry Shop corresponds with shop=pastry + - Pawn Shop corresponds with shop=pawnbroker + - Perfume Store corresponds with shop=perfumery + - Pet Store corresponds with shop=pet + - Pet Grooming Store corresponds with shop=pet_grooming + - Photography Store corresponds with shop=photo + - Pottery Store corresponds with shop=pottery + - Printer Ink Store corresponds with shop=printer_ink + - Psychic corresponds with shop=psychic + - Fireworks Store corresponds with shop=pyrotechnics + - Radio/Electronic Component Store corresponds with shop=radiotechnics + - Religious Store corresponds with shop=religion + - Rental Shop corresponds with shop=rental + - Repair Shop corresponds with shop=repair + - Scuba Diving Shop corresponds with shop=scuba_diving + - Seafood Shop corresponds with shop=seafood + - Consignment/Thrift Store corresponds with shop=second_hand + - Sewing Supply Shop corresponds with shop=sewing + - Shoe Repair Shop corresponds with shop=shoe_repair + - Shoe Store corresponds with shop=shoes + - Spice Shop corresponds with shop=spices + - Sporting Goods Store corresponds with shop=sports + - Stationery Store corresponds with shop=stationery + - Storage Rental corresponds with shop=storage_rental + - Supermarket corresponds with shop=supermarket + - Pool Supply Store corresponds with shop=swimming_pool + - Tailor corresponds with shop=tailor + - Tattoo Parlor corresponds with shop=tattoo + - Tea Store corresponds with shop=tea + - Telecom Retail Store corresponds with shop=telecommunication + - Ticket Seller corresponds with shop=ticket + - Tile Shop corresponds with shop=tiles + - Tobacco Shop corresponds with shop=tobacco + - Tool Rental corresponds with shop=tool_hire + - Toy Store corresponds with shop=toys + - Trade Shop corresponds with shop=trade + - Travel Agency corresponds with shop=travel_agency + - Trophy Shop corresponds with shop=trophy + - Tire Store corresponds with shop=tyres + - Vacuum Cleaner Store corresponds with shop=vacuum_cleaner + - Variety Store corresponds with shop=variety_store + - Video Store corresponds with shop=video + - Video Game Store corresponds with shop=video_games + - Watches Shop corresponds with shop=watches + - Drinking Water Shop corresponds with shop=water + - Watersport/Swim Shop corresponds with shop=water_sports + - Weapon Shop corresponds with shop=weapons + - Wholesale Store corresponds with shop=wholesale + - Wig Shop corresponds with shop=wigs + - Window Blind Store corresponds with shop=window_blind + - Wine Shop corresponds with shop=wine -### shops-phone +### opening_hours -The question is What is the phone number? +The question is What are the opening hours of {title()}? + +This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) + +This is rendered with

    Opening hours

    {opening_hours_table(opening_hours)} + + + + + +### website + + + +The question is What is the website of {title()}? + +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) + +This is rendered with {website} + + + + + + - {contact:website} corresponds with contact:website~^..*$ + - This option cannot be chosen as answer + + + + +### email + + + +The question is What is the email address of {title()}? + +This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) + +This is rendered with {email} + + + + + + - {contact:email} corresponds with contact:email~^..*$ + - This option cannot be chosen as answer + + + + +### phone + + + +The question is What is the phone number of {title()}? This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) @@ -133,44 +336,8 @@ This is rendered with {phone} -### shops-website - - - -The question is What is the website of this shop? - -This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) - -This is rendered with {website} - - - - - -### shops-email - - - -The question is What is the email address of this shop? - -This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) - -This is rendered with {email} - - - - - -### shops-opening_hours - - - -The question is What are the opening hours of this shop? - -This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) - -This is rendered with {opening_hours_table(opening_hours)} - + - {contact:phone} corresponds with contact:phone~^..*$ + - This option cannot be chosen as answer diff --git a/Docs/Layers/kerbs.md b/Docs/Layers/kerbs.md new file mode 100644 index 000000000..638ea1d40 --- /dev/null +++ b/Docs/Layers/kerbs.md @@ -0,0 +1,128 @@ + + + kerbs +======= + + + + + +A layer showing kerbs. + + + + + + + - This layer is shown at zoomlevel **13** and higher + - This layer will automatically load [cycleways_and_roads](./cycleways_and_roads.md) into the layout as it depends on it: a preset snaps to this layer (presets[0]) + - This layer will automatically load [kerbs](./kerbs.md) into the layout as it depends on it: a preset snaps to this layer (presets[0]) + - This layer is needed as dependency for layer [kerbs](#kerbs) + + + + +#### Themes using this layer + + + + + + - [kerbs_and_crossings](https://mapcomplete.osm.be/kerbs_and_crossings) + - [personal](https://mapcomplete.osm.be/personal) + + + + + Basic tags for this layer +--------------------------- + + + +Elements must have the all of following tags to be shown on this layer: + + + + - barrier=kerb + + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22barrier%22%3D%22kerb%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + + + + Supported attributes +---------------------- + + + +Warning: + +this quick overview is incomplete + + + +attribute | type | values which are supported by this layer +----------- | ------ | ------------------------------------------ +[](https://taginfo.openstreetmap.org/keys/kerb#values) [kerb](https://wiki.openstreetmap.org/wiki/Key:kerb) | Multiple choice | [raised](https://wiki.openstreetmap.org/wiki/Tag:kerb%3Draised) [lowered](https://wiki.openstreetmap.org/wiki/Tag:kerb%3Dlowered) [flush](https://wiki.openstreetmap.org/wiki/Tag:kerb%3Dflush) +[](https://taginfo.openstreetmap.org/keys/tactile_paving#values) [tactile_paving](https://wiki.openstreetmap.org/wiki/Key:tactile_paving) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dno) +[](https://taginfo.openstreetmap.org/keys/kerb:height#values) [kerb:height](https://wiki.openstreetmap.org/wiki/Key:kerb:height) | [pnat](../SpecialInputElements.md#pnat) | + + + + +### kerb-type + + + +The question is What is the height of this kerb? + + + + + + - This kerb is raised (>3 cm) corresponds with kerb=raised + - This kerb is lowered (~3 cm) corresponds with kerb=lowered + - This kerb is flush (~0cm) corresponds with kerb=flush + - There is no kerb here corresponds with kerb=no + - This option cannot be chosen as answer + - There is a kerb of unknown height corresponds with kerb=yes + - This option cannot be chosen as answer + + +Only visible if `_geometry:type=Point` is shown + + + +### tactile-paving + + + +The question is Is there tactile paving at this kerb? + + + + + + - This kerb has tactile paving. corresponds with tactile_paving=yes + - This kerb does not have tactile paving. corresponds with tactile_paving=no + - This kerb has tactile paving, but it is incorrect corresponds with tactile_paving=incorrect + - This option cannot be chosen as answer + + +Only visible if `_geometry:type=Point` is shown + + + +### kerb-height + + + +The question is What is the height of this kerb? + +This rendering asks information about the property [kerb:height](https://wiki.openstreetmap.org/wiki/Key:kerb:height) + +This is rendered with Kerb height: {{kerb:height}} + + + +This document is autogenerated from [assets/layers/kerbs/kerbs.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/kerbs/kerbs.json) \ No newline at end of file diff --git a/Docs/Layers/shops.md b/Docs/Layers/shops.md index 23eb5eeb4..a3e22cec5 100644 --- a/Docs/Layers/shops.md +++ b/Docs/Layers/shops.md @@ -5,7 +5,7 @@ - + A shop @@ -62,11 +62,11 @@ this quick overview is incomplete attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | [string](../SpecialInputElements.md#string) | [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) -[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | +[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | Multiple choice | [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [hobby](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhobby) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) +[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | [](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | -[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | @@ -95,36 +95,239 @@ This is rendered with This shop is called {name} -### shops-shop +### shops-type-from-id -The question is What does this shop sell? - -This rendering asks information about the property [shop](https://wiki.openstreetmap.org/wiki/Key:shop) - -This is rendered with This shop sells {shop} +The question is What kind of shop is this? - - Convenience store corresponds with shop=convenience - - Supermarket corresponds with shop=supermarket - - Clothing store corresponds with shop=clothes - - Hairdresser corresponds with shop=hairdresser + - Farm Supply Shop corresponds with shop=agrarian + - Liquor Store corresponds with shop=alcohol + - Anime / Manga Shop corresponds with shop=anime + - Antiques Shop corresponds with shop=antiques + - Appliance Store corresponds with shop=appliance + - Art Store corresponds with shop=art + - Baby Goods Store corresponds with shop=baby_goods + - Bag/Luggage Store corresponds with shop=bag - Bakery corresponds with shop=bakery - - Car repair (garage) corresponds with shop=car_repair - - Car dealer corresponds with shop=car + - Bathroom Furnishing Store corresponds with shop=bathroom_furnishing + - Beauty Shop corresponds with shop=beauty + - Bedding/Mattress Store corresponds with shop=bed + - Beverage Store corresponds with shop=beverages + - Bicycle Shop corresponds with shop=bicycle + - Boat Store corresponds with shop=boat + - Bookmaker corresponds with shop=bookmaker + - Book Store corresponds with shop=books + - Brewing Supply Store corresponds with shop=brewing_supplies + - Butcher corresponds with shop=butcher + - Camera Equipment Store corresponds with shop=camera + - Candle Shop corresponds with shop=candles + - Cannabis Shop corresponds with shop=cannabis + - Car Dealership corresponds with shop=car + - Car Parts Store corresponds with shop=car_parts + - Car Repair Shop corresponds with shop=car_repair + - RV Dealership corresponds with shop=caravan + - Carpet Store corresponds with shop=carpet + - Catalog Shop corresponds with shop=catalogue + - Charity Store corresponds with shop=charity + - Cheese Store corresponds with shop=cheese + - Drugstore corresponds with shop=chemist + - Chocolate Store corresponds with shop=chocolate + - Clothing Store corresponds with shop=clothes + - Coffee Store corresponds with shop=coffee + - Collectibles Shop corresponds with shop=collector + - Computer Store corresponds with shop=computer + - Candy Store corresponds with shop=confectionery + - Convenience Store corresponds with shop=convenience + - Copy Store corresponds with shop=copyshop + - Cosmetics Store corresponds with shop=cosmetics + - Country Store corresponds with shop=country_store + - Arts & Crafts Store corresponds with shop=craft + - Curtain Store corresponds with shop=curtain + - Dairy Store corresponds with shop=dairy + - Deli corresponds with shop=deli + - Department Store corresponds with shop=department_store + - DIY Store corresponds with shop=doityourself + - Door Shop corresponds with shop=doors + - Dry Cleaner corresponds with shop=dry_cleaning + - E-Cigarette Shop corresponds with shop=e-cigarette + - Electrical Equipment Store corresponds with shop=electrical + - Electronics Store corresponds with shop=electronics + - Erotic Store corresponds with shop=erotic + - Fabric Store corresponds with shop=fabric + - Produce Stand corresponds with shop=farm + - Fashion Accessories Store corresponds with shop=fashion_accessories + - Fireplace Store corresponds with shop=fireplace + - Fishing Shop corresponds with shop=fishing + - Flooring Supply Shop corresponds with shop=flooring + - Florist corresponds with shop=florist + - Framing Shop corresponds with shop=frame + - Frozen Food Store corresponds with shop=frozen_food + - Fuel Shop corresponds with shop=fuel + - Funeral Home corresponds with shop=funeral_directors + - Furniture Store corresponds with shop=furniture + - Tabletop Game Store corresponds with shop=games + - Garden Center corresponds with shop=garden_centre + - Bottled Gas Shop corresponds with shop=gas + - General Store corresponds with shop=general + - Gift Shop corresponds with shop=gift + - Greengrocer corresponds with shop=greengrocer + - Hairdresser corresponds with shop=hairdresser + - Hairdresser Supply Store corresponds with shop=hairdresser_supply + - Hardware Store corresponds with shop=hardware + - Health Food Shop corresponds with shop=health_food + - Hearing Aids Store corresponds with shop=hearing_aids + - Herbalist corresponds with shop=herbalist + - Hifi Store corresponds with shop=hifi + - Hobby Shop corresponds with shop=hobby + - Household Linen Shop corresponds with shop=household_linen + - Houseware Store corresponds with shop=houseware + - Hunting Shop corresponds with shop=hunting + - Interior Decoration Store corresponds with shop=interior_decoration + - Jewelry Store corresponds with shop=jewelry + - Kiosk corresponds with shop=kiosk + - Kitchen Design Store corresponds with shop=kitchen + - Laundry corresponds with shop=laundry + - Leather Store corresponds with shop=leather + - Lighting Store corresponds with shop=lighting + - Locksmith corresponds with shop=locksmith + - Lottery Shop corresponds with shop=lottery + - Mall corresponds with shop=mall + - Massage Shop corresponds with shop=massage + - Medical Supply Store corresponds with shop=medical_supply + - Military Surplus Store corresponds with shop=military_surplus + - Mobile Phone Store corresponds with shop=mobile_phone + - Model Shop corresponds with shop=model + - Money Lender corresponds with shop=money_lender + - Motorcycle Dealership corresponds with shop=motorcycle + - Motorcycle Repair Shop corresponds with shop=motorcycle_repair + - Music Store corresponds with shop=music + - Musical Instrument Store corresponds with shop=musical_instrument + - Newspaper/Magazine Shop corresponds with shop=newsagent + - Nutrition Supplements Store corresponds with shop=nutrition_supplements + - Optician corresponds with shop=optician + - Outdoors Store corresponds with shop=outdoor + - Online Retailer Outpost corresponds with shop=outpost + - Paint Store corresponds with shop=paint + - Party Supply Store corresponds with shop=party + - Pastry Shop corresponds with shop=pastry + - Pawn Shop corresponds with shop=pawnbroker + - Perfume Store corresponds with shop=perfumery + - Pet Store corresponds with shop=pet + - Pet Grooming Store corresponds with shop=pet_grooming + - Photography Store corresponds with shop=photo + - Pottery Store corresponds with shop=pottery + - Printer Ink Store corresponds with shop=printer_ink + - Psychic corresponds with shop=psychic + - Fireworks Store corresponds with shop=pyrotechnics + - Radio/Electronic Component Store corresponds with shop=radiotechnics + - Religious Store corresponds with shop=religion + - Rental Shop corresponds with shop=rental + - Repair Shop corresponds with shop=repair + - Scuba Diving Shop corresponds with shop=scuba_diving + - Seafood Shop corresponds with shop=seafood + - Consignment/Thrift Store corresponds with shop=second_hand + - Sewing Supply Shop corresponds with shop=sewing + - Shoe Repair Shop corresponds with shop=shoe_repair + - Shoe Store corresponds with shop=shoes + - Spice Shop corresponds with shop=spices + - Sporting Goods Store corresponds with shop=sports + - Stationery Store corresponds with shop=stationery + - Storage Rental corresponds with shop=storage_rental + - Supermarket corresponds with shop=supermarket + - Pool Supply Store corresponds with shop=swimming_pool + - Tailor corresponds with shop=tailor + - Tattoo Parlor corresponds with shop=tattoo + - Tea Store corresponds with shop=tea + - Telecom Retail Store corresponds with shop=telecommunication + - Ticket Seller corresponds with shop=ticket + - Tile Shop corresponds with shop=tiles + - Tobacco Shop corresponds with shop=tobacco + - Tool Rental corresponds with shop=tool_hire + - Toy Store corresponds with shop=toys + - Trade Shop corresponds with shop=trade + - Travel Agency corresponds with shop=travel_agency + - Trophy Shop corresponds with shop=trophy + - Tire Store corresponds with shop=tyres + - Vacuum Cleaner Store corresponds with shop=vacuum_cleaner + - Variety Store corresponds with shop=variety_store + - Video Store corresponds with shop=video + - Video Game Store corresponds with shop=video_games + - Watches Shop corresponds with shop=watches + - Drinking Water Shop corresponds with shop=water + - Watersport/Swim Shop corresponds with shop=water_sports + - Weapon Shop corresponds with shop=weapons + - Wholesale Store corresponds with shop=wholesale + - Wig Shop corresponds with shop=wigs + - Window Blind Store corresponds with shop=window_blind + - Wine Shop corresponds with shop=wine -### shops-phone +### opening_hours -The question is What is the phone number? +The question is What are the opening hours of {title()}? + +This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) + +This is rendered with

    Opening hours

    {opening_hours_table(opening_hours)} + + + + + +### website + + + +The question is What is the website of {title()}? + +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) + +This is rendered with {website} + + + + + + - {contact:website} corresponds with contact:website~^..*$ + - This option cannot be chosen as answer + + + + +### email + + + +The question is What is the email address of {title()}? + +This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) + +This is rendered with {email} + + + + + + - {contact:email} corresponds with contact:email~^..*$ + - This option cannot be chosen as answer + + + + +### phone + + + +The question is What is the phone number of {title()}? This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) @@ -134,44 +337,8 @@ This is rendered with {phone} -### shops-website - - - -The question is What is the website of this shop? - -This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) - -This is rendered with {website} - - - - - -### shops-email - - - -The question is What is the email address of this shop? - -This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) - -This is rendered with {email} - - - - - -### shops-opening_hours - - - -The question is What are the opening hours of this shop? - -This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) - -This is rendered with {opening_hours_table(opening_hours)} - + - {contact:phone} corresponds with contact:phone~^..*$ + - This option cannot be chosen as answer diff --git a/Docs/TagInfo/mapcomplete_cycle_infra.json b/Docs/TagInfo/mapcomplete_cycle_infra.json index 89bccd1df..b68fd2ec2 100644 --- a/Docs/TagInfo/mapcomplete_cycle_infra.json +++ b/Docs/TagInfo/mapcomplete_cycle_infra.json @@ -60,6 +60,41 @@ "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", "value": "secondary" }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "tertiary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "primary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "secondary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "service" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "footway" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "pedestrian" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "living_street" + }, { "key": "highway", "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", diff --git a/Docs/TagInfo/mapcomplete_kerbs_and_crossings.json b/Docs/TagInfo/mapcomplete_kerbs_and_crossings.json new file mode 100644 index 000000000..cdc0aabad --- /dev/null +++ b/Docs/TagInfo/mapcomplete_kerbs_and_crossings.json @@ -0,0 +1,726 @@ +{ + "data_format": 1, + "project": { + "name": "MapComplete Kerbs and crossings", + "description": "A map showing kerbs and crossings", + "project_url": "https://mapcomplete.osm.be/kerbs_and_crossings", + "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", + "icon_url": "https://mapcomplete.osm.be/assets/layers/kerbs/KerbIcon.svg", + "contact_name": "Pieter Vander Vennet, Robin van der Linde", + "contact_email": "pietervdvn@posteo.net" + }, + "tags": [ + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "cycleway" + }, + { + "key": "cycleway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "lane" + }, + { + "key": "cycleway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "shared_lane" + }, + { + "key": "cycleway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "track" + }, + { + "key": "cyclestreet", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "yes" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "residential" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "tertiary" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "unclassified" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "primary" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "secondary" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "tertiary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "primary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "secondary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "service" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "footway" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "pedestrian" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "living_street" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "path" + }, + { + "key": "bicycle", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "designated" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=shared_lane with a fixed text, namely 'There is a shared lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "shared_lane" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=lane with a fixed text, namely 'There is a lane next to the road (separated with paint)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "lane" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=track with a fixed text, namely 'There is a track, but no cycleway drawn separately from this road on the map.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "track" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=separate with a fixed text, namely 'There is a separately drawn cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "separate" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "lit", + "description": "Layer 'Cycleways and roads' shows lit=yes with a fixed text, namely 'This street is lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "lit", + "description": "Layer 'Cycleways and roads' shows lit=no with a fixed text, namely 'This road is not lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "lit", + "description": "Layer 'Cycleways and roads' shows lit=sunset-sunrise with a fixed text, namely 'This road is lit at night' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "sunset-sunrise" + }, + { + "key": "lit", + "description": "Layer 'Cycleways and roads' shows lit=24/7 with a fixed text, namely 'This road is lit 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "24/7" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cycleways and roads' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet, and a 30km/h zone.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cycleways and roads' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cycleways and roads' shows with a fixed text, namely 'This is not a cyclestreet.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings') Picking this answer will delete the key cyclestreet.", + "value": "" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'maxspeed' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=20 with a fixed text, namely 'The maximum speed is 20 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "20" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=30 with a fixed text, namely 'The maximum speed is 30 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "30" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=50 with a fixed text, namely 'The maximum speed is 50 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "50" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=70 with a fixed text, namely 'The maximum speed is 70 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "70" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=90 with a fixed text, namely 'The maximum speed is 90 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "90" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'cycleway:surface' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=unpaved with a fixed text, namely 'This cycleway is unpaved' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "unpaved" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=paved with a fixed text, namely 'This cycleway is paved' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "paved" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=asphalt with a fixed text, namely 'This cycleway is made of asphalt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "asphalt" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=paving_stones with a fixed text, namely 'This cycleway is made of smooth paving stones' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "paving_stones" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=concrete with a fixed text, namely 'This cycleway is made of concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "concrete" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=cobblestone with a fixed text, namely 'This cycleway is made of cobblestone (unhewn or sett)' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "cobblestone" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=unhewn_cobblestone with a fixed text, namely 'This cycleway is made of raw, natural cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "unhewn_cobblestone" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=sett with a fixed text, namely 'This cycleway is made of flat, square cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "sett" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=wood with a fixed text, namely 'This cycleway is made of wood' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "wood" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=gravel with a fixed text, namely 'This cycleway is made of gravel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "gravel" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=fine_gravel with a fixed text, namely 'This cycleway is made of fine gravel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "fine_gravel" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=pebblestone with a fixed text, namely 'This cycleway is made of pebblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "pebblestone" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=ground with a fixed text, namely 'This cycleway is made from raw ground' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "ground" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=excellent with a fixed text, namely 'Usable for thin rollers: rollerblade, skateboard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "excellent" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=good with a fixed text, namely 'Usable for thin wheels: racing bike' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "good" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=intermediate with a fixed text, namely 'Usable for normal wheels: city bike, wheelchair, scooter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "intermediate" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=bad with a fixed text, namely 'Usable for robust wheels: trekking bike, car, rickshaw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "bad" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=very_bad with a fixed text, namely 'Usable for vehicles with high clearance: light duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "very_bad" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=horrible with a fixed text, namely 'Usable for off-road vehicles: heavy duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "horrible" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=very_horrible with a fixed text, namely 'Usable for specialized off-road vehicles: tractor, ATV' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "very_horrible" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=impassable with a fixed text, namely 'Impassable / No wheeled vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "impassable" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=unpaved with a fixed text, namely 'This cycleway is unhardened' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "unpaved" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=paved with a fixed text, namely 'This cycleway is paved' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "paved" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=asphalt with a fixed text, namely 'This cycleway is made of asphalt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "asphalt" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=paving_stones with a fixed text, namely 'This cycleway is made of smooth paving stones' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "paving_stones" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=concrete with a fixed text, namely 'This cycleway is made of concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "concrete" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=cobblestone with a fixed text, namely 'This cycleway is made of cobblestone (unhewn or sett)' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "cobblestone" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=unhewn_cobblestone with a fixed text, namely 'This cycleway is made of raw, natural cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "unhewn_cobblestone" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=sett with a fixed text, namely 'This cycleway is made of flat, square cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "sett" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=wood with a fixed text, namely 'This cycleway is made of wood' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "wood" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=gravel with a fixed text, namely 'This cycleway is made of gravel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "gravel" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=fine_gravel with a fixed text, namely 'This cycleway is made of fine gravel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "fine_gravel" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=pebblestone with a fixed text, namely 'This cycleway is made of pebblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "pebblestone" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=ground with a fixed text, namely 'This cycleway is made from raw ground' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "ground" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=excellent with a fixed text, namely 'Usable for thin rollers: rollerblade, skateboard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "excellent" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=good with a fixed text, namely 'Usable for thin wheels: racing bike' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "good" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=intermediate with a fixed text, namely 'Usable for normal wheels: city bike, wheelchair, scooter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "intermediate" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=bad with a fixed text, namely 'Usable for robust wheels: trekking bike, car, rickshaw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "bad" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=very_bad with a fixed text, namely 'Usable for vehicles with high clearance: light duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "very_bad" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=horrible with a fixed text, namely 'Usable for off-road vehicles: heavy duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "horrible" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=very_horrible with a fixed text, namely 'Usable for specialized off-road vehicles: tractor, ATV' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "very_horrible" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=impassable with a fixed text, namely 'Impassable / No wheeled vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "impassable" + }, + { + "key": "width:carriageway", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'width:carriageway' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7 with a fixed text, namely 'Compulsory cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign~^BE:D7;.*$ with a fixed text, namely 'Compulsory cycleway (with supplementary sign)
    ' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D9 with a fixed text, namely 'Segregated foot/cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D9" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D10 with a fixed text, namely 'Unsegregated foot/cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D10" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=none with a fixed text, namely 'No traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "none" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D7 with a fixed text, namely 'Compulsory cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign~^BE:D7;.*$ with a fixed text, namely 'Compulsory cycleway (with supplementary sign)
    ' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D9 with a fixed text, namely 'Segregated foot/cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D9" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D10 with a fixed text, namely 'Unsegregated foot/cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D10" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=NL:G11 with a fixed text, namely 'Compulsory cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "NL:G11" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=NL:G12a with a fixed text, namely 'Compulsory (moped)cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "NL:G12a" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=NL:G13 with a fixed text, namely 'Non-compulsory cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "NL:G13" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=none with a fixed text, namely 'No traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "none" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M6 with a fixed text, namely 'Mopeds must use the cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7;BE:M6" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M13 with a fixed text, namely 'Speedpedelecs must use the cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7;BE:M13" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M14 with a fixed text, namely 'Mopeds and speedpedelecs must use the cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7;BE:M14" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M7 with a fixed text, namely 'Mopeds are not allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7;BE:M7" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M15 with a fixed text, namely 'Speedpedelecs are not allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7;BE:M15" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M16 with a fixed text, namely 'Mopeds and speedpedelecs are not allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7;BE:M16" + }, + { + "key": "cycleway:traffic_sign:supplementary", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign:supplementary=none with a fixed text, namely 'No supplementary traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "none" + }, + { + "key": "cycleway:buffer", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'cycleway:buffer' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "cycleway:separation", + "description": "Layer 'Cycleways and roads' shows cycleway:separation=dashed_line with a fixed text, namely 'This cycleway is separated by a dashed line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "dashed_line" + }, + { + "key": "cycleway:separation", + "description": "Layer 'Cycleways and roads' shows cycleway:separation=solid_line with a fixed text, namely 'This cycleway is separated by a solid line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "solid_line" + }, + { + "key": "cycleway:separation", + "description": "Layer 'Cycleways and roads' shows cycleway:separation=parking_lane with a fixed text, namely 'This cycleway is separated by a parking lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "parking_lane" + }, + { + "key": "cycleway:separation", + "description": "Layer 'Cycleways and roads' shows cycleway:separation=kerb with a fixed text, namely 'This cycleway is separated by a kerb' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "kerb" + }, + { + "key": "separation", + "description": "Layer 'Cycleways and roads' shows separation=dashed_line with a fixed text, namely 'This cycleway is separated by a dashed line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "dashed_line" + }, + { + "key": "separation", + "description": "Layer 'Cycleways and roads' shows separation=solid_line with a fixed text, namely 'This cycleway is separated by a solid line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "solid_line" + }, + { + "key": "separation", + "description": "Layer 'Cycleways and roads' shows separation=parking_lane with a fixed text, namely 'This cycleway is separated by a parking lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "parking_lane" + }, + { + "key": "separation", + "description": "Layer 'Cycleways and roads' shows separation=kerb with a fixed text, namely 'This cycleway is separated by a kerb' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "kerb" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Crossings showing features with this tag", + "value": "crossing" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=uncontrolled with a fixed text, namely 'Crossing, without traffic lights' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "uncontrolled" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=traffic_signals with a fixed text, namely 'Crossing with traffic signals' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "traffic_signals" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=zebra with a fixed text, namely 'Zebra crossing' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "zebra" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=unmarked with a fixed text, namely 'Crossing without crossing markings' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "unmarked" + }, + { + "key": "crossing_ref", + "description": "Layer 'Crossings' shows crossing_ref=zebra with a fixed text, namely 'This is a zebra crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "zebra" + }, + { + "key": "crossing_ref", + "description": "Layer 'Crossings' shows with a fixed text, namely 'This is not a zebra crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings') Picking this answer will delete the key crossing_ref.", + "value": "" + }, + { + "key": "bicycle", + "description": "Layer 'Crossings' shows bicycle=yes with a fixed text, namely 'A cyclist can use this crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "bicycle", + "description": "Layer 'Crossings' shows bicycle=no with a fixed text, namely 'A cyclist can not use this crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "crossing:island", + "description": "Layer 'Crossings' shows crossing:island=yes with a fixed text, namely 'This crossing has an island in the middle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "crossing:island", + "description": "Layer 'Crossings' shows crossing:island=no with a fixed text, namely 'This crossing does not have an island in the middle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Crossings' shows tactile_paving=yes with a fixed text, namely 'This crossing has tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Crossings' shows tactile_paving=no with a fixed text, namely 'This crossing does not have tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Crossings' shows tactile_paving=incorrect with a fixed text, namely 'This crossing has tactile paving, but is not correct' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "incorrect" + }, + { + "key": "button_operated", + "description": "Layer 'Crossings' shows button_operated=yes with a fixed text, namely 'This traffic light has a button to request green light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "button_operated", + "description": "Layer 'Crossings' shows button_operated=no with a fixed text, namely 'This traffic light does not have a button to request green light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "red_turn:right:bicycle", + "description": "Layer 'Crossings' shows red_turn:right:bicycle=yes with a fixed text, namely 'A cyclist can turn right if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "red_turn:right:bicycle", + "description": "Layer 'Crossings' shows red_turn:right:bicycle=yes with a fixed text, namely 'A cyclist can turn right if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "red_turn:right:bicycle", + "description": "Layer 'Crossings' shows red_turn:right:bicycle=no with a fixed text, namely 'A cyclist can not turn right if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "red_turn:straight:bicycle", + "description": "Layer 'Crossings' shows red_turn:straight:bicycle=yes with a fixed text, namely 'A cyclist can go straight on if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "red_turn:straight:bicycle", + "description": "Layer 'Crossings' shows red_turn:straight:bicycle=yes with a fixed text, namely 'A cyclist can go straight on if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "red_turn:straight:bicycle", + "description": "Layer 'Crossings' shows red_turn:straight:bicycle=no with a fixed text, namely 'A cyclist can not go straight on if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "barrier", + "description": "The MapComplete theme Kerbs and crossings has a layer Kerbs showing features with this tag", + "value": "kerb" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=raised with a fixed text, namely 'This kerb is raised (>3 cm)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "raised" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=lowered with a fixed text, namely 'This kerb is lowered (~3 cm)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "lowered" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=flush with a fixed text, namely 'This kerb is flush (~0cm)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "flush" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=no with a fixed text, namely 'There is no kerb here' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=yes with a fixed text, namely 'There is a kerb of unknown height' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Kerbs' shows tactile_paving=yes with a fixed text, namely 'This kerb has tactile paving.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Kerbs' shows tactile_paving=no with a fixed text, namely 'This kerb does not have tactile paving.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Kerbs' shows tactile_paving=incorrect with a fixed text, namely 'This kerb has tactile paving, but it is incorrect' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "incorrect" + }, + { + "key": "kerb:height", + "description": "Layer 'Kerbs' shows and asks freeform values for key 'kerb:height' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + } + ] +} \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_personal.json b/Docs/TagInfo/mapcomplete_personal.json index 17547df86..343700b4e 100644 --- a/Docs/TagInfo/mapcomplete_personal.json +++ b/Docs/TagInfo/mapcomplete_personal.json @@ -3903,6 +3903,41 @@ "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", "value": "secondary" }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "tertiary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "primary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "secondary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "service" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "footway" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "pedestrian" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "living_street" + }, { "key": "highway", "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", @@ -5617,6 +5652,55 @@ "key": "wikipedia", "description": "The layer 'Information boards allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" }, + { + "key": "barrier", + "description": "The MapComplete theme Personal theme has a layer Kerbs showing features with this tag", + "value": "kerb" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=raised with a fixed text, namely 'This kerb is raised (>3 cm)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "raised" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=lowered with a fixed text, namely 'This kerb is lowered (~3 cm)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "lowered" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=flush with a fixed text, namely 'This kerb is flush (~0cm)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "flush" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=no with a fixed text, namely 'There is no kerb here' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=yes with a fixed text, namely 'There is a kerb of unknown height' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Kerbs' shows tactile_paving=yes with a fixed text, namely 'This kerb has tactile paving.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Kerbs' shows tactile_paving=no with a fixed text, namely 'This kerb does not have tactile paving.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Kerbs' shows tactile_paving=incorrect with a fixed text, namely 'This kerb has tactile paving, but it is incorrect' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "incorrect" + }, + { + "key": "kerb:height", + "description": "Layer 'Kerbs' shows and asks freeform values for key 'kerb:height' (in the MapComplete.osm.be theme 'Personal theme')" + }, { "key": "tourism", "description": "The MapComplete theme Personal theme has a layer Maps showing features with this tag", @@ -6650,27 +6734,43 @@ }, { "key": "shop", - "description": "Layer 'Shop' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'Personal theme')" + "description": "Layer 'Shop' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "agrarian" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=convenience with a fixed text, namely 'Convenience store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", - "value": "convenience" + "description": "Layer 'Shop' shows shop=alcohol with a fixed text, namely 'Liquor Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "alcohol" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", - "value": "supermarket" + "description": "Layer 'Shop' shows shop=anime with a fixed text, namely 'Anime / Manga Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "anime" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=clothes with a fixed text, namely 'Clothing store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", - "value": "clothes" + "description": "Layer 'Shop' shows shop=antiques with a fixed text, namely 'Antiques Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "antiques" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", - "value": "hairdresser" + "description": "Layer 'Shop' shows shop=appliance with a fixed text, namely 'Appliance Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "appliance" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=art with a fixed text, namely 'Art Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "art" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=baby_goods with a fixed text, namely 'Baby Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "baby_goods" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bag with a fixed text, namely 'Bag/Luggage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bag" }, { "key": "shop", @@ -6679,29 +6779,786 @@ }, { "key": "shop", - "description": "Layer 'Shop' shows shop=car_repair with a fixed text, namely 'Car repair (garage)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "description": "Layer 'Shop' shows shop=bathroom_furnishing with a fixed text, namely 'Bathroom Furnishing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bathroom_furnishing" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=beauty with a fixed text, namely 'Beauty Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "beauty" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bed with a fixed text, namely 'Bedding/Mattress Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bed" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=beverages with a fixed text, namely 'Beverage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "beverages" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bicycle with a fixed text, namely 'Bicycle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bicycle" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=boat with a fixed text, namely 'Boat Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "boat" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bookmaker with a fixed text, namely 'Bookmaker' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bookmaker" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=books with a fixed text, namely 'Book Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "books" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=brewing_supplies with a fixed text, namely 'Brewing Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "brewing_supplies" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=butcher with a fixed text, namely 'Butcher' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "butcher" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=camera with a fixed text, namely 'Camera Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "camera" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=candles with a fixed text, namely 'Candle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "candles" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=cannabis with a fixed text, namely 'Cannabis Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "cannabis" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=car with a fixed text, namely 'Car Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "car" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=car_parts with a fixed text, namely 'Car Parts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "car_parts" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=car_repair with a fixed text, namely 'Car Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", "value": "car_repair" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=car with a fixed text, namely 'Car dealer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", - "value": "car" + "description": "Layer 'Shop' shows shop=caravan with a fixed text, namely 'RV Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "caravan" }, { - "key": "phone", - "description": "Layer 'Shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + "key": "shop", + "description": "Layer 'Shop' shows shop=carpet with a fixed text, namely 'Carpet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "carpet" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=catalogue with a fixed text, namely 'Catalog Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "catalogue" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=charity with a fixed text, namely 'Charity Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "charity" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=cheese with a fixed text, namely 'Cheese Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "cheese" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=chemist with a fixed text, namely 'Drugstore' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "chemist" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=chocolate with a fixed text, namely 'Chocolate Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "chocolate" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=clothes with a fixed text, namely 'Clothing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "clothes" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=coffee with a fixed text, namely 'Coffee Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "coffee" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=collector with a fixed text, namely 'Collectibles Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "collector" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=computer with a fixed text, namely 'Computer Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "computer" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=confectionery with a fixed text, namely 'Candy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "confectionery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=convenience with a fixed text, namely 'Convenience Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "convenience" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=copyshop with a fixed text, namely 'Copy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "copyshop" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=cosmetics with a fixed text, namely 'Cosmetics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "cosmetics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=country_store with a fixed text, namely 'Country Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "country_store" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=craft with a fixed text, namely 'Arts & Crafts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "craft" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=curtain with a fixed text, namely 'Curtain Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "curtain" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=dairy with a fixed text, namely 'Dairy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "dairy" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=deli with a fixed text, namely 'Deli' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "deli" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=department_store with a fixed text, namely 'Department Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "department_store" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=doityourself with a fixed text, namely 'DIY Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "doityourself" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=doors with a fixed text, namely 'Door Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "doors" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=dry_cleaning with a fixed text, namely 'Dry Cleaner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "dry_cleaning" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=e-cigarette with a fixed text, namely 'E-Cigarette Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "e-cigarette" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=electrical with a fixed text, namely 'Electrical Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "electrical" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=electronics with a fixed text, namely 'Electronics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "electronics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=erotic with a fixed text, namely 'Erotic Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "erotic" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fabric with a fixed text, namely 'Fabric Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fabric" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=farm with a fixed text, namely 'Produce Stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "farm" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fashion_accessories with a fixed text, namely 'Fashion Accessories Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fashion_accessories" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fireplace with a fixed text, namely 'Fireplace Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fireplace" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fishing with a fixed text, namely 'Fishing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fishing" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=flooring with a fixed text, namely 'Flooring Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "flooring" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=florist with a fixed text, namely 'Florist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "florist" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=frame with a fixed text, namely 'Framing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "frame" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=frozen_food with a fixed text, namely 'Frozen Food Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "frozen_food" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fuel with a fixed text, namely 'Fuel Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fuel" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=funeral_directors with a fixed text, namely 'Funeral Home' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "funeral_directors" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=furniture with a fixed text, namely 'Furniture Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "furniture" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=games with a fixed text, namely 'Tabletop Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "games" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=garden_centre with a fixed text, namely 'Garden Center' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "garden_centre" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=gas with a fixed text, namely 'Bottled Gas Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "gas" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=general with a fixed text, namely 'General Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "general" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=gift with a fixed text, namely 'Gift Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "gift" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=greengrocer with a fixed text, namely 'Greengrocer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "greengrocer" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hairdresser" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hairdresser_supply with a fixed text, namely 'Hairdresser Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hairdresser_supply" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hardware with a fixed text, namely 'Hardware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hardware" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=health_food with a fixed text, namely 'Health Food Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "health_food" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hearing_aids with a fixed text, namely 'Hearing Aids Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hearing_aids" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=herbalist with a fixed text, namely 'Herbalist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "herbalist" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hifi with a fixed text, namely 'Hifi Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hifi" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hobby with a fixed text, namely 'Hobby Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hobby" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=household_linen with a fixed text, namely 'Household Linen Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "household_linen" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=houseware with a fixed text, namely 'Houseware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "houseware" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hunting with a fixed text, namely 'Hunting Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hunting" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=interior_decoration with a fixed text, namely 'Interior Decoration Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "interior_decoration" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=jewelry with a fixed text, namely 'Jewelry Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "jewelry" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=kiosk with a fixed text, namely 'Kiosk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "kiosk" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=kitchen with a fixed text, namely 'Kitchen Design Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "kitchen" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=laundry with a fixed text, namely 'Laundry' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "laundry" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=leather with a fixed text, namely 'Leather Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "leather" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=lighting with a fixed text, namely 'Lighting Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "lighting" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=locksmith with a fixed text, namely 'Locksmith' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "locksmith" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=lottery with a fixed text, namely 'Lottery Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "lottery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=mall with a fixed text, namely 'Mall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "mall" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=massage with a fixed text, namely 'Massage Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "massage" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=medical_supply with a fixed text, namely 'Medical Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "medical_supply" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=military_surplus with a fixed text, namely 'Military Surplus Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "military_surplus" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=mobile_phone with a fixed text, namely 'Mobile Phone Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "mobile_phone" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=model with a fixed text, namely 'Model Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "model" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=money_lender with a fixed text, namely 'Money Lender' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "money_lender" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=motorcycle with a fixed text, namely 'Motorcycle Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "motorcycle" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=motorcycle_repair with a fixed text, namely 'Motorcycle Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "motorcycle_repair" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=music with a fixed text, namely 'Music Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "music" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=musical_instrument with a fixed text, namely 'Musical Instrument Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "musical_instrument" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=newsagent with a fixed text, namely 'Newspaper/Magazine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "newsagent" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=nutrition_supplements with a fixed text, namely 'Nutrition Supplements Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "nutrition_supplements" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=optician with a fixed text, namely 'Optician' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "optician" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=outdoor with a fixed text, namely 'Outdoors Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "outdoor" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=outpost with a fixed text, namely 'Online Retailer Outpost' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "outpost" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=paint with a fixed text, namely 'Paint Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "paint" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=party with a fixed text, namely 'Party Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "party" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pastry with a fixed text, namely 'Pastry Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pastry" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pawnbroker with a fixed text, namely 'Pawn Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pawnbroker" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=perfumery with a fixed text, namely 'Perfume Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "perfumery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pet with a fixed text, namely 'Pet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pet" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pet_grooming with a fixed text, namely 'Pet Grooming Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pet_grooming" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=photo with a fixed text, namely 'Photography Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "photo" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pottery with a fixed text, namely 'Pottery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pottery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=printer_ink with a fixed text, namely 'Printer Ink Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "printer_ink" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=psychic with a fixed text, namely 'Psychic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "psychic" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pyrotechnics with a fixed text, namely 'Fireworks Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pyrotechnics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=radiotechnics with a fixed text, namely 'Radio/Electronic Component Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "radiotechnics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=religion with a fixed text, namely 'Religious Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "religion" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=rental with a fixed text, namely 'Rental Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "rental" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=repair with a fixed text, namely 'Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "repair" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=scuba_diving with a fixed text, namely 'Scuba Diving Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "scuba_diving" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=seafood with a fixed text, namely 'Seafood Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "seafood" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=second_hand with a fixed text, namely 'Consignment/Thrift Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "second_hand" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=sewing with a fixed text, namely 'Sewing Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sewing" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=shoe_repair with a fixed text, namely 'Shoe Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "shoe_repair" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=shoes with a fixed text, namely 'Shoe Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "shoes" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=spices with a fixed text, namely 'Spice Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "spices" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=sports with a fixed text, namely 'Sporting Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sports" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=stationery with a fixed text, namely 'Stationery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "stationery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=storage_rental with a fixed text, namely 'Storage Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "storage_rental" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "supermarket" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=swimming_pool with a fixed text, namely 'Pool Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "swimming_pool" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tailor with a fixed text, namely 'Tailor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tailor" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tattoo with a fixed text, namely 'Tattoo Parlor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tattoo" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tea with a fixed text, namely 'Tea Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tea" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=telecommunication with a fixed text, namely 'Telecom Retail Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "telecommunication" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=ticket with a fixed text, namely 'Ticket Seller' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "ticket" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tiles with a fixed text, namely 'Tile Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tiles" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tobacco with a fixed text, namely 'Tobacco Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tobacco" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tool_hire with a fixed text, namely 'Tool Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tool_hire" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=toys with a fixed text, namely 'Toy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "toys" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=trade with a fixed text, namely 'Trade Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "trade" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=travel_agency with a fixed text, namely 'Travel Agency' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "travel_agency" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=trophy with a fixed text, namely 'Trophy Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "trophy" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tyres with a fixed text, namely 'Tire Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tyres" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=vacuum_cleaner with a fixed text, namely 'Vacuum Cleaner Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "vacuum_cleaner" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=variety_store with a fixed text, namely 'Variety Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "variety_store" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=video with a fixed text, namely 'Video Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "video" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=video_games with a fixed text, namely 'Video Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "video_games" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=watches with a fixed text, namely 'Watches Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "watches" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=water with a fixed text, namely 'Drinking Water Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "water" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=water_sports with a fixed text, namely 'Watersport/Swim Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "water_sports" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=weapons with a fixed text, namely 'Weapon Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "weapons" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=wholesale with a fixed text, namely 'Wholesale Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "wholesale" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=wigs with a fixed text, namely 'Wig Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "wigs" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=window_blind with a fixed text, namely 'Window Blind Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "window_blind" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=wine with a fixed text, namely 'Wine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "wine" + }, + { + "key": "opening_hours", + "description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" }, { "key": "website", "description": "Layer 'Shop' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" }, + { + "key": "contact:website", + "description": "Layer 'Shop' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, { "key": "email", "description": "Layer 'Shop' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" }, { - "key": "opening_hours", - "description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + "key": "contact:email", + "description": "Layer 'Shop' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'Shop' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" }, { "key": "payment:cash", diff --git a/Docs/TagInfo/mapcomplete_pets.json b/Docs/TagInfo/mapcomplete_pets.json index b64e71825..125b76155 100644 --- a/Docs/TagInfo/mapcomplete_pets.json +++ b/Docs/TagInfo/mapcomplete_pets.json @@ -478,27 +478,43 @@ }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + "description": "Layer 'Dog-friendly shops' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "agrarian" }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows shop=convenience with a fixed text, namely 'Convenience store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", - "value": "convenience" + "description": "Layer 'Dog-friendly shops' shows shop=alcohol with a fixed text, namely 'Liquor Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "alcohol" }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", - "value": "supermarket" + "description": "Layer 'Dog-friendly shops' shows shop=anime with a fixed text, namely 'Anime / Manga Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "anime" }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows shop=clothes with a fixed text, namely 'Clothing store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", - "value": "clothes" + "description": "Layer 'Dog-friendly shops' shows shop=antiques with a fixed text, namely 'Antiques Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "antiques" }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", - "value": "hairdresser" + "description": "Layer 'Dog-friendly shops' shows shop=appliance with a fixed text, namely 'Appliance Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "appliance" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=art with a fixed text, namely 'Art Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "art" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=baby_goods with a fixed text, namely 'Baby Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "baby_goods" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=bag with a fixed text, namely 'Bag/Luggage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "bag" }, { "key": "shop", @@ -507,29 +523,786 @@ }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows shop=car_repair with a fixed text, namely 'Car repair (garage)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "description": "Layer 'Dog-friendly shops' shows shop=bathroom_furnishing with a fixed text, namely 'Bathroom Furnishing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "bathroom_furnishing" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=beauty with a fixed text, namely 'Beauty Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "beauty" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=bed with a fixed text, namely 'Bedding/Mattress Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "bed" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=beverages with a fixed text, namely 'Beverage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "beverages" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=bicycle with a fixed text, namely 'Bicycle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "bicycle" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=boat with a fixed text, namely 'Boat Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "boat" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=bookmaker with a fixed text, namely 'Bookmaker' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "bookmaker" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=books with a fixed text, namely 'Book Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "books" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=brewing_supplies with a fixed text, namely 'Brewing Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "brewing_supplies" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=butcher with a fixed text, namely 'Butcher' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "butcher" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=camera with a fixed text, namely 'Camera Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "camera" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=candles with a fixed text, namely 'Candle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "candles" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=cannabis with a fixed text, namely 'Cannabis Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "cannabis" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=car with a fixed text, namely 'Car Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "car" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=car_parts with a fixed text, namely 'Car Parts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "car_parts" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=car_repair with a fixed text, namely 'Car Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", "value": "car_repair" }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows shop=car with a fixed text, namely 'Car dealer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", - "value": "car" + "description": "Layer 'Dog-friendly shops' shows shop=caravan with a fixed text, namely 'RV Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "caravan" }, { - "key": "phone", - "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=carpet with a fixed text, namely 'Carpet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "carpet" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=catalogue with a fixed text, namely 'Catalog Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "catalogue" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=charity with a fixed text, namely 'Charity Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "charity" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=cheese with a fixed text, namely 'Cheese Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "cheese" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=chemist with a fixed text, namely 'Drugstore' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "chemist" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=chocolate with a fixed text, namely 'Chocolate Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "chocolate" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=clothes with a fixed text, namely 'Clothing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "clothes" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=coffee with a fixed text, namely 'Coffee Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "coffee" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=collector with a fixed text, namely 'Collectibles Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "collector" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=computer with a fixed text, namely 'Computer Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "computer" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=confectionery with a fixed text, namely 'Candy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "confectionery" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=convenience with a fixed text, namely 'Convenience Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "convenience" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=copyshop with a fixed text, namely 'Copy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "copyshop" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=cosmetics with a fixed text, namely 'Cosmetics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "cosmetics" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=country_store with a fixed text, namely 'Country Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "country_store" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=craft with a fixed text, namely 'Arts & Crafts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "craft" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=curtain with a fixed text, namely 'Curtain Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "curtain" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=dairy with a fixed text, namely 'Dairy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "dairy" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=deli with a fixed text, namely 'Deli' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "deli" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=department_store with a fixed text, namely 'Department Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "department_store" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=doityourself with a fixed text, namely 'DIY Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "doityourself" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=doors with a fixed text, namely 'Door Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "doors" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=dry_cleaning with a fixed text, namely 'Dry Cleaner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "dry_cleaning" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=e-cigarette with a fixed text, namely 'E-Cigarette Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "e-cigarette" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=electrical with a fixed text, namely 'Electrical Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "electrical" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=electronics with a fixed text, namely 'Electronics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "electronics" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=erotic with a fixed text, namely 'Erotic Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "erotic" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=fabric with a fixed text, namely 'Fabric Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "fabric" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=farm with a fixed text, namely 'Produce Stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "farm" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=fashion_accessories with a fixed text, namely 'Fashion Accessories Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "fashion_accessories" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=fireplace with a fixed text, namely 'Fireplace Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "fireplace" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=fishing with a fixed text, namely 'Fishing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "fishing" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=flooring with a fixed text, namely 'Flooring Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "flooring" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=florist with a fixed text, namely 'Florist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "florist" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=frame with a fixed text, namely 'Framing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "frame" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=frozen_food with a fixed text, namely 'Frozen Food Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "frozen_food" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=fuel with a fixed text, namely 'Fuel Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "fuel" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=funeral_directors with a fixed text, namely 'Funeral Home' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "funeral_directors" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=furniture with a fixed text, namely 'Furniture Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "furniture" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=games with a fixed text, namely 'Tabletop Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "games" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=garden_centre with a fixed text, namely 'Garden Center' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "garden_centre" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=gas with a fixed text, namely 'Bottled Gas Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "gas" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=general with a fixed text, namely 'General Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "general" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=gift with a fixed text, namely 'Gift Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "gift" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=greengrocer with a fixed text, namely 'Greengrocer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "greengrocer" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hairdresser" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hairdresser_supply with a fixed text, namely 'Hairdresser Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hairdresser_supply" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hardware with a fixed text, namely 'Hardware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hardware" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=health_food with a fixed text, namely 'Health Food Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "health_food" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hearing_aids with a fixed text, namely 'Hearing Aids Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hearing_aids" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=herbalist with a fixed text, namely 'Herbalist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "herbalist" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hifi with a fixed text, namely 'Hifi Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hifi" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hobby with a fixed text, namely 'Hobby Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hobby" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=household_linen with a fixed text, namely 'Household Linen Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "household_linen" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=houseware with a fixed text, namely 'Houseware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "houseware" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hunting with a fixed text, namely 'Hunting Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hunting" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=interior_decoration with a fixed text, namely 'Interior Decoration Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "interior_decoration" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=jewelry with a fixed text, namely 'Jewelry Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "jewelry" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=kiosk with a fixed text, namely 'Kiosk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "kiosk" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=kitchen with a fixed text, namely 'Kitchen Design Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "kitchen" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=laundry with a fixed text, namely 'Laundry' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "laundry" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=leather with a fixed text, namely 'Leather Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "leather" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=lighting with a fixed text, namely 'Lighting Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "lighting" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=locksmith with a fixed text, namely 'Locksmith' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "locksmith" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=lottery with a fixed text, namely 'Lottery Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "lottery" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=mall with a fixed text, namely 'Mall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "mall" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=massage with a fixed text, namely 'Massage Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "massage" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=medical_supply with a fixed text, namely 'Medical Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "medical_supply" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=military_surplus with a fixed text, namely 'Military Surplus Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "military_surplus" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=mobile_phone with a fixed text, namely 'Mobile Phone Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "mobile_phone" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=model with a fixed text, namely 'Model Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "model" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=money_lender with a fixed text, namely 'Money Lender' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "money_lender" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=motorcycle with a fixed text, namely 'Motorcycle Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "motorcycle" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=motorcycle_repair with a fixed text, namely 'Motorcycle Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "motorcycle_repair" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=music with a fixed text, namely 'Music Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "music" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=musical_instrument with a fixed text, namely 'Musical Instrument Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "musical_instrument" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=newsagent with a fixed text, namely 'Newspaper/Magazine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "newsagent" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=nutrition_supplements with a fixed text, namely 'Nutrition Supplements Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "nutrition_supplements" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=optician with a fixed text, namely 'Optician' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "optician" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=outdoor with a fixed text, namely 'Outdoors Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "outdoor" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=outpost with a fixed text, namely 'Online Retailer Outpost' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "outpost" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=paint with a fixed text, namely 'Paint Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "paint" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=party with a fixed text, namely 'Party Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "party" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=pastry with a fixed text, namely 'Pastry Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "pastry" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=pawnbroker with a fixed text, namely 'Pawn Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "pawnbroker" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=perfumery with a fixed text, namely 'Perfume Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "perfumery" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=pet with a fixed text, namely 'Pet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "pet" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=pet_grooming with a fixed text, namely 'Pet Grooming Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "pet_grooming" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=photo with a fixed text, namely 'Photography Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "photo" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=pottery with a fixed text, namely 'Pottery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "pottery" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=printer_ink with a fixed text, namely 'Printer Ink Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "printer_ink" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=psychic with a fixed text, namely 'Psychic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "psychic" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=pyrotechnics with a fixed text, namely 'Fireworks Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "pyrotechnics" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=radiotechnics with a fixed text, namely 'Radio/Electronic Component Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "radiotechnics" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=religion with a fixed text, namely 'Religious Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "religion" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=rental with a fixed text, namely 'Rental Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "rental" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=repair with a fixed text, namely 'Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "repair" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=scuba_diving with a fixed text, namely 'Scuba Diving Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "scuba_diving" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=seafood with a fixed text, namely 'Seafood Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "seafood" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=second_hand with a fixed text, namely 'Consignment/Thrift Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "second_hand" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=sewing with a fixed text, namely 'Sewing Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "sewing" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=shoe_repair with a fixed text, namely 'Shoe Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "shoe_repair" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=shoes with a fixed text, namely 'Shoe Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "shoes" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=spices with a fixed text, namely 'Spice Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "spices" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=sports with a fixed text, namely 'Sporting Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "sports" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=stationery with a fixed text, namely 'Stationery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "stationery" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=storage_rental with a fixed text, namely 'Storage Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "storage_rental" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "supermarket" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=swimming_pool with a fixed text, namely 'Pool Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "swimming_pool" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tailor with a fixed text, namely 'Tailor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tailor" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tattoo with a fixed text, namely 'Tattoo Parlor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tattoo" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tea with a fixed text, namely 'Tea Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tea" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=telecommunication with a fixed text, namely 'Telecom Retail Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "telecommunication" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=ticket with a fixed text, namely 'Ticket Seller' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "ticket" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tiles with a fixed text, namely 'Tile Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tiles" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tobacco with a fixed text, namely 'Tobacco Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tobacco" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tool_hire with a fixed text, namely 'Tool Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tool_hire" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=toys with a fixed text, namely 'Toy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "toys" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=trade with a fixed text, namely 'Trade Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "trade" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=travel_agency with a fixed text, namely 'Travel Agency' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "travel_agency" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=trophy with a fixed text, namely 'Trophy Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "trophy" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tyres with a fixed text, namely 'Tire Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tyres" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=vacuum_cleaner with a fixed text, namely 'Vacuum Cleaner Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "vacuum_cleaner" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=variety_store with a fixed text, namely 'Variety Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "variety_store" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=video with a fixed text, namely 'Video Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "video" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=video_games with a fixed text, namely 'Video Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "video_games" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=watches with a fixed text, namely 'Watches Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "watches" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=water with a fixed text, namely 'Drinking Water Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "water" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=water_sports with a fixed text, namely 'Watersport/Swim Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "water_sports" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=weapons with a fixed text, namely 'Weapon Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "weapons" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=wholesale with a fixed text, namely 'Wholesale Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "wholesale" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=wigs with a fixed text, namely 'Wig Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "wigs" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=window_blind with a fixed text, namely 'Window Blind Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "window_blind" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=wine with a fixed text, namely 'Wine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "wine" + }, + { + "key": "opening_hours", + "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" }, { "key": "website", "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" }, + { + "key": "contact:website", + "description": "Layer 'Dog-friendly shops' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + }, { "key": "email", "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" }, { - "key": "opening_hours", - "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + "key": "contact:email", + "description": "Layer 'Dog-friendly shops' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + }, + { + "key": "phone", + "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + }, + { + "key": "contact:phone", + "description": "Layer 'Dog-friendly shops' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" }, { "key": "payment:cash", diff --git a/Docs/TagInfo/mapcomplete_shops.json b/Docs/TagInfo/mapcomplete_shops.json index aa0fd7a71..8d07b36e3 100644 --- a/Docs/TagInfo/mapcomplete_shops.json +++ b/Docs/TagInfo/mapcomplete_shops.json @@ -36,27 +36,43 @@ }, { "key": "shop", - "description": "Layer 'Shop' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'Open Shop Map')" + "description": "Layer 'Shop' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "agrarian" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=convenience with a fixed text, namely 'Convenience store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", - "value": "convenience" + "description": "Layer 'Shop' shows shop=alcohol with a fixed text, namely 'Liquor Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "alcohol" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", - "value": "supermarket" + "description": "Layer 'Shop' shows shop=anime with a fixed text, namely 'Anime / Manga Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "anime" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=clothes with a fixed text, namely 'Clothing store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", - "value": "clothes" + "description": "Layer 'Shop' shows shop=antiques with a fixed text, namely 'Antiques Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "antiques" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", - "value": "hairdresser" + "description": "Layer 'Shop' shows shop=appliance with a fixed text, namely 'Appliance Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "appliance" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=art with a fixed text, namely 'Art Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "art" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=baby_goods with a fixed text, namely 'Baby Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "baby_goods" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bag with a fixed text, namely 'Bag/Luggage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "bag" }, { "key": "shop", @@ -65,29 +81,786 @@ }, { "key": "shop", - "description": "Layer 'Shop' shows shop=car_repair with a fixed text, namely 'Car repair (garage)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "description": "Layer 'Shop' shows shop=bathroom_furnishing with a fixed text, namely 'Bathroom Furnishing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "bathroom_furnishing" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=beauty with a fixed text, namely 'Beauty Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "beauty" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bed with a fixed text, namely 'Bedding/Mattress Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "bed" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=beverages with a fixed text, namely 'Beverage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "beverages" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bicycle with a fixed text, namely 'Bicycle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "bicycle" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=boat with a fixed text, namely 'Boat Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "boat" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bookmaker with a fixed text, namely 'Bookmaker' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "bookmaker" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=books with a fixed text, namely 'Book Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "books" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=brewing_supplies with a fixed text, namely 'Brewing Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "brewing_supplies" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=butcher with a fixed text, namely 'Butcher' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "butcher" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=camera with a fixed text, namely 'Camera Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "camera" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=candles with a fixed text, namely 'Candle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "candles" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=cannabis with a fixed text, namely 'Cannabis Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "cannabis" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=car with a fixed text, namely 'Car Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "car" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=car_parts with a fixed text, namely 'Car Parts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "car_parts" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=car_repair with a fixed text, namely 'Car Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", "value": "car_repair" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=car with a fixed text, namely 'Car dealer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", - "value": "car" + "description": "Layer 'Shop' shows shop=caravan with a fixed text, namely 'RV Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "caravan" }, { - "key": "phone", - "description": "Layer 'Shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Open Shop Map')" + "key": "shop", + "description": "Layer 'Shop' shows shop=carpet with a fixed text, namely 'Carpet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "carpet" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=catalogue with a fixed text, namely 'Catalog Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "catalogue" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=charity with a fixed text, namely 'Charity Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "charity" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=cheese with a fixed text, namely 'Cheese Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "cheese" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=chemist with a fixed text, namely 'Drugstore' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "chemist" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=chocolate with a fixed text, namely 'Chocolate Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "chocolate" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=clothes with a fixed text, namely 'Clothing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "clothes" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=coffee with a fixed text, namely 'Coffee Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "coffee" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=collector with a fixed text, namely 'Collectibles Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "collector" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=computer with a fixed text, namely 'Computer Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "computer" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=confectionery with a fixed text, namely 'Candy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "confectionery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=convenience with a fixed text, namely 'Convenience Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "convenience" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=copyshop with a fixed text, namely 'Copy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "copyshop" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=cosmetics with a fixed text, namely 'Cosmetics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "cosmetics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=country_store with a fixed text, namely 'Country Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "country_store" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=craft with a fixed text, namely 'Arts & Crafts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "craft" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=curtain with a fixed text, namely 'Curtain Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "curtain" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=dairy with a fixed text, namely 'Dairy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "dairy" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=deli with a fixed text, namely 'Deli' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "deli" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=department_store with a fixed text, namely 'Department Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "department_store" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=doityourself with a fixed text, namely 'DIY Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "doityourself" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=doors with a fixed text, namely 'Door Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "doors" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=dry_cleaning with a fixed text, namely 'Dry Cleaner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "dry_cleaning" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=e-cigarette with a fixed text, namely 'E-Cigarette Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "e-cigarette" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=electrical with a fixed text, namely 'Electrical Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "electrical" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=electronics with a fixed text, namely 'Electronics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "electronics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=erotic with a fixed text, namely 'Erotic Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "erotic" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fabric with a fixed text, namely 'Fabric Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "fabric" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=farm with a fixed text, namely 'Produce Stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "farm" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fashion_accessories with a fixed text, namely 'Fashion Accessories Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "fashion_accessories" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fireplace with a fixed text, namely 'Fireplace Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "fireplace" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fishing with a fixed text, namely 'Fishing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "fishing" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=flooring with a fixed text, namely 'Flooring Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "flooring" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=florist with a fixed text, namely 'Florist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "florist" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=frame with a fixed text, namely 'Framing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "frame" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=frozen_food with a fixed text, namely 'Frozen Food Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "frozen_food" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fuel with a fixed text, namely 'Fuel Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "fuel" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=funeral_directors with a fixed text, namely 'Funeral Home' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "funeral_directors" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=furniture with a fixed text, namely 'Furniture Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "furniture" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=games with a fixed text, namely 'Tabletop Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "games" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=garden_centre with a fixed text, namely 'Garden Center' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "garden_centre" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=gas with a fixed text, namely 'Bottled Gas Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "gas" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=general with a fixed text, namely 'General Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "general" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=gift with a fixed text, namely 'Gift Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "gift" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=greengrocer with a fixed text, namely 'Greengrocer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "greengrocer" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hairdresser" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hairdresser_supply with a fixed text, namely 'Hairdresser Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hairdresser_supply" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hardware with a fixed text, namely 'Hardware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hardware" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=health_food with a fixed text, namely 'Health Food Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "health_food" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hearing_aids with a fixed text, namely 'Hearing Aids Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hearing_aids" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=herbalist with a fixed text, namely 'Herbalist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "herbalist" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hifi with a fixed text, namely 'Hifi Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hifi" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hobby with a fixed text, namely 'Hobby Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hobby" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=household_linen with a fixed text, namely 'Household Linen Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "household_linen" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=houseware with a fixed text, namely 'Houseware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "houseware" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hunting with a fixed text, namely 'Hunting Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hunting" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=interior_decoration with a fixed text, namely 'Interior Decoration Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "interior_decoration" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=jewelry with a fixed text, namely 'Jewelry Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "jewelry" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=kiosk with a fixed text, namely 'Kiosk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "kiosk" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=kitchen with a fixed text, namely 'Kitchen Design Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "kitchen" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=laundry with a fixed text, namely 'Laundry' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "laundry" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=leather with a fixed text, namely 'Leather Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "leather" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=lighting with a fixed text, namely 'Lighting Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "lighting" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=locksmith with a fixed text, namely 'Locksmith' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "locksmith" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=lottery with a fixed text, namely 'Lottery Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "lottery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=mall with a fixed text, namely 'Mall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "mall" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=massage with a fixed text, namely 'Massage Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "massage" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=medical_supply with a fixed text, namely 'Medical Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "medical_supply" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=military_surplus with a fixed text, namely 'Military Surplus Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "military_surplus" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=mobile_phone with a fixed text, namely 'Mobile Phone Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "mobile_phone" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=model with a fixed text, namely 'Model Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "model" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=money_lender with a fixed text, namely 'Money Lender' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "money_lender" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=motorcycle with a fixed text, namely 'Motorcycle Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "motorcycle" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=motorcycle_repair with a fixed text, namely 'Motorcycle Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "motorcycle_repair" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=music with a fixed text, namely 'Music Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "music" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=musical_instrument with a fixed text, namely 'Musical Instrument Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "musical_instrument" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=newsagent with a fixed text, namely 'Newspaper/Magazine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "newsagent" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=nutrition_supplements with a fixed text, namely 'Nutrition Supplements Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "nutrition_supplements" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=optician with a fixed text, namely 'Optician' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "optician" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=outdoor with a fixed text, namely 'Outdoors Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "outdoor" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=outpost with a fixed text, namely 'Online Retailer Outpost' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "outpost" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=paint with a fixed text, namely 'Paint Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "paint" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=party with a fixed text, namely 'Party Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "party" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pastry with a fixed text, namely 'Pastry Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "pastry" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pawnbroker with a fixed text, namely 'Pawn Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "pawnbroker" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=perfumery with a fixed text, namely 'Perfume Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "perfumery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pet with a fixed text, namely 'Pet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "pet" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pet_grooming with a fixed text, namely 'Pet Grooming Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "pet_grooming" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=photo with a fixed text, namely 'Photography Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "photo" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pottery with a fixed text, namely 'Pottery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "pottery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=printer_ink with a fixed text, namely 'Printer Ink Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "printer_ink" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=psychic with a fixed text, namely 'Psychic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "psychic" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pyrotechnics with a fixed text, namely 'Fireworks Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "pyrotechnics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=radiotechnics with a fixed text, namely 'Radio/Electronic Component Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "radiotechnics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=religion with a fixed text, namely 'Religious Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "religion" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=rental with a fixed text, namely 'Rental Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "rental" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=repair with a fixed text, namely 'Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "repair" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=scuba_diving with a fixed text, namely 'Scuba Diving Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "scuba_diving" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=seafood with a fixed text, namely 'Seafood Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "seafood" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=second_hand with a fixed text, namely 'Consignment/Thrift Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "second_hand" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=sewing with a fixed text, namely 'Sewing Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "sewing" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=shoe_repair with a fixed text, namely 'Shoe Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "shoe_repair" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=shoes with a fixed text, namely 'Shoe Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "shoes" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=spices with a fixed text, namely 'Spice Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "spices" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=sports with a fixed text, namely 'Sporting Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "sports" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=stationery with a fixed text, namely 'Stationery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "stationery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=storage_rental with a fixed text, namely 'Storage Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "storage_rental" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "supermarket" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=swimming_pool with a fixed text, namely 'Pool Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "swimming_pool" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tailor with a fixed text, namely 'Tailor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tailor" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tattoo with a fixed text, namely 'Tattoo Parlor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tattoo" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tea with a fixed text, namely 'Tea Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tea" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=telecommunication with a fixed text, namely 'Telecom Retail Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "telecommunication" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=ticket with a fixed text, namely 'Ticket Seller' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "ticket" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tiles with a fixed text, namely 'Tile Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tiles" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tobacco with a fixed text, namely 'Tobacco Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tobacco" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tool_hire with a fixed text, namely 'Tool Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tool_hire" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=toys with a fixed text, namely 'Toy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "toys" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=trade with a fixed text, namely 'Trade Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "trade" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=travel_agency with a fixed text, namely 'Travel Agency' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "travel_agency" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=trophy with a fixed text, namely 'Trophy Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "trophy" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tyres with a fixed text, namely 'Tire Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tyres" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=vacuum_cleaner with a fixed text, namely 'Vacuum Cleaner Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "vacuum_cleaner" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=variety_store with a fixed text, namely 'Variety Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "variety_store" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=video with a fixed text, namely 'Video Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "video" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=video_games with a fixed text, namely 'Video Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "video_games" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=watches with a fixed text, namely 'Watches Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "watches" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=water with a fixed text, namely 'Drinking Water Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "water" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=water_sports with a fixed text, namely 'Watersport/Swim Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "water_sports" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=weapons with a fixed text, namely 'Weapon Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "weapons" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=wholesale with a fixed text, namely 'Wholesale Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "wholesale" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=wigs with a fixed text, namely 'Wig Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "wigs" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=window_blind with a fixed text, namely 'Window Blind Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "window_blind" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=wine with a fixed text, namely 'Wine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "wine" + }, + { + "key": "opening_hours", + "description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Shop Map')" }, { "key": "website", "description": "Layer 'Shop' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Open Shop Map')" }, + { + "key": "contact:website", + "description": "Layer 'Shop' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, { "key": "email", "description": "Layer 'Shop' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Open Shop Map')" }, { - "key": "opening_hours", - "description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Shop Map')" + "key": "contact:email", + "description": "Layer 'Shop' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "phone", + "description": "Layer 'Shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "contact:phone", + "description": "Layer 'Shop' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Open Shop Map')" }, { "key": "payment:cash", diff --git a/assets/contributors.json b/assets/contributors.json index 30b90b91e..1aa6b03b6 100644 --- a/assets/contributors.json +++ b/assets/contributors.json @@ -1,11 +1,11 @@ { "contributors": [ { - "commits": 4040, + "commits": 4051, "contributor": "Pieter Vander Vennet" }, { - "commits": 86, + "commits": 103, "contributor": "Robin van der Linde" }, { @@ -188,6 +188,10 @@ "commits": 2, "contributor": "Stanislas Gueniffey" }, + { + "commits": 1, + "contributor": "loviuz" + }, { "commits": 1, "contributor": "kjonosm" diff --git a/assets/layers/artwork/artwork.json b/assets/layers/artwork/artwork.json index c8112879f..b4ae9380b 100644 --- a/assets/layers/artwork/artwork.json +++ b/assets/layers/artwork/artwork.json @@ -84,7 +84,8 @@ "id": "Beragam karya seni", "pt": "Diversas obras de arte", "hu": "Szobrok, mellszobrok, graffitik és egyéb műalkotások nyílt világtérképe", - "da": "Forskellige kunstværker" + "da": "Forskellige kunstværker", + "ca": "Un mapa obert d'estàtues, busts, grafitis i altres obres d'art del tot el món" }, "minzoom": 12, "presets": [ diff --git a/assets/layers/recycling/recycling.json b/assets/layers/recycling/recycling.json index 7d41eb387..8629eed98 100644 --- a/assets/layers/recycling/recycling.json +++ b/assets/layers/recycling/recycling.json @@ -469,7 +469,8 @@ "nl": "Dit is een recyclingcontainer", "de": "Dies ist ein Recycling-Container", "es": "Esto es un contenedor de reciclaje", - "it": "Questo è un contenitore per il riciclo di rifiuti" + "it": "Questo è un contenitore per il riciclo di rifiuti", + "ca": "Açò és un contenidor de reciclatge" } }, { @@ -479,7 +480,8 @@ "nl": "Dit is een recyclingcentrum", "de": "Dies ist ein Wertstoffhof", "es": "Esto es un centro de reciclaje", - "it": "Questo è un centro per la raccola e riciclo di rifiuti" + "it": "Questo è un centro per la raccola e riciclo di rifiuti", + "ca": "Açò és un centre de reciclatge" } }, { @@ -529,7 +531,8 @@ "nl": "Dit recyclagecentrum heet {name}", "de": "Dieser Wertstoffhof heißt {name}", "es": "Este centro de reciclaje se llama {name}", - "it": "Questo centro raccolta e riciclo rifiuti si chiama {name}" + "it": "Questo centro raccolta e riciclo rifiuti si chiama {name}", + "ca": "Aquest centre de reciclatge s'anomena {name}" }, "freeform": { "key": "name" @@ -586,7 +589,8 @@ "nl": "Deze container is buiten", "de": "Der Container befindet sich im Freien", "es": "Este contenedor se sitúa en el exterior", - "it": "Questo contenitore è all'aperto" + "it": "Questo contenitore è all'aperto", + "ca": "Aquest contenidor està situat a l'aire lliure" } } ] @@ -624,7 +628,8 @@ "en": "Beverage cartons can be recycled here", "nl": "Drankpakken kunnen hier gerecycled worden", "de": "Getränkekartons können hier recycelt werden", - "it": "Cartoni per bevande" + "it": "Cartoni per bevande", + "ca": "Ací es poden reciclar els cartons de begudes" }, "icon": { "path": "./assets/layers/recycling/beverage_cartons.svg", @@ -639,7 +644,8 @@ "nl": "Blikken kunnen hier gerecycled worden", "de": "Dosen können hier recycelt werden", "es": "Aquí se pueden reciclar latas", - "it": "Lattine" + "it": "Lattine", + "ca": "Ací es poden reciclar llaunes" }, "icon": { "path": "./assets/layers/recycling/cans.svg", @@ -713,7 +719,8 @@ "nl": "Organisch afval kan hier gerecycled worden", "de": "Bio-Abfall kann hier recycelt werden", "es": "Aquí se pueden reciclar residuos orgánicos", - "it": "Umido" + "it": "Umido", + "ca": "Ací es poden reciclar residus orgànics" }, "hideInAnswer": true, "icon": { @@ -729,7 +736,8 @@ "nl": "Glazen flessen kunnen hier gerecycled worden", "de": "Glasflaschen können hier recycelt werden", "es": "Aquí se pueden reciclar botellas de cristal", - "it": "Bottiglie di vetro" + "it": "Bottiglie di vetro", + "ca": "Ací es poden reciclar ampolles de vidre" }, "icon": { "path": "./assets/layers/recycling/glass_bottles.svg", @@ -744,7 +752,8 @@ "nl": "Glas kan hier gerecycled worden", "de": "Glas kann hier recycelt werden", "es": "Aquí se puede reciclar cristal", - "it": "Vetro" + "it": "Vetro", + "ca": "Ací es pot reciclar vidre" }, "icon": { "path": "./assets/layers/recycling/glass.svg", @@ -759,7 +768,8 @@ "nl": "Kranten kunnen hier gerecycled worden", "de": "Zeitungen können hier recycelt werden", "es": "Aquí se pueden reciclar periódicos", - "it": "Giornali" + "it": "Giornali", + "ca": "Ací es poden reciclar diaris" }, "icon": { "path": "./assets/layers/recycling/newspaper.svg", @@ -774,7 +784,8 @@ "nl": "Papier kan hier gerecycled worden", "de": "Papier kann hier recycelt werden", "es": "Aquí se puede reciclar papel", - "it": "Carta" + "it": "Carta", + "ca": "Ací es pot reciclar paper" }, "icon": { "path": "./assets/layers/recycling/paper.svg", @@ -789,7 +800,8 @@ "nl": "Plastic flessen kunnen hier gerecycled worden", "de": "Plastikflaschen können hier recycelt werden", "es": "Aquí se pueden reciclar botellas de plástico", - "it": "Bottiglie di platica" + "it": "Bottiglie di platica", + "ca": "Ací es poden reciclar ampolles de plàstic" }, "icon": { "path": "./assets/layers/recycling/plastic_bottles.svg", @@ -804,7 +816,8 @@ "nl": "Plastic verpakking kan hier gerecycled worden", "de": "Kunststoffverpackungen können hier recycelt werden", "es": "Aquí se pueden reciclar embalajes plásticos", - "it": "Confezioni di plastica" + "it": "Confezioni di plastica", + "ca": "Ací es poden reciclar envasos de plàstic" }, "icon": { "path": "./assets/layers/recycling/plastic_packaging.svg", @@ -819,7 +832,8 @@ "nl": "Plastic kan hier gerecycled worden", "de": "Kunststoff kann hier recycelt werden", "es": "Aquí se puede reciclar plástico", - "it": "Plastica" + "it": "Plastica", + "ca": "Ací es pot reciclar plàstic" }, "icon": { "path": "./assets/layers/recycling/plastic.svg", @@ -902,7 +916,8 @@ "en": "Residual waste can be recycled here", "nl": "Restafval kan hier gerecycled worden", "de": "Restmüll kann hier recycelt werden", - "it": "Secco" + "it": "Secco", + "ca": "Ací es pot reciclar el rebuig" }, "icon": { "path": "./assets/layers/waste_disposal/waste_disposal.svg", @@ -918,8 +933,9 @@ "en": "This recycling facility is operated by {operator}", "nl": "Deze recyclingfaciliteit wordt beheerd door {operator}", "de": "Diese Recyclinganlage wird betrieben von {operator}", - "es": "Esta facilidad de reciclado la opera {operator}", - "it": "Questa struttura di raccola e riciclo è gestita da {operator}" + "es": "Esta infraestructura de reciclado la opera {operator}", + "it": "Questa struttura di raccola e riciclo è gestita da {operator}", + "ca": "Aquesta infraestuctura de reciclatge està operada per {operator}" }, "question": { "en": "What company operates this recycling facility?", diff --git a/assets/layers/school/school.json b/assets/layers/school/school.json index 257431656..ae5cf3809 100644 --- a/assets/layers/school/school.json +++ b/assets/layers/school/school.json @@ -322,7 +322,8 @@ "inline": true, "placeholder": { "en": "Language in lowercase English", - "nl": "Taal in lowercase Engel" + "nl": "Taal in lowercase Engel", + "de": "Sprache in Englisch in Kleinbuchstaben" }, "addExtraTags": [ "fixme=Freeform tag `school:language` used, to be doublechecked" @@ -342,21 +343,24 @@ "if": "school:language=french", "then": { "en": "French is the main language of {name}", - "nl": "Frans is de voertaal van {name}" + "nl": "Frans is de voertaal van {name}", + "de": "Französisch ist die Hauptsprache von {name}" } }, { "if": "school:language=dutch", "then": { "en": "Dutch is the main language of {name}", - "nl": "Nederlands is de voertaal van {name}" + "nl": "Nederlands is de voertaal van {name}", + "de": "Niederländisch ist die Hauptsprache von {name}" } }, { "if": "school:language=german", "then": { "en": "German is the main language of {name}", - "nl": "Duits is de voertaal van {name}" + "nl": "Duits is de voertaal van {name}", + "de": "Deutsch ist die Hauptsprache von {name}" } }, { diff --git a/assets/themes/artwork/artwork.json b/assets/themes/artwork/artwork.json index 62a5ceb4c..62576821c 100644 --- a/assets/themes/artwork/artwork.json +++ b/assets/themes/artwork/artwork.json @@ -33,7 +33,7 @@ "nb_NO": "Velkommen til det åpne kunstverkskartet, et kart over statuer, byster, grafitti, og andre kunstverk i verden", "hu": "Szobrok, mellszobrok, graffitik és egyéb műalkotások nyílt világtérképe", "pl": "Witaj w Open Artwork Map, mapie pomników, popierś, graffitti i innych dzieł sztuki z całego świata", - "ca": "Benvingut a Open Artwork Map, un mapa d'estàtues, busts, grafitis i altres obres d'art del tot el món", + "ca": "Un mapa obert d'estàtues, busts, grafitis i altres obres d'art del tot el món", "zh_Hans": "欢迎使用Open Artwork Map,一个雕塑、半身像、涂鸦和其他全球艺术品的地图", "fil": "Malugod na pag-dating sa Open Artwork Map, ang mapa ng mga bantayog, graffiti, at iba pang likhang sining sa buong mundo" }, diff --git a/assets/themes/bicycle_rental/bicycle_rental.json b/assets/themes/bicycle_rental/bicycle_rental.json index f24ff9306..9c01107a0 100644 --- a/assets/themes/bicycle_rental/bicycle_rental.json +++ b/assets/themes/bicycle_rental/bicycle_rental.json @@ -18,7 +18,8 @@ "id": "Peta dengan stasiun persewaan sepeda dan toko penyewaan sepeda", "fr": "Une carte avec des stations et magasins de location de vélos", "es": "Un mapa con estaciones de alquiler de bicicletas y tiendas de alquiler de bicicletas", - "nb_NO": "Sykkelutleiestasjoner og sykkelutleiebutikker" + "nb_NO": "Sykkelutleiestasjoner og sykkelutleiebutikker", + "ca": "Un mapa amb estacions de lloguer de bicicletes i botigues de lloguer de bicicletes" }, "description": { "en": "On this map, you'll find the many bicycle rental stations as they are known by OpenStreetMap", @@ -27,7 +28,8 @@ "fr": "Vous trouverez sur cette carte toutes les stations de location de vélo telles qu'elles sont référencées dans OpenStreetMap", "es": "En este mapa, encontrarás numerosas estaciones de alquiler de bicicletas que son conocidas por OpenStreetMap", "da": "På dette kort finder du de mange cykeludlejningsstationer, som OpenStreetMap kender dem", - "nb_NO": "Her finner du mange sykkelutleiestasjoner slik de er kjent for OpenStreetMap" + "nb_NO": "Her finner du mange sykkelutleiestasjoner slik de er kjent for OpenStreetMap", + "ca": "En aquest mapa, trobaràs nombroses estacions de lloguer de bicicletes que són conegudes per OpenStreetMap" }, "maintainer": "", "icon": "./assets/themes/bicycle_rental/logo.svg", diff --git a/assets/themes/binoculars/binoculars.json b/assets/themes/binoculars/binoculars.json index 95e17aab7..e0959f23e 100644 --- a/assets/themes/binoculars/binoculars.json +++ b/assets/themes/binoculars/binoculars.json @@ -10,7 +10,8 @@ "hu": "Távcsövek", "fr": "Jumelles", "es": "Binoculares", - "da": "Kikkerter" + "da": "Kikkerter", + "ca": "Binoculars" }, "shortDescription": { "en": "A map with fixed binoculars", @@ -21,7 +22,8 @@ "zh_Hant": "固定望遠鏡的地圖", "hu": "Rögzített távcsövek (binokulárok) térképe", "fr": "Une carte de jumelles panoramiques", - "es": "Un mapa con prismáticos fijos" + "es": "Un mapa con prismáticos fijos", + "ca": "Un mapa amb prismàtics fixos" }, "description": { "en": "A map with binoculars fixed in place with a pole. It can typically be found on touristic locations, viewpoints, on top of panoramic towers or occasionally on a nature reserve.", @@ -32,7 +34,8 @@ "hu": "Rúdra rögzített távcsövek térképe. Jellemzően turisztikailag érdekes, panorámás helyeken, kilátótornyok tetején vagy természetvédelmi területen találhatók.", "fr": "Une carte des longue-vues fixes. Se trouve typiquement sur les sites touristiques, les points de vue, les tours panoramiques ou dans les réserves naturelles.", "es": "Un mapa con prismáticos fijos en un poste. Suele encontrarse en lugares turísticos, miradores, en lo alto de torres panorámicas u ocasionalmente en una reserva natural.", - "nb_NO": "Stedsbundne kikkerter på påle. Vanligvis på turiststeder, utkikkspunkter, på toppen av utsiktstårn, og noen ganger i naturreservat." + "nb_NO": "Stedsbundne kikkerter på påle. Vanligvis på turiststeder, utkikkspunkter, på toppen av utsiktstårn, og noen ganger i naturreservat.", + "ca": "Un mapa amb prismàtics fixos en un pal. Sol trobar-se en llocs turístics, miradors, a la part alta de torres panoràmiques o ocasionalment en una reserva natural." }, "maintainer": "", "icon": "./assets/layers/binocular/telescope.svg", diff --git a/assets/themes/bookcases/bookcases.json b/assets/themes/bookcases/bookcases.json index 19f0636ba..479338017 100644 --- a/assets/themes/bookcases/bookcases.json +++ b/assets/themes/bookcases/bookcases.json @@ -28,7 +28,8 @@ "it": "Una libreria pubblica è una piccola cabina a lato della strada, un locale, una vecchia cabina telefonica o qualche altro luogo in cui sono tenuti libri. Chiunque può lasciare o prendere libri. Scopo della mappa è individuarle. Se scopri nuove librerie nelle vicinanze, puoi facilmente aggiungerle con un account OpenStreetMap.", "hu": "A nyilvános könyvespolc egy kis utcai szekrény, doboz, régi telefonfülke vagy más tárgy, ahol könyveket tárolnak. Bárki tehet rá vagy vihet el róla könyvet. Ez a térkép ezeket a könyvespolcokat kívánja összegyűjteni. Ha felfedezett egy új könyvespolcot a közelben, akkor egy ingyenes OpenStreetMap-fiókkal gyorsan fel is rajzolhatja a térképre.", "es": "Una librería pública es un pequeño armario en la calle, una caja, una vieja cabina telefónica o algún otro objeto donde se guardan libros. Todo el mundo puede colocar o coger un libro. Este mapa pretende recoger todas estas librerías. Puedes descubrir nuevas librerías cercanas y, con una cuenta gratuita de OpenStreetMap, añadir rápidamente tus librerías favoritas.", - "da": "Et offentligt bogskab er et lille skab, en kasse, en gammel telefonboks eller andre steder, hvor bøger opbevares. Alle kan lægge eller tage en bog. Dette kort har til formål at samle alle disse bogskabe. Du kan opdage nye bogkasser i nærheden og med en gratis OpenStreetMap-konto hurtigt tilføje dine yndlingsbogkasser." + "da": "Et offentligt bogskab er et lille skab, en kasse, en gammel telefonboks eller andre steder, hvor bøger opbevares. Alle kan lægge eller tage en bog. Dette kort har til formål at samle alle disse bogskabe. Du kan opdage nye bogkasser i nærheden og med en gratis OpenStreetMap-konto hurtigt tilføje dine yndlingsbogkasser.", + "ca": "Una llibreria pública és un xicotet armari al carrer, una caixa, una vella cabina telefònica o algun altre objecte on es guarden llibres. Tothom pot col·locar o agafar un llibre. Aquest mapa pretén recollir totes aquestes llibreries. Pots descobrir noves llibreries pròximes i, amb un compte gratuït de OpenStreetMap, afegir ràpidament les teues llibreries favorites." }, "icon": "./assets/themes/bookcases/bookcase.svg", "startLat": 0, diff --git a/assets/themes/campersite/campersite.json b/assets/themes/campersite/campersite.json index dbd7934d1..1b3baa8e9 100644 --- a/assets/themes/campersite/campersite.json +++ b/assets/themes/campersite/campersite.json @@ -37,7 +37,8 @@ "fr": "Ce site collecte les zones de camping officielles ainsi que les aires de vidange. Il est possible d’ajouter des détails à propos des services proposés ainsi que leurs coûts. Ajoutez vos images et avis. C’est un site et une application. Les données sont stockées sur OpenStreetMap, elles seront toujours gratuites et peuvent être réutilisées par n’importe quelle application.", "de": "Eine Karte für offizielle Wohnmobilstellplätze und Orte zur Entsorgung von Schmutzwasser. Sie können Details über die angebotenen Dienstleistungen und die Kosten hinzufügen, oder Bilder und Bewertungen ergänzen. Dies ist eine Webseite und eine Webapp. Die Daten werden in OpenStreetMap gespeichert, so dass sie für immer kostenlos sind und von jeder App weiterverwendet werden können.", "hu": "Ez az oldal az összes olyan hivatalos lakóautós megállóhelyet és helyet gyűjti össze, ahol szürke és fekete szennyvizet lehet üríteni. Hozzáadhat részleteket a nyújtott szolgáltatásokról és a költségekről, valamint képeket és értékeléseket. Ez egyszerre egy weboldal és egy webes alkalmazás. Az adatokat az OpenStreetMapen tároljuk, így mindig ingyenesek lesznek, és bármelyik alkalmazás újra felhasználhatja őket.", - "es": "Este sitio recoge todos los lugares oficiales de parada de caravanas y los lugares donde se pueden verter las aguas grises y negras. Puedes añadir detalles sobre los servicios prestados y el coste. Añade fotos y reseñas. Este es un sitio web y una aplicación web. Los datos se almacenan en OpenStreetMap, por lo que serán gratuitos para siempre y podrán ser reutilizados por cualquier aplicación." + "es": "Este sitio recoge todos los lugares oficiales de parada de caravanas y los lugares donde se pueden verter las aguas grises y negras. Puedes añadir detalles sobre los servicios prestados y el coste. Añade fotos y reseñas. Este es un sitio web y una aplicación web. Los datos se almacenan en OpenStreetMap, por lo que serán gratuitos para siempre y podrán ser reutilizados por cualquier aplicación.", + "ca": "Aquest lloc recull tots els llocs oficials de parada de caravanes i els llocs on es poden abocar les aigües grises i negres. Pots afegir detalls sobre els serveis prestats i el cost. Afig fotos i ressenyes. Aquest és un lloc web i una aplicació web. Les dades s'emmagatzemen en OpenStreetMap, per la qual cosa seran gratuïts per sempre i podran ser reutilitzats per qualsevol aplicació." }, "maintainer": "joost schouppe", "icon": "./assets/themes/campersite/caravan.svg", @@ -175,7 +176,8 @@ "pt_BR": "Este lugar cobra alguma taxa?", "de": "Wird hier eine Gebühr erhoben?", "es": "¿Este lugar cobra una tarifa?", - "nb_NO": "Tar dette stedet en avgift?" + "nb_NO": "Tar dette stedet en avgift?", + "ca": "Aquest lloc cobra una taxa?" }, "mappings": [ { @@ -197,7 +199,8 @@ "id": "Anda perlu membayar untuk menggunakannya", "es": "Necesitas pagar por su uso", "da": "Du skal betale for brug", - "nb_NO": "Man må betale for bruk" + "nb_NO": "Man må betale for bruk", + "ca": "Heu de pagar per l'ús" } }, { @@ -220,7 +223,8 @@ "pt_BR": "Pode ser usado de graça", "de": "Nutzung kostenlos", "es": "Se puede usar de manera gratuita", - "da": "Kan bruges gratis" + "da": "Kan bruges gratis", + "ca": "Es pot utilitzar gratuïtament" }, "addExtraTags": [ "charge=" @@ -241,7 +245,8 @@ "pt_BR": "Este lugar cobra {charge}", "de": "Die Gebühr beträgt {charge}", "es": "Este lugar cobra {charge}", - "da": "Dette sted koster {charge}" + "da": "Dette sted koster {charge}", + "ca": "Aquest lloc cobra {charge}" }, "question": { "en": "How much does this place charge?", @@ -255,7 +260,8 @@ "pt_BR": "Quanto este lugar cobra?", "de": "Wie hoch sind die Gebühren hier?", "es": "¿Cuánto cobra este lugar?", - "da": "Hvor meget koster dette sted?" + "da": "Hvor meget koster dette sted?", + "ca": "Quant cobra aquest lloc?" }, "freeform": { "key": "charge" @@ -337,7 +343,8 @@ "de": "{capacity} Wohnmobile können diesen Platz gleichzeitig nutzen", "nl": "{capacity} campers kunnen deze plaats tegelijk gebruiken", "es": "{capacity} los campistas pueden utilizar este lugar al mismo tiempo", - "da": "{capacity} campister kan bruge dette sted på samme tid" + "da": "{capacity} campister kan bruge dette sted på samme tid", + "ca": "{capacity} els acampadors poden utilitzar aquest lloc al mateix temps" }, "question": { "en": "How many campers can stay here? (skip if there is no obvious number of spaces or allowed vehicles)", @@ -350,7 +357,8 @@ "de": "Wie viele Wohnmobile können hier parken? (Überspringen, wenn es keine offensichtliche Anzahl von Stellplätzen oder erlaubten Fahrzeugen gibt)", "nl": "Hoeveel campers kunnen hier overnachten? (sla dit over als er geen duidelijk aantal plaatsen of aangeduid maximum is)", "es": "¿Cuántos campistas pueden alojarse aquí? (omitir si no hay un número evidente de plazas o vehículos permitidos)", - "da": "Hvor mange campister kan bo her? (spring over, hvis der ikke er noget åbenlyst antal pladser eller tilladte køretøjer)" + "da": "Hvor mange campister kan bo her? (spring over, hvis der ikke er noget åbenlyst antal pladser eller tilladte køretøjer)", + "ca": "Quants acampadors poden allotjar-se ací? (ometre si no hi ha un nombre evident de places o vehicles permesos)" }, "freeform": { "key": "capacity", @@ -373,7 +381,8 @@ "nl": "Biedt deze plaats internettoegang?", "es": "¿Este lugar tiene acceso a internet?", "da": "Er der internetadgang på dette sted?", - "nb_NO": "Tilbyr stedet tilgang til Internett?" + "nb_NO": "Tilbyr stedet tilgang til Internett?", + "ca": "Aquest lloc proporciona accés a Internet?" }, "mappings": [ { @@ -419,7 +428,8 @@ "nl": "Er is internettoegang", "es": "Hay acceso a internet", "da": "Der er internetadgang", - "nb_NO": "Det finnes tilgang til Internett" + "nb_NO": "Det finnes tilgang til Internett", + "ca": "Hi ha accés a Internet" }, "hideInAnswer": true }, @@ -442,7 +452,8 @@ "nl": "Er is geen internettoegang", "es": "No hay acceso a internet", "da": "Der er ingen internetadgang", - "nb_NO": "Det finnes ingen tilgang til Internett" + "nb_NO": "Det finnes ingen tilgang til Internett", + "ca": "No hi ha accés a Internet" } } ] @@ -461,7 +472,8 @@ "nl": "Moet je betalen voor internettoegang?", "es": "¿Tienes que pagar por el acceso a internet?", "da": "Skal man betale for internetadgang?", - "nb_NO": "Må man betale for tilgang til Internett?" + "nb_NO": "Må man betale for tilgang til Internett?", + "ca": "Has de pagar per l'accés a Internet?" }, "mappings": [ { @@ -482,7 +494,8 @@ "nl": "Je moet extra betalen voor internettoegang", "es": "Tienes que pagar a mayores por el acceso a internet", "da": "Man skal betale ekstra for internetadgang", - "nb_NO": "Tilgang til Internett koster ekstra" + "nb_NO": "Tilgang til Internett koster ekstra", + "ca": "Heu de pagar un extra per accedir a Internet" } }, { @@ -503,7 +516,8 @@ "nl": "Je hoeft niet extra te betalen voor internettoegang", "es": "No tienes que pagar a mayores por el acceso a internet", "da": "Man behøver ikke at betale ekstra for internetadgang", - "nb_NO": "Man må ikke betale ekstra for tilgang til Internett" + "nb_NO": "Man må ikke betale ekstra for tilgang til Internett", + "ca": "No cal pagar extra per l'accés a Internet" } } ], @@ -648,7 +662,8 @@ "de": "Es gibt einige Plätze für Langzeitmieten, aber auch eine tageweise Anmietung ist möglich", "es": "Sí, hay algunas plazas de alquiler a largo plazo, pero también puedes alojarte por días", "nl": "Er zijn enkele plaatsen om op lange termijn te huren, maar je kan ook enkele dagen blijven", - "nb_NO": "Det finnes noen plasser for langtidsleie, men man kan også bruke dem på dagsbasis" + "nb_NO": "Det finnes noen plasser for langtidsleie, men man kan også bruke dem på dagsbasis", + "ca": "Hi ha alguns punts per al lloguer a llarg termini, però també es pot romandre diàriament" } }, { @@ -669,7 +684,8 @@ "es": "No, no hay huéspedes permanentes aquí", "da": "Nej, der er ingen faste gæster her", "nl": "Hier wonen geen permanente gasten", - "nb_NO": "Det er ingen permanente gjester her" + "nb_NO": "Det er ingen permanente gjester her", + "ca": "No hi han hostes permanents aquí" } }, { @@ -706,7 +722,8 @@ "de": "Mehr Details über diesen Ort: {description}", "nl": "Meer details over deze plaats: {description}", "es": "Más detalles sobre este lugar:{description}", - "da": "Flere oplysninger om dette sted: {description}" + "da": "Flere oplysninger om dette sted: {description}", + "ca": "Més detalls sobre aquest lloc: {description}" }, "question": { "en": "Would you like to add a general description of this place? (Do not repeat information previously asked or shown above. Please keep it objective - opinions go into the reviews)", @@ -717,7 +734,8 @@ "fr": "Souhaitez-vous ajouter une description générale du lieu ? (Ne pas répéter les informations précédentes et rester neutre, les opinions vont dans les avis)", "de": "Möchten Sie eine allgemeine Beschreibung für diesen Ort hinzufügen? (Bitte wiederholen Sie keine Informationen, die Sie bereits zuvor angegeben haben. Bitte bleiben Sie objektiv - Meinungen gehen in die Bewertungen ein)", "nl": "Wil je graag een algemene beschrijving toevoegen van deze plaats? (Herhaal hier niet de antwoorden op de vragen die reeds gesteld zijn. Hou het objectief - je kan je mening geven via een review)", - "es": "¿Te gustaría añadir una descripción general de este lugar? (No repitas información previamente preguntada o mostrada arriba. Por favor mantenla objetiva - las opiniones van en la de opiniones)" + "es": "¿Te gustaría añadir una descripción general de este lugar? (No repitas información previamente preguntada o mostrada arriba. Por favor mantenla objetiva - las opiniones van en la de opiniones)", + "ca": "T'agradaria afegir una descripció general d'aquest lloc? (No repeteixis informació prèviament preguntada o mostrada a dalt. Si us plau mantín-la objectiva - les opinions van en les «reviews»)" }, "freeform": { "key": "description", @@ -758,7 +776,8 @@ "nl": "Voeg een nieuwe officiële camperplaats toe. Dit zijn speciaal aangeduide plaatsen waar het toegestaan is om te overnachten met een camper. Ze kunnen er uitzien als een parking, of soms eerder als een camping. Soms staan ze niet ter plaatse aangeduid, maar heeft de gemeente wel degelijk beslist dat dit een camperplaats is. Een parking voor campers waar je niet mag overnachten is géén camperplaats. ", "zh_Hant": "新增正式露營地點,通常是設計給過夜的露營者的地點。看起來像是真的露營地或是一般的停車場,而且也許沒有任何指標,但在城鎮被定議地點。如果一般給露營者的停車場並不是用來過夜,則不是露營地點 ", "hu": "Új hivatalos lakóautóhely hozzáadása. Ez arra vannak kijelölve, hogy lakóautóval ott éjszakázzunk. Lehet, hogy úgy néz ki, mint egy igazi kemping, de az is lehet, hogy csak olyan, mint egy parkoló. Előfordulhat, hogy egyáltalán nem jelzik őket, hanem csak egy önkormányzati határozatban vannak kijelölve. A lakóautósoknak szánt olyan hagyományos parkolók, ahol nem várhatóan nem fognak éjszakázni, -nem minősül- lakóautóhelynek. ", - "es": "Añade un nuevo sitio de acampada oficial. Son lugares designados para pasar la noche con tu caravana. Pueden parecerse a un camping real o simplemente a un aparcamiento. Puede que no estén señalizados en absoluto, sino que simplemente estén definidos en una decisión municipal. Un aparcamiento normal destinado a los campistas en el que no se espera que se pase la noche, no es un camping. " + "es": "Añade un nuevo sitio de acampada oficial. Son lugares designados para pasar la noche con tu caravana. Pueden parecerse a un camping real o simplemente a un aparcamiento. Puede que no estén señalizados en absoluto, sino que simplemente estén definidos en una decisión municipal. Un aparcamiento normal destinado a los campistas en el que no se espera que se pase la noche, no es un camping. ", + "ca": "Afig un nou lloc d'acampada oficial. Són llocs designats per a passar la nit amb la teua caravana. Poden semblar-se a un càmping real o simplement a un aparcament. Pot ser que no estiguen senyalitzats en absolut, sinó que simplement estiguen definits per una decisió municipal. Un aparcament normal destinat als acampadors en el qual no s'espera que es passe la nit, no és un càmping. " } } ], diff --git a/assets/themes/cyclofix/cyclofix.json b/assets/themes/cyclofix/cyclofix.json index 48a2c58bb..3222af44e 100644 --- a/assets/themes/cyclofix/cyclofix.json +++ b/assets/themes/cyclofix/cyclofix.json @@ -12,7 +12,8 @@ "it": "Cyclofix - una mappa libera per chi va in bici", "nb_NO": "Cyclofix — et åpent kart for syklister", "hu": "Cyclofix – nyílt térkép kerékpárosoknak", - "es": "Cyclofix - un mapa abierto para ciclistas" + "es": "Cyclofix - un mapa abierto para ciclistas", + "ca": "Cyclofix - un mapa obert per a ciclistes" }, "description": { "en": "The goal of this map is to present cyclists with an easy-to-use solution to find the appropriate infrastructure for their needs.

    You can track your precise location (mobile only) and select layers that are relevant for you in the bottom left corner. You can also use this tool to add or edit pins (points of interest) to the map and provide more data by answering the questions.

    All changes you make will automatically be saved in the global database of OpenStreetMap and can be freely re-used by others.

    For more information about the cyclofix project, go to cyclofix.osm.be.", diff --git a/assets/themes/waste/waste.json b/assets/themes/waste/waste.json index 951942fe1..355c78768 100644 --- a/assets/themes/waste/waste.json +++ b/assets/themes/waste/waste.json @@ -16,7 +16,8 @@ "nl": "Kaart met afvalbakken en recyclingfaciliteiten.", "de": "Eine Karte mit Abfalleimern und Recyclingeinrichtungen.", "fr": "Carte des poubelles et infrastructures de recyclage.", - "it": "Mappa dei cestini per i rifiuti e i centri di raccolta e riciclo rifiuti." + "it": "Mappa dei cestini per i rifiuti e i centri di raccolta e riciclo rifiuti.", + "ca": "Mapa que mostra papereres i infraestructures de reciclatge." }, "icon": "./assets/layers/recycling/recycling-14.svg", "startZoom": 19, diff --git a/assets/translators.json b/assets/translators.json index 721102bf3..49871f9bd 100644 --- a/assets/translators.json +++ b/assets/translators.json @@ -5,7 +5,7 @@ "contributor": "Pieter Vander Vennet" }, { - "commits": 135, + "commits": 136, "contributor": "kjon" }, { @@ -18,11 +18,11 @@ }, { "commits": 30, - "contributor": "Iago" + "contributor": "Babos Gábor" }, { - "commits": 29, - "contributor": "Babos Gábor" + "commits": 30, + "contributor": "Iago" }, { "commits": 29, @@ -92,6 +92,10 @@ "commits": 9, "contributor": "Jacque Fresco" }, + { + "commits": 8, + "contributor": "paunofu" + }, { "commits": 7, "contributor": "Niels Elgaard Larsen" @@ -160,10 +164,6 @@ "commits": 4, "contributor": "BMN" }, - { - "commits": 4, - "contributor": "paunofu" - }, { "commits": 4, "contributor": "Hiroshi Miura" diff --git a/langs/ca.json b/langs/ca.json index e54fa66db..3d5ffb952 100644 --- a/langs/ca.json +++ b/langs/ca.json @@ -239,6 +239,9 @@ "wednesday": "Dimecres" }, "welcomeBack": "Has entrat, benvingut/da.", + "welcomeExplanation": { + "addNew": "Toqueu el mapa per afegir un nou PDI." + }, "wikipedia": { "createNewWikidata": "Crear un ítem de Wikidata", "doSearch": "Cerca adalt per veure els resultats", @@ -252,9 +255,6 @@ }, "searchWikidata": "Cercar a Wikidata", "wikipediaboxTitle": "Viquipèdia" - }, - "welcomeExplanation": { - "addNew": "Toqueu el mapa per afegir un nou PDI." } }, "image": { @@ -268,6 +268,9 @@ "doDelete": "Esborrar imatge", "dontDelete": "Cancel·lar", "isDeleted": "Esborrada", + "nearbyPictures": { + "browseNearby": "Cerca imatges properes…" + }, "pleaseLogin": "Entrar per pujar una foto", "respectPrivacy": "Respecta la privacitat. No fotografiïs gent o matrícules. No facis servir imatges de Google Maps, Google Streetview o altres fonts amb copyright.", "toBig": "La teva imatge és massa gran ara que medeix {actual_size}. Usa imatges de com a molt {max_size}", @@ -276,10 +279,7 @@ "uploadMultipleDone": "{count} imatges afegides. Gràcies per ajudar.", "uploadingMultiple": "Pujant {count} imatges…", "uploadingPicture": "Pujant la teva imatge…", - "willBePublished": "La teva foto serà publicada: ", - "nearbyPictures": { - "browseNearby": "Cerca imatges properes…" - } + "willBePublished": "La teva foto serà publicada: " }, "importHelper": { "introduction": { diff --git a/langs/layers/ca.json b/langs/layers/ca.json index 385960150..05d81fa9a 100644 --- a/langs/layers/ca.json +++ b/langs/layers/ca.json @@ -3,6 +3,7 @@ "description": "Adreces" }, "artwork": { + "description": "Un mapa obert d'estàtues, busts, grafitis i altres obres d'art del tot el món", "name": "Obres d'art", "tagRenderings": { "artwork-artwork_type": { @@ -45,8 +46,7 @@ }, "title": { "render": "Obra d'art" - }, - "description": "Un mapa obert d'estàtues, busts, grafitis i altres obres d'art del tot el món" + } }, "barrier": { "name": "Barreres", @@ -825,6 +825,13 @@ "recycling": { "name": "Residus", "tagRenderings": { + "container-location": { + "mappings": { + "2": { + "then": "Aquest contenidor està situat a l'aire lliure" + } + } + }, "opening_hours": { "mappings": { "0": { @@ -832,8 +839,20 @@ } } }, + "operator": { + "render": "Aquesta infraestuctura de reciclatge està operada per {operator}" + }, "recycling-accepts": { "mappings": { + "1": { + "then": "Ací es poden reciclar els cartons de begudes" + }, + "2": { + "then": "Ací es poden reciclar llaunes" + }, + "7": { + "then": "Ací es poden reciclar residus orgànics" + }, "8": { "then": "Ací es poden reciclar ampolles de vidre" }, @@ -846,24 +865,15 @@ "11": { "then": "Ací es pot reciclar paper" }, - "2": { - "then": "Ací es poden reciclar llaunes" - }, - "7": { - "then": "Ací es poden reciclar residus orgànics" - }, - "1": { - "then": "Ací es poden reciclar els cartons de begudes" - }, "12": { "then": "Ací es poden reciclar ampolles de plàstic" }, - "14": { - "then": "Ací es pot reciclar plàstic" - }, "13": { "then": "Ací es poden reciclar envasos de plàstic" }, + "14": { + "then": "Ací es pot reciclar plàstic" + }, "20": { "then": "Ací es pot reciclar el rebuig" } @@ -881,16 +891,6 @@ "then": "Açò és un centre de reciclatge" } } - }, - "container-location": { - "mappings": { - "2": { - "then": "Aquest contenidor està situat a l'aire lliure" - } - } - }, - "operator": { - "render": "Aquesta infraestuctura de reciclatge està operada per {operator}" } } }, @@ -1026,4 +1026,4 @@ } } } -} +} \ No newline at end of file diff --git a/langs/layers/de.json b/langs/layers/de.json index efaad6ec1..d335daff4 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -5047,28 +5047,28 @@ "question": "Welche Geschlechter können sich an dieser Schule anmelden?" }, "language": { + "freeform": { + "placeholder": "Sprache in Englisch in Kleinbuchstaben" + }, "mappings": { "0": { "then": "Die Hauptsprache dieser Schule ist unbekannt" }, - "4": { - "then": "Die Hauptsprache dieser Schule ist unbekannt" - }, "1": { "then": "Französisch ist die Hauptsprache von {name}" }, + "2": { + "then": "Niederländisch ist die Hauptsprache von {name}" + }, "3": { "then": "Deutsch ist die Hauptsprache von {name}" }, - "2": { - "then": "Niederländisch ist die Hauptsprache von {name}" + "4": { + "then": "Die Hauptsprache dieser Schule ist unbekannt" } }, "question": "Was ist die Hauptsprache dieser Schule?
    Welche Sprache wird mit den Schülern in den nicht sprachbezogenen Kursen und mit der Verwaltung gesprochen?
    ", - "render": "{school:language} ist die Hauptsprache von {title()}", - "freeform": { - "placeholder": "Sprache in Englisch in Kleinbuchstaben" - } + "render": "{school:language} ist die Hauptsprache von {title()}" }, "school-name": { "question": "Wie lautet der Name dieser Schule?", @@ -6239,4 +6239,4 @@ } } } -} +} \ No newline at end of file diff --git a/langs/layers/es.json b/langs/layers/es.json index 1c3bc0083..8ea7f34c7 100644 --- a/langs/layers/es.json +++ b/langs/layers/es.json @@ -4031,4 +4031,4 @@ } } } -} +} \ No newline at end of file diff --git a/langs/layers/hu.json b/langs/layers/hu.json index ae05d270d..1e00fef50 100644 --- a/langs/layers/hu.json +++ b/langs/layers/hu.json @@ -781,4 +781,4 @@ } } } -} +} \ No newline at end of file diff --git a/langs/layers/it.json b/langs/layers/it.json index a76a3b1d8..09efa26b6 100644 --- a/langs/layers/it.json +++ b/langs/layers/it.json @@ -1756,6 +1756,218 @@ "render": "Microbiblioteca" } }, + "recycling": { + "description": "Un livello con i contenitori e centri per la raccolta rifiuti riciclabili", + "filter": { + "0": { + "options": { + "0": { + "question": "Aperto ora" + } + } + }, + "1": { + "options": { + "0": { + "question": "Tutti i tipi di rifiuti" + }, + "1": { + "question": "Riciclo di batterie" + }, + "2": { + "question": "Riciclo di confezioni per bevande" + }, + "3": { + "question": "Riciclo di lattine" + }, + "4": { + "question": "Riciclo di abiti" + }, + "5": { + "question": "Riciclo di olio da cucina" + }, + "6": { + "question": "Riciclo di olio da motore" + }, + "7": { + "question": "Riciclo di umido" + }, + "8": { + "question": "Riciclo di bottiglie di vetro" + }, + "9": { + "question": "Riciclo di vetro" + }, + "10": { + "question": "Riciclo di giornali" + }, + "11": { + "question": "Riciclo di carta" + }, + "12": { + "question": "Riciclo di bottiglie di plastica" + }, + "13": { + "question": "Riciclo di confezioni di plastica" + }, + "14": { + "question": "Riciclo di plastica" + }, + "15": { + "question": "Riciclo di rottami metallici" + }, + "16": { + "question": "Riciclo di piccoli elettrodomestici" + }, + "17": { + "question": "Riciclo di secco" + } + } + } + }, + "name": "Riciclo", + "presets": { + "0": { + "title": "un contenitore per il riciclo" + }, + "1": { + "title": "un centro di riciclo" + } + }, + "tagRenderings": { + "container-location": { + "mappings": { + "0": { + "then": "E' un contenitore sotterraneo" + }, + "1": { + "then": "Questo contenitore è al chiuso" + }, + "2": { + "then": "Questo contenitore è all'aperto" + } + }, + "question": "Dove si trova questo contenitore?" + }, + "opening_hours": { + "mappings": { + "0": { + "then": "24/7" + } + }, + "question": "Quali sono gli orari di apertura di questo impianto di raccolta e riciclo?" + }, + "operator": { + "question": "Quale azienda gestisce questo impianto di raccolta e riciclo?", + "render": "Questa struttura di raccola e riciclo è gestita da {operator}" + }, + "recycling-accepts": { + "mappings": { + "0": { + "then": "Batterie" + }, + "1": { + "then": "Cartoni per bevande" + }, + "2": { + "then": "Lattine" + }, + "3": { + "then": "Abiti" + }, + "4": { + "then": "Olio da cucina" + }, + "5": { + "then": "Olio di motore" + }, + "6": { + "then": "Verde" + }, + "7": { + "then": "Umido" + }, + "8": { + "then": "Bottiglie di vetro" + }, + "9": { + "then": "Vetro" + }, + "10": { + "then": "Giornali" + }, + "11": { + "then": "Carta" + }, + "12": { + "then": "Bottiglie di platica" + }, + "13": { + "then": "Confezioni di plastica" + }, + "14": { + "then": "Plastica" + }, + "15": { + "then": "Rottami metallici" + }, + "16": { + "then": "Scarpe" + }, + "17": { + "then": "Piccoli elettrodomestici" + }, + "18": { + "then": "Piccoli elettrodomestici" + }, + "19": { + "then": "Aghi e oggetti appuntiti" + }, + "20": { + "then": "Secco" + } + }, + "question": "Cosa si può riciclare qui?" + }, + "recycling-centre-name": { + "mappings": { + "0": { + "then": "Questo centro raccolta e riciclo rifiuti non ha un nome specifico" + } + }, + "question": "Come si chiama questo centro raccolta e riciclo rifiuti?", + "render": "Questo centro raccolta e riciclo rifiuti si chiama {name}" + }, + "recycling-type": { + "mappings": { + "0": { + "then": "Questo è un contenitore per il riciclo di rifiuti" + }, + "1": { + "then": "Questo è un centro per la raccola e riciclo di rifiuti" + }, + "2": { + "then": "Contenitore per lo smaltimento del secco" + } + }, + "question": "Che tipo di raccolta è questo?" + } + }, + "title": { + "mappings": { + "0": { + "then": "Centro di riciclo rifiuti" + }, + "1": { + "then": "Centro di riciclo rifiuti" + }, + "2": { + "then": "Contenitore per il riciclo" + } + }, + "render": "Impianti di riciclo" + } + }, "slow_roads": { "tagRenderings": { "slow_roads-surface": { @@ -2259,6 +2471,158 @@ "render": "Punto panoramico" } }, + "waste_basket": { + "description": "Questo è un cestino dei rifiuti pubblico, un bidone della spazzatura, dove puoi buttare via la tua spazzatura", + "filter": { + "0": { + "options": { + "0": { + "question": "Tutti i tipi" + }, + "1": { + "question": "Cestino per sigarette" + }, + "2": { + "question": "Cestino per medicinali" + }, + "3": { + "question": "Cestino per escrementi dei cani" + }, + "4": { + "question": "Cestino per la spazzatura" + }, + "5": { + "question": "Cestino dei rifiuti per oggetti taglienti" + }, + "6": { + "question": "Cestino per la plastica" + } + } + }, + "1": { + "options": { + "0": { + "question": "Cestino per rifiuti con dispenser per sacchetti per escrementi dei cani" + } + } + } + }, + "mapRendering": { + "0": { + "iconSize": { + "mappings": { + "0": { + "then": "Cestino dei rifiuti" + } + } + } + } + }, + "name": "Cestino dei rifiuti", + "presets": { + "0": { + "title": "un cestino dei rifiuti" + } + }, + "tagRenderings": { + "dispensing_dog_bags": { + "mappings": { + "0": { + "then": "Questo cestino ha un distributore di sacchetti per escrementi dei cani" + }, + "1": { + "then": "Questo cestino non ha un distributore di sacchetti per escrementi dei cani" + }, + "2": { + "then": "Questo cestino non ha un distributore di sacchetti per escrementi dei cani" + } + }, + "question": "Questo cestino ha un distributore di sacchetti per escrementi dei cani?" + }, + "waste-basket-waste-types": { + "mappings": { + "0": { + "then": "Un cestino rifiuti per uso generico" + }, + "1": { + "then": "Un cestino rifiuti per uso generico" + }, + "2": { + "then": "Un cestino rifiuti per escrementi di cani" + }, + "3": { + "then": "Un cestino rifiuti per sigarette" + }, + "4": { + "then": "Un cestino rifiuti per medicinali" + }, + "5": { + "then": "Un cestino rifiuti per aghi e altri oggetti appuntiti" + }, + "6": { + "then": "Un cestino rifiuti per la plastica" + } + }, + "question": "Che tipo di cestino dei rifiuti è questo?" + } + }, + "title": { + "render": "Cestino dei rifiuti" + } + }, + "waste_disposal": { + "description": "Cestino per lo smaltimento dei rifiuti, contenitore di dimensioni medio grandi per lo smaltimento dei rifiuti (domestici)", + "filter": { + "0": { + "options": { + "0": { + "question": "Solo accesso pubblico" + } + } + } + }, + "name": "Contenitori per la raccolta differenziata", + "presets": { + "0": { + "description": "Cestino di dimensioni medio-grandi per lo smaltimento dei rifiuti (domestici)", + "title": "un raccoglitore per lo smaltimento rifiuti" + } + }, + "tagRenderings": { + "access": { + "mappings": { + "0": { + "then": "Questo cestino può essere usato da chiunque" + }, + "1": { + "then": "Questo cestino è privato" + }, + "2": { + "then": "Questo cestino è solo per residenti" + } + }, + "question": "Chi può utilizzare questo cestino per lo smaltimento dei rifiuti?", + "render": "Accesso: {access}" + }, + "disposal-location": { + "mappings": { + "0": { + "then": "Questo è un contenitore sotterraneo" + }, + "1": { + "then": "Questo contenitore è al chiuso" + }, + "2": { + "then": "Questo contenitore è all'aperto" + } + }, + "question": "Dove si trova questo contenitore?" + } + }, + "title": { + "render": "Smaltimento rifiuti" + } + }, "windturbine": { "name": "pala eolica", "presets": { diff --git a/langs/themes/ca.json b/langs/themes/ca.json index f04841f3a..724f5c12a 100644 --- a/langs/themes/ca.json +++ b/langs/themes/ca.json @@ -13,30 +13,59 @@ "title": "Bancs" }, "bicycle_rental": { - "title": "Lloguer de bicicletes", "description": "En aquest mapa, trobaràs nombroses estacions de lloguer de bicicletes que són conegudes per OpenStreetMap", - "shortDescription": "Un mapa amb estacions de lloguer de bicicletes i botigues de lloguer de bicicletes" + "shortDescription": "Un mapa amb estacions de lloguer de bicicletes i botigues de lloguer de bicicletes", + "title": "Lloguer de bicicletes" + }, + "binoculars": { + "description": "Un mapa amb prismàtics fixos en un pal. Sol trobar-se en llocs turístics, miradors, a la part alta de torres panoràmiques o ocasionalment en una reserva natural.", + "shortDescription": "Un mapa amb prismàtics fixos", + "title": "Binoculars" }, "bookcases": { - "title": "Open Bookcase Map", - "description": "Una llibreria pública és un xicotet armari al carrer, una caixa, una vella cabina telefònica o algun altre objecte on es guarden llibres. Tothom pot col·locar o agafar un llibre. Aquest mapa pretén recollir totes aquestes llibreries. Pots descobrir noves llibreries pròximes i, amb un compte gratuït de OpenStreetMap, afegir ràpidament les teues llibreries favorites." + "description": "Una llibreria pública és un xicotet armari al carrer, una caixa, una vella cabina telefònica o algun altre objecte on es guarden llibres. Tothom pot col·locar o agafar un llibre. Aquest mapa pretén recollir totes aquestes llibreries. Pots descobrir noves llibreries pròximes i, amb un compte gratuït de OpenStreetMap, afegir ràpidament les teues llibreries favorites.", + "title": "Open Bookcase Map" }, "cafes_and_pubs": { "description": "Bars i pubs", "title": "Cafés i bars" }, "campersite": { + "description": "Aquest lloc recull tots els llocs oficials de parada de caravanes i els llocs on es poden abocar les aigües grises i negres. Pots afegir detalls sobre els serveis prestats i el cost. Afig fotos i ressenyes. Aquest és un lloc web i una aplicació web. Les dades s'emmagatzemen en OpenStreetMap, per la qual cosa seran gratuïts per sempre i podran ser reutilitzats per qualsevol aplicació.", "layers": { "0": { "description": "llocs d'acampada", "name": "Llocs d'acampada", "presets": { "0": { - "title": "un lloc d'acampada", - "description": "Afig un nou lloc d'acampada oficial. Són llocs designats per a passar la nit amb la teua caravana. Poden semblar-se a un càmping real o simplement a un aparcament. Pot ser que no estiguen senyalitzats en absolut, sinó que simplement estiguen definits per una decisió municipal. Un aparcament normal destinat als acampadors en el qual no s'espera que es passe la nit, no és un càmping. " + "description": "Afig un nou lloc d'acampada oficial. Són llocs designats per a passar la nit amb la teua caravana. Poden semblar-se a un càmping real o simplement a un aparcament. Pot ser que no estiguen senyalitzats en absolut, sinó que simplement estiguen definits per una decisió municipal. Un aparcament normal destinat als acampadors en el qual no s'espera que es passe la nit, no és un càmping. ", + "title": "un lloc d'acampada" } }, "tagRenderings": { + "caravansites-capacity": { + "question": "Quants acampadors poden allotjar-se ací? (ometre si no hi ha un nombre evident de places o vehicles permesos)", + "render": "{capacity} els acampadors poden utilitzar aquest lloc al mateix temps" + }, + "caravansites-charge": { + "question": "Quant cobra aquest lloc?", + "render": "Aquest lloc cobra {charge}" + }, + "caravansites-description": { + "question": "T'agradaria afegir una descripció general d'aquest lloc? (No repeteixis informació prèviament preguntada o mostrada a dalt. Si us plau mantín-la objectiva - les opinions van en les «reviews»)", + "render": "Més detalls sobre aquest lloc: {description}" + }, + "caravansites-fee": { + "mappings": { + "0": { + "then": "Heu de pagar per l'ús" + }, + "1": { + "then": "Es pot utilitzar gratuïtament" + } + }, + "question": "Aquest lloc cobra una taxa?" + }, "caravansites-internet": { "mappings": { "0": { @@ -51,25 +80,6 @@ }, "question": "Aquest lloc proporciona accés a Internet?" }, - "caravansites-capacity": { - "question": "Quants acampadors poden allotjar-se ací? (ometre si no hi ha un nombre evident de places o vehicles permesos)", - "render": "{capacity} els acampadors poden utilitzar aquest lloc al mateix temps" - }, - "caravansites-description": { - "render": "Més detalls sobre aquest lloc: {description}", - "question": "T'agradaria afegir una descripció general d'aquest lloc? (No repeteixis informació prèviament preguntada o mostrada a dalt. Si us plau mantín-la objectiva - les opinions van en les «reviews»)" - }, - "caravansites-fee": { - "mappings": { - "1": { - "then": "Es pot utilitzar gratuïtament" - }, - "0": { - "then": "Heu de pagar per l'ús" - } - }, - "question": "Aquest lloc cobra una taxa?" - }, "caravansites-internet-fee": { "mappings": { "0": { @@ -81,25 +91,20 @@ }, "question": "Has de pagar per l'accés a Internet?" }, - "caravansites-charge": { - "question": "Quant cobra aquest lloc?", - "render": "Aquest lloc cobra {charge}" - }, "caravansites-long-term": { "mappings": { - "1": { - "then": "No hi han hostes permanents aquí" - }, "0": { "then": "Hi ha alguns punts per al lloguer a llarg termini, però també es pot romandre diàriament" + }, + "1": { + "then": "No hi han hostes permanents aquí" } } } } } }, - "title": "Llocs d'acampada", - "description": "Aquest lloc recull tots els llocs oficials de parada de caravanes i els llocs on es poden abocar les aigües grises i negres. Pots afegir detalls sobre els serveis prestats i el cost. Afig fotos i ressenyes. Aquest és un lloc web i una aplicació web. Les dades s'emmagatzemen en OpenStreetMap, per la qual cosa seran gratuïts per sempre i podran ser reutilitzats per qualsevol aplicació." + "title": "Llocs d'acampada" }, "charging_stations": { "title": "Estacions de càrrega" @@ -179,6 +184,9 @@ "shortDescription": "Un mapa de carrers ciclistes", "title": "Carrers ciclistes" }, + "cyclofix": { + "title": "Cyclofix - un mapa obert per a ciclistes" + }, "drinking_water": { "title": "Aigua potable" }, @@ -346,18 +354,10 @@ "title": "Arbres" }, "waste": { - "title": "Brossa", - "description": "Mapa que mostra papereres i infraestructures de reciclatge." + "description": "Mapa que mostra papereres i infraestructures de reciclatge.", + "title": "Brossa" }, "waste_basket": { "title": "Papepera" - }, - "binoculars": { - "title": "Binoculars", - "shortDescription": "Un mapa amb prismàtics fixos", - "description": "Un mapa amb prismàtics fixos en un pal. Sol trobar-se en llocs turístics, miradors, a la part alta de torres panoràmiques o ocasionalment en una reserva natural." - }, - "cyclofix": { - "title": "Cyclofix - un mapa obert per a ciclistes" } -} +} \ No newline at end of file diff --git a/langs/themes/it.json b/langs/themes/it.json index f9518d0d4..fbed99743 100644 --- a/langs/themes/it.json +++ b/langs/themes/it.json @@ -577,6 +577,10 @@ "shortDescription": "Mappa tutti gli alberi", "title": "Alberi" }, + "waste": { + "description": "Mappa dei cestini per i rifiuti e i centri di raccolta e riciclo rifiuti.", + "title": "Rifiuti" + }, "waste_basket": { "description": "In questa cartina troverai i cestini dei rifiuti nei tuoi paraggi. Se manca un cestino, puoi inserirlo tu stesso", "shortDescription": "Una cartina dei cestini dei rifiuti", From 8afa4b1328e8ac138c3c5fe4545b95d9744aa8c5 Mon Sep 17 00:00:00 2001 From: kjon Date: Sun, 3 Jul 2022 08:39:16 +0000 Subject: [PATCH 10/71] Translated using Weblate (German) Currently translated at 100.0% (1981 of 1981 strings) Translation: MapComplete/Layer translations Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layers/de/ --- langs/layers/de.json | 127 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 125 insertions(+), 2 deletions(-) diff --git a/langs/layers/de.json b/langs/layers/de.json index d335daff4..861953749 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -3109,8 +3109,18 @@ }, "9": { "then": "Fahrradstraße" + }, + "4": { + "then": "Straße mit Fahrradstreifen {name}" + }, + "2": { + "then": "Straße mit gemeinsam genutzter Fahrspur {name}" + }, + "6": { + "then": "Straße mit Radweg neben der Straße {name}" } - } + }, + "render": "Weg" } }, "defibrillator": { @@ -5161,6 +5171,9 @@ "tagRenderings": { "shops-name": { "question": "Wie ist der Name dieses Geschäfts?" + }, + "shops-type-from-id": { + "question": "Was ist das für ein Geschäft?" } }, "title": { @@ -6238,5 +6251,115 @@ } } } + }, + "kerbs": { + "filter": { + "0": { + "options": { + "1": { + "question": "Erhöhter Bordstein (>3 cm)" + }, + "0": { + "question": "Alle Arten von Bordsteinen" + }, + "2": { + "question": "Abgesenkter Bordstein (~3 cm)" + }, + "3": { + "question": "Bündiger Bordstein (~0cm)" + }, + "4": { + "question": "Kein Bordstein" + }, + "5": { + "question": "Bordstein mit unbekannter Höhe" + } + } + }, + "1": { + "options": { + "2": { + "question": "Bordstein ohne taktilem Pflaster" + }, + "0": { + "question": "Bordsteine mit oder ohne taktilem Pflaster" + }, + "1": { + "question": "Bordstein mit taktilem Pflaster" + }, + "3": { + "question": "Bordstein ohne Informationen über taktiles Pflaster" + } + } + } + }, + "name": "Bordsteine", + "presets": { + "0": { + "description": "Bordstein in einem Fußweg", + "title": "einen Bordstein" + } + }, + "tagRenderings": { + "kerb-height": { + "freeform": { + "placeholder": "Höhe des Bordsteins" + }, + "render": "Bordsteinhöhe: {{kerb:height}}", + "question": "Wie hoch ist der Bordstein?" + }, + "kerb-type": { + "mappings": { + "2": { + "then": "Der Bordstein ist bündig (~0cm)" + }, + "1": { + "then": "Der Bordstein ist abgesenkt (~3 cm)" + }, + "4": { + "then": "Es gibt einen Bordstein mit unbekannter Höhe" + }, + "0": { + "then": "Der Bordstein ist erhöht (>3 cm)" + }, + "3": { + "then": "Hier gibt es keinen Bordstein" + } + }, + "question": "Wie hoch ist der Bordstein?" + }, + "tactile-paving": { + "mappings": { + "2": { + "then": "Der Bordstein hat ein taktiles Pflaster, das aber falsch ist" + }, + "0": { + "then": "Der Bordstein hat ein taktiles Pflaster." + }, + "1": { + "then": "Der Bordstein hat kein taktiles Pflaster." + } + }, + "question": "Gibt es am Bordstein ein taktiles Pflaster?" + } + }, + "description": "Eine Ebene, die Bordsteine zeigt.", + "units": { + "0": { + "applicableUnits": { + "0": { + "human": "Zentimeter", + "humanSingular": "Zentimeter" + }, + "1": { + "human": "Meter", + "humanSingular": "Meter" + } + } + } + }, + "title": { + "render": "Bordstein" + } } -} \ No newline at end of file +} From 846dda799597c1e78e26c7f687b0d2ad088c47dc Mon Sep 17 00:00:00 2001 From: kjon Date: Sun, 3 Jul 2022 08:32:11 +0000 Subject: [PATCH 11/71] Translated using Weblate (German) Currently translated at 100.0% (324 of 324 strings) Translation: MapComplete/themes Translate-URL: https://hosted.weblate.org/projects/mapcomplete/themes/de/ --- langs/themes/de.json | 68 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/langs/themes/de.json b/langs/themes/de.json index 2ad828ca4..b3a951794 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -900,5 +900,71 @@ "description": "Auf dieser Karte findest Du Abfalleimer in Deiner Nähe. Wenn ein Abfalleimer auf dieser Karte fehlt, kannst du ihn selbst hinzufügen", "shortDescription": "Eine Karte mit Abfalleimern", "title": "Abfalleimer" + }, + "mapcomplete-changes": { + "description": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen", + "layers": { + "0": { + "filter": { + "2": { + "options": { + "0": { + "question": "Nicht erstellt von {search}" + } + } + }, + "0": { + "options": { + "0": { + "question": "Themenname enthält {search}" + } + } + }, + "1": { + "options": { + "0": { + "question": "Erstellt von {search}" + } + } + } + }, + "title": { + "render": "Änderungssatz für {theme}" + }, + "description": "Zeigt alle MapComplete Änderungen", + "name": "Zentrum der Änderungssätze", + "tagRenderings": { + "contributor": { + "render": "Geändert von {_last_edit:contributor}" + }, + "render_id": { + "render": "Änderungssatz {id}" + }, + "theme": { + "mappings": { + "0": { + "then": "Änderung mit inoffiziellem Thema {theme}" + } + }, + "render": "Änderung mit Thema {theme}" + } + } + }, + "1": { + "override": { + "tagRenderings": { + "link_to_more": { + "render": "Weitere Statistiken finden Sie hier" + } + } + } + } + }, + "shortDescription": "Zeigt die mit MapComplete vorgenommenen Änderungen", + "title": "Mit MapComplete vorgenommene Änderungen" + }, + "kerbs_and_crossings": { + "description": "Eine Karte mit Bordsteinen und Überwegen.", + "title": "Bordsteine und Überwege" } -} \ No newline at end of file +} From cf64bea55fad045fa27f89903fbfd90f404101d2 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Tue, 5 Jul 2022 14:50:39 +0200 Subject: [PATCH 12/71] Update of windows instructions --- Docs/Development_deployment.md | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/Docs/Development_deployment.md b/Docs/Development_deployment.md index ab29c60d3..3f5abe7f4 100644 --- a/Docs/Development_deployment.md +++ b/Docs/Development_deployment.md @@ -46,18 +46,12 @@ Development using Windows For Windows you can use the devcontainer, or the WSL subsystem. -To use the devcontainer in Visual Studio Code: +Raw installation -0. Make sure you have installed - the [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) - extension and it's dependencies. -1. Make a fork and clone the repository. -2. After cloning, Visual Studio Code will ask you if you want to use the devcontainer. -3. Then you can either clone it again in a volume (for better performance), or open the current folder in a container. -4. By now, you should be able to run `npm run start` to host a local testversion at http://localhost:1234/index.html -5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` - or `userlayout=true#` as [Query parameter](URL_Parameters.md). Note that the shorter URLs ( - e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version. +0. Clone the repo +1. Install `npm` and install `ts-node` globally with `npm install -g ts-node` +2. Execute `npm run init`. It will install and build some assets +3. Run `npm run start` to start the dev server To use the WSL in Visual Studio Code: From 84f8685adcafd6a90ee4368c9c987b8f492a3db4 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 5 Jul 2022 14:55:49 +0200 Subject: [PATCH 13/71] Attempt to fix build on windows --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 72e0705b7..c31f93f91 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "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", - "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": "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", "gittag": "ts-node scripts/printVersion.ts | bash", From 536840ba1c37bfb276123805e44d1e7db5b3f2b1 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 5 Jul 2022 14:59:56 +0200 Subject: [PATCH 14/71] Remove svg-resizer dependency --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index c31f93f91..05c73c9a0 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,6 @@ "papaparse": "^5.3.1", "parcel": "^1.2.4", "prompt-sync": "^4.2.0", - "svg-resizer": "github:vieron/svg-resizer", "tailwindcss": "^2.2.15", "togpx": "^0.5.4", "tslint": "^6.1.3", From 170cfe8723fb108589ca67e938ce19267bdc30ee Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Tue, 5 Jul 2022 15:20:27 +0200 Subject: [PATCH 15/71] Update VScode settings --- Docs/Development_deployment.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Docs/Development_deployment.md b/Docs/Development_deployment.md index 3f5abe7f4..09313fd7d 100644 --- a/Docs/Development_deployment.md +++ b/Docs/Development_deployment.md @@ -55,17 +55,24 @@ Raw installation To use the WSL in Visual Studio Code: -0. Make sure you have installed the [Remote - WSL]() extension and it's dependencies. -1. Open a remote WSL window using the button in the bottom left. -2. Make a fork and clone the repository. -3. Install `npm` using `sudo apt install npm`. -4. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the +1. Install a WSL Distribution (e.g. Ubuntu) +2. Install basic dependencies `sudo apt install make g++` +3. Install NVM `wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash` +4. Use NVM to install node 16.x: `nvm install 16.9.1` +5. Activate the node version: `nvm use 16.9.1` +6. Install `npm` using `sudo apt install npm`. +7. Install the [Remote - WSL](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) extension and it's dependencies. +8. Open a remote WSL window using the button in the bottom left. +9. Make a fork and clone the repository. +10. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the dependencies too -5. Run `npm run start` to host a local testversion at http://localhost:1234/index.html -6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` +11. Run `npm run start` to host a local testversion at http://localhost:1234/index.html +12. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` or `userlayout=true#` as [Query parameter](URL_Parameters.md). Note that the shorter URLs ( e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version. +To use WSL without Visual Studio Code you can replace steps 7 and 8 by opening up a WSL terminal + Automatic deployment -------------------- From 263c760a1ced97dc79ca796ec49d2dd017da7482 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Tue, 5 Jul 2022 13:52:34 +0000 Subject: [PATCH 16/71] Housekeeping... --- assets/contributors.json | 2 +- .../cycleways_and_roads.json | 12 +- assets/layers/kerbs/kerbs.json | 96 ++++--- assets/layers/shops/shops.json | 3 +- .../kerbs_and_crossings.json | 6 +- assets/translators.json | 2 +- langs/layers/de.json | 240 +++++++++--------- langs/themes/de.json | 134 +++++----- 8 files changed, 267 insertions(+), 228 deletions(-) diff --git a/assets/contributors.json b/assets/contributors.json index 1aa6b03b6..d64759d47 100644 --- a/assets/contributors.json +++ b/assets/contributors.json @@ -1,7 +1,7 @@ { "contributors": [ { - "commits": 4051, + "commits": 4054, "contributor": "Pieter Vander Vennet" }, { diff --git a/assets/layers/cycleways_and_roads/cycleways_and_roads.json b/assets/layers/cycleways_and_roads/cycleways_and_roads.json index 25fe94364..38ad7f365 100644 --- a/assets/layers/cycleways_and_roads/cycleways_and_roads.json +++ b/assets/layers/cycleways_and_roads/cycleways_and_roads.json @@ -40,7 +40,8 @@ "title": { "render": { "en": "Way", - "nl": "Weg" + "nl": "Weg", + "de": "Weg" }, "mappings": [ { @@ -83,7 +84,8 @@ }, "then": { "nl": "Weg met fietssugestiestrook {name}", - "en": "Road with shared lane {name}" + "en": "Road with shared lane {name}", + "de": "Straße mit gemeinsam genutzter Fahrspur {name}" } }, { @@ -106,7 +108,8 @@ }, "then": { "nl": "Weg met fietsstrook {name}", - "en": "Road with bike lane {name}" + "en": "Road with bike lane {name}", + "de": "Straße mit Fahrradstreifen {name}" } }, { @@ -129,7 +132,8 @@ }, "then": { "nl": "Weg met fietspad naast de weg {name}", - "en": "Road with cycleway next to the road {name}" + "en": "Road with cycleway next to the road {name}", + "de": "Straße mit Radweg neben der Straße {name}" } }, { diff --git a/assets/layers/kerbs/kerbs.json b/assets/layers/kerbs/kerbs.json index a9f20f6de..af185c4d4 100644 --- a/assets/layers/kerbs/kerbs.json +++ b/assets/layers/kerbs/kerbs.json @@ -2,11 +2,13 @@ "id": "kerbs", "name": { "en": "Kerbs", - "nl": "Stoepranden" + "nl": "Stoepranden", + "de": "Bordsteine" }, "description": { "en": "A layer showing kerbs.", - "nl": "Een laag met stoepranden." + "nl": "Een laag met stoepranden.", + "de": "Eine Ebene, die Bordsteine zeigt." }, "source": { "osmTags": "barrier=kerb" @@ -15,7 +17,8 @@ "title": { "render": { "en": "Kerb", - "nl": "Stoeprand" + "nl": "Stoeprand", + "de": "Bordstein" } }, "mapRendering": [ @@ -56,14 +59,16 @@ "id": "kerb-type", "question": { "en": "What is the height of this kerb?", - "nl": "Hoe hoog is deze stoeprand?" + "nl": "Hoe hoog is deze stoeprand?", + "de": "Wie hoch ist der Bordstein?" }, "mappings": [ { "if": "kerb=raised", "then": { "en": "This kerb is raised (>3 cm)", - "nl": "Deze stoeprand is hoog (>3 cm)" + "nl": "Deze stoeprand is hoog (>3 cm)", + "de": "Der Bordstein ist erhöht (>3 cm)" }, "icon": { "path": "./assets/layers/kerbs/raised.svg", @@ -74,7 +79,8 @@ "if": "kerb=lowered", "then": { "en": "This kerb is lowered (~3 cm)", - "nl": "Deze stoeprand is verlaagd (~3 cm)" + "nl": "Deze stoeprand is verlaagd (~3 cm)", + "de": "Der Bordstein ist abgesenkt (~3 cm)" }, "icon": { "path": "./assets/layers/kerbs/lowered.svg", @@ -85,7 +91,8 @@ "if": "kerb=flush", "then": { "en": "This kerb is flush (~0cm)", - "nl": "Deze stoeprand is vlak (~0cm)" + "nl": "Deze stoeprand is vlak (~0cm)", + "de": "Der Bordstein ist bündig (~0cm)" }, "icon": { "path": "./assets/layers/kerbs/flush.svg", @@ -96,7 +103,8 @@ "if": "kerb=no", "then": { "en": "There is no kerb here", - "nl": "Er is hier geen stoeprand" + "nl": "Er is hier geen stoeprand", + "de": "Hier gibt es keinen Bordstein" }, "hideInAnswer": true, "icon": { @@ -108,7 +116,8 @@ "if": "kerb=yes", "then": { "en": "There is a kerb of unknown height", - "nl": "Er is een stoeprand met onbekende hoogte" + "nl": "Er is een stoeprand met onbekende hoogte", + "de": "Es gibt einen Bordstein mit unbekannter Höhe" }, "hideInAnswer": true } @@ -118,25 +127,29 @@ { "id": "tactile-paving", "question": { - "en": "Is there tactile paving at this kerb?" + "en": "Is there tactile paving at this kerb?", + "de": "Gibt es am Bordstein ein taktiles Pflaster?" }, "mappings": [ { "if": "tactile_paving=yes", "then": { - "en": "This kerb has tactile paving." + "en": "This kerb has tactile paving.", + "de": "Der Bordstein hat ein taktiles Pflaster." } }, { "if": "tactile_paving=no", "then": { - "en": "This kerb does not have tactile paving." + "en": "This kerb does not have tactile paving.", + "de": "Der Bordstein hat kein taktiles Pflaster." } }, { "if": "tactile_paving=incorrect", "then": { - "en": "This kerb has tactile paving, but it is incorrect" + "en": "This kerb has tactile paving, but it is incorrect", + "de": "Der Bordstein hat ein taktiles Pflaster, das aber falsch ist" }, "hideInAnswer": true } @@ -147,17 +160,20 @@ "id": "kerb-height", "question": { "en": "What is the height of this kerb?", - "nl": "Hoe hoog is deze stoeprand?" + "nl": "Hoe hoog is deze stoeprand?", + "de": "Wie hoch ist der Bordstein?" }, "render": { "en": "Kerb height: {{kerb:height}}", - "nl": "Stoeprandhoogte: {{kerb:height}}" + "nl": "Stoeprandhoogte: {{kerb:height}}", + "de": "Bordsteinhöhe: {{kerb:height}}" }, "freeform": { "key": "kerb:height", "placeholder": { "en": "Height of the kerb", - "nl": "Hoogte van de stoeprand" + "nl": "Hoogte van de stoeprand", + "de": "Höhe des Bordsteins" }, "type": "pnat" } @@ -167,14 +183,16 @@ { "title": { "en": "a kerb", - "nl": "een stoeprand" + "nl": "een stoeprand", + "de": "einen Bordstein" }, "tags": [ "barrier=kerb" ], "description": { "en": "Kerb in a footway", - "nl": "Stoeprand in een voetpad" + "nl": "Stoeprand in een voetpad", + "de": "Bordstein in einem Fußweg" }, "preciseInput": { "maxSnapDistance": 10, @@ -193,42 +211,48 @@ { "question": { "en": "All types of kerbs", - "nl": "Alle typen stoepranden" + "nl": "Alle typen stoepranden", + "de": "Alle Arten von Bordsteinen" } }, { "osmTags": "kerb=raised", "question": { "en": "Raised kerb (>3 cm)", - "nl": "Hoge stoeprand (>3 cm)" + "nl": "Hoge stoeprand (>3 cm)", + "de": "Erhöhter Bordstein (>3 cm)" } }, { "osmTags": "kerb=lowered", "question": { "en": "Lowered kerb (~3 cm)", - "nl": "Verlaagde stoeprand (~3 cm)" + "nl": "Verlaagde stoeprand (~3 cm)", + "de": "Abgesenkter Bordstein (~3 cm)" } }, { "osmTags": "kerb=flush", "question": { "en": "Flush kerb (~0cm)", - "nl": "Vlakke stoeprand (~0cm)" + "nl": "Vlakke stoeprand (~0cm)", + "de": "Bündiger Bordstein (~0cm)" } }, { "osmTags": "kerb=no", "question": { "en": "No kerb", - "nl": "Geen stoeprand" + "nl": "Geen stoeprand", + "de": "Kein Bordstein" } }, { "osmTags": "kerb=", "question": { "en": "Kerb with unknown height", - "nl": "Stoeprand met onbekende hoogte" + "nl": "Stoeprand met onbekende hoogte", + "de": "Bordstein mit unbekannter Höhe" } } ] @@ -238,25 +262,29 @@ "options": [ { "question": { - "en": "Kerbs with or without tactile paving" + "en": "Kerbs with or without tactile paving", + "de": "Bordsteine mit oder ohne taktilem Pflaster" } }, { "osmTags": "tactile_paving=yes", "question": { - "en": "Kerb with tactile paving" + "en": "Kerb with tactile paving", + "de": "Bordstein mit taktilem Pflaster" } }, { "osmTags": "tactile_paving=no", "question": { - "en": "Kerb without tactile paving" + "en": "Kerb without tactile paving", + "de": "Bordstein ohne taktilem Pflaster" } }, { "osmTags": "tactile_paving=", "question": { - "en": "Kerb wihout information about tactile paving" + "en": "Kerb wihout information about tactile paving", + "de": "Bordstein ohne Informationen über taktiles Pflaster" } } ] @@ -273,11 +301,13 @@ ], "human": { "en": "centimeters", - "nl": "centimeter" + "nl": "centimeter", + "de": "Zentimeter" }, "humanSingular": { "en": "centimeter", - "nl": "centimeter" + "nl": "centimeter", + "de": "Zentimeter" }, "default": true }, @@ -289,11 +319,13 @@ ], "human": { "en": "meters", - "nl": "meter" + "nl": "meter", + "de": "Meter" }, "humanSingular": { "en": "meter", - "nl": "meter" + "nl": "meter", + "de": "Meter" } } ], diff --git a/assets/layers/shops/shops.json b/assets/layers/shops/shops.json index 1cd62eb29..320e62703 100644 --- a/assets/layers/shops/shops.json +++ b/assets/layers/shops/shops.json @@ -102,7 +102,8 @@ { "question": { "en": "What kind of shop is this?", - "nl": "Wat voor soort winkel is dit?" + "nl": "Wat voor soort winkel is dit?", + "de": "Was ist das für ein Geschäft?" }, "id": "shops-type-from-id", "mappings": [ diff --git a/assets/themes/kerbs_and_crossings/kerbs_and_crossings.json b/assets/themes/kerbs_and_crossings/kerbs_and_crossings.json index ddb32ee8d..1052e41f3 100644 --- a/assets/themes/kerbs_and_crossings/kerbs_and_crossings.json +++ b/assets/themes/kerbs_and_crossings/kerbs_and_crossings.json @@ -4,11 +4,13 @@ "version": "20211215", "title": { "en": "Kerbs and crossings", - "nl": "Stoepranden en oversteekplaatsen" + "nl": "Stoepranden en oversteekplaatsen", + "de": "Bordsteine und Überwege" }, "description": { "en": "A map showing kerbs and crossings.", - "nl": "Een kaart met stoepranden en oversteekplaatsen." + "nl": "Een kaart met stoepranden en oversteekplaatsen.", + "de": "Eine Karte mit Bordsteinen und Überwegen." }, "icon": "./assets/layers/kerbs/KerbIcon.svg", "startZoom": 19, diff --git a/assets/translators.json b/assets/translators.json index 49871f9bd..b57c1c805 100644 --- a/assets/translators.json +++ b/assets/translators.json @@ -5,7 +5,7 @@ "contributor": "Pieter Vander Vennet" }, { - "commits": 136, + "commits": 138, "contributor": "kjon" }, { diff --git a/langs/layers/de.json b/langs/layers/de.json index 861953749..525455f6d 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -3095,12 +3095,21 @@ "1": { "then": "Radweg" }, + "2": { + "then": "Straße mit gemeinsam genutzter Fahrspur {name}" + }, "3": { "then": "Gemeinsame Fahrspur" }, + "4": { + "then": "Straße mit Fahrradstreifen {name}" + }, "5": { "then": "Fahrradspur" }, + "6": { + "then": "Straße mit Radweg neben der Straße {name}" + }, "7": { "then": "Radweg neben der Straße" }, @@ -3109,15 +3118,6 @@ }, "9": { "then": "Fahrradstraße" - }, - "4": { - "then": "Straße mit Fahrradstreifen {name}" - }, - "2": { - "then": "Straße mit gemeinsam genutzter Fahrspur {name}" - }, - "6": { - "then": "Straße mit Radweg neben der Straße {name}" } }, "render": "Weg" @@ -4067,6 +4067,116 @@ "render": "Informationstafel" } }, + "kerbs": { + "description": "Eine Ebene, die Bordsteine zeigt.", + "filter": { + "0": { + "options": { + "0": { + "question": "Alle Arten von Bordsteinen" + }, + "1": { + "question": "Erhöhter Bordstein (>3 cm)" + }, + "2": { + "question": "Abgesenkter Bordstein (~3 cm)" + }, + "3": { + "question": "Bündiger Bordstein (~0cm)" + }, + "4": { + "question": "Kein Bordstein" + }, + "5": { + "question": "Bordstein mit unbekannter Höhe" + } + } + }, + "1": { + "options": { + "0": { + "question": "Bordsteine mit oder ohne taktilem Pflaster" + }, + "1": { + "question": "Bordstein mit taktilem Pflaster" + }, + "2": { + "question": "Bordstein ohne taktilem Pflaster" + }, + "3": { + "question": "Bordstein ohne Informationen über taktiles Pflaster" + } + } + } + }, + "name": "Bordsteine", + "presets": { + "0": { + "description": "Bordstein in einem Fußweg", + "title": "einen Bordstein" + } + }, + "tagRenderings": { + "kerb-height": { + "freeform": { + "placeholder": "Höhe des Bordsteins" + }, + "question": "Wie hoch ist der Bordstein?", + "render": "Bordsteinhöhe: {{kerb:height}}" + }, + "kerb-type": { + "mappings": { + "0": { + "then": "Der Bordstein ist erhöht (>3 cm)" + }, + "1": { + "then": "Der Bordstein ist abgesenkt (~3 cm)" + }, + "2": { + "then": "Der Bordstein ist bündig (~0cm)" + }, + "3": { + "then": "Hier gibt es keinen Bordstein" + }, + "4": { + "then": "Es gibt einen Bordstein mit unbekannter Höhe" + } + }, + "question": "Wie hoch ist der Bordstein?" + }, + "tactile-paving": { + "mappings": { + "0": { + "then": "Der Bordstein hat ein taktiles Pflaster." + }, + "1": { + "then": "Der Bordstein hat kein taktiles Pflaster." + }, + "2": { + "then": "Der Bordstein hat ein taktiles Pflaster, das aber falsch ist" + } + }, + "question": "Gibt es am Bordstein ein taktiles Pflaster?" + } + }, + "title": { + "render": "Bordstein" + }, + "units": { + "0": { + "applicableUnits": { + "0": { + "human": "Zentimeter", + "humanSingular": "Zentimeter" + }, + "1": { + "human": "Meter", + "humanSingular": "Meter" + } + } + } + } + }, "kindergarten_childcare": { "name": "Kindergärten und Kinderkrippen", "presets": { @@ -6251,115 +6361,5 @@ } } } - }, - "kerbs": { - "filter": { - "0": { - "options": { - "1": { - "question": "Erhöhter Bordstein (>3 cm)" - }, - "0": { - "question": "Alle Arten von Bordsteinen" - }, - "2": { - "question": "Abgesenkter Bordstein (~3 cm)" - }, - "3": { - "question": "Bündiger Bordstein (~0cm)" - }, - "4": { - "question": "Kein Bordstein" - }, - "5": { - "question": "Bordstein mit unbekannter Höhe" - } - } - }, - "1": { - "options": { - "2": { - "question": "Bordstein ohne taktilem Pflaster" - }, - "0": { - "question": "Bordsteine mit oder ohne taktilem Pflaster" - }, - "1": { - "question": "Bordstein mit taktilem Pflaster" - }, - "3": { - "question": "Bordstein ohne Informationen über taktiles Pflaster" - } - } - } - }, - "name": "Bordsteine", - "presets": { - "0": { - "description": "Bordstein in einem Fußweg", - "title": "einen Bordstein" - } - }, - "tagRenderings": { - "kerb-height": { - "freeform": { - "placeholder": "Höhe des Bordsteins" - }, - "render": "Bordsteinhöhe: {{kerb:height}}", - "question": "Wie hoch ist der Bordstein?" - }, - "kerb-type": { - "mappings": { - "2": { - "then": "Der Bordstein ist bündig (~0cm)" - }, - "1": { - "then": "Der Bordstein ist abgesenkt (~3 cm)" - }, - "4": { - "then": "Es gibt einen Bordstein mit unbekannter Höhe" - }, - "0": { - "then": "Der Bordstein ist erhöht (>3 cm)" - }, - "3": { - "then": "Hier gibt es keinen Bordstein" - } - }, - "question": "Wie hoch ist der Bordstein?" - }, - "tactile-paving": { - "mappings": { - "2": { - "then": "Der Bordstein hat ein taktiles Pflaster, das aber falsch ist" - }, - "0": { - "then": "Der Bordstein hat ein taktiles Pflaster." - }, - "1": { - "then": "Der Bordstein hat kein taktiles Pflaster." - } - }, - "question": "Gibt es am Bordstein ein taktiles Pflaster?" - } - }, - "description": "Eine Ebene, die Bordsteine zeigt.", - "units": { - "0": { - "applicableUnits": { - "0": { - "human": "Zentimeter", - "humanSingular": "Zentimeter" - }, - "1": { - "human": "Meter", - "humanSingular": "Meter" - } - } - } - }, - "title": { - "render": "Bordstein" - } } -} +} \ No newline at end of file diff --git a/langs/themes/de.json b/langs/themes/de.json index b3a951794..7702fbfbb 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -647,6 +647,72 @@ "shortDescription": "Hydranten, Feuerlöscher, Feuerwachen und Rettungswachen.", "title": "Hydranten, Feuerlöscher, Feuerwachen und Rettungswachen" }, + "kerbs_and_crossings": { + "description": "Eine Karte mit Bordsteinen und Überwegen.", + "title": "Bordsteine und Überwege" + }, + "mapcomplete-changes": { + "description": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen", + "layers": { + "0": { + "description": "Zeigt alle MapComplete Änderungen", + "filter": { + "0": { + "options": { + "0": { + "question": "Themenname enthält {search}" + } + } + }, + "1": { + "options": { + "0": { + "question": "Erstellt von {search}" + } + } + }, + "2": { + "options": { + "0": { + "question": "Nicht erstellt von {search}" + } + } + } + }, + "name": "Zentrum der Änderungssätze", + "tagRenderings": { + "contributor": { + "render": "Geändert von {_last_edit:contributor}" + }, + "render_id": { + "render": "Änderungssatz {id}" + }, + "theme": { + "mappings": { + "0": { + "then": "Änderung mit inoffiziellem Thema {theme}" + } + }, + "render": "Änderung mit Thema {theme}" + } + }, + "title": { + "render": "Änderungssatz für {theme}" + } + }, + "1": { + "override": { + "tagRenderings": { + "link_to_more": { + "render": "Weitere Statistiken finden Sie hier" + } + } + } + } + }, + "shortDescription": "Zeigt die mit MapComplete vorgenommenen Änderungen", + "title": "Mit MapComplete vorgenommene Änderungen" + }, "maps": { "description": "Auf dieser Karte findest du alle Karten, die OpenStreetMap kennt - typischerweise eine große Karte auf einer Informationstafel, die das Gebiet, die Stadt oder die Region zeigt, z.B. eine touristische Karte auf der Rückseite einer Plakatwand, eine Karte eines Naturschutzgebietes, eine Karte der Radwegenetze in der Region, ...)

    Wenn eine Karte fehlt, können Sie diese leicht auf OpenStreetMap kartieren.", "shortDescription": "Dieses Thema zeigt alle (touristischen) Karten, die OpenStreetMap kennt", @@ -900,71 +966,5 @@ "description": "Auf dieser Karte findest Du Abfalleimer in Deiner Nähe. Wenn ein Abfalleimer auf dieser Karte fehlt, kannst du ihn selbst hinzufügen", "shortDescription": "Eine Karte mit Abfalleimern", "title": "Abfalleimer" - }, - "mapcomplete-changes": { - "description": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen", - "layers": { - "0": { - "filter": { - "2": { - "options": { - "0": { - "question": "Nicht erstellt von {search}" - } - } - }, - "0": { - "options": { - "0": { - "question": "Themenname enthält {search}" - } - } - }, - "1": { - "options": { - "0": { - "question": "Erstellt von {search}" - } - } - } - }, - "title": { - "render": "Änderungssatz für {theme}" - }, - "description": "Zeigt alle MapComplete Änderungen", - "name": "Zentrum der Änderungssätze", - "tagRenderings": { - "contributor": { - "render": "Geändert von {_last_edit:contributor}" - }, - "render_id": { - "render": "Änderungssatz {id}" - }, - "theme": { - "mappings": { - "0": { - "then": "Änderung mit inoffiziellem Thema {theme}" - } - }, - "render": "Änderung mit Thema {theme}" - } - } - }, - "1": { - "override": { - "tagRenderings": { - "link_to_more": { - "render": "Weitere Statistiken finden Sie hier" - } - } - } - } - }, - "shortDescription": "Zeigt die mit MapComplete vorgenommenen Änderungen", - "title": "Mit MapComplete vorgenommene Änderungen" - }, - "kerbs_and_crossings": { - "description": "Eine Karte mit Bordsteinen und Überwegen.", - "title": "Bordsteine und Überwege" } -} +} \ No newline at end of file From 13579e6c979946796d2de03a9494b88c1ffeb6c7 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 5 Jul 2022 16:59:40 +0200 Subject: [PATCH 17/71] Fix link in docs, add 'localhost' and gitpod to non-caching version of serviceworkers --- Docs/Making_Your_Own_Theme.md | 2 +- package.json | 4 ++-- service-worker.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Docs/Making_Your_Own_Theme.md b/Docs/Making_Your_Own_Theme.md index 80c27a7f4..b7c2e349c 100644 --- a/Docs/Making_Your_Own_Theme.md +++ b/Docs/Making_Your_Own_Theme.md @@ -322,7 +322,7 @@ Every field is documented in the source code itself - you can find them here: - [The top level `LayoutConfig`](https://github.com/pietervdvn/MapComplete/blob/master/Models/ThemeConfig/Json/LayoutConfigJson.ts) - [A layer object `LayerConfig`](https://github.com/pietervdvn/MapComplete/blob/master/Models/ThemeConfig/Json/LayerConfigJson.ts) -- [The `TagRendering`](https://github.com/pietervdvn/MapComplete/blob/master/Models/ThemeConfig/Json/TagRenderingConfigJson.ts) +- [The `TagRendering`](https://github.com/pietervdvn/MapComplete/blob/master/Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson.ts) - At last, the exact semantics of tags are documented [here](Tags_format.md) A JSON schema file is available in `Docs/Schemas` - use `LayoutConfig.schema.json` to validate a theme file. diff --git a/package.json b/package.json index 05c73c9a0..58c8dabfa 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "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", - "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": "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", "gittag": "ts-node scripts/printVersion.ts | bash", @@ -48,7 +48,7 @@ "script": "ts-node", "weblate-merge": "./scripts/automerge-translations.sh", "weblate-add-upstream": "git remote add weblate-github git@github.com:weblate/MapComplete.git", - "weblate-fix": "git remote update weblate-github ; git merge weblate-github/weblate-mapcomplete-core; git merge weblate-github/weblate-mapcomplete-layers ; git merge weblate-github/weblate-mapcomplete-layer-translations", + "weblate-fix": "git remote update weblate-github; git merge weblate-github/weblate-mapcomplete-core; git merge weblate-github/weblate-mapcomplete-layers; git merge weblate-github/weblate-mapcomplete-layer-translations", "weblate-fix-heavy": "git remote rm weblate-layers; git remote add weblate-layers https://hosted.weblate.org/git/mapcomplete/layers/; git remote update weblate-layers; git merge weblate-layers/master", "housekeeping": "npm run generate && npm run generate:docs && npm run generate:contributor-list && git add Docs/* && git commit assets/ langs/ Docs/ -m 'Housekeeping...'", "parseSchools": "ts-node scripts/schools/amendSchoolData.ts", diff --git a/service-worker.ts b/service-worker.ts index 29b69697e..56e006a4e 100644 --- a/service-worker.ts +++ b/service-worker.ts @@ -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" + const shouldBeCached = origin.host === requestUrl.host && origin.host !== "127.0.0.1:1234" && origin.host !== "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 From 606fd305fd77811fb0355522e376bc85b13bc07e Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Tue, 5 Jul 2022 15:02:08 +0000 Subject: [PATCH 18/71] Basic gitpod + vscode settings --- .gitignore | 14 +++++++++++++- .gitpod.yml | 13 +++++++++++++ .vscode/extensions.json | 6 ++++++ .vscode/settings.json | 19 +++++++++++++++++++ .vscode/tasks.json | 14 ++++++++++++++ 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 .gitpod.yml create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json diff --git a/.gitignore b/.gitignore index 4b310f095..ed8cb6f15 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ dist/* node_modules .cache/* .idea/* -.vscode/* scratch assets/editor-layer-index.json assets/generated/* @@ -24,3 +23,16 @@ index_*.ts .~lock.* *.doctest.ts service-worker.js + +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix \ No newline at end of file diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 000000000..2c9725527 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,13 @@ +tasks: + - init: npm run init + command: npm run start + +ports: + - name: MapComplete Website + port: 1234 + onOpen: open-browser + +vscode: + extensions: + - "esbenp.prettier-vscode" + - "eamodio.gitlens" \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..ba4f9b1b8 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,6 @@ +{ + "recommendations": [ + "esbenp.prettier-vscode", + "eamodio.gitlens" + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..0375d7080 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,19 @@ +{ + "json.schemas": [ + { + "fileMatch": [ + "/assets/layers/*/*.json", + "!/assets/layers/*/license_info.json" + ], + "url": "./Docs/Schemas/LayerConfigJson.schema.json" + }, + { + "fileMatch": [ + "/assets/themes/*/*.json", + "!/assets/themes/*/license_info.json" + ], + "url": "./Docs/Schemas/LayoutConfigJson.schema.json" + } + ], + "editor.tabSize": 2 +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 000000000..2dfa42cd3 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,14 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "start", + "path": "/", + "group": "build", + "problemMatcher": [], + "label": "MapComplete Dev", + "detail": "Run MapComplete Dev Server" + } + ] +} From 2bb48439b5b3e42526be846a708199d786b95132 Mon Sep 17 00:00:00 2001 From: AlexanderRebai Date: Tue, 5 Jul 2022 15:04:14 +0000 Subject: [PATCH 19/71] doctors feature --- assets/layers/doctors/doctors.json | 34 +++++++++++++++++++ assets/layers/doctors/doctors.svg | 20 +++++++++++ assets/layers/doctors/license_info.json | 12 +++++++ assets/themes/doctors/doctors.json | 20 +++++++++++ .../mapcomplete-changes.json | 4 +++ 5 files changed, 90 insertions(+) create mode 100644 assets/layers/doctors/doctors.json create mode 100644 assets/layers/doctors/doctors.svg create mode 100644 assets/layers/doctors/license_info.json create mode 100644 assets/themes/doctors/doctors.json diff --git a/assets/layers/doctors/doctors.json b/assets/layers/doctors/doctors.json new file mode 100644 index 000000000..72d715fe7 --- /dev/null +++ b/assets/layers/doctors/doctors.json @@ -0,0 +1,34 @@ +{ + "id": "doctors", + "name": { + "en": "doctors" + }, + "title": { + "render": { + "en": "Doctors Office {name}" + } + }, + "source": { + "osmTags": { + "and": [ + "amenity=doctors" + ] + } + }, + "minzoom": 13, + "tagRenderings": [ + "images" + ], + "mapRendering": [ + { + "icon": { + "render": "pin:#6BC4F7;./assets/layers/doctors/doctors.svg" + }, + "iconSize": "40,40,bottom", + "location": [ + "point", + "centroid" + ] + } + ] +} \ No newline at end of file diff --git a/assets/layers/doctors/doctors.svg b/assets/layers/doctors/doctors.svg new file mode 100644 index 000000000..94516a688 --- /dev/null +++ b/assets/layers/doctors/doctors.svg @@ -0,0 +1,20 @@ + + + + + + + diff --git a/assets/layers/doctors/license_info.json b/assets/layers/doctors/license_info.json new file mode 100644 index 000000000..90889fdc6 --- /dev/null +++ b/assets/layers/doctors/license_info.json @@ -0,0 +1,12 @@ +[ + { + "path": "doctors.svg", + "license": "cc0", + "authors": [ + "osmcarto" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Doctors-14.svg" + ] + } +] \ No newline at end of file diff --git a/assets/themes/doctors/doctors.json b/assets/themes/doctors/doctors.json new file mode 100644 index 000000000..7c191b571 --- /dev/null +++ b/assets/themes/doctors/doctors.json @@ -0,0 +1,20 @@ +{ + "id": "doctors", + "title": { + "en": "Doctors" + }, + "description": { + "en": "On this map, publicly accessible doctors offices are shown and can be easily added" + }, + "maintainer": "MapComplete", + "icon": "./assets/layers/doctors/doctors.svg", + "version": "0", + "startLat": 50.8465573, + "defaultBackgroundId": "CartoDB.Voyager", + "startLon": 4.351697, + "startZoom": 16, + "widenFactor": 2, + "layers": [ + "doctors" + ] +} \ No newline at end of file diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index c21ef5df7..56650d440 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -151,6 +151,10 @@ "if": "theme=cyclofix", "then": "./assets/themes/cyclofix/logo.svg" }, + { + "if": "theme=doctors", + "then": "./assets/layers/doctors/doctors.svg" + }, { "if": "theme=drinking_water", "then": "./assets/themes/drinking_water/logo.svg" From 7270365cf54490507257a40efcda67eb531dfd2d Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Wed, 6 Jul 2022 09:09:05 +0000 Subject: [PATCH 20/71] Add Github extension --- .gitpod.yml | 3 ++- .vscode/extensions.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitpod.yml b/.gitpod.yml index 2c9725527..d53368529 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -10,4 +10,5 @@ ports: vscode: extensions: - "esbenp.prettier-vscode" - - "eamodio.gitlens" \ No newline at end of file + - "eamodio.gitlens", + - "GitHub.vscode-pull-request-github" \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json index ba4f9b1b8..68d524f21 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,6 +1,7 @@ { "recommendations": [ "esbenp.prettier-vscode", - "eamodio.gitlens" + "eamodio.gitlens", + "GitHub.vscode-pull-request-github" ] } \ No newline at end of file From e34c935046b3be2c8bffc79a1350fae827f04fdd Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Wed, 6 Jul 2022 09:39:28 +0000 Subject: [PATCH 21/71] Auto save on focus change --- .vscode/settings.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 0375d7080..ff6d1b68d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -15,5 +15,6 @@ "url": "./Docs/Schemas/LayoutConfigJson.schema.json" } ], - "editor.tabSize": 2 + "editor.tabSize": 2, + "files.autoSave": "onFocusChange" } \ No newline at end of file From c8179a3a6264133d476f56e32c52103c9d2df393 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Wed, 6 Jul 2022 09:46:52 +0000 Subject: [PATCH 22/71] Small fixes --- assets/layers/transit_stops/bus_stop.svg | 56 +++- langs/layers/en.json | 108 ++++--- langs/layers/it.json | 364 +++++++++++++++++++++++ langs/layers/nl.json | 8 +- langs/themes/en.json | 4 +- langs/themes/it.json | 4 + 6 files changed, 501 insertions(+), 43 deletions(-) diff --git a/assets/layers/transit_stops/bus_stop.svg b/assets/layers/transit_stops/bus_stop.svg index 1b061c00b..8d9c4d13b 100644 --- a/assets/layers/transit_stops/bus_stop.svg +++ b/assets/layers/transit_stops/bus_stop.svg @@ -1,3 +1,55 @@ - - + + + + + + image/svg+xml + + + + + + + + diff --git a/langs/layers/en.json b/langs/layers/en.json index 219cfe197..e077d30cd 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -3568,6 +3568,11 @@ "0": { "explanation": "{title()} has closed down permanently" } + }, + "nonDeleteMappings": { + "0": { + "then": "This is actually a pub" + } } }, "description": "A layer showing restaurants and fast-food amenities (with a special rendering for friteries)", @@ -5111,39 +5116,6 @@ "render": "Recycling facility" } }, - "shelter": { - "description": "Layer showing shelter structures", - "name": "Shelter", - "tagRenderings": { - "shelter-type": { - "mappings": { - "0": { - "then": "This is a shelter at a public transport stop." - }, - "1": { - "then": "This is a shelter protecting from rain at a picnic site." - }, - "2": { - "then": "This is a gazebo." - }, - "3": { - "then": "This is a small shelter, primarily intended for short breaks. Usually found in the mountains or alongside roads." - }, - "4": { - "then": "This is a shed with 3 walls, primarily intended for camping." - }, - "5": { - "then": "This is a pavilion" - } - }, - "question": "What kind of shelter is this?", - "render": "Shelter type: {shelter_type}" - } - }, - "title": { - "render": "Shelter" - } - }, "school": { "name": "Primary and secondary schools", "presets": { @@ -5265,6 +5237,39 @@ "render": "School {name}" } }, + "shelter": { + "description": "Layer showing shelter structures", + "name": "Shelter", + "tagRenderings": { + "shelter-type": { + "mappings": { + "0": { + "then": "This is a shelter at a public transport stop." + }, + "1": { + "then": "This is a shelter protecting from rain at a picnic site." + }, + "2": { + "then": "This is a gazebo." + }, + "3": { + "then": "This is a small shelter, primarily intended for short breaks. Usually found in the mountains or alongside roads." + }, + "4": { + "then": "This is a shed with 3 walls, primarily intended for camping." + }, + "5": { + "then": "This is a pavilion" + } + }, + "question": "What kind of shelter is this?", + "render": "Shelter type: {shelter_type}" + } + }, + "title": { + "render": "Shelter" + } + }, "shops": { "deletion": { "extraDeleteReasons": { @@ -5312,11 +5317,13 @@ } }, "tagRenderings": { + "2": { + "override": { + "question": "What kind of shop is this?" + } + }, "shops-name": { "question": "What is the name of this shop?" - }, - "shops-type-from-id": { - "question": "What kind of shop is this?" } }, "title": { @@ -6005,6 +6012,35 @@ } }, "name": "Bus lines", + "tagRenderings": { + "colour": { + "question": "What is the colour for this bus line?", + "render": "This bus line has the color {colour}" + }, + "from": { + "question": "What is the starting point for this bus line?", + "render": "This bus line begins at {from}" + }, + "name": { + "question": "What is the name for this bus line? (i.e. Bus XX: From => Via => To)" + }, + "network": { + "question": "What network does this bus line belong to?", + "render": "This bus line is part of the {network} network" + }, + "operator": { + "question": "What company operates this bus line?", + "render": "This bus line is operated by {operator}" + }, + "to": { + "question": "What is the ending point for this bus line?", + "render": "This bus line ends at {to}" + }, + "via": { + "question": "What is the via point for this bus line?", + "render": "This bus line goes via {via}" + } + }, "title": { "mappings": { "0": { diff --git a/langs/layers/it.json b/langs/layers/it.json index a76a3b1d8..09efa26b6 100644 --- a/langs/layers/it.json +++ b/langs/layers/it.json @@ -1756,6 +1756,218 @@ "render": "Microbiblioteca" } }, + "recycling": { + "description": "Un livello con i contenitori e centri per la raccolta rifiuti riciclabili", + "filter": { + "0": { + "options": { + "0": { + "question": "Aperto ora" + } + } + }, + "1": { + "options": { + "0": { + "question": "Tutti i tipi di rifiuti" + }, + "1": { + "question": "Riciclo di batterie" + }, + "2": { + "question": "Riciclo di confezioni per bevande" + }, + "3": { + "question": "Riciclo di lattine" + }, + "4": { + "question": "Riciclo di abiti" + }, + "5": { + "question": "Riciclo di olio da cucina" + }, + "6": { + "question": "Riciclo di olio da motore" + }, + "7": { + "question": "Riciclo di umido" + }, + "8": { + "question": "Riciclo di bottiglie di vetro" + }, + "9": { + "question": "Riciclo di vetro" + }, + "10": { + "question": "Riciclo di giornali" + }, + "11": { + "question": "Riciclo di carta" + }, + "12": { + "question": "Riciclo di bottiglie di plastica" + }, + "13": { + "question": "Riciclo di confezioni di plastica" + }, + "14": { + "question": "Riciclo di plastica" + }, + "15": { + "question": "Riciclo di rottami metallici" + }, + "16": { + "question": "Riciclo di piccoli elettrodomestici" + }, + "17": { + "question": "Riciclo di secco" + } + } + } + }, + "name": "Riciclo", + "presets": { + "0": { + "title": "un contenitore per il riciclo" + }, + "1": { + "title": "un centro di riciclo" + } + }, + "tagRenderings": { + "container-location": { + "mappings": { + "0": { + "then": "E' un contenitore sotterraneo" + }, + "1": { + "then": "Questo contenitore è al chiuso" + }, + "2": { + "then": "Questo contenitore è all'aperto" + } + }, + "question": "Dove si trova questo contenitore?" + }, + "opening_hours": { + "mappings": { + "0": { + "then": "24/7" + } + }, + "question": "Quali sono gli orari di apertura di questo impianto di raccolta e riciclo?" + }, + "operator": { + "question": "Quale azienda gestisce questo impianto di raccolta e riciclo?", + "render": "Questa struttura di raccola e riciclo è gestita da {operator}" + }, + "recycling-accepts": { + "mappings": { + "0": { + "then": "Batterie" + }, + "1": { + "then": "Cartoni per bevande" + }, + "2": { + "then": "Lattine" + }, + "3": { + "then": "Abiti" + }, + "4": { + "then": "Olio da cucina" + }, + "5": { + "then": "Olio di motore" + }, + "6": { + "then": "Verde" + }, + "7": { + "then": "Umido" + }, + "8": { + "then": "Bottiglie di vetro" + }, + "9": { + "then": "Vetro" + }, + "10": { + "then": "Giornali" + }, + "11": { + "then": "Carta" + }, + "12": { + "then": "Bottiglie di platica" + }, + "13": { + "then": "Confezioni di plastica" + }, + "14": { + "then": "Plastica" + }, + "15": { + "then": "Rottami metallici" + }, + "16": { + "then": "Scarpe" + }, + "17": { + "then": "Piccoli elettrodomestici" + }, + "18": { + "then": "Piccoli elettrodomestici" + }, + "19": { + "then": "Aghi e oggetti appuntiti" + }, + "20": { + "then": "Secco" + } + }, + "question": "Cosa si può riciclare qui?" + }, + "recycling-centre-name": { + "mappings": { + "0": { + "then": "Questo centro raccolta e riciclo rifiuti non ha un nome specifico" + } + }, + "question": "Come si chiama questo centro raccolta e riciclo rifiuti?", + "render": "Questo centro raccolta e riciclo rifiuti si chiama {name}" + }, + "recycling-type": { + "mappings": { + "0": { + "then": "Questo è un contenitore per il riciclo di rifiuti" + }, + "1": { + "then": "Questo è un centro per la raccola e riciclo di rifiuti" + }, + "2": { + "then": "Contenitore per lo smaltimento del secco" + } + }, + "question": "Che tipo di raccolta è questo?" + } + }, + "title": { + "mappings": { + "0": { + "then": "Centro di riciclo rifiuti" + }, + "1": { + "then": "Centro di riciclo rifiuti" + }, + "2": { + "then": "Contenitore per il riciclo" + } + }, + "render": "Impianti di riciclo" + } + }, "slow_roads": { "tagRenderings": { "slow_roads-surface": { @@ -2259,6 +2471,158 @@ "render": "Punto panoramico" } }, + "waste_basket": { + "description": "Questo è un cestino dei rifiuti pubblico, un bidone della spazzatura, dove puoi buttare via la tua spazzatura", + "filter": { + "0": { + "options": { + "0": { + "question": "Tutti i tipi" + }, + "1": { + "question": "Cestino per sigarette" + }, + "2": { + "question": "Cestino per medicinali" + }, + "3": { + "question": "Cestino per escrementi dei cani" + }, + "4": { + "question": "Cestino per la spazzatura" + }, + "5": { + "question": "Cestino dei rifiuti per oggetti taglienti" + }, + "6": { + "question": "Cestino per la plastica" + } + } + }, + "1": { + "options": { + "0": { + "question": "Cestino per rifiuti con dispenser per sacchetti per escrementi dei cani" + } + } + } + }, + "mapRendering": { + "0": { + "iconSize": { + "mappings": { + "0": { + "then": "Cestino dei rifiuti" + } + } + } + } + }, + "name": "Cestino dei rifiuti", + "presets": { + "0": { + "title": "un cestino dei rifiuti" + } + }, + "tagRenderings": { + "dispensing_dog_bags": { + "mappings": { + "0": { + "then": "Questo cestino ha un distributore di sacchetti per escrementi dei cani" + }, + "1": { + "then": "Questo cestino non ha un distributore di sacchetti per escrementi dei cani" + }, + "2": { + "then": "Questo cestino non ha un distributore di sacchetti per escrementi dei cani" + } + }, + "question": "Questo cestino ha un distributore di sacchetti per escrementi dei cani?" + }, + "waste-basket-waste-types": { + "mappings": { + "0": { + "then": "Un cestino rifiuti per uso generico" + }, + "1": { + "then": "Un cestino rifiuti per uso generico" + }, + "2": { + "then": "Un cestino rifiuti per escrementi di cani" + }, + "3": { + "then": "Un cestino rifiuti per sigarette" + }, + "4": { + "then": "Un cestino rifiuti per medicinali" + }, + "5": { + "then": "Un cestino rifiuti per aghi e altri oggetti appuntiti" + }, + "6": { + "then": "Un cestino rifiuti per la plastica" + } + }, + "question": "Che tipo di cestino dei rifiuti è questo?" + } + }, + "title": { + "render": "Cestino dei rifiuti" + } + }, + "waste_disposal": { + "description": "Cestino per lo smaltimento dei rifiuti, contenitore di dimensioni medio grandi per lo smaltimento dei rifiuti (domestici)", + "filter": { + "0": { + "options": { + "0": { + "question": "Solo accesso pubblico" + } + } + } + }, + "name": "Contenitori per la raccolta differenziata", + "presets": { + "0": { + "description": "Cestino di dimensioni medio-grandi per lo smaltimento dei rifiuti (domestici)", + "title": "un raccoglitore per lo smaltimento rifiuti" + } + }, + "tagRenderings": { + "access": { + "mappings": { + "0": { + "then": "Questo cestino può essere usato da chiunque" + }, + "1": { + "then": "Questo cestino è privato" + }, + "2": { + "then": "Questo cestino è solo per residenti" + } + }, + "question": "Chi può utilizzare questo cestino per lo smaltimento dei rifiuti?", + "render": "Accesso: {access}" + }, + "disposal-location": { + "mappings": { + "0": { + "then": "Questo è un contenitore sotterraneo" + }, + "1": { + "then": "Questo contenitore è al chiuso" + }, + "2": { + "then": "Questo contenitore è all'aperto" + } + }, + "question": "Dove si trova questo contenitore?" + } + }, + "title": { + "render": "Smaltimento rifiuti" + } + }, "windturbine": { "name": "pala eolica", "presets": { diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 96d2abc4f..3380b5390 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -5183,11 +5183,13 @@ } }, "tagRenderings": { + "2": { + "override": { + "question": "Wat voor soort winkel is dit?" + } + }, "shops-name": { "question": "Wat is de naam van deze winkel?" - }, - "shops-type-from-id": { - "question": "Wat voor soort winkel is dit?" } }, "title": { diff --git a/langs/themes/en.json b/langs/themes/en.json index 80872ac08..4fb6f8226 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -954,8 +954,8 @@ "title": "Open Toilet Map" }, "transit": { - "description": "Transit", - "title": "Transit" + "description": "Plan your trip with the help of the public transport system.", + "title": "Bus routes" }, "trees": { "description": "Map all the trees!", diff --git a/langs/themes/it.json b/langs/themes/it.json index f9518d0d4..fbed99743 100644 --- a/langs/themes/it.json +++ b/langs/themes/it.json @@ -577,6 +577,10 @@ "shortDescription": "Mappa tutti gli alberi", "title": "Alberi" }, + "waste": { + "description": "Mappa dei cestini per i rifiuti e i centri di raccolta e riciclo rifiuti.", + "title": "Rifiuti" + }, "waste_basket": { "description": "In questa cartina troverai i cestini dei rifiuti nei tuoi paraggi. Se manca un cestino, puoi inserirlo tu stesso", "shortDescription": "Una cartina dei cestini dei rifiuti", From 06a02320eee8a42473eb5a304d640f10e2da66ee Mon Sep 17 00:00:00 2001 From: AlexanderRebai Date: Wed, 6 Jul 2022 09:57:05 +0000 Subject: [PATCH 23/71] improved doctors layer --- assets/layers/doctors/doctors.json | 44 +++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/assets/layers/doctors/doctors.json b/assets/layers/doctors/doctors.json index 72d715fe7..2c34b4538 100644 --- a/assets/layers/doctors/doctors.json +++ b/assets/layers/doctors/doctors.json @@ -17,7 +17,49 @@ }, "minzoom": 13, "tagRenderings": [ - "images" + "images", + "opening_hours", + "phone", + "email", + "website", + { + "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" + } + } + ] + } ], "mapRendering": [ { From f27b60f80d9dbd7dba63aac1fe90a29e3260c8a2 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 6 Jul 2022 11:14:19 +0200 Subject: [PATCH 24/71] Better errors when an image is missing --- Models/ThemeConfig/Conversion/Conversion.ts | 8 +++ Models/ThemeConfig/Conversion/Validation.ts | 76 +++++++++++++++------ scripts/generateLayerOverview.ts | 4 +- 3 files changed, 65 insertions(+), 23 deletions(-) diff --git a/Models/ThemeConfig/Conversion/Conversion.ts b/Models/ThemeConfig/Conversion/Conversion.ts index 5fe52ebb0..2b7880c1f 100644 --- a/Models/ThemeConfig/Conversion/Conversion.ts +++ b/Models/ThemeConfig/Conversion/Conversion.ts @@ -39,6 +39,14 @@ export abstract class Conversion { return DesugaringStep.strict(fixed) } + public convertJoin(json: TIn, context: string, errors: string[], warnings?: string[], information?: string[]): TOut { + const fixed = this.convert(json, context) + errors?.push(...(fixed.errors ?? [])) + warnings?.push(...(fixed.warnings ?? [])) + information?.push(...(fixed.information ?? [])) + return fixed.result + } + public andThenF(f: (tout:TOut) => X ): Conversion{ return new Pipe( this, diff --git a/Models/ThemeConfig/Conversion/Validation.ts b/Models/ThemeConfig/Conversion/Validation.ts index 79e4785f3..47250c36b 100644 --- a/Models/ThemeConfig/Conversion/Validation.ts +++ b/Models/ThemeConfig/Conversion/Validation.ts @@ -45,6 +45,53 @@ class ValidateLanguageCompleteness extends DesugaringStep { } } +export class DoesImageExist extends DesugaringStep{ + + private readonly _knownImagePaths: Set; + public static doesPathExist : (path: string) => boolean = undefined; + + constructor(knownImagePaths: Set) { + super("Checks if an image exists", [], "DoesImageExist"); + this._knownImagePaths = knownImagePaths; + } + + convert(image: string, context: string): { result: string; errors?: string[]; warnings?: string[]; information?: string[] } { + const errors = [] + const warnings = [] + const information = [] + if (image.indexOf("{") >= 0) { + information.push("Ignoring image with { in the path: " + image) + return {result: image} + } + + if (image === "assets/SocialImage.png") { + return {result: image} + } + if (image.match(/[a-z]*/)) { + + if (Svg.All[image + ".svg"] !== undefined) { + // This is a builtin img, e.g. 'checkmark' or 'crosshair' + return {result: image}; + } + } + + if (this._knownImagePaths !== undefined && !this._knownImagePaths.has(image)) { + if(DoesImageExist.doesPathExist === undefined){ + errors.push(`Image with path ${image} not found or not attributed; it is used in ${context}`) + }else if(!DoesImageExist.doesPathExist(image)){ + errors.push(`Image with path ${image} does not exist; it is used in ${context}.\n Check for typo's and missing directories in the path.`) + }else{ + errors.push(`Image with path ${image} is not attributed (but it exists); execute 'npm run query:licenses' to add the license information and/or run 'npm run generate:licenses' to compile all the license info`) + } + } + return { + result: image, + errors, warnings, information + } + } + +} + class ValidateTheme extends DesugaringStep { /** * The paths where this layer is originally saved. Triggers some extra checks @@ -54,13 +101,14 @@ class ValidateTheme extends DesugaringStep { private readonly knownImagePaths: Set; private readonly _isBuiltin: boolean; private _sharedTagRenderings: Map; - + private readonly _validateImage : DesugaringStep; constructor(knownImagePaths: Set, path: string, isBuiltin: boolean, sharedTagRenderings: Map) { super("Doesn't change anything, but emits warnings and errors", [], "ValidateTheme"); this.knownImagePaths = knownImagePaths; this._path = path; this._isBuiltin = isBuiltin; this._sharedTagRenderings = sharedTagRenderings; + this._validateImage = new DoesImageExist(this.knownImagePaths); } convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[], warnings: string[], information: string[] } { @@ -89,26 +137,7 @@ class ValidateTheme extends DesugaringStep { errors.push("Found a remote image: " + remoteImage + " in theme " + json.id + ", please download it.") } for (const image of images) { - if (image.indexOf("{") >= 0) { - information.push("Ignoring image with { in the path: " + image) - continue - } - - if (image === "assets/SocialImage.png") { - continue - } - if (image.match(/[a-z]*/)) { - - if (Svg.All[image + ".svg"] !== undefined) { - // This is a builtin img, e.g. 'checkmark' or 'crosshair' - continue;// => - } - } - - if (this.knownImagePaths !== undefined && !this.knownImagePaths.has(image)) { - const ctx = context === undefined ? "" : ` in a layer defined in the theme ${context}` - errors.push(`Image with path ${image} not found or not attributed; it is used in ${json.id}${ctx}`) - } + this._validateImage.convertJoin(image, context === undefined ? "" : ` in a layer defined in the theme ${context}`, errors, warnings, information) } if (json.icon.endsWith(".svg")) { @@ -433,8 +462,11 @@ export class DetectMappingsWithImages extends DesugaringStep i); + const ctx = context === undefined ? "" : ` in a layer defined in the theme ${context}` - errors.push(`Image with path ${image} not found or not attributed; it is used in ${json.id}${ctx}`) + errors.push(`Image with path ${image} not found or not attributed; it is used in ${json.id}${ctx}.\n Did you mean one of ${closeNames.slice(0, 3).join(", ")}`) } } diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index 81a67a69a..9a8d762e8 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -5,6 +5,7 @@ import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; import Constants from "../Models/Constants"; import { + DoesImageExist, PrevalidateTheme, ValidateLayer, ValidateTagRenderings, @@ -152,6 +153,8 @@ class LayerOverviewUtils { main(_: string[]) { + DoesImageExist.doesPathExist = (path) => existsSync(path) + const licensePaths = new Set() for (const i in licenses) { licensePaths.add(licenses[i].path) @@ -261,7 +264,6 @@ class LayerOverviewUtils { tagRenderings: this.getSharedTagRenderings(knownImagePaths), publicLayers } - const nonDefaultLanguages : {theme: string, language: string}[] = [] for (const themeInfo of themeFiles) { let themeFile = themeInfo.parsed const themePath = themeInfo.path From a1ea9afac9189eeeaa63145b8cb602037a80fef4 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 6 Jul 2022 12:26:37 +0200 Subject: [PATCH 25/71] Improve error message --- Models/ThemeConfig/TagRenderingConfig.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Models/ThemeConfig/TagRenderingConfig.ts b/Models/ThemeConfig/TagRenderingConfig.ts index e0a482f8e..619e28c2f 100644 --- a/Models/ThemeConfig/TagRenderingConfig.ts +++ b/Models/ThemeConfig/TagRenderingConfig.ts @@ -352,7 +352,7 @@ export default class TagRenderingConfig { } if (hideInAnswer !== true && !(mp.ifnot?.isUsableAsAnswer() ?? true)) { - throw `${context}.mapping[${i}].ifnot: This value cannot be used to answer a question, probably because it contains a regex or an OR. Either change it or set 'hideInAnswer'` + throw `${context}.mapping[${i}].ifnot: This value cannot be used to answer a question, probably because it contains a regex or an OR. If a contributor were to pick this as an option, MapComplete wouldn't be able to determine which tags to add.\n Either change it or set 'hideInAnswer'` } } From b64a873c40e01c7bf6e3eae0e874f5bd125e6243 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 6 Jul 2022 12:57:23 +0200 Subject: [PATCH 26/71] Wire 'doesImageExist' everywhere, fixes #928 --- Models/ThemeConfig/Conversion/Validation.ts | 84 ++++++++++----------- scripts/generateLayerOverview.ts | 27 +++---- 2 files changed, 50 insertions(+), 61 deletions(-) diff --git a/Models/ThemeConfig/Conversion/Validation.ts b/Models/ThemeConfig/Conversion/Validation.ts index 47250c36b..103b8efd3 100644 --- a/Models/ThemeConfig/Conversion/Validation.ts +++ b/Models/ThemeConfig/Conversion/Validation.ts @@ -45,14 +45,15 @@ class ValidateLanguageCompleteness extends DesugaringStep { } } -export class DoesImageExist extends DesugaringStep{ - +export class DoesImageExist extends DesugaringStep { + private readonly _knownImagePaths: Set; - public static doesPathExist : (path: string) => boolean = undefined; - - constructor(knownImagePaths: Set) { + private readonly doesPathExist: (path: string) => boolean = undefined; + + constructor(knownImagePaths: Set, checkExistsSync: (path: string) => boolean = undefined) { super("Checks if an image exists", [], "DoesImageExist"); this._knownImagePaths = knownImagePaths; + this.doesPathExist = checkExistsSync; } convert(image: string, context: string): { result: string; errors?: string[]; warnings?: string[]; information?: string[] } { @@ -76,11 +77,11 @@ export class DoesImageExist extends DesugaringStep{ } if (this._knownImagePaths !== undefined && !this._knownImagePaths.has(image)) { - if(DoesImageExist.doesPathExist === undefined){ + if (this.doesPathExist === undefined) { errors.push(`Image with path ${image} not found or not attributed; it is used in ${context}`) - }else if(!DoesImageExist.doesPathExist(image)){ + } else if (!this.doesPathExist(image)) { errors.push(`Image with path ${image} does not exist; it is used in ${context}.\n Check for typo's and missing directories in the path.`) - }else{ + } else { errors.push(`Image with path ${image} is not attributed (but it exists); execute 'npm run query:licenses' to add the license information and/or run 'npm run generate:licenses' to compile all the license info`) } } @@ -89,7 +90,7 @@ export class DoesImageExist extends DesugaringStep{ errors, warnings, information } } - + } class ValidateTheme extends DesugaringStep { @@ -98,17 +99,16 @@ class ValidateTheme extends DesugaringStep { * @private */ private readonly _path?: string; - private readonly knownImagePaths: Set; private readonly _isBuiltin: boolean; private _sharedTagRenderings: Map; - private readonly _validateImage : DesugaringStep; - constructor(knownImagePaths: Set, path: string, isBuiltin: boolean, sharedTagRenderings: Map) { + private readonly _validateImage: DesugaringStep; + + constructor(doesImageExist: DoesImageExist, path: string, isBuiltin: boolean, sharedTagRenderings: Map) { super("Doesn't change anything, but emits warnings and errors", [], "ValidateTheme"); - this.knownImagePaths = knownImagePaths; + this._validateImage = doesImageExist; this._path = path; this._isBuiltin = isBuiltin; this._sharedTagRenderings = sharedTagRenderings; - this._validateImage = new DoesImageExist(this.knownImagePaths); } convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[], warnings: string[], information: string[] } { @@ -179,9 +179,7 @@ class ValidateTheme extends DesugaringStep { if (theme.id !== filename) { errors.push("Theme ids should be the same as the name.json, but we got id: " + theme.id + " and filename " + filename + " (" + this._path + ")") } - if (!this.knownImagePaths.has(theme.icon)) { - errors.push("The theme image " + theme.icon + " is not attributed or not saved locally") - } + this._validateImage.convertJoin(theme.icon, context + ".icon", errors, warnings, information); const dups = Utils.Dupiclates(json.layers.map(layer => layer["id"])) if (dups.length > 0) { errors.push(`The theme ${json.id} defines multiple layers with id ${dups.join(", ")}`) @@ -195,16 +193,16 @@ class ValidateTheme extends DesugaringStep { // The first key in the the title-field must be english, otherwise the title in the loading page will be the different language const targetLanguage = theme.title.SupportedLanguages()[0] - if(targetLanguage !== "en"){ + if (targetLanguage !== "en") { warnings.push(`TargetLanguage is not 'en' for public theme ${theme.id}, it is ${targetLanguage}. Move 'en' up in the title of the theme and set it as the first key`) } - + // Official, public themes must have a full english translation const checked = new ValidateLanguageCompleteness("en") .convert(theme, theme.id) errors.push(...checked.errors) - - + + } } catch (e) { @@ -221,10 +219,10 @@ class ValidateTheme extends DesugaringStep { } export class ValidateThemeAndLayers extends Fuse { - constructor(knownImagePaths: Set, path: string, isBuiltin: boolean, sharedTagRenderings: Map) { + constructor(doesImageExist: DoesImageExist, path: string, isBuiltin: boolean, sharedTagRenderings: Map) { super("Validates a theme and the contained layers", - new ValidateTheme(knownImagePaths, path, isBuiltin, sharedTagRenderings), - new On("layers", new Each(new ValidateLayer(undefined, false, knownImagePaths))) + new ValidateTheme(doesImageExist, path, isBuiltin, sharedTagRenderings), + new On("layers", new Each(new ValidateLayer(undefined, false, doesImageExist))) ); } } @@ -383,7 +381,7 @@ export class DetectShadowedMappings extends DesugaringStep { - private knownImagePaths: Set; - constructor(knownImagePaths: Set) { + private readonly _doesImageExist: DoesImageExist; + + constructor(doesImageExist: DoesImageExist) { super("Checks that 'then'clauses in mappings don't have images, but use 'icon' instead", [], "DetectMappingsWithImages"); - this.knownImagePaths = knownImagePaths; + this._doesImageExist = doesImageExist; } /** @@ -441,9 +440,9 @@ export class DetectMappingsWithImages extends DesugaringStep msg.indexOf("./assets/layers/bike_parking/staple.svg") >= 0) // => true */ convert(json: TagRenderingConfigJson, context: string): { result: TagRenderingConfigJson; errors?: string[]; warnings?: string[], information?: string[] } { - const errors = [] - const warnings = [] - const information = [] + const errors: string[] = [] + const warnings: string[] = [] + const information: string[] = [] if (json.mappings === undefined || json.mappings.length === 0) { return {result: json} } @@ -461,15 +460,10 @@ export class DetectMappingsWithImages extends DesugaringStep i); - - const ctx = context === undefined ? "" : ` in a layer defined in the theme ${context}` - errors.push(`Image with path ${image} not found or not attributed; it is used in ${json.id}${ctx}.\n Did you mean one of ${closeNames.slice(0, 3).join(", ")}`) - } + this._doesImageExist.convertJoin(image, ctx, errors, warnings, information); + } - + } } else if (ignore) { warnings.push(`${ctx}: unused '${ignoreToken}' - please remove this`) @@ -486,10 +480,10 @@ export class DetectMappingsWithImages extends DesugaringStep { - constructor(layerConfig?: LayerConfigJson, knownImagePaths?: Set) { + constructor(layerConfig?: LayerConfigJson, doesImageExist?: DoesImageExist) { super("Various validation on tagRenderingConfigs", new DetectShadowedMappings(layerConfig), - new DetectMappingsWithImages(knownImagePaths) + new DetectMappingsWithImages(doesImageExist) ); } } @@ -501,13 +495,13 @@ export class ValidateLayer extends DesugaringStep { */ private readonly _path?: string; private readonly _isBuiltin: boolean; - private knownImagePaths: Set | undefined; + private readonly _doesImageExist: DoesImageExist; - constructor(path: string, isBuiltin: boolean, knownImagePaths: Set) { + constructor(path: string, isBuiltin: boolean, doesImageExist: DoesImageExist) { super("Doesn't change anything, but emits warnings and errors", [], "ValidateLayer"); this._path = path; this._isBuiltin = isBuiltin; - this.knownImagePaths = knownImagePaths + this._doesImageExist = doesImageExist } convert(json: LayerConfigJson, context: string): { result: LayerConfigJson; errors: string[]; warnings?: string[], information?: string[] } { @@ -595,7 +589,7 @@ export class ValidateLayer extends DesugaringStep { } } if (json.tagRenderings !== undefined) { - const r = new On("tagRenderings", new Each(new ValidateTagRenderings(json, this.knownImagePaths))).convert(json, context) + const r = new On("tagRenderings", new Each(new ValidateTagRenderings(json, this._doesImageExist))).convert(json, context) warnings.push(...(r.warnings ?? [])) errors.push(...(r.errors ?? [])) information.push(...(r.information ?? [])) diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index 9a8d762e8..866155db8 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -83,10 +83,10 @@ class LayerOverviewUtils { writeFileSync(`./assets/generated/layers/${layer.id}.json`, JSON.stringify(layer, null, " "), "UTF8"); } - getSharedTagRenderings(knownImagePaths: Set): Map { + getSharedTagRenderings(doesImageExist: DoesImageExist): Map { const dict = new Map(); - const validator = new ValidateTagRenderings(undefined, knownImagePaths); + const validator = new ValidateTagRenderings(undefined, doesImageExist); for (const key in questions["default"]) { if (key === "id") { continue @@ -153,15 +153,13 @@ class LayerOverviewUtils { main(_: string[]) { - DoesImageExist.doesPathExist = (path) => existsSync(path) - const licensePaths = new Set() for (const i in licenses) { licensePaths.add(licenses[i].path) } - - const sharedLayers = this.buildLayerIndex(licensePaths); - const sharedThemes = this.buildThemeIndex(licensePaths, sharedLayers) + const doesImageExist = new DoesImageExist(licensePaths, existsSync) + const sharedLayers = this.buildLayerIndex(doesImageExist); + const sharedThemes = this.buildThemeIndex(doesImageExist, sharedLayers) writeFileSync("./assets/generated/known_layers_and_themes.json", JSON.stringify({ "layers": Array.from(sharedLayers.values()), @@ -191,12 +189,12 @@ class LayerOverviewUtils { console.log(green("All done!")) } - private buildLayerIndex(knownImagePaths: Set): Map { + private buildLayerIndex(doesImageExist: DoesImageExist): Map { // First, we expand and validate all builtin layers. These are written to assets/generated/layers // At the same time, an index of available layers is built. console.log(" ---------- VALIDATING BUILTIN LAYERS ---------") - const sharedTagRenderings = this.getSharedTagRenderings(knownImagePaths); + const sharedTagRenderings = this.getSharedTagRenderings(doesImageExist); const layerFiles = ScriptUtils.getLayerFiles(); const sharedLayers = new Map() const state: DesugaringContext = { @@ -212,7 +210,7 @@ class LayerOverviewUtils { fixed.source.osmTags = {"and": [fixed.source.osmTags]} } - const validator = new ValidateLayer(sharedLayerJson.path, true, knownImagePaths); + const validator = new ValidateLayer(sharedLayerJson.path, true, doesImageExist); validator.convertStrict(fixed, context) if (sharedLayers.has(fixed.id)) { @@ -252,7 +250,7 @@ class LayerOverviewUtils { return publicLayerIds } - private buildThemeIndex(knownImagePaths: Set, sharedLayers: Map): Map { + private buildThemeIndex(doesImageExist: DoesImageExist, sharedLayers: Map): Map { console.log(" ---------- VALIDATING BUILTIN THEMES ---------") const themeFiles = ScriptUtils.getThemeFiles(); const fixed = new Map(); @@ -261,7 +259,7 @@ class LayerOverviewUtils { const convertState: DesugaringContext = { sharedLayers, - tagRenderings: this.getSharedTagRenderings(knownImagePaths), + tagRenderings: this.getSharedTagRenderings(doesImageExist), publicLayers } for (const themeInfo of themeFiles) { @@ -273,10 +271,7 @@ class LayerOverviewUtils { themeFile = new PrepareTheme(convertState).convertStrict(themeFile, themePath) - if (knownImagePaths === undefined) { - throw "Could not load known images/licenses" - } - new ValidateThemeAndLayers(knownImagePaths, themePath, true, convertState.tagRenderings) + new ValidateThemeAndLayers(doesImageExist, themePath, true, convertState.tagRenderings) .convertStrict(themeFile, themePath) this.writeTheme(themeFile) From 608db0a173c58b8f8c4bc6414fdadc5c3a5548ff Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 6 Jul 2022 13:33:24 +0200 Subject: [PATCH 27/71] Update Development_deployment.md --- Docs/Development_deployment.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Docs/Development_deployment.md b/Docs/Development_deployment.md index 09313fd7d..64b3c9563 100644 --- a/Docs/Development_deployment.md +++ b/Docs/Development_deployment.md @@ -73,6 +73,11 @@ To use the WSL in Visual Studio Code: To use WSL without Visual Studio Code you can replace steps 7 and 8 by opening up a WSL terminal +On mac +------ + +Install the `Command line tools for XCode which you can find [here](https://developer.apple.com/download/all/). You might need an apple dev account for this. + Automatic deployment -------------------- From eca14c5d08c13d63fca20c1c439aa02a13dfd728 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 6 Jul 2022 14:00:39 +0200 Subject: [PATCH 28/71] Fix tests --- Models/ThemeConfig/Conversion/Validation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Models/ThemeConfig/Conversion/Validation.ts b/Models/ThemeConfig/Conversion/Validation.ts index 103b8efd3..36da25536 100644 --- a/Models/ThemeConfig/Conversion/Validation.ts +++ b/Models/ThemeConfig/Conversion/Validation.ts @@ -420,7 +420,7 @@ export class DetectMappingsWithImages extends DesugaringStep()).convert({ + * const r = new DetectMappingsWithImages(new DoesImageExist(new Set())).convert({ * "mappings": [ * { * "if": "bicycle_parking=stands", From 063d7e463755e3c1c136e0de951c26e9fb99cda1 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 6 Jul 2022 14:11:07 +0200 Subject: [PATCH 29/71] Fix tests --- test/UI/Popup/TagRenderingQuestion.spec.ts | 2 ++ test/scripts/GenerateCache.spec.ts | 16 ++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/test/UI/Popup/TagRenderingQuestion.spec.ts b/test/UI/Popup/TagRenderingQuestion.spec.ts index c07048b49..c4bdd453f 100644 --- a/test/UI/Popup/TagRenderingQuestion.spec.ts +++ b/test/UI/Popup/TagRenderingQuestion.spec.ts @@ -4,6 +4,7 @@ import TagRenderingConfig from "../../../Models/ThemeConfig/TagRenderingConfig"; import TagRenderingQuestion from "../../../UI/Popup/TagRenderingQuestion"; import {UIEventSource} from "../../../Logic/UIEventSource"; import { expect } from 'chai'; +import Locale from "../../../UI/i18n/Locale"; describe("TagRenderingQuestion", () => { @@ -27,6 +28,7 @@ describe("TagRenderingQuestion", () => { it("should have a freeform text field with a type explanation", () => { + Locale.language.setData("en") const configJson = { id: "test-tag-rendering", question: "Question?", diff --git a/test/scripts/GenerateCache.spec.ts b/test/scripts/GenerateCache.spec.ts index ea8acb4e5..0031079b3 100644 --- a/test/scripts/GenerateCache.spec.ts +++ b/test/scripts/GenerateCache.spec.ts @@ -28,23 +28,27 @@ function initDownloads(query: string){ describe("GenerateCache", () => { it("should generate a cached file for the Natuurpunt-theme", async () => { - if (existsSync("/tmp/np-cache")) { - ScriptUtils.readDirRecSync("/tmp/np-cache").forEach(p => unlinkSync(p)) - rmdirSync("/tmp/np-cache") + // We use /var/tmp instead of /tmp, as more OS's (such as MAC) have this + if(!existsSync("/var/tmp")){ + console.log("Not executing caching test: no temp directory found") } - mkdirSync("/tmp/np-cache") + if (existsSync("/var/tmp/np-cache")) { + ScriptUtils.readDirRecSync("/var/tmp/np-cache").forEach(p => unlinkSync(p)) + rmdirSync("/var/tmp/np-cache") + } + mkdirSync("/var/tmp/np-cache") initDownloads( "(nwr%5B%22amenity%22%3D%22toilets%22%5D%3Bnwr%5B%22amenity%22%3D%22parking%22%5D%3Bnwr%5B%22amenity%22%3D%22bench%22%5D%3Bnwr%5B%22id%22%3D%22location_track%22%5D%3Bnwr%5B%22id%22%3D%22gps%22%5D%3Bnwr%5B%22information%22%3D%22board%22%5D%3Bnwr%5B%22leisure%22%3D%22picnic_table%22%5D%3Bnwr%5B%22man_made%22%3D%22watermill%22%5D%3Bnwr%5B%22user%3Ahome%22%3D%22yes%22%5D%3Bnwr%5B%22user%3Alocation%22%3D%22yes%22%5D%3Bnwr%5B%22leisure%22%3D%22nature_reserve%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22boundary%22%3D%22protected_area%22%5D%5B%22protect_class%22!%3D%2298%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22information%22%3D%22visitor_centre%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22information%22%3D%22office%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22route%22~%22%5E.*foot.*%24%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22route%22~%22%5E.*hiking.*%24%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22route%22~%22%5E.*bycicle.*%24%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22route%22~%22%5E.*horse.*%24%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22leisure%22%3D%22bird_hide%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22amenity%22%3D%22drinking_water%22%5D%5B%22access%22!%3D%22permissive%22%5D%5B%22access%22!%3D%22private%22%5D%3B)%3Bout%20body%3Bout%20meta%3B%3E%3Bout%20skel%20qt%3B" ); await main([ "natuurpunt", "12", - "/tmp/np-cache", + "/var/tmp/np-cache", "51.15423567022531", "3.250579833984375", "51.162821593316934", "3.262810707092285", "--generate-point-overview", "nature_reserve,visitor_information_centre" ]) await ScriptUtils.sleep(500) - const birdhides = JSON.parse(readFileSync("/tmp/np-cache/natuurpunt_birdhide_12_2085_1368.geojson", "UTF8")) + const birdhides = JSON.parse(readFileSync("/var/tmp/np-cache/natuurpunt_birdhide_12_2085_1368.geojson", "UTF8")) expect(birdhides.features.length).deep.equal(5) expect(birdhides.features.some(f => f.properties.id === "node/5158056232"), "Didn't find birdhide node/5158056232 ").true From 9e3f89b874888437ea985e2402b9afc62262fa81 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Wed, 6 Jul 2022 12:58:28 +0000 Subject: [PATCH 30/71] Use gitignore for ignoring files in search --- .vscode/settings.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index ff6d1b68d..25b1f4dbe 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -16,5 +16,6 @@ } ], "editor.tabSize": 2, - "files.autoSave": "onFocusChange" -} \ No newline at end of file + "files.autoSave": "onFocusChange", + "search.useIgnoreFiles": true + } \ No newline at end of file From 71006859499449a94a211d7b517c705a57d10145 Mon Sep 17 00:00:00 2001 From: Andrews Leruth Date: Wed, 6 Jul 2022 15:54:21 +0200 Subject: [PATCH 31/71] added pharmacy theme and layer --- assets/layers/pharmacy/license_info.json | 12 +++ assets/layers/pharmacy/pharmacy.json | 99 +++++++++++++++++ assets/layers/pharmacy/pharmacy.svg | 6 ++ assets/pharmacy/license_info.json | 12 +++ assets/pharmacy/pharmacy.json | 102 ++++++++++++++++++ assets/pharmacy/pharmacy.svg | 6 ++ .../mapcomplete-changes.json | 4 + assets/themes/pharmacies/pharmacies.json | 20 ++++ 8 files changed, 261 insertions(+) create mode 100644 assets/layers/pharmacy/license_info.json create mode 100644 assets/layers/pharmacy/pharmacy.json create mode 100644 assets/layers/pharmacy/pharmacy.svg create mode 100644 assets/pharmacy/license_info.json create mode 100644 assets/pharmacy/pharmacy.json create mode 100644 assets/pharmacy/pharmacy.svg create mode 100644 assets/themes/pharmacies/pharmacies.json diff --git a/assets/layers/pharmacy/license_info.json b/assets/layers/pharmacy/license_info.json new file mode 100644 index 000000000..ec982334c --- /dev/null +++ b/assets/layers/pharmacy/license_info.json @@ -0,0 +1,12 @@ +[ + { + "path": "pharmacy.svg", + "license": "CC0", + "authors": [ + "OSM-carto" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Pharmacy-14.svg" + ] + } +] \ No newline at end of file diff --git a/assets/layers/pharmacy/pharmacy.json b/assets/layers/pharmacy/pharmacy.json new file mode 100644 index 000000000..d7873aaa7 --- /dev/null +++ b/assets/layers/pharmacy/pharmacy.json @@ -0,0 +1,99 @@ +{ + "id": "pharmacy", + "name": { + "en": "pharmacy" + }, + "title": { + "render": { + "en": "{name}" + } + }, + "source": { + "osmTags": { + "and": [ + "amenity=pharmacy" + ] + } + }, + "minzoom":13, + "tagRenderings": [ + "images", + "opening_hours", + "phone", + "email", + "website", + "dispensing", + { + "id": "wheelchair", + "render": { + "en": "Easily accessible for wheelchair users: {wheelchair}" + }, + "question": { + "en": "Is this pharmacy easy to access on a wheelchair?" + }, + "freeform": { + "key": "wheelchair" + }, + "mappings": [ + { + "if": "wheelchair=yes", + "then": { + "en": "Yes, this pharmacy is easy to access on a wheelchair" + } + }, + { + "if": "wheelchair=no", + "then": { + "en": "No, this pharmacy is easy to access on a wheelchair" + } + + }, + { + "if": "wheelchair=limited", + "then": { + "en": "This pharmacy has limited access for wheelchair users" + } + } + ] + }, + { + "id": "drive_through", + "render": { + "en": "Pharmacy drive through: {drive_through}" + }, + "question": { + "en": "Does this pharmacy have a drive through?" + }, + "freeform": { + "key": "drive_through" + }, + "mappings": [ + { + "if": "drive_through=yes", + "then": { + "en": "Yes, this pharmacy has a drive through" + } + }, + { + "if": "drive_through=no", + "then": { + "en": "No, this pharmacy does not have a drive through" + } + + } + ] + } + ], + "mapRendering": [ + { + "icon": { + "render": "./assets/layers/pharmacy/pharmacy.svg" + }, + "iconSize": "40,40,bottom", + "location": [ + "point", + "centroid" + ] + } + ] +} \ No newline at end of file diff --git a/assets/layers/pharmacy/pharmacy.svg b/assets/layers/pharmacy/pharmacy.svg new file mode 100644 index 000000000..fe46542ad --- /dev/null +++ b/assets/layers/pharmacy/pharmacy.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/pharmacy/license_info.json b/assets/pharmacy/license_info.json new file mode 100644 index 000000000..ec982334c --- /dev/null +++ b/assets/pharmacy/license_info.json @@ -0,0 +1,12 @@ +[ + { + "path": "pharmacy.svg", + "license": "CC0", + "authors": [ + "OSM-carto" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Pharmacy-14.svg" + ] + } +] \ No newline at end of file diff --git a/assets/pharmacy/pharmacy.json b/assets/pharmacy/pharmacy.json new file mode 100644 index 000000000..ae6e97470 --- /dev/null +++ b/assets/pharmacy/pharmacy.json @@ -0,0 +1,102 @@ +{ + "id": "pharmacies", + "name": { + "en": "pharmacies" + }, + "title": { + "render": { + "en": "{name}" + } + }, + "source": { + "osmTags": { + "and": [ + "amenity=pharmacy" + ], + "or": [ + "dispensing=yes" + ] + } + }, + "minzoom":13, + "tagRenderings": [ + "images", + "opening_hours", + "phone", + "email", + "website", + "dispensing", + { + "id": "wheelchair", + "render": { + "en": "Easily accessible for wheelchair users: {wheelchair}" + }, + "question": { + "en": "Is this pharmacy easy to access on a wheelchair?" + }, + "freeform": { + "key": "wheelchair" + }, + "mappings": [ + { + "if": "wheelchair=yes", + "then": { + "en": "Yes, this pharmacy is easy to access on a wheelchair" + } + }, + { + "if": "wheelchair=no", + "then": { + "en": "No, this pharmacy is easy to access on a wheelchair" + } + + }, + { + "if": "wheelchair=limited", + "then": { + "en": "This pharmacy has limited access for wheelchair users" + } + } + ] + }, + { + "id": "drive_through", + "render": { + "en": "Pharmacy drive through: {drive_through}" + }, + "question": { + "en": "Does this pharmacy have a drive through?" + }, + "freeform": { + "key": "drive_through" + }, + "mappings": [ + { + "if": "drive_through=yes", + "then": { + "en": "Yes, this pharmacy has a drive through" + } + }, + { + "if": "drive_through=no", + "then": { + "en": "No, this pharmacy does not have a drive through" + } + + } + ] + } + ], + "mapRendering": [ + { + "icon": { + "render": "" + }, + "iconSize": "40,40,bottom", + "location": [ + "point", + "centroid" + ] + } + ] +} \ No newline at end of file diff --git a/assets/pharmacy/pharmacy.svg b/assets/pharmacy/pharmacy.svg new file mode 100644 index 000000000..325d83789 --- /dev/null +++ b/assets/pharmacy/pharmacy.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index 8fc630f67..07f22fdba 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -259,6 +259,10 @@ "if": "theme=pets", "then": "./assets/layers/dogpark/dog-park.svg" }, + { + "if": "theme=pharmacies", + "then": "./assets/layers/pharmacy/pharmacy.svg" + }, { "if": "theme=play_forests", "then": "./assets/layers/play_forest/icon.svg" diff --git a/assets/themes/pharmacies/pharmacies.json b/assets/themes/pharmacies/pharmacies.json new file mode 100644 index 000000000..61864106a --- /dev/null +++ b/assets/themes/pharmacies/pharmacies.json @@ -0,0 +1,20 @@ +{ + "id": "pharmacies", + "title": { + "en": "pharmacies" + }, + "description": { + "en": "On this map, pharmacies are shown and can be easily added" + }, + "maintainer": "MapComplete", + "icon": "./assets/layers/pharmacy/pharmacy.svg", + "version": "0", + "startLat": 50.8465573, + "defaultBackgroundId": "CartoDB.Voyager", + "startLon": 4.351697, + "startZoom": 16, + "widenFactor": 2, + "layers": [ + "pharmacy" + ] +} \ No newline at end of file From 8c036e159f0fbf5247f925ecd884f7c43aa40a13 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 6 Jul 2022 13:58:56 +0200 Subject: [PATCH 32/71] Generate layer overview now only recompiles files that need to be recompiled --- package.json | 2 +- scripts/ScriptUtils.ts | 176 ++++++++++++++++--------------- scripts/build.sh | 2 +- scripts/generateLayerOverview.ts | 161 +++++++++++++++++++--------- 4 files changed, 204 insertions(+), 137 deletions(-) diff --git a/package.json b/package.json index 58c8dabfa..e1a66f1c3 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "generate:cache:speelplekken": "npm run generate:layeroverview && ts-node scripts/generateCache.ts speelplekken 14 ../MapComplete-data/speelplekken_cache/ 51.20 4.35 51.09 4.56", "generate:cache:natuurpunt": "npm run generate:layeroverview && ts-node scripts/generateCache.ts natuurpunt 12 ../MapComplete-data/natuurpunt_cache/ 50.40 2.1 51.54 6.4 --generate-point-overview nature_reserve,visitor_information_centre", "generate:cache:natuurpunt:mini": "ts-node scripts/generateCache.ts natuurpunt 12 ../../git/MapComplete-data/natuurpunt_cache_mini/ 51.00792239979105 4.497699737548828 51.0353492224462554 4.539070129394531 --generate-point-overview nature_reserve,visitor_information_centre", - "generate:layeroverview": "ts-node scripts/generateLayerOverview.ts --no-fail", + "generate:layeroverview": "ts-node scripts/generateLayerOverview.ts", "generate:licenses": "ts-node scripts/generateLicenseInfo.ts --no-fail", "query:licenses": "ts-node scripts/generateLicenseInfo.ts --query", "generate:report": "cd Docs/Tools && ./compileStats.sh && git commit . -m 'New statistics ands graphs' && git push", diff --git a/scripts/ScriptUtils.ts b/scripts/ScriptUtils.ts index 651ad4351..a86f3b2d4 100644 --- a/scripts/ScriptUtils.ts +++ b/scripts/ScriptUtils.ts @@ -45,13 +45,103 @@ export default class ScriptUtils { }) } - - private static async DownloadJSON(url: string, headers?: any): Promise{ + + public static erasableLog(...text) { + process.stdout.write("\r " + text.join(" ") + " \r") + } + + public static sleep(ms) { + if (ms <= 0) { + process.stdout.write("\r \r") + return; + } + return new Promise((resolve) => { + process.stdout.write("\r Sleeping for " + (ms / 1000) + "s \r") + setTimeout(resolve, 1000); + }).then(() => ScriptUtils.sleep(ms - 1000)); + } + + public static getLayerPaths(): string[] { + return ScriptUtils.readDirRecSync("./assets/layers") + .filter(path => path.indexOf(".json") > 0) + .filter(path => path.indexOf(".proto.json") < 0) + .filter(path => path.indexOf("license_info.json") < 0) + } + + public static getLayerFiles(): { parsed: LayerConfigJson, path: string }[] { + return ScriptUtils.readDirRecSync("./assets/layers") + .filter(path => path.indexOf(".json") > 0) + .filter(path => path.indexOf(".proto.json") < 0) + .filter(path => path.indexOf("license_info.json") < 0) + .map(path => { + try { + const contents = readFileSync(path, "UTF8") + if (contents === "") { + throw "The file " + path + " is empty, did you properly save?" + } + + const parsed = JSON.parse(contents); + return {parsed, path} + } catch (e) { + console.error("Could not parse file ", "./assets/layers/" + path, "due to ", e) + throw e + } + }) + } + + public static getThemePaths(): string[] { + return ScriptUtils.readDirRecSync("./assets/themes") + .filter(path => path.endsWith(".json") && !path.endsWith(".proto.json")) + .filter(path => path.indexOf("license_info.json") < 0) + } + + public static getThemeFiles(): { parsed: LayoutConfigJson, path: string }[] { + return this.getThemePaths() + .map(path => { + try { + const contents = readFileSync(path, "UTF8"); + if (contents === "") { + throw "The file " + path + " is empty, did you properly save?" + } + const parsed = JSON.parse(contents); + return {parsed: parsed, path: path} + } catch (e) { + console.error("Could not read file ", path, "due to ", e) + throw e + } + }); + } + + public static TagInfoHistogram(key: string): Promise<{ + data: { count: number, value: string, fraction: number }[] + }> { + const url = `https://taginfo.openstreetmap.org/api/4/key/values?key=${key}&filter=all&lang=en&sortname=count&sortorder=desc&page=1&rp=17&qtype=value` + return ScriptUtils.DownloadJSON(url) + } + + public static async ReadSvg(path: string): Promise { + if (!existsSync(path)) { + throw "File not found: " + path + } + const root = await xml2js.parseStringPromise(readFileSync(path, "UTF8")) + return root.svg + } + + public static async ReadSvgSync(path: string, callback: ((svg: any) => void)): Promise { + xml2js.parseString(readFileSync(path, "UTF8"), {async: false}, (err, root) => { + if (err) { + throw err + } + callback(root["svg"]); + }) + } + + private static async DownloadJSON(url: string, headers?: any): Promise { const data = await ScriptUtils.Download(url, headers); return JSON.parse(data.content) } - private static Download(url, headers?: any): Promise<{content: string}> { + private static Download(url, headers?: any): Promise<{ content: string }> { return new Promise((resolve, reject) => { try { headers = headers ?? {} @@ -83,84 +173,4 @@ export default class ScriptUtils { } - public static erasableLog(...text) { - process.stdout.write("\r " + text.join(" ") + " \r") - } - - public static sleep(ms) { - if (ms <= 0) { - process.stdout.write("\r \r") - return; - } - return new Promise((resolve) => { - process.stdout.write("\r Sleeping for " + (ms / 1000) + "s \r") - setTimeout(resolve, 1000); - }).then(() => ScriptUtils.sleep(ms - 1000)); - } - - public static getLayerFiles(): { parsed: LayerConfigJson, path: string }[] { - return ScriptUtils.readDirRecSync("./assets/layers") - .filter(path => path.indexOf(".json") > 0) - .filter(path => path.indexOf(".proto.json") < 0) - .filter(path => path.indexOf("license_info.json") < 0) - .map(path => { - try { - const contents = readFileSync(path, "UTF8") - if (contents === "") { - throw "The file " + path + " is empty, did you properly save?" - } - - const parsed = JSON.parse(contents); - return {parsed, path} - } catch (e) { - console.error("Could not parse file ", "./assets/layers/" + path, "due to ", e) - throw e - } - }) - } - - public static getThemeFiles(): { parsed: LayoutConfigJson, path: string }[] { - return ScriptUtils.readDirRecSync("./assets/themes") - .filter(path => path.endsWith(".json") && !path.endsWith(".proto.json")) - .filter(path => path.indexOf("license_info.json") < 0) - .map(path => { - try { - const contents = readFileSync(path, "UTF8"); - if (contents === "") { - throw "The file " + path + " is empty, did you properly save?" - } - const parsed = JSON.parse(contents); - return {parsed: parsed, path: path} - } catch (e) { - console.error("Could not read file ", path, "due to ", e) - throw e - } - }); - } - - - public static TagInfoHistogram(key: string): Promise<{ - data: { count: number, value: string, fraction: number }[] - }> { - const url = `https://taginfo.openstreetmap.org/api/4/key/values?key=${key}&filter=all&lang=en&sortname=count&sortorder=desc&page=1&rp=17&qtype=value` - return ScriptUtils.DownloadJSON(url) - } - - public static async ReadSvg(path: string): Promise{ - if(!existsSync(path)){ - throw "File not found: "+path - } - const root = await xml2js.parseStringPromise(readFileSync(path, "UTF8")) - return root.svg - } - - public static async ReadSvgSync(path: string, callback: ((svg: any) => void)): Promise{ - xml2js.parseString(readFileSync(path, "UTF8"),{async: false} , (err, root) => { - if(err){ - throw err - } - callback(root["svg"]); - }) - } - } diff --git a/scripts/build.sh b/scripts/build.sh index 804ce9b52..28bd83dee 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -12,7 +12,7 @@ mkdir dist/assets 2> /dev/null # This script ends every line with '&&' to chain everything. A failure will thus stop the build npm run generate:editor-layer-index npm run generate && -npm run generate:layeroverview && # generate:layeroverview has to be run twice: the personal theme won't pick up all the layers otherwise +ts-node ./scripts/generateLayeroverview --force && # generate:layeroverview has to be run twice: the personal theme won't pick up all the layers otherwise npm run test && npm run generate:layouts diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index 866155db8..99e733a20 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -1,5 +1,5 @@ import ScriptUtils from "./ScriptUtils"; -import {existsSync, mkdirSync, readFileSync, writeFileSync} from "fs"; +import {existsSync, mkdirSync, readFileSync, statSync, writeFileSync} from "fs"; import * as licenses from "../assets/generated/license_info.json" import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; @@ -26,6 +26,51 @@ import {Utils} from "../Utils"; class LayerOverviewUtils { + public static readonly layerPath = "./assets/generated/layers/" + public static readonly themePath = "./assets/generated/themes/" + + private static publicLayerIdsFrom(themefiles: LayoutConfigJson[]): Set { + const publicThemes = [].concat(...themefiles + .filter(th => !th.hideFromOverview)) + + return new Set([].concat(...publicThemes.map(th => this.extractLayerIdsFrom(th)))) + } + + private static extractLayerIdsFrom(themeFile: LayoutConfigJson, includeInlineLayers = true): string[] { + const publicLayerIds = [] + for (const publicLayer of themeFile.layers) { + if (typeof publicLayer === "string") { + publicLayerIds.push(publicLayer) + continue + } + if (publicLayer["builtin"] !== undefined) { + const bi = publicLayer["builtin"] + if (typeof bi === "string") { + publicLayerIds.push(bi) + continue + } + bi.forEach(id => publicLayerIds.push(id)) + continue + } + if (includeInlineLayers) { + publicLayerIds.push(publicLayer["id"]) + } + } + return publicLayerIds + } + + shouldBeUpdated(sourcefile: string | string[], targetfile: string): boolean { + if (!existsSync(targetfile)) { + return true; + } + const targetModified = statSync(targetfile).mtime + if (typeof sourcefile === "string") { + sourcefile = [sourcefile] + } + + return sourcefile.some(sourcefile => statSync(sourcefile).mtime > targetModified) + } + writeSmallOverview(themes: { id: string, title: any, shortDescription: any, icon: string, hideFromOverview: boolean, mustHaveLanguage: boolean, layers: (LayerConfigJson | string | { builtin })[] }[]) { const perId = new Map(); for (const theme of themes) { @@ -70,22 +115,22 @@ class LayerOverviewUtils { } writeTheme(theme: LayoutConfigJson) { - if (!existsSync("./assets/generated/themes")) { - mkdirSync("./assets/generated/themes"); + if (!existsSync(LayerOverviewUtils.themePath)) { + mkdirSync(LayerOverviewUtils.themePath); } - writeFileSync(`./assets/generated/themes/${theme.id}.json`, JSON.stringify(theme, null, " "), "UTF8"); + writeFileSync(`${LayerOverviewUtils.themePath}${theme.id}.json`, JSON.stringify(theme, null, " "), "UTF8"); } writeLayer(layer: LayerConfigJson) { - if (!existsSync("./assets/generated/layers")) { - mkdirSync("./assets/generated/layers"); + if (!existsSync(LayerOverviewUtils.layerPath)) { + mkdirSync(LayerOverviewUtils.layerPath); } - writeFileSync(`./assets/generated/layers/${layer.id}.json`, JSON.stringify(layer, null, " "), "UTF8"); + writeFileSync(`${LayerOverviewUtils.layerPath}${layer.id}.json`, JSON.stringify(layer, null, " "), "UTF8"); } getSharedTagRenderings(doesImageExist: DoesImageExist): Map { const dict = new Map(); - + const validator = new ValidateTagRenderings(undefined, doesImageExist); for (const key in questions["default"]) { if (key === "id") { @@ -94,7 +139,7 @@ class LayerOverviewUtils { questions[key].id = key; questions[key]["source"] = "shared-questions" const config = questions[key] - validator.convertStrict(config, "generate-layer-overview:tagRenderings/questions.json:"+key) + validator.convertStrict(config, "generate-layer-overview:tagRenderings/questions.json:" + key) dict.set(key, config) } for (const key in icons["default"]) { @@ -105,9 +150,9 @@ class LayerOverviewUtils { continue } icons[key].id = key; - const config = icons[key] - validator.convertStrict(config, "generate-layer-overview:tagRenderings/icons.json:"+key) - dict.set(key,config) + const config = icons[key] + validator.convertStrict(config, "generate-layer-overview:tagRenderings/icons.json:" + key) + dict.set(key, config) } dict.forEach((value, key) => { @@ -150,16 +195,18 @@ class LayerOverviewUtils { } } - - main(_: string[]) { + main(args: string[]) { + + const forceReload = args.some(a => a == "--force") const licensePaths = new Set() for (const i in licenses) { licensePaths.add(licenses[i].path) } const doesImageExist = new DoesImageExist(licensePaths, existsSync) - const sharedLayers = this.buildLayerIndex(doesImageExist); - const sharedThemes = this.buildThemeIndex(doesImageExist, sharedLayers) + const sharedLayers = this.buildLayerIndex(doesImageExist, forceReload); + const recompiledThemes : string[] = [] + const sharedThemes = this.buildThemeIndex(doesImageExist, sharedLayers, recompiledThemes, forceReload) writeFileSync("./assets/generated/known_layers_and_themes.json", JSON.stringify({ "layers": Array.from(sharedLayers.values()), @@ -169,7 +216,7 @@ class LayerOverviewUtils { writeFileSync("./assets/generated/known_layers.json", JSON.stringify({layers: Array.from(sharedLayers.values())})) - { + if(recompiledThemes.length > 0) { // mapcomplete-changes shows an icon for each corresponding mapcomplete-theme const iconsPerTheme = Array.from(sharedThemes.values()).map(th => ({ @@ -189,28 +236,42 @@ class LayerOverviewUtils { console.log(green("All done!")) } - private buildLayerIndex(doesImageExist: DoesImageExist): Map { + private buildLayerIndex(doesImageExist: DoesImageExist, forceReload: boolean): Map { // First, we expand and validate all builtin layers. These are written to assets/generated/layers // At the same time, an index of available layers is built. console.log(" ---------- VALIDATING BUILTIN LAYERS ---------") const sharedTagRenderings = this.getSharedTagRenderings(doesImageExist); - const layerFiles = ScriptUtils.getLayerFiles(); const sharedLayers = new Map() const state: DesugaringContext = { tagRenderings: sharedTagRenderings, sharedLayers } const prepLayer = new PrepareLayer(state); - for (const sharedLayerJson of layerFiles) { - const context = "While building builtin layer " + sharedLayerJson.path - const fixed = prepLayer.convertStrict(sharedLayerJson.parsed, context) + const skippedLayers: string[] = [] + const recompiledLayers: string[] = [] + for (const sharedLayerPath of ScriptUtils.getLayerPaths()) { + + { + const targetPath = LayerOverviewUtils.layerPath + sharedLayerPath.substring(sharedLayerPath.lastIndexOf("/")) + if (!forceReload && !this.shouldBeUpdated(sharedLayerPath, targetPath)) { + const sharedLayer = JSON.parse(readFileSync(targetPath, "utf8")) + sharedLayers.set(sharedLayer.id, sharedLayer) + skippedLayers.push(sharedLayer.id) + continue; + } - if(fixed.source.osmTags["and"] === undefined){ + } + + const parsed = JSON.parse(readFileSync(sharedLayerPath, "utf8")) + const context = "While building builtin layer " + sharedLayerPath + const fixed = prepLayer.convertStrict(parsed, context) + + if (fixed.source.osmTags["and"] === undefined) { fixed.source.osmTags = {"and": [fixed.source.osmTags]} } - - const validator = new ValidateLayer(sharedLayerJson.path, true, doesImageExist); + + const validator = new ValidateLayer(sharedLayerPath, true, doesImageExist); validator.convertStrict(fixed, context) if (sharedLayers.has(fixed.id)) { @@ -218,39 +279,18 @@ class LayerOverviewUtils { } sharedLayers.set(fixed.id, fixed) + recompiledLayers.push(fixed.id) this.writeLayer(fixed) } + + console.log("Recompiled layers " + recompiledLayers.join(", ") + " and skipped " + skippedLayers.length + " layers") + return sharedLayers; } - private static publicLayerIdsFrom(themefiles: LayoutConfigJson[]): Set { - const publicLayers = [].concat(...themefiles - .filter(th => !th.hideFromOverview) - .map(th => th.layers)) - - const publicLayerIds = new Set() - for (const publicLayer of publicLayers) { - if (typeof publicLayer === "string") { - publicLayerIds.add(publicLayer) - continue - } - if (publicLayer["builtin"] !== undefined) { - const bi = publicLayer["builtin"] - if (typeof bi === "string") { - publicLayerIds.add(bi) - continue - } - bi.forEach(id => publicLayerIds.add(id)) - continue - } - publicLayerIds.add(publicLayer.id) - } - return publicLayerIds - } - - private buildThemeIndex(doesImageExist: DoesImageExist, sharedLayers: Map): Map { + private buildThemeIndex(doesImageExist: DoesImageExist, sharedLayers: Map, recompiledThemes: string[], forceReload: boolean): Map { console.log(" ---------- VALIDATING BUILTIN THEMES ---------") const themeFiles = ScriptUtils.getThemeFiles(); const fixed = new Map(); @@ -262,9 +302,23 @@ class LayerOverviewUtils { tagRenderings: this.getSharedTagRenderings(doesImageExist), publicLayers } + const skippedThemes: string[] = [] for (const themeInfo of themeFiles) { + + const themePath = themeInfo.path; let themeFile = themeInfo.parsed - const themePath = themeInfo.path + + { + const targetPath = LayerOverviewUtils.themePath + "/" + themePath.substring(themePath.lastIndexOf("/")) + const usedLayers = Array.from(LayerOverviewUtils.extractLayerIdsFrom(themeFile, false)) + .map(id => LayerOverviewUtils.layerPath + id + ".json") + if (!forceReload && !this.shouldBeUpdated([themePath, ...usedLayers], targetPath)) { + fixed.set(themeFile.id, themeFile) + skippedThemes.push(themeFile.id) + continue; + } + recompiledThemes.push(themeFile.id) + } new PrevalidateTheme().convertStrict(themeFile, themePath) try { @@ -290,6 +344,9 @@ class LayerOverviewUtils { mustHaveLanguage: t.mustHaveLanguage?.length > 0, } })); + + console.log("Recompiled themes " + recompiledThemes.join(", ") + " and skipped " + skippedThemes.length + " themes") + return fixed; } From 377e7838ec6c1b825b9f8791cc10591d87bd3398 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 6 Jul 2022 16:07:24 +0200 Subject: [PATCH 33/71] Add equestrian icon, fix #920 --- assets/layers/sport_pitch/equestrian.svg | 7 +++++++ assets/layers/sport_pitch/license_info.json | 11 +++++++++++ assets/layers/sport_pitch/sport_pitch.json | 3 ++- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 assets/layers/sport_pitch/equestrian.svg diff --git a/assets/layers/sport_pitch/equestrian.svg b/assets/layers/sport_pitch/equestrian.svg new file mode 100644 index 000000000..2f6efdee0 --- /dev/null +++ b/assets/layers/sport_pitch/equestrian.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/layers/sport_pitch/license_info.json b/assets/layers/sport_pitch/license_info.json index 17c0c3c83..a8bdf0d2d 100644 --- a/assets/layers/sport_pitch/license_info.json +++ b/assets/layers/sport_pitch/license_info.json @@ -43,6 +43,17 @@ "https://www.provincieantwerpen.be/" ] }, + { + "path": "equestrian.svg", + "license": "CC0", + "authors": [ + "Hufkratzer" + ], + "sources": [ + "https://github.com/pietervdvn/MapComplete/issues/920", + " https://gist.githubusercontent.com/Hufkratzer/81abcfe749ce8f99257e38f58633dd72/raw/8fa614a983807724f7110793b57344cc70dc34bc/equestrian.svg" + ] + }, { "path": "lock.svg", "license": "CC-BY-SA 4.0", diff --git a/assets/layers/sport_pitch/sport_pitch.json b/assets/layers/sport_pitch/sport_pitch.json index c41991b8c..5ed7edc72 100644 --- a/assets/layers/sport_pitch/sport_pitch.json +++ b/assets/layers/sport_pitch/sport_pitch.json @@ -506,7 +506,8 @@ "sport=soccer", "sport=table_tennis", "sport=tennis", - "sport=volleyball" + "sport=volleyball", + "sport=equestrian" ] }, "then": "circle:white;./assets/layers/sport_pitch/{sport}.svg" From 9f41e719f25ee4e657558a17390468319b04e632 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 6 Jul 2022 16:35:14 +0200 Subject: [PATCH 34/71] Fix build --- package.json | 2 +- scripts/build.sh | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index e1a66f1c3..1d97a1908 100644 --- a/package.json +++ b/package.json @@ -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", + "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/*", "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", diff --git a/scripts/build.sh b/scripts/build.sh index 28bd83dee..c194cfe9d 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -10,9 +10,10 @@ mkdir dist 2> /dev/null mkdir dist/assets 2> /dev/null # This script ends every line with '&&' to chain everything. A failure will thus stop the build -npm run generate:editor-layer-index +npm run generate:editor-layer-index && +npm run reset:layeroverview npm run generate && -ts-node ./scripts/generateLayeroverview --force && # generate:layeroverview has to be run twice: the personal theme won't pick up all the layers otherwise +npm run generate:layeroverview --force && # generate:layeroverview has to be run twice: the personal theme won't pick up all the layers otherwise; first time happens in 'npm run generate' npm run test && npm run generate:layouts From a08a49abb2c77092dee157764b6b51378f64a882 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 6 Jul 2022 17:11:17 +0200 Subject: [PATCH 35/71] Fix partial compilation, fix tests --- Models/ThemeConfig/LayerConfig.ts | 53 +++++++++++++++--------------- scripts/generateLayerOverview.ts | 2 +- test/scripts/GenerateCache.spec.ts | 15 +++++---- 3 files changed, 36 insertions(+), 34 deletions(-) diff --git a/Models/ThemeConfig/LayerConfig.ts b/Models/ThemeConfig/LayerConfig.ts index 635691fcd..4779f5ebc 100644 --- a/Models/ThemeConfig/LayerConfig.ts +++ b/Models/ThemeConfig/LayerConfig.ts @@ -31,6 +31,7 @@ import {FixedUiElement} from "../../UI/Base/FixedUiElement"; export default class LayerConfig extends WithContextLoader { + public static readonly syncSelectionAllowed = ["no", "local", "theme-only", "global"] as const; public readonly id: string; public readonly name: Translation; public readonly description: Translation; @@ -44,10 +45,8 @@ export default class LayerConfig extends WithContextLoader { public readonly maxzoom: number; public readonly title?: TagRenderingConfig; public readonly titleIcons: TagRenderingConfig[]; - public readonly mapRendering: PointRenderingConfig[] public readonly lineRendering: LineRenderingConfig[] - public readonly units: Unit[]; public readonly deletion: DeleteConfig | null; public readonly allowMove: MoveConfig | null @@ -57,15 +56,11 @@ export default class LayerConfig extends WithContextLoader { * In seconds */ public readonly maxAgeOfCache: number - public readonly presets: PresetConfig[]; - public readonly tagRenderings: TagRenderingConfig[]; public readonly filters: FilterConfig[]; public readonly filterIsSameAs: string; public readonly forceLoad: boolean; - - public static readonly syncSelectionAllowed = ["no" , "local" , "theme-only" , "global"] as const; public readonly syncSelection: (typeof LayerConfig.syncSelectionAllowed)[number] // this is a trick to conver a constant array of strings into a type union of these values constructor( @@ -74,18 +69,24 @@ export default class LayerConfig extends WithContextLoader { official: boolean = true ) { context = context + "." + json.id; - const translationContext = "layers:"+json.id + const translationContext = "layers:" + json.id super(json, context) this.id = json.id; + if (typeof json === "string") { + throw `Not a valid layer: the layerConfig is a string. 'npm run generate:layeroverview' might be needed (at ${context})` + } + + if (json.id === undefined) { - throw "Not a valid layer: id is undefined: " + JSON.stringify(json) + throw `Not a valid layer: id is undefined: ${JSON.stringify(json)} (At ${context})` } if (json.source === undefined) { throw "Layer " + this.id + " does not define a source section (" + context + ")" } + if (json.source.osmTags === undefined) { throw "Layer " + this.id + " does not define a osmTags in the source section - these should always be present, even for geojson layers (" + context + ")" } @@ -98,8 +99,8 @@ export default class LayerConfig extends WithContextLoader { } this.maxAgeOfCache = json.source.maxCacheAge ?? 24 * 60 * 60 * 30 - if(json.syncSelection !== undefined && LayerConfig.syncSelectionAllowed.indexOf(json.syncSelection) < 0){ - throw context+ " Invalid sync-selection: must be one of "+LayerConfig.syncSelectionAllowed.map(v => `'${v}'`).join(", ")+" but got '"+json.syncSelection+"'" + if (json.syncSelection !== undefined && LayerConfig.syncSelectionAllowed.indexOf(json.syncSelection) < 0) { + throw context + " Invalid sync-selection: must be one of " + LayerConfig.syncSelectionAllowed.map(v => `'${v}'`).join(", ") + " but got '" + json.syncSelection + "'" } this.syncSelection = json.syncSelection ?? "no"; const osmTags = TagUtils.Tag( @@ -107,10 +108,10 @@ export default class LayerConfig extends WithContextLoader { context + "source.osmTags" ); - if(Constants.priviliged_layers.indexOf(this.id) < 0 && osmTags.isNegative()){ - throw context + "The source states tags which give a very wide selection: it only uses negative expressions, which will result in too much and unexpected data. Add at least one required tag. The tags are:\n\t"+osmTags.asHumanString(false, false, {}); + if (Constants.priviliged_layers.indexOf(this.id) < 0 && osmTags.isNegative()) { + throw context + "The source states tags which give a very wide selection: it only uses negative expressions, which will result in too much and unexpected data. Add at least one required tag. The tags are:\n\t" + osmTags.asHumanString(false, false, {}); } - + if (json.source["geoJsonSource"] !== undefined) { throw context + "Use 'geoJson' instead of 'geoJsonSource'"; } @@ -118,7 +119,7 @@ export default class LayerConfig extends WithContextLoader { if (json.source["geojson"] !== undefined) { throw context + "Use 'geoJson' instead of 'geojson' (the J is a capital letter)"; } - + this.source = new SourceConfig( { @@ -138,8 +139,8 @@ export default class LayerConfig extends WithContextLoader { this.allowSplit = json.allowSplit ?? false; this.name = Translations.T(json.name, translationContext + ".name"); - if(json.units!==undefined && !Array.isArray(json.units)){ - throw "At "+context+".units: the 'units'-section should be a list; you probably have an object there" + if (json.units !== undefined && !Array.isArray(json.units)) { + throw "At " + context + ".units: the 'units'-section should be a list; you probably have an object there" } this.units = (json.units ?? []).map(((unitJson, i) => Unit.fromJson(unitJson, `${context}.unit[${i}]`))) @@ -167,8 +168,8 @@ export default class LayerConfig extends WithContextLoader { const index = kv.indexOf("="); let key = kv.substring(0, index).trim(); const r = "[a-z_][a-z0-9:]*" - if(key.match(r) === null){ - throw "At "+context+" invalid key for calculated tag: "+key+"; it should match "+r + if (key.match(r) === null) { + throw "At " + context + " invalid key for calculated tag: " + key + "; it should match " + r } const isStrict = key.endsWith(':') if (isStrict) { @@ -343,14 +344,14 @@ export default class LayerConfig extends WithContextLoader { } public GenerateDocumentation(usedInThemes: string[], layerIsNeededBy?: Map, dependencies: { - context?: string; - reason: string; - neededLayer: string; - }[] = [] - , addedByDefault = false, canBeIncluded = true): BaseUIElement { + context?: string; + reason: string; + neededLayer: string; + }[] = [] + , addedByDefault = false, canBeIncluded = true): BaseUIElement { const extraProps = [] - - extraProps.push("This layer is shown at zoomlevel **"+this.minzoom+"** and higher") + + extraProps.push("This layer is shown at zoomlevel **" + this.minzoom + "** and higher") if (canBeIncluded) { if (addedByDefault) { @@ -440,7 +441,7 @@ export default class LayerConfig extends WithContextLoader { let overpassLink: BaseUIElement = undefined; if (Constants.priviliged_layers.indexOf(this.id) < 0) { try { - overpassLink = new Link("Execute on overpass", Overpass.AsOverpassTurboLink( new And(neededTags).optimize())) + overpassLink = new Link("Execute on overpass", Overpass.AsOverpassTurboLink(new And(neededTags).optimize())) } catch (e) { console.error("Could not generate overpasslink for " + this.id) } diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index 99e733a20..0a5a43d44 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -313,7 +313,7 @@ class LayerOverviewUtils { const usedLayers = Array.from(LayerOverviewUtils.extractLayerIdsFrom(themeFile, false)) .map(id => LayerOverviewUtils.layerPath + id + ".json") if (!forceReload && !this.shouldBeUpdated([themePath, ...usedLayers], targetPath)) { - fixed.set(themeFile.id, themeFile) + fixed.set(themeFile.id, JSON.parse(readFileSync(LayerOverviewUtils.themePath+themeFile.id+".json", 'utf8'))) skippedThemes.push(themeFile.id) continue; } diff --git a/test/scripts/GenerateCache.spec.ts b/test/scripts/GenerateCache.spec.ts index 0031079b3..a57e598b9 100644 --- a/test/scripts/GenerateCache.spec.ts +++ b/test/scripts/GenerateCache.spec.ts @@ -29,26 +29,27 @@ describe("GenerateCache", () => { it("should generate a cached file for the Natuurpunt-theme", async () => { // We use /var/tmp instead of /tmp, as more OS's (such as MAC) have this - if(!existsSync("/var/tmp")){ + const dir = "/var/tmp/" + if(!existsSync(dir)){ console.log("Not executing caching test: no temp directory found") } - if (existsSync("/var/tmp/np-cache")) { - ScriptUtils.readDirRecSync("/var/tmp/np-cache").forEach(p => unlinkSync(p)) - rmdirSync("/var/tmp/np-cache") + if (existsSync(dir+"/np-cache")) { + ScriptUtils.readDirRecSync(dir+"np-cache").forEach(p => unlinkSync(p)) + rmdirSync(dir+"np-cache") } - mkdirSync("/var/tmp/np-cache") + mkdirSync(dir+"np-cache") initDownloads( "(nwr%5B%22amenity%22%3D%22toilets%22%5D%3Bnwr%5B%22amenity%22%3D%22parking%22%5D%3Bnwr%5B%22amenity%22%3D%22bench%22%5D%3Bnwr%5B%22id%22%3D%22location_track%22%5D%3Bnwr%5B%22id%22%3D%22gps%22%5D%3Bnwr%5B%22information%22%3D%22board%22%5D%3Bnwr%5B%22leisure%22%3D%22picnic_table%22%5D%3Bnwr%5B%22man_made%22%3D%22watermill%22%5D%3Bnwr%5B%22user%3Ahome%22%3D%22yes%22%5D%3Bnwr%5B%22user%3Alocation%22%3D%22yes%22%5D%3Bnwr%5B%22leisure%22%3D%22nature_reserve%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22boundary%22%3D%22protected_area%22%5D%5B%22protect_class%22!%3D%2298%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22information%22%3D%22visitor_centre%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22information%22%3D%22office%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22route%22~%22%5E.*foot.*%24%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22route%22~%22%5E.*hiking.*%24%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22route%22~%22%5E.*bycicle.*%24%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22route%22~%22%5E.*horse.*%24%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22leisure%22%3D%22bird_hide%22%5D%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%3Bnwr%5B%22amenity%22%3D%22drinking_water%22%5D%5B%22access%22!%3D%22permissive%22%5D%5B%22access%22!%3D%22private%22%5D%3B)%3Bout%20body%3Bout%20meta%3B%3E%3Bout%20skel%20qt%3B" ); await main([ "natuurpunt", "12", - "/var/tmp/np-cache", + dir+"np-cache", "51.15423567022531", "3.250579833984375", "51.162821593316934", "3.262810707092285", "--generate-point-overview", "nature_reserve,visitor_information_centre" ]) await ScriptUtils.sleep(500) - const birdhides = JSON.parse(readFileSync("/var/tmp/np-cache/natuurpunt_birdhide_12_2085_1368.geojson", "UTF8")) + const birdhides = JSON.parse(readFileSync(dir+"np-cache/natuurpunt_birdhide_12_2085_1368.geojson", "UTF8")) expect(birdhides.features.length).deep.equal(5) expect(birdhides.features.some(f => f.properties.id === "node/5158056232"), "Didn't find birdhide node/5158056232 ").true From 311da2a9b3a673ee4022341c20b2be3f3c65501b Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 6 Jul 2022 17:25:29 +0200 Subject: [PATCH 36/71] Fix faulty translation on delete-mappings --- assets/layers/food/food.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/assets/layers/food/food.json b/assets/layers/food/food.json index ef7cfa9bd..7289dfe15 100644 --- a/assets/layers/food/food.json +++ b/assets/layers/food/food.json @@ -814,10 +814,16 @@ "deletion": { "nonDeleteMappings": [ { - "if": "amenity=cafe", + "if": "amenity=pub", "then": { "en": "This is actually a pub" } + }, + { + "if": "amenity=cafe", + "then": { + "en": "This is actually a cafe" + } } ], "softDeletionTags": { From 49d1dbc2b1bf1a4803c8005e204bd46c2fdbe80a Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Wed, 6 Jul 2022 07:37:34 +0000 Subject: [PATCH 37/71] Translated using Weblate (Dutch) Currently translated at 96.6% (1914 of 1981 strings) Translation: MapComplete/Layer translations Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layers/nl/ --- langs/layers/nl.json | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 96d2abc4f..ed2c7303e 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -248,7 +248,7 @@ } }, "bench": { - "description": "Deze laag toont zitbanken en enkele vragen over deze zitbanken", + "description": "Een zitbank is een houten, metalen, stenen, … oppervlak waar een mens kan zitten. Deze laag toont ze en stelt er enkele vragen over.", "name": "Zitbanken", "presets": { "0": { @@ -2455,6 +2455,9 @@ }, "question": "Wat is de naam van dit Klimgelegenheid?", "render": "{name}" + }, + "Contained_climbing_routes": { + "render": "

    Bevat {_contained_climbing_routes_count} routes

      {_contained_climbing_routes}
    " } }, "title": { @@ -2548,7 +2551,8 @@ "2": { "then": "Klimmen is hier niet mogelijk" } - } + }, + "question": "Is klimmen hier mogelijk?" } }, "title": { @@ -3541,6 +3545,20 @@ "question": "Heeft een halal menu" } } + }, + "4": { + "options": { + "0": { + "question": "Accepteert cash" + } + } + }, + "5": { + "options": { + "0": { + "question": "Accepteert betaalkaarten" + } + } } }, "name": "Eetgelegenheden", @@ -4170,7 +4188,8 @@ "0": { "then": "Dit is een woonerf en heeft dus een maximale snelheid van 20km/h" } - } + }, + "render": "De maximum toegestane snelheid op deze weg is {maxspeed}" } }, "units": { @@ -4186,6 +4205,14 @@ } } } + }, + "description": "Toont de toegestane snelheid voor elke weg", + "title": { + "mappings": { + "0": { + "then": "Weg zonder een naam" + } + } } }, "nature_reserve": { @@ -6402,4 +6429,4 @@ } } } -} \ No newline at end of file +} From e8822454b859b8d001d2efcd207a960b38a2b1dc Mon Sep 17 00:00:00 2001 From: AlexanderRebai Date: Thu, 7 Jul 2022 07:24:37 +0000 Subject: [PATCH 38/71] added dentists, physiotherapists, presets and a filter isOpen --- assets/layers/doctors/dentist.svg | 20 ++++++++ assets/layers/doctors/doctors.json | 76 ++++++++++++++++++++++++++---- 2 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 assets/layers/doctors/dentist.svg diff --git a/assets/layers/doctors/dentist.svg b/assets/layers/doctors/dentist.svg new file mode 100644 index 000000000..7c9728084 --- /dev/null +++ b/assets/layers/doctors/dentist.svg @@ -0,0 +1,20 @@ + + + + + + + diff --git a/assets/layers/doctors/doctors.json b/assets/layers/doctors/doctors.json index 2c34b4538..e69fb27a4 100644 --- a/assets/layers/doctors/doctors.json +++ b/assets/layers/doctors/doctors.json @@ -3,17 +3,33 @@ "name": { "en": "doctors" }, + "source": { + "osmTags": { + "or": [ + "amenity=doctors", + "amenity=dentist", + "healthcare=physiotherapist" + ] + } + }, "title": { "render": { "en": "Doctors Office {name}" - } - }, - "source": { - "osmTags": { - "and": [ - "amenity=doctors" - ] - } + }, + "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": [ @@ -23,6 +39,7 @@ "email", "website", { + "condition": "amenity=doctors", "id": "specialty", "render": { "en": "This doctor is specialized in {healthcare:speciality}" @@ -61,12 +78,51 @@ ] } ], + "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": "pin:#6BC4F7;./assets/layers/doctors/doctors.svg" + "render": "circle:white;./assets/layers/doctors/doctors.svg" }, - "iconSize": "40,40,bottom", + "iconSize": "40,40,center", "location": [ "point", "centroid" From 288c36abdcc2ef9cc56724cee805ac5bc8046fae Mon Sep 17 00:00:00 2001 From: Andrews Leruth Date: Thu, 7 Jul 2022 15:56:40 +0200 Subject: [PATCH 39/71] fixed typo --- assets/layers/pharmacy/pharmacy.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/layers/pharmacy/pharmacy.json b/assets/layers/pharmacy/pharmacy.json index d7873aaa7..662e2572a 100644 --- a/assets/layers/pharmacy/pharmacy.json +++ b/assets/layers/pharmacy/pharmacy.json @@ -44,7 +44,7 @@ { "if": "wheelchair=no", "then": { - "en": "No, this pharmacy is easy to access on a wheelchair" + "en": "No, this pharmacy is hard to access on a wheelchair" } }, From fe522022b28bfc2687c5d236ffd17b75e576fd1b Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Thu, 7 Jul 2022 22:32:36 +0200 Subject: [PATCH 40/71] Clean cycle infra logo --- assets/themes/cycle_infra/cycle-infra.svg | 487 ++++++---------------- 1 file changed, 117 insertions(+), 370 deletions(-) diff --git a/assets/themes/cycle_infra/cycle-infra.svg b/assets/themes/cycle_infra/cycle-infra.svg index abd6dea01..ebec25137 100644 --- a/assets/themes/cycle_infra/cycle-infra.svg +++ b/assets/themes/cycle_infra/cycle-infra.svg @@ -1,376 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - \ No newline at end of file + From 52f1d8677262da1c41135ad1d99cad6193d9babe Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Thu, 7 Jul 2022 22:35:28 +0200 Subject: [PATCH 41/71] Small fixes to make MC build on Mac --- Logic/SimpleMetaTagger.ts | 5 +++-- UI/OpeningHours/OpeningHours.ts | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Logic/SimpleMetaTagger.ts b/Logic/SimpleMetaTagger.ts index fa2501bd1..e1383afb7 100644 --- a/Logic/SimpleMetaTagger.ts +++ b/Logic/SimpleMetaTagger.ts @@ -314,9 +314,10 @@ export default class SimpleMetaTaggers { lat: lat, lon: lon, address: { - country_code: tags._country.toLowerCase() + country_code: tags._country.toLowerCase(), + state: undefined } - }, {tag_key: "opening_hours"}); + }, {tag_key: "opening_hours"}); // Recalculate! return oh.getState() ? "yes" : "no"; diff --git a/UI/OpeningHours/OpeningHours.ts b/UI/OpeningHours/OpeningHours.ts index a37e831d8..57e4683e6 100644 --- a/UI/OpeningHours/OpeningHours.ts +++ b/UI/OpeningHours/OpeningHours.ts @@ -477,9 +477,10 @@ export class OH { lat: tags._lat, lon: tags._lon, address: { - country_code: tags._country.toLowerCase() + country_code: tags._country.toLowerCase(), + state: undefined }, - }, {tag_key: "opening_hours"}); + }, {tag_key: "opening_hours"}); } /* From b5655b5533bf6a0aab554932500127325aaf5ed0 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Thu, 7 Jul 2022 22:39:18 +0200 Subject: [PATCH 42/71] Add hospital layer; Co-authored-by: Hasan Rezaoul --- assets/layers/hospital/hospital.json | 45 ++++++++++++++++++++++++++++ hospital.svg | 13 ++++++++ license_info.json | 12 ++++++++ 3 files changed, 70 insertions(+) create mode 100644 assets/layers/hospital/hospital.json create mode 100644 hospital.svg create mode 100644 license_info.json diff --git a/assets/layers/hospital/hospital.json b/assets/layers/hospital/hospital.json new file mode 100644 index 000000000..e6337fd17 --- /dev/null +++ b/assets/layers/hospital/hospital.json @@ -0,0 +1,45 @@ +{ + "id": "hospital", + "name": { + "en": "Hospital" + }, + "title": { + "render": { + "en": "Hospital" + } + }, + "minzoom": 12, + "source": { + "osmTags": "amenity=hospital" + }, + "tagRenderings": [ + { + "id": "name", + "render": { + "en": "Name of the hospital name is {name}" + }, + "question": { + "en": "What does the of the hospital ?" + }, + "freeform": { + "key": "name" + } + }, + "phone", + "email", + "website" + ], + "mapRendering": [ + { + "icon": { + "render": "circle:white;./assets/layers/hospital/hospital.svg" + }, + "iconSize": "40,40,center", + "location": [ + "point", + "centroid" + ] + } + ] +} + diff --git a/hospital.svg b/hospital.svg new file mode 100644 index 000000000..5ef1a4b63 --- /dev/null +++ b/hospital.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/license_info.json b/license_info.json new file mode 100644 index 000000000..8a37d59ec --- /dev/null +++ b/license_info.json @@ -0,0 +1,12 @@ +[ + { + "path": "hospital.svg", + "license": "CC-0", + "authors": [ + "osmcarto" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Hospital-14.svg" + ] + } +] \ No newline at end of file From d8d0fa685be31cdbfc7489e59ca5d965017d79e0 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Thu, 7 Jul 2022 23:27:36 +0200 Subject: [PATCH 43/71] Merge all healtcare layers into a map theme --- assets/layers/doctors/doctors.json | 6 +- assets/layers/doctors/license_info.json | 10 ++ assets/layers/hospital/hospital.svg | 13 +++ assets/layers/hospital/license_info.json | 12 +++ assets/pharmacy/license_info.json | 12 --- assets/pharmacy/pharmacy.json | 102 ------------------ assets/pharmacy/pharmacy.svg | 6 -- .../healthcare.json} | 10 +- .../mapcomplete-changes.json | 12 +-- assets/themes/pharmacies/pharmacies.json | 20 ---- assets/themes/shops/shops.json | 3 +- 11 files changed, 52 insertions(+), 154 deletions(-) create mode 100644 assets/layers/hospital/hospital.svg create mode 100644 assets/layers/hospital/license_info.json delete mode 100644 assets/pharmacy/license_info.json delete mode 100644 assets/pharmacy/pharmacy.json delete mode 100644 assets/pharmacy/pharmacy.svg rename assets/themes/{doctors/doctors.json => healthcare/healthcare.json} (63%) delete mode 100644 assets/themes/pharmacies/pharmacies.json diff --git a/assets/layers/doctors/doctors.json b/assets/layers/doctors/doctors.json index e69fb27a4..cb9b0a65c 100644 --- a/assets/layers/doctors/doctors.json +++ b/assets/layers/doctors/doctors.json @@ -120,7 +120,11 @@ "mapRendering": [ { "icon": { - "render": "circle:white;./assets/layers/doctors/doctors.svg" + "render": "circle:white;./assets/layers/doctors/doctors.svg", + "mappings": [{ + "if": "amenity=dentist", + "then": "circle:white;./assets/layers/doctors/dentist.svg" + }] }, "iconSize": "40,40,center", "location": [ diff --git a/assets/layers/doctors/license_info.json b/assets/layers/doctors/license_info.json index 90889fdc6..e47e39881 100644 --- a/assets/layers/doctors/license_info.json +++ b/assets/layers/doctors/license_info.json @@ -1,4 +1,14 @@ [ + { + "path": "dentist.svg", + "license": "cc0", + "authors": [ + "osmcarto" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Dentist-14.svg" + ] + }, { "path": "doctors.svg", "license": "cc0", diff --git a/assets/layers/hospital/hospital.svg b/assets/layers/hospital/hospital.svg new file mode 100644 index 000000000..5ef1a4b63 --- /dev/null +++ b/assets/layers/hospital/hospital.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/assets/layers/hospital/license_info.json b/assets/layers/hospital/license_info.json new file mode 100644 index 000000000..8a37d59ec --- /dev/null +++ b/assets/layers/hospital/license_info.json @@ -0,0 +1,12 @@ +[ + { + "path": "hospital.svg", + "license": "CC-0", + "authors": [ + "osmcarto" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Hospital-14.svg" + ] + } +] \ No newline at end of file diff --git a/assets/pharmacy/license_info.json b/assets/pharmacy/license_info.json deleted file mode 100644 index ec982334c..000000000 --- a/assets/pharmacy/license_info.json +++ /dev/null @@ -1,12 +0,0 @@ -[ - { - "path": "pharmacy.svg", - "license": "CC0", - "authors": [ - "OSM-carto" - ], - "sources": [ - "https://wiki.openstreetmap.org/wiki/File:Pharmacy-14.svg" - ] - } -] \ No newline at end of file diff --git a/assets/pharmacy/pharmacy.json b/assets/pharmacy/pharmacy.json deleted file mode 100644 index ae6e97470..000000000 --- a/assets/pharmacy/pharmacy.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "id": "pharmacies", - "name": { - "en": "pharmacies" - }, - "title": { - "render": { - "en": "{name}" - } - }, - "source": { - "osmTags": { - "and": [ - "amenity=pharmacy" - ], - "or": [ - "dispensing=yes" - ] - } - }, - "minzoom":13, - "tagRenderings": [ - "images", - "opening_hours", - "phone", - "email", - "website", - "dispensing", - { - "id": "wheelchair", - "render": { - "en": "Easily accessible for wheelchair users: {wheelchair}" - }, - "question": { - "en": "Is this pharmacy easy to access on a wheelchair?" - }, - "freeform": { - "key": "wheelchair" - }, - "mappings": [ - { - "if": "wheelchair=yes", - "then": { - "en": "Yes, this pharmacy is easy to access on a wheelchair" - } - }, - { - "if": "wheelchair=no", - "then": { - "en": "No, this pharmacy is easy to access on a wheelchair" - } - - }, - { - "if": "wheelchair=limited", - "then": { - "en": "This pharmacy has limited access for wheelchair users" - } - } - ] - }, - { - "id": "drive_through", - "render": { - "en": "Pharmacy drive through: {drive_through}" - }, - "question": { - "en": "Does this pharmacy have a drive through?" - }, - "freeform": { - "key": "drive_through" - }, - "mappings": [ - { - "if": "drive_through=yes", - "then": { - "en": "Yes, this pharmacy has a drive through" - } - }, - { - "if": "drive_through=no", - "then": { - "en": "No, this pharmacy does not have a drive through" - } - - } - ] - } - ], - "mapRendering": [ - { - "icon": { - "render": "" - }, - "iconSize": "40,40,bottom", - "location": [ - "point", - "centroid" - ] - } - ] -} \ No newline at end of file diff --git a/assets/pharmacy/pharmacy.svg b/assets/pharmacy/pharmacy.svg deleted file mode 100644 index 325d83789..000000000 --- a/assets/pharmacy/pharmacy.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/assets/themes/doctors/doctors.json b/assets/themes/healthcare/healthcare.json similarity index 63% rename from assets/themes/doctors/doctors.json rename to assets/themes/healthcare/healthcare.json index 7c191b571..b527c884a 100644 --- a/assets/themes/doctors/doctors.json +++ b/assets/themes/healthcare/healthcare.json @@ -1,10 +1,10 @@ { - "id": "doctors", + "id": "healthcare", "title": { - "en": "Doctors" + "en": "Healthcare" }, "description": { - "en": "On this map, publicly accessible doctors offices are shown and can be easily added" + "en": "On this map, various healthcare related items are shown" }, "maintainer": "MapComplete", "icon": "./assets/layers/doctors/doctors.svg", @@ -15,6 +15,8 @@ "startZoom": 16, "widenFactor": 2, "layers": [ - "doctors" + "doctors", + "hospital", + "pharmacy" ] } \ No newline at end of file diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index 07f22fdba..0ff2edd95 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -151,10 +151,6 @@ "if": "theme=cyclofix", "then": "./assets/themes/cyclofix/logo.svg" }, - { - "if": "theme=doctors", - "then": "./assets/layers/doctors/doctors.svg" - }, { "if": "theme=drinking_water", "then": "./assets/themes/drinking_water/logo.svg" @@ -211,6 +207,10 @@ "if": "theme=hailhydrant", "then": "./assets/themes/hailhydrant/logo.svg" }, + { + "if": "theme=healthcare", + "then": "./assets/layers/doctors/doctors.svg" + }, { "if": "theme=kerbs_and_crossings", "then": "./assets/layers/kerbs/KerbIcon.svg" @@ -259,10 +259,6 @@ "if": "theme=pets", "then": "./assets/layers/dogpark/dog-park.svg" }, - { - "if": "theme=pharmacies", - "then": "./assets/layers/pharmacy/pharmacy.svg" - }, { "if": "theme=play_forests", "then": "./assets/layers/play_forest/icon.svg" diff --git a/assets/themes/pharmacies/pharmacies.json b/assets/themes/pharmacies/pharmacies.json deleted file mode 100644 index 61864106a..000000000 --- a/assets/themes/pharmacies/pharmacies.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": "pharmacies", - "title": { - "en": "pharmacies" - }, - "description": { - "en": "On this map, pharmacies are shown and can be easily added" - }, - "maintainer": "MapComplete", - "icon": "./assets/layers/pharmacy/pharmacy.svg", - "version": "0", - "startLat": 50.8465573, - "defaultBackgroundId": "CartoDB.Voyager", - "startLon": 4.351697, - "startZoom": 16, - "widenFactor": 2, - "layers": [ - "pharmacy" - ] -} \ No newline at end of file diff --git a/assets/themes/shops/shops.json b/assets/themes/shops/shops.json index 7c30d980c..bb01f6ad2 100644 --- a/assets/themes/shops/shops.json +++ b/assets/themes/shops/shops.json @@ -42,6 +42,7 @@ "startZoom": 1, "widenFactor": 3, "layers": [ - "shops" + "shops", + "pharmacy" ] } \ No newline at end of file From 97334fc369164bbbbed8ca99663c08b01fbc99d9 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Thu, 7 Jul 2022 23:38:48 +0200 Subject: [PATCH 44/71] Small tweaks to the pharmacy layer --- assets/layers/pharmacy/pharmacy.json | 35 ++-------------------------- 1 file changed, 2 insertions(+), 33 deletions(-) diff --git a/assets/layers/pharmacy/pharmacy.json b/assets/layers/pharmacy/pharmacy.json index 662e2572a..3c8c946b7 100644 --- a/assets/layers/pharmacy/pharmacy.json +++ b/assets/layers/pharmacy/pharmacy.json @@ -22,7 +22,6 @@ "phone", "email", "website", - "dispensing", { "id": "wheelchair", "render": { @@ -31,20 +30,17 @@ "question": { "en": "Is this pharmacy easy to access on a wheelchair?" }, - "freeform": { - "key": "wheelchair" - }, "mappings": [ { "if": "wheelchair=yes", "then": { - "en": "Yes, this pharmacy is easy to access on a wheelchair" + "en": "This pharmacy is easy to access on a wheelchair" } }, { "if": "wheelchair=no", "then": { - "en": "No, this pharmacy is hard to access on a wheelchair" + "en": "This pharmacy is hard to access on a wheelchair" } }, @@ -55,33 +51,6 @@ } } ] - }, - { - "id": "drive_through", - "render": { - "en": "Pharmacy drive through: {drive_through}" - }, - "question": { - "en": "Does this pharmacy have a drive through?" - }, - "freeform": { - "key": "drive_through" - }, - "mappings": [ - { - "if": "drive_through=yes", - "then": { - "en": "Yes, this pharmacy has a drive through" - } - }, - { - "if": "drive_through=no", - "then": { - "en": "No, this pharmacy does not have a drive through" - } - - } - ] } ], "mapRendering": [ From 4246221e8eae4cda3af30efbad0d7fc651f56a54 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Fri, 8 Jul 2022 03:14:55 +0200 Subject: [PATCH 45/71] Fix import flow, add typing --- .../Sources/StaticFeatureSource.ts | 15 +- .../TiledFeatureSource/OsmFeatureSource.ts | 3 +- Logic/Osm/Actions/ReplaceGeometryAction.ts | 8 +- Logic/Osm/Overpass.ts | 2 +- Logic/Web/IdbLocalStorage.ts | 7 +- Models/ThemeConfig/Conversion/Validation.ts | 4 +- UI/Base/ScrollableFullScreen.ts | 22 +- UI/BigComponents/BackgroundMapSwitch.ts | 6 + UI/BigComponents/LeftControls.ts | 5 +- UI/ImportFlow/ConflationChecker.ts | 176 +++++++----- UI/ImportFlow/ImportUtils.ts | 9 +- UI/ImportFlow/MapPreview.ts | 6 + UI/Input/Checkboxes.ts | 4 +- UI/Popup/FeatureInfoBox.ts | 12 +- .../ShowDataLayerImplementation.ts | 4 +- UI/ShowDataLayer/ShowDataLayerOptions.ts | 2 +- UI/ShowDataLayer/ShowDataMultiLayer.ts | 4 +- UI/SubstitutedTranslation.ts | 3 + Utils.ts | 4 +- assets/layers/doctors/doctors.json | 266 +++++++++--------- assets/layers/hospital/hospital.json | 3 +- assets/layers/id_presets/id_presets.json | 4 +- assets/layers/pharmacy/pharmacy.json | 122 ++++---- langs/da.json | 2 +- langs/de.json | 2 +- langs/en.json | 4 +- langs/nb_NO.json | 2 +- langs/nl.json | 2 +- scripts/generateTranslations.ts | 2 +- 29 files changed, 396 insertions(+), 309 deletions(-) diff --git a/Logic/FeatureSource/Sources/StaticFeatureSource.ts b/Logic/FeatureSource/Sources/StaticFeatureSource.ts index fac0243a9..3a1b3baca 100644 --- a/Logic/FeatureSource/Sources/StaticFeatureSource.ts +++ b/Logic/FeatureSource/Sources/StaticFeatureSource.ts @@ -3,6 +3,7 @@ import {ImmutableStore, Store, UIEventSource} from "../../UIEventSource"; import {stat} from "fs"; import FilteredLayer from "../../../Models/FilteredLayer"; import {BBox} from "../../BBox"; +import {Feature} from "@turf/turf"; /** * A simple, read only feature store. @@ -11,7 +12,7 @@ export default class StaticFeatureSource implements FeatureSource { public readonly features: Store<{ feature: any; freshness: Date }[]>; public readonly name: string - constructor(features: Store<{ feature: any, freshness: Date }[]>, name = "StaticFeatureSource") { + constructor(features: Store<{ feature: Feature, freshness: Date }[]>, name = "StaticFeatureSource") { if (features === undefined) { throw "Static feature source received undefined as source" } @@ -19,17 +20,23 @@ export default class StaticFeatureSource implements FeatureSource { this.features = features; } - public static fromGeojsonAndDate(features: { feature: any, freshness: Date }[], name = "StaticFeatureSourceFromGeojsonAndDate"): StaticFeatureSource { + public static fromGeojsonAndDate(features: { feature: Feature, freshness: Date }[], name = "StaticFeatureSourceFromGeojsonAndDate"): StaticFeatureSource { return new StaticFeatureSource(new ImmutableStore(features), name); } - public static fromGeojson(geojson: any[], name = "StaticFeatureSourceFromGeojson"): StaticFeatureSource { + public static fromGeojson(geojson: Feature[], name = "StaticFeatureSourceFromGeojson"): StaticFeatureSource { const now = new Date(); return StaticFeatureSource.fromGeojsonAndDate(geojson.map(feature => ({feature, freshness: now})), name); } - static fromDateless(featureSource: Store<{ feature: any }[]>, name = "StaticFeatureSourceFromDateless") { + public static fromGeojsonStore(geojson: Store, name = "StaticFeatureSourceFromGeojson"): StaticFeatureSource { + const now = new Date(); + const mapped : Store<{feature: Feature, freshness: Date}[]> = geojson.map(features => features.map(feature => ({feature, freshness: now}))) + return new StaticFeatureSource(mapped, name); + } + + static fromDateless(featureSource: Store<{ feature: Feature }[]>, name = "StaticFeatureSourceFromDateless") { const now = new Date(); return new StaticFeatureSource(featureSource.map(features => features.map(feature => ({ feature: feature.feature, diff --git a/Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts b/Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts index c7cdae0a4..330c0386f 100644 --- a/Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts +++ b/Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts @@ -11,6 +11,7 @@ import LayoutConfig from "../../../Models/ThemeConfig/LayoutConfig"; import {Or} from "../../Tags/Or"; import {TagsFilter} from "../../Tags/TagsFilter"; import {OsmObject} from "../../Osm/OsmObject"; +import {FeatureCollection} from "@turf/turf"; /** * If a tile is needed (requested via the UIEventSource in the constructor), will download the appropriate tile and pass it via 'handleTile' @@ -136,7 +137,7 @@ export default class OsmFeatureSource { console.log("Got tile", z, x, y, "from the osm api") this.rawDataHandlers.forEach(handler => handler(osmJson, Tiles.tile_index(z, x, y))) - const geojson = OsmToGeoJson.default(osmJson, + const geojson = > OsmToGeoJson.default(osmJson, // @ts-ignore { flatProperties: true diff --git a/Logic/Osm/Actions/ReplaceGeometryAction.ts b/Logic/Osm/Actions/ReplaceGeometryAction.ts index 0e0fa84e7..4e125f2a5 100644 --- a/Logic/Osm/Actions/ReplaceGeometryAction.ts +++ b/Logic/Osm/Actions/ReplaceGeometryAction.ts @@ -11,7 +11,7 @@ import ChangeTagAction from "./ChangeTagAction"; import {And} from "../../Tags/And"; import {Utils} from "../../../Utils"; import {OsmConnection} from "../OsmConnection"; -import {GeoJSONObject} from "@turf/turf"; +import {Feature} from "@turf/turf"; import FeaturePipeline from "../../FeatureSource/FeaturePipeline"; export default class ReplaceGeometryAction extends OsmChangeAction { @@ -83,7 +83,7 @@ export default class ReplaceGeometryAction extends OsmChangeAction { // noinspection JSUnusedGlobalSymbols public async getPreview(): Promise { const {closestIds, allNodesById, detachedNodes, reprojectedNodes} = await this.GetClosestIds(); - const preview: GeoJSONObject[] = closestIds.map((newId, i) => { + const preview: Feature[] = closestIds.map((newId, i) => { if (this.identicalTo[i] !== undefined) { return undefined } @@ -122,7 +122,7 @@ export default class ReplaceGeometryAction extends OsmChangeAction { reprojectedNodes.forEach(({newLat, newLon, nodeId}) => { const origNode = allNodesById.get(nodeId); - const feature = { + const feature : Feature = { type: "Feature", properties: { "move": "yes", @@ -142,7 +142,7 @@ export default class ReplaceGeometryAction extends OsmChangeAction { detachedNodes.forEach(({reason}, id) => { const origNode = allNodesById.get(id); - const feature = { + const feature : Feature = { type: "Feature", properties: { "detach": "yes", diff --git a/Logic/Osm/Overpass.ts b/Logic/Osm/Overpass.ts index 889d6bae2..d4a5621a0 100644 --- a/Logic/Osm/Overpass.ts +++ b/Logic/Osm/Overpass.ts @@ -35,7 +35,7 @@ export class Overpass { this._relationTracker = relationTracker } - public async queryGeoJson(bounds: BBox, ): Promise<[FeatureCollection, Date]> { + public async queryGeoJson(bounds: BBox): Promise<[FeatureCollection, Date]> { const bbox = "[bbox:" + bounds.getSouth() + "," + bounds.getWest() + "," + bounds.getNorth() + "," + bounds.getEast() + "]"; const query = this.buildScript(bbox) return this.ExecuteQuery(query); diff --git a/Logic/Web/IdbLocalStorage.ts b/Logic/Web/IdbLocalStorage.ts index 78930e011..f3d929866 100644 --- a/Logic/Web/IdbLocalStorage.ts +++ b/Logic/Web/IdbLocalStorage.ts @@ -7,8 +7,12 @@ import {Utils} from "../../Utils"; */ export class IdbLocalStorage { - + private static readonly _sourceCache: Record> = {} + public static Get(key: string, options?: { defaultValue?: T, whenLoaded?: (t: T | null) => void }): UIEventSource { + if(IdbLocalStorage._sourceCache[key] !== undefined){ + return IdbLocalStorage._sourceCache[key] + } const src = new UIEventSource(options?.defaultValue, "idb-local-storage:" + key) if (Utils.runningFromConsole) { return src; @@ -26,6 +30,7 @@ export class IdbLocalStorage { options?.whenLoaded(null) } }) + IdbLocalStorage._sourceCache[key] = src; return src; } diff --git a/Models/ThemeConfig/Conversion/Validation.ts b/Models/ThemeConfig/Conversion/Validation.ts index 36da25536..ea49777a9 100644 --- a/Models/ThemeConfig/Conversion/Validation.ts +++ b/Models/ThemeConfig/Conversion/Validation.ts @@ -75,8 +75,8 @@ export class DoesImageExist extends DesugaringStep { return {result: image}; } } - - if (this._knownImagePaths !== undefined && !this._knownImagePaths.has(image)) { + + if (!this._knownImagePaths.has(image)) { if (this.doesPathExist === undefined) { errors.push(`Image with path ${image} not found or not attributed; it is used in ${context}`) } else if (!this.doesPathExist(image)) { diff --git a/UI/Base/ScrollableFullScreen.ts b/UI/Base/ScrollableFullScreen.ts index 68d3c4944..2e15e95e2 100644 --- a/UI/Base/ScrollableFullScreen.ts +++ b/UI/Base/ScrollableFullScreen.ts @@ -28,7 +28,10 @@ export default class ScrollableFullScreen extends UIElement { constructor(title: ((options: { mode: string }) => BaseUIElement), content: ((options: { mode: string, resetScrollSignal: UIEventSource }) => BaseUIElement), hashToShow: string, - isShown: UIEventSource = new UIEventSource(false) + isShown: UIEventSource = new UIEventSource(false), + options?: { + setHash?: true | boolean + } ) { super(); this.hashToShow = hashToShow; @@ -53,16 +56,21 @@ export default class ScrollableFullScreen extends UIElement { const self = this; - Hash.hash.addCallback(h => { - if (h === undefined) { - isShown.setData(false) - } - }) + const setHash = options?.setHash ?? true; + if(setHash){ + Hash.hash.addCallback(h => { + if (h === undefined) { + isShown.setData(false) + } + }) + } isShown.addCallback(isShown => { if (isShown) { // We first must set the hash, then activate the panel // If the order is wrong, this will cause the panel to disactivate again - Hash.hash.setData(hashToShow) + if(setHash){ + Hash.hash.setData(hashToShow) + } self.Activate(); } else { // Some cleanup... diff --git a/UI/BigComponents/BackgroundMapSwitch.ts b/UI/BigComponents/BackgroundMapSwitch.ts index 68e3e77d9..b249f5abb 100644 --- a/UI/BigComponents/BackgroundMapSwitch.ts +++ b/UI/BigComponents/BackgroundMapSwitch.ts @@ -159,6 +159,12 @@ class SingleLayerSelectionButton extends Toggle { export default class BackgroundMapSwitch extends Combine { + /** + * Three buttons to easily switch map layers between OSM, aerial and some map. + * @param state + * @param currentBackground + * @param options + */ constructor( state: { locationControl: UIEventSource, diff --git a/UI/BigComponents/LeftControls.ts b/UI/BigComponents/LeftControls.ts index 5255f5a59..30af72531 100644 --- a/UI/BigComponents/LeftControls.ts +++ b/UI/BigComponents/LeftControls.ts @@ -48,7 +48,10 @@ export default class LeftControls extends Combine { } return new Lazy(() => { const tagsSource = state.allElements.getEventSourceById(feature.properties.id) - return new FeatureInfoBox(tagsSource, currentViewFL.layerDef, state, "currentview", guiState.currentViewControlIsOpened) + return new FeatureInfoBox(tagsSource, currentViewFL.layerDef, state, { + hashToShow: "currentview", + isShown: guiState.currentViewControlIsOpened + }) .SetClass("md:floating-element-width") }) })).SetStyle("width: 40rem").SetClass("block") diff --git a/UI/ImportFlow/ConflationChecker.ts b/UI/ImportFlow/ConflationChecker.ts index 250da0ea9..88c394bf8 100644 --- a/UI/ImportFlow/ConflationChecker.ts +++ b/UI/ImportFlow/ConflationChecker.ts @@ -22,12 +22,17 @@ import ShowDataLayer from "../ShowDataLayer/ShowDataLayer"; import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource"; import ValidatedTextField from "../Input/ValidatedTextField"; import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource"; -import * as currentview from "../../assets/layers/current_view/current_view.json" import * as import_candidate from "../../assets/layers/import_candidate/import_candidate.json" import {GeoOperations} from "../../Logic/GeoOperations"; import FeatureInfoBox from "../Popup/FeatureInfoBox"; import {ImportUtils} from "./ImportUtils"; import Translations from "../i18n/Translations"; +import ShowDataMultiLayer from "../ShowDataLayer/ShowDataMultiLayer"; +import FilteredLayer, {FilterState} from "../../Models/FilteredLayer"; +import {Feature, FeatureCollection} from "@turf/turf"; +import * as currentview from "../../assets/layers/current_view/current_view.json" +import {CheckBox} from "../Input/Checkboxes"; +import BackgroundMapSwitch from "../BigComponents/BackgroundMapSwitch"; /** * Given the data to import, the bbox and the layer, will query overpass for similar items @@ -36,20 +41,21 @@ export default class ConflationChecker extends Combine implements FlowStep<{ fea public readonly IsValid public readonly Value: Store<{ features: any[], theme: string }> - + constructor( state, params: { bbox: BBox, layer: LayerConfig, theme: string, features: any[] }) { + const t = Translations.t.importHelper.conflationChecker const bbox = params.bbox.padAbsolute(0.0001) const layer = params.layer; - const toImport: {features: any[]} = params; + + const toImport: { features: any[] } = params; let overpassStatus = new UIEventSource<{ error: string } | "running" | "success" | "idle" | "cached">("idle") - const cacheAge = new UIEventSource(undefined); - - - function loadDataFromOverpass(){ + + + function loadDataFromOverpass() { // Load the data! const url = Constants.defaultOverpassUrls[1] const relationTracker = new RelationsTracker() @@ -66,42 +72,49 @@ export default class ConflationChecker extends Combine implements FlowStep<{ fea overpassStatus.setData({error}) }) } - - + + const fromLocalStorage = IdbLocalStorage.Get<[any, Date]>("importer-overpass-cache-" + layer.id, { - + whenLoaded: (v) => { if (v !== undefined && v !== null) { console.log("Loaded from local storage:", v) - const [geojson, date] = v; - const timeDiff = (new Date().getTime() - date.getTime()) / 1000; - console.log("Loaded ", geojson.features.length, " features; cache is ", timeDiff, "seconds old") - cacheAge.setData(timeDiff) - if (timeDiff < 24 * 60 * 60) { - // Recently cached! - overpassStatus.setData("cached") - return; - } - cacheAge.setData(-1) + overpassStatus.setData("cached") } - loadDataFromOverpass() } }); + const cacheAge = fromLocalStorage.map(d => { + if(d === undefined || d[1] === undefined){ + return undefined + } + const [_, loadedDate] = d + return (new Date().getTime() - loadedDate.getTime()) / 1000; + }) + cacheAge.addCallbackD(timeDiff => { + if (timeDiff < 24 * 60 * 60) { + // Recently cached! + overpassStatus.setData("cached") + return; + } else { + loadDataFromOverpass() + } + }) - const geojson: Store = fromLocalStorage.map(d => { + const geojson: Store = fromLocalStorage.map(d => { if (d === undefined) { return undefined } return d[0] }) - + const background = new UIEventSource(AvailableBaseLayers.osmCarto) const location = new UIEventSource({lat: 0, lon: 0, zoom: 1}) const currentBounds = new UIEventSource(undefined) - const zoomLevel = ValidatedTextField.ForType("pnat").ConstructInputElement() + const zoomLevel = ValidatedTextField.ForType("pnat").ConstructInputElement({ + value: LocalStorageSource.GetParsed("importer-zoom-level", "0") + }) zoomLevel.SetClass("ml-1 border border-black") - zoomLevel.GetValue().syncWith(LocalStorageSource.Get("importer-zoom-level", "14"), true) const osmLiveData = Minimap.createMiniMap({ allowMoving: true, location, @@ -110,18 +123,24 @@ export default class ConflationChecker extends Combine implements FlowStep<{ fea attribution: new Attribution(location, state.osmConnection.userDetails, undefined, currentBounds) }) osmLiveData.SetClass("w-full").SetStyle("height: 500px") - const preview = new StaticFeatureSource(geojson.map(geojson => { + + const geojsonFeatures : Store = geojson.map(geojson => { if (geojson?.features === undefined) { return [] } - const zoomedEnough: boolean = osmLiveData.location.data.zoom >= Number(zoomLevel.GetValue().data) - if (!zoomedEnough) { + const currentZoom = zoomLevel.GetValue().data + const zoomedEnough: boolean = osmLiveData.location.data.zoom >= Number(currentZoom) + if (currentZoom !== undefined && !zoomedEnough) { return [] } const bounds = osmLiveData.bounds.data + if(bounds === undefined){ + return geojson.features; + } return geojson.features.filter(f => BBox.get(f).overlapsWith(bounds)) - }, [osmLiveData.bounds, zoomLevel.GetValue()])); - + }, [osmLiveData.bounds, zoomLevel.GetValue()]) + + const preview = StaticFeatureSource.fromGeojsonStore(geojsonFeatures) new ShowDataLayer({ layerToShow: new LayerConfig(currentview), @@ -134,12 +153,16 @@ export default class ConflationChecker extends Combine implements FlowStep<{ fea ]) }) - - new ShowDataLayer({ - layerToShow: layer, + new ShowDataMultiLayer({ + //layerToShow: layer, + layers: new UIEventSource([{ + layerDef: layer, + isDisplayed: new UIEventSource(true), + appliedFilters: new UIEventSource>(undefined) + }]), state, leafletMap: osmLiveData.leafletMap, - popup: (tags, layer) => new FeatureInfoBox(tags, layer, state), + popup: (tags, layer) => new FeatureInfoBox(tags, layer, state, {setHash: false}), zoomToFeatures: false, features: preview }) @@ -148,7 +171,7 @@ export default class ConflationChecker extends Combine implements FlowStep<{ fea layerToShow: new LayerConfig(import_candidate), state, leafletMap: osmLiveData.leafletMap, - popup: (tags, layer) => new FeatureInfoBox(tags, layer, state), + popup: (tags, layer) => new FeatureInfoBox(tags, layer, state, {setHash: false}), zoomToFeatures: false, features: StaticFeatureSource.fromGeojson(toImport.features) }) @@ -164,7 +187,7 @@ export default class ConflationChecker extends Combine implements FlowStep<{ fea matchedFeaturesMap.SetClass("w-full").SetStyle("height: 500px") // Featuresource showing OSM-features which are nearby a toImport-feature - const nearbyFeatures = new StaticFeatureSource(geojson.map(osmData => { + const geojsonMapped: Store = geojson.map(osmData => { if (osmData?.features === undefined) { return [] } @@ -172,32 +195,37 @@ export default class ConflationChecker extends Combine implements FlowStep<{ fea return osmData.features.filter(f => toImport.features.some(imp => maxDist >= GeoOperations.distanceBetween(imp.geometry.coordinates, GeoOperations.centerpointCoordinates(f)))) - }, [nearbyCutoff.GetValue().stabilized(500)])); + }, [nearbyCutoff.GetValue().stabilized(500)]) + const nearbyFeatures = StaticFeatureSource.fromGeojsonStore(geojsonMapped); const paritionedImport = ImportUtils.partitionFeaturesIfNearby(toImport, geojson, nearbyCutoff.GetValue().map(Number)); // Featuresource showing OSM-features which are nearby a toImport-feature - const toImportWithNearby = new StaticFeatureSource(paritionedImport.map(els => els?.hasNearby ?? [])); - - new ShowDataLayer({ - layerToShow: layer, - state, - leafletMap: matchedFeaturesMap.leafletMap, - popup: (tags, layer) => new FeatureInfoBox(tags, layer, state), - zoomToFeatures: true, - features: nearbyFeatures - }) + const toImportWithNearby = StaticFeatureSource.fromGeojsonStore(paritionedImport.map(els => els?.hasNearby ?? [])); + toImportWithNearby.features.addCallback(nearby => console.log("The following features are near an already existing object:", nearby)) new ShowDataLayer({ layerToShow: new LayerConfig(import_candidate), state, leafletMap: matchedFeaturesMap.leafletMap, - popup: (tags, layer) => new FeatureInfoBox(tags, layer, state), + popup: (tags, layer) => new FeatureInfoBox(tags, layer, state, {setHash: false}), zoomToFeatures: false, features: toImportWithNearby }) + const showOsmLayer = new CheckBox(t.showOsmLayerInConflationMap, true) + new ShowDataLayer({ + layerToShow: layer, + state, + leafletMap: matchedFeaturesMap.leafletMap, + popup: (tags, layer) => new FeatureInfoBox(tags, layer, state, {setHash: false}), + zoomToFeatures: true, + features: nearbyFeatures, + doShowLayer: showOsmLayer.GetValue() + }) - const t = Translations.t.importHelper.conflationChecker + + + const conflationMaps = new Combine([ new VariableUiElement( geojson.map(geojson => { @@ -218,34 +246,44 @@ export default class ConflationChecker extends Combine implements FlowStep<{ fea return t.cacheExpired } return new Combine([t.loadedDataAge.Subs({age: Utils.toHumanTime(age)}), - new SubtleButton(Svg.reload_svg().SetClass("h-8"), t.reloadTheCache) - .onClick(loadDataFromOverpass) - .SetClass("h-12") + new SubtleButton(Svg.reload_svg().SetClass("h-8"), t.reloadTheCache) + .onClick(loadDataFromOverpass) + .SetClass("h-12") ]) })), new Title(t.titleLive), - t.importCandidatesCount.Subs({count:toImport.features.length }), - new VariableUiElement(geojson.map(geojson => { - if(geojson?.features?.length === undefined || geojson?.features?.length === 0){ + t.importCandidatesCount.Subs({count: toImport.features.length}), + new VariableUiElement(geojson.map(geojson => { + if (geojson?.features?.length === undefined || geojson?.features?.length === 0) { return t.nothingLoaded.Subs(layer).SetClass("alert") - } - return new Combine([ + } + return new Combine([ t.osmLoaded.Subs({count: geojson.features.length, name: layer.name}), - - ]) - })), + + ]) + })), osmLiveData, - new VariableUiElement(osmLiveData.location.map(location => { - return t.zoomIn.Subs({needed:zoomLevel, current: location.zoom }) - } )), + new Combine([ + t.zoomLevelSelection, + zoomLevel, + new VariableUiElement(osmLiveData.location.map(location => { + return t.zoomIn.Subs({current: location.zoom}) + })), + ]).SetClass("flex"), new Title(t.titleNearby), new Combine([t.mapShowingNearbyIntro, nearbyCutoff]).SetClass("flex"), - new VariableUiElement(toImportWithNearby.features.map(feats => + new VariableUiElement(toImportWithNearby.features.map(feats => t.nearbyWarn.Subs({count: feats.length}).SetClass("alert"))), t.setRangeToZero, - matchedFeaturesMap]).SetClass("flex flex-col") - + matchedFeaturesMap, + new Combine([ + new BackgroundMapSwitch({backgroundLayer: background, locationControl: matchedFeaturesMap.location}, background), + showOsmLayer, + + ]).SetClass("flex") + + ]).SetClass("flex flex-col") super([ new Title(t.title), new VariableUiElement(overpassStatus.map(d => { @@ -270,7 +308,11 @@ export default class ConflationChecker extends Combine implements FlowStep<{ fea ]) - this.Value = paritionedImport.map(feats => ({theme: params.theme, features: feats?.noNearby, layer: params.layer})) + this.Value = paritionedImport.map(feats => ({ + theme: params.theme, + features: feats?.noNearby, + layer: params.layer + })) this.IsValid = this.Value.map(v => v?.features !== undefined && v.features.length > 0) } diff --git a/UI/ImportFlow/ImportUtils.ts b/UI/ImportFlow/ImportUtils.ts index 5ce200fff..850cbacfc 100644 --- a/UI/ImportFlow/ImportUtils.ts +++ b/UI/ImportFlow/ImportUtils.ts @@ -1,8 +1,13 @@ import {Store} from "../../Logic/UIEventSource"; import {GeoOperations} from "../../Logic/GeoOperations"; +import {Feature, Geometry} from "@turf/turf"; export class ImportUtils { - public static partitionFeaturesIfNearby(toPartitionFeatureCollection: ({ features: any[] }), compareWith: Store<{ features: any[] }>, cutoffDistanceInMeters: Store): Store<{ hasNearby: any[], noNearby: any[] }> { + public static partitionFeaturesIfNearby( + toPartitionFeatureCollection: ({ features: Feature[] }), + compareWith: Store<{ features: Feature[] }>, + cutoffDistanceInMeters: Store) + : Store<{ hasNearby: Feature[], noNearby: Feature[] }> { return compareWith.map(osmData => { if (osmData?.features === undefined) { return undefined @@ -16,7 +21,7 @@ export class ImportUtils { const noNearby = [] for (const toImportElement of toPartitionFeatureCollection.features) { const hasNearbyFeature = osmData.features.some(f => - maxDist >= GeoOperations.distanceBetween(toImportElement.geometry.coordinates, GeoOperations.centerpointCoordinates(f))) + maxDist >= GeoOperations.distanceBetween( toImportElement.geometry.coordinates, GeoOperations.centerpointCoordinates(f))) if (hasNearbyFeature) { hasNearby.push(toImportElement) } else { diff --git a/UI/ImportFlow/MapPreview.ts b/UI/ImportFlow/MapPreview.ts index f4e8d666e..cb1a1049f 100644 --- a/UI/ImportFlow/MapPreview.ts +++ b/UI/ImportFlow/MapPreview.ts @@ -24,6 +24,7 @@ import ScrollableFullScreen from "../Base/ScrollableFullScreen"; import Title from "../Base/Title"; import CheckBoxes from "../Input/Checkboxes"; import {AllTagsPanel} from "../AllTagsPanel"; +import BackgroundMapSwitch from "../BigComponents/BackgroundMapSwitch"; class PreviewPanel extends ScrollableFullScreen { @@ -109,6 +110,10 @@ export class MapPreview extends Combine implements FlowStep<{ bbox: BBox, layer: bounds: currentBounds, attribution: new Attribution(location, state.osmConnection.userDetails, undefined, currentBounds) }) + const layerControl = new BackgroundMapSwitch( { + backgroundLayer: background, + locationControl: location + },background) map.SetClass("w-full").SetStyle("height: 500px") new ShowDataMultiLayer({ @@ -147,6 +152,7 @@ export class MapPreview extends Combine implements FlowStep<{ bbox: BBox, layer: mismatchIndicator, map, + layerControl, confirm ]); diff --git a/UI/Input/Checkboxes.ts b/UI/Input/Checkboxes.ts index 3b0e1da96..236e7b831 100644 --- a/UI/Input/Checkboxes.ts +++ b/UI/Input/Checkboxes.ts @@ -4,13 +4,13 @@ import {Utils} from "../../Utils"; import BaseUIElement from "../BaseUIElement"; import InputElementMap from "./InputElementMap"; -export class CheckBox extends InputElementMap { +export class CheckBox extends InputElementMap { constructor(el: BaseUIElement , defaultValue?: boolean) { super( new CheckBoxes([el]), (x0, x1) => x0 === x1, t => t.length > 0, - x => x ? [0] : [] + x => x ? [0] : [], ); if(defaultValue !== undefined){ this.GetValue().setData(defaultValue) diff --git a/UI/Popup/FeatureInfoBox.ts b/UI/Popup/FeatureInfoBox.ts index 52fa5c664..143fb6e5d 100644 --- a/UI/Popup/FeatureInfoBox.ts +++ b/UI/Popup/FeatureInfoBox.ts @@ -25,16 +25,20 @@ export default class FeatureInfoBox extends ScrollableFullScreen { tags: UIEventSource, layerConfig: LayerConfig, state: FeaturePipelineState, - hashToShow?: string, - isShown?: UIEventSource, + options?: { + hashToShow?: string, + isShown?: UIEventSource, + setHash?: true | boolean + } ) { if (state === undefined) { throw "State is undefined!" } super(() => FeatureInfoBox.GenerateTitleBar(tags, layerConfig, state), () => FeatureInfoBox.GenerateContent(tags, layerConfig, state), - hashToShow ?? tags.data.id ?? "item", - isShown); + options?.hashToShow ?? tags.data.id ?? "item", + options?.isShown, + options); if (layerConfig === undefined) { throw "Undefined layerconfig"; diff --git a/UI/ShowDataLayer/ShowDataLayerImplementation.ts b/UI/ShowDataLayer/ShowDataLayerImplementation.ts index 4a2df70d8..34e45646e 100644 --- a/UI/ShowDataLayer/ShowDataLayerImplementation.ts +++ b/UI/ShowDataLayer/ShowDataLayerImplementation.ts @@ -1,4 +1,4 @@ -import {UIEventSource} from "../../Logic/UIEventSource"; +import {Store, UIEventSource} from "../../Logic/UIEventSource"; import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; import {ShowDataLayerOptions} from "./ShowDataLayerOptions"; import {ElementStorage} from "../../Logic/ElementStorage"; @@ -20,7 +20,7 @@ We don't actually import it here. It is imported in the 'MinimapImplementation'- export default class ShowDataLayerImplementation { private static dataLayerIds = 0 - private readonly _leafletMap: UIEventSource; + private readonly _leafletMap: Store; private readonly _enablePopups: boolean; private readonly _features: RenderingMultiPlexerFeatureSource private readonly _layerToShow: LayerConfig; diff --git a/UI/ShowDataLayer/ShowDataLayerOptions.ts b/UI/ShowDataLayer/ShowDataLayerOptions.ts index cd0dfd7f4..036faaf43 100644 --- a/UI/ShowDataLayer/ShowDataLayerOptions.ts +++ b/UI/ShowDataLayer/ShowDataLayerOptions.ts @@ -7,7 +7,7 @@ import ScrollableFullScreen from "../Base/ScrollableFullScreen"; export interface ShowDataLayerOptions { features: FeatureSource, selectedElement?: UIEventSource, - leafletMap: UIEventSource, + leafletMap: Store, popup?: undefined | ((tags: UIEventSource, layer: LayerConfig) => ScrollableFullScreen), zoomToFeatures?: false | boolean, doShowLayer?: Store, diff --git a/UI/ShowDataLayer/ShowDataMultiLayer.ts b/UI/ShowDataLayer/ShowDataMultiLayer.ts index 374539b60..4e20d1020 100644 --- a/UI/ShowDataLayer/ShowDataMultiLayer.ts +++ b/UI/ShowDataLayer/ShowDataMultiLayer.ts @@ -1,14 +1,14 @@ /** * SHows geojson on the given leaflet map, but attempts to figure out the correct layer first */ -import {UIEventSource} from "../../Logic/UIEventSource"; +import {Store} from "../../Logic/UIEventSource"; import ShowDataLayer from "./ShowDataLayer"; import PerLayerFeatureSourceSplitter from "../../Logic/FeatureSource/PerLayerFeatureSourceSplitter"; import FilteredLayer from "../../Models/FilteredLayer"; import {ShowDataLayerOptions} from "./ShowDataLayerOptions"; export default class ShowDataMultiLayer { - constructor(options: ShowDataLayerOptions & { layers: UIEventSource }) { + constructor(options: ShowDataLayerOptions & { layers: Store }) { new PerLayerFeatureSourceSplitter(options.layers, (perLayer => { const newOptions = { diff --git a/UI/SubstitutedTranslation.ts b/UI/SubstitutedTranslation.ts index 4a9b37dc3..a2ec63764 100644 --- a/UI/SubstitutedTranslation.ts +++ b/UI/SubstitutedTranslation.ts @@ -49,6 +49,9 @@ export class SubstitutedTranslation extends VariableUiElement { const allElements = SubstitutedTranslation.ExtractSpecialComponents(txt, extraMappings).map( proto => { if (proto.fixed !== undefined) { + if(tagsSource === undefined){ + return Utils.SubstituteKeys(proto.fixed, undefined) + } return new VariableUiElement(tagsSource.map(tags => Utils.SubstituteKeys(proto.fixed, tags))); } const viz = proto.special; diff --git a/Utils.ts b/Utils.ts index 68a485c80..0da5a205e 100644 --- a/Utils.ts +++ b/Utils.ts @@ -284,7 +284,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be * @param useLang * @constructor */ - public static SubstituteKeys(txt: string | undefined, tags: any, useLang?: string): string | undefined { + public static SubstituteKeys(txt: string | undefined, tags?: any, useLang?: string): string | undefined { if (txt === undefined) { return undefined } @@ -294,7 +294,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be while (match) { const key = match[1] - let v = tags[key] + let v = tags === undefined ? undefined : tags[key] if (v !== undefined) { if (v["toISOString"] != undefined) { diff --git a/assets/layers/doctors/doctors.json b/assets/layers/doctors/doctors.json index cb9b0a65c..1d883134c 100644 --- a/assets/layers/doctors/doctors.json +++ b/assets/layers/doctors/doctors.json @@ -1,136 +1,138 @@ { - "id": "doctors", - "name": { - "en": "doctors" + "id": "doctors", + "name": { + "en": "doctors" + }, + "source": { + "osmTags": { + "or": [ + "amenity=doctors", + "amenity=dentist", + "healthcare=physiotherapist" + ] + } + }, + "title": { + "render": { + "en": "Doctors Office {name}" }, - "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", - { - "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", - "mappings": [{ - "if": "amenity=dentist", - "then": "circle:white;./assets/layers/doctors/dentist.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", + { + "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", + "mappings": [ + { + "if": "amenity=dentist", + "then": "circle:white;./assets/layers/doctors/dentist.svg" + } + ] + }, + "iconSize": "40,40,center", + "location": [ + "point", + "centroid" + ] + } + ] } \ No newline at end of file diff --git a/assets/layers/hospital/hospital.json b/assets/layers/hospital/hospital.json index e6337fd17..b773e9992 100644 --- a/assets/layers/hospital/hospital.json +++ b/assets/layers/hospital/hospital.json @@ -41,5 +41,4 @@ ] } ] -} - +} \ No newline at end of file diff --git a/assets/layers/id_presets/id_presets.json b/assets/layers/id_presets/id_presets.json index 9d170b584..1c30d295e 100644 --- a/assets/layers/id_presets/id_presets.json +++ b/assets/layers/id_presets/id_presets.json @@ -3,9 +3,7 @@ "description": "Layer containing various presets and questions generated by ID. These are meant to be reused in other layers by importing the tagRenderings with `id_preset.", "#dont-translate": "*", "source": { - "osmTags": { - "and": [] - } + "osmTags": "id~*" }, "mapRendering": null, "tagRenderings": [ diff --git a/assets/layers/pharmacy/pharmacy.json b/assets/layers/pharmacy/pharmacy.json index 3c8c946b7..2d982829a 100644 --- a/assets/layers/pharmacy/pharmacy.json +++ b/assets/layers/pharmacy/pharmacy.json @@ -1,68 +1,64 @@ { - "id": "pharmacy", - "name": { - "en": "pharmacy" - }, - "title": { - "render": { - "en": "{name}" - } - }, - "source": { - "osmTags": { - "and": [ - "amenity=pharmacy" - ] - } - }, - "minzoom":13, - "tagRenderings": [ - "images", - "opening_hours", - "phone", - "email", - "website", + "id": "pharmacy", + "name": { + "en": "pharmacy" + }, + "title": { + "render": { + "en": "{name}" + } + }, + "source": { + "osmTags": { + "and": [ + "amenity=pharmacy" + ] + } + }, + "minzoom": 13, + "tagRenderings": [ + "images", + "opening_hours", + "phone", + "email", + "website", + { + "id": "wheelchair", + "question": { + "en": "Is this pharmacy easy to access on a wheelchair?" + }, + "mappings": [ { - "id": "wheelchair", - "render": { - "en": "Easily accessible for wheelchair users: {wheelchair}" - }, - "question": { - "en": "Is this pharmacy easy to access on a wheelchair?" - }, - "mappings": [ - { - "if": "wheelchair=yes", - "then": { - "en": "This pharmacy is easy to access on a wheelchair" - } - }, - { - "if": "wheelchair=no", - "then": { - "en": "This pharmacy is hard to access on a wheelchair" - } - - }, - { - "if": "wheelchair=limited", - "then": { - "en": "This pharmacy has limited access for wheelchair users" - } - } - ] - } - ], - "mapRendering": [ + "if": "wheelchair=yes", + "then": { + "en": "This pharmacy is easy to access on a wheelchair" + } + }, { - "icon": { - "render": "./assets/layers/pharmacy/pharmacy.svg" - }, - "iconSize": "40,40,bottom", - "location": [ - "point", - "centroid" - ] + "if": "wheelchair=no", + "then": { + "en": "This pharmacy is hard to access on a wheelchair" + } + }, + { + "if": "wheelchair=limited", + "then": { + "en": "This pharmacy has limited access for wheelchair users" + } } - ] + ] + } + ], + "mapRendering": [ + { + "icon": { + "render": "./assets/layers/pharmacy/pharmacy.svg" + }, + "iconSize": "40,40,bottom", + "location": [ + "point", + "centroid" + ] + } + ] } \ No newline at end of file diff --git a/langs/da.json b/langs/da.json index 0f2e9ce1e..3f7f21761 100644 --- a/langs/da.json +++ b/langs/da.json @@ -332,7 +332,7 @@ "title": "Sammenlign med eksisterende data", "titleLive": "Live data på OSM", "titleNearby": "Elementer i nærheden", - "zoomIn": "Live data bliver vist på zoomniveau mindst {needed}. Det aktuelle zoomniveau er {current}" + "zoomIn": "Det aktuelle zoomniveau er {current}" }, "createNotes": { "creating": "Oprettede {count} noter ud af {total}", diff --git a/langs/de.json b/langs/de.json index f5ea64aaa..c2364515a 100644 --- a/langs/de.json +++ b/langs/de.json @@ -360,7 +360,7 @@ "title": "Mit vorhandenen Daten vergleichen", "titleLive": "Live-Daten auf OSM", "titleNearby": "Objekte in der Nähe", - "zoomIn": "Live-Daten werden ab Zoomstufe {needed} angezeigt. Die aktuelle Zoomstufe ist {current}" + "zoomIn": "Die aktuelle Zoomstufe ist {current}" }, "createNotes": { "creating": "{count} Notizen von {total} erstellt", diff --git a/langs/en.json b/langs/en.json index e0109cc12..45b119476 100644 --- a/langs/en.json +++ b/langs/en.json @@ -355,6 +355,7 @@ "osmLoaded": "{count} elements are loaded from OpenStreetMap which match the layer {name}.", "reloadTheCache": "Clear the cache and query overpass again", "setRangeToZero": "Set the range to 0 or 1 if you want to import them all", + "showOsmLayerInConflationMap": "Show the OSM data", "states": { "error": "Could not load latest data from overpass due to {error}", "idle": "Checking local storage…", @@ -364,7 +365,8 @@ "title": "Compare with existing data", "titleLive": "Live data on OSM", "titleNearby": "Nearby features", - "zoomIn": "The live data is shown if the zoomlevel is at least {needed}. The current zoom level is {current}" + "zoomIn": "The current zoom level is {current}", + "zoomLevelSelection": "The live data is shown if the zoomlevel is at least: " }, "createNotes": { "creating": "Created {count} notes out of {total}", diff --git a/langs/nb_NO.json b/langs/nb_NO.json index 6fe174c8c..329a1076d 100644 --- a/langs/nb_NO.json +++ b/langs/nb_NO.json @@ -309,7 +309,7 @@ "title": "Sammenlign med eksisterende data", "titleLive": "Sanntidsdata på OSM", "titleNearby": "Funksjoner i nærheten", - "zoomIn": "Sanntidsdata vises hvis forstørrelsesnivået er minst {needed}. Nåværende forstørrelsesnivå er {current}." + "zoomIn": "Nåværende forstørrelsesnivå er {current}." }, "createNotes": { "creating": "Opprettet {count} notater av {total}", diff --git a/langs/nl.json b/langs/nl.json index 51f855be3..0e4fd61e7 100644 --- a/langs/nl.json +++ b/langs/nl.json @@ -360,7 +360,7 @@ "title": "Vergelijking met bestaande data", "titleLive": "Data van OSM", "titleNearby": "Objecten in de buurt", - "zoomIn": "De OSM-data wordt getoond vanaf zoomniveau {needed}. Het huidige zoomniveau is {current}" + "zoomIn": "Het huidige zoomniveau is {current}" }, "createNotes": { "creating": "{count} van {total} kaartnota's werden gemaakt", diff --git a/scripts/generateTranslations.ts b/scripts/generateTranslations.ts index ccbcdb7b6..cc0387e7b 100644 --- a/scripts/generateTranslations.ts +++ b/scripts/generateTranslations.ts @@ -248,7 +248,7 @@ class TranslationPart { if (lang === "en" || usedByLanguage === "en") { errors.push({ - error: `The translation for ${key} does not have the required subpart ${part}. + error: `The translation for ${key} does not have the required subpart ${part} (in ${usedByLanguage}). \tThe full translation is ${value} \t${fixLink}`, path: path From dd992a1e0dbb8a25546a995c8d2d02817438533d Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 5 Jul 2022 13:44:36 +0200 Subject: [PATCH 46/71] WIP --- css/index-tailwind-output.css | 89 +++++------- test.ts | 255 ++++++++++++++++++++++++++++------ 2 files changed, 248 insertions(+), 96 deletions(-) diff --git a/css/index-tailwind-output.css b/css/index-tailwind-output.css index 6bef61478..2514d1a9b 100644 --- a/css/index-tailwind-output.css +++ b/css/index-tailwind-output.css @@ -858,6 +858,10 @@ video { margin-bottom: 0.75rem; } +.mr-4 { + margin-right: 1rem; +} + .ml-3 { margin-left: 0.75rem; } @@ -886,10 +890,6 @@ video { margin-bottom: 6rem; } -.mr-4 { - margin-right: 1rem; -} - .mt-2 { margin-top: 0.5rem; } @@ -1038,6 +1038,10 @@ video { height: 6rem; } +.h-8 { + height: 2rem; +} + .h-full { height: 100%; } @@ -1050,10 +1054,6 @@ video { height: 3rem; } -.h-8 { - height: 2rem; -} - .h-1\/2 { height: 50%; } @@ -1122,6 +1122,14 @@ video { width: 100%; } +.w-8 { + width: 2rem; +} + +.w-1\/2 { + width: 50%; +} + .w-24 { width: 6rem; } @@ -1138,10 +1146,6 @@ video { width: 3rem; } -.w-8 { - width: 2rem; -} - .w-0 { width: 0px; } @@ -1163,10 +1167,6 @@ video { width: min-content; } -.w-1\/2 { - width: 50%; -} - .w-max { width: -webkit-max-content; width: max-content; @@ -1400,6 +1400,10 @@ video { border-bottom-left-radius: 0.25rem; } +.border-4 { + border-width: 4px; +} + .border { border-width: 1px; } @@ -1408,10 +1412,6 @@ video { border-width: 2px; } -.border-4 { - border-width: 4px; -} - .border-l-4 { border-left-width: 4px; } @@ -1420,16 +1420,16 @@ video { border-bottom-width: 1px; } -.border-gray-500 { - --tw-border-opacity: 1; - border-color: rgba(107, 114, 128, var(--tw-border-opacity)); -} - .border-black { --tw-border-opacity: 1; border-color: rgba(0, 0, 0, var(--tw-border-opacity)); } +.border-gray-500 { + --tw-border-opacity: 1; + border-color: rgba(107, 114, 128, var(--tw-border-opacity)); +} + .border-gray-400 { --tw-border-opacity: 1; border-color: rgba(156, 163, 175, var(--tw-border-opacity)); @@ -1508,14 +1508,14 @@ video { padding: 0.75rem; } -.p-4 { - padding: 1rem; -} - .p-1 { padding: 0.25rem; } +.p-4 { + padding: 1rem; +} + .p-2 { padding: 0.5rem; } @@ -1528,11 +1528,20 @@ video { padding: 0.125rem; } +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + .px-0 { padding-left: 0px; padding-right: 0px; } +.pr-2 { + padding-right: 0.5rem; +} + .pb-12 { padding-bottom: 3rem; } @@ -1601,10 +1610,6 @@ video { padding-top: 0.125rem; } -.pr-2 { - padding-right: 0.5rem; -} - .pl-6 { padding-left: 1.5rem; } @@ -1668,10 +1673,6 @@ video { font-weight: 600; } -.font-medium { - font-weight: 500; -} - .uppercase { text-transform: uppercase; } @@ -1701,10 +1702,6 @@ video { --tw-ordinal: ordinal; } -.leading-6 { - line-height: 1.5rem; -} - .tracking-tight { letter-spacing: -0.025em; } @@ -2507,16 +2504,6 @@ input { color: var(--unsubtle-detail-color-contrast); } -.group:hover .group-hover\:text-blue-800 { - --tw-text-opacity: 1; - color: rgba(30, 64, 175, var(--tw-text-opacity)); -} - -.group:hover .group-hover\:text-blue-900 { - --tw-text-opacity: 1; - color: rgba(30, 58, 138, var(--tw-text-opacity)); -} - @media (min-width: 640px) { .sm\:mx-auto { margin-left: auto; diff --git a/test.ts b/test.ts index 885ca13c3..916a46654 100644 --- a/test.ts +++ b/test.ts @@ -1,51 +1,216 @@ -import {UIEventSource} from "./Logic/UIEventSource"; -import TagRenderingQuestion from "./UI/Popup/TagRenderingQuestion"; -import TagRenderingConfig from "./Models/ThemeConfig/TagRenderingConfig"; -import {RadioButton} from "./UI/Input/RadioButton"; -import {FixedInputElement} from "./UI/Input/FixedInputElement"; +import * as shops from "./assets/generated/layers/shops.json" +import Combine from "./UI/Base/Combine"; +import Img from "./UI/Base/Img"; +import BaseUIElement from "./UI/BaseUIElement"; +import Svg from "./Svg"; +import {TextField} from "./UI/Input/TextField"; +import {Store, UIEventSource} from "./Logic/UIEventSource"; import {VariableUiElement} from "./UI/Base/VariableUIElement"; -import ValidatedTextField from "./UI/Input/ValidatedTextField"; -import VariableInputElement from "./UI/Input/VariableInputElement"; +import Locale from "./UI/i18n/Locale"; +import LanguagePicker from "./UI/LanguagePicker"; +import {InputElement} from "./UI/Input/InputElement"; +import {UIElement} from "./UI/UIElement"; +import Translations from "./UI/i18n/Translations"; +import TagRenderingConfig, {Mapping} from "./Models/ThemeConfig/TagRenderingConfig"; +import {MappingConfigJson} from "./Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"; +import {FixedUiElement} from "./UI/Base/FixedUiElement"; +import {TagsFilter} from "./Logic/Tags/TagsFilter"; -const config = new TagRenderingConfig({ - question: "What is the name?", - render: "The name is {name}", - freeform: { - key: 'name', - inline:true - }, - mappings:[ - { - if:"noname=yes", - then: "This feature has no name" +const mappingsRaw: MappingConfigJson[] = shops.tagRenderings.find(tr => tr.id == "shop_types").mappings +const mappings = mappingsRaw.map((m, i) => TagRenderingConfig.ExtractMapping(m, i, "test", "test")) + + +export class SelfHidingToggle extends UIElement implements InputElement { + private readonly _shown: BaseUIElement; + private readonly _searchTerms: Record; + private readonly _search: Store; + + private readonly _selected: UIEventSource + + public constructor( + shown: string | BaseUIElement, + mainTerm: Record, + search: Store, + searchTerms?: Record, + selected: UIEventSource = new UIEventSource(false) + ) { + super(); + this._shown = Translations.W(shown); + this._search = search; + this._searchTerms = {}; + for (const lng in searchTerms ?? []) { + if (lng === "_context") { + continue + } + this._searchTerms[lng] = searchTerms[lng].map(t => t.trim().toLowerCase()) } - ] -}) - -const tags = new UIEventSource({ - name: "current feature name" -}) - -/*new TagRenderingQuestion( - tags, config, undefined).AttachTo("maindiv")*/ -const options = new UIEventSource([]) -const rb = - new VariableInputElement( - options.map(options => { - console.trace("Construction an input element for", options) - return new RadioButton( - [ - ...options.map(o => new FixedInputElement(o,o)), - new FixedInputElement("abc", "abc"), - ValidatedTextField.ForType().ConstructInputElement() - ]) + for (const lng in mainTerm) { + if (lng === "_context") { + continue + } + this._searchTerms[lng] = [mainTerm[lng]].concat(this._searchTerms[lng] ?? []) } - - ) - + this._selected = selected; + } + + + GetValue(): UIEventSource { + return this._selected + } + + IsValid(t: boolean): boolean { + return true; + } + + protected InnerRender(): string | BaseUIElement { + let el: BaseUIElement = this._shown; + const selected = this._selected; + const search = this._search; + const terms = this._searchTerms; + const applySearch = () => { + const s = search.data?.trim()?.toLowerCase() + if (s === undefined || s.length === 0 || selected.data) { + el.RemoveClass("hidden") + return; + } + + if (terms[Locale.language.data].some(t => t.toLowerCase().indexOf(s) >= 0)) { + el.RemoveClass("hidden"); + return; + } + + el.SetClass("hidden") + } + search.addCallbackAndRun(_ => { + applySearch() + }) + Locale.language.addCallback(_ => { + applySearch() + }) + + selected.addCallbackAndRun(selected => { + if (selected) { + el.SetClass("border-4") + el.RemoveClass("border") + el.SetStyle("margin: calc( 0.25rem )") + } else { + el.SetStyle("margin: calc( 0.25rem + 3px )") + el.SetClass("border") + el.RemoveClass("border-4") + } + applySearch() + }) + + el.onClick(() => selected.setData(!selected.data)) + + return el.SetClass("border border-black rounded-full p-1 px-4") + } +} + + +class SearchablePresets extends Combine implements InputElement { + private selectedElements: UIEventSource; + + constructor( + values: { show: BaseUIElement, value: T, mainTerm: Record, searchTerms?: Record }[], + mode: "select-one" | "select-many", + selectedElements: UIEventSource = new UIEventSource([])) { + + const search = new TextField({}) + + const searchBar = new Combine([Svg.search_svg().SetClass("w-8"), search.SetClass("mr-4 w-full")]) + .SetClass("flex rounded-full border-2 border-black items-center my-2 w-1/2") + + const searchValue = search.GetValue().map(s => s?.trim()?.toLowerCase()) + + + values = values.map(v => { + + const vIsSelected = new UIEventSource(false); + + selectedElements.addCallbackAndRunD(selectedElements => { + vIsSelected.setData(selectedElements.some(t => t === v.value)) + }) + + vIsSelected.addCallback(selected => { + if (selected) { + if (mode === "select-one") { + selectedElements.setData([v.value]) + } else if (!selectedElements.data.some(t => t === v.value)) { + selectedElements.data.push(v.value); + selectedElements.ping() + } + }else{ + for (let i = 0; i < selectedElements.data.length; i++) { + const t = selectedElements.data[i] + if(t == v.value){ + selectedElements.data.splice(i, 1) + selectedElements.ping() + break; + } + } + } + }) + + return { + ...v, + show: new SelfHidingToggle(v.show, v.mainTerm, searchValue, v.searchTerms, vIsSelected) + }; + }) + + super([ + searchBar, + new VariableUiElement(Locale.language.map(lng => { + values.sort((a, b) => a.mainTerm[lng] < b.mainTerm[lng] ? -1 : 1) + return new Combine(values.map(e => e.show)) + .SetClass("flex flex-wrap w-full") + })) + + ]) + this.selectedElements = selectedElements; + + } + + public GetValue(): UIEventSource { + return this.selectedElements; + } + + IsValid(t: T[]): boolean { + return true; + } + + +} + + +function fromMapping(m: Mapping): { show: BaseUIElement, value: TagsFilter, mainTerm: Record, searchTerms?: Record } { + const el: BaseUIElement = m.then + let icon: BaseUIElement + if (m.icon !== undefined) { + icon = new Img(m.icon).SetClass("h-8 w-8 pr-2") + } else { + icon = new FixedUiElement("").SetClass("h-8 w-1") + } + const show = new Combine([ + icon, + el.SetClass("block-ruby") + ]).SetClass("flex items-center") + + return {show, mainTerm: m.then.translations, searchTerms: m.searchTerms, value: m.if}; + +} + +const sp = new SearchablePresets( + mappings.map(m => fromMapping(m)), + "select-one" ) -rb.AttachTo("maindiv") -rb.GetValue().addCallbackAndRun(v => console.log("Current value is",v)) -new VariableUiElement(rb.GetValue()).AttachTo("extradiv") -window.setTimeout(() => {options.setData(["xyz","foo","bar"])},10000) \ No newline at end of file +sp.AttachTo("maindiv") + +const lp = new LanguagePicker(["en", "nl"], "") + +new Combine([ + new VariableUiElement(sp.GetValue().map(tf => new FixedUiElement("Selected tags: " + tf.map(tf => tf.asHumanString(false, false, {})).join(", ")))), + lp +]).SetClass("flex flex-col") + .AttachTo("extradiv") \ No newline at end of file From bb23bc07616d37d4c0e4b6cd3b18b2c9d838a4ae Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Fri, 8 Jul 2022 15:37:31 +0200 Subject: [PATCH 47/71] Add paper formats to copy shops --- .../charging_station/charging_station.json | 1304 +++++------------ assets/layers/shops/shops.json | 51 + scripts/generateLayerOverview.ts | 19 +- 3 files changed, 461 insertions(+), 913 deletions(-) diff --git a/assets/layers/charging_station/charging_station.json b/assets/layers/charging_station/charging_station.json index 1cd0200fa..ead65d32e 100644 --- a/assets/layers/charging_station/charging_station.json +++ b/assets/layers/charging_station/charging_station.json @@ -2,10 +2,7 @@ "id": "charging_station", "name": { "en": "Charging stations", - "nl": "Oplaadpunten", - "ca": "Estacions de càrrega", - "de": "Ladestationen", - "es": "Estaciones de carga" + "nl": "Oplaadpunten" }, "minzoom": 10, "source": { @@ -25,10 +22,7 @@ "title": { "render": { "en": "Charging station", - "nl": "Oplaadpunt", - "ca": "Estació de càrrega", - "de": "Ladestation", - "es": "Estación de carga" + "nl": "Oplaadpunt" }, "mappings": [ { @@ -45,9 +39,7 @@ }, "then": { "en": "Charging station for electrical bicycles", - "nl": "Oplaadpunt voor elektrische fietsen", - "de": "Ladestation für Elektrofahrräder", - "es": "Estación de carga para bicicletas eléctricas" + "nl": "Oplaadpunt voor elektrische fietsen" } }, { @@ -64,19 +56,14 @@ }, "then": { "en": "Charging station for cars", - "nl": "Oplaadpunt voor elektrische auto's", - "de": "Ladestation für Autos", - "es": "Estación de carga para coches" + "nl": "Oplaadpunt voor elektrische auto's" } } ] }, "description": { "en": "A charging station", - "nl": "Oplaadpunten", - "da": "En ladestation", - "de": "Eine Ladestation", - "es": "Una estación de carga" + "nl": "Oplaadpunten" }, "tagRenderings": [ "images", @@ -85,9 +72,7 @@ "#": "Allowed vehicle types", "question": { "en": "Which vehicles are allowed to charge here?", - "nl": "Welke voertuigen kunnen hier opgeladen worden?", - "de": "Welche Fahrzeuge können hier laden?", - "es": "¿A qué vehículos se permite la carga aquí?" + "nl": "Welke voertuigen kunnen hier opgeladen worden?" }, "multiAnswer": true, "mappings": [ @@ -96,9 +81,7 @@ "ifnot": "bicycle=no", "then": { "en": "Bicycles can be charged here", - "nl": "Elektrische fietsen kunnen hier opgeladen worden", - "de": "Hier können Fahrräder laden", - "es": "Aquí se pueden cargar bicicletas" + "nl": "Elektrische fietsen kunnen hier opgeladen worden" } }, { @@ -106,9 +89,7 @@ "ifnot": "motorcar=no", "then": { "en": "Cars can be charged here", - "nl": "Elektrische auto's kunnen hier opgeladen worden", - "de": "Hier können Autos laden", - "es": "Aquí se pueden cargar coches" + "nl": "Elektrische auto's kunnen hier opgeladen worden" } }, { @@ -116,9 +97,7 @@ "ifnot": "scooter=no", "then": { "en": "Scooters can be charged here", - "nl": "Elektrische scooters (snorfiets of bromfiets) kunnen hier opgeladen worden", - "de": "Hier können Roller laden", - "es": "Aquí se pueden cargar scooters" + "nl": "Elektrische scooters (snorfiets of bromfiets) kunnen hier opgeladen worden" } }, { @@ -126,8 +105,7 @@ "ifnot": "hgv=no", "then": { "en": "Heavy good vehicles (such as trucks) can be charged here", - "nl": "Vrachtwagens kunnen hier opgeladen worden", - "de": "Hier können LKW laden" + "nl": "Vrachtwagens kunnen hier opgeladen worden" } }, { @@ -135,9 +113,7 @@ "ifnot": "bus=no", "then": { "en": "Buses can be charged here", - "nl": "Bussen kunnen hier opgeladen worden", - "de": "Hier können Busse laden", - "es": "Aquí se pueden cargar buses" + "nl": "Bussen kunnen hier opgeladen worden" } } ] @@ -146,15 +122,11 @@ "id": "access", "question": { "en": "Who is allowed to use this charging station?", - "nl": "Wie mag er dit oplaadpunt gebruiken?", - "de": "Wer darf diese Ladestation benutzen?", - "es": "¿A quién se le permite utilizar esta estación de carga?" + "nl": "Wie mag er dit oplaadpunt gebruiken?" }, "render": { "en": "Access is {access}", - "nl": "Toegang voor {access}", - "de": "Zugang ist {access}", - "es": "El acceso está {access}" + "nl": "Toegang voor {access}" }, "freeform": { "key": "access", @@ -167,9 +139,7 @@ "if": "access=yes", "then": { "en": "Anyone can use this charging station (payment might be needed)", - "nl": "Toegankelijk voor iedereen (mogelijks met aanmelden en/of te betalen)", - "de": "Jeder kann die Station nutzen (eventuell gegen Bezahlung)", - "es": "Cualquiera puede utilizar esta estación de carga (puede requerirse un pago)" + "nl": "Toegankelijk voor iedereen (mogelijks met aanmelden en/of te betalen)" } }, { @@ -181,9 +151,7 @@ }, "then": { "en": "Anyone can use this charging station (payment might be needed)", - "nl": "Toegankelijk voor iedereen (mogelijks met aanmelden en/of te betalen)", - "de": "Jeder kann diese Ladestation nutzen (eventuell gegen Bezahlung)", - "es": "Cualquiera puede utilizar esta estación de carga (puede requerirse un pago)" + "nl": "Toegankelijk voor iedereen (mogelijks met aanmelden en/of te betalen)" }, "hideInAnswer": true }, @@ -191,27 +159,21 @@ "if": "access=customers", "then": { "en": "Only customers of the place this station belongs to can use this charging station
    E.g. a charging station operated by hotel which is only usable by their guests", - "nl": "Enkel klanten van de bijhorende plaats mogen dit oplaadpunt gebruiken
    Bv. op de parking van een hotel en enkel toegankelijk voor klanten van dit hotel", - "de": "Nur Kunden des Ortes, zu dem diese Station gehört, können diese Ladestation nutzen
    Z.B. eine von einem Hotel betriebene Ladestation, die nur von dessen Gästen genutzt werden kann", - "es": "Solo clientes del lugar al que pertenece esta estación la pueden utilizar
    Ej. una estación de carga operada por un hotel que solo es utilizable por sus huéspedes" + "nl": "Enkel klanten van de bijhorende plaats mogen dit oplaadpunt gebruiken
    Bv. op de parking van een hotel en enkel toegankelijk voor klanten van dit hotel" } }, { "if": "access=key", "then": { "en": "A key must be requested to access this charging station
    E.g. a charging station operated by hotel which is only usable by their guests, which receive a key from the reception to unlock the charging station", - "nl": "Een sleutel is nodig om dit oplaadpunt te gebruiken
    Bv. voor klanten van een hotel of een bar, die de sleutel aan de receptie kunnen krijgen", - "de": "Für den Zugang zur Station muss ein Schlüssel angefordert werden
    z.B. eine von einem Hotel betriebene Ladestation, die nur von dessen Gästen genutzt werden kann, die an der Rezeption einen Schlüssel erhalten, um die Ladestation aufzuschließen", - "es": "Se debe de solicitar una llave para utilizar esta estación de carga
    Ej. una estación de carga operada por un hotel que solo es utilizable por sus huéspedes, que reciben una llave de la recepción para desbloquear la estación de carga" + "nl": "Een sleutel is nodig om dit oplaadpunt te gebruiken
    Bv. voor klanten van een hotel of een bar, die de sleutel aan de receptie kunnen krijgen" } }, { "if": "access=private", "then": { - "en": "Not accessible to the general public (e.g. only accessible to the owners, employees, …)", - "nl": "Niet toegankelijk voor het publiek
    Bv. enkel toegankelijk voor de eigenaar, medewerkers, ...", - "de": "Die Station ist nicht für die Allgemeinheit zugänglich (z. B. nur für die Eigentümer, Mitarbeiter, …)", - "es": "No accesible al público general (ej. solo accesible a los propietarios, empleados, ...)" + "en": "Not accessible to the general public (e.g. only accessible to the owners, employees, ...)", + "nl": "Niet toegankelijk voor het publiek
    Bv. enkel toegankelijk voor de eigenaar, medewerkers ,... " } } ] @@ -220,15 +182,11 @@ "id": "capacity", "render": { "en": "{capacity} vehicles can be charged here at the same time", - "nl": "{capacity} voertuigen kunnen hier op hetzelfde moment opgeladen worden", - "de": "Hier können {capacity} Fahrzeuge gleichzeitig laden", - "es": "Aquí se pueden cargar {capacity} vehículos al mismo tiempo" + "nl": "{capacity} voertuigen kunnen hier op hetzelfde moment opgeladen worden" }, "question": { "en": "How much vehicles can be charged here at the same time?", - "nl": "Hoeveel voertuigen kunnen hier opgeladen worden?", - "de": "Wie viele Fahrzeuge können hier gleichzeitig laden?", - "es": "¿Cuántos vehículos se pueden cargar a la vez aquí?" + "nl": "Hoeveel voertuigen kunnen hier opgeladen worden?" }, "freeform": { "key": "capacity", @@ -239,9 +197,7 @@ "id": "Available_charging_stations (generated)", "question": { "en": "Which charging connections are available here?", - "nl": "Welke laadaansluitingen zijn hier beschikbaar?", - "de": "Welche Ladeanschlüsse gibt es hier?", - "es": "¿Qué tipo de conexiones de carga están disponibles aquí?" + "nl": "Welke aansluitingen zijn hier beschikbaar?" }, "multiAnswer": true, "mappings": [ @@ -250,9 +206,7 @@ "ifnot": "socket:schuko=", "then": { "en": "Schuko wall plug without ground pin (CEE7/4 type F)", - "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)", - "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)", - "es": "Enchufe de pared Schuko sin pin de tierra (CEE7/4 tipo F)" + "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)" }, "icon": { "path": "./assets/layers/charging_station/CEE7_4F.svg", @@ -280,9 +234,7 @@ }, "then": { "en": "Schuko wall plug without ground pin (CEE7/4 type F)", - "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)", - "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)", - "es": "Enchufe de pared Schuko sin pin de tierra (CEE7/4 tipo F)" + "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)" }, "hideInAnswer": true, "icon": { @@ -295,9 +247,7 @@ "ifnot": "socket:typee=", "then": { "en": "European wall plug with ground pin (CEE7/4 type E)", - "nl": "Europese stekker met aardingspin (CEE7/4 type E)", - "de": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)", - "es": "Enchufe de pared Europeo con pin de tierra (CEE7/4 tipo E)" + "nl": "Europese stekker met aardingspin (CEE7/4 type E)" }, "icon": { "path": "./assets/layers/charging_station/TypeE.svg", @@ -313,9 +263,7 @@ }, "then": { "en": "European wall plug with ground pin (CEE7/4 type E)", - "nl": "Europese stekker met aardingspin (CEE7/4 type E)", - "de": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)", - "es": "Enchufe de pared Europeo con pin de tierra (CEE7/4 tipo E)" + "nl": "Europese stekker met aardingspin (CEE7/4 type E)" }, "hideInAnswer": true, "icon": { @@ -328,10 +276,7 @@ "ifnot": "socket:chademo=", "then": { "en": "Chademo", - "nl": "Chademo", - "ca": "Chademo", - "de": "Chademo-Anschluss", - "es": "Chademo" + "nl": "Chademo" }, "icon": { "path": "./assets/layers/charging_station/Chademo_type4.svg", @@ -373,10 +318,7 @@ }, "then": { "en": "Chademo", - "nl": "Chademo", - "ca": "Chademo", - "de": "Chademo-Anschluss", - "es": "Chademo" + "nl": "Chademo" }, "hideInAnswer": true, "icon": { @@ -389,9 +331,7 @@ "ifnot": "socket:type1_cable=", "then": { "en": "Type 1 with cable (J1772)", - "nl": "Type 1 met kabel (J1772)", - "de": "Typ 1 mit Kabel (J1772)", - "es": "Tipo 1 con cable (J1772)" + "nl": "Type 1 met kabel (J1772)" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -433,9 +373,7 @@ }, "then": { "en": "Type 1 with cable (J1772)", - "nl": "Type 1 met kabel (J1772)", - "de": "Typ 1 mit Kabel (J1772)", - "es": "Tipo 1 con cable (J1772)" + "nl": "Type 1 met kabel (J1772)" }, "hideInAnswer": true, "icon": { @@ -448,9 +386,7 @@ "ifnot": "socket:type1=", "then": { "en": "Type 1 without cable (J1772)", - "nl": "Type 1 zonder kabel (J1772)", - "de": "Typ 1 ohne Kabel (J1772)", - "es": "Tipo 1 sin cable (J1772)" + "nl": "Type 1 zonder kabel (J1772)" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -492,9 +428,7 @@ }, "then": { "en": "Type 1 without cable (J1772)", - "nl": "Type 1 zonder kabel (J1772)", - "de": " Typ 1 ohne Kabel (J1772)", - "es": "Tipo 1sin cable (J1772)" + "nl": "Type 1 zonder kabel (J1772)" }, "hideInAnswer": true, "icon": { @@ -507,9 +441,7 @@ "ifnot": "socket:type1_combo=", "then": { "en": "Type 1 CCS (aka Type 1 Combo)", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo)", - "de": "Typ 1 CCS (Typ 1 Combo)", - "es": "CSS Tipo 1 (también conocido como Tipo 1 Combo)" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo)" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -551,9 +483,7 @@ }, "then": { "en": "Type 1 CCS (aka Type 1 Combo)", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo)", - "de": " Typ 1 CCS (auch bekannt als Typ 1 Combo)", - "es": "CSS Tipo 1 (también conocido como Tipo 1 Combo)" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo)" }, "hideInAnswer": true, "icon": { @@ -566,9 +496,7 @@ "ifnot": "socket:tesla_supercharger=", "then": { "en": "Tesla Supercharger", - "nl": "Tesla Supercharger", - "de": "Tesla Supercharger", - "es": "Supercargador de Tesla" + "nl": "Tesla Supercharger" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -610,9 +538,7 @@ }, "then": { "en": "Tesla Supercharger", - "nl": "Tesla Supercharger", - "de": "Tesla Supercharger", - "es": "Supercargador de Tesla" + "nl": "Tesla Supercharger" }, "hideInAnswer": true, "icon": { @@ -625,9 +551,7 @@ "ifnot": "socket:type2=", "then": { "en": "Type 2 (mennekes)", - "nl": "Type 2 (mennekes)", - "de": "Typ 2 (Mennekes)", - "es": "Tipo 2 (mennekes)" + "nl": "Type 2 (mennekes)" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -669,9 +593,7 @@ }, "then": { "en": "Type 2 (mennekes)", - "nl": "Type 2 (mennekes)", - "de": "Typ 2 (Mennekes)", - "es": "Tipo 2 (mennekes)" + "nl": "Type 2 (mennekes)" }, "hideInAnswer": true, "icon": { @@ -684,9 +606,7 @@ "ifnot": "socket:type2_combo=", "then": { "en": "Type 2 CCS (mennekes)", - "nl": "Type 2 CCS (mennekes)", - "de": "Typ 2 CCS (Mennekes)", - "es": "CSS Tipo 2 (mennekes)" + "nl": "Type 2 CCS (mennekes)" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -728,9 +648,7 @@ }, "then": { "en": "Type 2 CCS (mennekes)", - "nl": "Type 2 CCS (mennekes)", - "de": "Typ 2 CCS (mennekes)", - "es": "CSS Tipo 2 (mennekes)" + "nl": "Type 2 CCS (mennekes)" }, "hideInAnswer": true, "icon": { @@ -743,9 +661,7 @@ "ifnot": "socket:type2_cable=", "then": { "en": "Type 2 with cable (mennekes)", - "nl": "Type 2 met kabel (J1772)", - "de": "Typ 2 mit Kabel (Mennekes)", - "es": "Tipo 2 con cable (mennekes)" + "nl": "Type 2 met kabel (J1772)" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -787,9 +703,7 @@ }, "then": { "en": "Type 2 with cable (mennekes)", - "nl": "Type 2 met kabel (J1772)", - "de": "Typ 2 mit Kabel (mennekes)", - "es": "Tipo 2 con cable (mennekes)" + "nl": "Type 2 met kabel (J1772)" }, "hideInAnswer": true, "icon": { @@ -802,9 +716,7 @@ "ifnot": "socket:tesla_supercharger_ccs=", "then": { "en": "Tesla Supercharger CCS (a branded type2_css)", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)", - "de": "Tesla Supercharger CCS (Typ 2 CSS von Tesla)", - "es": "CCS Supercargador Tesla (un tipo2_css con marca)" + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -846,9 +758,7 @@ }, "then": { "en": "Tesla Supercharger CCS (a branded type2_css)", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)", - "de": "Tesla Supercharger CCS (ein Markenzeichen von type2_css)", - "es": "CCS Supercargador Tesla (un tipo2_css con marca)" + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)" }, "hideInAnswer": true, "icon": { @@ -861,9 +771,7 @@ "ifnot": "socket:tesla_destination=", "then": { "en": "Tesla Supercharger (destination)", - "nl": "Tesla Supercharger (destination)", - "de": "Tesla Supercharger (Destination)", - "es": "Supercargador Tesla (destino" + "nl": "Tesla Supercharger (destination)" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -911,9 +819,7 @@ }, "then": { "en": "Tesla Supercharger (destination)", - "nl": "Tesla Supercharger (destination)", - "de": "Tesla Supercharger (Destination)", - "es": "Supercargador Tesla (destino)" + "nl": "Tesla Supercharger (destination)" }, "hideInAnswer": true, "icon": { @@ -926,9 +832,7 @@ "ifnot": "socket:tesla_destination=", "then": { "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla)", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)", - "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)", - "es": "Supercargador Tesla (destino) (Un Tipo 2 con un cable de marca tesla)" + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -976,9 +880,7 @@ }, "then": { "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla)", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)", - "de": "Tesla supercharger (Destination) (Typ 2 mit Kabel von Tesla)", - "es": "Supercargador Tesla (destino) (Un Tipo 2 con un cable de marca tesla)" + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)" }, "hideInAnswer": true, "icon": { @@ -991,9 +893,7 @@ "ifnot": "socket:USB-A=", "then": { "en": "USB to charge phones and small electronics", - "nl": "USB om GSMs en kleine electronica op te laden", - "de": "USB zum Aufladen von Handys und kleinen Elektrogeräten", - "es": "USB para cargar teléfonos y dispositivos pequeños" + "nl": "USB om GSMs en kleine electronica op te laden" }, "icon": { "path": "./assets/layers/charging_station/usb_port.svg", @@ -1009,9 +909,7 @@ }, "then": { "en": "USB to charge phones and small electronics", - "nl": "USB om GSMs en kleine electronica op te laden", - "de": "USB zum Aufladen von Handys und kleinen Elektrogeräten", - "es": "USB para cargar teléfonos y dispositivos pequeños" + "nl": "USB om GSMs en kleine electronica op te laden" }, "hideInAnswer": true, "icon": { @@ -1024,9 +922,7 @@ "ifnot": "socket:bosch_3pin=", "then": { "en": "Bosch Active Connect with 3 pins and cable", - "nl": "Bosch Active Connect met 3 pinnen aan een kabel", - "de": "Bosch Active Connect mit 3 Pins und Kabel", - "es": "Bosch Active Connect con 3 pines y cable" + "nl": "Bosch Active Connect met 3 pinnen aan een kabel" }, "icon": { "path": "./assets/layers/charging_station/bosch-3pin.svg", @@ -1064,9 +960,7 @@ }, "then": { "en": "Bosch Active Connect with 3 pins and cable", - "nl": "Bosch Active Connect met 3 pinnen aan een kabel", - "de": " Bosch Active Connect mit 3 Pins und Kabel", - "es": "Bosch Active Connect con 3 pines y cable" + "nl": "Bosch Active Connect met 3 pinnen aan een kabel" }, "hideInAnswer": true, "icon": { @@ -1079,9 +973,7 @@ "ifnot": "socket:bosch_5pin=", "then": { "en": "Bosch Active Connect with 5 pins and cable", - "nl": "Bosch Active Connect met 5 pinnen aan een kabel", - "de": "Bosch Active Connect mit 5 Pins und Kabel", - "es": "Bosch Active Connect con 5 pines y cable" + "nl": "Bosch Active Connect met 5 pinnen aan een kabel" }, "icon": { "path": "./assets/layers/charging_station/bosch-5pin.svg", @@ -1119,9 +1011,7 @@ }, "then": { "en": "Bosch Active Connect with 5 pins and cable", - "nl": "Bosch Active Connect met 5 pinnen aan een kabel", - "de": " Bosch Active Connect mit 5 Pins und Kabel", - "es": "Bosch Active Connect con 5 pines y cable" + "nl": "Bosch Active Connect met 5 pinnen aan een kabel" }, "hideInAnswer": true, "icon": { @@ -1135,13 +1025,11 @@ "id": "plugs-0", "question": { "en": "How much plugs of type
    Schuko wall plug without ground pin (CEE7/4 type F)
    are available here?", - "nl": "Hoeveel stekkers van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker vom Typ
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:schuko} plugs of type
    Schuko wall plug without ground pin (CEE7/4 type F)
    available here", - "nl": "Hier zijn {socket:schuko} stekkers van het type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ", - "de": "Hier sind {socket:schuko} Stecker des Typs
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    vorhanden" + "nl": "Hier zijn {socket:schuko} stekkers van het type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    " }, "freeform": { "key": "socket:schuko", @@ -1158,13 +1046,11 @@ "id": "plugs-1", "question": { "en": "How much plugs of type
    European wall plug with ground pin (CEE7/4 type E)
    are available here?", - "nl": "Hoeveel stekkers van type
    Europese stekker met aardingspin (CEE7/4 type E)
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Europese stekker met aardingspin (CEE7/4 type E)
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:typee} plugs of type
    European wall plug with ground pin (CEE7/4 type E)
    available here", - "nl": "Hier zijn {socket:typee} stekkers van het type
    Europese stekker met aardingspin (CEE7/4 type E)
    ", - "de": "Hier sind {socket:typee} Stecker des Typs
    Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    vorhanden" + "nl": "Hier zijn {socket:typee} stekkers van het type
    Europese stekker met aardingspin (CEE7/4 type E)
    " }, "freeform": { "key": "socket:typee", @@ -1181,13 +1067,11 @@ "id": "plugs-2", "question": { "en": "How much plugs of type
    Chademo
    are available here?", - "nl": "Hoeveel stekkers van type
    Chademo
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Chademo
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Chademo
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:chademo} plugs of type
    Chademo
    available here", - "nl": "Hier zijn {socket:chademo} stekkers van het type
    Chademo
    ", - "de": "Hier sind {socket:chademo} Stecker des Typs
    Chademo
    vorhanden" + "nl": "Hier zijn {socket:chademo} stekkers van het type
    Chademo
    " }, "freeform": { "key": "socket:chademo", @@ -1204,13 +1088,11 @@ "id": "plugs-3", "question": { "en": "How much plugs of type
    Type 1 with cable (J1772)
    are available here?", - "nl": "Hoeveel stekkers van type
    Type 1 met kabel (J1772)
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker vom Typ
    Typ 1 mit Kabel (J1772)
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Type 1 met kabel (J1772)
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:type1_cable} plugs of type
    Type 1 with cable (J1772)
    available here", - "nl": "Hier zijn {socket:type1_cable} stekkers van het type
    Type 1 met kabel (J1772)
    ", - "de": "Hier sind {socket:type1_cable} Stecker vom Typ
    Typ 1 mit Kabel (J1772)
    vorhanden" + "nl": "Hier zijn {socket:type1_cable} stekkers van het type
    Type 1 met kabel (J1772)
    " }, "freeform": { "key": "socket:type1_cable", @@ -1227,13 +1109,11 @@ "id": "plugs-4", "question": { "en": "How much plugs of type
    Type 1 without cable (J1772)
    are available here?", - "nl": "Hoeveel stekkers van type
    Type 1 zonder kabel (J1772)
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Typ 1 ohne Kabel (J1772)
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Type 1 zonder kabel (J1772)
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:type1} plugs of type
    Type 1 without cable (J1772)
    available here", - "nl": "Hier zijn {socket:type1} stekkers van het type
    Type 1 zonder kabel (J1772)
    ", - "de": "Hier sind {socket:type1} Stecker des Typs
    Typ 1 ohne Kabel (J1772)
    vorhanden" + "nl": "Hier zijn {socket:type1} stekkers van het type
    Type 1 zonder kabel (J1772)
    " }, "freeform": { "key": "socket:type1", @@ -1250,13 +1130,11 @@ "id": "plugs-5", "question": { "en": "How much plugs of type
    Type 1 CCS (aka Type 1 Combo)
    are available here?", - "nl": "Hoeveel stekkers van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Typ 1 CCS (Typ 1 Combo)
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:type1_combo} plugs of type
    Type 1 CCS (aka Type 1 Combo)
    available here", - "nl": "Hier zijn {socket:type1_combo} stekkers van het type
    Type 1 CCS (ook gekend als Type 1 Combo)
    ", - "de": "Hier sind {socket:type1_combo} Stecker des Typs
    Typ 1 CCS (Typ 1 Combo)
    vorhanden" + "nl": "Hier zijn {socket:type1_combo} stekkers van het type
    Type 1 CCS (ook gekend als Type 1 Combo)
    " }, "freeform": { "key": "socket:type1_combo", @@ -1273,13 +1151,11 @@ "id": "plugs-6", "question": { "en": "How much plugs of type
    Tesla Supercharger
    are available here?", - "nl": "Hoeveel stekkers van type
    Tesla Supercharger
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Tesla Supercharger
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Tesla Supercharger
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:tesla_supercharger} plugs of type
    Tesla Supercharger
    available here", - "nl": "Hier zijn {socket:tesla_supercharger} stekkers van het type
    Tesla Supercharger
    ", - "de": "Hier sind {socket:tesla_supercharger} Stecker des Typs
    Tesla Supercharger
    vorhanden" + "nl": "Hier zijn {socket:tesla_supercharger} stekkers van het type
    Tesla Supercharger
    " }, "freeform": { "key": "socket:tesla_supercharger", @@ -1296,13 +1172,11 @@ "id": "plugs-7", "question": { "en": "How much plugs of type
    Type 2 (mennekes)
    are available here?", - "nl": "Hoeveel stekkers van type
    Type 2 (mennekes)
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Typ 2 (Mennekes)
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Type 2 (mennekes)
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:type2} plugs of type
    Type 2 (mennekes)
    available here", - "nl": "Hier zijn {socket:type2} stekkers van het type
    Type 2 (mennekes)
    ", - "de": "Hier sind {socket:type2} Stecker des Typs
    Typ 2 (Mennekes)
    vorhanden" + "nl": "Hier zijn {socket:type2} stekkers van het type
    Type 2 (mennekes)
    " }, "freeform": { "key": "socket:type2", @@ -1319,13 +1193,11 @@ "id": "plugs-8", "question": { "en": "How much plugs of type
    Type 2 CCS (mennekes)
    are available here?", - "nl": "Hoeveel stekkers van type
    Type 2 CCS (mennekes)
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Typ 2 CCS (Mennekes)
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Type 2 CCS (mennekes)
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:type2_combo} plugs of type
    Type 2 CCS (mennekes)
    available here", - "nl": "Hier zijn {socket:type2_combo} stekkers van het type
    Type 2 CCS (mennekes)
    ", - "de": "Hier sind {socket:type2_combo} Stecker des Typs
    Typ 2 CCS (Mennekes)
    vorhanden" + "nl": "Hier zijn {socket:type2_combo} stekkers van het type
    Type 2 CCS (mennekes)
    " }, "freeform": { "key": "socket:type2_combo", @@ -1342,13 +1214,11 @@ "id": "plugs-9", "question": { "en": "How much plugs of type
    Type 2 with cable (mennekes)
    are available here?", - "nl": "Hoeveel stekkers van type
    Type 2 met kabel (J1772)
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Typ 2 mit Kabel (Mennekes)
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Type 2 met kabel (J1772)
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:type2_cable} plugs of type
    Type 2 with cable (mennekes)
    available here", - "nl": "Hier zijn {socket:type2_cable} stekkers van het type
    Type 2 met kabel (J1772)
    ", - "de": "Hier sind {socket:type2_cable} Stecker vom Typ
    Typ 2 mit Kabel (Mennekes)
    vorhanden" + "nl": "Hier zijn {socket:type2_cable} stekkers van het type
    Type 2 met kabel (J1772)
    " }, "freeform": { "key": "socket:type2_cable", @@ -1365,13 +1235,11 @@ "id": "plugs-10", "question": { "en": "How much plugs of type
    Tesla Supercharger CCS (a branded type2_css)
    are available here?", - "nl": "Hoeveel stekkers van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Tesla Supercharger CCS (Typ 2 CSS von Tesla)
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:tesla_supercharger_ccs} plugs of type
    Tesla Supercharger CCS (a branded type2_css)
    available here", - "nl": "Hier zijn {socket:tesla_supercharger_ccs} stekkers van het type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ", - "de": "Hier sind {socket:tesla_supercharger_ccs} Stecker des Typs
    Tesla Supercharger CCS (Typ2 CSS von Tesla)
    vorhanden" + "nl": "Hier zijn {socket:tesla_supercharger_ccs} stekkers van het type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    " }, "freeform": { "key": "socket:tesla_supercharger_ccs", @@ -1388,13 +1256,11 @@ "id": "plugs-11", "question": { "en": "How much plugs of type
    Tesla Supercharger (destination)
    are available here?", - "nl": "Hoeveel stekkers van type
    Tesla Supercharger (destination)
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Tesla Supercharger (Destination)
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Tesla Supercharger (destination)
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:tesla_destination} plugs of type
    Tesla Supercharger (destination)
    available here", - "nl": "Hier zijn {socket:tesla_destination} stekkers van het type
    Tesla Supercharger (destination)
    ", - "de": "Hier sind {socket:tesla_destination} Stecker des Typs
    Tesla Supercharger (Destination)
    vorhanden" + "nl": "Hier zijn {socket:tesla_destination} stekkers van het type
    Tesla Supercharger (destination)
    " }, "freeform": { "key": "socket:tesla_destination", @@ -1411,13 +1277,11 @@ "id": "plugs-12", "question": { "en": "How much plugs of type
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    are available here?", - "nl": "Hoeveel stekkers van type
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Tesla Supercharger (Destination) (Typ 2 Stecker mit Kabel von Tesla)
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:tesla_destination} plugs of type
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    available here", - "nl": "Hier zijn {socket:tesla_destination} stekkers van het type
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    ", - "de": "Hier sind {socket:tesla_destination} Stecker des Typs
    Tesla Supercharger (Destination) (Typ 2 Stecker mit Kabel von Tesla)
    vorhanden" + "nl": "Hier zijn {socket:tesla_destination} stekkers van het type
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    " }, "freeform": { "key": "socket:tesla_destination", @@ -1434,13 +1298,11 @@ "id": "plugs-13", "question": { "en": "How much plugs of type
    USB to charge phones and small electronics
    are available here?", - "nl": "Hoeveel stekkers van type
    USB om GSMs en kleine electronica op te laden
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    USB zum Aufladen von Telefonen und kleinen elektronischen Geräten
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    USB om GSMs en kleine electronica op te laden
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:USB-A} plugs of type
    USB to charge phones and small electronics
    available here", - "nl": "Hier zijn {socket:USB-A} stekkers van het type
    USB om GSMs en kleine electronica op te laden
    ", - "de": "Hier sind {socket:USB-A}-Stecker des Typs
    USB zum Aufladen von Telefonen und kleinen elektronischen Geräten
    vorhanden" + "nl": "Hier zijn {socket:USB-A} stekkers van het type
    USB om GSMs en kleine electronica op te laden
    " }, "freeform": { "key": "socket:USB-A", @@ -1457,13 +1319,11 @@ "id": "plugs-14", "question": { "en": "How much plugs of type
    Bosch Active Connect with 3 pins and cable
    are available here?", - "nl": "Hoeveel stekkers van type
    Bosch Active Connect met 3 pinnen aan een kabel
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Bosch Active Connect mit 3 Stiften und Kabel
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Bosch Active Connect met 3 pinnen aan een kabel
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:bosch_3pin} plugs of type
    Bosch Active Connect with 3 pins and cable
    available here", - "nl": "Hier zijn {socket:bosch_3pin} stekkers van het type
    Bosch Active Connect met 3 pinnen aan een kabel
    ", - "de": "Hier sind {socket:bosch_3pin}-Stecker des Typs
    Bosch Active Connect mit 3 Stiften und Kabel
    vorhanden" + "nl": "Hier zijn {socket:bosch_3pin} stekkers van het type
    Bosch Active Connect met 3 pinnen aan een kabel
    " }, "freeform": { "key": "socket:bosch_3pin", @@ -1480,13 +1340,11 @@ "id": "plugs-15", "question": { "en": "How much plugs of type
    Bosch Active Connect with 5 pins and cable
    are available here?", - "nl": "Hoeveel stekkers van type
    Bosch Active Connect met 5 pinnen aan een kabel
    heeft dit oplaadpunt?", - "de": "Wie viele Stecker des Typs
    Bosch Active Connect mit 5 Stiften und Kabel
    sind hier vorhanden?" + "nl": "Hoeveel stekkers van type
    Bosch Active Connect met 5 pinnen aan een kabel
    heeft dit oplaadpunt?" }, "render": { "en": "There are {socket:bosch_5pin} plugs of type
    Bosch Active Connect with 5 pins and cable
    available here", - "nl": "Hier zijn {socket:bosch_5pin} stekkers van het type
    Bosch Active Connect met 5 pinnen aan een kabel
    ", - "de": "Hier sind {socket:bosch_5pin}-Stecker des Typs
    Bosch Active Connect mit 5 Stiften und Kabel
    vorhanden" + "nl": "Hier zijn {socket:bosch_5pin} stekkers van het type
    Bosch Active Connect met 5 pinnen aan een kabel
    " }, "freeform": { "key": "socket:bosch_5pin", @@ -1504,13 +1362,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Schuko wall plug without ground pin (CEE7/4 type F)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ", - "de": "Welche Spannung liefern die
    Schuko-Wandstecker ohne Erdungsstift (CEE7/4 Typ F)
    ?" + "nl": "Welke spanning levert de stekker van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    " }, "render": { "en": "
    Schuko wall plug without ground pin (CEE7/4 type F)
    outputs {socket:schuko:voltage} volt", - "nl": "
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    heeft een spanning van {socket:schuko:voltage} volt", - "de": "
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    liefert {socket:schuko:voltage} Volt" + "nl": "
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    heeft een spanning van {socket:schuko:voltage} volt" }, "freeform": { "key": "socket:schuko:voltage", @@ -1521,8 +1377,7 @@ "if": "socket:schuko:voltage=230 V", "then": { "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs 230 volt", - "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) heeft een spanning van 230 volt", - "de": "Schuko-Stecker ohne Schutzkontakt (CEE7/4 Typ F) liefert 230 Volt" + "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) heeft een spanning van 230 volt" }, "icon": { "path": "./assets/layers/charging_station/CEE7_4F.svg", @@ -1542,13 +1397,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Schuko wall plug without ground pin (CEE7/4 type F)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ?", - "de": "Welche Stromstärke liefern die Anschlüsse mit
    Schuko-Stecker ohne Schutzkontakt (CEE7/4 Typ F)
    ?" + "nl": "Welke stroom levert de stekker van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ?" }, "render": { "en": "
    Schuko wall plug without ground pin (CEE7/4 type F)
    outputs at most {socket:schuko:current}A", - "nl": "
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    levert een stroom van maximaal {socket:schuko:current}A", - "de": "
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    liefert maximal {socket:schuko:current} A" + "nl": "
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    levert een stroom van maximaal {socket:schuko:current}A" }, "freeform": { "key": "socket:schuko:current", @@ -1559,8 +1412,7 @@ "if": "socket:schuko:current=16 A", "then": { "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most 16 A", - "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een stroom van maximaal 16 A", - "de": "Schuko-Steckdose ohne Erdungsstift (CEE7/4 Typ F) liefert 16 A" + "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een stroom van maximaal 16 A" }, "icon": { "path": "./assets/layers/charging_station/CEE7_4F.svg", @@ -1580,13 +1432,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Schuko wall plug without ground pin (CEE7/4 type F)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ?", - "de": "Welche Leistung liefert ein einzelner
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ?" }, "render": { "en": "
    Schuko wall plug without ground pin (CEE7/4 type F)
    outputs at most {socket:schuko:output}", - "nl": "
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    levert een vermogen van maximaal {socket:schuko:output}", - "de": "
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    liefert maximal {socket:schuko:output}" + "nl": "
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    levert een vermogen van maximaal {socket:schuko:output}" }, "freeform": { "key": "socket:schuko:output", @@ -1596,9 +1446,8 @@ { "if": "socket:schuko:output=3.6 kW", "then": { - "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most 3.6 kw A", - "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een vermogen van maximaal 3.6 kw A", - "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F) liefert maximal 3,6 kw A" + "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most 3.6 kW A", + "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een vermogen van maximaal 3.6 kW A" }, "icon": { "path": "./assets/layers/charging_station/CEE7_4F.svg", @@ -1618,13 +1467,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    European wall plug with ground pin (CEE7/4 type E)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Europese stekker met aardingspin (CEE7/4 type E)
    ", - "de": "Welche Spannung liefern die
    Europäischen Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    ?" + "nl": "Welke spanning levert de stekker van type
    Europese stekker met aardingspin (CEE7/4 type E)
    " }, "render": { "en": "
    European wall plug with ground pin (CEE7/4 type E)
    outputs {socket:typee:voltage} volt", - "nl": "
    Europese stekker met aardingspin (CEE7/4 type E)
    heeft een spanning van {socket:typee:voltage} volt", - "de": "
    Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    liefert {socket:typee:voltage} volt" + "nl": "
    Europese stekker met aardingspin (CEE7/4 type E)
    heeft een spanning van {socket:typee:voltage} volt" }, "freeform": { "key": "socket:typee:voltage", @@ -1635,8 +1482,7 @@ "if": "socket:typee:voltage=230 V", "then": { "en": "European wall plug with ground pin (CEE7/4 type E) outputs 230 volt", - "nl": "Europese stekker met aardingspin (CEE7/4 type E) heeft een spanning van 230 volt", - "de": "Europäischer Netzstecker mit Schutzkontakt (CEE7/4 Typ E) liefert 230 Volt" + "nl": "Europese stekker met aardingspin (CEE7/4 type E) heeft een spanning van 230 volt" }, "icon": { "path": "./assets/layers/charging_station/TypeE.svg", @@ -1656,13 +1502,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    European wall plug with ground pin (CEE7/4 type E)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Europese stekker met aardingspin (CEE7/4 type E)
    ?", - "de": "Welche Stromstärke bieten die Anschlüsse mit
    europäischem Stecker mit Schutzkontakt (CEE7/4 Typ E)
    ?" + "nl": "Welke stroom levert de stekker van type
    Europese stekker met aardingspin (CEE7/4 type E)
    ?" }, "render": { "en": "
    European wall plug with ground pin (CEE7/4 type E)
    outputs at most {socket:typee:current}A", - "nl": "
    Europese stekker met aardingspin (CEE7/4 type E)
    levert een stroom van maximaal {socket:typee:current}A", - "de": "
    Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    liefert maximal {socket:typee:current} A" + "nl": "
    Europese stekker met aardingspin (CEE7/4 type E)
    levert een stroom van maximaal {socket:typee:current}A" }, "freeform": { "key": "socket:typee:current", @@ -1673,8 +1517,7 @@ "if": "socket:typee:current=16 A", "then": { "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 16 A", - "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een stroom van maximaal 16 A", - "de": "Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E) liefert maximal 16 A" + "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een stroom van maximaal 16 A" }, "icon": { "path": "./assets/layers/charging_station/TypeE.svg", @@ -1694,13 +1537,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    European wall plug with ground pin (CEE7/4 type E)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Europese stekker met aardingspin (CEE7/4 type E)
    ?", - "de": "Welche Leistung liefert ein einzelner
    Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Europese stekker met aardingspin (CEE7/4 type E)
    ?" }, "render": { "en": "
    European wall plug with ground pin (CEE7/4 type E)
    outputs at most {socket:typee:output}", - "nl": "
    Europese stekker met aardingspin (CEE7/4 type E)
    levert een vermogen van maximaal {socket:typee:output}", - "de": "
    Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    liefert maximal {socket:typee:output}" + "nl": "
    Europese stekker met aardingspin (CEE7/4 type E)
    levert een vermogen van maximaal {socket:typee:output}" }, "freeform": { "key": "socket:typee:output", @@ -1710,9 +1551,8 @@ { "if": "socket:typee:output=3 kW", "then": { - "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 3 kw A", - "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 3 kw A", - "de": "Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E) liefert maximal 3 kw A" + "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 3 kW A", + "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 3 kW A" }, "icon": { "path": "./assets/layers/charging_station/TypeE.svg", @@ -1722,9 +1562,8 @@ { "if": "socket:typee:output=22 kW", "then": { - "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 22 kw A", - "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 22 kw A", - "de": "Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E) liefert maximal 22 kw A" + "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 22 kW A", + "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 22 kW A" }, "icon": { "path": "./assets/layers/charging_station/TypeE.svg", @@ -1744,13 +1583,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Chademo
    offer?", - "nl": "Welke spanning levert de stekker van type
    Chademo
    ", - "de": "Welche Spannung bieten die Stecker mit
    Chademo
    ?" + "nl": "Welke spanning levert de stekker van type
    Chademo
    " }, "render": { "en": "
    Chademo
    outputs {socket:chademo:voltage} volt", - "nl": "
    Chademo
    heeft een spanning van {socket:chademo:voltage} volt", - "de": "
    Chademo
    liefert {socket:chademo:voltage} Volt" + "nl": "
    Chademo
    heeft een spanning van {socket:chademo:voltage} volt" }, "freeform": { "key": "socket:chademo:voltage", @@ -1761,8 +1598,7 @@ "if": "socket:chademo:voltage=500 V", "then": { "en": "Chademo outputs 500 volt", - "nl": "Chademo heeft een spanning van 500 volt", - "de": "Chademo liefert 500 Volt" + "nl": "Chademo heeft een spanning van 500 volt" }, "icon": { "path": "./assets/layers/charging_station/Chademo_type4.svg", @@ -1782,13 +1618,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Chademo
    offer?", - "nl": "Welke stroom levert de stekker van type
    Chademo
    ?", - "de": "Welche Stromstärke liefern die Stecker mit
    Chademo
    ?" + "nl": "Welke stroom levert de stekker van type
    Chademo
    ?" }, "render": { "en": "
    Chademo
    outputs at most {socket:chademo:current}A", - "nl": "
    Chademo
    levert een stroom van maximaal {socket:chademo:current}A", - "de": "
    Chademo
    liefert maximal {socket:chademo:current} A" + "nl": "
    Chademo
    levert een stroom van maximaal {socket:chademo:current}A" }, "freeform": { "key": "socket:chademo:current", @@ -1799,8 +1633,7 @@ "if": "socket:chademo:current=120 A", "then": { "en": "Chademo outputs at most 120 A", - "nl": "Chademo levert een stroom van maximaal 120 A", - "de": "Chademo liefert maximal 120 A" + "nl": "Chademo levert een stroom van maximaal 120 A" }, "icon": { "path": "./assets/layers/charging_station/Chademo_type4.svg", @@ -1820,13 +1653,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Chademo
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Chademo
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Chademo
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Chademo
    ?" }, "render": { "en": "
    Chademo
    outputs at most {socket:chademo:output}", - "nl": "
    Chademo
    levert een vermogen van maximaal {socket:chademo:output}", - "de": "
    Chademo
    liefert maximal {socket:chademo:output}" + "nl": "
    Chademo
    levert een vermogen van maximaal {socket:chademo:output}" }, "freeform": { "key": "socket:chademo:output", @@ -1836,9 +1667,8 @@ { "if": "socket:chademo:output=50 kW", "then": { - "en": "Chademo outputs at most 50 kw A", - "nl": "Chademo levert een vermogen van maximaal 50 kw A", - "de": "Chademo liefert maximal 50 kw A" + "en": "Chademo outputs at most 50 kW A", + "nl": "Chademo levert een vermogen van maximaal 50 kW A" }, "icon": { "path": "./assets/layers/charging_station/Chademo_type4.svg", @@ -1858,13 +1688,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Type 1 with cable (J1772)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Type 1 met kabel (J1772)
    ", - "de": "Welche Spannung liefern die Stecker mit
    Typ 1 mit Kabel (J1772)
    ?" + "nl": "Welke spanning levert de stekker van type
    Type 1 met kabel (J1772)
    " }, "render": { "en": "
    Type 1 with cable (J1772)
    outputs {socket:type1_cable:voltage} volt", - "nl": "
    Type 1 met kabel (J1772)
    heeft een spanning van {socket:type1_cable:voltage} volt", - "de": "
    Typ 1 mit Kabel (J1772)
    liefern {socket:type1_cable:voltage} Volt" + "nl": "
    Type 1 met kabel (J1772)
    heeft een spanning van {socket:type1_cable:voltage} volt" }, "freeform": { "key": "socket:type1_cable:voltage", @@ -1875,8 +1703,7 @@ "if": "socket:type1_cable:voltage=200 V", "then": { "en": "Type 1 with cable (J1772) outputs 200 volt", - "nl": "Type 1 met kabel (J1772) heeft een spanning van 200 volt", - "de": "Typ 1 mit Kabel (J1772) liefert 200 Volt" + "nl": "Type 1 met kabel (J1772) heeft een spanning van 200 volt" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1887,8 +1714,7 @@ "if": "socket:type1_cable:voltage=240 V", "then": { "en": "Type 1 with cable (J1772) outputs 240 volt", - "nl": "Type 1 met kabel (J1772) heeft een spanning van 240 volt", - "de": "Typ 1 mit Kabel (J1772) liefert 240 Volt" + "nl": "Type 1 met kabel (J1772) heeft een spanning van 240 volt" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1908,13 +1734,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Type 1 with cable (J1772)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Type 1 met kabel (J1772)
    ?", - "de": "Welche Stromstärke liefern die Stecker mit
    Typ 1 mit Kabel (J1772)
    ?" + "nl": "Welke stroom levert de stekker van type
    Type 1 met kabel (J1772)
    ?" }, "render": { "en": "
    Type 1 with cable (J1772)
    outputs at most {socket:type1_cable:current}A", - "nl": "
    Type 1 met kabel (J1772)
    levert een stroom van maximaal {socket:type1_cable:current}A", - "de": "
    Typ 1 mit Kabel (J1772)
    liefert maximal {socket:type1_cable:current} A" + "nl": "
    Type 1 met kabel (J1772)
    levert een stroom van maximaal {socket:type1_cable:current}A" }, "freeform": { "key": "socket:type1_cable:current", @@ -1925,8 +1749,7 @@ "if": "socket:type1_cable:current=32 A", "then": { "en": "Type 1 with cable (J1772) outputs at most 32 A", - "nl": "Type 1 met kabel (J1772) levert een stroom van maximaal 32 A", - "de": "Typ 1 mit Kabel (J1772) liefert maximal 32 A" + "nl": "Type 1 met kabel (J1772) levert een stroom van maximaal 32 A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1946,13 +1769,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Type 1 with cable (J1772)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Type 1 met kabel (J1772)
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Typ 1 mit Kabel (J1772)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Type 1 met kabel (J1772)
    ?" }, "render": { "en": "
    Type 1 with cable (J1772)
    outputs at most {socket:type1_cable:output}", - "nl": "
    Type 1 met kabel (J1772)
    levert een vermogen van maximaal {socket:type1_cable:output}", - "de": "
    Typ 1 mit Kabel (J1772)
    liefert maximal {socket:type1_cable:output}" + "nl": "
    Type 1 met kabel (J1772)
    levert een vermogen van maximaal {socket:type1_cable:output}" }, "freeform": { "key": "socket:type1_cable:output", @@ -1962,9 +1783,8 @@ { "if": "socket:type1_cable:output=3.7 kW", "then": { - "en": "Type 1 with cable (J1772) outputs at most 3.7 kw A", - "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal 3.7 kw A", - "de": "Typ 1 mit Kabel (J1772) liefert maximal 3,7 kw A" + "en": "Type 1 with cable (J1772) outputs at most 3.7 kW A", + "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal 3.7 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1974,9 +1794,8 @@ { "if": "socket:type1_cable:output=7 kW", "then": { - "en": "Type 1 with cable (J1772) outputs at most 7 kw A", - "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal 7 kw A", - "de": "Typ 1 mit Kabel (J1772) liefert maximal 7 kw A" + "en": "Type 1 with cable (J1772) outputs at most 7 kW A", + "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal 7 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1996,13 +1815,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Type 1 without cable (J1772)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Type 1 zonder kabel (J1772)
    ", - "de": "Welche Spannung bieten die Stecker mit
    Typ 1 ohne Kabel (J1772)
    ?" + "nl": "Welke spanning levert de stekker van type
    Type 1 zonder kabel (J1772)
    " }, "render": { "en": "
    Type 1 without cable (J1772)
    outputs {socket:type1:voltage} volt", - "nl": "
    Type 1 zonder kabel (J1772)
    heeft een spanning van {socket:type1:voltage} volt", - "de": "
    Typ 1 ohne Kabel (J1772)
    liefert {socket:type1:voltage} Volt" + "nl": "
    Type 1 zonder kabel (J1772)
    heeft een spanning van {socket:type1:voltage} volt" }, "freeform": { "key": "socket:type1:voltage", @@ -2013,8 +1830,7 @@ "if": "socket:type1:voltage=200 V", "then": { "en": "Type 1 without cable (J1772) outputs 200 volt", - "nl": "Type 1 zonder kabel (J1772) heeft een spanning van 200 volt", - "de": "Typ 1 ohne Kabel (J1772) liefert 200 Volt" + "nl": "Type 1 zonder kabel (J1772) heeft een spanning van 200 volt" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -2025,8 +1841,7 @@ "if": "socket:type1:voltage=240 V", "then": { "en": "Type 1 without cable (J1772) outputs 240 volt", - "nl": "Type 1 zonder kabel (J1772) heeft een spanning van 240 volt", - "de": "Typ 1 ohne Kabel (J1772) liefert 240 Volt" + "nl": "Type 1 zonder kabel (J1772) heeft een spanning van 240 volt" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -2046,13 +1861,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Type 1 without cable (J1772)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Type 1 zonder kabel (J1772)
    ?", - "de": "Welche Stromstärke liefern die Stecker mit
    Typ 1 ohne Kabel (J1772)
    ?" + "nl": "Welke stroom levert de stekker van type
    Type 1 zonder kabel (J1772)
    ?" }, "render": { "en": "
    Type 1 without cable (J1772)
    outputs at most {socket:type1:current}A", - "nl": "
    Type 1 zonder kabel (J1772)
    levert een stroom van maximaal {socket:type1:current}A", - "de": "
    Typ 1 ohne Kabel (J1772)
    liefert maximal {socket:type1:current} A" + "nl": "
    Type 1 zonder kabel (J1772)
    levert een stroom van maximaal {socket:type1:current}A" }, "freeform": { "key": "socket:type1:current", @@ -2063,8 +1876,7 @@ "if": "socket:type1:current=32 A", "then": { "en": "Type 1 without cable (J1772) outputs at most 32 A", - "nl": "Type 1 zonder kabel (J1772) levert een stroom van maximaal 32 A", - "de": "Typ 1 ohne Kabel (J1772) liefert maximal 32 A" + "nl": "Type 1 zonder kabel (J1772) levert een stroom van maximaal 32 A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -2084,13 +1896,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Type 1 without cable (J1772)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Type 1 zonder kabel (J1772)
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Typ 1 ohne Kabel (J1772)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Type 1 zonder kabel (J1772)
    ?" }, "render": { "en": "
    Type 1 without cable (J1772)
    outputs at most {socket:type1:output}", - "nl": "
    Type 1 zonder kabel (J1772)
    levert een vermogen van maximaal {socket:type1:output}", - "de": "
    Typ 1 ohne Kabel (J1772)
    liefert maximal {socket:type1:output}" + "nl": "
    Type 1 zonder kabel (J1772)
    levert een vermogen van maximaal {socket:type1:output}" }, "freeform": { "key": "socket:type1:output", @@ -2100,9 +1910,8 @@ { "if": "socket:type1:output=3.7 kW", "then": { - "en": "Type 1 without cable (J1772) outputs at most 3.7 kw A", - "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 3.7 kw A", - "de": "Typ 1 ohne Kabel (J1772) liefert maximal 3,7 kw A" + "en": "Type 1 without cable (J1772) outputs at most 3.7 kW A", + "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 3.7 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -2112,9 +1921,8 @@ { "if": "socket:type1:output=6.6 kW", "then": { - "en": "Type 1 without cable (J1772) outputs at most 6.6 kw A", - "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 6.6 kw A", - "de": "Typ 1 ohne Kabel (J1772) liefert maximal 6,6 kw A" + "en": "Type 1 without cable (J1772) outputs at most 6.6 kW A", + "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 6.6 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -2124,9 +1932,8 @@ { "if": "socket:type1:output=7 kW", "then": { - "en": "Type 1 without cable (J1772) outputs at most 7 kw A", - "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 7 kw A", - "de": "Typ 1 ohne Kabel (J1772) liefert maximal 7 kw A" + "en": "Type 1 without cable (J1772) outputs at most 7 kW A", + "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 7 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -2136,9 +1943,8 @@ { "if": "socket:type1:output=7.2 kW", "then": { - "en": "Type 1 without cable (J1772) outputs at most 7.2 kw A", - "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 7.2 kw A", - "de": "Typ 1 ohne Kabel (J1772) liefert maximal 7,2 kw A" + "en": "Type 1 without cable (J1772) outputs at most 7.2 kW A", + "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 7.2 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -2158,13 +1964,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Type 1 CCS (aka Type 1 Combo)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    ", - "de": "Welche Spannung bieten die Stecker mit
    Typ 1 CCS (Typ 1 Combo)
    ?" + "nl": "Welke spanning levert de stekker van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    " }, "render": { "en": "
    Type 1 CCS (aka Type 1 Combo)
    outputs {socket:type1_combo:voltage} volt", - "nl": "
    Type 1 CCS (ook gekend als Type 1 Combo)
    heeft een spanning van {socket:type1_combo:voltage} volt", - "de": "
    Typ 1 CCS (Typ 1 Combo)
    liefert {socket:type1_combo:voltage} Volt" + "nl": "
    Type 1 CCS (ook gekend als Type 1 Combo)
    heeft een spanning van {socket:type1_combo:voltage} volt" }, "freeform": { "key": "socket:type1_combo:voltage", @@ -2175,8 +1979,7 @@ "if": "socket:type1_combo:voltage=400 V", "then": { "en": "Type 1 CCS (aka Type 1 Combo) outputs 400 volt", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) heeft een spanning van 400 volt", - "de": "Typ 1 CCS (Typ 1 Combo) liefert 400 Volt" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) heeft een spanning van 400 volt" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2187,8 +1990,7 @@ "if": "socket:type1_combo:voltage=1000 V", "then": { "en": "Type 1 CCS (aka Type 1 Combo) outputs 1000 volt", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) heeft een spanning van 1000 volt", - "de": "Typ 1 CCS (Typ 1 Combo) liefert 1000 Volt" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) heeft een spanning van 1000 volt" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2208,13 +2010,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Type 1 CCS (aka Type 1 Combo)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    ?", - "de": "Welche Stromstärke liefern die Stecker mit
    Typ 1 CCS (Typ 1 Combo)
    ?" + "nl": "Welke stroom levert de stekker van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    ?" }, "render": { "en": "
    Type 1 CCS (aka Type 1 Combo)
    outputs at most {socket:type1_combo:current}A", - "nl": "
    Type 1 CCS (ook gekend als Type 1 Combo)
    levert een stroom van maximaal {socket:type1_combo:current}A", - "de": "
    Typ 1 CCS (Typ 1 Combo)
    liefert maximal {socket:type1_combo:current} A" + "nl": "
    Type 1 CCS (ook gekend als Type 1 Combo)
    levert een stroom van maximaal {socket:type1_combo:current}A" }, "freeform": { "key": "socket:type1_combo:current", @@ -2225,8 +2025,7 @@ "if": "socket:type1_combo:current=50 A", "then": { "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 50 A", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een stroom van maximaal 50 A", - "de": "Typ 1 CCS (Typ 1 Combo) liefert maximal 50 A" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een stroom van maximaal 50 A" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2237,8 +2036,7 @@ "if": "socket:type1_combo:current=125 A", "then": { "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 125 A", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een stroom van maximaal 125 A", - "de": "Typ 1 CCS (Typ 1 Combo) liefert maximal 125 A" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een stroom van maximaal 125 A" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2258,13 +2056,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Type 1 CCS (aka Type 1 Combo)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Typ 1 CCS (Typ 1 Combo)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    ?" }, "render": { "en": "
    Type 1 CCS (aka Type 1 Combo)
    outputs at most {socket:type1_combo:output}", - "nl": "
    Type 1 CCS (ook gekend als Type 1 Combo)
    levert een vermogen van maximaal {socket:type1_combo:output}", - "de": "
    Typ 1 CCS (Typ 1 Combo)
    liefert maximal {socket:type1_combo:output}" + "nl": "
    Type 1 CCS (ook gekend als Type 1 Combo)
    levert een vermogen van maximaal {socket:type1_combo:output}" }, "freeform": { "key": "socket:type1_combo:output", @@ -2274,9 +2070,8 @@ { "if": "socket:type1_combo:output=50 kW", "then": { - "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 50 kw A", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 50 kw A", - "de": "Typ 1 CCS (Typ 1 Combo) liefert maximal 50 kw A" + "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 50 kW A", + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 50 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2286,9 +2081,8 @@ { "if": "socket:type1_combo:output=62.5 kW", "then": { - "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 62.5 kw A", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 62.5 kw A", - "de": "Typ 1 CCS (Typ 1 Combo) liefert maximal 62,5 kw A" + "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 62.5 kW A", + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 62.5 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2298,9 +2092,8 @@ { "if": "socket:type1_combo:output=150 kW", "then": { - "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 150 kw A", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 150 kw A", - "de": "Typ 1 CCS (Typ 1 Combo) liefert maximal 150 kw A" + "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 150 kW A", + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 150 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2310,9 +2103,8 @@ { "if": "socket:type1_combo:output=350 kW", "then": { - "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 350 kw A", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 350 kw A", - "de": "Typ 1 CCS (Typ 1 Combo) liefert maximal 350 kw A" + "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 350 kW A", + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 350 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2332,13 +2124,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Tesla Supercharger
    offer?", - "nl": "Welke spanning levert de stekker van type
    Tesla Supercharger
    ", - "de": "Welche Spannung bieten die Stecker mit
    Tesla Supercharger
    ?" + "nl": "Welke spanning levert de stekker van type
    Tesla Supercharger
    " }, "render": { "en": "
    Tesla Supercharger
    outputs {socket:tesla_supercharger:voltage} volt", - "nl": "
    Tesla Supercharger
    heeft een spanning van {socket:tesla_supercharger:voltage} volt", - "de": "
    Tesla Supercharger
    liefert {socket:tesla_supercharger:voltage} Volt" + "nl": "
    Tesla Supercharger
    heeft een spanning van {socket:tesla_supercharger:voltage} volt" }, "freeform": { "key": "socket:tesla_supercharger:voltage", @@ -2349,8 +2139,7 @@ "if": "socket:tesla_supercharger:voltage=480 V", "then": { "en": "Tesla Supercharger outputs 480 volt", - "nl": "Tesla Supercharger heeft een spanning van 480 volt", - "de": "Tesla Supercharger liefert 480 Volt" + "nl": "Tesla Supercharger heeft een spanning van 480 volt" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2370,13 +2159,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Tesla Supercharger
    offer?", - "nl": "Welke stroom levert de stekker van type
    Tesla Supercharger
    ?", - "de": "Welche Stromstärke liefern die Stecker mit
    Tesla Supercharger
    ?" + "nl": "Welke stroom levert de stekker van type
    Tesla Supercharger
    ?" }, "render": { "en": "
    Tesla Supercharger
    outputs at most {socket:tesla_supercharger:current}A", - "nl": "
    Tesla Supercharger
    levert een stroom van maximaal {socket:tesla_supercharger:current}A", - "de": "
    Tesla Supercharger
    liefert maximal {socket:tesla_supercharger:current} A" + "nl": "
    Tesla Supercharger
    levert een stroom van maximaal {socket:tesla_supercharger:current}A" }, "freeform": { "key": "socket:tesla_supercharger:current", @@ -2387,8 +2174,7 @@ "if": "socket:tesla_supercharger:current=125 A", "then": { "en": "Tesla Supercharger outputs at most 125 A", - "nl": "Tesla Supercharger levert een stroom van maximaal 125 A", - "de": "Tesla Supercharger liefert maximal 125 A" + "nl": "Tesla Supercharger levert een stroom van maximaal 125 A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2399,8 +2185,7 @@ "if": "socket:tesla_supercharger:current=350 A", "then": { "en": "Tesla Supercharger outputs at most 350 A", - "nl": "Tesla Supercharger levert een stroom van maximaal 350 A", - "de": "Tesla Supercharger liefert maximal 350 A" + "nl": "Tesla Supercharger levert een stroom van maximaal 350 A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2420,13 +2205,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Tesla Supercharger
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Tesla Supercharger
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Tesla Supercharger
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Tesla Supercharger
    ?" }, "render": { "en": "
    Tesla Supercharger
    outputs at most {socket:tesla_supercharger:output}", - "nl": "
    Tesla Supercharger
    levert een vermogen van maximaal {socket:tesla_supercharger:output}", - "de": "
    Tesla Supercharger
    liefert maximal {socket:tesla_supercharger:output}" + "nl": "
    Tesla Supercharger
    levert een vermogen van maximaal {socket:tesla_supercharger:output}" }, "freeform": { "key": "socket:tesla_supercharger:output", @@ -2436,9 +2219,8 @@ { "if": "socket:tesla_supercharger:output=120 kW", "then": { - "en": "Tesla Supercharger outputs at most 120 kw A", - "nl": "Tesla Supercharger levert een vermogen van maximaal 120 kw A", - "de": "Tesla Supercharger liefert maximal 120 kw A" + "en": "Tesla Supercharger outputs at most 120 kW A", + "nl": "Tesla Supercharger levert een vermogen van maximaal 120 kW A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2448,9 +2230,8 @@ { "if": "socket:tesla_supercharger:output=150 kW", "then": { - "en": "Tesla Supercharger outputs at most 150 kw A", - "nl": "Tesla Supercharger levert een vermogen van maximaal 150 kw A", - "de": "Tesla Supercharger liefert maximal 150 kw A" + "en": "Tesla Supercharger outputs at most 150 kW A", + "nl": "Tesla Supercharger levert een vermogen van maximaal 150 kW A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2460,9 +2241,8 @@ { "if": "socket:tesla_supercharger:output=250 kW", "then": { - "en": "Tesla Supercharger outputs at most 250 kw A", - "nl": "Tesla Supercharger levert een vermogen van maximaal 250 kw A", - "de": "Tesla Supercharger liefert maximal 250 kW A" + "en": "Tesla Supercharger outputs at most 250 kW A", + "nl": "Tesla Supercharger levert een vermogen van maximaal 250 kW A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2482,13 +2262,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Type 2 (mennekes)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Type 2 (mennekes)
    ", - "de": "Welche Spannung liefern die Stecker mit
    Typ 2 (Mennekes)
    ?" + "nl": "Welke spanning levert de stekker van type
    Type 2 (mennekes)
    " }, "render": { "en": "
    Type 2 (mennekes)
    outputs {socket:type2:voltage} volt", - "nl": "
    Type 2 (mennekes)
    heeft een spanning van {socket:type2:voltage} volt", - "de": "
    Typ 2 (Mennekes)
    liefert {socket:type2:voltage} Volt" + "nl": "
    Type 2 (mennekes)
    heeft een spanning van {socket:type2:voltage} volt" }, "freeform": { "key": "socket:type2:voltage", @@ -2499,8 +2277,7 @@ "if": "socket:type2:voltage=230 V", "then": { "en": "Type 2 (mennekes) outputs 230 volt", - "nl": "Type 2 (mennekes) heeft een spanning van 230 volt", - "de": "Typ 2 (Mennekes) liefert 230 Volt" + "nl": "Type 2 (mennekes) heeft een spanning van 230 volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -2511,8 +2288,7 @@ "if": "socket:type2:voltage=400 V", "then": { "en": "Type 2 (mennekes) outputs 400 volt", - "nl": "Type 2 (mennekes) heeft een spanning van 400 volt", - "de": "Typ 2 (Mennekes) liefert 400 Volt" + "nl": "Type 2 (mennekes) heeft een spanning van 400 volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -2532,13 +2308,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Type 2 (mennekes)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Type 2 (mennekes)
    ?", - "de": "Welche Stromstärke liefern die Stecker mit
    Typ 2 (Mennekes)
    ?" + "nl": "Welke stroom levert de stekker van type
    Type 2 (mennekes)
    ?" }, "render": { "en": "
    Type 2 (mennekes)
    outputs at most {socket:type2:current}A", - "nl": "
    Type 2 (mennekes)
    levert een stroom van maximaal {socket:type2:current}A", - "de": "
    Typ 2 (Mennekes)
    liefert maximal {socket:type2:current} A" + "nl": "
    Type 2 (mennekes)
    levert een stroom van maximaal {socket:type2:current}A" }, "freeform": { "key": "socket:type2:current", @@ -2549,8 +2323,7 @@ "if": "socket:type2:current=16 A", "then": { "en": "Type 2 (mennekes) outputs at most 16 A", - "nl": "Type 2 (mennekes) levert een stroom van maximaal 16 A", - "de": "Typ 2 (Mennekes) liefert maximal 16 A" + "nl": "Type 2 (mennekes) levert een stroom van maximaal 16 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -2561,8 +2334,7 @@ "if": "socket:type2:current=32 A", "then": { "en": "Type 2 (mennekes) outputs at most 32 A", - "nl": "Type 2 (mennekes) levert een stroom van maximaal 32 A", - "de": "Typ 2 (Mennekes) liefert maximal 32 A" + "nl": "Type 2 (mennekes) levert een stroom van maximaal 32 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -2582,13 +2354,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Type 2 (mennekes)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Type 2 (mennekes)
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Typ 2 (Mennekes)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Type 2 (mennekes)
    ?" }, "render": { "en": "
    Type 2 (mennekes)
    outputs at most {socket:type2:output}", - "nl": "
    Type 2 (mennekes)
    levert een vermogen van maximaal {socket:type2:output}", - "de": "
    Typ 2 (Mennekes)
    liefert maximal {socket:type2:output}" + "nl": "
    Type 2 (mennekes)
    levert een vermogen van maximaal {socket:type2:output}" }, "freeform": { "key": "socket:type2:output", @@ -2598,9 +2368,8 @@ { "if": "socket:type2:output=11 kW", "then": { - "en": "Type 2 (mennekes) outputs at most 11 kw A", - "nl": "Type 2 (mennekes) levert een vermogen van maximaal 11 kw A", - "de": "Typ 2 (Mennekes) liefert maximal 11 kw A" + "en": "Type 2 (mennekes) outputs at most 11 kW A", + "nl": "Type 2 (mennekes) levert een vermogen van maximaal 11 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -2610,9 +2379,8 @@ { "if": "socket:type2:output=22 kW", "then": { - "en": "Type 2 (mennekes) outputs at most 22 kw A", - "nl": "Type 2 (mennekes) levert een vermogen van maximaal 22 kw A", - "de": "Typ 2 (Mennekes) liefert maximal 22 kw A" + "en": "Type 2 (mennekes) outputs at most 22 kW A", + "nl": "Type 2 (mennekes) levert een vermogen van maximaal 22 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -2632,13 +2400,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Type 2 CCS (mennekes)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Type 2 CCS (mennekes)
    ", - "de": "Welche Spannung liefern die Stecker mit
    Typ 2 CCS (Mennekes)
    ?" + "nl": "Welke spanning levert de stekker van type
    Type 2 CCS (mennekes)
    " }, "render": { "en": "
    Type 2 CCS (mennekes)
    outputs {socket:type2_combo:voltage} volt", - "nl": "
    Type 2 CCS (mennekes)
    heeft een spanning van {socket:type2_combo:voltage} volt", - "de": "
    Typ 2 CCS (Mennekes)
    liefert {socket:type2_combo:voltage} Volt" + "nl": "
    Type 2 CCS (mennekes)
    heeft een spanning van {socket:type2_combo:voltage} volt" }, "freeform": { "key": "socket:type2_combo:voltage", @@ -2649,8 +2415,7 @@ "if": "socket:type2_combo:voltage=500 V", "then": { "en": "Type 2 CCS (mennekes) outputs 500 volt", - "nl": "Type 2 CCS (mennekes) heeft een spanning van 500 volt", - "de": "Typ 2 CCS (Mennekes) liefert 500 Volt" + "nl": "Type 2 CCS (mennekes) heeft een spanning van 500 volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2661,8 +2426,7 @@ "if": "socket:type2_combo:voltage=920 V", "then": { "en": "Type 2 CCS (mennekes) outputs 920 volt", - "nl": "Type 2 CCS (mennekes) heeft een spanning van 920 volt", - "de": "Typ 2 CCS (Mennekes) liefert 920 Volt" + "nl": "Type 2 CCS (mennekes) heeft een spanning van 920 volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2682,13 +2446,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Type 2 CCS (mennekes)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Type 2 CCS (mennekes)
    ?", - "de": "Welche Stromstärke liefern die Stecker mit
    Typ 2 CCS (Mennekes)
    ?" + "nl": "Welke stroom levert de stekker van type
    Type 2 CCS (mennekes)
    ?" }, "render": { "en": "
    Type 2 CCS (mennekes)
    outputs at most {socket:type2_combo:current}A", - "nl": "
    Type 2 CCS (mennekes)
    levert een stroom van maximaal {socket:type2_combo:current}A", - "de": "
    Typ 2 CCS (Mennekes)
    liefern maximal {socket:type2_combo:current} A" + "nl": "
    Type 2 CCS (mennekes)
    levert een stroom van maximaal {socket:type2_combo:current}A" }, "freeform": { "key": "socket:type2_combo:current", @@ -2699,8 +2461,7 @@ "if": "socket:type2_combo:current=125 A", "then": { "en": "Type 2 CCS (mennekes) outputs at most 125 A", - "nl": "Type 2 CCS (mennekes) levert een stroom van maximaal 125 A", - "de": "Typ 2 CCS (Mennekes) liefert maximal 125 A" + "nl": "Type 2 CCS (mennekes) levert een stroom van maximaal 125 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2711,8 +2472,7 @@ "if": "socket:type2_combo:current=350 A", "then": { "en": "Type 2 CCS (mennekes) outputs at most 350 A", - "nl": "Type 2 CCS (mennekes) levert een stroom van maximaal 350 A", - "de": "Typ 2 CCS (Mennekes) liefert maximal 350 A" + "nl": "Type 2 CCS (mennekes) levert een stroom van maximaal 350 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2732,13 +2492,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Type 2 CCS (mennekes)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Type 2 CCS (mennekes)
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Typ 2 CCS (Mennekes)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Type 2 CCS (mennekes)
    ?" }, "render": { "en": "
    Type 2 CCS (mennekes)
    outputs at most {socket:type2_combo:output}", - "nl": "
    Type 2 CCS (mennekes)
    levert een vermogen van maximaal {socket:type2_combo:output}", - "de": "
    Typ 2 CCS (Mennekes)
    liefert maximal {socket:type2_combo:output}" + "nl": "
    Type 2 CCS (mennekes)
    levert een vermogen van maximaal {socket:type2_combo:output}" }, "freeform": { "key": "socket:type2_combo:output", @@ -2748,9 +2506,8 @@ { "if": "socket:type2_combo:output=50 kW", "then": { - "en": "Type 2 CCS (mennekes) outputs at most 50 kw A", - "nl": "Type 2 CCS (mennekes) levert een vermogen van maximaal 50 kw A", - "de": "Typ 2 CCS (Mennekes) liefert maximal 50 kw A" + "en": "Type 2 CCS (mennekes) outputs at most 50 kW A", + "nl": "Type 2 CCS (mennekes) levert een vermogen van maximaal 50 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2770,13 +2527,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Type 2 with cable (mennekes)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Type 2 met kabel (J1772)
    ", - "de": "Welche Spannung liefern die Stecker mit
    Typ 2 mit Kabel (Mennekes)
    ?" + "nl": "Welke spanning levert de stekker van type
    Type 2 met kabel (J1772)
    " }, "render": { "en": "
    Type 2 with cable (mennekes)
    outputs {socket:type2_cable:voltage} volt", - "nl": "
    Type 2 met kabel (J1772)
    heeft een spanning van {socket:type2_cable:voltage} volt", - "de": "
    Typ 2 mit Kabel (Mennekes)
    liefert {socket:type2_cable:voltage} Volt" + "nl": "
    Type 2 met kabel (J1772)
    heeft een spanning van {socket:type2_cable:voltage} volt" }, "freeform": { "key": "socket:type2_cable:voltage", @@ -2787,8 +2542,7 @@ "if": "socket:type2_cable:voltage=230 V", "then": { "en": "Type 2 with cable (mennekes) outputs 230 volt", - "nl": "Type 2 met kabel (J1772) heeft een spanning van 230 volt", - "de": "Typ 2 mit Kabel (Mennekes) liefert 230 Volt" + "nl": "Type 2 met kabel (J1772) heeft een spanning van 230 volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2799,8 +2553,7 @@ "if": "socket:type2_cable:voltage=400 V", "then": { "en": "Type 2 with cable (mennekes) outputs 400 volt", - "nl": "Type 2 met kabel (J1772) heeft een spanning van 400 volt", - "de": "Typ 2 mit Kabel (Mennekes) liefert 400 Volt" + "nl": "Type 2 met kabel (J1772) heeft een spanning van 400 volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2820,13 +2573,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Type 2 with cable (mennekes)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Type 2 met kabel (J1772)
    ?", - "de": "Welche Stromstärke liefern die Stecker mit
    Typ 2 mit Kabel (Mennekes)
    ?" + "nl": "Welke stroom levert de stekker van type
    Type 2 met kabel (J1772)
    ?" }, "render": { "en": "
    Type 2 with cable (mennekes)
    outputs at most {socket:type2_cable:current}A", - "nl": "
    Type 2 met kabel (J1772)
    levert een stroom van maximaal {socket:type2_cable:current}A", - "de": "
    Typ 2 mit Kabel (Mennekes)
    liefert maximal {socket:type2_cable:current} A" + "nl": "
    Type 2 met kabel (J1772)
    levert een stroom van maximaal {socket:type2_cable:current}A" }, "freeform": { "key": "socket:type2_cable:current", @@ -2837,8 +2588,7 @@ "if": "socket:type2_cable:current=16 A", "then": { "en": "Type 2 with cable (mennekes) outputs at most 16 A", - "nl": "Type 2 met kabel (J1772) levert een stroom van maximaal 16 A", - "de": "Typ 2 mit Kabel (Mennekes) liefert maximal 16 A" + "nl": "Type 2 met kabel (J1772) levert een stroom van maximaal 16 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2849,8 +2599,7 @@ "if": "socket:type2_cable:current=32 A", "then": { "en": "Type 2 with cable (mennekes) outputs at most 32 A", - "nl": "Type 2 met kabel (J1772) levert een stroom van maximaal 32 A", - "de": "Typ 2 mit Kabel (Mennekes) liefert maximal 32 A" + "nl": "Type 2 met kabel (J1772) levert een stroom van maximaal 32 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2870,13 +2619,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Type 2 with cable (mennekes)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Type 2 met kabel (J1772)
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Typ 2 mit Kabel (Mennekes)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Type 2 met kabel (J1772)
    ?" }, "render": { "en": "
    Type 2 with cable (mennekes)
    outputs at most {socket:type2_cable:output}", - "nl": "
    Type 2 met kabel (J1772)
    levert een vermogen van maximaal {socket:type2_cable:output}", - "de": "
    Typ 2 mit Kabel (Mennekes)
    liefert maximal {socket:type2_cable:output}" + "nl": "
    Type 2 met kabel (J1772)
    levert een vermogen van maximaal {socket:type2_cable:output}" }, "freeform": { "key": "socket:type2_cable:output", @@ -2886,9 +2633,8 @@ { "if": "socket:type2_cable:output=11 kW", "then": { - "en": "Type 2 with cable (mennekes) outputs at most 11 kw A", - "nl": "Type 2 met kabel (J1772) levert een vermogen van maximaal 11 kw A", - "de": "Typ 2 mit Kabel (Mennekes) liefert maximal 11 kw A" + "en": "Type 2 with cable (mennekes) outputs at most 11 kW A", + "nl": "Type 2 met kabel (J1772) levert een vermogen van maximaal 11 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2898,9 +2644,8 @@ { "if": "socket:type2_cable:output=22 kW", "then": { - "en": "Type 2 with cable (mennekes) outputs at most 22 kw A", - "nl": "Type 2 met kabel (J1772) levert een vermogen van maximaal 22 kw A", - "de": "Typ 2 mit Kabel (Mennekes) liefert maximal 22 kw A" + "en": "Type 2 with cable (mennekes) outputs at most 22 kW A", + "nl": "Type 2 met kabel (J1772) levert een vermogen van maximaal 22 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2919,14 +2664,12 @@ "id": "voltage-10", "group": "technical", "question": { - "en": "What voltage do the plugs with
    Tesla Supercharger CCS (a branded Type 2 CSS)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ", - "de": "Welche Spannung bieten die
    Tesla Supercharger CCS (Typ 2 CSS von Tesla)
    ?" + "en": "What voltage do the plugs with
    Tesla Supercharger CCS (a branded type2_css)
    offer?", + "nl": "Welke spanning levert de stekker van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    " }, "render": { - "en": "
    Tesla Supercharger CCS (a branded Type 2 CSS)
    outputs {socket:tesla_supercharger_ccs:voltage} volt", - "nl": "
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    heeft een spanning van {socket:tesla_supercharger_ccs:voltage} volt", - "de": "
    Tesla Supercharger CCS (Typ 2 CSS von Tesla)
    liefert {socket:tesla_supercharger_ccs:voltage} Volt" + "en": "
    Tesla Supercharger CCS (a branded type2_css)
    outputs {socket:tesla_supercharger_ccs:voltage} volt", + "nl": "
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    heeft een spanning van {socket:tesla_supercharger_ccs:voltage} volt" }, "freeform": { "key": "socket:tesla_supercharger_ccs:voltage", @@ -2936,9 +2679,8 @@ { "if": "socket:tesla_supercharger_ccs:voltage=500 V", "then": { - "en": "Tesla Supercharger CCS (a branded Type 2 CSS) outputs 500 volt", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) heeft een spanning van 500 volt", - "de": "Tesla Supercharger CCS (Typ 2 CSS von Tesla) liefert 500 Volt" + "en": "Tesla Supercharger CCS (a branded type2_css) outputs 500 volt", + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) heeft een spanning van 500 volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2948,9 +2690,8 @@ { "if": "socket:tesla_supercharger_ccs:voltage=920 V", "then": { - "en": "Tesla Supercharger CCS (a branded Type 2 CSS) outputs 920 volt", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) heeft een spanning van 920 volt", - "de": "Tesla Supercharger CCS (Typ 2 CSS von Tesla) liefert 920 Volt" + "en": "Tesla Supercharger CCS (a branded type2_css) outputs 920 volt", + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) heeft een spanning van 920 volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2970,13 +2711,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Tesla Supercharger CCS (a branded type2_css)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ?", - "de": "Welche Stromstärke bieten die Anschlüsse mit
    Tesla Supercharger CCS (Typ2 CSS von Tesla)
    ?" + "nl": "Welke stroom levert de stekker van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ?" }, "render": { "en": "
    Tesla Supercharger CCS (a branded type2_css)
    outputs at most {socket:tesla_supercharger_ccs:current}A", - "nl": "
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    levert een stroom van maximaal {socket:tesla_supercharger_ccs:current}A", - "de": "
    Tesla Supercharger CCS (Typ 2 CSS)
    liefert maximal {socket:tesla_supercharger_ccs:current} A" + "nl": "
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    levert een stroom van maximaal {socket:tesla_supercharger_ccs:current}A" }, "freeform": { "key": "socket:tesla_supercharger_ccs:current", @@ -2987,8 +2726,7 @@ "if": "socket:tesla_supercharger_ccs:current=125 A", "then": { "en": "Tesla Supercharger CCS (a branded type2_css) outputs at most 125 A", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) levert een stroom van maximaal 125 A", - "de": "Tesla Supercharger CCS (Typ 2 CSS) liefert maximal 125 A" + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) levert een stroom van maximaal 125 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2999,8 +2737,7 @@ "if": "socket:tesla_supercharger_ccs:current=350 A", "then": { "en": "Tesla Supercharger CCS (a branded type2_css) outputs at most 350 A", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) levert een stroom van maximaal 350 A", - "de": "Tesla Supercharger CCS (Typ 2 CSS) liefert maximal 350 A" + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) levert een stroom van maximaal 350 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -3019,14 +2756,12 @@ "id": "power-output-10", "group": "technical", "question": { - "en": "What power output does a single plug of type
    Tesla Supercharger CCS (a branded Type 2 CSS)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker des Typs
    Tesla Supercharger CCS (Typ 2 CSS von Tesla)
    ?" + "en": "What power output does a single plug of type
    Tesla Supercharger CCS (a branded type2_css)
    offer?", + "nl": "Welk vermogen levert een enkele stekker van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ?" }, "render": { - "en": "
    Tesla Supercharger CCS (a branded Type 2 CSS)
    outputs at most {socket:tesla_supercharger_ccs:output}", - "nl": "
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    levert een vermogen van maximaal {socket:tesla_supercharger_ccs:output}", - "de": "
    Tesla Supercharger CCS (Typ 2 CSS von Tesla)
    liefert maximal {socket:tesla_supercharger_ccs:output}" + "en": "
    Tesla Supercharger CCS (a branded type2_css)
    outputs at most {socket:tesla_supercharger_ccs:output}", + "nl": "
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    levert een vermogen van maximaal {socket:tesla_supercharger_ccs:output}" }, "freeform": { "key": "socket:tesla_supercharger_ccs:output", @@ -3036,9 +2771,8 @@ { "if": "socket:tesla_supercharger_ccs:output=50 kW", "then": { - "en": "Tesla Supercharger CCS (a branded Type 2 CSS) outputs at most 50 kw A", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) levert een vermogen van maximaal 50 kw A", - "de": "Tesla Supercharger CCS (Typ 2 CSS von Tesla) liefert maximal 50 kw A" + "en": "Tesla Supercharger CCS (a branded type2_css) outputs at most 50 kW A", + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) levert een vermogen van maximaal 50 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -3057,14 +2791,12 @@ "id": "voltage-11", "group": "technical", "question": { - "en": "What voltage do the plugs with
    Tesla Supercharger (Destination)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Tesla Supercharger (destination)
    ", - "de": "Welche Spannung bieten die
    Tesla Supercharger (Destination)
    ?" + "en": "What voltage do the plugs with
    Tesla Supercharger (destination)
    offer?", + "nl": "Welke spanning levert de stekker van type
    Tesla Supercharger (destination)
    " }, "render": { - "en": "
    Tesla Supercharger (Destination)
    outputs {socket:tesla_destination:voltage} volt", - "nl": "
    Tesla Supercharger (destination)
    heeft een spanning van {socket:tesla_destination:voltage} volt", - "de": "
    Tesla Supercharger (Destination)
    liefert {socket:tesla_destination:voltage} Volt" + "en": "
    Tesla Supercharger (destination)
    outputs {socket:tesla_destination:voltage} volt", + "nl": "
    Tesla Supercharger (destination)
    heeft een spanning van {socket:tesla_destination:voltage} volt" }, "freeform": { "key": "socket:tesla_destination:voltage", @@ -3074,9 +2806,8 @@ { "if": "socket:tesla_destination:voltage=480 V", "then": { - "en": "Tesla Supercharger (Destination) outputs 480 volt", - "nl": "Tesla Supercharger (destination) heeft een spanning van 480 volt", - "de": "Tesla Supercharger (Destination) liefert 480 Volt" + "en": "Tesla Supercharger (destination) outputs 480 volt", + "nl": "Tesla Supercharger (destination) heeft een spanning van 480 volt" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -3095,14 +2826,12 @@ "id": "current-11", "group": "technical", "question": { - "en": "What current do the plugs with
    Tesla Supercharger (Destination)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Tesla Supercharger (destination)
    ?", - "de": "Welche Stromstärke liefern die Anschlüsse mit
    Tesla Supercharger (Destination)
    ?" + "en": "What current do the plugs with
    Tesla Supercharger (destination)
    offer?", + "nl": "Welke stroom levert de stekker van type
    Tesla Supercharger (destination)
    ?" }, "render": { - "en": "
    Tesla Supercharger (Destination)
    outputs at most {socket:tesla_destination:current}A", - "nl": "
    Tesla Supercharger (destination)
    levert een stroom van maximaal {socket:tesla_destination:current}A", - "de": "
    Tesla Supercharger (Destination)
    liefert maximal {socket:tesla_destination:current} A" + "en": "
    Tesla Supercharger (destination)
    outputs at most {socket:tesla_destination:current}A", + "nl": "
    Tesla Supercharger (destination)
    levert een stroom van maximaal {socket:tesla_destination:current}A" }, "freeform": { "key": "socket:tesla_destination:current", @@ -3112,9 +2841,8 @@ { "if": "socket:tesla_destination:current=125 A", "then": { - "en": "Tesla Supercharger (Destination) outputs at most 125 A", - "nl": "Tesla Supercharger (destination) levert een stroom van maximaal 125 A", - "de": "Tesla Supercharger (Destination) liefert maximal 125 A" + "en": "Tesla Supercharger (destination) outputs at most 125 A", + "nl": "Tesla Supercharger (destination) levert een stroom van maximaal 125 A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -3124,9 +2852,8 @@ { "if": "socket:tesla_destination:current=350 A", "then": { - "en": "Tesla Supercharger (Destination) outputs at most 350 A", - "nl": "Tesla Supercharger (destination) levert een stroom van maximaal 350 A", - "de": "Tesla Supercharger (Destination) liefert maximal 350 A" + "en": "Tesla Supercharger (destination) outputs at most 350 A", + "nl": "Tesla Supercharger (destination) levert een stroom van maximaal 350 A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -3145,14 +2872,12 @@ "id": "power-output-11", "group": "technical", "question": { - "en": "What power output does a single plug of type
    Tesla Supercharger (Destination)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Tesla Supercharger (destination)
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker des Typs
    Tesla Supercharger (Destination)
    ?" + "en": "What power output does a single plug of type
    Tesla Supercharger (destination)
    offer?", + "nl": "Welk vermogen levert een enkele stekker van type
    Tesla Supercharger (destination)
    ?" }, "render": { - "en": "
    Tesla Supercharger (Destination)
    outputs at most {socket:tesla_destination:output}", - "nl": "
    Tesla Supercharger (destination)
    levert een vermogen van maximaal {socket:tesla_destination:output}", - "de": "
    Tesla Supercharger (Destination)
    liefert maximal {socket:tesla_destination:output}" + "en": "
    Tesla Supercharger (destination)
    outputs at most {socket:tesla_destination:output}", + "nl": "
    Tesla Supercharger (destination)
    levert een vermogen van maximaal {socket:tesla_destination:output}" }, "freeform": { "key": "socket:tesla_destination:output", @@ -3162,9 +2887,8 @@ { "if": "socket:tesla_destination:output=120 kW", "then": { - "en": "Tesla Supercharger (Destination) outputs at most 120 kw A", - "nl": "Tesla Supercharger (destination) levert een vermogen van maximaal 120 kw A", - "de": "Tesla Supercharger (Destination) liefert maximal 120 kw A" + "en": "Tesla Supercharger (destination) outputs at most 120 kW A", + "nl": "Tesla Supercharger (destination) levert een vermogen van maximaal 120 kW A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -3174,9 +2898,8 @@ { "if": "socket:tesla_destination:output=150 kW", "then": { - "en": "Tesla Supercharger (Destination) outputs at most 150 kw A", - "nl": "Tesla Supercharger (destination) levert een vermogen van maximaal 150 kw A", - "de": "Tesla Supercharger (Destination) liefert maximal 150 kw A" + "en": "Tesla Supercharger (destination) outputs at most 150 kW A", + "nl": "Tesla Supercharger (destination) levert een vermogen van maximaal 150 kW A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -3186,9 +2909,8 @@ { "if": "socket:tesla_destination:output=250 kW", "then": { - "en": "Tesla Supercharger (Destination) outputs at most 250 kw A", - "nl": "Tesla Supercharger (destination) levert een vermogen van maximaal 250 kw A", - "de": "Tesla Supercharger (Destination) liefert maximal 250 kw A" + "en": "Tesla Supercharger (destination) outputs at most 250 kW A", + "nl": "Tesla Supercharger (destination) levert een vermogen van maximaal 250 kW A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -3207,14 +2929,12 @@ "id": "voltage-12", "group": "technical", "question": { - "en": "What voltage do the plugs with
    Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Tesla supercharger (destination). (Een Type 2 met kabel en Tesla-logo)
    ?", - "de": "Welche Spannung bieten die
    Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)
    ?" + "en": "What voltage do the plugs with
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    offer?", + "nl": "Welke spanning levert de stekker van type
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    " }, "render": { "en": "
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    outputs {socket:tesla_destination:voltage} volt", - "nl": "
    Tesla supercharger (destination). (Een Type 2 met kabel en Tesla-logo)
    heeft een spanning van {socket:tesla_destination:voltage} volt", - "de": "
    Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)
    liefert {socket:tesla_destination:voltage} Volt" + "nl": "
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    heeft een spanning van {socket:tesla_destination:voltage} volt" }, "freeform": { "key": "socket:tesla_destination:voltage", @@ -3224,9 +2944,8 @@ { "if": "socket:tesla_destination:voltage=230 V", "then": { - "en": "Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla) outputs 230 volt", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 230 volt", - "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla) liefert 230 Volt" + "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla) outputs 230 volt", + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 230 volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -3236,9 +2955,8 @@ { "if": "socket:tesla_destination:voltage=400 V", "then": { - "en": "Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla) outputs 400 volt", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 400 volt", - "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla) liefert 400 Volt" + "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla) outputs 400 volt", + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 400 volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -3257,14 +2975,12 @@ "id": "current-12", "group": "technical", "question": { - "en": "What current do the plugs with
    Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    ?", - "de": "Welche Stromstärke liefern die Stecker mit
    Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)
    ?" + "en": "What current do the plugs with
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    offer?", + "nl": "Welke stroom levert de stekker van type
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    ?" }, "render": { - "en": "
    Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla)
    outputs at most {socket:tesla_destination:current}A", - "nl": "
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    levert een stroom van maximaal {socket:tesla_destination:current}A", - "de": "
    Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)
    liefert maximal {socket:tesla_destination:current} A" + "en": "
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    outputs at most {socket:tesla_destination:current}A", + "nl": "
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    levert een stroom van maximaal {socket:tesla_destination:current}A" }, "freeform": { "key": "socket:tesla_destination:current", @@ -3274,9 +2990,8 @@ { "if": "socket:tesla_destination:current=16 A", "then": { - "en": "Tesla Supercharger (Destination) (A Type 2 with cable branded as tesla) outputs at most 16 A", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 16 A", - "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel) liefert maximal 16 A" + "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla) outputs at most 16 A", + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 16 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -3286,9 +3001,8 @@ { "if": "socket:tesla_destination:current=32 A", "then": { - "en": "Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla) outputs at most 32 A", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 32 A", - "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla) liefert maximal 32 A" + "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla) outputs at most 32 A", + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 32 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -3307,14 +3021,12 @@ "id": "power-output-12", "group": "technical", "question": { - "en": "What power output does a single plug of type
    Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker des Typs
    Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)
    ?" + "en": "What power output does a single plug of type
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    offer?", + "nl": "Welk vermogen levert een enkele stekker van type
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    ?" }, "render": { - "en": "
    Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla)
    outputs at most {socket:tesla_destination:output}", - "nl": "
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    levert een vermogen van maximaal {socket:tesla_destination:output}", - "de": "
    Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)
    liefert maximal {socket:tesla_destination:output}" + "en": "
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    outputs at most {socket:tesla_destination:output}", + "nl": "
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    levert een vermogen van maximaal {socket:tesla_destination:output}" }, "freeform": { "key": "socket:tesla_destination:output", @@ -3324,9 +3036,8 @@ { "if": "socket:tesla_destination:output=11 kW", "then": { - "en": "Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla) outputs at most 11 kw A", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een vermogen van maximaal 11 kw A", - "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla) liefert maximal 11 kw A" + "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla) outputs at most 11 kW A", + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een vermogen van maximaal 11 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -3336,9 +3047,8 @@ { "if": "socket:tesla_destination:output=22 kW", "then": { - "en": "Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla) outputs at most 22 kw A", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een vermogen van maximaal 22 kw A", - "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla) liefert maximal 22 kw A" + "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla) outputs at most 22 kW A", + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een vermogen van maximaal 22 kW A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -3358,13 +3068,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    USB to charge phones and small electronics
    offer?", - "nl": "Welke spanning levert de stekker van type
    USB om GSMs en kleine electronica op te laden
    ", - "de": "Welche Spannung liefern die Stecker mit
    USB zum Laden von Handys und kleinen Elektrogeräten
    ?" + "nl": "Welke spanning levert de stekker van type
    USB om GSMs en kleine electronica op te laden
    " }, "render": { "en": "
    USB to charge phones and small electronics
    outputs {socket:USB-A:voltage} volt", - "nl": "
    USB om GSMs en kleine electronica op te laden
    heeft een spanning van {socket:USB-A:voltage} volt", - "de": "
    USB zum Aufladen von Telefonen und kleinen Elektrogeräten
    liefert {socket:USB-A:voltage} Volt" + "nl": "
    USB om GSMs en kleine electronica op te laden
    heeft een spanning van {socket:USB-A:voltage} volt" }, "freeform": { "key": "socket:USB-A:voltage", @@ -3375,8 +3083,7 @@ "if": "socket:USB-A:voltage=5 V", "then": { "en": "USB to charge phones and small electronics outputs 5 volt", - "nl": "USB om GSMs en kleine electronica op te laden heeft een spanning van 5 volt", - "de": "USB zum Aufladen von Handys und kleinen Elektrogeräten liefert 5 Volt" + "nl": "USB om GSMs en kleine electronica op te laden heeft een spanning van 5 volt" }, "icon": { "path": "./assets/layers/charging_station/usb_port.svg", @@ -3396,15 +3103,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    USB to charge phones and small electronics
    offer?", - "nl": "Welke stroom levert de stekker van type
    USB om GSMs en kleine electronica op te laden
    ?", - "de": "Welche Stromstärke liefern die Stecker mit
    USB zum Laden von Handys und kleinen Elektrogeräten
    ?", - "es": "¿Qué corriente ofrecen los conectores con
    USB para cargar teléfonos y dispositivos electrónicos pequeños
    ?" + "nl": "Welke stroom levert de stekker van type
    USB om GSMs en kleine electronica op te laden
    ?" }, "render": { "en": "
    USB to charge phones and small electronics
    outputs at most {socket:USB-A:current}A", - "nl": "
    USB om GSMs en kleine electronica op te laden
    levert een stroom van maximaal {socket:USB-A:current}A", - "de": "
    USB zum Aufladen von Telefonen und kleinen Elektrogeräten
    liefert maximal {socket:USB-A:current} A", - "es": "
    USB para carga teléfonos y dispositivos electrónicos pequeños
    salida de hasta {socket:USB-A:current}A" + "nl": "
    USB om GSMs en kleine electronica op te laden
    levert een stroom van maximaal {socket:USB-A:current}A" }, "freeform": { "key": "socket:USB-A:current", @@ -3415,9 +3118,7 @@ "if": "socket:USB-A:current=1 A", "then": { "en": "USB to charge phones and small electronics outputs at most 1 A", - "nl": "USB om GSMs en kleine electronica op te laden levert een stroom van maximaal 1 A", - "de": "USB zum Laden von Handys und kleinen Elektrogeräten liefert maximal 1 A", - "es": "USB para cargar teléfonos y dispositivos electrónicos pequeños hasta 1 A" + "nl": "USB om GSMs en kleine electronica op te laden levert een stroom van maximaal 1 A" }, "icon": { "path": "./assets/layers/charging_station/usb_port.svg", @@ -3428,9 +3129,7 @@ "if": "socket:USB-A:current=2 A", "then": { "en": "USB to charge phones and small electronics outputs at most 2 A", - "nl": "USB om GSMs en kleine electronica op te laden levert een stroom van maximaal 2 A", - "de": "USB zum Laden von Handys und kleinen Elektrogeräten liefert maximal 2 A", - "es": "USB para cargar teléfonos y dispositivos electrónicos pequeños hasta 1 A" + "nl": "USB om GSMs en kleine electronica op te laden levert een stroom van maximaal 2 A" }, "icon": { "path": "./assets/layers/charging_station/usb_port.svg", @@ -3450,13 +3149,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    USB to charge phones and small electronics
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    USB om GSMs en kleine electronica op te laden
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker des Typs
    USB zum Aufladen von Handys und kleinen Elektrogeräten
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    USB om GSMs en kleine electronica op te laden
    ?" }, "render": { "en": "
    USB to charge phones and small electronics
    outputs at most {socket:USB-A:output}", - "nl": "
    USB om GSMs en kleine electronica op te laden
    levert een vermogen van maximaal {socket:USB-A:output}", - "de": "
    USB zum Aufladen von Telefonen und kleiner Elektrogeräte
    liefert maximal {socket:USB-A:output}" + "nl": "
    USB om GSMs en kleine electronica op te laden
    levert een vermogen van maximaal {socket:USB-A:output}" }, "freeform": { "key": "socket:USB-A:output", @@ -3466,9 +3163,8 @@ { "if": "socket:USB-A:output=5W", "then": { - "en": "USB to charge phones and small electronics outputs at most 5w A", - "nl": "USB om GSMs en kleine electronica op te laden levert een vermogen van maximaal 5w A", - "de": "USB zum Laden von Handys und kleinen Elektrogeräten liefert maximal 5w A" + "en": "USB to charge phones and small electronics outputs at most 5W A", + "nl": "USB om GSMs en kleine electronica op te laden levert een vermogen van maximaal 5W A" }, "icon": { "path": "./assets/layers/charging_station/usb_port.svg", @@ -3478,9 +3174,8 @@ { "if": "socket:USB-A:output=10W", "then": { - "en": "USB to charge phones and small electronics outputs at most 10w A", - "nl": "USB om GSMs en kleine electronica op te laden levert een vermogen van maximaal 10w A", - "de": "USB zum Laden von Handys und kleinen Elektrogeräten liefert maximal 10w A" + "en": "USB to charge phones and small electronics outputs at most 10W A", + "nl": "USB om GSMs en kleine electronica op te laden levert een vermogen van maximaal 10W A" }, "icon": { "path": "./assets/layers/charging_station/usb_port.svg", @@ -3500,13 +3195,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Bosch Active Connect with 3 pins and cable
    offer?", - "nl": "Welke spanning levert de stekker van type
    Bosch Active Connect met 3 pinnen aan een kabel
    ", - "de": "Welche Spannung bieten die Stecker mit
    Bosch Active Connect mit 3 Pins und Kabel
    ?" + "nl": "Welke spanning levert de stekker van type
    Bosch Active Connect met 3 pinnen aan een kabel
    " }, "render": { "en": "
    Bosch Active Connect with 3 pins and cable
    outputs {socket:bosch_3pin:voltage} volt", - "nl": "
    Bosch Active Connect met 3 pinnen aan een kabel
    heeft een spanning van {socket:bosch_3pin:voltage} volt", - "de": "
    Bosch Active Connect mit 3 Pins und Kabel
    liefert {socket:bosch_3pin:voltage} Volt" + "nl": "
    Bosch Active Connect met 3 pinnen aan een kabel
    heeft een spanning van {socket:bosch_3pin:voltage} volt" }, "freeform": { "key": "socket:bosch_3pin:voltage", @@ -3525,13 +3218,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Bosch Active Connect with 3 pins and cable
    offer?", - "nl": "Welke stroom levert de stekker van type
    Bosch Active Connect met 3 pinnen aan een kabel
    ?", - "de": "Welche Stromstärke liefern die Stecker mit
    Bosch Active Connect mit 3 Pins und Kabel
    ?" + "nl": "Welke stroom levert de stekker van type
    Bosch Active Connect met 3 pinnen aan een kabel
    ?" }, "render": { "en": "
    Bosch Active Connect with 3 pins and cable
    outputs at most {socket:bosch_3pin:current}A", - "nl": "
    Bosch Active Connect met 3 pinnen aan een kabel
    levert een stroom van maximaal {socket:bosch_3pin:current}A", - "de": "
    Bosch Active Connect mit 3 Pins und Kabel
    liefern maximal {socket:bosch_3pin:current} A" + "nl": "
    Bosch Active Connect met 3 pinnen aan een kabel
    levert een stroom van maximaal {socket:bosch_3pin:current}A" }, "freeform": { "key": "socket:bosch_3pin:current", @@ -3550,13 +3241,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Bosch Active Connect with 3 pins and cable
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Bosch Active Connect met 3 pinnen aan een kabel
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Bosch Active Connect mit 3 Pins und Kabel
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Bosch Active Connect met 3 pinnen aan een kabel
    ?" }, "render": { "en": "
    Bosch Active Connect with 3 pins and cable
    outputs at most {socket:bosch_3pin:output}", - "nl": "
    Bosch Active Connect met 3 pinnen aan een kabel
    levert een vermogen van maximaal {socket:bosch_3pin:output}", - "de": "
    Bosch Active Connect mit 3 Pins und Kabel
    liefert maximal {socket:bosch_3pin:output}" + "nl": "
    Bosch Active Connect met 3 pinnen aan een kabel
    levert een vermogen van maximaal {socket:bosch_3pin:output}" }, "freeform": { "key": "socket:bosch_3pin:output", @@ -3575,13 +3264,11 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Bosch Active Connect with 5 pins and cable
    offer?", - "nl": "Welke spanning levert de stekker van type
    Bosch Active Connect met 5 pinnen aan een kabel
    ", - "de": "Welche Spannung liefern die
    Bosch Active Connect mit 5 Pins und Kabel
    ?" + "nl": "Welke spanning levert de stekker van type
    Bosch Active Connect met 5 pinnen aan een kabel
    " }, "render": { "en": "
    Bosch Active Connect with 5 pins and cable
    outputs {socket:bosch_5pin:voltage} volt", - "nl": "
    Bosch Active Connect met 5 pinnen aan een kabel
    heeft een spanning van {socket:bosch_5pin:voltage} volt", - "de": "
    Bosch Active Connect mit 5 Pins und Kabel
    liefert {socket:bosch_5pin:voltage} Volt" + "nl": "
    Bosch Active Connect met 5 pinnen aan een kabel
    heeft een spanning van {socket:bosch_5pin:voltage} volt" }, "freeform": { "key": "socket:bosch_5pin:voltage", @@ -3600,13 +3287,11 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Bosch Active Connect with 5 pins and cable
    offer?", - "nl": "Welke stroom levert de stekker van type
    Bosch Active Connect met 5 pinnen aan een kabel
    ?", - "de": "Welche Stromstärke liefern die Stecker mit
    Bosch Active Connect mit 5 Pins und Kabel
    ?" + "nl": "Welke stroom levert de stekker van type
    Bosch Active Connect met 5 pinnen aan een kabel
    ?" }, "render": { "en": "
    Bosch Active Connect with 5 pins and cable
    outputs at most {socket:bosch_5pin:current}A", - "nl": "
    Bosch Active Connect met 5 pinnen aan een kabel
    levert een stroom van maximaal {socket:bosch_5pin:current}A", - "de": "
    Bosch Active Connect mit 5 Pins und Kabel
    liefern maximal {socket:bosch_5pin:current} A" + "nl": "
    Bosch Active Connect met 5 pinnen aan een kabel
    levert een stroom van maximaal {socket:bosch_5pin:current}A" }, "freeform": { "key": "socket:bosch_5pin:current", @@ -3625,13 +3310,11 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Bosch Active Connect with 5 pins and cable
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Bosch Active Connect met 5 pinnen aan een kabel
    ?", - "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Bosch Active Connect mit 5 Pins und Kabel
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Bosch Active Connect met 5 pinnen aan een kabel
    ?" }, "render": { "en": "
    Bosch Active Connect with 5 pins and cable
    outputs at most {socket:bosch_5pin:output}", - "nl": "
    Bosch Active Connect met 5 pinnen aan een kabel
    levert een vermogen van maximaal {socket:bosch_5pin:output}", - "de": "
    Bosch Active Connect mit 5 Pins und Kabel
    liefert maximal {socket:bosch_5pin:output}" + "nl": "
    Bosch Active Connect met 5 pinnen aan een kabel
    levert een vermogen van maximaal {socket:bosch_5pin:output}" }, "freeform": { "key": "socket:bosch_5pin:output", @@ -3654,18 +3337,14 @@ }, "question": { "en": "When is this charging station opened?", - "nl": "Wanneer is dit oplaadpunt beschikbaar??", - "de": "Wann ist diese Ladestation geöffnet?", - "es": "¿Cuándo abre esta estación de carga?" + "nl": "Wanneer is dit oplaadpunt beschikbaar??" }, "mappings": [ { "if": "opening_hours=24/7", "then": { "en": "24/7 opened (including holidays)", - "nl": "24/7 open - ook tijdens vakanties", - "de": "Die Station ist durchgehend geöffnet (einschließlich Feiertage)", - "es": "Abre 24/7 (incluidos días festivos)" + "nl": "24/7 open - ook tijdens vakanties" } } ] @@ -3674,9 +3353,7 @@ "id": "fee", "question": { "en": "Does one have to pay to use this charging station?", - "nl": "Moet men betalen om dit oplaadpunt te gebruiken?", - "de": "Muss man für die Nutzung dieser Ladestation bezahlen?", - "es": "¿Hay que pagar para utilizar esta estación de carga?" + "nl": "Moet men betalen om dit oplaadpunt te gebruiken?" }, "mappings": [ { @@ -3690,8 +3367,7 @@ }, "then": { "nl": "Gratis te gebruiken (zonder aan te melden)", - "en": "Free to use (without authenticating)", - "de": "Die Nutzung ist kostenlos, keine Authentifizierung erforderlich" + "en": "Free to use (without authenticating)" } }, { @@ -3705,8 +3381,7 @@ }, "then": { "nl": "Gratis te gebruiken, maar aanmelden met een applicatie is verplicht", - "en": "Free to use, but one has to authenticate", - "de": "Die Nutzung ist kostenlos, Authentifizierung erforderlich" + "en": "Free to use, but one has to authenticate" } }, { @@ -3717,8 +3392,7 @@ }, "then": { "nl": "Gratis te gebruiken", - "en": "Free to use", - "de": "Kostenlose Nutzung" + "en": "Free to use" }, "hideInAnswer": true }, @@ -3731,9 +3405,7 @@ }, "then": { "nl": "Betalend te gebruiken, maar gratis voor klanten van het bijhorende hotel/café/ziekenhuis/...", - "en": "Paid use, but free for customers of the hotel/pub/hospital/… who operates the charging station", - "de": "Die Nutzung ist kostenpflichtig, aber für Kunden des Betreibers der Einrichtung, wie Hotel, Krankenhaus, … kostenlos", - "es": "De pago, pero gratis para clientes del hotel/pub/hostpital... quien opera la estación de carga" + "en": "Paid use, but free for customers of the hotel/pub/hospital/... who operates the charging station" } }, { @@ -3745,9 +3417,7 @@ }, "then": { "nl": "Betalend", - "en": "Paid use", - "de": "Die Nutzung ist kostenpflichtig", - "es": "Uso de pago" + "en": "Paid use" } } ] @@ -3756,15 +3426,11 @@ "id": "charge", "question": { "en": "How much does one have to pay to use this charging station?", - "nl": "Hoeveel moet men betalen om dit oplaadpunt te gebruiken?", - "de": "Wie viel muss man für die Nutzung dieser Ladestation bezahlen?", - "es": "¿Cuánto hay que pagar para utilizar esta estación de carga?" + "nl": "Hoeveel moet men betalen om dit oplaadpunt te gebruiken?" }, "render": { "en": "Using this charging station costs {charge}", - "nl": "Dit oplaadpunt gebruiken kost {charge}", - "de": "Die Nutzung dieser Ladestation kostet {charge}", - "es": "Utilizar esta estación de carga cuesta {charge}" + "nl": "Dit oplaadpunt gebruiken kost {charge}" }, "freeform": { "key": "charge" @@ -3788,10 +3454,7 @@ "#": "In some cases, charging is free but one has to be authenticated. We only ask for authentication if fee is no (or unset). By default one sees the questions for either the payment options or the authentication options, but normally not both", "question": { "en": "What kind of authentication is available at the charging station?", - "nl": "Hoe kan men zich aanmelden aan dit oplaadstation?", - "de": "Welche Art der Authentifizierung ist an der Ladestation möglich?", - "es": "¿Qué tipo de autenticación está disponible en esta estación de carga?", - "fr": "Quelle sorte d'authentification est disponible à cette station de charge ?" + "nl": "Hoe kan men zich aanmelden aan dit oplaadstation?" }, "multiAnswer": true, "mappings": [ @@ -3800,10 +3463,7 @@ "ifnot": "authentication:membership_card=no", "then": { "en": "Authentication by a membership card", - "nl": "Aanmelden met een lidkaart is mogelijk", - "de": "Authentifizierung per Mitgliedskarte", - "es": "Autenticación mediante tarjeta de membresía", - "fr": "Authentification par carte de membre" + "nl": "Aanmelden met een lidkaart is mogelijk" } }, { @@ -3811,10 +3471,7 @@ "ifnot": "authentication:app=no", "then": { "en": "Authentication by an app", - "nl": "Aanmelden via een applicatie is mogelijk", - "de": "Authentifizierung per App", - "es": "Autenticación mediante aplicación", - "fr": "Authentification par une app" + "nl": "Aanmelden via een applicatie is mogelijk" } }, { @@ -3822,10 +3479,7 @@ "ifnot": "authentication:phone_call=no", "then": { "en": "Authentication via phone call is available", - "nl": "Aanmelden door te bellen naar een telefoonnummer is mogelijk", - "de": "Authentifizierung per Anruf ist möglich", - "es": "Autenticación mediante llamada telefónica disponible", - "fr": "Authentification par appel téléphonique est disponible" + "nl": "Aanmelden door te bellen naar een telefoonnummer is mogelijk" } }, { @@ -3833,10 +3487,7 @@ "ifnot": "authentication:short_message=no", "then": { "en": "Authentication via SMS is available", - "nl": "Aanmelden via SMS is mogelijk", - "de": "Authentifizierung per SMS ist möglich", - "es": "Autenticación mediante SMS disponible", - "fr": "Authentification par SMS est disponible" + "nl": "Aanmelden via SMS is mogelijk" } }, { @@ -3844,10 +3495,7 @@ "ifnot": "authentication:nfc=no", "then": { "en": "Authentication via NFC is available", - "nl": "Aanmelden via NFC is mogelijk", - "de": "Authentifizierung per NFC ist möglich", - "es": "Autenticación mediante NFC disponible", - "fr": "Authentification par NFC est disponible" + "nl": "Aanmelden via NFC is mogelijk" } }, { @@ -3855,9 +3503,7 @@ "ifnot": "authentication:money_card=no", "then": { "en": "Authentication via Money Card is available", - "nl": "Aanmelden met Money Card is mogelijk", - "de": "Authentifizierung per Geldkarte ist möglich", - "es": "Autenticación mediante Money Card disponible" + "nl": "Aanmelden met Money Card is mogelijk" } }, { @@ -3865,10 +3511,7 @@ "ifnot": "authentication:debit_card=no", "then": { "en": "Authentication via debit card is available", - "nl": "Aanmelden met een betaalkaart is mogelijk", - "de": "Authentifizierung per Kreditkarte ist möglich", - "es": "Autenticación mediante tarjeta de débito disponible", - "fr": "Authentification par carte de débit est disponible" + "nl": "Aanmelden met een betaalkaart is mogelijk" } }, { @@ -3876,10 +3519,7 @@ "ifnot": "authentication:none=no", "then": { "en": "Charging here is (also) possible without authentication", - "nl": "Hier opladen is (ook) mogelijk zonder aan te melden", - "de": "Das Laden ist hier (auch) ohne Authentifizierung möglich", - "es": "La carga aquí (también) es posible sin autenticación", - "fr": "Charger ici est (aussi) possible sans authentification" + "nl": "Hier opladen is (ook) mogelijk zonder aan te melden" } } ], @@ -3894,14 +3534,11 @@ "id": "Auth phone", "render": { "en": "Authenticate by calling or SMS'ing to {authentication:phone_call:number}", - "nl": "Aanmelden door te bellen of te SMS'en naar {authentication:phone_call:number}", - "de": "Authentifizierung durch Anruf oder SMS an {authentication:phone_call:number}" + "nl": "Aanmelden door te bellen of te SMS'en naar {authentication:phone_call:number}" }, "question": { "en": "What's the phone number for authentication call or SMS?", - "nl": "Wat is het telefoonnummer dat men moet bellen of SMS'en om zich aan te melden?", - "de": "Wie lautet die Telefonnummer für den Authentifizierungsanruf oder die SMS?", - "es": "¿Cual es el número de teléfono para la llamada de autenticación o SMS?" + "nl": "Wat is het telefoonnummer dat men moet bellen of SMS'en om zich aan te melden?" }, "freeform": { "key": "authentication:phone_call:number", @@ -3918,27 +3555,21 @@ "id": "maxstay", "question": { "en": "What is the maximum amount of time one is allowed to stay here?", - "nl": "Hoelang mag een voertuig hier blijven staan?", - "de": "Wie lange darf man hier maximal parken?", - "es": "¿Cuál es la máxima cantidad de tiempo que se permite permanecer aquí?" + "nl": "Hoelang mag een voertuig hier blijven staan?" }, "freeform": { "key": "maxstay" }, "render": { "en": "One can stay at most {canonical(maxstay)}", - "nl": "De maximale parkeertijd hier is {canonical(maxstay)}", - "de": "Die maximale Parkdauer beträgt {canonical(maxstay)}", - "es": "Se puede estar como máximo {canonical(maxstay)}" + "nl": "De maximale parkeertijd hier is {canonical(maxstay)}" }, "mappings": [ { "if": "maxstay=unlimited", "then": { "en": "No timelimit on leaving your vehicle here", - "nl": "Geen maximum parkeertijd", - "de": "Keine Höchstparkdauer", - "es": "No hay límite de tiempo para dejar tu vehículo aquí" + "nl": "Geen maximum parkeertijd" } } ], @@ -3955,15 +3586,11 @@ "id": "Network", "render": { "en": "Part of the network {network}", - "nl": "Maakt deel uit van het {network}-netwerk", - "de": "Teil des Netzwerks {network}", - "es": "Parte de la red {network}" + "nl": "Maakt deel uit van het {network}-netwerk" }, "question": { "en": "Is this charging station part of a network?", - "nl": "Is dit oplaadpunt deel van een groter netwerk?", - "de": "Ist diese Ladestation Teil eines Netzwerks?", - "es": "¿Esta estación de carga forma parte de una red?" + "nl": "Is dit oplaadpunt deel van een groter netwerk?" }, "freeform": { "key": "network" @@ -3973,18 +3600,14 @@ "if": "no:network=yes", "then": { "en": "Not part of a bigger network, e.g. because the charging station is maintained by a local business", - "nl": "Maakt geen deel uit van een groter netwerk, een lokale zaak of organisatie beheert dit oplaadpunt", - "de": "Nicht Teil eines größeren Netzwerks, z. B. weil die Ladestation von einem lokalen Unternehmen betrieben wird", - "es": "No forma parte de una red más grande, ej. porque la estación de carga la mantiene un negocio local" + "nl": "Maakt geen deel uit van een groter netwerk, een lokale zaak of organisatie beheert dit oplaadpunt" } }, { "if": "network=none", "then": { "en": "Not part of a bigger network", - "nl": "Maakt geen deel uit van een groter netwerk", - "de": "Nicht Teil eines größeren Netzwerks", - "es": "No forma parte de una red mayor" + "nl": "Maakt geen deel uit van een groter netwerk" }, "hideInAnswer": true }, @@ -4030,15 +3653,11 @@ "id": "Operator", "question": { "en": "Who is the operator of this charging station?", - "nl": "Wie beheert dit oplaadpunt?", - "de": "Wer ist der Betreiber dieser Ladestation?", - "es": "¿Quien es la operadora de esta estación de carga?" + "nl": "Wie beheert dit oplaadpunt?" }, "render": { "en": "This charging station is operated by {operator}", - "nl": "Wordt beheerd door {operator}", - "de": "Die Station wird betrieben von {operator}", - "es": "Esta estación de carga la opera {operator}" + "nl": "Wordt beheerd door {operator}" }, "freeform": { "key": "operator" @@ -4052,9 +3671,7 @@ }, "then": { "en": "Actually, {operator} is the network", - "nl": "Eigenlijk is {operator} het netwerk waarvan het deel uitmaakt", - "de": "Eigentlich ist {operator} das Netzwerk", - "es": "De hecho, {operator} es la red" + "nl": "Eigenlijk is {operator} het netwerk waarvan het deel uitmaakt" }, "addExtraTags": [ "operator=" @@ -4068,15 +3685,11 @@ "id": "phone", "question": { "en": "What number can one call if there is a problem with this charging station?", - "nl": "Wat is het telefoonnummer van de beheerder van dit oplaadpunt?", - "de": "Welche Nummer kann man anrufen, wenn es ein Problem mit dieser Ladestation gibt?", - "es": "¿A qué número se puede llamar si hay un problema con esta estación de carga?" + "nl": "Wat is het telefoonnummer van de beheerder van dit oplaadpunt?" }, "render": { "en": "In case of problems, call {phone}", - "nl": "Bij problemen, bel naar {phone}", - "de": "Bei Problemen, anrufen unter {phone}", - "es": "En caso de problemas, llama a {phone}" + "nl": "Bij problemen, bel naar {phone}" }, "freeform": { "key": "phone", @@ -4087,15 +3700,11 @@ "id": "email", "question": { "en": "What is the email address of the operator?", - "nl": "Wat is het email-adres van de operator?", - "de": "Wie lautet die E-Mail-Adresse des Betreibers?", - "es": "¿Cual es la dirección de correo electrónico de esta operadora?" + "nl": "Wat is het email-adres van de operator?" }, "render": { "en": "In case of problems, send an email to {email}", - "nl": "Bij problemen, email naar {email}", - "de": "Bei Problemen senden Sie bitte eine E-Mail an {email}", - "es": "En caso de problemas, envía un correo electrónico a {email}" + "nl": "Bij problemen, email naar {email}" }, "freeform": { "key": "email", @@ -4106,13 +3715,11 @@ "id": "website", "question": { "en": "What is the website where one can find more information about this charging station?", - "nl": "Wat is de website waar men meer info kan vinden over dit oplaadpunt?", - "de": "Auf welcher Webseite kann man weitere Informationen über diese Ladestation finden?" + "nl": "Wat is de website waar men meer info kan vinden over dit oplaadpunt?" }, "render": { "en": "More info on {website}", - "nl": "Meer informatie op {website}", - "de": "Weitere Informationen unter {website}" + "nl": "Meer informatie op {website}" }, "freeform": { "key": "website", @@ -4124,15 +3731,11 @@ "id": "ref", "question": { "en": "What is the reference number of this charging station?", - "nl": "Wat is het referentienummer van dit oplaadstation?", - "de": "Welche Kennnummer hat die Ladestation?", - "es": "¿Cual es el número de referencia de esta estación de carga?" + "nl": "Wat is het referentienummer van dit oplaadstation?" }, "render": { "en": "Reference number is {ref}", - "nl": "Het referentienummer van dit oplaadpunt is {ref}", - "de": "Die Kennziffer ist {ref}", - "es": "El número de referencia es {ref}" + "nl": "Het referentienummer van dit oplaadpunt is {ref}" }, "freeform": { "key": "ref" @@ -4144,9 +3747,7 @@ "id": "Operational status", "question": { "en": "Is this charging point in use?", - "nl": "Is dit oplaadpunt operationeel?", - "de": "Ist die Station in Betrieb?", - "es": "¿Está en uso este punto de carga?" + "nl": "Is dit oplaadpunt operationeel?" }, "mappings": [ { @@ -4161,9 +3762,7 @@ }, "then": { "en": "This charging station works", - "nl": "Dit oplaadpunt werkt", - "de": "Die Station ist in Betrieb", - "es": "Esta estación de carga funciona" + "nl": "Dit oplaadpunt werkt" } }, { @@ -4178,9 +3777,7 @@ }, "then": { "en": "This charging station is broken", - "nl": "Dit oplaadpunt is kapot", - "de": "Die Station ist defekt", - "es": "Esta estación de carga está rota" + "nl": "Dit oplaadpunt is kapot" } }, { @@ -4195,9 +3792,7 @@ }, "then": { "en": "A charging station is planned here", - "nl": "Hier zal binnenkort een oplaadpunt gebouwd worden", - "de": "Die Station ist erst in Planung", - "es": "Una estación de carga está planeada aquí" + "nl": "Hier zal binnenkort een oplaadpunt gebouwd worden" } }, { @@ -4212,9 +3807,7 @@ }, "then": { "en": "A charging station is constructed here", - "nl": "Hier wordt op dit moment een oplaadpunt gebouwd", - "de": "Die Station ist aktuell im Bau", - "es": "Una estación de carga está construida aquí" + "nl": "Hier wordt op dit moment een oplaadpunt gebouwd" } }, { @@ -4229,9 +3822,7 @@ }, "then": { "en": "This charging station has beed permanently disabled and is not in use anymore but is still visible", - "nl": "Dit oplaadpunt is niet meer in gebruik maar is wel nog aanwezig", - "de": "Die Station ist dauerhaft geschlossen und nicht mehr in Nutzung, aber noch sichtbar", - "es": "Esta estación de carga se ha deshabilitado de forma permanente y ya no está en uso pero todavía es visible" + "nl": "Dit oplaadpunt is niet meer in gebruik maar is wel nog aanwezig" } } ] @@ -4240,27 +3831,21 @@ "id": "Parking:fee", "question": { "en": "Does one have to pay a parking fee while charging?", - "nl": "Moet men parkeergeld betalen tijdens het opladen?", - "de": "Muss man während des Ladens eine Parkgebühr bezahlen?", - "es": "¿Hay que pagar una tasa de aparcamiento mientras se carga?" + "nl": "Moet men parkeergeld betalen tijdens het opladen?" }, "mappings": [ { "if": "parking:fee=no", "then": { "en": "No additional parking cost while charging", - "nl": "Geen extra parkeerkost tijdens het opladen", - "de": "Keine zusätzlichen Parkkosten während des Ladens", - "es": "No hay costes de aparcamiento adicionales mientras se carga" + "nl": "Geen extra parkeerkost tijdens het opladen" } }, { "if": "parking:fee=yes", "then": { "en": "An additional parking fee should be paid while charging", - "nl": "Tijdens het opladen moet er parkeergeld betaald worden", - "de": "Während des Ladens ist eine zusätzliche Parkgebühr zu entrichten", - "es": "Se deberá de pagar una tasa adicional de aparcamiento mientras se carga" + "nl": "Tijdens het opladen moet er parkeergeld betaald worden" } } ], @@ -4282,8 +3867,7 @@ "group": "technical", "render": { "en": "

    Technical questions

    The questions below are very technical. Feel free to ignore them
    {questions}", - "nl": "

    Technische vragen

    De vragen hieronder zijn erg technisch - sla deze over indien je hier geen tijd voor hebt
    {questions}", - "de": "

    Technische Fragen

    Die folgenden Fragen sind sehr technisch. Sie können sie gerne ignorieren
    {questions}" + "nl": "

    Technische vragen

    De vragen hieronder zijn erg technisch - sla deze over indien je hier geen tijd voor hebt
    {questions}" } } ], @@ -4359,10 +3943,8 @@ "socket:typee=1" ], "title": { - "en": "a charging station for electrical bikes with a normal european wall plug (meant to charge electrical bikes)", - "nl": "een oplaadpunt voor elektrische fietsen met een gewoon Europees stopcontact (speciaal bedoeld voor fietsen)", - "de": "eine Ladestation für Elektrofahrräder mit einer normalen europäischen Steckdose (zum Laden von Elektrofahrrädern)", - "es": "una estación de carga para bicicletas eléctricas con un enchufe de pared europeo normal (pensado para cargar bicicletas eléctricas)" + "en": "charging station for electrical bikes with a normal european wall plug (meant to charge electrical bikes)", + "nl": "oplaadpunt voor elektrische fietsen" }, "preciseInput": { "preferredBackground": "map" @@ -4375,10 +3957,8 @@ "bicycle=no" ], "title": { - "en": "a charging station for cars", - "nl": "een oplaadstation voor elektrische auto's", - "de": "eine ladestation für e-bikes", - "es": "una estación de carga para coches" + "en": "charging station for cars", + "nl": "oplaadstation voor elektrische auto's" }, "preciseInput": { "preferredBackground": "map" @@ -4392,32 +3972,20 @@ { "question": { "en": "All vehicle types", - "nl": "Alle voertuigen", - "da": "Alle køretøjstyper", - "de": "Ladestationen für alle Fahrzeugtypen", - "es": "Todo tipo de vehículos", - "fr": "Tout type de véhicule" + "nl": "Alle voertuigen" } }, { "question": { "en": "Charging station for bicycles", - "nl": "Oplaadpunten voor fietsen", - "da": "Ladestation til cykler", - "de": "Ladestationen für Fahrräder", - "es": "Estación de carga para bicicletas", - "fr": "Station de charge pour vélos" + "nl": "Oplaadpunten voor fietsen" }, "osmTags": "bicycle=yes" }, { "question": { "en": "Charging station for cars", - "nl": "Oplaadpunten voor auto's", - "da": "Ladestation til biler", - "de": "Ladestationen für Autos", - "es": "Estación de carga para coches", - "fr": "Station de charge pour automobiles" + "nl": "Oplaadpunten voor auto's" }, "osmTags": { "or": [ @@ -4434,10 +4002,7 @@ { "question": { "en": "Only working charging stations", - "nl": "Enkel werkende oplaadpunten", - "da": "Kun fungerende ladestationer", - "de": "Nur Ladestationen in Betrieb", - "es": "Solo estaciones de carga funcionales" + "nl": "Enkel werkende oplaadpunten" }, "osmTags": { "and": [ @@ -4454,152 +4019,118 @@ { "question": { "en": "All connectors", - "nl": "Alle types", - "ca": "Tots els connectors", - "de": "Alle Anschlüsse", - "es": "Todos los conectores" + "nl": "Alle types" } }, { "question": { "en": "Has a
    Schuko wall plug without ground pin (CEE7/4 type F)
    connector", - "nl": "Heeft een
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ", - "de": "Verfügt über einen
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    " + "nl": "Heeft een
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    " }, "osmTags": "socket:schuko~*" }, { "question": { "en": "Has a
    European wall plug with ground pin (CEE7/4 type E)
    connector", - "nl": "Heeft een
    Europese stekker met aardingspin (CEE7/4 type E)
    ", - "de": "Verfügt über einen
    europäischen Netzstecker mit Erdungsstift (CEE7/4 Typ E)
    Anschluss", - "es": "Tiene un conector
    enchufe de pared Europeo con un pin de tierra (CEE7/4 tipo E
    " + "nl": "Heeft een
    Europese stekker met aardingspin (CEE7/4 type E)
    " }, "osmTags": "socket:typee~*" }, { "question": { "en": "Has a
    Chademo
    connector", - "nl": "Heeft een
    Chademo
    ", - "de": "Verfügt über einen
    Chademo
    Stecker", - "es": "Tiene un conector
    Chademo
    " + "nl": "Heeft een
    Chademo
    " }, "osmTags": "socket:chademo~*" }, { "question": { "en": "Has a
    Type 1 with cable (J1772)
    connector", - "nl": "Heeft een
    Type 1 met kabel (J1772)
    ", - "de": "Verfügt über einen
    Typ 1 (J1772)
    Stecker mit Kabel", - "es": "Tiene un conector de
    Tipo 1 con cable (J1772)
    " + "nl": "Heeft een
    Type 1 met kabel (J1772)
    " }, "osmTags": "socket:type1_cable~*" }, { "question": { - "en": "Has a
    Type 1 without cable (J1772)
    connector", - "nl": "Heeft een
    Type 1 zonder kabel (J1772)
    ", - "de": "Verfügt über einen
    Typ 1 (J1772)Stecker ohne Kabel
    ", - "es": "Tiene un conector de
    Tipo 1 sin cable (J1772)
    " + "en": "Has a
    Type 1 without cable (J1772)
    connector", + "nl": "Heeft een
    Type 1 zonder kabel (J1772)
    " }, "osmTags": "socket:type1~*" }, { "question": { - "en": "Has a
    Type 1 CCS (aka Type 1 Combo)
    connector", - "nl": "Heeft een
    Type 1 CCS (ook gekend als Type 1 Combo)
    ", - "de": "Verfügt über einen
    Typ 1 CCS (Typ 1 Combo)
    Stecker", - "es": "Tiene un conector
    Tipo 1 CCS (Combo Tipo 1)
    " + "en": "Has a
    Type 1 CCS (aka Type 1 Combo)
    connector", + "nl": "Heeft een
    Type 1 CCS (ook gekend als Type 1 Combo)
    " }, "osmTags": "socket:type1_combo~*" }, { "question": { "en": "Has a
    Tesla Supercharger
    connector", - "nl": "Heeft een
    Tesla Supercharger
    ", - "de": "Verfügt über einen
    Tesla Supercharger
    Stecker", - "es": "Tiene un conector
    Tesla Supercharger
    " + "nl": "Heeft een
    Tesla Supercharger
    " }, "osmTags": "socket:tesla_supercharger~*" }, { "question": { "en": "Has a
    Type 2 (mennekes)
    connector", - "nl": "Heeft een
    Type 2 (mennekes)
    ", - "de": "Hat einen
    Typ 2 (Mennekes)
    Anschluss", - "es": "Tiene un conector
    Tipo 2 (mennekes)
    " + "nl": "Heeft een
    Type 2 (mennekes)
    " }, "osmTags": "socket:type2~*" }, { "question": { "en": "Has a
    Type 2 CCS (mennekes)
    connector", - "nl": "Heeft een
    Type 2 CCS (mennekes)
    ", - "de": "Hat einen
    Typ 2 CCS (Mennekes)
    Anschluss", - "es": "Tiene un conector
    Tipo 2 CCS (mennekes
    " + "nl": "Heeft een
    Type 2 CCS (mennekes)
    " }, "osmTags": "socket:type2_combo~*" }, { "question": { "en": "Has a
    Type 2 with cable (mennekes)
    connector", - "nl": "Heeft een
    Type 2 met kabel (J1772)
    ", - "de": "Hat einen
    Typ 2 (Mennekes)
    Anschluss mit Kabel", - "es": "Tiene un conector
    Tipo 2 con cable (mennekes)
    " + "nl": "Heeft een
    Type 2 met kabel (J1772)
    " }, "osmTags": "socket:type2_cable~*" }, { "question": { "en": "Has a
    Tesla Supercharger CCS (a branded type2_css)
    connector", - "nl": "Heeft een
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ", - "de": "Hat einen
    Tesla Supercharger CCS (Typ 2 CSS vonTesla)
    Anschluss", - "es": "Tiene un conector
    Tesla Supercharger CCS (un tipo2_css de marca)
    " + "nl": "Heeft een
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    " }, "osmTags": "socket:tesla_supercharger_ccs~*" }, { "question": { "en": "Has a
    Tesla Supercharger (destination)
    connector", - "nl": "Heeft een
    Tesla Supercharger (destination)
    ", - "de": "Hat einen
    Tesla Supercharger (Destination)
    Anschluss", - "es": "Tiene un conector
    Tesla Supercharger (destination)
    " + "nl": "Heeft een
    Tesla Supercharger (destination)
    " }, "osmTags": "socket:tesla_destination~*" }, { "question": { - "en": "Has a
    Tesla Supercharger (Destination) (A Type 2 with cable branded as tesla)
    connector", - "nl": "Heeft een
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    ", - "de": "Hat einen
    Tesla Supercharger (Destination) (Typ 2 von Tesla)
    Anschluss mit Kabel", - "es": "Tiene un conector
    Tesla Supercharger (Destination) (Tipo2 A con un cable de marca tesla)
    " + "en": "Has a
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    connector", + "nl": "Heeft een
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    " }, "osmTags": "socket:tesla_destination~*" }, { "question": { "en": "Has a
    USB to charge phones and small electronics
    connector", - "nl": "Heeft een
    USB om GSMs en kleine electronica op te laden
    ", - "de": "Hat einen
    USB-Anschluss zum Aufladen von Telefonen und kleinen Elektrogeräten
    ", - "es": "Tiene un conector
    USB para cargar teléfonos y dispositivos electrónicos pequeños
    " + "nl": "Heeft een
    USB om GSMs en kleine electronica op te laden
    " }, "osmTags": "socket:USB-A~*" }, { "question": { "en": "Has a
    Bosch Active Connect with 3 pins and cable
    connector", - "nl": "Heeft een
    Bosch Active Connect met 3 pinnen aan een kabel
    ", - "de": "Hat einen
    Bosch Active Connect Anschluss mit 3 Pins
    und Kabel", - "es": "Tiene un conector
    Bosch Active Connect con 3 pines y cable
    " + "nl": "Heeft een
    Bosch Active Connect met 3 pinnen aan een kabel
    " }, "osmTags": "socket:bosch_3pin~*" }, { "question": { "en": "Has a
    Bosch Active Connect with 5 pins and cable
    connector", - "nl": "Heeft een
    Bosch Active Connect met 5 pinnen aan een kabel
    ", - "de": "Hat einen
    Bosch Active Connect Anschluss mit 5 Pins
    und Kabel", - "es": "Tiene un conector
    Bosch Active Connect con 5 pines y cable
    " + "nl": "Heeft een
    Bosch Active Connect met 5 pinnen aan een kabel
    " }, "osmTags": "socket:bosch_5pin~*" } @@ -4624,19 +4155,11 @@ ], "human": { "en": " minutes", - "nl": " minuten", - "ca": " minuts", - "de": " Minuten", - "es": " minutos", - "ru": " минут" + "nl": " minuten" }, "humanSingular": { "en": " minute", - "nl": " minuut", - "ca": " minut", - "de": " Minute", - "es": " minuto", - "ru": " минута" + "nl": " minuut" } }, { @@ -4652,19 +4175,11 @@ ], "human": { "en": " hours", - "nl": " uren", - "ca": " hores", - "de": " Stunden", - "es": " horas", - "ru": " часов" + "nl": " uren" }, "humanSingular": { "en": " hour", - "nl": " uur", - "ca": " hora", - "de": " Stunde", - "es": " hora", - "ru": " час" + "nl": " uur" } }, { @@ -4677,19 +4192,11 @@ ], "human": { "en": " days", - "nl": " day", - "ca": " dies", - "de": " Tage", - "es": " días", - "ru": " дней" + "nl": " day" }, "humanSingular": { "en": " day", - "nl": " dag", - "ca": " dia", - "de": " Tag", - "es": " día", - "ru": " день" + "nl": " dag" } } ] @@ -4725,11 +4232,7 @@ ], "human": { "en": "Volts", - "nl": "volt", - "ca": "Volts", - "de": "Volt", - "es": "Voltios", - "ru": "Вольт" + "nl": "volt" } } ], @@ -4765,10 +4268,7 @@ ], "human": { "en": "A", - "nl": "A", - "ca": "A", - "de": "Ein", - "es": "A" + "nl": "A" } } ], @@ -4801,11 +4301,7 @@ ], "human": { "en": "kilowatt", - "nl": "kilowatt", - "ca": "quilovats", - "de": "Kilowatt", - "es": "kilvatio", - "ru": "киловатт" + "nl": "kilowatt" } }, { @@ -4815,11 +4311,7 @@ ], "human": { "en": "megawatt", - "nl": "megawatt", - "ca": "megavats", - "de": "Megawatt", - "es": "megavatio", - "ru": "мегаватт" + "nl": "megawatt" } } ], diff --git a/assets/layers/shops/shops.json b/assets/layers/shops/shops.json index d72121c86..d2a4c3bd1 100644 --- a/assets/layers/shops/shops.json +++ b/assets/layers/shops/shops.json @@ -113,6 +113,57 @@ "email", "phone", "payment-options", + { + "id": "copyshop-print-sizes", + "condition": { + "or": [ + "shop~.*copyshop.*", + "shop~.*stationary.*", + "service:print=yes" + ] + }, + "question": { + "en": "What paper formats does this shop offer?" + }, + "multiAnswer": true, + "mappings": [ + { + "if": "service:print:A4=yes", + "then": { + "en": "This shop can print on papers of size A4" + }, + "ifnot": "service:print:A4=no" + }, + { + "if": "service:print:A3=yes", + "then": { + "en": "This shop can print on papers of size A3" + }, + "ifnot": "service:print:A3=no" + }, + { + "if": "service:print:A2=yes", + "then": { + "en": "This shop can print on papers of size A2" + }, + "ifnot": "service:print:A2=no" + }, + { + "if": "service:print:A1=yes", + "then": { + "en": "This shop can print on papers of size A1" + }, + "ifnot": "service:print:A1=no" + }, + { + "if": "service:print:A0=yes", + "then": { + "en": "This shop can print on papers of size A0" + }, + "ifnot": "service:print:A0=no" + } + ] + }, "questions", "reviews" ], diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index 0a5a43d44..36fb6d9e5 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -196,7 +196,7 @@ class LayerOverviewUtils { } main(args: string[]) { - + const forceReload = args.some(a => a == "--force") const licensePaths = new Set() @@ -205,7 +205,7 @@ class LayerOverviewUtils { } const doesImageExist = new DoesImageExist(licensePaths, existsSync) const sharedLayers = this.buildLayerIndex(doesImageExist, forceReload); - const recompiledThemes : string[] = [] + const recompiledThemes: string[] = [] const sharedThemes = this.buildThemeIndex(doesImageExist, sharedLayers, recompiledThemes, forceReload) writeFileSync("./assets/generated/known_layers_and_themes.json", JSON.stringify({ @@ -216,7 +216,7 @@ class LayerOverviewUtils { writeFileSync("./assets/generated/known_layers.json", JSON.stringify({layers: Array.from(sharedLayers.values())})) - if(recompiledThemes.length > 0) { + if (recompiledThemes.length > 0) { // mapcomplete-changes shows an icon for each corresponding mapcomplete-theme const iconsPerTheme = Array.from(sharedThemes.values()).map(th => ({ @@ -260,10 +260,14 @@ class LayerOverviewUtils { skippedLayers.push(sharedLayer.id) continue; } - - } - const parsed = JSON.parse(readFileSync(sharedLayerPath, "utf8")) + } + let parsed; + try { + parsed = JSON.parse(readFileSync(sharedLayerPath, "utf8")) + } catch (e) { + throw ("Could not parse or read file " + sharedLayerPath) + } const context = "While building builtin layer " + sharedLayerPath const fixed = prepLayer.convertStrict(parsed, context) @@ -283,6 +287,7 @@ class LayerOverviewUtils { this.writeLayer(fixed) + } console.log("Recompiled layers " + recompiledLayers.join(", ") + " and skipped " + skippedLayers.length + " layers") @@ -313,7 +318,7 @@ class LayerOverviewUtils { const usedLayers = Array.from(LayerOverviewUtils.extractLayerIdsFrom(themeFile, false)) .map(id => LayerOverviewUtils.layerPath + id + ".json") if (!forceReload && !this.shouldBeUpdated([themePath, ...usedLayers], targetPath)) { - fixed.set(themeFile.id, JSON.parse(readFileSync(LayerOverviewUtils.themePath+themeFile.id+".json", 'utf8'))) + fixed.set(themeFile.id, JSON.parse(readFileSync(LayerOverviewUtils.themePath + themeFile.id + ".json", 'utf8'))) skippedThemes.push(themeFile.id) continue; } From 46d611c8bb69781e887dcc0b7f140da23af29c10 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sat, 9 Jul 2022 17:22:59 +0200 Subject: [PATCH 48/71] Fix theme.html: fullscreen starts hidden until it is actually used --- theme.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theme.html b/theme.html index acbfb7cdf..e9a6b6e7c 100644 --- a/theme.html +++ b/theme.html @@ -48,7 +48,7 @@
    -
    +
    Date: Sat, 9 Jul 2022 17:25:38 +0200 Subject: [PATCH 49/71] Housekeeping... --- Docs/BuiltinIndex.md | 31 + Docs/BuiltinLayers.md | 8 + Docs/Layers/bike_parking.md | 1 + Docs/Layers/crossings.md | 1 + Docs/Layers/cycleways_and_roads.md | 6 +- Docs/Layers/doctors.md | 176 +++ Docs/Layers/dogshop.md | 305 +++- Docs/Layers/hospital.md | 141 ++ Docs/Layers/id_presets.md | 398 +++++ Docs/Layers/kerbs.md | 128 ++ Docs/Layers/parking.md | 1 + Docs/Layers/pharmacy.md | 170 +++ Docs/Layers/shelter.md | 91 ++ Docs/Layers/shops.md | 307 +++- Docs/Layers/transit_routes.md | 172 +++ Docs/Layers/transit_stops.md | 240 +++ Docs/TagInfo/mapcomplete_cycle_infra.json | 35 + Docs/TagInfo/mapcomplete_healthcare.json | 194 +++ .../mapcomplete_kerbs_and_crossings.json | 726 +++++++++ Docs/TagInfo/mapcomplete_personal.json | 1326 ++++++++++++++++- Docs/TagInfo/mapcomplete_pets.json | 830 ++++++++++- Docs/TagInfo/mapcomplete_shops.json | 894 ++++++++++- Docs/TagInfo/mapcomplete_transit.json | 370 +++++ assets/contributors.json | 16 +- .../charging_station/charging_station.json | 1304 +++++++++++----- assets/themes/healthcare/healthcare.json | 40 +- langs/layers/en.json | 103 ++ langs/themes/en.json | 4 + 28 files changed, 7437 insertions(+), 581 deletions(-) create mode 100644 Docs/Layers/doctors.md create mode 100644 Docs/Layers/hospital.md create mode 100644 Docs/Layers/id_presets.md create mode 100644 Docs/Layers/kerbs.md create mode 100644 Docs/Layers/pharmacy.md create mode 100644 Docs/Layers/shelter.md create mode 100644 Docs/Layers/transit_routes.md create mode 100644 Docs/Layers/transit_stops.md create mode 100644 Docs/TagInfo/mapcomplete_healthcare.json create mode 100644 Docs/TagInfo/mapcomplete_kerbs_and_crossings.json create mode 100644 Docs/TagInfo/mapcomplete_transit.json diff --git a/Docs/BuiltinIndex.md b/Docs/BuiltinIndex.md index 83872f143..a9f1a8c58 100644 --- a/Docs/BuiltinIndex.md +++ b/Docs/BuiltinIndex.md @@ -39,6 +39,7 @@ + [export_as_geojson](#export_as_geojson) + [minimap](#minimap) + [wikipedia](#wikipedia) + + [id_presets.shop_types](#id_presetsshop_types) + [school.capacity](#schoolcapacity) + [school.gender](#schoolgender) @@ -80,6 +81,7 @@ - climbing_gym - climbing_route - defibrillator + - doctors - dogpark - drinking_water - entrance @@ -94,6 +96,7 @@ - nature_reserve - observation_tower - parking + - pharmacy - picnic_table - play_forest - playground @@ -106,6 +109,7 @@ - surveillance_camera - toilet - trail + - transit_stops - tree_node - viewpoint - village_green @@ -128,14 +132,18 @@ - cafe_pub - climbing_club - climbing_gym + - doctors - food - hackerspace + - hospital - kindergarten_childcare - nature_reserve - observation_tower + - pharmacy - playground - recycling - school + - shops - tertiary_education - veterinary @@ -154,11 +162,15 @@ - cafe_pub - climbing_club - climbing_gym + - doctors - food - hackerspace + - hospital - kindergarten_childcare + - pharmacy - recycling - school + - shops - tertiary_education - veterinary @@ -177,11 +189,15 @@ - cafe_pub - climbing_club - climbing_gym + - doctors - food - hackerspace + - hospital - kindergarten_childcare + - pharmacy - recycling - school + - shops - tertiary_education @@ -200,8 +216,11 @@ - cafe_pub - climbing_club - climbing_gym + - doctors - food - kindergarten_childcare + - pharmacy + - shops - veterinary @@ -296,6 +315,7 @@ - food - hackerspace - observation_tower + - transit_stops @@ -512,6 +532,17 @@ +### id_presets.shop_types + + + + + + - shops + + + + ### school.capacity diff --git a/Docs/BuiltinLayers.md b/Docs/BuiltinLayers.md index 8754f882e..c5b18bb99 100644 --- a/Docs/BuiltinLayers.md +++ b/Docs/BuiltinLayers.md @@ -800,6 +800,7 @@ The following layers are included in MapComplete: - [cycleways_and_roads](./Layers/cycleways_and_roads.md) - [defibrillator](./Layers/defibrillator.md) - [direction](./Layers/direction.md) + - [doctors](./Layers/doctors.md) - [dogpark](./Layers/dogpark.md) - [drinking_water](./Layers/drinking_water.md) - [entrance](./Layers/entrance.md) @@ -814,9 +815,12 @@ The following layers are included in MapComplete: - [grass_in_parks](./Layers/grass_in_parks.md) - [hackerspace](./Layers/hackerspace.md) - [home_location](./Layers/home_location.md) + - [hospital](./Layers/hospital.md) - [hydrant](./Layers/hydrant.md) + - [id_presets](./Layers/id_presets.md) - [import_candidate](./Layers/import_candidate.md) - [information_board](./Layers/information_board.md) + - [kerbs](./Layers/kerbs.md) - [kindergarten_childcare](./Layers/kindergarten_childcare.md) - [left_right_style](./Layers/left_right_style.md) - [map](./Layers/map.md) @@ -828,12 +832,14 @@ The following layers are included in MapComplete: - [observation_tower](./Layers/observation_tower.md) - [parking](./Layers/parking.md) - [pedestrian_path](./Layers/pedestrian_path.md) + - [pharmacy](./Layers/pharmacy.md) - [picnic_table](./Layers/picnic_table.md) - [play_forest](./Layers/play_forest.md) - [playground](./Layers/playground.md) - [public_bookcase](./Layers/public_bookcase.md) - [recycling](./Layers/recycling.md) - [school](./Layers/school.md) + - [shelter](./Layers/shelter.md) - [shops](./Layers/shops.md) - [slow_roads](./Layers/slow_roads.md) - [split_point](./Layers/split_point.md) @@ -843,6 +849,8 @@ The following layers are included in MapComplete: - [tertiary_education](./Layers/tertiary_education.md) - [toilet](./Layers/toilet.md) - [trail](./Layers/trail.md) + - [transit_routes](./Layers/transit_routes.md) + - [transit_stops](./Layers/transit_stops.md) - [tree_node](./Layers/tree_node.md) - [type_node](./Layers/type_node.md) - [veterinary](./Layers/veterinary.md) diff --git a/Docs/Layers/bike_parking.md b/Docs/Layers/bike_parking.md index 0ca5cedf0..08a42bfaa 100644 --- a/Docs/Layers/bike_parking.md +++ b/Docs/Layers/bike_parking.md @@ -27,6 +27,7 @@ A layer showing where you can park your bike - [cyclofix](https://mapcomplete.osm.be/cyclofix) - [personal](https://mapcomplete.osm.be/personal) + - [transit](https://mapcomplete.osm.be/transit) diff --git a/Docs/Layers/crossings.md b/Docs/Layers/crossings.md index aaf3f4d5f..644447e10 100644 --- a/Docs/Layers/crossings.md +++ b/Docs/Layers/crossings.md @@ -28,6 +28,7 @@ Crossings for pedestrians and cyclists - [cycle_infra](https://mapcomplete.osm.be/cycle_infra) + - [kerbs_and_crossings](https://mapcomplete.osm.be/kerbs_and_crossings) - [personal](https://mapcomplete.osm.be/personal) diff --git a/Docs/Layers/cycleways_and_roads.md b/Docs/Layers/cycleways_and_roads.md index 468ba725b..7d2222aec 100644 --- a/Docs/Layers/cycleways_and_roads.md +++ b/Docs/Layers/cycleways_and_roads.md @@ -17,6 +17,7 @@ All infrastructure that someone can cycle over, accompanied with questions about - This layer is shown at zoomlevel **16** and higher - This layer is needed as dependency for layer [barrier](#barrier) - This layer is needed as dependency for layer [crossings](#crossings) + - This layer is needed as dependency for layer [kerbs](#kerbs) @@ -28,6 +29,7 @@ All infrastructure that someone can cycle over, accompanied with questions about - [cycle_infra](https://mapcomplete.osm.be/cycle_infra) + - [kerbs_and_crossings](https://mapcomplete.osm.be/kerbs_and_crossings) - [personal](https://mapcomplete.osm.be/personal) @@ -42,10 +44,10 @@ Elements must have the all of following tags to be shown on this layer: - - highway=cycleway|cycleway=lane|cycleway=shared_lane|cycleway=track|cyclestreet=yes|highway=residential|highway=tertiary|highway=unclassified|highway=primary|highway=secondary|highway=path&bicycle=designated + - highway=cycleway|cycleway=lane|cycleway=shared_lane|cycleway=track|cyclestreet=yes|highway=residential|highway=tertiary|highway=unclassified|highway=primary|highway=secondary|highway=tertiary_link|highway=primary_link|highway=secondary_link|highway=service|highway=footway|highway=pedestrian|highway=living_street|highway=path&bicycle=designated -[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22cyclestreet%22%3D%22yes%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cycleway%22%3D%22lane%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cycleway%22%3D%22shared_lane%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cycleway%22%3D%22track%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22cycleway%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22residential%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22tertiary%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22unclassified%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22primary%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22secondary%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22bicycle%22%3D%22designated%22%5D%5B%22highway%22%3D%22path%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22cyclestreet%22%3D%22yes%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cycleway%22%3D%22lane%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cycleway%22%3D%22shared_lane%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cycleway%22%3D%22track%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22cycleway%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22residential%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22tertiary%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22unclassified%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22primary%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22secondary%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22tertiary_link%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22primary_link%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22secondary_link%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22service%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22footway%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22pedestrian%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22highway%22%3D%22living_street%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22bicycle%22%3D%22designated%22%5D%5B%22highway%22%3D%22path%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) diff --git a/Docs/Layers/doctors.md b/Docs/Layers/doctors.md new file mode 100644 index 000000000..45b9a24cd --- /dev/null +++ b/Docs/Layers/doctors.md @@ -0,0 +1,176 @@ + + + doctors +========= + + + + + + + + + + + - This layer is shown at zoomlevel **13** and higher + + + + +#### Themes using this layer + + + + + + - [healthcare](https://mapcomplete.osm.be/healthcare) + - [personal](https://mapcomplete.osm.be/personal) + + + + + Basic tags for this layer +--------------------------- + + + +Elements must have the all of following tags to be shown on this layer: + + + + - amenity=doctors|amenity=dentist|healthcare=physiotherapist + + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22amenity%22%3D%22doctors%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22amenity%22%3D%22dentist%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22healthcare%22%3D%22physiotherapist%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + + + + Supported attributes +---------------------- + + + +Warning: + +this quick overview is incomplete + + + +attribute | type | values which are supported by this layer +----------- | ------ | ------------------------------------------ +[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | +[](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | +[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | +[](https://taginfo.openstreetmap.org/keys/healthcare:speciality#values) [healthcare:speciality](https://wiki.openstreetmap.org/wiki/Key:healthcare:speciality) | [string](../SpecialInputElements.md#string) | [general](https://wiki.openstreetmap.org/wiki/Tag:healthcare:speciality%3Dgeneral) [gynaecology](https://wiki.openstreetmap.org/wiki/Tag:healthcare:speciality%3Dgynaecology) [psychiatry](https://wiki.openstreetmap.org/wiki/Tag:healthcare:speciality%3Dpsychiatry) [paediatrics](https://wiki.openstreetmap.org/wiki/Tag:healthcare:speciality%3Dpaediatrics) + + + + +### images + + + +This tagrendering has no question and is thus read-only + + + + + +### opening_hours + + + +The question is What are the opening hours of {title()}? + +This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) + +This is rendered with

    Opening hours

    {opening_hours_table(opening_hours)} + + + + + +### phone + + + +The question is What is the phone number of {title()}? + +This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) + +This is rendered with {phone} + + + + + + - {contact:phone} corresponds with contact:phone~^..*$ + - This option cannot be chosen as answer + + + + +### email + + + +The question is What is the email address of {title()}? + +This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) + +This is rendered with {email} + + + + + + - {contact:email} corresponds with contact:email~^..*$ + - This option cannot be chosen as answer + + + + +### website + + + +The question is What is the website of {title()}? + +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) + +This is rendered with {website} + + + + + + - {contact:website} corresponds with contact:website~^..*$ + - This option cannot be chosen as answer + + + + +### specialty + + + +The question is What is this doctor specialized in? + +This rendering asks information about the property [healthcare:speciality](https://wiki.openstreetmap.org/wiki/Key:healthcare:speciality) + +This is rendered with This doctor is specialized in {healthcare:speciality} + + + + + + - This is a general practitioner corresponds with healthcare:speciality=general + - This is a gynaecologist corresponds with healthcare:speciality=gynaecology + - This is a psychiatrist corresponds with healthcare:speciality=psychiatry + - This is a paediatrician corresponds with healthcare:speciality=paediatrics + + +Only visible if `amenity=doctors` is shown + +This document is autogenerated from [assets/layers/doctors/doctors.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/doctors/doctors.json) \ No newline at end of file diff --git a/Docs/Layers/dogshop.md b/Docs/Layers/dogshop.md index 6195f5798..8d8da6c43 100644 --- a/Docs/Layers/dogshop.md +++ b/Docs/Layers/dogshop.md @@ -61,11 +61,11 @@ this quick overview is incomplete attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | [string](../SpecialInputElements.md#string) | [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) -[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | +[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | Multiple choice | [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [hobby](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhobby) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) +[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | [](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | -[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | @@ -94,36 +94,241 @@ This is rendered with This shop is called {name} -### shops-shop +### shop_types -The question is What does this shop sell? - -This rendering asks information about the property [shop](https://wiki.openstreetmap.org/wiki/Key:shop) - -This is rendered with This shop sells {shop} +The question is What kind of shop is this? - - Convenience store corresponds with shop=convenience - - Supermarket corresponds with shop=supermarket - - Clothing store corresponds with shop=clothes - - Hairdresser corresponds with shop=hairdresser + - Farm Supply Shop corresponds with shop=agrarian + - Liquor Store corresponds with shop=alcohol + - Anime / Manga Shop corresponds with shop=anime + - Antiques Shop corresponds with shop=antiques + - Appliance Store corresponds with shop=appliance + - Art Store corresponds with shop=art + - Baby Goods Store corresponds with shop=baby_goods + - Bag/Luggage Store corresponds with shop=bag - Bakery corresponds with shop=bakery - - Car repair (garage) corresponds with shop=car_repair - - Car dealer corresponds with shop=car + - Bathroom Furnishing Store corresponds with shop=bathroom_furnishing + - Beauty Shop corresponds with shop=beauty + - Bedding/Mattress Store corresponds with shop=bed + - Beverage Store corresponds with shop=beverages + - Bicycle Shop corresponds with shop=bicycle + - Boat Store corresponds with shop=boat + - Bookmaker corresponds with shop=bookmaker + - Book Store corresponds with shop=books + - Brewing Supply Store corresponds with shop=brewing_supplies + - Butcher corresponds with shop=butcher + - Camera Equipment Store corresponds with shop=camera + - Candle Shop corresponds with shop=candles + - Cannabis Shop corresponds with shop=cannabis + - Car Dealership corresponds with shop=car + - Car Parts Store corresponds with shop=car_parts + - Car Repair Shop corresponds with shop=car_repair + - RV Dealership corresponds with shop=caravan + - Carpet Store corresponds with shop=carpet + - Catalog Shop corresponds with shop=catalogue + - Charity Store corresponds with shop=charity + - Cheese Store corresponds with shop=cheese + - Drugstore corresponds with shop=chemist + - Chocolate Store corresponds with shop=chocolate + - Clothing Store corresponds with shop=clothes + - Coffee Store corresponds with shop=coffee + - Collectibles Shop corresponds with shop=collector + - Computer Store corresponds with shop=computer + - Candy Store corresponds with shop=confectionery + - Convenience Store corresponds with shop=convenience + - Copy Store corresponds with shop=copyshop + - Cosmetics Store corresponds with shop=cosmetics + - Country Store corresponds with shop=country_store + - Arts & Crafts Store corresponds with shop=craft + - Curtain Store corresponds with shop=curtain + - Dairy Store corresponds with shop=dairy + - Deli corresponds with shop=deli + - Department Store corresponds with shop=department_store + - DIY Store corresponds with shop=doityourself + - Door Shop corresponds with shop=doors + - Dry Cleaner corresponds with shop=dry_cleaning + - E-Cigarette Shop corresponds with shop=e-cigarette + - Electrical Equipment Store corresponds with shop=electrical + - Electronics Store corresponds with shop=electronics + - Erotic Store corresponds with shop=erotic + - Fabric Store corresponds with shop=fabric + - Produce Stand corresponds with shop=farm + - Fashion Accessories Store corresponds with shop=fashion_accessories + - Fireplace Store corresponds with shop=fireplace + - Fishing Shop corresponds with shop=fishing + - Flooring Supply Shop corresponds with shop=flooring + - Florist corresponds with shop=florist + - Framing Shop corresponds with shop=frame + - Frozen Food Store corresponds with shop=frozen_food + - Fuel Shop corresponds with shop=fuel + - Funeral Home corresponds with shop=funeral_directors + - Furniture Store corresponds with shop=furniture + - Tabletop Game Store corresponds with shop=games + - Garden Center corresponds with shop=garden_centre + - Bottled Gas Shop corresponds with shop=gas + - General Store corresponds with shop=general + - Gift Shop corresponds with shop=gift + - Greengrocer corresponds with shop=greengrocer + - Hairdresser corresponds with shop=hairdresser + - Hairdresser Supply Store corresponds with shop=hairdresser_supply + - Hardware Store corresponds with shop=hardware + - Health Food Shop corresponds with shop=health_food + - Hearing Aids Store corresponds with shop=hearing_aids + - Herbalist corresponds with shop=herbalist + - Hifi Store corresponds with shop=hifi + - Hobby Shop corresponds with shop=hobby + - Household Linen Shop corresponds with shop=household_linen + - Houseware Store corresponds with shop=houseware + - Hunting Shop corresponds with shop=hunting + - Interior Decoration Store corresponds with shop=interior_decoration + - Jewelry Store corresponds with shop=jewelry + - Kiosk corresponds with shop=kiosk + - Kitchen Design Store corresponds with shop=kitchen + - Laundry corresponds with shop=laundry + - Leather Store corresponds with shop=leather + - Lighting Store corresponds with shop=lighting + - Locksmith corresponds with shop=locksmith + - Lottery Shop corresponds with shop=lottery + - Mall corresponds with shop=mall + - Massage Shop corresponds with shop=massage + - Medical Supply Store corresponds with shop=medical_supply + - Military Surplus Store corresponds with shop=military_surplus + - Mobile Phone Store corresponds with shop=mobile_phone + - Model Shop corresponds with shop=model + - Money Lender corresponds with shop=money_lender + - Motorcycle Dealership corresponds with shop=motorcycle + - Motorcycle Repair Shop corresponds with shop=motorcycle_repair + - Music Store corresponds with shop=music + - Musical Instrument Store corresponds with shop=musical_instrument + - Newspaper/Magazine Shop corresponds with shop=newsagent + - Nutrition Supplements Store corresponds with shop=nutrition_supplements + - Optician corresponds with shop=optician + - Outdoors Store corresponds with shop=outdoor + - Online Retailer Outpost corresponds with shop=outpost + - Paint Store corresponds with shop=paint + - Party Supply Store corresponds with shop=party + - Pastry Shop corresponds with shop=pastry + - Pawn Shop corresponds with shop=pawnbroker + - Perfume Store corresponds with shop=perfumery + - Pet Store corresponds with shop=pet + - Pet Grooming Store corresponds with shop=pet_grooming + - Photography Store corresponds with shop=photo + - Pottery Store corresponds with shop=pottery + - Printer Ink Store corresponds with shop=printer_ink + - Psychic corresponds with shop=psychic + - Fireworks Store corresponds with shop=pyrotechnics + - Radio/Electronic Component Store corresponds with shop=radiotechnics + - Religious Store corresponds with shop=religion + - Rental Shop corresponds with shop=rental + - Repair Shop corresponds with shop=repair + - Scuba Diving Shop corresponds with shop=scuba_diving + - Seafood Shop corresponds with shop=seafood + - Consignment/Thrift Store corresponds with shop=second_hand + - Sewing Supply Shop corresponds with shop=sewing + - Shoe Repair Shop corresponds with shop=shoe_repair + - Shoe Store corresponds with shop=shoes + - Spice Shop corresponds with shop=spices + - Sporting Goods Store corresponds with shop=sports + - Stationery Store corresponds with shop=stationery + - Storage Rental corresponds with shop=storage_rental + - Supermarket corresponds with shop=supermarket + - Pool Supply Store corresponds with shop=swimming_pool + - Tailor corresponds with shop=tailor + - Tattoo Parlor corresponds with shop=tattoo + - Tea Store corresponds with shop=tea + - Telecom Retail Store corresponds with shop=telecommunication + - Ticket Seller corresponds with shop=ticket + - Tile Shop corresponds with shop=tiles + - Tobacco Shop corresponds with shop=tobacco + - Tool Rental corresponds with shop=tool_hire + - Toy Store corresponds with shop=toys + - Trade Shop corresponds with shop=trade + - Travel Agency corresponds with shop=travel_agency + - Trophy Shop corresponds with shop=trophy + - Tire Store corresponds with shop=tyres + - Vacuum Cleaner Store corresponds with shop=vacuum_cleaner + - Variety Store corresponds with shop=variety_store + - Video Store corresponds with shop=video + - Video Game Store corresponds with shop=video_games + - Watches Shop corresponds with shop=watches + - Drinking Water Shop corresponds with shop=water + - Watersport/Swim Shop corresponds with shop=water_sports + - Weapon Shop corresponds with shop=weapons + - Wholesale Store corresponds with shop=wholesale + - Wig Shop corresponds with shop=wigs + - Window Blind Store corresponds with shop=window_blind + - Wine Shop corresponds with shop=wine + + +Only visible if `id~^..*$` is shown + + + +### opening_hours + + + +The question is What are the opening hours of {title()}? + +This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) + +This is rendered with

    Opening hours

    {opening_hours_table(opening_hours)} -### shops-phone + +### website -The question is What is the phone number? +The question is What is the website of {title()}? + +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) + +This is rendered with {website} + + + + + + - {contact:website} corresponds with contact:website~^..*$ + - This option cannot be chosen as answer + + + + +### email + + + +The question is What is the email address of {title()}? + +This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) + +This is rendered with {email} + + + + + + - {contact:email} corresponds with contact:email~^..*$ + - This option cannot be chosen as answer + + + + +### phone + + + +The question is What is the phone number of {title()}? This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) @@ -133,44 +338,8 @@ This is rendered with {phone} -### shops-website - - - -The question is What is the website of this shop? - -This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) - -This is rendered with {website} - - - - - -### shops-email - - - -The question is What is the email address of this shop? - -This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) - -This is rendered with {email} - - - - - -### shops-opening_hours - - - -The question is What are the opening hours of this shop? - -This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) - -This is rendered with {opening_hours_table(opening_hours)} - + - {contact:phone} corresponds with contact:phone~^..*$ + - This option cannot be chosen as answer @@ -193,6 +362,32 @@ The question is Which methods of payment are accepted here? +### copyshop-print-sizes + + + +The question is What paper formats does this shop offer? + + + + + + - This shop can print on papers of size A4 corresponds with service:print:A4=yes + - Unselecting this answer will add service:print:A4=no + - This shop can print on papers of size A3 corresponds with service:print:A3=yes + - Unselecting this answer will add service:print:A3=no + - This shop can print on papers of size A2 corresponds with service:print:A2=yes + - Unselecting this answer will add service:print:A2=no + - This shop can print on papers of size A1 corresponds with service:print:A1=yes + - Unselecting this answer will add service:print:A1=no + - This shop can print on papers of size A0 corresponds with service:print:A0=yes + - Unselecting this answer will add service:print:A0=no + + +Only visible if `shop~^.*copyshop.*$|shop~^.*stationary.*$|service:print=yes` is shown + + + ### questions diff --git a/Docs/Layers/hospital.md b/Docs/Layers/hospital.md new file mode 100644 index 000000000..0d2a9f22f --- /dev/null +++ b/Docs/Layers/hospital.md @@ -0,0 +1,141 @@ + + + hospital +========== + + + + + + + + + + + - This layer is shown at zoomlevel **12** and higher + + + + +#### Themes using this layer + + + + + + - [healthcare](https://mapcomplete.osm.be/healthcare) + - [personal](https://mapcomplete.osm.be/personal) + + + + + Basic tags for this layer +--------------------------- + + + +Elements must have the all of following tags to be shown on this layer: + + + + - amenity=hospital + + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22amenity%22%3D%22hospital%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + + + + Supported attributes +---------------------- + + + +Warning: + +this quick overview is incomplete + + + +attribute | type | values which are supported by this layer +----------- | ------ | ------------------------------------------ +[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | +[](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | +[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | + + + + +### name + + + +The question is What does the of the hospital ? + +This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) + +This is rendered with Name of the hospital name is {name} + + + + + +### phone + + + +The question is What is the phone number of {title()}? + +This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) + +This is rendered with {phone} + + + + + + - {contact:phone} corresponds with contact:phone~^..*$ + - This option cannot be chosen as answer + + + + +### email + + + +The question is What is the email address of {title()}? + +This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) + +This is rendered with {email} + + + + + + - {contact:email} corresponds with contact:email~^..*$ + - This option cannot be chosen as answer + + + + +### website + + + +The question is What is the website of {title()}? + +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) + +This is rendered with {website} + + + + + + - {contact:website} corresponds with contact:website~^..*$ + - This option cannot be chosen as answer + + +This document is autogenerated from [assets/layers/hospital/hospital.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/hospital/hospital.json) \ No newline at end of file diff --git a/Docs/Layers/id_presets.md b/Docs/Layers/id_presets.md new file mode 100644 index 000000000..4acedc9a9 --- /dev/null +++ b/Docs/Layers/id_presets.md @@ -0,0 +1,398 @@ + + + id_presets +============ + + + + + +Layer containing various presets and questions generated by ID. These are meant to be reused in other layers by importing the tagRenderings with `id_preset. + + + + + + + - This layer is shown at zoomlevel **0** and higher + - This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this toggleable. + - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` + - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` + + + + + Basic tags for this layer +--------------------------- + + + +Elements must have the all of following tags to be shown on this layer: + + + + - id~^..*$ + + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22id%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + + + + Supported attributes +---------------------- + + + +Warning: + +this quick overview is incomplete + + + +attribute | type | values which are supported by this layer +----------- | ------ | ------------------------------------------ +[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | Multiple choice | [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [hobby](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhobby) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) +[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | Multiple choice | [boutique](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboutique) [fashion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion) [vacant](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacant) [yes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dyes) [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [hobby](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhobby) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) + + + + +### shop_types + + + +This tagrendering has no question and is thus read-only + + + + + + - Farm Supply Shop corresponds with shop=agrarian + - Liquor Store corresponds with shop=alcohol + - Anime / Manga Shop corresponds with shop=anime + - Antiques Shop corresponds with shop=antiques + - Appliance Store corresponds with shop=appliance + - Art Store corresponds with shop=art + - Baby Goods Store corresponds with shop=baby_goods + - Bag/Luggage Store corresponds with shop=bag + - Bakery corresponds with shop=bakery + - Bathroom Furnishing Store corresponds with shop=bathroom_furnishing + - Beauty Shop corresponds with shop=beauty + - Bedding/Mattress Store corresponds with shop=bed + - Beverage Store corresponds with shop=beverages + - Bicycle Shop corresponds with shop=bicycle + - Boat Store corresponds with shop=boat + - Bookmaker corresponds with shop=bookmaker + - Book Store corresponds with shop=books + - Brewing Supply Store corresponds with shop=brewing_supplies + - Butcher corresponds with shop=butcher + - Camera Equipment Store corresponds with shop=camera + - Candle Shop corresponds with shop=candles + - Cannabis Shop corresponds with shop=cannabis + - Car Dealership corresponds with shop=car + - Car Parts Store corresponds with shop=car_parts + - Car Repair Shop corresponds with shop=car_repair + - RV Dealership corresponds with shop=caravan + - Carpet Store corresponds with shop=carpet + - Catalog Shop corresponds with shop=catalogue + - Charity Store corresponds with shop=charity + - Cheese Store corresponds with shop=cheese + - Drugstore corresponds with shop=chemist + - Chocolate Store corresponds with shop=chocolate + - Clothing Store corresponds with shop=clothes + - Coffee Store corresponds with shop=coffee + - Collectibles Shop corresponds with shop=collector + - Computer Store corresponds with shop=computer + - Candy Store corresponds with shop=confectionery + - Convenience Store corresponds with shop=convenience + - Copy Store corresponds with shop=copyshop + - Cosmetics Store corresponds with shop=cosmetics + - Country Store corresponds with shop=country_store + - Arts & Crafts Store corresponds with shop=craft + - Curtain Store corresponds with shop=curtain + - Dairy Store corresponds with shop=dairy + - Deli corresponds with shop=deli + - Department Store corresponds with shop=department_store + - DIY Store corresponds with shop=doityourself + - Door Shop corresponds with shop=doors + - Dry Cleaner corresponds with shop=dry_cleaning + - E-Cigarette Shop corresponds with shop=e-cigarette + - Electrical Equipment Store corresponds with shop=electrical + - Electronics Store corresponds with shop=electronics + - Erotic Store corresponds with shop=erotic + - Fabric Store corresponds with shop=fabric + - Produce Stand corresponds with shop=farm + - Fashion Accessories Store corresponds with shop=fashion_accessories + - Fireplace Store corresponds with shop=fireplace + - Fishing Shop corresponds with shop=fishing + - Flooring Supply Shop corresponds with shop=flooring + - Florist corresponds with shop=florist + - Framing Shop corresponds with shop=frame + - Frozen Food Store corresponds with shop=frozen_food + - Fuel Shop corresponds with shop=fuel + - Funeral Home corresponds with shop=funeral_directors + - Furniture Store corresponds with shop=furniture + - Tabletop Game Store corresponds with shop=games + - Garden Center corresponds with shop=garden_centre + - Bottled Gas Shop corresponds with shop=gas + - General Store corresponds with shop=general + - Gift Shop corresponds with shop=gift + - Greengrocer corresponds with shop=greengrocer + - Hairdresser corresponds with shop=hairdresser + - Hairdresser Supply Store corresponds with shop=hairdresser_supply + - Hardware Store corresponds with shop=hardware + - Health Food Shop corresponds with shop=health_food + - Hearing Aids Store corresponds with shop=hearing_aids + - Herbalist corresponds with shop=herbalist + - Hifi Store corresponds with shop=hifi + - Hobby Shop corresponds with shop=hobby + - Household Linen Shop corresponds with shop=household_linen + - Houseware Store corresponds with shop=houseware + - Hunting Shop corresponds with shop=hunting + - Interior Decoration Store corresponds with shop=interior_decoration + - Jewelry Store corresponds with shop=jewelry + - Kiosk corresponds with shop=kiosk + - Kitchen Design Store corresponds with shop=kitchen + - Laundry corresponds with shop=laundry + - Leather Store corresponds with shop=leather + - Lighting Store corresponds with shop=lighting + - Locksmith corresponds with shop=locksmith + - Lottery Shop corresponds with shop=lottery + - Mall corresponds with shop=mall + - Massage Shop corresponds with shop=massage + - Medical Supply Store corresponds with shop=medical_supply + - Military Surplus Store corresponds with shop=military_surplus + - Mobile Phone Store corresponds with shop=mobile_phone + - Model Shop corresponds with shop=model + - Money Lender corresponds with shop=money_lender + - Motorcycle Dealership corresponds with shop=motorcycle + - Motorcycle Repair Shop corresponds with shop=motorcycle_repair + - Music Store corresponds with shop=music + - Musical Instrument Store corresponds with shop=musical_instrument + - Newspaper/Magazine Shop corresponds with shop=newsagent + - Nutrition Supplements Store corresponds with shop=nutrition_supplements + - Optician corresponds with shop=optician + - Outdoors Store corresponds with shop=outdoor + - Online Retailer Outpost corresponds with shop=outpost + - Paint Store corresponds with shop=paint + - Party Supply Store corresponds with shop=party + - Pastry Shop corresponds with shop=pastry + - Pawn Shop corresponds with shop=pawnbroker + - Perfume Store corresponds with shop=perfumery + - Pet Store corresponds with shop=pet + - Pet Grooming Store corresponds with shop=pet_grooming + - Photography Store corresponds with shop=photo + - Pottery Store corresponds with shop=pottery + - Printer Ink Store corresponds with shop=printer_ink + - Psychic corresponds with shop=psychic + - Fireworks Store corresponds with shop=pyrotechnics + - Radio/Electronic Component Store corresponds with shop=radiotechnics + - Religious Store corresponds with shop=religion + - Rental Shop corresponds with shop=rental + - Repair Shop corresponds with shop=repair + - Scuba Diving Shop corresponds with shop=scuba_diving + - Seafood Shop corresponds with shop=seafood + - Consignment/Thrift Store corresponds with shop=second_hand + - Sewing Supply Shop corresponds with shop=sewing + - Shoe Repair Shop corresponds with shop=shoe_repair + - Shoe Store corresponds with shop=shoes + - Spice Shop corresponds with shop=spices + - Sporting Goods Store corresponds with shop=sports + - Stationery Store corresponds with shop=stationery + - Storage Rental corresponds with shop=storage_rental + - Supermarket corresponds with shop=supermarket + - Pool Supply Store corresponds with shop=swimming_pool + - Tailor corresponds with shop=tailor + - Tattoo Parlor corresponds with shop=tattoo + - Tea Store corresponds with shop=tea + - Telecom Retail Store corresponds with shop=telecommunication + - Ticket Seller corresponds with shop=ticket + - Tile Shop corresponds with shop=tiles + - Tobacco Shop corresponds with shop=tobacco + - Tool Rental corresponds with shop=tool_hire + - Toy Store corresponds with shop=toys + - Trade Shop corresponds with shop=trade + - Travel Agency corresponds with shop=travel_agency + - Trophy Shop corresponds with shop=trophy + - Tire Store corresponds with shop=tyres + - Vacuum Cleaner Store corresponds with shop=vacuum_cleaner + - Variety Store corresponds with shop=variety_store + - Video Store corresponds with shop=video + - Video Game Store corresponds with shop=video_games + - Watches Shop corresponds with shop=watches + - Drinking Water Shop corresponds with shop=water + - Watersport/Swim Shop corresponds with shop=water_sports + - Weapon Shop corresponds with shop=weapons + - Wholesale Store corresponds with shop=wholesale + - Wig Shop corresponds with shop=wigs + - Window Blind Store corresponds with shop=window_blind + - Wine Shop corresponds with shop=wine + + + + +### shop_rendering + + + +This tagrendering has no question and is thus read-only + + + + + + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=boutique + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=fashion + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=vacant + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=yes + - circle:white;./assets/layers/id_presets/fas-tractor.svg corresponds with shop=agrarian + - circle:white;./assets/layers/id_presets/fas-wine-bottle.svg corresponds with shop=alcohol + - circle:white;./assets/layers/id_presets/fas-dragon.svg corresponds with shop=anime + - circle:white;./assets/layers/id_presets/temaki-furniture.svg corresponds with shop=antiques + - circle:white;./assets/layers/id_presets/temaki-laundry.svg corresponds with shop=appliance + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=art + - circle:white;./assets/layers/id_presets/fas-baby-carriage.svg corresponds with shop=baby_goods + - circle:white;./assets/layers/id_presets/fas-suitcase-rolling.svg corresponds with shop=bag + - circle:white;./assets/layers/id_presets/maki-bakery.svg corresponds with shop=bakery + - circle:white;./assets/layers/id_presets/fas-bath.svg corresponds with shop=bathroom_furnishing + - circle:white;./assets/layers/id_presets/temaki-lipstick.svg corresponds with shop=beauty + - circle:white;./assets/layers/id_presets/maki-lodging.svg corresponds with shop=bed + - circle:white;./assets/layers/id_presets/temaki-bottles.svg corresponds with shop=beverages + - circle:white;./assets/layers/id_presets/maki-bicycle.svg corresponds with shop=bicycle + - circle:white;./assets/layers/id_presets/temaki-boat.svg corresponds with shop=boat + - circle:white;./assets/layers/id_presets/temaki-money_hand.svg corresponds with shop=bookmaker + - circle:white;./assets/layers/id_presets/fas-book.svg corresponds with shop=books + - circle:white;./assets/layers/id_presets/temaki-storage_fermenter.svg corresponds with shop=brewing_supplies + - circle:white;./assets/layers/id_presets/temaki-cleaver.svg corresponds with shop=butcher + - circle:white;./assets/layers/id_presets/fas-camera-retro.svg corresponds with shop=camera + - circle:white;./assets/layers/id_presets/fas-cannabis.svg corresponds with shop=cannabis + - circle:white;./assets/layers/id_presets/maki-car.svg corresponds with shop=car + - circle:white;./assets/layers/id_presets/fas-car-battery.svg corresponds with shop=car_parts + - circle:white;./assets/layers/id_presets/maki-car-repair.svg corresponds with shop=car_repair + - circle:white;./assets/layers/id_presets/temaki-camper_trailer.svg corresponds with shop=caravan + - circle:white;./assets/layers/id_presets/fas-tape.svg corresponds with shop=carpet + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=catalogue + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=charity + - circle:white;./assets/layers/id_presets/fas-cheese.svg corresponds with shop=cheese + - circle:white;./assets/layers/id_presets/maki-confectionery.svg corresponds with shop=chocolate + - circle:white;./assets/layers/id_presets/maki-clothing-store.svg corresponds with shop=clothes + - circle:white;./assets/layers/id_presets/temaki-coffee.svg corresponds with shop=coffee + - circle:white;./assets/layers/id_presets/fas-laptop.svg corresponds with shop=computer + - circle:white;./assets/layers/id_presets/maki-confectionery.svg corresponds with shop=confectionery + - circle:white;./assets/layers/id_presets/fas-print.svg corresponds with shop=copyshop + - circle:white;./assets/layers/id_presets/temaki-lipstick.svg corresponds with shop=cosmetics + - circle:white;./assets/layers/id_presets/fas-hat-cowboy-side.svg corresponds with shop=country_store + - circle:white;./assets/layers/id_presets/temaki-curtains.svg corresponds with shop=curtain + - circle:white;./assets/layers/id_presets/fas-cheese.svg corresponds with shop=dairy + - circle:white;./assets/layers/id_presets/temaki-meat.svg corresponds with shop=deli + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=department_store + - circle:white;./assets/layers/id_presets/temaki-tools.svg corresponds with shop=doityourself + - circle:white;./assets/layers/id_presets/fas-door-open.svg corresponds with shop=doors + - circle:white;./assets/layers/id_presets/temaki-clothes_hanger.svg corresponds with shop=dry_cleaning + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=e-cigarette + - circle:white;./assets/layers/id_presets/temaki-power.svg corresponds with shop=electrical + - circle:white;./assets/layers/id_presets/fas-plug.svg corresponds with shop=electronics + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=erotic + - circle:white;./assets/layers/id_presets/fas-tape.svg corresponds with shop=fabric + - circle:white;./assets/layers/id_presets/temaki-fashion_accessories.svg corresponds with shop=fashion_accessories + - circle:white;./assets/layers/id_presets/temaki-fireplace.svg corresponds with shop=fireplace + - circle:white;./assets/layers/id_presets/temaki-ice_fishing.svg corresponds with shop=fishing + - circle:white;./assets/layers/id_presets/temaki-tools.svg corresponds with shop=flooring + - circle:white;./assets/layers/id_presets/maki-florist.svg corresponds with shop=florist + - circle:white;./assets/layers/id_presets/fas-vector-square.svg corresponds with shop=frame + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=frozen_food + - circle:white;./assets/layers/id_presets/temaki-propane_tank.svg corresponds with shop=fuel + - circle:white;./assets/layers/id_presets/maki-cemetery.svg corresponds with shop=funeral_directors + - circle:white;./assets/layers/id_presets/fas-couch.svg corresponds with shop=furniture + - circle:white;./assets/layers/id_presets/fas-dice.svg corresponds with shop=games + - circle:white;./assets/layers/id_presets/maki-garden-centre.svg corresponds with shop=garden_centre + - circle:white;./assets/layers/id_presets/temaki-propane_tank.svg corresponds with shop=gas + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=general + - circle:white;./assets/layers/id_presets/maki-gift.svg corresponds with shop=gift + - circle:white;./assets/layers/id_presets/fas-carrot.svg corresponds with shop=greengrocer + - circle:white;./assets/layers/id_presets/temaki-beauty_salon.svg corresponds with shop=hairdresser + - circle:white;./assets/layers/id_presets/temaki-hair_care.svg corresponds with shop=hairdresser_supply + - circle:white;./assets/layers/id_presets/temaki-tools.svg corresponds with shop=hardware + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=health_food + - circle:white;./assets/layers/id_presets/temaki-hearing_aid.svg corresponds with shop=hearing_aids + - circle:white;./assets/layers/id_presets/fas-leaf.svg corresponds with shop=herbalist + - circle:white;./assets/layers/id_presets/temaki-speaker.svg corresponds with shop=hifi + - circle:white;./assets/layers/id_presets/fas-dragon.svg corresponds with shop=hobby + - circle:white;./assets/layers/id_presets/temaki-cloth.svg corresponds with shop=household_linen + - circle:white;./assets/layers/id_presets/fas-blender.svg corresponds with shop=houseware + - circle:white;./assets/layers/id_presets/temaki-bow_and_arrow.svg corresponds with shop=hunting + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=interior_decoration + - circle:white;./assets/layers/id_presets/maki-jewelry-store.svg corresponds with shop=jewelry + - circle:white;./assets/layers/id_presets/fas-store.svg corresponds with shop=kiosk + - circle:white;./assets/layers/id_presets/temaki-kitchen_sink.svg corresponds with shop=kitchen + - circle:white;./assets/layers/id_presets/temaki-laundry.svg corresponds with shop=laundry + - circle:white;./assets/layers/id_presets/temaki-handbag.svg corresponds with shop=leather + - circle:white;./assets/layers/id_presets/temaki-desk_lamp.svg corresponds with shop=lighting + - circle:white;./assets/layers/id_presets/fas-key.svg corresponds with shop=locksmith + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=mall + - circle:white;./assets/layers/id_presets/temaki-spa.svg corresponds with shop=massage + - circle:white;./assets/layers/id_presets/fas-crutch.svg corresponds with shop=medical_supply + - circle:white;./assets/layers/id_presets/temaki-military.svg corresponds with shop=military_surplus + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=model + - circle:white;./assets/layers/id_presets/temaki-money_hand.svg corresponds with shop=money_lender + - circle:white;./assets/layers/id_presets/fas-motorcycle.svg corresponds with shop=motorcycle + - circle:white;./assets/layers/id_presets/temaki-motorcycle_repair.svg corresponds with shop=motorcycle_repair + - circle:white;./assets/layers/id_presets/fas-compact-disc.svg corresponds with shop=music + - circle:white;./assets/layers/id_presets/fas-guitar.svg corresponds with shop=musical_instrument + - circle:white;./assets/layers/id_presets/fas-newspaper.svg corresponds with shop=newsagent + - circle:white;./assets/layers/id_presets/fas-pills.svg corresponds with shop=nutrition_supplements + - circle:white;./assets/layers/id_presets/maki-optician.svg corresponds with shop=optician + - circle:white;./assets/layers/id_presets/temaki-compass.svg corresponds with shop=outdoor + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=outpost + - circle:white;./assets/layers/id_presets/fas-paint-roller.svg corresponds with shop=paint + - circle:white;./assets/layers/id_presets/temaki-balloon.svg corresponds with shop=party + - circle:white;./assets/layers/id_presets/maki-bakery.svg corresponds with shop=pastry + - circle:white;./assets/layers/id_presets/temaki-money_hand.svg corresponds with shop=pawnbroker + - circle:white;./assets/layers/id_presets/temaki-perfume.svg corresponds with shop=perfumery + - circle:white;./assets/layers/id_presets/fas-cat.svg corresponds with shop=pet + - circle:white;./assets/layers/id_presets/temaki-pet_grooming.svg corresponds with shop=pet_grooming + - circle:white;./assets/layers/id_presets/fas-camera-retro.svg corresponds with shop=photo + - circle:white;./assets/layers/id_presets/temaki-vase.svg corresponds with shop=pottery + - circle:white;./assets/layers/id_presets/fas-print.svg corresponds with shop=printer_ink + - circle:white;./assets/layers/id_presets/temaki-psychic.svg corresponds with shop=psychic + - circle:white;./assets/layers/id_presets/temaki-rocket_firework.svg corresponds with shop=pyrotechnics + - circle:white;./assets/layers/id_presets/fas-microchip.svg corresponds with shop=radiotechnics + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=religion + - circle:white;./assets/layers/id_presets/fas-dolly.svg corresponds with shop=rental + - circle:white;./assets/layers/id_presets/temaki-scuba_diving.svg corresponds with shop=scuba_diving + - circle:white;./assets/layers/id_presets/temaki-fish_cleaning.svg corresponds with shop=seafood + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=second_hand + - circle:white;./assets/layers/id_presets/temaki-needle_and_spool.svg corresponds with shop=sewing + - circle:white;./assets/layers/id_presets/temaki-hammer_shoe.svg corresponds with shop=shoe_repair + - circle:white;./assets/layers/id_presets/maki-shoe.svg corresponds with shop=shoes + - circle:white;./assets/layers/id_presets/temaki-spice_bottle.svg corresponds with shop=spices + - circle:white;./assets/layers/id_presets/fas-futbol.svg corresponds with shop=sports + - circle:white;./assets/layers/id_presets/fas-paperclip.svg corresponds with shop=stationery + - circle:white;./assets/layers/id_presets/temaki-storage_rental.svg corresponds with shop=storage_rental + - circle:white;./assets/layers/id_presets/maki-grocery.svg corresponds with shop=supermarket + - circle:white;./assets/layers/id_presets/temaki-needle_and_spool.svg corresponds with shop=tailor + - circle:white;./assets/layers/id_presets/temaki-tattoo_machine.svg corresponds with shop=tattoo + - circle:white;./assets/layers/id_presets/maki-teahouse.svg corresponds with shop=tea + - circle:white;./assets/layers/id_presets/maki-telephone.svg corresponds with shop=telecommunication + - circle:white;./assets/layers/id_presets/temaki-tiling.svg corresponds with shop=tiles + - circle:white;./assets/layers/id_presets/temaki-pipe.svg corresponds with shop=tobacco + - circle:white;./assets/layers/id_presets/temaki-tools.svg corresponds with shop=tool_hire + - circle:white;./assets/layers/id_presets/fas-rocket.svg corresponds with shop=toys + - circle:white;./assets/layers/id_presets/temaki-tools.svg corresponds with shop=trade + - circle:white;./assets/layers/id_presets/fas-suitcase.svg corresponds with shop=travel_agency + - circle:white;./assets/layers/id_presets/fas-trophy.svg corresponds with shop=trophy + - circle:white;./assets/layers/id_presets/temaki-tire.svg corresponds with shop=tyres + - circle:white;./assets/layers/id_presets/temaki-vacuum.svg corresponds with shop=vacuum_cleaner + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=variety_store + - circle:white;./assets/layers/id_presets/temaki-movie_rental.svg corresponds with shop=video + - circle:white;./assets/layers/id_presets/maki-gaming.svg corresponds with shop=video_games + - circle:white;./assets/layers/id_presets/maki-watch.svg corresponds with shop=watches + - circle:white;./assets/layers/id_presets/temaki-water_bottle.svg corresponds with shop=water + - circle:white;./assets/layers/id_presets/temaki-dagger.svg corresponds with shop=weapons + - circle:white;./assets/layers/id_presets/maki-warehouse.svg corresponds with shop=wholesale + - circle:white;./assets/layers/id_presets/maki-shop.svg corresponds with shop=wigs + - circle:white;./assets/layers/id_presets/temaki-window.svg corresponds with shop=window_blind + - circle:white;./assets/layers/id_presets/maki-alcohol-shop.svg corresponds with shop=wine + + +This document is autogenerated from [assets/layers/id_presets/id_presets.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/id_presets/id_presets.json) \ No newline at end of file diff --git a/Docs/Layers/kerbs.md b/Docs/Layers/kerbs.md new file mode 100644 index 000000000..638ea1d40 --- /dev/null +++ b/Docs/Layers/kerbs.md @@ -0,0 +1,128 @@ + + + kerbs +======= + + + + + +A layer showing kerbs. + + + + + + + - This layer is shown at zoomlevel **13** and higher + - This layer will automatically load [cycleways_and_roads](./cycleways_and_roads.md) into the layout as it depends on it: a preset snaps to this layer (presets[0]) + - This layer will automatically load [kerbs](./kerbs.md) into the layout as it depends on it: a preset snaps to this layer (presets[0]) + - This layer is needed as dependency for layer [kerbs](#kerbs) + + + + +#### Themes using this layer + + + + + + - [kerbs_and_crossings](https://mapcomplete.osm.be/kerbs_and_crossings) + - [personal](https://mapcomplete.osm.be/personal) + + + + + Basic tags for this layer +--------------------------- + + + +Elements must have the all of following tags to be shown on this layer: + + + + - barrier=kerb + + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22barrier%22%3D%22kerb%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + + + + Supported attributes +---------------------- + + + +Warning: + +this quick overview is incomplete + + + +attribute | type | values which are supported by this layer +----------- | ------ | ------------------------------------------ +[](https://taginfo.openstreetmap.org/keys/kerb#values) [kerb](https://wiki.openstreetmap.org/wiki/Key:kerb) | Multiple choice | [raised](https://wiki.openstreetmap.org/wiki/Tag:kerb%3Draised) [lowered](https://wiki.openstreetmap.org/wiki/Tag:kerb%3Dlowered) [flush](https://wiki.openstreetmap.org/wiki/Tag:kerb%3Dflush) +[](https://taginfo.openstreetmap.org/keys/tactile_paving#values) [tactile_paving](https://wiki.openstreetmap.org/wiki/Key:tactile_paving) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dno) +[](https://taginfo.openstreetmap.org/keys/kerb:height#values) [kerb:height](https://wiki.openstreetmap.org/wiki/Key:kerb:height) | [pnat](../SpecialInputElements.md#pnat) | + + + + +### kerb-type + + + +The question is What is the height of this kerb? + + + + + + - This kerb is raised (>3 cm) corresponds with kerb=raised + - This kerb is lowered (~3 cm) corresponds with kerb=lowered + - This kerb is flush (~0cm) corresponds with kerb=flush + - There is no kerb here corresponds with kerb=no + - This option cannot be chosen as answer + - There is a kerb of unknown height corresponds with kerb=yes + - This option cannot be chosen as answer + + +Only visible if `_geometry:type=Point` is shown + + + +### tactile-paving + + + +The question is Is there tactile paving at this kerb? + + + + + + - This kerb has tactile paving. corresponds with tactile_paving=yes + - This kerb does not have tactile paving. corresponds with tactile_paving=no + - This kerb has tactile paving, but it is incorrect corresponds with tactile_paving=incorrect + - This option cannot be chosen as answer + + +Only visible if `_geometry:type=Point` is shown + + + +### kerb-height + + + +The question is What is the height of this kerb? + +This rendering asks information about the property [kerb:height](https://wiki.openstreetmap.org/wiki/Key:kerb:height) + +This is rendered with Kerb height: {{kerb:height}} + + + +This document is autogenerated from [assets/layers/kerbs/kerbs.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/kerbs/kerbs.json) \ No newline at end of file diff --git a/Docs/Layers/parking.md b/Docs/Layers/parking.md index 0f88ff7cb..3f8479bc8 100644 --- a/Docs/Layers/parking.md +++ b/Docs/Layers/parking.md @@ -27,6 +27,7 @@ A layer showing car parkings - [parkings](https://mapcomplete.osm.be/parkings) - [personal](https://mapcomplete.osm.be/personal) + - [transit](https://mapcomplete.osm.be/transit) diff --git a/Docs/Layers/pharmacy.md b/Docs/Layers/pharmacy.md new file mode 100644 index 000000000..8434ce7ae --- /dev/null +++ b/Docs/Layers/pharmacy.md @@ -0,0 +1,170 @@ + + + pharmacy +========== + + + + + + + + + + + - This layer is shown at zoomlevel **13** and higher + + + + +#### Themes using this layer + + + + + + - [healthcare](https://mapcomplete.osm.be/healthcare) + - [personal](https://mapcomplete.osm.be/personal) + - [shops](https://mapcomplete.osm.be/shops) + + + + + Basic tags for this layer +--------------------------- + + + +Elements must have the all of following tags to be shown on this layer: + + + + - amenity=pharmacy + + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22amenity%22%3D%22pharmacy%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + + + + Supported attributes +---------------------- + + + +Warning: + +this quick overview is incomplete + + + +attribute | type | values which are supported by this layer +----------- | ------ | ------------------------------------------ +[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | +[](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | +[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | +[](https://taginfo.openstreetmap.org/keys/wheelchair#values) [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) + + + + +### images + + + +This tagrendering has no question and is thus read-only + + + + + +### opening_hours + + + +The question is What are the opening hours of {title()}? + +This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) + +This is rendered with

    Opening hours

    {opening_hours_table(opening_hours)} + + + + + +### phone + + + +The question is What is the phone number of {title()}? + +This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) + +This is rendered with {phone} + + + + + + - {contact:phone} corresponds with contact:phone~^..*$ + - This option cannot be chosen as answer + + + + +### email + + + +The question is What is the email address of {title()}? + +This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) + +This is rendered with {email} + + + + + + - {contact:email} corresponds with contact:email~^..*$ + - This option cannot be chosen as answer + + + + +### website + + + +The question is What is the website of {title()}? + +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) + +This is rendered with {website} + + + + + + - {contact:website} corresponds with contact:website~^..*$ + - This option cannot be chosen as answer + + + + +### wheelchair + + + +The question is Is this pharmacy easy to access on a wheelchair? + + + + + + - This pharmacy is easy to access on a wheelchair corresponds with wheelchair=yes + - This pharmacy is hard to access on a wheelchair corresponds with wheelchair=no + - This pharmacy has limited access for wheelchair users corresponds with wheelchair=limited + + +This document is autogenerated from [assets/layers/pharmacy/pharmacy.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/pharmacy/pharmacy.json) \ No newline at end of file diff --git a/Docs/Layers/shelter.md b/Docs/Layers/shelter.md new file mode 100644 index 000000000..f3649328b --- /dev/null +++ b/Docs/Layers/shelter.md @@ -0,0 +1,91 @@ + + + shelter +========= + + + + + +Layer showing shelter structures + + + + + + + - This layer is shown at zoomlevel **13** and higher + + + + +#### Themes using this layer + + + + + + - [personal](https://mapcomplete.osm.be/personal) + - [transit](https://mapcomplete.osm.be/transit) + + + + + Basic tags for this layer +--------------------------- + + + +Elements must have the all of following tags to be shown on this layer: + + + + - amenity=shelter + + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22amenity%22%3D%22shelter%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + + + + Supported attributes +---------------------- + + + +Warning: + +this quick overview is incomplete + + + +attribute | type | values which are supported by this layer +----------- | ------ | ------------------------------------------ +[](https://taginfo.openstreetmap.org/keys/shelter_type#values) [shelter_type](https://wiki.openstreetmap.org/wiki/Key:shelter_type) | [string](../SpecialInputElements.md#string) | [public_transport](https://wiki.openstreetmap.org/wiki/Tag:shelter_type%3Dpublic_transport) [picnic_shelter](https://wiki.openstreetmap.org/wiki/Tag:shelter_type%3Dpicnic_shelter) [gazebo](https://wiki.openstreetmap.org/wiki/Tag:shelter_type%3Dgazebo) [weather_shelter](https://wiki.openstreetmap.org/wiki/Tag:shelter_type%3Dweather_shelter) [lean_to](https://wiki.openstreetmap.org/wiki/Tag:shelter_type%3Dlean_to) [pavilion](https://wiki.openstreetmap.org/wiki/Tag:shelter_type%3Dpavilion) [basic_hut](https://wiki.openstreetmap.org/wiki/Tag:shelter_type%3Dbasic_hut) + + + + +### shelter-type + + + +The question is What kind of shelter is this? + +This rendering asks information about the property [shelter_type](https://wiki.openstreetmap.org/wiki/Key:shelter_type) + +This is rendered with Shelter type: {shelter_type} + + + + + + - This is a shelter at a public transport stop. corresponds with shelter_type=public_transport + - This is a shelter protecting from rain at a picnic site. corresponds with shelter_type=picnic_shelter + - This is a gazebo. corresponds with shelter_type=gazebo + - This is a small shelter, primarily intended for short breaks. Usually found in the mountains or alongside roads. corresponds with shelter_type=weather_shelter + - This is a shed with 3 walls, primarily intended for camping. corresponds with shelter_type=lean_to + - This is a pavilion corresponds with shelter_type=pavilion + - This is a basic hut, providing basic shelter and sleeping facilities. corresponds with shelter_type=basic_hut + + +This document is autogenerated from [assets/layers/shelter/shelter.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/shelter/shelter.json) \ No newline at end of file diff --git a/Docs/Layers/shops.md b/Docs/Layers/shops.md index 23eb5eeb4..54a40000d 100644 --- a/Docs/Layers/shops.md +++ b/Docs/Layers/shops.md @@ -5,7 +5,7 @@ - + A shop @@ -62,11 +62,11 @@ this quick overview is incomplete attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | [string](../SpecialInputElements.md#string) | [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) -[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | +[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | Multiple choice | [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [hobby](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhobby) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) +[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | [](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | -[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | @@ -95,36 +95,241 @@ This is rendered with This shop is called {name} -### shops-shop +### shop_types -The question is What does this shop sell? - -This rendering asks information about the property [shop](https://wiki.openstreetmap.org/wiki/Key:shop) - -This is rendered with This shop sells {shop} +The question is What kind of shop is this? - - Convenience store corresponds with shop=convenience - - Supermarket corresponds with shop=supermarket - - Clothing store corresponds with shop=clothes - - Hairdresser corresponds with shop=hairdresser + - Farm Supply Shop corresponds with shop=agrarian + - Liquor Store corresponds with shop=alcohol + - Anime / Manga Shop corresponds with shop=anime + - Antiques Shop corresponds with shop=antiques + - Appliance Store corresponds with shop=appliance + - Art Store corresponds with shop=art + - Baby Goods Store corresponds with shop=baby_goods + - Bag/Luggage Store corresponds with shop=bag - Bakery corresponds with shop=bakery - - Car repair (garage) corresponds with shop=car_repair - - Car dealer corresponds with shop=car + - Bathroom Furnishing Store corresponds with shop=bathroom_furnishing + - Beauty Shop corresponds with shop=beauty + - Bedding/Mattress Store corresponds with shop=bed + - Beverage Store corresponds with shop=beverages + - Bicycle Shop corresponds with shop=bicycle + - Boat Store corresponds with shop=boat + - Bookmaker corresponds with shop=bookmaker + - Book Store corresponds with shop=books + - Brewing Supply Store corresponds with shop=brewing_supplies + - Butcher corresponds with shop=butcher + - Camera Equipment Store corresponds with shop=camera + - Candle Shop corresponds with shop=candles + - Cannabis Shop corresponds with shop=cannabis + - Car Dealership corresponds with shop=car + - Car Parts Store corresponds with shop=car_parts + - Car Repair Shop corresponds with shop=car_repair + - RV Dealership corresponds with shop=caravan + - Carpet Store corresponds with shop=carpet + - Catalog Shop corresponds with shop=catalogue + - Charity Store corresponds with shop=charity + - Cheese Store corresponds with shop=cheese + - Drugstore corresponds with shop=chemist + - Chocolate Store corresponds with shop=chocolate + - Clothing Store corresponds with shop=clothes + - Coffee Store corresponds with shop=coffee + - Collectibles Shop corresponds with shop=collector + - Computer Store corresponds with shop=computer + - Candy Store corresponds with shop=confectionery + - Convenience Store corresponds with shop=convenience + - Copy Store corresponds with shop=copyshop + - Cosmetics Store corresponds with shop=cosmetics + - Country Store corresponds with shop=country_store + - Arts & Crafts Store corresponds with shop=craft + - Curtain Store corresponds with shop=curtain + - Dairy Store corresponds with shop=dairy + - Deli corresponds with shop=deli + - Department Store corresponds with shop=department_store + - DIY Store corresponds with shop=doityourself + - Door Shop corresponds with shop=doors + - Dry Cleaner corresponds with shop=dry_cleaning + - E-Cigarette Shop corresponds with shop=e-cigarette + - Electrical Equipment Store corresponds with shop=electrical + - Electronics Store corresponds with shop=electronics + - Erotic Store corresponds with shop=erotic + - Fabric Store corresponds with shop=fabric + - Produce Stand corresponds with shop=farm + - Fashion Accessories Store corresponds with shop=fashion_accessories + - Fireplace Store corresponds with shop=fireplace + - Fishing Shop corresponds with shop=fishing + - Flooring Supply Shop corresponds with shop=flooring + - Florist corresponds with shop=florist + - Framing Shop corresponds with shop=frame + - Frozen Food Store corresponds with shop=frozen_food + - Fuel Shop corresponds with shop=fuel + - Funeral Home corresponds with shop=funeral_directors + - Furniture Store corresponds with shop=furniture + - Tabletop Game Store corresponds with shop=games + - Garden Center corresponds with shop=garden_centre + - Bottled Gas Shop corresponds with shop=gas + - General Store corresponds with shop=general + - Gift Shop corresponds with shop=gift + - Greengrocer corresponds with shop=greengrocer + - Hairdresser corresponds with shop=hairdresser + - Hairdresser Supply Store corresponds with shop=hairdresser_supply + - Hardware Store corresponds with shop=hardware + - Health Food Shop corresponds with shop=health_food + - Hearing Aids Store corresponds with shop=hearing_aids + - Herbalist corresponds with shop=herbalist + - Hifi Store corresponds with shop=hifi + - Hobby Shop corresponds with shop=hobby + - Household Linen Shop corresponds with shop=household_linen + - Houseware Store corresponds with shop=houseware + - Hunting Shop corresponds with shop=hunting + - Interior Decoration Store corresponds with shop=interior_decoration + - Jewelry Store corresponds with shop=jewelry + - Kiosk corresponds with shop=kiosk + - Kitchen Design Store corresponds with shop=kitchen + - Laundry corresponds with shop=laundry + - Leather Store corresponds with shop=leather + - Lighting Store corresponds with shop=lighting + - Locksmith corresponds with shop=locksmith + - Lottery Shop corresponds with shop=lottery + - Mall corresponds with shop=mall + - Massage Shop corresponds with shop=massage + - Medical Supply Store corresponds with shop=medical_supply + - Military Surplus Store corresponds with shop=military_surplus + - Mobile Phone Store corresponds with shop=mobile_phone + - Model Shop corresponds with shop=model + - Money Lender corresponds with shop=money_lender + - Motorcycle Dealership corresponds with shop=motorcycle + - Motorcycle Repair Shop corresponds with shop=motorcycle_repair + - Music Store corresponds with shop=music + - Musical Instrument Store corresponds with shop=musical_instrument + - Newspaper/Magazine Shop corresponds with shop=newsagent + - Nutrition Supplements Store corresponds with shop=nutrition_supplements + - Optician corresponds with shop=optician + - Outdoors Store corresponds with shop=outdoor + - Online Retailer Outpost corresponds with shop=outpost + - Paint Store corresponds with shop=paint + - Party Supply Store corresponds with shop=party + - Pastry Shop corresponds with shop=pastry + - Pawn Shop corresponds with shop=pawnbroker + - Perfume Store corresponds with shop=perfumery + - Pet Store corresponds with shop=pet + - Pet Grooming Store corresponds with shop=pet_grooming + - Photography Store corresponds with shop=photo + - Pottery Store corresponds with shop=pottery + - Printer Ink Store corresponds with shop=printer_ink + - Psychic corresponds with shop=psychic + - Fireworks Store corresponds with shop=pyrotechnics + - Radio/Electronic Component Store corresponds with shop=radiotechnics + - Religious Store corresponds with shop=religion + - Rental Shop corresponds with shop=rental + - Repair Shop corresponds with shop=repair + - Scuba Diving Shop corresponds with shop=scuba_diving + - Seafood Shop corresponds with shop=seafood + - Consignment/Thrift Store corresponds with shop=second_hand + - Sewing Supply Shop corresponds with shop=sewing + - Shoe Repair Shop corresponds with shop=shoe_repair + - Shoe Store corresponds with shop=shoes + - Spice Shop corresponds with shop=spices + - Sporting Goods Store corresponds with shop=sports + - Stationery Store corresponds with shop=stationery + - Storage Rental corresponds with shop=storage_rental + - Supermarket corresponds with shop=supermarket + - Pool Supply Store corresponds with shop=swimming_pool + - Tailor corresponds with shop=tailor + - Tattoo Parlor corresponds with shop=tattoo + - Tea Store corresponds with shop=tea + - Telecom Retail Store corresponds with shop=telecommunication + - Ticket Seller corresponds with shop=ticket + - Tile Shop corresponds with shop=tiles + - Tobacco Shop corresponds with shop=tobacco + - Tool Rental corresponds with shop=tool_hire + - Toy Store corresponds with shop=toys + - Trade Shop corresponds with shop=trade + - Travel Agency corresponds with shop=travel_agency + - Trophy Shop corresponds with shop=trophy + - Tire Store corresponds with shop=tyres + - Vacuum Cleaner Store corresponds with shop=vacuum_cleaner + - Variety Store corresponds with shop=variety_store + - Video Store corresponds with shop=video + - Video Game Store corresponds with shop=video_games + - Watches Shop corresponds with shop=watches + - Drinking Water Shop corresponds with shop=water + - Watersport/Swim Shop corresponds with shop=water_sports + - Weapon Shop corresponds with shop=weapons + - Wholesale Store corresponds with shop=wholesale + - Wig Shop corresponds with shop=wigs + - Window Blind Store corresponds with shop=window_blind + - Wine Shop corresponds with shop=wine + + +Only visible if `id~^..*$` is shown + + + +### opening_hours + + + +The question is What are the opening hours of {title()}? + +This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) + +This is rendered with

    Opening hours

    {opening_hours_table(opening_hours)} -### shops-phone + +### website -The question is What is the phone number? +The question is What is the website of {title()}? + +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) + +This is rendered with {website} + + + + + + - {contact:website} corresponds with contact:website~^..*$ + - This option cannot be chosen as answer + + + + +### email + + + +The question is What is the email address of {title()}? + +This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) + +This is rendered with {email} + + + + + + - {contact:email} corresponds with contact:email~^..*$ + - This option cannot be chosen as answer + + + + +### phone + + + +The question is What is the phone number of {title()}? This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) @@ -134,44 +339,8 @@ This is rendered with {phone} -### shops-website - - - -The question is What is the website of this shop? - -This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) - -This is rendered with {website} - - - - - -### shops-email - - - -The question is What is the email address of this shop? - -This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) - -This is rendered with {email} - - - - - -### shops-opening_hours - - - -The question is What are the opening hours of this shop? - -This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) - -This is rendered with {opening_hours_table(opening_hours)} - + - {contact:phone} corresponds with contact:phone~^..*$ + - This option cannot be chosen as answer @@ -194,6 +363,32 @@ The question is Which methods of payment are accepted here? +### copyshop-print-sizes + + + +The question is What paper formats does this shop offer? + + + + + + - This shop can print on papers of size A4 corresponds with service:print:A4=yes + - Unselecting this answer will add service:print:A4=no + - This shop can print on papers of size A3 corresponds with service:print:A3=yes + - Unselecting this answer will add service:print:A3=no + - This shop can print on papers of size A2 corresponds with service:print:A2=yes + - Unselecting this answer will add service:print:A2=no + - This shop can print on papers of size A1 corresponds with service:print:A1=yes + - Unselecting this answer will add service:print:A1=no + - This shop can print on papers of size A0 corresponds with service:print:A0=yes + - Unselecting this answer will add service:print:A0=no + + +Only visible if `shop~^.*copyshop.*$|shop~^.*stationary.*$|service:print=yes` is shown + + + ### questions diff --git a/Docs/Layers/transit_routes.md b/Docs/Layers/transit_routes.md new file mode 100644 index 000000000..f5cc1f06a --- /dev/null +++ b/Docs/Layers/transit_routes.md @@ -0,0 +1,172 @@ + + + transit_routes +================ + + + + + +Layer showing bus lines + + + + + + + - This layer is shown at zoomlevel **15** and higher + - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` + + + + +#### Themes using this layer + + + + + + - [personal](https://mapcomplete.osm.be/personal) + - [transit](https://mapcomplete.osm.be/transit) + + + + + Basic tags for this layer +--------------------------- + + + +Elements must have the all of following tags to be shown on this layer: + + + + - type=route + - route=bus + + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22route%22%3D%22bus%22%5D%5B%22type%22%3D%22route%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + + + + Supported attributes +---------------------- + + + +Warning: + +this quick overview is incomplete + + + +attribute | type | values which are supported by this layer +----------- | ------ | ------------------------------------------ +[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/from#values) [from](https://wiki.openstreetmap.org/wiki/Key:from) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/via#values) [via](https://wiki.openstreetmap.org/wiki/Key:via) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/to#values) [to](https://wiki.openstreetmap.org/wiki/Key:to) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/colour#values) [colour](https://wiki.openstreetmap.org/wiki/Key:colour) | [color](../SpecialInputElements.md#color) | +[](https://taginfo.openstreetmap.org/keys/network#values) [network](https://wiki.openstreetmap.org/wiki/Key:network) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | + + + + +### name + + + +The question is What is the name for this bus line? (i.e. Bus XX: From => Via => To) + +This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) + +This is rendered with {name} + + + + + +### from + + + +The question is What is the starting point for this bus line? + +This rendering asks information about the property [from](https://wiki.openstreetmap.org/wiki/Key:from) + +This is rendered with This bus line begins at {from} + + + + + +### via + + + +The question is What is the via point for this bus line? + +This rendering asks information about the property [via](https://wiki.openstreetmap.org/wiki/Key:via) + +This is rendered with This bus line goes via {via} + + + + + +### to + + + +The question is What is the ending point for this bus line? + +This rendering asks information about the property [to](https://wiki.openstreetmap.org/wiki/Key:to) + +This is rendered with This bus line ends at {to} + + + + + +### colour + + + +The question is What is the colour for this bus line? + +This rendering asks information about the property [colour](https://wiki.openstreetmap.org/wiki/Key:colour) + +This is rendered with This bus line has the color {colour} + + + + + +### network + + + +The question is What network does this bus line belong to? + +This rendering asks information about the property [network](https://wiki.openstreetmap.org/wiki/Key:network) + +This is rendered with This bus line is part of the {network} network + + + + + +### operator + + + +The question is What company operates this bus line? + +This rendering asks information about the property [operator](https://wiki.openstreetmap.org/wiki/Key:operator) + +This is rendered with This bus line is operated by {operator} + + + +This document is autogenerated from [assets/layers/transit_routes/transit_routes.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/transit_routes/transit_routes.json) \ No newline at end of file diff --git a/Docs/Layers/transit_stops.md b/Docs/Layers/transit_stops.md new file mode 100644 index 000000000..562fd107b --- /dev/null +++ b/Docs/Layers/transit_stops.md @@ -0,0 +1,240 @@ + + + transit_stops +=============== + + + + + +Layer showing different types of transit stops. + + + + + + + - This layer is shown at zoomlevel **15** and higher + + + + +#### Themes using this layer + + + + + + - [personal](https://mapcomplete.osm.be/personal) + - [transit](https://mapcomplete.osm.be/transit) + + + + + Basic tags for this layer +--------------------------- + + + +Elements must have the all of following tags to be shown on this layer: + + + + - highway=bus_stop + + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22highway%22%3D%22bus_stop%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + + + + Supported attributes +---------------------- + + + +Warning: + +this quick overview is incomplete + + + +attribute | type | values which are supported by this layer +----------- | ------ | ------------------------------------------ +[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:name%3D) +[](https://taginfo.openstreetmap.org/keys/shelter#values) [shelter](https://wiki.openstreetmap.org/wiki/Key:shelter) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:shelter%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:shelter%3Dno) +[](https://taginfo.openstreetmap.org/keys/bench#values) [bench](https://wiki.openstreetmap.org/wiki/Key:bench) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:bench%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:bench%3Dno) +[](https://taginfo.openstreetmap.org/keys/bin#values) [bin](https://wiki.openstreetmap.org/wiki/Key:bin) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:bin%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:bin%3Dno) +[](https://taginfo.openstreetmap.org/keys/wheelchair#values) [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) +[](https://taginfo.openstreetmap.org/keys/tactile_paving#values) [tactile_paving](https://wiki.openstreetmap.org/wiki/Key:tactile_paving) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dno) +[](https://taginfo.openstreetmap.org/keys/lit#values) [lit](https://wiki.openstreetmap.org/wiki/Key:lit) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:lit%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:lit%3Dno) +[](https://taginfo.openstreetmap.org/keys/departures_board#values) [departures_board](https://wiki.openstreetmap.org/wiki/Key:departures_board) | Multiple choice | [realtime](https://wiki.openstreetmap.org/wiki/Tag:departures_board%3Drealtime) [timetable](https://wiki.openstreetmap.org/wiki/Tag:departures_board%3Dtimetable) [interval](https://wiki.openstreetmap.org/wiki/Tag:departures_board%3Dinterval) [no](https://wiki.openstreetmap.org/wiki/Tag:departures_board%3Dno) + + + + +### stop_name + + + +The question is What is the name of this stop? + +This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) + +This is rendered with This stop is called {name} + + + + + + - This stop has no name corresponds with noname=yes + + + + +### images + + + +This tagrendering has no question and is thus read-only + + + + + +### shelter + + + +The question is Does this stop have a shelter? + + + + + + - This stop has a shelter corresponds with shelter=yes + - This stop does not have a shelter corresponds with shelter=no + - This stop has a shelter, that's separately mapped corresponds with shelter=separate + - This option cannot be chosen as answer + + + + +### bench + + + +The question is Does this stop have a bench? + + + + + + - This stop has a bench corresponds with bench=yes + - This stop does not have a bench corresponds with bench=no + - This stop has a bench, that's separately mapped corresponds with bench=separate + - This option cannot be chosen as answer + + + + +### bin + + + +The question is Does this stop have a bin? + + + + + + - This stop has a bin corresponds with bin=yes + - This stop does not have a bin corresponds with bin=no + - This stop has a bin, that's separately mapped corresponds with bin=separate + - This option cannot be chosen as answer + + + + +### wheelchair-access + + + +The question is Is this place accessible with a wheelchair? + + + + + + - This place is specially adapted for wheelchair users corresponds with wheelchair=designated + - This place is easily reachable with a wheelchair corresponds with wheelchair=yes + - It is possible to reach this place in a wheelchair, but it is not easy corresponds with wheelchair=limited + - This place is not reachable with a wheelchair corresponds with wheelchair=no + + + + +### tactile_paving + + + +The question is Does this stop have tactile paving? + + + + + + - This stop has tactile paving corresponds with tactile_paving=yes + - This stop does not have tactile paving corresponds with tactile_paving=no + + + + +### lit + + + +The question is Is this stop lit? + + + + + + - This stop is lit corresponds with lit=yes + - This stop is not lit corresponds with lit=no + + + + +### departures_board + + + +This tagrendering has no question and is thus read-only + + + + + + - This stop has a departures board of unknown type corresponds with departures_board=yes + - This option cannot be chosen as answer + - This stop has a board showing realtime departure information corresponds with departures_board=realtime + - This stop has a board showing realtime departure information corresponds with passenger_information_display=yes + - This option cannot be chosen as answer + - This stop has a timetable showing regular departures corresponds with departures_board=timetable + - This stop has a timetable containing just the interval between departures corresponds with departures_board=interval + - This stop does not have a departures board corresponds with departures_board=no + + + + +### contained_routes + + + +This tagrendering has no question and is thus read-only + + + +Only visible if `_contained_routes~^..*$` is shown + +This document is autogenerated from [assets/layers/transit_stops/transit_stops.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/transit_stops/transit_stops.json) \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_cycle_infra.json b/Docs/TagInfo/mapcomplete_cycle_infra.json index 89bccd1df..b68fd2ec2 100644 --- a/Docs/TagInfo/mapcomplete_cycle_infra.json +++ b/Docs/TagInfo/mapcomplete_cycle_infra.json @@ -60,6 +60,41 @@ "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", "value": "secondary" }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "tertiary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "primary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "secondary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "service" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "footway" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "pedestrian" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", + "value": "living_street" + }, { "key": "highway", "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways and roads showing features with this tag", diff --git a/Docs/TagInfo/mapcomplete_healthcare.json b/Docs/TagInfo/mapcomplete_healthcare.json new file mode 100644 index 000000000..5f7b5e2d1 --- /dev/null +++ b/Docs/TagInfo/mapcomplete_healthcare.json @@ -0,0 +1,194 @@ +{ + "data_format": 1, + "project": { + "name": "MapComplete Healthcare", + "description": "On this map, various healthcare related items are shown", + "project_url": "https://mapcomplete.osm.be/healthcare", + "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", + "icon_url": "https://mapcomplete.osm.be/assets/layers/doctors/doctors.svg", + "contact_name": "Pieter Vander Vennet, MapComplete", + "contact_email": "pietervdvn@posteo.net" + }, + "tags": [ + { + "key": "amenity", + "description": "The MapComplete theme Healthcare has a layer doctors showing features with this tag", + "value": "doctors" + }, + { + "key": "amenity", + "description": "The MapComplete theme Healthcare has a layer doctors showing features with this tag", + "value": "dentist" + }, + { + "key": "healthcare", + "description": "The MapComplete theme Healthcare has a layer doctors showing features with this tag", + "value": "physiotherapist" + }, + { + "key": "image", + "description": "The layer 'doctors allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'doctors allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'doctors allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'doctors allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "opening_hours", + "description": "Layer 'doctors' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "phone", + "description": "Layer 'doctors' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "contact:phone", + "description": "Layer 'doctors' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "email", + "description": "Layer 'doctors' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "contact:email", + "description": "Layer 'doctors' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "website", + "description": "Layer 'doctors' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "contact:website", + "description": "Layer 'doctors' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows and asks freeform values for key 'healthcare:speciality' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows healthcare:speciality=general with a fixed text, namely 'This is a general practitioner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Healthcare')", + "value": "general" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows healthcare:speciality=gynaecology with a fixed text, namely 'This is a gynaecologist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Healthcare')", + "value": "gynaecology" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows healthcare:speciality=psychiatry with a fixed text, namely 'This is a psychiatrist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Healthcare')", + "value": "psychiatry" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows healthcare:speciality=paediatrics with a fixed text, namely 'This is a paediatrician' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Healthcare')", + "value": "paediatrics" + }, + { + "key": "amenity", + "description": "The MapComplete theme Healthcare has a layer Hospital showing features with this tag", + "value": "hospital" + }, + { + "key": "name", + "description": "Layer 'Hospital' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "phone", + "description": "Layer 'Hospital' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "contact:phone", + "description": "Layer 'Hospital' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "email", + "description": "Layer 'Hospital' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "contact:email", + "description": "Layer 'Hospital' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "website", + "description": "Layer 'Hospital' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "contact:website", + "description": "Layer 'Hospital' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "amenity", + "description": "The MapComplete theme Healthcare has a layer pharmacy showing features with this tag", + "value": "pharmacy" + }, + { + "key": "image", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "opening_hours", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "phone", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "contact:phone", + "description": "Layer 'pharmacy' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "email", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "contact:email", + "description": "Layer 'pharmacy' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "website", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "contact:website", + "description": "Layer 'pharmacy' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Healthcare')" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=yes with a fixed text, namely 'This pharmacy is easy to access on a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Healthcare')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=no with a fixed text, namely 'This pharmacy is hard to access on a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Healthcare')", + "value": "no" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=limited with a fixed text, namely 'This pharmacy has limited access for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Healthcare')", + "value": "limited" + } + ] +} \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_kerbs_and_crossings.json b/Docs/TagInfo/mapcomplete_kerbs_and_crossings.json new file mode 100644 index 000000000..cdc0aabad --- /dev/null +++ b/Docs/TagInfo/mapcomplete_kerbs_and_crossings.json @@ -0,0 +1,726 @@ +{ + "data_format": 1, + "project": { + "name": "MapComplete Kerbs and crossings", + "description": "A map showing kerbs and crossings", + "project_url": "https://mapcomplete.osm.be/kerbs_and_crossings", + "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", + "icon_url": "https://mapcomplete.osm.be/assets/layers/kerbs/KerbIcon.svg", + "contact_name": "Pieter Vander Vennet, Robin van der Linde", + "contact_email": "pietervdvn@posteo.net" + }, + "tags": [ + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "cycleway" + }, + { + "key": "cycleway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "lane" + }, + { + "key": "cycleway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "shared_lane" + }, + { + "key": "cycleway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "track" + }, + { + "key": "cyclestreet", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "yes" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "residential" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "tertiary" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "unclassified" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "primary" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "secondary" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "tertiary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "primary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "secondary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "service" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "footway" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "pedestrian" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "living_street" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "path" + }, + { + "key": "bicycle", + "description": "The MapComplete theme Kerbs and crossings has a layer Cycleways and roads showing features with this tag", + "value": "designated" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=shared_lane with a fixed text, namely 'There is a shared lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "shared_lane" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=lane with a fixed text, namely 'There is a lane next to the road (separated with paint)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "lane" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=track with a fixed text, namely 'There is a track, but no cycleway drawn separately from this road on the map.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "track" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=separate with a fixed text, namely 'There is a separately drawn cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "separate" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "lit", + "description": "Layer 'Cycleways and roads' shows lit=yes with a fixed text, namely 'This street is lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "lit", + "description": "Layer 'Cycleways and roads' shows lit=no with a fixed text, namely 'This road is not lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "lit", + "description": "Layer 'Cycleways and roads' shows lit=sunset-sunrise with a fixed text, namely 'This road is lit at night' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "sunset-sunrise" + }, + { + "key": "lit", + "description": "Layer 'Cycleways and roads' shows lit=24/7 with a fixed text, namely 'This road is lit 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "24/7" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cycleways and roads' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet, and a 30km/h zone.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cycleways and roads' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cycleways and roads' shows with a fixed text, namely 'This is not a cyclestreet.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings') Picking this answer will delete the key cyclestreet.", + "value": "" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'maxspeed' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=20 with a fixed text, namely 'The maximum speed is 20 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "20" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=30 with a fixed text, namely 'The maximum speed is 30 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "30" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=50 with a fixed text, namely 'The maximum speed is 50 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "50" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=70 with a fixed text, namely 'The maximum speed is 70 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "70" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=90 with a fixed text, namely 'The maximum speed is 90 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "90" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'cycleway:surface' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=unpaved with a fixed text, namely 'This cycleway is unpaved' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "unpaved" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=paved with a fixed text, namely 'This cycleway is paved' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "paved" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=asphalt with a fixed text, namely 'This cycleway is made of asphalt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "asphalt" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=paving_stones with a fixed text, namely 'This cycleway is made of smooth paving stones' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "paving_stones" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=concrete with a fixed text, namely 'This cycleway is made of concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "concrete" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=cobblestone with a fixed text, namely 'This cycleway is made of cobblestone (unhewn or sett)' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "cobblestone" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=unhewn_cobblestone with a fixed text, namely 'This cycleway is made of raw, natural cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "unhewn_cobblestone" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=sett with a fixed text, namely 'This cycleway is made of flat, square cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "sett" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=wood with a fixed text, namely 'This cycleway is made of wood' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "wood" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=gravel with a fixed text, namely 'This cycleway is made of gravel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "gravel" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=fine_gravel with a fixed text, namely 'This cycleway is made of fine gravel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "fine_gravel" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=pebblestone with a fixed text, namely 'This cycleway is made of pebblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "pebblestone" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=ground with a fixed text, namely 'This cycleway is made from raw ground' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "ground" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=excellent with a fixed text, namely 'Usable for thin rollers: rollerblade, skateboard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "excellent" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=good with a fixed text, namely 'Usable for thin wheels: racing bike' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "good" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=intermediate with a fixed text, namely 'Usable for normal wheels: city bike, wheelchair, scooter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "intermediate" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=bad with a fixed text, namely 'Usable for robust wheels: trekking bike, car, rickshaw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "bad" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=very_bad with a fixed text, namely 'Usable for vehicles with high clearance: light duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "very_bad" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=horrible with a fixed text, namely 'Usable for off-road vehicles: heavy duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "horrible" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=very_horrible with a fixed text, namely 'Usable for specialized off-road vehicles: tractor, ATV' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "very_horrible" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=impassable with a fixed text, namely 'Impassable / No wheeled vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "impassable" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=unpaved with a fixed text, namely 'This cycleway is unhardened' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "unpaved" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=paved with a fixed text, namely 'This cycleway is paved' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "paved" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=asphalt with a fixed text, namely 'This cycleway is made of asphalt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "asphalt" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=paving_stones with a fixed text, namely 'This cycleway is made of smooth paving stones' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "paving_stones" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=concrete with a fixed text, namely 'This cycleway is made of concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "concrete" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=cobblestone with a fixed text, namely 'This cycleway is made of cobblestone (unhewn or sett)' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "cobblestone" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=unhewn_cobblestone with a fixed text, namely 'This cycleway is made of raw, natural cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "unhewn_cobblestone" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=sett with a fixed text, namely 'This cycleway is made of flat, square cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "sett" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=wood with a fixed text, namely 'This cycleway is made of wood' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "wood" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=gravel with a fixed text, namely 'This cycleway is made of gravel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "gravel" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=fine_gravel with a fixed text, namely 'This cycleway is made of fine gravel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "fine_gravel" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=pebblestone with a fixed text, namely 'This cycleway is made of pebblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "pebblestone" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=ground with a fixed text, namely 'This cycleway is made from raw ground' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "ground" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=excellent with a fixed text, namely 'Usable for thin rollers: rollerblade, skateboard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "excellent" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=good with a fixed text, namely 'Usable for thin wheels: racing bike' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "good" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=intermediate with a fixed text, namely 'Usable for normal wheels: city bike, wheelchair, scooter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "intermediate" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=bad with a fixed text, namely 'Usable for robust wheels: trekking bike, car, rickshaw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "bad" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=very_bad with a fixed text, namely 'Usable for vehicles with high clearance: light duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "very_bad" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=horrible with a fixed text, namely 'Usable for off-road vehicles: heavy duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "horrible" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=very_horrible with a fixed text, namely 'Usable for specialized off-road vehicles: tractor, ATV' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "very_horrible" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=impassable with a fixed text, namely 'Impassable / No wheeled vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "impassable" + }, + { + "key": "width:carriageway", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'width:carriageway' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7 with a fixed text, namely 'Compulsory cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign~^BE:D7;.*$ with a fixed text, namely 'Compulsory cycleway (with supplementary sign)
    ' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D9 with a fixed text, namely 'Segregated foot/cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D9" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D10 with a fixed text, namely 'Unsegregated foot/cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D10" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=none with a fixed text, namely 'No traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "none" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D7 with a fixed text, namely 'Compulsory cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign~^BE:D7;.*$ with a fixed text, namely 'Compulsory cycleway (with supplementary sign)
    ' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D9 with a fixed text, namely 'Segregated foot/cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D9" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D10 with a fixed text, namely 'Unsegregated foot/cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D10" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=NL:G11 with a fixed text, namely 'Compulsory cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "NL:G11" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=NL:G12a with a fixed text, namely 'Compulsory (moped)cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "NL:G12a" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=NL:G13 with a fixed text, namely 'Non-compulsory cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "NL:G13" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=none with a fixed text, namely 'No traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "none" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M6 with a fixed text, namely 'Mopeds must use the cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7;BE:M6" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M13 with a fixed text, namely 'Speedpedelecs must use the cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7;BE:M13" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M14 with a fixed text, namely 'Mopeds and speedpedelecs must use the cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7;BE:M14" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M7 with a fixed text, namely 'Mopeds are not allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7;BE:M7" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M15 with a fixed text, namely 'Speedpedelecs are not allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7;BE:M15" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M16 with a fixed text, namely 'Mopeds and speedpedelecs are not allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "BE:D7;BE:M16" + }, + { + "key": "cycleway:traffic_sign:supplementary", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign:supplementary=none with a fixed text, namely 'No supplementary traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "none" + }, + { + "key": "cycleway:buffer", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'cycleway:buffer' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + }, + { + "key": "cycleway:separation", + "description": "Layer 'Cycleways and roads' shows cycleway:separation=dashed_line with a fixed text, namely 'This cycleway is separated by a dashed line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "dashed_line" + }, + { + "key": "cycleway:separation", + "description": "Layer 'Cycleways and roads' shows cycleway:separation=solid_line with a fixed text, namely 'This cycleway is separated by a solid line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "solid_line" + }, + { + "key": "cycleway:separation", + "description": "Layer 'Cycleways and roads' shows cycleway:separation=parking_lane with a fixed text, namely 'This cycleway is separated by a parking lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "parking_lane" + }, + { + "key": "cycleway:separation", + "description": "Layer 'Cycleways and roads' shows cycleway:separation=kerb with a fixed text, namely 'This cycleway is separated by a kerb' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "kerb" + }, + { + "key": "separation", + "description": "Layer 'Cycleways and roads' shows separation=dashed_line with a fixed text, namely 'This cycleway is separated by a dashed line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "dashed_line" + }, + { + "key": "separation", + "description": "Layer 'Cycleways and roads' shows separation=solid_line with a fixed text, namely 'This cycleway is separated by a solid line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "solid_line" + }, + { + "key": "separation", + "description": "Layer 'Cycleways and roads' shows separation=parking_lane with a fixed text, namely 'This cycleway is separated by a parking lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "parking_lane" + }, + { + "key": "separation", + "description": "Layer 'Cycleways and roads' shows separation=kerb with a fixed text, namely 'This cycleway is separated by a kerb' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "kerb" + }, + { + "key": "highway", + "description": "The MapComplete theme Kerbs and crossings has a layer Crossings showing features with this tag", + "value": "crossing" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=uncontrolled with a fixed text, namely 'Crossing, without traffic lights' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "uncontrolled" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=traffic_signals with a fixed text, namely 'Crossing with traffic signals' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "traffic_signals" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=zebra with a fixed text, namely 'Zebra crossing' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "zebra" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=unmarked with a fixed text, namely 'Crossing without crossing markings' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "unmarked" + }, + { + "key": "crossing_ref", + "description": "Layer 'Crossings' shows crossing_ref=zebra with a fixed text, namely 'This is a zebra crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "zebra" + }, + { + "key": "crossing_ref", + "description": "Layer 'Crossings' shows with a fixed text, namely 'This is not a zebra crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings') Picking this answer will delete the key crossing_ref.", + "value": "" + }, + { + "key": "bicycle", + "description": "Layer 'Crossings' shows bicycle=yes with a fixed text, namely 'A cyclist can use this crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "bicycle", + "description": "Layer 'Crossings' shows bicycle=no with a fixed text, namely 'A cyclist can not use this crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "crossing:island", + "description": "Layer 'Crossings' shows crossing:island=yes with a fixed text, namely 'This crossing has an island in the middle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "crossing:island", + "description": "Layer 'Crossings' shows crossing:island=no with a fixed text, namely 'This crossing does not have an island in the middle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Crossings' shows tactile_paving=yes with a fixed text, namely 'This crossing has tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Crossings' shows tactile_paving=no with a fixed text, namely 'This crossing does not have tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Crossings' shows tactile_paving=incorrect with a fixed text, namely 'This crossing has tactile paving, but is not correct' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "incorrect" + }, + { + "key": "button_operated", + "description": "Layer 'Crossings' shows button_operated=yes with a fixed text, namely 'This traffic light has a button to request green light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "button_operated", + "description": "Layer 'Crossings' shows button_operated=no with a fixed text, namely 'This traffic light does not have a button to request green light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "red_turn:right:bicycle", + "description": "Layer 'Crossings' shows red_turn:right:bicycle=yes with a fixed text, namely 'A cyclist can turn right if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "red_turn:right:bicycle", + "description": "Layer 'Crossings' shows red_turn:right:bicycle=yes with a fixed text, namely 'A cyclist can turn right if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "red_turn:right:bicycle", + "description": "Layer 'Crossings' shows red_turn:right:bicycle=no with a fixed text, namely 'A cyclist can not turn right if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "red_turn:straight:bicycle", + "description": "Layer 'Crossings' shows red_turn:straight:bicycle=yes with a fixed text, namely 'A cyclist can go straight on if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "red_turn:straight:bicycle", + "description": "Layer 'Crossings' shows red_turn:straight:bicycle=yes with a fixed text, namely 'A cyclist can go straight on if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "red_turn:straight:bicycle", + "description": "Layer 'Crossings' shows red_turn:straight:bicycle=no with a fixed text, namely 'A cyclist can not go straight on if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "barrier", + "description": "The MapComplete theme Kerbs and crossings has a layer Kerbs showing features with this tag", + "value": "kerb" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=raised with a fixed text, namely 'This kerb is raised (>3 cm)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "raised" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=lowered with a fixed text, namely 'This kerb is lowered (~3 cm)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "lowered" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=flush with a fixed text, namely 'This kerb is flush (~0cm)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "flush" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=no with a fixed text, namely 'There is no kerb here' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=yes with a fixed text, namely 'There is a kerb of unknown height' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Kerbs' shows tactile_paving=yes with a fixed text, namely 'This kerb has tactile paving.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Kerbs' shows tactile_paving=no with a fixed text, namely 'This kerb does not have tactile paving.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Kerbs' shows tactile_paving=incorrect with a fixed text, namely 'This kerb has tactile paving, but it is incorrect' (in the MapComplete.osm.be theme 'Kerbs and crossings')", + "value": "incorrect" + }, + { + "key": "kerb:height", + "description": "Layer 'Kerbs' shows and asks freeform values for key 'kerb:height' (in the MapComplete.osm.be theme 'Kerbs and crossings')" + } + ] +} \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_personal.json b/Docs/TagInfo/mapcomplete_personal.json index 17547df86..f90d685f0 100644 --- a/Docs/TagInfo/mapcomplete_personal.json +++ b/Docs/TagInfo/mapcomplete_personal.json @@ -3903,6 +3903,41 @@ "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", "value": "secondary" }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "tertiary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "primary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "secondary_link" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "service" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "footway" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "pedestrian" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "living_street" + }, { "key": "highway", "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", @@ -4534,6 +4569,89 @@ "key": "fixme", "description": "Layer 'Defibrillators' shows and asks freeform values for key 'fixme' (in the MapComplete.osm.be theme 'Personal theme')" }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer doctors showing features with this tag", + "value": "doctors" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer doctors showing features with this tag", + "value": "dentist" + }, + { + "key": "healthcare", + "description": "The MapComplete theme Personal theme has a layer doctors showing features with this tag", + "value": "physiotherapist" + }, + { + "key": "image", + "description": "The layer 'doctors allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'doctors allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'doctors allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'doctors allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "opening_hours", + "description": "Layer 'doctors' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'doctors' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'doctors' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'doctors' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:email", + "description": "Layer 'doctors' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'doctors' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:website", + "description": "Layer 'doctors' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows and asks freeform values for key 'healthcare:speciality' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows healthcare:speciality=general with a fixed text, namely 'This is a general practitioner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "general" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows healthcare:speciality=gynaecology with a fixed text, namely 'This is a gynaecologist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "gynaecology" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows healthcare:speciality=psychiatry with a fixed text, namely 'This is a psychiatrist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "psychiatry" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows healthcare:speciality=paediatrics with a fixed text, namely 'This is a paediatrician' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "paediatrics" + }, { "key": "leisure", "description": "The MapComplete theme Personal theme has a layer dog parks showing features with this tag", @@ -5502,6 +5620,39 @@ "key": "start_date", "description": "Layer 'Hackerspace' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'Personal theme')" }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Hospital showing features with this tag", + "value": "hospital" + }, + { + "key": "name", + "description": "Layer 'Hospital' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Hospital' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'Hospital' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Hospital' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:email", + "description": "Layer 'Hospital' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'Hospital' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:website", + "description": "Layer 'Hospital' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, { "key": "emergency", "description": "The MapComplete theme Personal theme has a layer Map of hydrants showing features with this tag", @@ -5617,6 +5768,55 @@ "key": "wikipedia", "description": "The layer 'Information boards allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" }, + { + "key": "barrier", + "description": "The MapComplete theme Personal theme has a layer Kerbs showing features with this tag", + "value": "kerb" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=raised with a fixed text, namely 'This kerb is raised (>3 cm)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "raised" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=lowered with a fixed text, namely 'This kerb is lowered (~3 cm)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "lowered" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=flush with a fixed text, namely 'This kerb is flush (~0cm)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "flush" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=no with a fixed text, namely 'There is no kerb here' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "kerb", + "description": "Layer 'Kerbs' shows kerb=yes with a fixed text, namely 'There is a kerb of unknown height' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Kerbs' shows tactile_paving=yes with a fixed text, namely 'This kerb has tactile paving.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Kerbs' shows tactile_paving=no with a fixed text, namely 'This kerb does not have tactile paving.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Kerbs' shows tactile_paving=incorrect with a fixed text, namely 'This kerb has tactile paving, but it is incorrect' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "incorrect" + }, + { + "key": "kerb:height", + "description": "Layer 'Kerbs' shows and asks freeform values for key 'kerb:height' (in the MapComplete.osm.be theme 'Personal theme')" + }, { "key": "tourism", "description": "The MapComplete theme Personal theme has a layer Maps showing features with this tag", @@ -6087,6 +6287,70 @@ "key": "wikipedia", "description": "The layer 'Parking allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer pharmacy showing features with this tag", + "value": "pharmacy" + }, + { + "key": "image", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "opening_hours", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'pharmacy' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:email", + "description": "Layer 'pharmacy' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:website", + "description": "Layer 'pharmacy' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=yes with a fixed text, namely 'This pharmacy is easy to access on a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=no with a fixed text, namely 'This pharmacy is hard to access on a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=limited with a fixed text, namely 'This pharmacy has limited access for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, { "key": "leisure", "description": "The MapComplete theme Personal theme has a layer Picnic tables showing features with this tag", @@ -6624,6 +6888,50 @@ "description": "Layer 'Recycling' shows opening_hours=24/7 with a fixed text, namely '24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", "value": "24/7" }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Shelter showing features with this tag", + "value": "shelter" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows and asks freeform values for key 'shelter_type' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=public_transport with a fixed text, namely 'This is a shelter at a public transport stop.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "public_transport" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=picnic_shelter with a fixed text, namely 'This is a shelter protecting from rain at a picnic site.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "picnic_shelter" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=gazebo with a fixed text, namely 'This is a gazebo.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "gazebo" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=weather_shelter with a fixed text, namely 'This is a small shelter, primarily intended for short breaks. Usually found in the mountains or alongside roads.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "weather_shelter" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=lean_to with a fixed text, namely 'This is a shed with 3 walls, primarily intended for camping.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "lean_to" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=pavilion with a fixed text, namely 'This is a pavilion' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pavilion" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=basic_hut with a fixed text, namely 'This is a basic hut, providing basic shelter and sleeping facilities.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "basic_hut" + }, { "key": "shop", "description": "The MapComplete theme Personal theme has a layer Shop showing features with this tag" @@ -6650,27 +6958,43 @@ }, { "key": "shop", - "description": "Layer 'Shop' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'Personal theme')" + "description": "Layer 'Shop' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "agrarian" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=convenience with a fixed text, namely 'Convenience store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", - "value": "convenience" + "description": "Layer 'Shop' shows shop=alcohol with a fixed text, namely 'Liquor Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "alcohol" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", - "value": "supermarket" + "description": "Layer 'Shop' shows shop=anime with a fixed text, namely 'Anime / Manga Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "anime" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=clothes with a fixed text, namely 'Clothing store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", - "value": "clothes" + "description": "Layer 'Shop' shows shop=antiques with a fixed text, namely 'Antiques Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "antiques" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", - "value": "hairdresser" + "description": "Layer 'Shop' shows shop=appliance with a fixed text, namely 'Appliance Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "appliance" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=art with a fixed text, namely 'Art Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "art" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=baby_goods with a fixed text, namely 'Baby Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "baby_goods" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bag with a fixed text, namely 'Bag/Luggage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bag" }, { "key": "shop", @@ -6679,29 +7003,786 @@ }, { "key": "shop", - "description": "Layer 'Shop' shows shop=car_repair with a fixed text, namely 'Car repair (garage)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "description": "Layer 'Shop' shows shop=bathroom_furnishing with a fixed text, namely 'Bathroom Furnishing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bathroom_furnishing" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=beauty with a fixed text, namely 'Beauty Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "beauty" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bed with a fixed text, namely 'Bedding/Mattress Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bed" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=beverages with a fixed text, namely 'Beverage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "beverages" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bicycle with a fixed text, namely 'Bicycle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bicycle" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=boat with a fixed text, namely 'Boat Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "boat" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bookmaker with a fixed text, namely 'Bookmaker' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bookmaker" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=books with a fixed text, namely 'Book Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "books" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=brewing_supplies with a fixed text, namely 'Brewing Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "brewing_supplies" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=butcher with a fixed text, namely 'Butcher' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "butcher" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=camera with a fixed text, namely 'Camera Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "camera" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=candles with a fixed text, namely 'Candle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "candles" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=cannabis with a fixed text, namely 'Cannabis Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "cannabis" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=car with a fixed text, namely 'Car Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "car" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=car_parts with a fixed text, namely 'Car Parts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "car_parts" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=car_repair with a fixed text, namely 'Car Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", "value": "car_repair" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=car with a fixed text, namely 'Car dealer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", - "value": "car" + "description": "Layer 'Shop' shows shop=caravan with a fixed text, namely 'RV Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "caravan" }, { - "key": "phone", - "description": "Layer 'Shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + "key": "shop", + "description": "Layer 'Shop' shows shop=carpet with a fixed text, namely 'Carpet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "carpet" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=catalogue with a fixed text, namely 'Catalog Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "catalogue" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=charity with a fixed text, namely 'Charity Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "charity" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=cheese with a fixed text, namely 'Cheese Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "cheese" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=chemist with a fixed text, namely 'Drugstore' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "chemist" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=chocolate with a fixed text, namely 'Chocolate Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "chocolate" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=clothes with a fixed text, namely 'Clothing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "clothes" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=coffee with a fixed text, namely 'Coffee Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "coffee" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=collector with a fixed text, namely 'Collectibles Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "collector" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=computer with a fixed text, namely 'Computer Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "computer" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=confectionery with a fixed text, namely 'Candy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "confectionery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=convenience with a fixed text, namely 'Convenience Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "convenience" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=copyshop with a fixed text, namely 'Copy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "copyshop" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=cosmetics with a fixed text, namely 'Cosmetics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "cosmetics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=country_store with a fixed text, namely 'Country Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "country_store" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=craft with a fixed text, namely 'Arts & Crafts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "craft" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=curtain with a fixed text, namely 'Curtain Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "curtain" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=dairy with a fixed text, namely 'Dairy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "dairy" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=deli with a fixed text, namely 'Deli' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "deli" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=department_store with a fixed text, namely 'Department Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "department_store" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=doityourself with a fixed text, namely 'DIY Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "doityourself" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=doors with a fixed text, namely 'Door Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "doors" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=dry_cleaning with a fixed text, namely 'Dry Cleaner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "dry_cleaning" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=e-cigarette with a fixed text, namely 'E-Cigarette Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "e-cigarette" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=electrical with a fixed text, namely 'Electrical Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "electrical" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=electronics with a fixed text, namely 'Electronics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "electronics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=erotic with a fixed text, namely 'Erotic Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "erotic" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fabric with a fixed text, namely 'Fabric Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fabric" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=farm with a fixed text, namely 'Produce Stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "farm" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fashion_accessories with a fixed text, namely 'Fashion Accessories Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fashion_accessories" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fireplace with a fixed text, namely 'Fireplace Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fireplace" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fishing with a fixed text, namely 'Fishing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fishing" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=flooring with a fixed text, namely 'Flooring Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "flooring" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=florist with a fixed text, namely 'Florist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "florist" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=frame with a fixed text, namely 'Framing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "frame" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=frozen_food with a fixed text, namely 'Frozen Food Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "frozen_food" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fuel with a fixed text, namely 'Fuel Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fuel" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=funeral_directors with a fixed text, namely 'Funeral Home' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "funeral_directors" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=furniture with a fixed text, namely 'Furniture Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "furniture" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=games with a fixed text, namely 'Tabletop Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "games" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=garden_centre with a fixed text, namely 'Garden Center' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "garden_centre" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=gas with a fixed text, namely 'Bottled Gas Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "gas" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=general with a fixed text, namely 'General Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "general" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=gift with a fixed text, namely 'Gift Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "gift" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=greengrocer with a fixed text, namely 'Greengrocer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "greengrocer" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hairdresser" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hairdresser_supply with a fixed text, namely 'Hairdresser Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hairdresser_supply" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hardware with a fixed text, namely 'Hardware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hardware" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=health_food with a fixed text, namely 'Health Food Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "health_food" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hearing_aids with a fixed text, namely 'Hearing Aids Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hearing_aids" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=herbalist with a fixed text, namely 'Herbalist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "herbalist" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hifi with a fixed text, namely 'Hifi Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hifi" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hobby with a fixed text, namely 'Hobby Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hobby" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=household_linen with a fixed text, namely 'Household Linen Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "household_linen" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=houseware with a fixed text, namely 'Houseware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "houseware" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hunting with a fixed text, namely 'Hunting Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hunting" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=interior_decoration with a fixed text, namely 'Interior Decoration Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "interior_decoration" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=jewelry with a fixed text, namely 'Jewelry Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "jewelry" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=kiosk with a fixed text, namely 'Kiosk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "kiosk" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=kitchen with a fixed text, namely 'Kitchen Design Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "kitchen" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=laundry with a fixed text, namely 'Laundry' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "laundry" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=leather with a fixed text, namely 'Leather Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "leather" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=lighting with a fixed text, namely 'Lighting Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "lighting" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=locksmith with a fixed text, namely 'Locksmith' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "locksmith" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=lottery with a fixed text, namely 'Lottery Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "lottery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=mall with a fixed text, namely 'Mall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "mall" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=massage with a fixed text, namely 'Massage Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "massage" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=medical_supply with a fixed text, namely 'Medical Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "medical_supply" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=military_surplus with a fixed text, namely 'Military Surplus Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "military_surplus" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=mobile_phone with a fixed text, namely 'Mobile Phone Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "mobile_phone" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=model with a fixed text, namely 'Model Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "model" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=money_lender with a fixed text, namely 'Money Lender' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "money_lender" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=motorcycle with a fixed text, namely 'Motorcycle Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "motorcycle" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=motorcycle_repair with a fixed text, namely 'Motorcycle Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "motorcycle_repair" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=music with a fixed text, namely 'Music Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "music" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=musical_instrument with a fixed text, namely 'Musical Instrument Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "musical_instrument" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=newsagent with a fixed text, namely 'Newspaper/Magazine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "newsagent" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=nutrition_supplements with a fixed text, namely 'Nutrition Supplements Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "nutrition_supplements" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=optician with a fixed text, namely 'Optician' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "optician" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=outdoor with a fixed text, namely 'Outdoors Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "outdoor" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=outpost with a fixed text, namely 'Online Retailer Outpost' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "outpost" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=paint with a fixed text, namely 'Paint Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "paint" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=party with a fixed text, namely 'Party Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "party" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pastry with a fixed text, namely 'Pastry Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pastry" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pawnbroker with a fixed text, namely 'Pawn Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pawnbroker" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=perfumery with a fixed text, namely 'Perfume Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "perfumery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pet with a fixed text, namely 'Pet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pet" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pet_grooming with a fixed text, namely 'Pet Grooming Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pet_grooming" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=photo with a fixed text, namely 'Photography Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "photo" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pottery with a fixed text, namely 'Pottery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pottery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=printer_ink with a fixed text, namely 'Printer Ink Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "printer_ink" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=psychic with a fixed text, namely 'Psychic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "psychic" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pyrotechnics with a fixed text, namely 'Fireworks Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pyrotechnics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=radiotechnics with a fixed text, namely 'Radio/Electronic Component Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "radiotechnics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=religion with a fixed text, namely 'Religious Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "religion" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=rental with a fixed text, namely 'Rental Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "rental" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=repair with a fixed text, namely 'Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "repair" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=scuba_diving with a fixed text, namely 'Scuba Diving Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "scuba_diving" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=seafood with a fixed text, namely 'Seafood Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "seafood" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=second_hand with a fixed text, namely 'Consignment/Thrift Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "second_hand" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=sewing with a fixed text, namely 'Sewing Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sewing" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=shoe_repair with a fixed text, namely 'Shoe Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "shoe_repair" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=shoes with a fixed text, namely 'Shoe Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "shoes" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=spices with a fixed text, namely 'Spice Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "spices" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=sports with a fixed text, namely 'Sporting Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sports" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=stationery with a fixed text, namely 'Stationery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "stationery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=storage_rental with a fixed text, namely 'Storage Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "storage_rental" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "supermarket" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=swimming_pool with a fixed text, namely 'Pool Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "swimming_pool" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tailor with a fixed text, namely 'Tailor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tailor" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tattoo with a fixed text, namely 'Tattoo Parlor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tattoo" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tea with a fixed text, namely 'Tea Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tea" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=telecommunication with a fixed text, namely 'Telecom Retail Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "telecommunication" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=ticket with a fixed text, namely 'Ticket Seller' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "ticket" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tiles with a fixed text, namely 'Tile Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tiles" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tobacco with a fixed text, namely 'Tobacco Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tobacco" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tool_hire with a fixed text, namely 'Tool Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tool_hire" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=toys with a fixed text, namely 'Toy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "toys" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=trade with a fixed text, namely 'Trade Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "trade" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=travel_agency with a fixed text, namely 'Travel Agency' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "travel_agency" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=trophy with a fixed text, namely 'Trophy Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "trophy" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tyres with a fixed text, namely 'Tire Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tyres" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=vacuum_cleaner with a fixed text, namely 'Vacuum Cleaner Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "vacuum_cleaner" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=variety_store with a fixed text, namely 'Variety Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "variety_store" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=video with a fixed text, namely 'Video Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "video" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=video_games with a fixed text, namely 'Video Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "video_games" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=watches with a fixed text, namely 'Watches Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "watches" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=water with a fixed text, namely 'Drinking Water Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "water" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=water_sports with a fixed text, namely 'Watersport/Swim Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "water_sports" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=weapons with a fixed text, namely 'Weapon Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "weapons" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=wholesale with a fixed text, namely 'Wholesale Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "wholesale" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=wigs with a fixed text, namely 'Wig Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "wigs" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=window_blind with a fixed text, namely 'Window Blind Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "window_blind" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=wine with a fixed text, namely 'Wine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "wine" + }, + { + "key": "opening_hours", + "description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" }, { "key": "website", "description": "Layer 'Shop' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" }, + { + "key": "contact:website", + "description": "Layer 'Shop' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, { "key": "email", "description": "Layer 'Shop' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" }, { - "key": "opening_hours", - "description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + "key": "contact:email", + "description": "Layer 'Shop' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'Shop' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" }, { "key": "payment:cash", @@ -6713,6 +7794,31 @@ "description": "Layer 'Shop' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", "value": "yes" }, + { + "key": "service:print:A4", + "description": "Layer 'Shop' shows service:print:A4=yes with a fixed text, namely 'This shop can print on papers of size A4' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:print:A3", + "description": "Layer 'Shop' shows service:print:A3=yes with a fixed text, namely 'This shop can print on papers of size A3' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:print:A2", + "description": "Layer 'Shop' shows service:print:A2=yes with a fixed text, namely 'This shop can print on papers of size A2' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:print:A1", + "description": "Layer 'Shop' shows service:print:A1=yes with a fixed text, namely 'This shop can print on papers of size A1' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:print:A0", + "description": "Layer 'Shop' shows service:print:A0=yes with a fixed text, namely 'This shop can print on papers of size A0' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, { "key": "leisure", "description": "The MapComplete theme Personal theme has a layer Sport pitches showing features with this tag", @@ -7411,6 +8517,194 @@ "key": "description", "description": "Layer 'Toilets' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Personal theme')" }, + { + "key": "type", + "description": "The MapComplete theme Personal theme has a layer Bus lines showing features with this tag", + "value": "route" + }, + { + "key": "route", + "description": "The MapComplete theme Personal theme has a layer Bus lines showing features with this tag", + "value": "bus" + }, + { + "key": "name", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "from", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'from' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "via", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'via' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "to", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'to' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "colour", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'colour' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "network", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'network' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "operator", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Transit Stops showing features with this tag", + "value": "bus_stop" + }, + { + "key": "name", + "description": "Layer 'Transit Stops' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "noname", + "description": "Layer 'Transit Stops' shows noname=yes with a fixed text, namely 'This stop has no name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "name", + "description": "Layer 'Transit Stops' shows noname=yes with a fixed text, namely 'This stop has no name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key name.", + "value": "" + }, + { + "key": "image", + "description": "The layer 'Transit Stops allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Transit Stops allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Transit Stops allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Transit Stops allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "shelter", + "description": "Layer 'Transit Stops' shows shelter=yes with a fixed text, namely 'This stop has a shelter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "shelter", + "description": "Layer 'Transit Stops' shows shelter=no with a fixed text, namely 'This stop does not have a shelter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "shelter", + "description": "Layer 'Transit Stops' shows shelter=separate with a fixed text, namely 'This stop has a shelter, that's separately mapped' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "separate" + }, + { + "key": "bench", + "description": "Layer 'Transit Stops' shows bench=yes with a fixed text, namely 'This stop has a bench' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "bench", + "description": "Layer 'Transit Stops' shows bench=no with a fixed text, namely 'This stop does not have a bench' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "bench", + "description": "Layer 'Transit Stops' shows bench=separate with a fixed text, namely 'This stop has a bench, that's separately mapped' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "separate" + }, + { + "key": "bin", + "description": "Layer 'Transit Stops' shows bin=yes with a fixed text, namely 'This stop has a bin' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "bin", + "description": "Layer 'Transit Stops' shows bin=no with a fixed text, namely 'This stop does not have a bin' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "bin", + "description": "Layer 'Transit Stops' shows bin=separate with a fixed text, namely 'This stop has a bin, that's separately mapped' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "separate" + }, + { + "key": "wheelchair", + "description": "Layer 'Transit Stops' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "designated" + }, + { + "key": "wheelchair", + "description": "Layer 'Transit Stops' shows wheelchair=yes with a fixed text, namely 'This place is easily reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'Transit Stops' shows wheelchair=limited with a fixed text, namely 'It is possible to reach this place in a wheelchair, but it is not easy' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, + { + "key": "wheelchair", + "description": "Layer 'Transit Stops' shows wheelchair=no with a fixed text, namely 'This place is not reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Transit Stops' shows tactile_paving=yes with a fixed text, namely 'This stop has tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Transit Stops' shows tactile_paving=no with a fixed text, namely 'This stop does not have tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "lit", + "description": "Layer 'Transit Stops' shows lit=yes with a fixed text, namely 'This stop is lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "lit", + "description": "Layer 'Transit Stops' shows lit=no with a fixed text, namely 'This stop is not lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=yes with a fixed text, namely 'This stop has a departures board of unknown type' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=realtime with a fixed text, namely 'This stop has a board showing realtime departure information' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "realtime" + }, + { + "key": "passenger_information_display", + "description": "Layer 'Transit Stops' shows passenger_information_display=yes with a fixed text, namely 'This stop has a board showing realtime departure information' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=timetable with a fixed text, namely 'This stop has a timetable showing regular departures' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "timetable" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=interval with a fixed text, namely 'This stop has a timetable containing just the interval between departures' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "interval" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=no with a fixed text, namely 'This stop does not have a departures board' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, { "key": "natural", "description": "The MapComplete theme Personal theme has a layer Tree showing features with this tag", diff --git a/Docs/TagInfo/mapcomplete_pets.json b/Docs/TagInfo/mapcomplete_pets.json index b64e71825..42d7b50e1 100644 --- a/Docs/TagInfo/mapcomplete_pets.json +++ b/Docs/TagInfo/mapcomplete_pets.json @@ -478,27 +478,43 @@ }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + "description": "Layer 'Dog-friendly shops' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "agrarian" }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows shop=convenience with a fixed text, namely 'Convenience store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", - "value": "convenience" + "description": "Layer 'Dog-friendly shops' shows shop=alcohol with a fixed text, namely 'Liquor Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "alcohol" }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", - "value": "supermarket" + "description": "Layer 'Dog-friendly shops' shows shop=anime with a fixed text, namely 'Anime / Manga Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "anime" }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows shop=clothes with a fixed text, namely 'Clothing store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", - "value": "clothes" + "description": "Layer 'Dog-friendly shops' shows shop=antiques with a fixed text, namely 'Antiques Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "antiques" }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", - "value": "hairdresser" + "description": "Layer 'Dog-friendly shops' shows shop=appliance with a fixed text, namely 'Appliance Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "appliance" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=art with a fixed text, namely 'Art Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "art" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=baby_goods with a fixed text, namely 'Baby Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "baby_goods" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=bag with a fixed text, namely 'Bag/Luggage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "bag" }, { "key": "shop", @@ -507,29 +523,786 @@ }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows shop=car_repair with a fixed text, namely 'Car repair (garage)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "description": "Layer 'Dog-friendly shops' shows shop=bathroom_furnishing with a fixed text, namely 'Bathroom Furnishing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "bathroom_furnishing" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=beauty with a fixed text, namely 'Beauty Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "beauty" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=bed with a fixed text, namely 'Bedding/Mattress Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "bed" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=beverages with a fixed text, namely 'Beverage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "beverages" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=bicycle with a fixed text, namely 'Bicycle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "bicycle" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=boat with a fixed text, namely 'Boat Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "boat" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=bookmaker with a fixed text, namely 'Bookmaker' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "bookmaker" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=books with a fixed text, namely 'Book Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "books" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=brewing_supplies with a fixed text, namely 'Brewing Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "brewing_supplies" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=butcher with a fixed text, namely 'Butcher' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "butcher" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=camera with a fixed text, namely 'Camera Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "camera" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=candles with a fixed text, namely 'Candle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "candles" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=cannabis with a fixed text, namely 'Cannabis Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "cannabis" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=car with a fixed text, namely 'Car Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "car" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=car_parts with a fixed text, namely 'Car Parts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "car_parts" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=car_repair with a fixed text, namely 'Car Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", "value": "car_repair" }, { "key": "shop", - "description": "Layer 'Dog-friendly shops' shows shop=car with a fixed text, namely 'Car dealer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", - "value": "car" + "description": "Layer 'Dog-friendly shops' shows shop=caravan with a fixed text, namely 'RV Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "caravan" }, { - "key": "phone", - "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=carpet with a fixed text, namely 'Carpet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "carpet" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=catalogue with a fixed text, namely 'Catalog Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "catalogue" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=charity with a fixed text, namely 'Charity Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "charity" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=cheese with a fixed text, namely 'Cheese Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "cheese" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=chemist with a fixed text, namely 'Drugstore' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "chemist" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=chocolate with a fixed text, namely 'Chocolate Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "chocolate" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=clothes with a fixed text, namely 'Clothing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "clothes" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=coffee with a fixed text, namely 'Coffee Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "coffee" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=collector with a fixed text, namely 'Collectibles Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "collector" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=computer with a fixed text, namely 'Computer Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "computer" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=confectionery with a fixed text, namely 'Candy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "confectionery" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=convenience with a fixed text, namely 'Convenience Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "convenience" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=copyshop with a fixed text, namely 'Copy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "copyshop" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=cosmetics with a fixed text, namely 'Cosmetics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "cosmetics" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=country_store with a fixed text, namely 'Country Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "country_store" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=craft with a fixed text, namely 'Arts & Crafts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "craft" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=curtain with a fixed text, namely 'Curtain Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "curtain" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=dairy with a fixed text, namely 'Dairy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "dairy" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=deli with a fixed text, namely 'Deli' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "deli" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=department_store with a fixed text, namely 'Department Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "department_store" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=doityourself with a fixed text, namely 'DIY Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "doityourself" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=doors with a fixed text, namely 'Door Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "doors" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=dry_cleaning with a fixed text, namely 'Dry Cleaner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "dry_cleaning" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=e-cigarette with a fixed text, namely 'E-Cigarette Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "e-cigarette" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=electrical with a fixed text, namely 'Electrical Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "electrical" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=electronics with a fixed text, namely 'Electronics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "electronics" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=erotic with a fixed text, namely 'Erotic Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "erotic" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=fabric with a fixed text, namely 'Fabric Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "fabric" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=farm with a fixed text, namely 'Produce Stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "farm" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=fashion_accessories with a fixed text, namely 'Fashion Accessories Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "fashion_accessories" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=fireplace with a fixed text, namely 'Fireplace Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "fireplace" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=fishing with a fixed text, namely 'Fishing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "fishing" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=flooring with a fixed text, namely 'Flooring Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "flooring" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=florist with a fixed text, namely 'Florist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "florist" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=frame with a fixed text, namely 'Framing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "frame" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=frozen_food with a fixed text, namely 'Frozen Food Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "frozen_food" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=fuel with a fixed text, namely 'Fuel Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "fuel" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=funeral_directors with a fixed text, namely 'Funeral Home' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "funeral_directors" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=furniture with a fixed text, namely 'Furniture Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "furniture" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=games with a fixed text, namely 'Tabletop Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "games" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=garden_centre with a fixed text, namely 'Garden Center' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "garden_centre" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=gas with a fixed text, namely 'Bottled Gas Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "gas" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=general with a fixed text, namely 'General Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "general" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=gift with a fixed text, namely 'Gift Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "gift" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=greengrocer with a fixed text, namely 'Greengrocer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "greengrocer" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hairdresser" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hairdresser_supply with a fixed text, namely 'Hairdresser Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hairdresser_supply" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hardware with a fixed text, namely 'Hardware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hardware" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=health_food with a fixed text, namely 'Health Food Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "health_food" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hearing_aids with a fixed text, namely 'Hearing Aids Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hearing_aids" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=herbalist with a fixed text, namely 'Herbalist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "herbalist" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hifi with a fixed text, namely 'Hifi Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hifi" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hobby with a fixed text, namely 'Hobby Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hobby" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=household_linen with a fixed text, namely 'Household Linen Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "household_linen" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=houseware with a fixed text, namely 'Houseware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "houseware" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=hunting with a fixed text, namely 'Hunting Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "hunting" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=interior_decoration with a fixed text, namely 'Interior Decoration Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "interior_decoration" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=jewelry with a fixed text, namely 'Jewelry Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "jewelry" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=kiosk with a fixed text, namely 'Kiosk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "kiosk" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=kitchen with a fixed text, namely 'Kitchen Design Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "kitchen" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=laundry with a fixed text, namely 'Laundry' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "laundry" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=leather with a fixed text, namely 'Leather Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "leather" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=lighting with a fixed text, namely 'Lighting Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "lighting" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=locksmith with a fixed text, namely 'Locksmith' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "locksmith" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=lottery with a fixed text, namely 'Lottery Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "lottery" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=mall with a fixed text, namely 'Mall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "mall" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=massage with a fixed text, namely 'Massage Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "massage" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=medical_supply with a fixed text, namely 'Medical Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "medical_supply" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=military_surplus with a fixed text, namely 'Military Surplus Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "military_surplus" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=mobile_phone with a fixed text, namely 'Mobile Phone Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "mobile_phone" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=model with a fixed text, namely 'Model Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "model" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=money_lender with a fixed text, namely 'Money Lender' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "money_lender" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=motorcycle with a fixed text, namely 'Motorcycle Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "motorcycle" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=motorcycle_repair with a fixed text, namely 'Motorcycle Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "motorcycle_repair" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=music with a fixed text, namely 'Music Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "music" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=musical_instrument with a fixed text, namely 'Musical Instrument Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "musical_instrument" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=newsagent with a fixed text, namely 'Newspaper/Magazine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "newsagent" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=nutrition_supplements with a fixed text, namely 'Nutrition Supplements Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "nutrition_supplements" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=optician with a fixed text, namely 'Optician' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "optician" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=outdoor with a fixed text, namely 'Outdoors Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "outdoor" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=outpost with a fixed text, namely 'Online Retailer Outpost' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "outpost" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=paint with a fixed text, namely 'Paint Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "paint" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=party with a fixed text, namely 'Party Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "party" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=pastry with a fixed text, namely 'Pastry Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "pastry" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=pawnbroker with a fixed text, namely 'Pawn Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "pawnbroker" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=perfumery with a fixed text, namely 'Perfume Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "perfumery" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=pet with a fixed text, namely 'Pet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "pet" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=pet_grooming with a fixed text, namely 'Pet Grooming Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "pet_grooming" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=photo with a fixed text, namely 'Photography Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "photo" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=pottery with a fixed text, namely 'Pottery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "pottery" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=printer_ink with a fixed text, namely 'Printer Ink Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "printer_ink" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=psychic with a fixed text, namely 'Psychic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "psychic" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=pyrotechnics with a fixed text, namely 'Fireworks Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "pyrotechnics" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=radiotechnics with a fixed text, namely 'Radio/Electronic Component Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "radiotechnics" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=religion with a fixed text, namely 'Religious Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "religion" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=rental with a fixed text, namely 'Rental Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "rental" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=repair with a fixed text, namely 'Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "repair" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=scuba_diving with a fixed text, namely 'Scuba Diving Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "scuba_diving" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=seafood with a fixed text, namely 'Seafood Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "seafood" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=second_hand with a fixed text, namely 'Consignment/Thrift Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "second_hand" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=sewing with a fixed text, namely 'Sewing Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "sewing" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=shoe_repair with a fixed text, namely 'Shoe Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "shoe_repair" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=shoes with a fixed text, namely 'Shoe Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "shoes" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=spices with a fixed text, namely 'Spice Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "spices" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=sports with a fixed text, namely 'Sporting Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "sports" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=stationery with a fixed text, namely 'Stationery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "stationery" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=storage_rental with a fixed text, namely 'Storage Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "storage_rental" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "supermarket" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=swimming_pool with a fixed text, namely 'Pool Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "swimming_pool" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tailor with a fixed text, namely 'Tailor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tailor" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tattoo with a fixed text, namely 'Tattoo Parlor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tattoo" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tea with a fixed text, namely 'Tea Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tea" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=telecommunication with a fixed text, namely 'Telecom Retail Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "telecommunication" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=ticket with a fixed text, namely 'Ticket Seller' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "ticket" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tiles with a fixed text, namely 'Tile Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tiles" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tobacco with a fixed text, namely 'Tobacco Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tobacco" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tool_hire with a fixed text, namely 'Tool Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tool_hire" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=toys with a fixed text, namely 'Toy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "toys" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=trade with a fixed text, namely 'Trade Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "trade" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=travel_agency with a fixed text, namely 'Travel Agency' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "travel_agency" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=trophy with a fixed text, namely 'Trophy Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "trophy" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=tyres with a fixed text, namely 'Tire Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "tyres" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=vacuum_cleaner with a fixed text, namely 'Vacuum Cleaner Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "vacuum_cleaner" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=variety_store with a fixed text, namely 'Variety Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "variety_store" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=video with a fixed text, namely 'Video Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "video" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=video_games with a fixed text, namely 'Video Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "video_games" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=watches with a fixed text, namely 'Watches Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "watches" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=water with a fixed text, namely 'Drinking Water Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "water" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=water_sports with a fixed text, namely 'Watersport/Swim Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "water_sports" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=weapons with a fixed text, namely 'Weapon Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "weapons" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=wholesale with a fixed text, namely 'Wholesale Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "wholesale" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=wigs with a fixed text, namely 'Wig Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "wigs" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=window_blind with a fixed text, namely 'Window Blind Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "window_blind" + }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows shop=wine with a fixed text, namely 'Wine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "wine" + }, + { + "key": "opening_hours", + "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" }, { "key": "website", "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" }, + { + "key": "contact:website", + "description": "Layer 'Dog-friendly shops' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + }, { "key": "email", "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" }, { - "key": "opening_hours", - "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + "key": "contact:email", + "description": "Layer 'Dog-friendly shops' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + }, + { + "key": "phone", + "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + }, + { + "key": "contact:phone", + "description": "Layer 'Dog-friendly shops' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" }, { "key": "payment:cash", @@ -541,6 +1314,31 @@ "description": "Layer 'Dog-friendly shops' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", "value": "yes" }, + { + "key": "service:print:A4", + "description": "Layer 'Dog-friendly shops' shows service:print:A4=yes with a fixed text, namely 'This shop can print on papers of size A4' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "yes" + }, + { + "key": "service:print:A3", + "description": "Layer 'Dog-friendly shops' shows service:print:A3=yes with a fixed text, namely 'This shop can print on papers of size A3' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "yes" + }, + { + "key": "service:print:A2", + "description": "Layer 'Dog-friendly shops' shows service:print:A2=yes with a fixed text, namely 'This shop can print on papers of size A2' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "yes" + }, + { + "key": "service:print:A1", + "description": "Layer 'Dog-friendly shops' shows service:print:A1=yes with a fixed text, namely 'This shop can print on papers of size A1' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "yes" + }, + { + "key": "service:print:A0", + "description": "Layer 'Dog-friendly shops' shows service:print:A0=yes with a fixed text, namely 'This shop can print on papers of size A0' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "yes" + }, { "key": "amenity", "description": "The MapComplete theme Veterinarians, dog parks and other pet-amenities has a layer veterinary showing features with this tag", diff --git a/Docs/TagInfo/mapcomplete_shops.json b/Docs/TagInfo/mapcomplete_shops.json index aa0fd7a71..cf5f074b4 100644 --- a/Docs/TagInfo/mapcomplete_shops.json +++ b/Docs/TagInfo/mapcomplete_shops.json @@ -36,27 +36,43 @@ }, { "key": "shop", - "description": "Layer 'Shop' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'Open Shop Map')" + "description": "Layer 'Shop' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "agrarian" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=convenience with a fixed text, namely 'Convenience store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", - "value": "convenience" + "description": "Layer 'Shop' shows shop=alcohol with a fixed text, namely 'Liquor Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "alcohol" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", - "value": "supermarket" + "description": "Layer 'Shop' shows shop=anime with a fixed text, namely 'Anime / Manga Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "anime" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=clothes with a fixed text, namely 'Clothing store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", - "value": "clothes" + "description": "Layer 'Shop' shows shop=antiques with a fixed text, namely 'Antiques Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "antiques" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", - "value": "hairdresser" + "description": "Layer 'Shop' shows shop=appliance with a fixed text, namely 'Appliance Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "appliance" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=art with a fixed text, namely 'Art Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "art" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=baby_goods with a fixed text, namely 'Baby Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "baby_goods" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bag with a fixed text, namely 'Bag/Luggage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "bag" }, { "key": "shop", @@ -65,29 +81,786 @@ }, { "key": "shop", - "description": "Layer 'Shop' shows shop=car_repair with a fixed text, namely 'Car repair (garage)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "description": "Layer 'Shop' shows shop=bathroom_furnishing with a fixed text, namely 'Bathroom Furnishing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "bathroom_furnishing" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=beauty with a fixed text, namely 'Beauty Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "beauty" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bed with a fixed text, namely 'Bedding/Mattress Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "bed" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=beverages with a fixed text, namely 'Beverage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "beverages" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bicycle with a fixed text, namely 'Bicycle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "bicycle" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=boat with a fixed text, namely 'Boat Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "boat" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=bookmaker with a fixed text, namely 'Bookmaker' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "bookmaker" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=books with a fixed text, namely 'Book Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "books" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=brewing_supplies with a fixed text, namely 'Brewing Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "brewing_supplies" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=butcher with a fixed text, namely 'Butcher' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "butcher" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=camera with a fixed text, namely 'Camera Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "camera" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=candles with a fixed text, namely 'Candle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "candles" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=cannabis with a fixed text, namely 'Cannabis Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "cannabis" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=car with a fixed text, namely 'Car Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "car" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=car_parts with a fixed text, namely 'Car Parts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "car_parts" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=car_repair with a fixed text, namely 'Car Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", "value": "car_repair" }, { "key": "shop", - "description": "Layer 'Shop' shows shop=car with a fixed text, namely 'Car dealer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", - "value": "car" + "description": "Layer 'Shop' shows shop=caravan with a fixed text, namely 'RV Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "caravan" }, { - "key": "phone", - "description": "Layer 'Shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Open Shop Map')" + "key": "shop", + "description": "Layer 'Shop' shows shop=carpet with a fixed text, namely 'Carpet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "carpet" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=catalogue with a fixed text, namely 'Catalog Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "catalogue" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=charity with a fixed text, namely 'Charity Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "charity" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=cheese with a fixed text, namely 'Cheese Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "cheese" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=chemist with a fixed text, namely 'Drugstore' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "chemist" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=chocolate with a fixed text, namely 'Chocolate Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "chocolate" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=clothes with a fixed text, namely 'Clothing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "clothes" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=coffee with a fixed text, namely 'Coffee Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "coffee" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=collector with a fixed text, namely 'Collectibles Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "collector" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=computer with a fixed text, namely 'Computer Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "computer" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=confectionery with a fixed text, namely 'Candy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "confectionery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=convenience with a fixed text, namely 'Convenience Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "convenience" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=copyshop with a fixed text, namely 'Copy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "copyshop" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=cosmetics with a fixed text, namely 'Cosmetics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "cosmetics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=country_store with a fixed text, namely 'Country Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "country_store" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=craft with a fixed text, namely 'Arts & Crafts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "craft" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=curtain with a fixed text, namely 'Curtain Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "curtain" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=dairy with a fixed text, namely 'Dairy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "dairy" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=deli with a fixed text, namely 'Deli' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "deli" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=department_store with a fixed text, namely 'Department Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "department_store" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=doityourself with a fixed text, namely 'DIY Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "doityourself" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=doors with a fixed text, namely 'Door Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "doors" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=dry_cleaning with a fixed text, namely 'Dry Cleaner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "dry_cleaning" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=e-cigarette with a fixed text, namely 'E-Cigarette Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "e-cigarette" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=electrical with a fixed text, namely 'Electrical Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "electrical" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=electronics with a fixed text, namely 'Electronics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "electronics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=erotic with a fixed text, namely 'Erotic Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "erotic" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fabric with a fixed text, namely 'Fabric Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "fabric" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=farm with a fixed text, namely 'Produce Stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "farm" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fashion_accessories with a fixed text, namely 'Fashion Accessories Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "fashion_accessories" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fireplace with a fixed text, namely 'Fireplace Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "fireplace" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fishing with a fixed text, namely 'Fishing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "fishing" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=flooring with a fixed text, namely 'Flooring Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "flooring" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=florist with a fixed text, namely 'Florist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "florist" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=frame with a fixed text, namely 'Framing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "frame" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=frozen_food with a fixed text, namely 'Frozen Food Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "frozen_food" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=fuel with a fixed text, namely 'Fuel Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "fuel" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=funeral_directors with a fixed text, namely 'Funeral Home' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "funeral_directors" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=furniture with a fixed text, namely 'Furniture Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "furniture" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=games with a fixed text, namely 'Tabletop Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "games" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=garden_centre with a fixed text, namely 'Garden Center' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "garden_centre" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=gas with a fixed text, namely 'Bottled Gas Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "gas" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=general with a fixed text, namely 'General Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "general" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=gift with a fixed text, namely 'Gift Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "gift" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=greengrocer with a fixed text, namely 'Greengrocer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "greengrocer" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hairdresser" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hairdresser_supply with a fixed text, namely 'Hairdresser Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hairdresser_supply" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hardware with a fixed text, namely 'Hardware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hardware" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=health_food with a fixed text, namely 'Health Food Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "health_food" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hearing_aids with a fixed text, namely 'Hearing Aids Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hearing_aids" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=herbalist with a fixed text, namely 'Herbalist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "herbalist" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hifi with a fixed text, namely 'Hifi Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hifi" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hobby with a fixed text, namely 'Hobby Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hobby" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=household_linen with a fixed text, namely 'Household Linen Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "household_linen" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=houseware with a fixed text, namely 'Houseware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "houseware" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=hunting with a fixed text, namely 'Hunting Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "hunting" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=interior_decoration with a fixed text, namely 'Interior Decoration Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "interior_decoration" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=jewelry with a fixed text, namely 'Jewelry Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "jewelry" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=kiosk with a fixed text, namely 'Kiosk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "kiosk" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=kitchen with a fixed text, namely 'Kitchen Design Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "kitchen" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=laundry with a fixed text, namely 'Laundry' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "laundry" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=leather with a fixed text, namely 'Leather Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "leather" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=lighting with a fixed text, namely 'Lighting Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "lighting" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=locksmith with a fixed text, namely 'Locksmith' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "locksmith" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=lottery with a fixed text, namely 'Lottery Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "lottery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=mall with a fixed text, namely 'Mall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "mall" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=massage with a fixed text, namely 'Massage Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "massage" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=medical_supply with a fixed text, namely 'Medical Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "medical_supply" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=military_surplus with a fixed text, namely 'Military Surplus Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "military_surplus" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=mobile_phone with a fixed text, namely 'Mobile Phone Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "mobile_phone" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=model with a fixed text, namely 'Model Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "model" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=money_lender with a fixed text, namely 'Money Lender' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "money_lender" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=motorcycle with a fixed text, namely 'Motorcycle Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "motorcycle" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=motorcycle_repair with a fixed text, namely 'Motorcycle Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "motorcycle_repair" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=music with a fixed text, namely 'Music Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "music" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=musical_instrument with a fixed text, namely 'Musical Instrument Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "musical_instrument" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=newsagent with a fixed text, namely 'Newspaper/Magazine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "newsagent" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=nutrition_supplements with a fixed text, namely 'Nutrition Supplements Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "nutrition_supplements" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=optician with a fixed text, namely 'Optician' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "optician" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=outdoor with a fixed text, namely 'Outdoors Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "outdoor" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=outpost with a fixed text, namely 'Online Retailer Outpost' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "outpost" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=paint with a fixed text, namely 'Paint Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "paint" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=party with a fixed text, namely 'Party Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "party" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pastry with a fixed text, namely 'Pastry Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "pastry" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pawnbroker with a fixed text, namely 'Pawn Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "pawnbroker" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=perfumery with a fixed text, namely 'Perfume Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "perfumery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pet with a fixed text, namely 'Pet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "pet" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pet_grooming with a fixed text, namely 'Pet Grooming Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "pet_grooming" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=photo with a fixed text, namely 'Photography Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "photo" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pottery with a fixed text, namely 'Pottery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "pottery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=printer_ink with a fixed text, namely 'Printer Ink Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "printer_ink" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=psychic with a fixed text, namely 'Psychic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "psychic" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=pyrotechnics with a fixed text, namely 'Fireworks Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "pyrotechnics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=radiotechnics with a fixed text, namely 'Radio/Electronic Component Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "radiotechnics" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=religion with a fixed text, namely 'Religious Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "religion" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=rental with a fixed text, namely 'Rental Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "rental" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=repair with a fixed text, namely 'Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "repair" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=scuba_diving with a fixed text, namely 'Scuba Diving Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "scuba_diving" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=seafood with a fixed text, namely 'Seafood Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "seafood" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=second_hand with a fixed text, namely 'Consignment/Thrift Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "second_hand" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=sewing with a fixed text, namely 'Sewing Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "sewing" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=shoe_repair with a fixed text, namely 'Shoe Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "shoe_repair" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=shoes with a fixed text, namely 'Shoe Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "shoes" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=spices with a fixed text, namely 'Spice Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "spices" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=sports with a fixed text, namely 'Sporting Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "sports" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=stationery with a fixed text, namely 'Stationery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "stationery" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=storage_rental with a fixed text, namely 'Storage Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "storage_rental" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "supermarket" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=swimming_pool with a fixed text, namely 'Pool Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "swimming_pool" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tailor with a fixed text, namely 'Tailor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tailor" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tattoo with a fixed text, namely 'Tattoo Parlor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tattoo" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tea with a fixed text, namely 'Tea Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tea" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=telecommunication with a fixed text, namely 'Telecom Retail Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "telecommunication" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=ticket with a fixed text, namely 'Ticket Seller' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "ticket" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tiles with a fixed text, namely 'Tile Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tiles" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tobacco with a fixed text, namely 'Tobacco Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tobacco" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tool_hire with a fixed text, namely 'Tool Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tool_hire" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=toys with a fixed text, namely 'Toy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "toys" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=trade with a fixed text, namely 'Trade Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "trade" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=travel_agency with a fixed text, namely 'Travel Agency' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "travel_agency" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=trophy with a fixed text, namely 'Trophy Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "trophy" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=tyres with a fixed text, namely 'Tire Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "tyres" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=vacuum_cleaner with a fixed text, namely 'Vacuum Cleaner Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "vacuum_cleaner" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=variety_store with a fixed text, namely 'Variety Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "variety_store" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=video with a fixed text, namely 'Video Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "video" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=video_games with a fixed text, namely 'Video Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "video_games" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=watches with a fixed text, namely 'Watches Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "watches" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=water with a fixed text, namely 'Drinking Water Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "water" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=water_sports with a fixed text, namely 'Watersport/Swim Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "water_sports" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=weapons with a fixed text, namely 'Weapon Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "weapons" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=wholesale with a fixed text, namely 'Wholesale Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "wholesale" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=wigs with a fixed text, namely 'Wig Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "wigs" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=window_blind with a fixed text, namely 'Window Blind Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "window_blind" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows shop=wine with a fixed text, namely 'Wine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "wine" + }, + { + "key": "opening_hours", + "description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Shop Map')" }, { "key": "website", "description": "Layer 'Shop' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Open Shop Map')" }, + { + "key": "contact:website", + "description": "Layer 'Shop' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, { "key": "email", "description": "Layer 'Shop' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Open Shop Map')" }, { - "key": "opening_hours", - "description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Shop Map')" + "key": "contact:email", + "description": "Layer 'Shop' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "phone", + "description": "Layer 'Shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "contact:phone", + "description": "Layer 'Shop' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Open Shop Map')" }, { "key": "payment:cash", @@ -98,6 +871,95 @@ "key": "payment:cards", "description": "Layer 'Shop' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", "value": "yes" + }, + { + "key": "service:print:A4", + "description": "Layer 'Shop' shows service:print:A4=yes with a fixed text, namely 'This shop can print on papers of size A4' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "service:print:A3", + "description": "Layer 'Shop' shows service:print:A3=yes with a fixed text, namely 'This shop can print on papers of size A3' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "service:print:A2", + "description": "Layer 'Shop' shows service:print:A2=yes with a fixed text, namely 'This shop can print on papers of size A2' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "service:print:A1", + "description": "Layer 'Shop' shows service:print:A1=yes with a fixed text, namely 'This shop can print on papers of size A1' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "service:print:A0", + "description": "Layer 'Shop' shows service:print:A0=yes with a fixed text, namely 'This shop can print on papers of size A0' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "amenity", + "description": "The MapComplete theme Open Shop Map has a layer pharmacy showing features with this tag", + "value": "pharmacy" + }, + { + "key": "image", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "opening_hours", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "phone", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "contact:phone", + "description": "Layer 'pharmacy' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "email", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "contact:email", + "description": "Layer 'pharmacy' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "website", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "contact:website", + "description": "Layer 'pharmacy' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=yes with a fixed text, namely 'This pharmacy is easy to access on a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=no with a fixed text, namely 'This pharmacy is hard to access on a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "no" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=limited with a fixed text, namely 'This pharmacy has limited access for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "limited" } ] } \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_transit.json b/Docs/TagInfo/mapcomplete_transit.json new file mode 100644 index 000000000..bfab04cb1 --- /dev/null +++ b/Docs/TagInfo/mapcomplete_transit.json @@ -0,0 +1,370 @@ +{ + "data_format": 1, + "project": { + "name": "MapComplete Bus routes", + "description": "Plan your trip with the help of the public transport system", + "project_url": "https://mapcomplete.osm.be/transit", + "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", + "icon_url": "https://mapcomplete.osm.be/assets/layers/transit_stops/bus_stop.svg", + "contact_name": "Pieter Vander Vennet, Robin van der Linde", + "contact_email": "pietervdvn@posteo.net" + }, + "tags": [ + { + "key": "highway", + "description": "The MapComplete theme Bus routes has a layer Transit Stops showing features with this tag", + "value": "bus_stop" + }, + { + "key": "name", + "description": "Layer 'Transit Stops' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Bus routes')" + }, + { + "key": "noname", + "description": "Layer 'Transit Stops' shows noname=yes with a fixed text, namely 'This stop has no name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "yes" + }, + { + "key": "name", + "description": "Layer 'Transit Stops' shows noname=yes with a fixed text, namely 'This stop has no name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes') Picking this answer will delete the key name.", + "value": "" + }, + { + "key": "image", + "description": "The layer 'Transit Stops allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Transit Stops allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Transit Stops allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Transit Stops allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "shelter", + "description": "Layer 'Transit Stops' shows shelter=yes with a fixed text, namely 'This stop has a shelter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "yes" + }, + { + "key": "shelter", + "description": "Layer 'Transit Stops' shows shelter=no with a fixed text, namely 'This stop does not have a shelter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "no" + }, + { + "key": "shelter", + "description": "Layer 'Transit Stops' shows shelter=separate with a fixed text, namely 'This stop has a shelter, that's separately mapped' (in the MapComplete.osm.be theme 'Bus routes')", + "value": "separate" + }, + { + "key": "bench", + "description": "Layer 'Transit Stops' shows bench=yes with a fixed text, namely 'This stop has a bench' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "yes" + }, + { + "key": "bench", + "description": "Layer 'Transit Stops' shows bench=no with a fixed text, namely 'This stop does not have a bench' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "no" + }, + { + "key": "bench", + "description": "Layer 'Transit Stops' shows bench=separate with a fixed text, namely 'This stop has a bench, that's separately mapped' (in the MapComplete.osm.be theme 'Bus routes')", + "value": "separate" + }, + { + "key": "bin", + "description": "Layer 'Transit Stops' shows bin=yes with a fixed text, namely 'This stop has a bin' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "yes" + }, + { + "key": "bin", + "description": "Layer 'Transit Stops' shows bin=no with a fixed text, namely 'This stop does not have a bin' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "no" + }, + { + "key": "bin", + "description": "Layer 'Transit Stops' shows bin=separate with a fixed text, namely 'This stop has a bin, that's separately mapped' (in the MapComplete.osm.be theme 'Bus routes')", + "value": "separate" + }, + { + "key": "wheelchair", + "description": "Layer 'Transit Stops' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "designated" + }, + { + "key": "wheelchair", + "description": "Layer 'Transit Stops' shows wheelchair=yes with a fixed text, namely 'This place is easily reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'Transit Stops' shows wheelchair=limited with a fixed text, namely 'It is possible to reach this place in a wheelchair, but it is not easy' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "limited" + }, + { + "key": "wheelchair", + "description": "Layer 'Transit Stops' shows wheelchair=no with a fixed text, namely 'This place is not reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Transit Stops' shows tactile_paving=yes with a fixed text, namely 'This stop has tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Transit Stops' shows tactile_paving=no with a fixed text, namely 'This stop does not have tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "no" + }, + { + "key": "lit", + "description": "Layer 'Transit Stops' shows lit=yes with a fixed text, namely 'This stop is lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "yes" + }, + { + "key": "lit", + "description": "Layer 'Transit Stops' shows lit=no with a fixed text, namely 'This stop is not lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "no" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=yes with a fixed text, namely 'This stop has a departures board of unknown type' (in the MapComplete.osm.be theme 'Bus routes')", + "value": "yes" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=realtime with a fixed text, namely 'This stop has a board showing realtime departure information' (in the MapComplete.osm.be theme 'Bus routes')", + "value": "realtime" + }, + { + "key": "passenger_information_display", + "description": "Layer 'Transit Stops' shows passenger_information_display=yes with a fixed text, namely 'This stop has a board showing realtime departure information' (in the MapComplete.osm.be theme 'Bus routes')", + "value": "yes" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=timetable with a fixed text, namely 'This stop has a timetable showing regular departures' (in the MapComplete.osm.be theme 'Bus routes')", + "value": "timetable" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=interval with a fixed text, namely 'This stop has a timetable containing just the interval between departures' (in the MapComplete.osm.be theme 'Bus routes')", + "value": "interval" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=no with a fixed text, namely 'This stop does not have a departures board' (in the MapComplete.osm.be theme 'Bus routes')", + "value": "no" + }, + { + "key": "type", + "description": "The MapComplete theme Bus routes has a layer Bus lines showing features with this tag", + "value": "route" + }, + { + "key": "route", + "description": "The MapComplete theme Bus routes has a layer Bus lines showing features with this tag", + "value": "bus" + }, + { + "key": "name", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Bus routes')" + }, + { + "key": "from", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'from' (in the MapComplete.osm.be theme 'Bus routes')" + }, + { + "key": "via", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'via' (in the MapComplete.osm.be theme 'Bus routes')" + }, + { + "key": "to", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'to' (in the MapComplete.osm.be theme 'Bus routes')" + }, + { + "key": "colour", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'colour' (in the MapComplete.osm.be theme 'Bus routes')" + }, + { + "key": "network", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'network' (in the MapComplete.osm.be theme 'Bus routes')" + }, + { + "key": "operator", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Bus routes')" + }, + { + "key": "amenity", + "description": "The MapComplete theme Bus routes has a layer Bike parking showing features with this tag", + "value": "bicycle_parking" + }, + { + "key": "image", + "description": "The layer 'Bike parking allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Bike parking allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Bike parking allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Bike parking allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows and asks freeform values for key 'bicycle_parking' (in the MapComplete.osm.be theme 'Bus routes')" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=stands with a fixed text, namely 'Staple racks' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "stands" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=wall_loops with a fixed text, namely 'Wheel rack/loops' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "wall_loops" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=handlebar_holder with a fixed text, namely 'Handlebar holder' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "handlebar_holder" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=rack with a fixed text, namely 'Rack' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "rack" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=two_tier with a fixed text, namely 'Two-tiered' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "two_tier" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=shed with a fixed text, namely 'Shed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "shed" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=bollard with a fixed text, namely 'Bollard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "bollard" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=floor with a fixed text, namely 'An area on the floor which is marked for bicycle parking' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "floor" + }, + { + "key": "location", + "description": "Layer 'Bike parking' shows location=underground with a fixed text, namely 'Underground parking' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "underground" + }, + { + "key": "location", + "description": "Layer 'Bike parking' shows location=surface with a fixed text, namely 'Surface level parking' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "surface" + }, + { + "key": "location", + "description": "Layer 'Bike parking' shows location=rooftop with a fixed text, namely 'Rooftop parking' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "rooftop" + }, + { + "key": "location", + "description": "Layer 'Bike parking' shows with a fixed text, namely 'Surface level parking' (in the MapComplete.osm.be theme 'Bus routes') Picking this answer will delete the key location.", + "value": "" + }, + { + "key": "covered", + "description": "Layer 'Bike parking' shows covered=yes with a fixed text, namely 'This parking is covered (it has a roof)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "yes" + }, + { + "key": "covered", + "description": "Layer 'Bike parking' shows covered=no with a fixed text, namely 'This parking is not covered' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "no" + }, + { + "key": "capacity", + "description": "Layer 'Bike parking' shows and asks freeform values for key 'capacity' (in the MapComplete.osm.be theme 'Bus routes')" + }, + { + "key": "access", + "description": "Layer 'Bike parking' shows and asks freeform values for key 'access' (in the MapComplete.osm.be theme 'Bus routes')" + }, + { + "key": "access", + "description": "Layer 'Bike parking' shows access=yes with a fixed text, namely 'Publicly accessible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Bike parking' shows access=customers with a fixed text, namely 'Access is primarily for visitors to a business' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "customers" + }, + { + "key": "access", + "description": "Layer 'Bike parking' shows access=private with a fixed text, namely 'Access is limited to members of a school, company or organisation' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "private" + }, + { + "key": "cargo_bike", + "description": "Layer 'Bike parking' shows cargo_bike=yes with a fixed text, namely 'This parking has room for cargo bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "yes" + }, + { + "key": "cargo_bike", + "description": "Layer 'Bike parking' shows cargo_bike=designated with a fixed text, namely 'This parking has designated (official) spots for cargo bikes.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "designated" + }, + { + "key": "cargo_bike", + "description": "Layer 'Bike parking' shows cargo_bike=no with a fixed text, namely 'You're not allowed to park cargo bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bus routes')", + "value": "no" + }, + { + "key": "capacity:cargo_bike", + "description": "Layer 'Bike parking' shows and asks freeform values for key 'capacity:cargo_bike' (in the MapComplete.osm.be theme 'Bus routes')" + }, + { + "key": "amenity", + "description": "The MapComplete theme Bus routes has a layer Parking showing features with this tag", + "value": "parking" + }, + { + "key": "image", + "description": "The layer 'Parking allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Parking allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Parking allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Parking allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "amenity", + "description": "The MapComplete theme Bus routes has a layer Shelter showing features with this tag", + "value": "shelter" + }, + { + "key": "shelter_type", + "description": "The MapComplete theme Bus routes has a layer Shelter showing features with this tag", + "value": "public_transport" + } + ] +} \ No newline at end of file diff --git a/assets/contributors.json b/assets/contributors.json index 30b90b91e..108606c72 100644 --- a/assets/contributors.json +++ b/assets/contributors.json @@ -1,11 +1,11 @@ { "contributors": [ { - "commits": 4040, + "commits": 4088, "contributor": "Pieter Vander Vennet" }, { - "commits": 86, + "commits": 112, "contributor": "Robin van der Linde" }, { @@ -124,6 +124,10 @@ "commits": 5, "contributor": "David Haberthür" }, + { + "commits": 4, + "contributor": "AlexanderRebai" + }, { "commits": 4, "contributor": "OliNau" @@ -148,6 +152,10 @@ "commits": 3, "contributor": "Léo Villeveygoux" }, + { + "commits": 2, + "contributor": "Andrews Leruth" + }, { "commits": 2, "contributor": "pdassori" @@ -188,6 +196,10 @@ "commits": 2, "contributor": "Stanislas Gueniffey" }, + { + "commits": 1, + "contributor": "loviuz" + }, { "commits": 1, "contributor": "kjonosm" diff --git a/assets/layers/charging_station/charging_station.json b/assets/layers/charging_station/charging_station.json index ead65d32e..1cd0200fa 100644 --- a/assets/layers/charging_station/charging_station.json +++ b/assets/layers/charging_station/charging_station.json @@ -2,7 +2,10 @@ "id": "charging_station", "name": { "en": "Charging stations", - "nl": "Oplaadpunten" + "nl": "Oplaadpunten", + "ca": "Estacions de càrrega", + "de": "Ladestationen", + "es": "Estaciones de carga" }, "minzoom": 10, "source": { @@ -22,7 +25,10 @@ "title": { "render": { "en": "Charging station", - "nl": "Oplaadpunt" + "nl": "Oplaadpunt", + "ca": "Estació de càrrega", + "de": "Ladestation", + "es": "Estación de carga" }, "mappings": [ { @@ -39,7 +45,9 @@ }, "then": { "en": "Charging station for electrical bicycles", - "nl": "Oplaadpunt voor elektrische fietsen" + "nl": "Oplaadpunt voor elektrische fietsen", + "de": "Ladestation für Elektrofahrräder", + "es": "Estación de carga para bicicletas eléctricas" } }, { @@ -56,14 +64,19 @@ }, "then": { "en": "Charging station for cars", - "nl": "Oplaadpunt voor elektrische auto's" + "nl": "Oplaadpunt voor elektrische auto's", + "de": "Ladestation für Autos", + "es": "Estación de carga para coches" } } ] }, "description": { "en": "A charging station", - "nl": "Oplaadpunten" + "nl": "Oplaadpunten", + "da": "En ladestation", + "de": "Eine Ladestation", + "es": "Una estación de carga" }, "tagRenderings": [ "images", @@ -72,7 +85,9 @@ "#": "Allowed vehicle types", "question": { "en": "Which vehicles are allowed to charge here?", - "nl": "Welke voertuigen kunnen hier opgeladen worden?" + "nl": "Welke voertuigen kunnen hier opgeladen worden?", + "de": "Welche Fahrzeuge können hier laden?", + "es": "¿A qué vehículos se permite la carga aquí?" }, "multiAnswer": true, "mappings": [ @@ -81,7 +96,9 @@ "ifnot": "bicycle=no", "then": { "en": "Bicycles can be charged here", - "nl": "Elektrische fietsen kunnen hier opgeladen worden" + "nl": "Elektrische fietsen kunnen hier opgeladen worden", + "de": "Hier können Fahrräder laden", + "es": "Aquí se pueden cargar bicicletas" } }, { @@ -89,7 +106,9 @@ "ifnot": "motorcar=no", "then": { "en": "Cars can be charged here", - "nl": "Elektrische auto's kunnen hier opgeladen worden" + "nl": "Elektrische auto's kunnen hier opgeladen worden", + "de": "Hier können Autos laden", + "es": "Aquí se pueden cargar coches" } }, { @@ -97,7 +116,9 @@ "ifnot": "scooter=no", "then": { "en": "Scooters can be charged here", - "nl": "Elektrische scooters (snorfiets of bromfiets) kunnen hier opgeladen worden" + "nl": "Elektrische scooters (snorfiets of bromfiets) kunnen hier opgeladen worden", + "de": "Hier können Roller laden", + "es": "Aquí se pueden cargar scooters" } }, { @@ -105,7 +126,8 @@ "ifnot": "hgv=no", "then": { "en": "Heavy good vehicles (such as trucks) can be charged here", - "nl": "Vrachtwagens kunnen hier opgeladen worden" + "nl": "Vrachtwagens kunnen hier opgeladen worden", + "de": "Hier können LKW laden" } }, { @@ -113,7 +135,9 @@ "ifnot": "bus=no", "then": { "en": "Buses can be charged here", - "nl": "Bussen kunnen hier opgeladen worden" + "nl": "Bussen kunnen hier opgeladen worden", + "de": "Hier können Busse laden", + "es": "Aquí se pueden cargar buses" } } ] @@ -122,11 +146,15 @@ "id": "access", "question": { "en": "Who is allowed to use this charging station?", - "nl": "Wie mag er dit oplaadpunt gebruiken?" + "nl": "Wie mag er dit oplaadpunt gebruiken?", + "de": "Wer darf diese Ladestation benutzen?", + "es": "¿A quién se le permite utilizar esta estación de carga?" }, "render": { "en": "Access is {access}", - "nl": "Toegang voor {access}" + "nl": "Toegang voor {access}", + "de": "Zugang ist {access}", + "es": "El acceso está {access}" }, "freeform": { "key": "access", @@ -139,7 +167,9 @@ "if": "access=yes", "then": { "en": "Anyone can use this charging station (payment might be needed)", - "nl": "Toegankelijk voor iedereen (mogelijks met aanmelden en/of te betalen)" + "nl": "Toegankelijk voor iedereen (mogelijks met aanmelden en/of te betalen)", + "de": "Jeder kann die Station nutzen (eventuell gegen Bezahlung)", + "es": "Cualquiera puede utilizar esta estación de carga (puede requerirse un pago)" } }, { @@ -151,7 +181,9 @@ }, "then": { "en": "Anyone can use this charging station (payment might be needed)", - "nl": "Toegankelijk voor iedereen (mogelijks met aanmelden en/of te betalen)" + "nl": "Toegankelijk voor iedereen (mogelijks met aanmelden en/of te betalen)", + "de": "Jeder kann diese Ladestation nutzen (eventuell gegen Bezahlung)", + "es": "Cualquiera puede utilizar esta estación de carga (puede requerirse un pago)" }, "hideInAnswer": true }, @@ -159,21 +191,27 @@ "if": "access=customers", "then": { "en": "Only customers of the place this station belongs to can use this charging station
    E.g. a charging station operated by hotel which is only usable by their guests", - "nl": "Enkel klanten van de bijhorende plaats mogen dit oplaadpunt gebruiken
    Bv. op de parking van een hotel en enkel toegankelijk voor klanten van dit hotel" + "nl": "Enkel klanten van de bijhorende plaats mogen dit oplaadpunt gebruiken
    Bv. op de parking van een hotel en enkel toegankelijk voor klanten van dit hotel", + "de": "Nur Kunden des Ortes, zu dem diese Station gehört, können diese Ladestation nutzen
    Z.B. eine von einem Hotel betriebene Ladestation, die nur von dessen Gästen genutzt werden kann", + "es": "Solo clientes del lugar al que pertenece esta estación la pueden utilizar
    Ej. una estación de carga operada por un hotel que solo es utilizable por sus huéspedes" } }, { "if": "access=key", "then": { "en": "A key must be requested to access this charging station
    E.g. a charging station operated by hotel which is only usable by their guests, which receive a key from the reception to unlock the charging station", - "nl": "Een sleutel is nodig om dit oplaadpunt te gebruiken
    Bv. voor klanten van een hotel of een bar, die de sleutel aan de receptie kunnen krijgen" + "nl": "Een sleutel is nodig om dit oplaadpunt te gebruiken
    Bv. voor klanten van een hotel of een bar, die de sleutel aan de receptie kunnen krijgen", + "de": "Für den Zugang zur Station muss ein Schlüssel angefordert werden
    z.B. eine von einem Hotel betriebene Ladestation, die nur von dessen Gästen genutzt werden kann, die an der Rezeption einen Schlüssel erhalten, um die Ladestation aufzuschließen", + "es": "Se debe de solicitar una llave para utilizar esta estación de carga
    Ej. una estación de carga operada por un hotel que solo es utilizable por sus huéspedes, que reciben una llave de la recepción para desbloquear la estación de carga" } }, { "if": "access=private", "then": { - "en": "Not accessible to the general public (e.g. only accessible to the owners, employees, ...)", - "nl": "Niet toegankelijk voor het publiek
    Bv. enkel toegankelijk voor de eigenaar, medewerkers ,... " + "en": "Not accessible to the general public (e.g. only accessible to the owners, employees, …)", + "nl": "Niet toegankelijk voor het publiek
    Bv. enkel toegankelijk voor de eigenaar, medewerkers, ...", + "de": "Die Station ist nicht für die Allgemeinheit zugänglich (z. B. nur für die Eigentümer, Mitarbeiter, …)", + "es": "No accesible al público general (ej. solo accesible a los propietarios, empleados, ...)" } } ] @@ -182,11 +220,15 @@ "id": "capacity", "render": { "en": "{capacity} vehicles can be charged here at the same time", - "nl": "{capacity} voertuigen kunnen hier op hetzelfde moment opgeladen worden" + "nl": "{capacity} voertuigen kunnen hier op hetzelfde moment opgeladen worden", + "de": "Hier können {capacity} Fahrzeuge gleichzeitig laden", + "es": "Aquí se pueden cargar {capacity} vehículos al mismo tiempo" }, "question": { "en": "How much vehicles can be charged here at the same time?", - "nl": "Hoeveel voertuigen kunnen hier opgeladen worden?" + "nl": "Hoeveel voertuigen kunnen hier opgeladen worden?", + "de": "Wie viele Fahrzeuge können hier gleichzeitig laden?", + "es": "¿Cuántos vehículos se pueden cargar a la vez aquí?" }, "freeform": { "key": "capacity", @@ -197,7 +239,9 @@ "id": "Available_charging_stations (generated)", "question": { "en": "Which charging connections are available here?", - "nl": "Welke aansluitingen zijn hier beschikbaar?" + "nl": "Welke laadaansluitingen zijn hier beschikbaar?", + "de": "Welche Ladeanschlüsse gibt es hier?", + "es": "¿Qué tipo de conexiones de carga están disponibles aquí?" }, "multiAnswer": true, "mappings": [ @@ -206,7 +250,9 @@ "ifnot": "socket:schuko=", "then": { "en": "Schuko wall plug without ground pin (CEE7/4 type F)", - "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)" + "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)", + "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)", + "es": "Enchufe de pared Schuko sin pin de tierra (CEE7/4 tipo F)" }, "icon": { "path": "./assets/layers/charging_station/CEE7_4F.svg", @@ -234,7 +280,9 @@ }, "then": { "en": "Schuko wall plug without ground pin (CEE7/4 type F)", - "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)" + "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)", + "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)", + "es": "Enchufe de pared Schuko sin pin de tierra (CEE7/4 tipo F)" }, "hideInAnswer": true, "icon": { @@ -247,7 +295,9 @@ "ifnot": "socket:typee=", "then": { "en": "European wall plug with ground pin (CEE7/4 type E)", - "nl": "Europese stekker met aardingspin (CEE7/4 type E)" + "nl": "Europese stekker met aardingspin (CEE7/4 type E)", + "de": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)", + "es": "Enchufe de pared Europeo con pin de tierra (CEE7/4 tipo E)" }, "icon": { "path": "./assets/layers/charging_station/TypeE.svg", @@ -263,7 +313,9 @@ }, "then": { "en": "European wall plug with ground pin (CEE7/4 type E)", - "nl": "Europese stekker met aardingspin (CEE7/4 type E)" + "nl": "Europese stekker met aardingspin (CEE7/4 type E)", + "de": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)", + "es": "Enchufe de pared Europeo con pin de tierra (CEE7/4 tipo E)" }, "hideInAnswer": true, "icon": { @@ -276,7 +328,10 @@ "ifnot": "socket:chademo=", "then": { "en": "Chademo", - "nl": "Chademo" + "nl": "Chademo", + "ca": "Chademo", + "de": "Chademo-Anschluss", + "es": "Chademo" }, "icon": { "path": "./assets/layers/charging_station/Chademo_type4.svg", @@ -318,7 +373,10 @@ }, "then": { "en": "Chademo", - "nl": "Chademo" + "nl": "Chademo", + "ca": "Chademo", + "de": "Chademo-Anschluss", + "es": "Chademo" }, "hideInAnswer": true, "icon": { @@ -331,7 +389,9 @@ "ifnot": "socket:type1_cable=", "then": { "en": "Type 1 with cable (J1772)", - "nl": "Type 1 met kabel (J1772)" + "nl": "Type 1 met kabel (J1772)", + "de": "Typ 1 mit Kabel (J1772)", + "es": "Tipo 1 con cable (J1772)" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -373,7 +433,9 @@ }, "then": { "en": "Type 1 with cable (J1772)", - "nl": "Type 1 met kabel (J1772)" + "nl": "Type 1 met kabel (J1772)", + "de": "Typ 1 mit Kabel (J1772)", + "es": "Tipo 1 con cable (J1772)" }, "hideInAnswer": true, "icon": { @@ -386,7 +448,9 @@ "ifnot": "socket:type1=", "then": { "en": "Type 1 without cable (J1772)", - "nl": "Type 1 zonder kabel (J1772)" + "nl": "Type 1 zonder kabel (J1772)", + "de": "Typ 1 ohne Kabel (J1772)", + "es": "Tipo 1 sin cable (J1772)" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -428,7 +492,9 @@ }, "then": { "en": "Type 1 without cable (J1772)", - "nl": "Type 1 zonder kabel (J1772)" + "nl": "Type 1 zonder kabel (J1772)", + "de": " Typ 1 ohne Kabel (J1772)", + "es": "Tipo 1sin cable (J1772)" }, "hideInAnswer": true, "icon": { @@ -441,7 +507,9 @@ "ifnot": "socket:type1_combo=", "then": { "en": "Type 1 CCS (aka Type 1 Combo)", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo)" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo)", + "de": "Typ 1 CCS (Typ 1 Combo)", + "es": "CSS Tipo 1 (también conocido como Tipo 1 Combo)" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -483,7 +551,9 @@ }, "then": { "en": "Type 1 CCS (aka Type 1 Combo)", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo)" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo)", + "de": " Typ 1 CCS (auch bekannt als Typ 1 Combo)", + "es": "CSS Tipo 1 (también conocido como Tipo 1 Combo)" }, "hideInAnswer": true, "icon": { @@ -496,7 +566,9 @@ "ifnot": "socket:tesla_supercharger=", "then": { "en": "Tesla Supercharger", - "nl": "Tesla Supercharger" + "nl": "Tesla Supercharger", + "de": "Tesla Supercharger", + "es": "Supercargador de Tesla" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -538,7 +610,9 @@ }, "then": { "en": "Tesla Supercharger", - "nl": "Tesla Supercharger" + "nl": "Tesla Supercharger", + "de": "Tesla Supercharger", + "es": "Supercargador de Tesla" }, "hideInAnswer": true, "icon": { @@ -551,7 +625,9 @@ "ifnot": "socket:type2=", "then": { "en": "Type 2 (mennekes)", - "nl": "Type 2 (mennekes)" + "nl": "Type 2 (mennekes)", + "de": "Typ 2 (Mennekes)", + "es": "Tipo 2 (mennekes)" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -593,7 +669,9 @@ }, "then": { "en": "Type 2 (mennekes)", - "nl": "Type 2 (mennekes)" + "nl": "Type 2 (mennekes)", + "de": "Typ 2 (Mennekes)", + "es": "Tipo 2 (mennekes)" }, "hideInAnswer": true, "icon": { @@ -606,7 +684,9 @@ "ifnot": "socket:type2_combo=", "then": { "en": "Type 2 CCS (mennekes)", - "nl": "Type 2 CCS (mennekes)" + "nl": "Type 2 CCS (mennekes)", + "de": "Typ 2 CCS (Mennekes)", + "es": "CSS Tipo 2 (mennekes)" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -648,7 +728,9 @@ }, "then": { "en": "Type 2 CCS (mennekes)", - "nl": "Type 2 CCS (mennekes)" + "nl": "Type 2 CCS (mennekes)", + "de": "Typ 2 CCS (mennekes)", + "es": "CSS Tipo 2 (mennekes)" }, "hideInAnswer": true, "icon": { @@ -661,7 +743,9 @@ "ifnot": "socket:type2_cable=", "then": { "en": "Type 2 with cable (mennekes)", - "nl": "Type 2 met kabel (J1772)" + "nl": "Type 2 met kabel (J1772)", + "de": "Typ 2 mit Kabel (Mennekes)", + "es": "Tipo 2 con cable (mennekes)" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -703,7 +787,9 @@ }, "then": { "en": "Type 2 with cable (mennekes)", - "nl": "Type 2 met kabel (J1772)" + "nl": "Type 2 met kabel (J1772)", + "de": "Typ 2 mit Kabel (mennekes)", + "es": "Tipo 2 con cable (mennekes)" }, "hideInAnswer": true, "icon": { @@ -716,7 +802,9 @@ "ifnot": "socket:tesla_supercharger_ccs=", "then": { "en": "Tesla Supercharger CCS (a branded type2_css)", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)" + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)", + "de": "Tesla Supercharger CCS (Typ 2 CSS von Tesla)", + "es": "CCS Supercargador Tesla (un tipo2_css con marca)" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -758,7 +846,9 @@ }, "then": { "en": "Tesla Supercharger CCS (a branded type2_css)", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)" + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)", + "de": "Tesla Supercharger CCS (ein Markenzeichen von type2_css)", + "es": "CCS Supercargador Tesla (un tipo2_css con marca)" }, "hideInAnswer": true, "icon": { @@ -771,7 +861,9 @@ "ifnot": "socket:tesla_destination=", "then": { "en": "Tesla Supercharger (destination)", - "nl": "Tesla Supercharger (destination)" + "nl": "Tesla Supercharger (destination)", + "de": "Tesla Supercharger (Destination)", + "es": "Supercargador Tesla (destino" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -819,7 +911,9 @@ }, "then": { "en": "Tesla Supercharger (destination)", - "nl": "Tesla Supercharger (destination)" + "nl": "Tesla Supercharger (destination)", + "de": "Tesla Supercharger (Destination)", + "es": "Supercargador Tesla (destino)" }, "hideInAnswer": true, "icon": { @@ -832,7 +926,9 @@ "ifnot": "socket:tesla_destination=", "then": { "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla)", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)" + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)", + "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)", + "es": "Supercargador Tesla (destino) (Un Tipo 2 con un cable de marca tesla)" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -880,7 +976,9 @@ }, "then": { "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla)", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)" + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)", + "de": "Tesla supercharger (Destination) (Typ 2 mit Kabel von Tesla)", + "es": "Supercargador Tesla (destino) (Un Tipo 2 con un cable de marca tesla)" }, "hideInAnswer": true, "icon": { @@ -893,7 +991,9 @@ "ifnot": "socket:USB-A=", "then": { "en": "USB to charge phones and small electronics", - "nl": "USB om GSMs en kleine electronica op te laden" + "nl": "USB om GSMs en kleine electronica op te laden", + "de": "USB zum Aufladen von Handys und kleinen Elektrogeräten", + "es": "USB para cargar teléfonos y dispositivos pequeños" }, "icon": { "path": "./assets/layers/charging_station/usb_port.svg", @@ -909,7 +1009,9 @@ }, "then": { "en": "USB to charge phones and small electronics", - "nl": "USB om GSMs en kleine electronica op te laden" + "nl": "USB om GSMs en kleine electronica op te laden", + "de": "USB zum Aufladen von Handys und kleinen Elektrogeräten", + "es": "USB para cargar teléfonos y dispositivos pequeños" }, "hideInAnswer": true, "icon": { @@ -922,7 +1024,9 @@ "ifnot": "socket:bosch_3pin=", "then": { "en": "Bosch Active Connect with 3 pins and cable", - "nl": "Bosch Active Connect met 3 pinnen aan een kabel" + "nl": "Bosch Active Connect met 3 pinnen aan een kabel", + "de": "Bosch Active Connect mit 3 Pins und Kabel", + "es": "Bosch Active Connect con 3 pines y cable" }, "icon": { "path": "./assets/layers/charging_station/bosch-3pin.svg", @@ -960,7 +1064,9 @@ }, "then": { "en": "Bosch Active Connect with 3 pins and cable", - "nl": "Bosch Active Connect met 3 pinnen aan een kabel" + "nl": "Bosch Active Connect met 3 pinnen aan een kabel", + "de": " Bosch Active Connect mit 3 Pins und Kabel", + "es": "Bosch Active Connect con 3 pines y cable" }, "hideInAnswer": true, "icon": { @@ -973,7 +1079,9 @@ "ifnot": "socket:bosch_5pin=", "then": { "en": "Bosch Active Connect with 5 pins and cable", - "nl": "Bosch Active Connect met 5 pinnen aan een kabel" + "nl": "Bosch Active Connect met 5 pinnen aan een kabel", + "de": "Bosch Active Connect mit 5 Pins und Kabel", + "es": "Bosch Active Connect con 5 pines y cable" }, "icon": { "path": "./assets/layers/charging_station/bosch-5pin.svg", @@ -1011,7 +1119,9 @@ }, "then": { "en": "Bosch Active Connect with 5 pins and cable", - "nl": "Bosch Active Connect met 5 pinnen aan een kabel" + "nl": "Bosch Active Connect met 5 pinnen aan een kabel", + "de": " Bosch Active Connect mit 5 Pins und Kabel", + "es": "Bosch Active Connect con 5 pines y cable" }, "hideInAnswer": true, "icon": { @@ -1025,11 +1135,13 @@ "id": "plugs-0", "question": { "en": "How much plugs of type
    Schuko wall plug without ground pin (CEE7/4 type F)
    are available here?", - "nl": "Hoeveel stekkers van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker vom Typ
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    sind hier vorhanden?" }, "render": { "en": "There are {socket:schuko} plugs of type
    Schuko wall plug without ground pin (CEE7/4 type F)
    available here", - "nl": "Hier zijn {socket:schuko} stekkers van het type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    " + "nl": "Hier zijn {socket:schuko} stekkers van het type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ", + "de": "Hier sind {socket:schuko} Stecker des Typs
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    vorhanden" }, "freeform": { "key": "socket:schuko", @@ -1046,11 +1158,13 @@ "id": "plugs-1", "question": { "en": "How much plugs of type
    European wall plug with ground pin (CEE7/4 type E)
    are available here?", - "nl": "Hoeveel stekkers van type
    Europese stekker met aardingspin (CEE7/4 type E)
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Europese stekker met aardingspin (CEE7/4 type E)
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    sind hier vorhanden?" }, "render": { "en": "There are {socket:typee} plugs of type
    European wall plug with ground pin (CEE7/4 type E)
    available here", - "nl": "Hier zijn {socket:typee} stekkers van het type
    Europese stekker met aardingspin (CEE7/4 type E)
    " + "nl": "Hier zijn {socket:typee} stekkers van het type
    Europese stekker met aardingspin (CEE7/4 type E)
    ", + "de": "Hier sind {socket:typee} Stecker des Typs
    Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    vorhanden" }, "freeform": { "key": "socket:typee", @@ -1067,11 +1181,13 @@ "id": "plugs-2", "question": { "en": "How much plugs of type
    Chademo
    are available here?", - "nl": "Hoeveel stekkers van type
    Chademo
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Chademo
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Chademo
    sind hier vorhanden?" }, "render": { "en": "There are {socket:chademo} plugs of type
    Chademo
    available here", - "nl": "Hier zijn {socket:chademo} stekkers van het type
    Chademo
    " + "nl": "Hier zijn {socket:chademo} stekkers van het type
    Chademo
    ", + "de": "Hier sind {socket:chademo} Stecker des Typs
    Chademo
    vorhanden" }, "freeform": { "key": "socket:chademo", @@ -1088,11 +1204,13 @@ "id": "plugs-3", "question": { "en": "How much plugs of type
    Type 1 with cable (J1772)
    are available here?", - "nl": "Hoeveel stekkers van type
    Type 1 met kabel (J1772)
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Type 1 met kabel (J1772)
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker vom Typ
    Typ 1 mit Kabel (J1772)
    sind hier vorhanden?" }, "render": { "en": "There are {socket:type1_cable} plugs of type
    Type 1 with cable (J1772)
    available here", - "nl": "Hier zijn {socket:type1_cable} stekkers van het type
    Type 1 met kabel (J1772)
    " + "nl": "Hier zijn {socket:type1_cable} stekkers van het type
    Type 1 met kabel (J1772)
    ", + "de": "Hier sind {socket:type1_cable} Stecker vom Typ
    Typ 1 mit Kabel (J1772)
    vorhanden" }, "freeform": { "key": "socket:type1_cable", @@ -1109,11 +1227,13 @@ "id": "plugs-4", "question": { "en": "How much plugs of type
    Type 1 without cable (J1772)
    are available here?", - "nl": "Hoeveel stekkers van type
    Type 1 zonder kabel (J1772)
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Type 1 zonder kabel (J1772)
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Typ 1 ohne Kabel (J1772)
    sind hier vorhanden?" }, "render": { "en": "There are {socket:type1} plugs of type
    Type 1 without cable (J1772)
    available here", - "nl": "Hier zijn {socket:type1} stekkers van het type
    Type 1 zonder kabel (J1772)
    " + "nl": "Hier zijn {socket:type1} stekkers van het type
    Type 1 zonder kabel (J1772)
    ", + "de": "Hier sind {socket:type1} Stecker des Typs
    Typ 1 ohne Kabel (J1772)
    vorhanden" }, "freeform": { "key": "socket:type1", @@ -1130,11 +1250,13 @@ "id": "plugs-5", "question": { "en": "How much plugs of type
    Type 1 CCS (aka Type 1 Combo)
    are available here?", - "nl": "Hoeveel stekkers van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Typ 1 CCS (Typ 1 Combo)
    sind hier vorhanden?" }, "render": { "en": "There are {socket:type1_combo} plugs of type
    Type 1 CCS (aka Type 1 Combo)
    available here", - "nl": "Hier zijn {socket:type1_combo} stekkers van het type
    Type 1 CCS (ook gekend als Type 1 Combo)
    " + "nl": "Hier zijn {socket:type1_combo} stekkers van het type
    Type 1 CCS (ook gekend als Type 1 Combo)
    ", + "de": "Hier sind {socket:type1_combo} Stecker des Typs
    Typ 1 CCS (Typ 1 Combo)
    vorhanden" }, "freeform": { "key": "socket:type1_combo", @@ -1151,11 +1273,13 @@ "id": "plugs-6", "question": { "en": "How much plugs of type
    Tesla Supercharger
    are available here?", - "nl": "Hoeveel stekkers van type
    Tesla Supercharger
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Tesla Supercharger
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Tesla Supercharger
    sind hier vorhanden?" }, "render": { "en": "There are {socket:tesla_supercharger} plugs of type
    Tesla Supercharger
    available here", - "nl": "Hier zijn {socket:tesla_supercharger} stekkers van het type
    Tesla Supercharger
    " + "nl": "Hier zijn {socket:tesla_supercharger} stekkers van het type
    Tesla Supercharger
    ", + "de": "Hier sind {socket:tesla_supercharger} Stecker des Typs
    Tesla Supercharger
    vorhanden" }, "freeform": { "key": "socket:tesla_supercharger", @@ -1172,11 +1296,13 @@ "id": "plugs-7", "question": { "en": "How much plugs of type
    Type 2 (mennekes)
    are available here?", - "nl": "Hoeveel stekkers van type
    Type 2 (mennekes)
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Type 2 (mennekes)
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Typ 2 (Mennekes)
    sind hier vorhanden?" }, "render": { "en": "There are {socket:type2} plugs of type
    Type 2 (mennekes)
    available here", - "nl": "Hier zijn {socket:type2} stekkers van het type
    Type 2 (mennekes)
    " + "nl": "Hier zijn {socket:type2} stekkers van het type
    Type 2 (mennekes)
    ", + "de": "Hier sind {socket:type2} Stecker des Typs
    Typ 2 (Mennekes)
    vorhanden" }, "freeform": { "key": "socket:type2", @@ -1193,11 +1319,13 @@ "id": "plugs-8", "question": { "en": "How much plugs of type
    Type 2 CCS (mennekes)
    are available here?", - "nl": "Hoeveel stekkers van type
    Type 2 CCS (mennekes)
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Type 2 CCS (mennekes)
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Typ 2 CCS (Mennekes)
    sind hier vorhanden?" }, "render": { "en": "There are {socket:type2_combo} plugs of type
    Type 2 CCS (mennekes)
    available here", - "nl": "Hier zijn {socket:type2_combo} stekkers van het type
    Type 2 CCS (mennekes)
    " + "nl": "Hier zijn {socket:type2_combo} stekkers van het type
    Type 2 CCS (mennekes)
    ", + "de": "Hier sind {socket:type2_combo} Stecker des Typs
    Typ 2 CCS (Mennekes)
    vorhanden" }, "freeform": { "key": "socket:type2_combo", @@ -1214,11 +1342,13 @@ "id": "plugs-9", "question": { "en": "How much plugs of type
    Type 2 with cable (mennekes)
    are available here?", - "nl": "Hoeveel stekkers van type
    Type 2 met kabel (J1772)
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Type 2 met kabel (J1772)
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Typ 2 mit Kabel (Mennekes)
    sind hier vorhanden?" }, "render": { "en": "There are {socket:type2_cable} plugs of type
    Type 2 with cable (mennekes)
    available here", - "nl": "Hier zijn {socket:type2_cable} stekkers van het type
    Type 2 met kabel (J1772)
    " + "nl": "Hier zijn {socket:type2_cable} stekkers van het type
    Type 2 met kabel (J1772)
    ", + "de": "Hier sind {socket:type2_cable} Stecker vom Typ
    Typ 2 mit Kabel (Mennekes)
    vorhanden" }, "freeform": { "key": "socket:type2_cable", @@ -1235,11 +1365,13 @@ "id": "plugs-10", "question": { "en": "How much plugs of type
    Tesla Supercharger CCS (a branded type2_css)
    are available here?", - "nl": "Hoeveel stekkers van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Tesla Supercharger CCS (Typ 2 CSS von Tesla)
    sind hier vorhanden?" }, "render": { "en": "There are {socket:tesla_supercharger_ccs} plugs of type
    Tesla Supercharger CCS (a branded type2_css)
    available here", - "nl": "Hier zijn {socket:tesla_supercharger_ccs} stekkers van het type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    " + "nl": "Hier zijn {socket:tesla_supercharger_ccs} stekkers van het type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ", + "de": "Hier sind {socket:tesla_supercharger_ccs} Stecker des Typs
    Tesla Supercharger CCS (Typ2 CSS von Tesla)
    vorhanden" }, "freeform": { "key": "socket:tesla_supercharger_ccs", @@ -1256,11 +1388,13 @@ "id": "plugs-11", "question": { "en": "How much plugs of type
    Tesla Supercharger (destination)
    are available here?", - "nl": "Hoeveel stekkers van type
    Tesla Supercharger (destination)
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Tesla Supercharger (destination)
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Tesla Supercharger (Destination)
    sind hier vorhanden?" }, "render": { "en": "There are {socket:tesla_destination} plugs of type
    Tesla Supercharger (destination)
    available here", - "nl": "Hier zijn {socket:tesla_destination} stekkers van het type
    Tesla Supercharger (destination)
    " + "nl": "Hier zijn {socket:tesla_destination} stekkers van het type
    Tesla Supercharger (destination)
    ", + "de": "Hier sind {socket:tesla_destination} Stecker des Typs
    Tesla Supercharger (Destination)
    vorhanden" }, "freeform": { "key": "socket:tesla_destination", @@ -1277,11 +1411,13 @@ "id": "plugs-12", "question": { "en": "How much plugs of type
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    are available here?", - "nl": "Hoeveel stekkers van type
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Tesla Supercharger (Destination) (Typ 2 Stecker mit Kabel von Tesla)
    sind hier vorhanden?" }, "render": { "en": "There are {socket:tesla_destination} plugs of type
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    available here", - "nl": "Hier zijn {socket:tesla_destination} stekkers van het type
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    " + "nl": "Hier zijn {socket:tesla_destination} stekkers van het type
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    ", + "de": "Hier sind {socket:tesla_destination} Stecker des Typs
    Tesla Supercharger (Destination) (Typ 2 Stecker mit Kabel von Tesla)
    vorhanden" }, "freeform": { "key": "socket:tesla_destination", @@ -1298,11 +1434,13 @@ "id": "plugs-13", "question": { "en": "How much plugs of type
    USB to charge phones and small electronics
    are available here?", - "nl": "Hoeveel stekkers van type
    USB om GSMs en kleine electronica op te laden
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    USB om GSMs en kleine electronica op te laden
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    USB zum Aufladen von Telefonen und kleinen elektronischen Geräten
    sind hier vorhanden?" }, "render": { "en": "There are {socket:USB-A} plugs of type
    USB to charge phones and small electronics
    available here", - "nl": "Hier zijn {socket:USB-A} stekkers van het type
    USB om GSMs en kleine electronica op te laden
    " + "nl": "Hier zijn {socket:USB-A} stekkers van het type
    USB om GSMs en kleine electronica op te laden
    ", + "de": "Hier sind {socket:USB-A}-Stecker des Typs
    USB zum Aufladen von Telefonen und kleinen elektronischen Geräten
    vorhanden" }, "freeform": { "key": "socket:USB-A", @@ -1319,11 +1457,13 @@ "id": "plugs-14", "question": { "en": "How much plugs of type
    Bosch Active Connect with 3 pins and cable
    are available here?", - "nl": "Hoeveel stekkers van type
    Bosch Active Connect met 3 pinnen aan een kabel
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Bosch Active Connect met 3 pinnen aan een kabel
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Bosch Active Connect mit 3 Stiften und Kabel
    sind hier vorhanden?" }, "render": { "en": "There are {socket:bosch_3pin} plugs of type
    Bosch Active Connect with 3 pins and cable
    available here", - "nl": "Hier zijn {socket:bosch_3pin} stekkers van het type
    Bosch Active Connect met 3 pinnen aan een kabel
    " + "nl": "Hier zijn {socket:bosch_3pin} stekkers van het type
    Bosch Active Connect met 3 pinnen aan een kabel
    ", + "de": "Hier sind {socket:bosch_3pin}-Stecker des Typs
    Bosch Active Connect mit 3 Stiften und Kabel
    vorhanden" }, "freeform": { "key": "socket:bosch_3pin", @@ -1340,11 +1480,13 @@ "id": "plugs-15", "question": { "en": "How much plugs of type
    Bosch Active Connect with 5 pins and cable
    are available here?", - "nl": "Hoeveel stekkers van type
    Bosch Active Connect met 5 pinnen aan een kabel
    heeft dit oplaadpunt?" + "nl": "Hoeveel stekkers van type
    Bosch Active Connect met 5 pinnen aan een kabel
    heeft dit oplaadpunt?", + "de": "Wie viele Stecker des Typs
    Bosch Active Connect mit 5 Stiften und Kabel
    sind hier vorhanden?" }, "render": { "en": "There are {socket:bosch_5pin} plugs of type
    Bosch Active Connect with 5 pins and cable
    available here", - "nl": "Hier zijn {socket:bosch_5pin} stekkers van het type
    Bosch Active Connect met 5 pinnen aan een kabel
    " + "nl": "Hier zijn {socket:bosch_5pin} stekkers van het type
    Bosch Active Connect met 5 pinnen aan een kabel
    ", + "de": "Hier sind {socket:bosch_5pin}-Stecker des Typs
    Bosch Active Connect mit 5 Stiften und Kabel
    vorhanden" }, "freeform": { "key": "socket:bosch_5pin", @@ -1362,11 +1504,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Schuko wall plug without ground pin (CEE7/4 type F)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    " + "nl": "Welke spanning levert de stekker van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ", + "de": "Welche Spannung liefern die
    Schuko-Wandstecker ohne Erdungsstift (CEE7/4 Typ F)
    ?" }, "render": { "en": "
    Schuko wall plug without ground pin (CEE7/4 type F)
    outputs {socket:schuko:voltage} volt", - "nl": "
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    heeft een spanning van {socket:schuko:voltage} volt" + "nl": "
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    heeft een spanning van {socket:schuko:voltage} volt", + "de": "
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    liefert {socket:schuko:voltage} Volt" }, "freeform": { "key": "socket:schuko:voltage", @@ -1377,7 +1521,8 @@ "if": "socket:schuko:voltage=230 V", "then": { "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs 230 volt", - "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) heeft een spanning van 230 volt" + "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) heeft een spanning van 230 volt", + "de": "Schuko-Stecker ohne Schutzkontakt (CEE7/4 Typ F) liefert 230 Volt" }, "icon": { "path": "./assets/layers/charging_station/CEE7_4F.svg", @@ -1397,11 +1542,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Schuko wall plug without ground pin (CEE7/4 type F)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ?" + "nl": "Welke stroom levert de stekker van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ?", + "de": "Welche Stromstärke liefern die Anschlüsse mit
    Schuko-Stecker ohne Schutzkontakt (CEE7/4 Typ F)
    ?" }, "render": { "en": "
    Schuko wall plug without ground pin (CEE7/4 type F)
    outputs at most {socket:schuko:current}A", - "nl": "
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    levert een stroom van maximaal {socket:schuko:current}A" + "nl": "
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    levert een stroom van maximaal {socket:schuko:current}A", + "de": "
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    liefert maximal {socket:schuko:current} A" }, "freeform": { "key": "socket:schuko:current", @@ -1412,7 +1559,8 @@ "if": "socket:schuko:current=16 A", "then": { "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most 16 A", - "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een stroom van maximaal 16 A" + "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een stroom van maximaal 16 A", + "de": "Schuko-Steckdose ohne Erdungsstift (CEE7/4 Typ F) liefert 16 A" }, "icon": { "path": "./assets/layers/charging_station/CEE7_4F.svg", @@ -1432,11 +1580,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Schuko wall plug without ground pin (CEE7/4 type F)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ?", + "de": "Welche Leistung liefert ein einzelner
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    ?" }, "render": { "en": "
    Schuko wall plug without ground pin (CEE7/4 type F)
    outputs at most {socket:schuko:output}", - "nl": "
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    levert een vermogen van maximaal {socket:schuko:output}" + "nl": "
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    levert een vermogen van maximaal {socket:schuko:output}", + "de": "
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    liefert maximal {socket:schuko:output}" }, "freeform": { "key": "socket:schuko:output", @@ -1446,8 +1596,9 @@ { "if": "socket:schuko:output=3.6 kW", "then": { - "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most 3.6 kW A", - "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een vermogen van maximaal 3.6 kW A" + "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most 3.6 kw A", + "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een vermogen van maximaal 3.6 kw A", + "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F) liefert maximal 3,6 kw A" }, "icon": { "path": "./assets/layers/charging_station/CEE7_4F.svg", @@ -1467,11 +1618,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    European wall plug with ground pin (CEE7/4 type E)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Europese stekker met aardingspin (CEE7/4 type E)
    " + "nl": "Welke spanning levert de stekker van type
    Europese stekker met aardingspin (CEE7/4 type E)
    ", + "de": "Welche Spannung liefern die
    Europäischen Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    ?" }, "render": { "en": "
    European wall plug with ground pin (CEE7/4 type E)
    outputs {socket:typee:voltage} volt", - "nl": "
    Europese stekker met aardingspin (CEE7/4 type E)
    heeft een spanning van {socket:typee:voltage} volt" + "nl": "
    Europese stekker met aardingspin (CEE7/4 type E)
    heeft een spanning van {socket:typee:voltage} volt", + "de": "
    Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    liefert {socket:typee:voltage} volt" }, "freeform": { "key": "socket:typee:voltage", @@ -1482,7 +1635,8 @@ "if": "socket:typee:voltage=230 V", "then": { "en": "European wall plug with ground pin (CEE7/4 type E) outputs 230 volt", - "nl": "Europese stekker met aardingspin (CEE7/4 type E) heeft een spanning van 230 volt" + "nl": "Europese stekker met aardingspin (CEE7/4 type E) heeft een spanning van 230 volt", + "de": "Europäischer Netzstecker mit Schutzkontakt (CEE7/4 Typ E) liefert 230 Volt" }, "icon": { "path": "./assets/layers/charging_station/TypeE.svg", @@ -1502,11 +1656,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    European wall plug with ground pin (CEE7/4 type E)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Europese stekker met aardingspin (CEE7/4 type E)
    ?" + "nl": "Welke stroom levert de stekker van type
    Europese stekker met aardingspin (CEE7/4 type E)
    ?", + "de": "Welche Stromstärke bieten die Anschlüsse mit
    europäischem Stecker mit Schutzkontakt (CEE7/4 Typ E)
    ?" }, "render": { "en": "
    European wall plug with ground pin (CEE7/4 type E)
    outputs at most {socket:typee:current}A", - "nl": "
    Europese stekker met aardingspin (CEE7/4 type E)
    levert een stroom van maximaal {socket:typee:current}A" + "nl": "
    Europese stekker met aardingspin (CEE7/4 type E)
    levert een stroom van maximaal {socket:typee:current}A", + "de": "
    Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    liefert maximal {socket:typee:current} A" }, "freeform": { "key": "socket:typee:current", @@ -1517,7 +1673,8 @@ "if": "socket:typee:current=16 A", "then": { "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 16 A", - "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een stroom van maximaal 16 A" + "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een stroom van maximaal 16 A", + "de": "Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E) liefert maximal 16 A" }, "icon": { "path": "./assets/layers/charging_station/TypeE.svg", @@ -1537,11 +1694,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    European wall plug with ground pin (CEE7/4 type E)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Europese stekker met aardingspin (CEE7/4 type E)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Europese stekker met aardingspin (CEE7/4 type E)
    ?", + "de": "Welche Leistung liefert ein einzelner
    Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    ?" }, "render": { "en": "
    European wall plug with ground pin (CEE7/4 type E)
    outputs at most {socket:typee:output}", - "nl": "
    Europese stekker met aardingspin (CEE7/4 type E)
    levert een vermogen van maximaal {socket:typee:output}" + "nl": "
    Europese stekker met aardingspin (CEE7/4 type E)
    levert een vermogen van maximaal {socket:typee:output}", + "de": "
    Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E)
    liefert maximal {socket:typee:output}" }, "freeform": { "key": "socket:typee:output", @@ -1551,8 +1710,9 @@ { "if": "socket:typee:output=3 kW", "then": { - "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 3 kW A", - "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 3 kW A" + "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 3 kw A", + "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 3 kw A", + "de": "Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E) liefert maximal 3 kw A" }, "icon": { "path": "./assets/layers/charging_station/TypeE.svg", @@ -1562,8 +1722,9 @@ { "if": "socket:typee:output=22 kW", "then": { - "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 22 kW A", - "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 22 kW A" + "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 22 kw A", + "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 22 kw A", + "de": "Europäischer Wandstecker mit Erdungsstift (CEE7/4 Typ E) liefert maximal 22 kw A" }, "icon": { "path": "./assets/layers/charging_station/TypeE.svg", @@ -1583,11 +1744,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Chademo
    offer?", - "nl": "Welke spanning levert de stekker van type
    Chademo
    " + "nl": "Welke spanning levert de stekker van type
    Chademo
    ", + "de": "Welche Spannung bieten die Stecker mit
    Chademo
    ?" }, "render": { "en": "
    Chademo
    outputs {socket:chademo:voltage} volt", - "nl": "
    Chademo
    heeft een spanning van {socket:chademo:voltage} volt" + "nl": "
    Chademo
    heeft een spanning van {socket:chademo:voltage} volt", + "de": "
    Chademo
    liefert {socket:chademo:voltage} Volt" }, "freeform": { "key": "socket:chademo:voltage", @@ -1598,7 +1761,8 @@ "if": "socket:chademo:voltage=500 V", "then": { "en": "Chademo outputs 500 volt", - "nl": "Chademo heeft een spanning van 500 volt" + "nl": "Chademo heeft een spanning van 500 volt", + "de": "Chademo liefert 500 Volt" }, "icon": { "path": "./assets/layers/charging_station/Chademo_type4.svg", @@ -1618,11 +1782,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Chademo
    offer?", - "nl": "Welke stroom levert de stekker van type
    Chademo
    ?" + "nl": "Welke stroom levert de stekker van type
    Chademo
    ?", + "de": "Welche Stromstärke liefern die Stecker mit
    Chademo
    ?" }, "render": { "en": "
    Chademo
    outputs at most {socket:chademo:current}A", - "nl": "
    Chademo
    levert een stroom van maximaal {socket:chademo:current}A" + "nl": "
    Chademo
    levert een stroom van maximaal {socket:chademo:current}A", + "de": "
    Chademo
    liefert maximal {socket:chademo:current} A" }, "freeform": { "key": "socket:chademo:current", @@ -1633,7 +1799,8 @@ "if": "socket:chademo:current=120 A", "then": { "en": "Chademo outputs at most 120 A", - "nl": "Chademo levert een stroom van maximaal 120 A" + "nl": "Chademo levert een stroom van maximaal 120 A", + "de": "Chademo liefert maximal 120 A" }, "icon": { "path": "./assets/layers/charging_station/Chademo_type4.svg", @@ -1653,11 +1820,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Chademo
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Chademo
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Chademo
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Chademo
    ?" }, "render": { "en": "
    Chademo
    outputs at most {socket:chademo:output}", - "nl": "
    Chademo
    levert een vermogen van maximaal {socket:chademo:output}" + "nl": "
    Chademo
    levert een vermogen van maximaal {socket:chademo:output}", + "de": "
    Chademo
    liefert maximal {socket:chademo:output}" }, "freeform": { "key": "socket:chademo:output", @@ -1667,8 +1836,9 @@ { "if": "socket:chademo:output=50 kW", "then": { - "en": "Chademo outputs at most 50 kW A", - "nl": "Chademo levert een vermogen van maximaal 50 kW A" + "en": "Chademo outputs at most 50 kw A", + "nl": "Chademo levert een vermogen van maximaal 50 kw A", + "de": "Chademo liefert maximal 50 kw A" }, "icon": { "path": "./assets/layers/charging_station/Chademo_type4.svg", @@ -1688,11 +1858,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Type 1 with cable (J1772)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Type 1 met kabel (J1772)
    " + "nl": "Welke spanning levert de stekker van type
    Type 1 met kabel (J1772)
    ", + "de": "Welche Spannung liefern die Stecker mit
    Typ 1 mit Kabel (J1772)
    ?" }, "render": { "en": "
    Type 1 with cable (J1772)
    outputs {socket:type1_cable:voltage} volt", - "nl": "
    Type 1 met kabel (J1772)
    heeft een spanning van {socket:type1_cable:voltage} volt" + "nl": "
    Type 1 met kabel (J1772)
    heeft een spanning van {socket:type1_cable:voltage} volt", + "de": "
    Typ 1 mit Kabel (J1772)
    liefern {socket:type1_cable:voltage} Volt" }, "freeform": { "key": "socket:type1_cable:voltage", @@ -1703,7 +1875,8 @@ "if": "socket:type1_cable:voltage=200 V", "then": { "en": "Type 1 with cable (J1772) outputs 200 volt", - "nl": "Type 1 met kabel (J1772) heeft een spanning van 200 volt" + "nl": "Type 1 met kabel (J1772) heeft een spanning van 200 volt", + "de": "Typ 1 mit Kabel (J1772) liefert 200 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1714,7 +1887,8 @@ "if": "socket:type1_cable:voltage=240 V", "then": { "en": "Type 1 with cable (J1772) outputs 240 volt", - "nl": "Type 1 met kabel (J1772) heeft een spanning van 240 volt" + "nl": "Type 1 met kabel (J1772) heeft een spanning van 240 volt", + "de": "Typ 1 mit Kabel (J1772) liefert 240 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1734,11 +1908,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Type 1 with cable (J1772)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Type 1 met kabel (J1772)
    ?" + "nl": "Welke stroom levert de stekker van type
    Type 1 met kabel (J1772)
    ?", + "de": "Welche Stromstärke liefern die Stecker mit
    Typ 1 mit Kabel (J1772)
    ?" }, "render": { "en": "
    Type 1 with cable (J1772)
    outputs at most {socket:type1_cable:current}A", - "nl": "
    Type 1 met kabel (J1772)
    levert een stroom van maximaal {socket:type1_cable:current}A" + "nl": "
    Type 1 met kabel (J1772)
    levert een stroom van maximaal {socket:type1_cable:current}A", + "de": "
    Typ 1 mit Kabel (J1772)
    liefert maximal {socket:type1_cable:current} A" }, "freeform": { "key": "socket:type1_cable:current", @@ -1749,7 +1925,8 @@ "if": "socket:type1_cable:current=32 A", "then": { "en": "Type 1 with cable (J1772) outputs at most 32 A", - "nl": "Type 1 met kabel (J1772) levert een stroom van maximaal 32 A" + "nl": "Type 1 met kabel (J1772) levert een stroom van maximaal 32 A", + "de": "Typ 1 mit Kabel (J1772) liefert maximal 32 A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1769,11 +1946,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Type 1 with cable (J1772)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Type 1 met kabel (J1772)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Type 1 met kabel (J1772)
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Typ 1 mit Kabel (J1772)
    ?" }, "render": { "en": "
    Type 1 with cable (J1772)
    outputs at most {socket:type1_cable:output}", - "nl": "
    Type 1 met kabel (J1772)
    levert een vermogen van maximaal {socket:type1_cable:output}" + "nl": "
    Type 1 met kabel (J1772)
    levert een vermogen van maximaal {socket:type1_cable:output}", + "de": "
    Typ 1 mit Kabel (J1772)
    liefert maximal {socket:type1_cable:output}" }, "freeform": { "key": "socket:type1_cable:output", @@ -1783,8 +1962,9 @@ { "if": "socket:type1_cable:output=3.7 kW", "then": { - "en": "Type 1 with cable (J1772) outputs at most 3.7 kW A", - "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal 3.7 kW A" + "en": "Type 1 with cable (J1772) outputs at most 3.7 kw A", + "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal 3.7 kw A", + "de": "Typ 1 mit Kabel (J1772) liefert maximal 3,7 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1794,8 +1974,9 @@ { "if": "socket:type1_cable:output=7 kW", "then": { - "en": "Type 1 with cable (J1772) outputs at most 7 kW A", - "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal 7 kW A" + "en": "Type 1 with cable (J1772) outputs at most 7 kw A", + "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal 7 kw A", + "de": "Typ 1 mit Kabel (J1772) liefert maximal 7 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1815,11 +1996,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Type 1 without cable (J1772)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Type 1 zonder kabel (J1772)
    " + "nl": "Welke spanning levert de stekker van type
    Type 1 zonder kabel (J1772)
    ", + "de": "Welche Spannung bieten die Stecker mit
    Typ 1 ohne Kabel (J1772)
    ?" }, "render": { "en": "
    Type 1 without cable (J1772)
    outputs {socket:type1:voltage} volt", - "nl": "
    Type 1 zonder kabel (J1772)
    heeft een spanning van {socket:type1:voltage} volt" + "nl": "
    Type 1 zonder kabel (J1772)
    heeft een spanning van {socket:type1:voltage} volt", + "de": "
    Typ 1 ohne Kabel (J1772)
    liefert {socket:type1:voltage} Volt" }, "freeform": { "key": "socket:type1:voltage", @@ -1830,7 +2013,8 @@ "if": "socket:type1:voltage=200 V", "then": { "en": "Type 1 without cable (J1772) outputs 200 volt", - "nl": "Type 1 zonder kabel (J1772) heeft een spanning van 200 volt" + "nl": "Type 1 zonder kabel (J1772) heeft een spanning van 200 volt", + "de": "Typ 1 ohne Kabel (J1772) liefert 200 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1841,7 +2025,8 @@ "if": "socket:type1:voltage=240 V", "then": { "en": "Type 1 without cable (J1772) outputs 240 volt", - "nl": "Type 1 zonder kabel (J1772) heeft een spanning van 240 volt" + "nl": "Type 1 zonder kabel (J1772) heeft een spanning van 240 volt", + "de": "Typ 1 ohne Kabel (J1772) liefert 240 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1861,11 +2046,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Type 1 without cable (J1772)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Type 1 zonder kabel (J1772)
    ?" + "nl": "Welke stroom levert de stekker van type
    Type 1 zonder kabel (J1772)
    ?", + "de": "Welche Stromstärke liefern die Stecker mit
    Typ 1 ohne Kabel (J1772)
    ?" }, "render": { "en": "
    Type 1 without cable (J1772)
    outputs at most {socket:type1:current}A", - "nl": "
    Type 1 zonder kabel (J1772)
    levert een stroom van maximaal {socket:type1:current}A" + "nl": "
    Type 1 zonder kabel (J1772)
    levert een stroom van maximaal {socket:type1:current}A", + "de": "
    Typ 1 ohne Kabel (J1772)
    liefert maximal {socket:type1:current} A" }, "freeform": { "key": "socket:type1:current", @@ -1876,7 +2063,8 @@ "if": "socket:type1:current=32 A", "then": { "en": "Type 1 without cable (J1772) outputs at most 32 A", - "nl": "Type 1 zonder kabel (J1772) levert een stroom van maximaal 32 A" + "nl": "Type 1 zonder kabel (J1772) levert een stroom van maximaal 32 A", + "de": "Typ 1 ohne Kabel (J1772) liefert maximal 32 A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1896,11 +2084,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Type 1 without cable (J1772)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Type 1 zonder kabel (J1772)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Type 1 zonder kabel (J1772)
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Typ 1 ohne Kabel (J1772)
    ?" }, "render": { "en": "
    Type 1 without cable (J1772)
    outputs at most {socket:type1:output}", - "nl": "
    Type 1 zonder kabel (J1772)
    levert een vermogen van maximaal {socket:type1:output}" + "nl": "
    Type 1 zonder kabel (J1772)
    levert een vermogen van maximaal {socket:type1:output}", + "de": "
    Typ 1 ohne Kabel (J1772)
    liefert maximal {socket:type1:output}" }, "freeform": { "key": "socket:type1:output", @@ -1910,8 +2100,9 @@ { "if": "socket:type1:output=3.7 kW", "then": { - "en": "Type 1 without cable (J1772) outputs at most 3.7 kW A", - "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 3.7 kW A" + "en": "Type 1 without cable (J1772) outputs at most 3.7 kw A", + "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 3.7 kw A", + "de": "Typ 1 ohne Kabel (J1772) liefert maximal 3,7 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1921,8 +2112,9 @@ { "if": "socket:type1:output=6.6 kW", "then": { - "en": "Type 1 without cable (J1772) outputs at most 6.6 kW A", - "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 6.6 kW A" + "en": "Type 1 without cable (J1772) outputs at most 6.6 kw A", + "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 6.6 kw A", + "de": "Typ 1 ohne Kabel (J1772) liefert maximal 6,6 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1932,8 +2124,9 @@ { "if": "socket:type1:output=7 kW", "then": { - "en": "Type 1 without cable (J1772) outputs at most 7 kW A", - "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 7 kW A" + "en": "Type 1 without cable (J1772) outputs at most 7 kw A", + "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 7 kw A", + "de": "Typ 1 ohne Kabel (J1772) liefert maximal 7 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1943,8 +2136,9 @@ { "if": "socket:type1:output=7.2 kW", "then": { - "en": "Type 1 without cable (J1772) outputs at most 7.2 kW A", - "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 7.2 kW A" + "en": "Type 1 without cable (J1772) outputs at most 7.2 kw A", + "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 7.2 kw A", + "de": "Typ 1 ohne Kabel (J1772) liefert maximal 7,2 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -1964,11 +2158,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Type 1 CCS (aka Type 1 Combo)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    " + "nl": "Welke spanning levert de stekker van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    ", + "de": "Welche Spannung bieten die Stecker mit
    Typ 1 CCS (Typ 1 Combo)
    ?" }, "render": { "en": "
    Type 1 CCS (aka Type 1 Combo)
    outputs {socket:type1_combo:voltage} volt", - "nl": "
    Type 1 CCS (ook gekend als Type 1 Combo)
    heeft een spanning van {socket:type1_combo:voltage} volt" + "nl": "
    Type 1 CCS (ook gekend als Type 1 Combo)
    heeft een spanning van {socket:type1_combo:voltage} volt", + "de": "
    Typ 1 CCS (Typ 1 Combo)
    liefert {socket:type1_combo:voltage} Volt" }, "freeform": { "key": "socket:type1_combo:voltage", @@ -1979,7 +2175,8 @@ "if": "socket:type1_combo:voltage=400 V", "then": { "en": "Type 1 CCS (aka Type 1 Combo) outputs 400 volt", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) heeft een spanning van 400 volt" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) heeft een spanning van 400 volt", + "de": "Typ 1 CCS (Typ 1 Combo) liefert 400 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -1990,7 +2187,8 @@ "if": "socket:type1_combo:voltage=1000 V", "then": { "en": "Type 1 CCS (aka Type 1 Combo) outputs 1000 volt", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) heeft een spanning van 1000 volt" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) heeft een spanning van 1000 volt", + "de": "Typ 1 CCS (Typ 1 Combo) liefert 1000 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2010,11 +2208,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Type 1 CCS (aka Type 1 Combo)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    ?" + "nl": "Welke stroom levert de stekker van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    ?", + "de": "Welche Stromstärke liefern die Stecker mit
    Typ 1 CCS (Typ 1 Combo)
    ?" }, "render": { "en": "
    Type 1 CCS (aka Type 1 Combo)
    outputs at most {socket:type1_combo:current}A", - "nl": "
    Type 1 CCS (ook gekend als Type 1 Combo)
    levert een stroom van maximaal {socket:type1_combo:current}A" + "nl": "
    Type 1 CCS (ook gekend als Type 1 Combo)
    levert een stroom van maximaal {socket:type1_combo:current}A", + "de": "
    Typ 1 CCS (Typ 1 Combo)
    liefert maximal {socket:type1_combo:current} A" }, "freeform": { "key": "socket:type1_combo:current", @@ -2025,7 +2225,8 @@ "if": "socket:type1_combo:current=50 A", "then": { "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 50 A", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een stroom van maximaal 50 A" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een stroom van maximaal 50 A", + "de": "Typ 1 CCS (Typ 1 Combo) liefert maximal 50 A" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2036,7 +2237,8 @@ "if": "socket:type1_combo:current=125 A", "then": { "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 125 A", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een stroom van maximaal 125 A" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een stroom van maximaal 125 A", + "de": "Typ 1 CCS (Typ 1 Combo) liefert maximal 125 A" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2056,11 +2258,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Type 1 CCS (aka Type 1 Combo)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Type 1 CCS (ook gekend als Type 1 Combo)
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Typ 1 CCS (Typ 1 Combo)
    ?" }, "render": { "en": "
    Type 1 CCS (aka Type 1 Combo)
    outputs at most {socket:type1_combo:output}", - "nl": "
    Type 1 CCS (ook gekend als Type 1 Combo)
    levert een vermogen van maximaal {socket:type1_combo:output}" + "nl": "
    Type 1 CCS (ook gekend als Type 1 Combo)
    levert een vermogen van maximaal {socket:type1_combo:output}", + "de": "
    Typ 1 CCS (Typ 1 Combo)
    liefert maximal {socket:type1_combo:output}" }, "freeform": { "key": "socket:type1_combo:output", @@ -2070,8 +2274,9 @@ { "if": "socket:type1_combo:output=50 kW", "then": { - "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 50 kW A", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 50 kW A" + "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 50 kw A", + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 50 kw A", + "de": "Typ 1 CCS (Typ 1 Combo) liefert maximal 50 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2081,8 +2286,9 @@ { "if": "socket:type1_combo:output=62.5 kW", "then": { - "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 62.5 kW A", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 62.5 kW A" + "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 62.5 kw A", + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 62.5 kw A", + "de": "Typ 1 CCS (Typ 1 Combo) liefert maximal 62,5 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2092,8 +2298,9 @@ { "if": "socket:type1_combo:output=150 kW", "then": { - "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 150 kW A", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 150 kW A" + "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 150 kw A", + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 150 kw A", + "de": "Typ 1 CCS (Typ 1 Combo) liefert maximal 150 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2103,8 +2310,9 @@ { "if": "socket:type1_combo:output=350 kW", "then": { - "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 350 kW A", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 350 kW A" + "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 350 kw A", + "nl": "Type 1 CCS (ook gekend als Type 1 Combo) levert een vermogen van maximaal 350 kw A", + "de": "Typ 1 CCS (Typ 1 Combo) liefert maximal 350 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -2124,11 +2332,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Tesla Supercharger
    offer?", - "nl": "Welke spanning levert de stekker van type
    Tesla Supercharger
    " + "nl": "Welke spanning levert de stekker van type
    Tesla Supercharger
    ", + "de": "Welche Spannung bieten die Stecker mit
    Tesla Supercharger
    ?" }, "render": { "en": "
    Tesla Supercharger
    outputs {socket:tesla_supercharger:voltage} volt", - "nl": "
    Tesla Supercharger
    heeft een spanning van {socket:tesla_supercharger:voltage} volt" + "nl": "
    Tesla Supercharger
    heeft een spanning van {socket:tesla_supercharger:voltage} volt", + "de": "
    Tesla Supercharger
    liefert {socket:tesla_supercharger:voltage} Volt" }, "freeform": { "key": "socket:tesla_supercharger:voltage", @@ -2139,7 +2349,8 @@ "if": "socket:tesla_supercharger:voltage=480 V", "then": { "en": "Tesla Supercharger outputs 480 volt", - "nl": "Tesla Supercharger heeft een spanning van 480 volt" + "nl": "Tesla Supercharger heeft een spanning van 480 volt", + "de": "Tesla Supercharger liefert 480 Volt" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2159,11 +2370,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Tesla Supercharger
    offer?", - "nl": "Welke stroom levert de stekker van type
    Tesla Supercharger
    ?" + "nl": "Welke stroom levert de stekker van type
    Tesla Supercharger
    ?", + "de": "Welche Stromstärke liefern die Stecker mit
    Tesla Supercharger
    ?" }, "render": { "en": "
    Tesla Supercharger
    outputs at most {socket:tesla_supercharger:current}A", - "nl": "
    Tesla Supercharger
    levert een stroom van maximaal {socket:tesla_supercharger:current}A" + "nl": "
    Tesla Supercharger
    levert een stroom van maximaal {socket:tesla_supercharger:current}A", + "de": "
    Tesla Supercharger
    liefert maximal {socket:tesla_supercharger:current} A" }, "freeform": { "key": "socket:tesla_supercharger:current", @@ -2174,7 +2387,8 @@ "if": "socket:tesla_supercharger:current=125 A", "then": { "en": "Tesla Supercharger outputs at most 125 A", - "nl": "Tesla Supercharger levert een stroom van maximaal 125 A" + "nl": "Tesla Supercharger levert een stroom van maximaal 125 A", + "de": "Tesla Supercharger liefert maximal 125 A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2185,7 +2399,8 @@ "if": "socket:tesla_supercharger:current=350 A", "then": { "en": "Tesla Supercharger outputs at most 350 A", - "nl": "Tesla Supercharger levert een stroom van maximaal 350 A" + "nl": "Tesla Supercharger levert een stroom van maximaal 350 A", + "de": "Tesla Supercharger liefert maximal 350 A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2205,11 +2420,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Tesla Supercharger
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Tesla Supercharger
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Tesla Supercharger
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Tesla Supercharger
    ?" }, "render": { "en": "
    Tesla Supercharger
    outputs at most {socket:tesla_supercharger:output}", - "nl": "
    Tesla Supercharger
    levert een vermogen van maximaal {socket:tesla_supercharger:output}" + "nl": "
    Tesla Supercharger
    levert een vermogen van maximaal {socket:tesla_supercharger:output}", + "de": "
    Tesla Supercharger
    liefert maximal {socket:tesla_supercharger:output}" }, "freeform": { "key": "socket:tesla_supercharger:output", @@ -2219,8 +2436,9 @@ { "if": "socket:tesla_supercharger:output=120 kW", "then": { - "en": "Tesla Supercharger outputs at most 120 kW A", - "nl": "Tesla Supercharger levert een vermogen van maximaal 120 kW A" + "en": "Tesla Supercharger outputs at most 120 kw A", + "nl": "Tesla Supercharger levert een vermogen van maximaal 120 kw A", + "de": "Tesla Supercharger liefert maximal 120 kw A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2230,8 +2448,9 @@ { "if": "socket:tesla_supercharger:output=150 kW", "then": { - "en": "Tesla Supercharger outputs at most 150 kW A", - "nl": "Tesla Supercharger levert een vermogen van maximaal 150 kW A" + "en": "Tesla Supercharger outputs at most 150 kw A", + "nl": "Tesla Supercharger levert een vermogen van maximaal 150 kw A", + "de": "Tesla Supercharger liefert maximal 150 kw A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2241,8 +2460,9 @@ { "if": "socket:tesla_supercharger:output=250 kW", "then": { - "en": "Tesla Supercharger outputs at most 250 kW A", - "nl": "Tesla Supercharger levert een vermogen van maximaal 250 kW A" + "en": "Tesla Supercharger outputs at most 250 kw A", + "nl": "Tesla Supercharger levert een vermogen van maximaal 250 kw A", + "de": "Tesla Supercharger liefert maximal 250 kW A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2262,11 +2482,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Type 2 (mennekes)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Type 2 (mennekes)
    " + "nl": "Welke spanning levert de stekker van type
    Type 2 (mennekes)
    ", + "de": "Welche Spannung liefern die Stecker mit
    Typ 2 (Mennekes)
    ?" }, "render": { "en": "
    Type 2 (mennekes)
    outputs {socket:type2:voltage} volt", - "nl": "
    Type 2 (mennekes)
    heeft een spanning van {socket:type2:voltage} volt" + "nl": "
    Type 2 (mennekes)
    heeft een spanning van {socket:type2:voltage} volt", + "de": "
    Typ 2 (Mennekes)
    liefert {socket:type2:voltage} Volt" }, "freeform": { "key": "socket:type2:voltage", @@ -2277,7 +2499,8 @@ "if": "socket:type2:voltage=230 V", "then": { "en": "Type 2 (mennekes) outputs 230 volt", - "nl": "Type 2 (mennekes) heeft een spanning van 230 volt" + "nl": "Type 2 (mennekes) heeft een spanning van 230 volt", + "de": "Typ 2 (Mennekes) liefert 230 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -2288,7 +2511,8 @@ "if": "socket:type2:voltage=400 V", "then": { "en": "Type 2 (mennekes) outputs 400 volt", - "nl": "Type 2 (mennekes) heeft een spanning van 400 volt" + "nl": "Type 2 (mennekes) heeft een spanning van 400 volt", + "de": "Typ 2 (Mennekes) liefert 400 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -2308,11 +2532,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Type 2 (mennekes)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Type 2 (mennekes)
    ?" + "nl": "Welke stroom levert de stekker van type
    Type 2 (mennekes)
    ?", + "de": "Welche Stromstärke liefern die Stecker mit
    Typ 2 (Mennekes)
    ?" }, "render": { "en": "
    Type 2 (mennekes)
    outputs at most {socket:type2:current}A", - "nl": "
    Type 2 (mennekes)
    levert een stroom van maximaal {socket:type2:current}A" + "nl": "
    Type 2 (mennekes)
    levert een stroom van maximaal {socket:type2:current}A", + "de": "
    Typ 2 (Mennekes)
    liefert maximal {socket:type2:current} A" }, "freeform": { "key": "socket:type2:current", @@ -2323,7 +2549,8 @@ "if": "socket:type2:current=16 A", "then": { "en": "Type 2 (mennekes) outputs at most 16 A", - "nl": "Type 2 (mennekes) levert een stroom van maximaal 16 A" + "nl": "Type 2 (mennekes) levert een stroom van maximaal 16 A", + "de": "Typ 2 (Mennekes) liefert maximal 16 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -2334,7 +2561,8 @@ "if": "socket:type2:current=32 A", "then": { "en": "Type 2 (mennekes) outputs at most 32 A", - "nl": "Type 2 (mennekes) levert een stroom van maximaal 32 A" + "nl": "Type 2 (mennekes) levert een stroom van maximaal 32 A", + "de": "Typ 2 (Mennekes) liefert maximal 32 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -2354,11 +2582,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Type 2 (mennekes)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Type 2 (mennekes)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Type 2 (mennekes)
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Typ 2 (Mennekes)
    ?" }, "render": { "en": "
    Type 2 (mennekes)
    outputs at most {socket:type2:output}", - "nl": "
    Type 2 (mennekes)
    levert een vermogen van maximaal {socket:type2:output}" + "nl": "
    Type 2 (mennekes)
    levert een vermogen van maximaal {socket:type2:output}", + "de": "
    Typ 2 (Mennekes)
    liefert maximal {socket:type2:output}" }, "freeform": { "key": "socket:type2:output", @@ -2368,8 +2598,9 @@ { "if": "socket:type2:output=11 kW", "then": { - "en": "Type 2 (mennekes) outputs at most 11 kW A", - "nl": "Type 2 (mennekes) levert een vermogen van maximaal 11 kW A" + "en": "Type 2 (mennekes) outputs at most 11 kw A", + "nl": "Type 2 (mennekes) levert een vermogen van maximaal 11 kw A", + "de": "Typ 2 (Mennekes) liefert maximal 11 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -2379,8 +2610,9 @@ { "if": "socket:type2:output=22 kW", "then": { - "en": "Type 2 (mennekes) outputs at most 22 kW A", - "nl": "Type 2 (mennekes) levert een vermogen van maximaal 22 kW A" + "en": "Type 2 (mennekes) outputs at most 22 kw A", + "nl": "Type 2 (mennekes) levert een vermogen van maximaal 22 kw A", + "de": "Typ 2 (Mennekes) liefert maximal 22 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -2400,11 +2632,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Type 2 CCS (mennekes)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Type 2 CCS (mennekes)
    " + "nl": "Welke spanning levert de stekker van type
    Type 2 CCS (mennekes)
    ", + "de": "Welche Spannung liefern die Stecker mit
    Typ 2 CCS (Mennekes)
    ?" }, "render": { "en": "
    Type 2 CCS (mennekes)
    outputs {socket:type2_combo:voltage} volt", - "nl": "
    Type 2 CCS (mennekes)
    heeft een spanning van {socket:type2_combo:voltage} volt" + "nl": "
    Type 2 CCS (mennekes)
    heeft een spanning van {socket:type2_combo:voltage} volt", + "de": "
    Typ 2 CCS (Mennekes)
    liefert {socket:type2_combo:voltage} Volt" }, "freeform": { "key": "socket:type2_combo:voltage", @@ -2415,7 +2649,8 @@ "if": "socket:type2_combo:voltage=500 V", "then": { "en": "Type 2 CCS (mennekes) outputs 500 volt", - "nl": "Type 2 CCS (mennekes) heeft een spanning van 500 volt" + "nl": "Type 2 CCS (mennekes) heeft een spanning van 500 volt", + "de": "Typ 2 CCS (Mennekes) liefert 500 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2426,7 +2661,8 @@ "if": "socket:type2_combo:voltage=920 V", "then": { "en": "Type 2 CCS (mennekes) outputs 920 volt", - "nl": "Type 2 CCS (mennekes) heeft een spanning van 920 volt" + "nl": "Type 2 CCS (mennekes) heeft een spanning van 920 volt", + "de": "Typ 2 CCS (Mennekes) liefert 920 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2446,11 +2682,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Type 2 CCS (mennekes)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Type 2 CCS (mennekes)
    ?" + "nl": "Welke stroom levert de stekker van type
    Type 2 CCS (mennekes)
    ?", + "de": "Welche Stromstärke liefern die Stecker mit
    Typ 2 CCS (Mennekes)
    ?" }, "render": { "en": "
    Type 2 CCS (mennekes)
    outputs at most {socket:type2_combo:current}A", - "nl": "
    Type 2 CCS (mennekes)
    levert een stroom van maximaal {socket:type2_combo:current}A" + "nl": "
    Type 2 CCS (mennekes)
    levert een stroom van maximaal {socket:type2_combo:current}A", + "de": "
    Typ 2 CCS (Mennekes)
    liefern maximal {socket:type2_combo:current} A" }, "freeform": { "key": "socket:type2_combo:current", @@ -2461,7 +2699,8 @@ "if": "socket:type2_combo:current=125 A", "then": { "en": "Type 2 CCS (mennekes) outputs at most 125 A", - "nl": "Type 2 CCS (mennekes) levert een stroom van maximaal 125 A" + "nl": "Type 2 CCS (mennekes) levert een stroom van maximaal 125 A", + "de": "Typ 2 CCS (Mennekes) liefert maximal 125 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2472,7 +2711,8 @@ "if": "socket:type2_combo:current=350 A", "then": { "en": "Type 2 CCS (mennekes) outputs at most 350 A", - "nl": "Type 2 CCS (mennekes) levert een stroom van maximaal 350 A" + "nl": "Type 2 CCS (mennekes) levert een stroom van maximaal 350 A", + "de": "Typ 2 CCS (Mennekes) liefert maximal 350 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2492,11 +2732,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Type 2 CCS (mennekes)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Type 2 CCS (mennekes)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Type 2 CCS (mennekes)
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Typ 2 CCS (Mennekes)
    ?" }, "render": { "en": "
    Type 2 CCS (mennekes)
    outputs at most {socket:type2_combo:output}", - "nl": "
    Type 2 CCS (mennekes)
    levert een vermogen van maximaal {socket:type2_combo:output}" + "nl": "
    Type 2 CCS (mennekes)
    levert een vermogen van maximaal {socket:type2_combo:output}", + "de": "
    Typ 2 CCS (Mennekes)
    liefert maximal {socket:type2_combo:output}" }, "freeform": { "key": "socket:type2_combo:output", @@ -2506,8 +2748,9 @@ { "if": "socket:type2_combo:output=50 kW", "then": { - "en": "Type 2 CCS (mennekes) outputs at most 50 kW A", - "nl": "Type 2 CCS (mennekes) levert een vermogen van maximaal 50 kW A" + "en": "Type 2 CCS (mennekes) outputs at most 50 kw A", + "nl": "Type 2 CCS (mennekes) levert een vermogen van maximaal 50 kw A", + "de": "Typ 2 CCS (Mennekes) liefert maximal 50 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2527,11 +2770,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Type 2 with cable (mennekes)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Type 2 met kabel (J1772)
    " + "nl": "Welke spanning levert de stekker van type
    Type 2 met kabel (J1772)
    ", + "de": "Welche Spannung liefern die Stecker mit
    Typ 2 mit Kabel (Mennekes)
    ?" }, "render": { "en": "
    Type 2 with cable (mennekes)
    outputs {socket:type2_cable:voltage} volt", - "nl": "
    Type 2 met kabel (J1772)
    heeft een spanning van {socket:type2_cable:voltage} volt" + "nl": "
    Type 2 met kabel (J1772)
    heeft een spanning van {socket:type2_cable:voltage} volt", + "de": "
    Typ 2 mit Kabel (Mennekes)
    liefert {socket:type2_cable:voltage} Volt" }, "freeform": { "key": "socket:type2_cable:voltage", @@ -2542,7 +2787,8 @@ "if": "socket:type2_cable:voltage=230 V", "then": { "en": "Type 2 with cable (mennekes) outputs 230 volt", - "nl": "Type 2 met kabel (J1772) heeft een spanning van 230 volt" + "nl": "Type 2 met kabel (J1772) heeft een spanning van 230 volt", + "de": "Typ 2 mit Kabel (Mennekes) liefert 230 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2553,7 +2799,8 @@ "if": "socket:type2_cable:voltage=400 V", "then": { "en": "Type 2 with cable (mennekes) outputs 400 volt", - "nl": "Type 2 met kabel (J1772) heeft een spanning van 400 volt" + "nl": "Type 2 met kabel (J1772) heeft een spanning van 400 volt", + "de": "Typ 2 mit Kabel (Mennekes) liefert 400 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2573,11 +2820,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Type 2 with cable (mennekes)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Type 2 met kabel (J1772)
    ?" + "nl": "Welke stroom levert de stekker van type
    Type 2 met kabel (J1772)
    ?", + "de": "Welche Stromstärke liefern die Stecker mit
    Typ 2 mit Kabel (Mennekes)
    ?" }, "render": { "en": "
    Type 2 with cable (mennekes)
    outputs at most {socket:type2_cable:current}A", - "nl": "
    Type 2 met kabel (J1772)
    levert een stroom van maximaal {socket:type2_cable:current}A" + "nl": "
    Type 2 met kabel (J1772)
    levert een stroom van maximaal {socket:type2_cable:current}A", + "de": "
    Typ 2 mit Kabel (Mennekes)
    liefert maximal {socket:type2_cable:current} A" }, "freeform": { "key": "socket:type2_cable:current", @@ -2588,7 +2837,8 @@ "if": "socket:type2_cable:current=16 A", "then": { "en": "Type 2 with cable (mennekes) outputs at most 16 A", - "nl": "Type 2 met kabel (J1772) levert een stroom van maximaal 16 A" + "nl": "Type 2 met kabel (J1772) levert een stroom van maximaal 16 A", + "de": "Typ 2 mit Kabel (Mennekes) liefert maximal 16 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2599,7 +2849,8 @@ "if": "socket:type2_cable:current=32 A", "then": { "en": "Type 2 with cable (mennekes) outputs at most 32 A", - "nl": "Type 2 met kabel (J1772) levert een stroom van maximaal 32 A" + "nl": "Type 2 met kabel (J1772) levert een stroom van maximaal 32 A", + "de": "Typ 2 mit Kabel (Mennekes) liefert maximal 32 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2619,11 +2870,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Type 2 with cable (mennekes)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Type 2 met kabel (J1772)
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Type 2 met kabel (J1772)
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Typ 2 mit Kabel (Mennekes)
    ?" }, "render": { "en": "
    Type 2 with cable (mennekes)
    outputs at most {socket:type2_cable:output}", - "nl": "
    Type 2 met kabel (J1772)
    levert een vermogen van maximaal {socket:type2_cable:output}" + "nl": "
    Type 2 met kabel (J1772)
    levert een vermogen van maximaal {socket:type2_cable:output}", + "de": "
    Typ 2 mit Kabel (Mennekes)
    liefert maximal {socket:type2_cable:output}" }, "freeform": { "key": "socket:type2_cable:output", @@ -2633,8 +2886,9 @@ { "if": "socket:type2_cable:output=11 kW", "then": { - "en": "Type 2 with cable (mennekes) outputs at most 11 kW A", - "nl": "Type 2 met kabel (J1772) levert een vermogen van maximaal 11 kW A" + "en": "Type 2 with cable (mennekes) outputs at most 11 kw A", + "nl": "Type 2 met kabel (J1772) levert een vermogen van maximaal 11 kw A", + "de": "Typ 2 mit Kabel (Mennekes) liefert maximal 11 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2644,8 +2898,9 @@ { "if": "socket:type2_cable:output=22 kW", "then": { - "en": "Type 2 with cable (mennekes) outputs at most 22 kW A", - "nl": "Type 2 met kabel (J1772) levert een vermogen van maximaal 22 kW A" + "en": "Type 2 with cable (mennekes) outputs at most 22 kw A", + "nl": "Type 2 met kabel (J1772) levert een vermogen van maximaal 22 kw A", + "de": "Typ 2 mit Kabel (Mennekes) liefert maximal 22 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2664,12 +2919,14 @@ "id": "voltage-10", "group": "technical", "question": { - "en": "What voltage do the plugs with
    Tesla Supercharger CCS (a branded type2_css)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    " + "en": "What voltage do the plugs with
    Tesla Supercharger CCS (a branded Type 2 CSS)
    offer?", + "nl": "Welke spanning levert de stekker van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ", + "de": "Welche Spannung bieten die
    Tesla Supercharger CCS (Typ 2 CSS von Tesla)
    ?" }, "render": { - "en": "
    Tesla Supercharger CCS (a branded type2_css)
    outputs {socket:tesla_supercharger_ccs:voltage} volt", - "nl": "
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    heeft een spanning van {socket:tesla_supercharger_ccs:voltage} volt" + "en": "
    Tesla Supercharger CCS (a branded Type 2 CSS)
    outputs {socket:tesla_supercharger_ccs:voltage} volt", + "nl": "
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    heeft een spanning van {socket:tesla_supercharger_ccs:voltage} volt", + "de": "
    Tesla Supercharger CCS (Typ 2 CSS von Tesla)
    liefert {socket:tesla_supercharger_ccs:voltage} Volt" }, "freeform": { "key": "socket:tesla_supercharger_ccs:voltage", @@ -2679,8 +2936,9 @@ { "if": "socket:tesla_supercharger_ccs:voltage=500 V", "then": { - "en": "Tesla Supercharger CCS (a branded type2_css) outputs 500 volt", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) heeft een spanning van 500 volt" + "en": "Tesla Supercharger CCS (a branded Type 2 CSS) outputs 500 volt", + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) heeft een spanning van 500 volt", + "de": "Tesla Supercharger CCS (Typ 2 CSS von Tesla) liefert 500 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2690,8 +2948,9 @@ { "if": "socket:tesla_supercharger_ccs:voltage=920 V", "then": { - "en": "Tesla Supercharger CCS (a branded type2_css) outputs 920 volt", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) heeft een spanning van 920 volt" + "en": "Tesla Supercharger CCS (a branded Type 2 CSS) outputs 920 volt", + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) heeft een spanning van 920 volt", + "de": "Tesla Supercharger CCS (Typ 2 CSS von Tesla) liefert 920 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2711,11 +2970,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Tesla Supercharger CCS (a branded type2_css)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ?" + "nl": "Welke stroom levert de stekker van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ?", + "de": "Welche Stromstärke bieten die Anschlüsse mit
    Tesla Supercharger CCS (Typ2 CSS von Tesla)
    ?" }, "render": { "en": "
    Tesla Supercharger CCS (a branded type2_css)
    outputs at most {socket:tesla_supercharger_ccs:current}A", - "nl": "
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    levert een stroom van maximaal {socket:tesla_supercharger_ccs:current}A" + "nl": "
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    levert een stroom van maximaal {socket:tesla_supercharger_ccs:current}A", + "de": "
    Tesla Supercharger CCS (Typ 2 CSS)
    liefert maximal {socket:tesla_supercharger_ccs:current} A" }, "freeform": { "key": "socket:tesla_supercharger_ccs:current", @@ -2726,7 +2987,8 @@ "if": "socket:tesla_supercharger_ccs:current=125 A", "then": { "en": "Tesla Supercharger CCS (a branded type2_css) outputs at most 125 A", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) levert een stroom van maximaal 125 A" + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) levert een stroom van maximaal 125 A", + "de": "Tesla Supercharger CCS (Typ 2 CSS) liefert maximal 125 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2737,7 +2999,8 @@ "if": "socket:tesla_supercharger_ccs:current=350 A", "then": { "en": "Tesla Supercharger CCS (a branded type2_css) outputs at most 350 A", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) levert een stroom van maximaal 350 A" + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) levert een stroom van maximaal 350 A", + "de": "Tesla Supercharger CCS (Typ 2 CSS) liefert maximal 350 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2756,12 +3019,14 @@ "id": "power-output-10", "group": "technical", "question": { - "en": "What power output does a single plug of type
    Tesla Supercharger CCS (a branded type2_css)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ?" + "en": "What power output does a single plug of type
    Tesla Supercharger CCS (a branded Type 2 CSS)
    offer?", + "nl": "Welk vermogen levert een enkele stekker van type
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker des Typs
    Tesla Supercharger CCS (Typ 2 CSS von Tesla)
    ?" }, "render": { - "en": "
    Tesla Supercharger CCS (a branded type2_css)
    outputs at most {socket:tesla_supercharger_ccs:output}", - "nl": "
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    levert een vermogen van maximaal {socket:tesla_supercharger_ccs:output}" + "en": "
    Tesla Supercharger CCS (a branded Type 2 CSS)
    outputs at most {socket:tesla_supercharger_ccs:output}", + "nl": "
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    levert een vermogen van maximaal {socket:tesla_supercharger_ccs:output}", + "de": "
    Tesla Supercharger CCS (Typ 2 CSS von Tesla)
    liefert maximal {socket:tesla_supercharger_ccs:output}" }, "freeform": { "key": "socket:tesla_supercharger_ccs:output", @@ -2771,8 +3036,9 @@ { "if": "socket:tesla_supercharger_ccs:output=50 kW", "then": { - "en": "Tesla Supercharger CCS (a branded type2_css) outputs at most 50 kW A", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) levert een vermogen van maximaal 50 kW A" + "en": "Tesla Supercharger CCS (a branded Type 2 CSS) outputs at most 50 kw A", + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo) levert een vermogen van maximaal 50 kw A", + "de": "Tesla Supercharger CCS (Typ 2 CSS von Tesla) liefert maximal 50 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -2791,12 +3057,14 @@ "id": "voltage-11", "group": "technical", "question": { - "en": "What voltage do the plugs with
    Tesla Supercharger (destination)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Tesla Supercharger (destination)
    " + "en": "What voltage do the plugs with
    Tesla Supercharger (Destination)
    offer?", + "nl": "Welke spanning levert de stekker van type
    Tesla Supercharger (destination)
    ", + "de": "Welche Spannung bieten die
    Tesla Supercharger (Destination)
    ?" }, "render": { - "en": "
    Tesla Supercharger (destination)
    outputs {socket:tesla_destination:voltage} volt", - "nl": "
    Tesla Supercharger (destination)
    heeft een spanning van {socket:tesla_destination:voltage} volt" + "en": "
    Tesla Supercharger (Destination)
    outputs {socket:tesla_destination:voltage} volt", + "nl": "
    Tesla Supercharger (destination)
    heeft een spanning van {socket:tesla_destination:voltage} volt", + "de": "
    Tesla Supercharger (Destination)
    liefert {socket:tesla_destination:voltage} Volt" }, "freeform": { "key": "socket:tesla_destination:voltage", @@ -2806,8 +3074,9 @@ { "if": "socket:tesla_destination:voltage=480 V", "then": { - "en": "Tesla Supercharger (destination) outputs 480 volt", - "nl": "Tesla Supercharger (destination) heeft een spanning van 480 volt" + "en": "Tesla Supercharger (Destination) outputs 480 volt", + "nl": "Tesla Supercharger (destination) heeft een spanning van 480 volt", + "de": "Tesla Supercharger (Destination) liefert 480 Volt" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2826,12 +3095,14 @@ "id": "current-11", "group": "technical", "question": { - "en": "What current do the plugs with
    Tesla Supercharger (destination)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Tesla Supercharger (destination)
    ?" + "en": "What current do the plugs with
    Tesla Supercharger (Destination)
    offer?", + "nl": "Welke stroom levert de stekker van type
    Tesla Supercharger (destination)
    ?", + "de": "Welche Stromstärke liefern die Anschlüsse mit
    Tesla Supercharger (Destination)
    ?" }, "render": { - "en": "
    Tesla Supercharger (destination)
    outputs at most {socket:tesla_destination:current}A", - "nl": "
    Tesla Supercharger (destination)
    levert een stroom van maximaal {socket:tesla_destination:current}A" + "en": "
    Tesla Supercharger (Destination)
    outputs at most {socket:tesla_destination:current}A", + "nl": "
    Tesla Supercharger (destination)
    levert een stroom van maximaal {socket:tesla_destination:current}A", + "de": "
    Tesla Supercharger (Destination)
    liefert maximal {socket:tesla_destination:current} A" }, "freeform": { "key": "socket:tesla_destination:current", @@ -2841,8 +3112,9 @@ { "if": "socket:tesla_destination:current=125 A", "then": { - "en": "Tesla Supercharger (destination) outputs at most 125 A", - "nl": "Tesla Supercharger (destination) levert een stroom van maximaal 125 A" + "en": "Tesla Supercharger (Destination) outputs at most 125 A", + "nl": "Tesla Supercharger (destination) levert een stroom van maximaal 125 A", + "de": "Tesla Supercharger (Destination) liefert maximal 125 A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2852,8 +3124,9 @@ { "if": "socket:tesla_destination:current=350 A", "then": { - "en": "Tesla Supercharger (destination) outputs at most 350 A", - "nl": "Tesla Supercharger (destination) levert een stroom van maximaal 350 A" + "en": "Tesla Supercharger (Destination) outputs at most 350 A", + "nl": "Tesla Supercharger (destination) levert een stroom van maximaal 350 A", + "de": "Tesla Supercharger (Destination) liefert maximal 350 A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2872,12 +3145,14 @@ "id": "power-output-11", "group": "technical", "question": { - "en": "What power output does a single plug of type
    Tesla Supercharger (destination)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Tesla Supercharger (destination)
    ?" + "en": "What power output does a single plug of type
    Tesla Supercharger (Destination)
    offer?", + "nl": "Welk vermogen levert een enkele stekker van type
    Tesla Supercharger (destination)
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker des Typs
    Tesla Supercharger (Destination)
    ?" }, "render": { - "en": "
    Tesla Supercharger (destination)
    outputs at most {socket:tesla_destination:output}", - "nl": "
    Tesla Supercharger (destination)
    levert een vermogen van maximaal {socket:tesla_destination:output}" + "en": "
    Tesla Supercharger (Destination)
    outputs at most {socket:tesla_destination:output}", + "nl": "
    Tesla Supercharger (destination)
    levert een vermogen van maximaal {socket:tesla_destination:output}", + "de": "
    Tesla Supercharger (Destination)
    liefert maximal {socket:tesla_destination:output}" }, "freeform": { "key": "socket:tesla_destination:output", @@ -2887,8 +3162,9 @@ { "if": "socket:tesla_destination:output=120 kW", "then": { - "en": "Tesla Supercharger (destination) outputs at most 120 kW A", - "nl": "Tesla Supercharger (destination) levert een vermogen van maximaal 120 kW A" + "en": "Tesla Supercharger (Destination) outputs at most 120 kw A", + "nl": "Tesla Supercharger (destination) levert een vermogen van maximaal 120 kw A", + "de": "Tesla Supercharger (Destination) liefert maximal 120 kw A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2898,8 +3174,9 @@ { "if": "socket:tesla_destination:output=150 kW", "then": { - "en": "Tesla Supercharger (destination) outputs at most 150 kW A", - "nl": "Tesla Supercharger (destination) levert een vermogen van maximaal 150 kW A" + "en": "Tesla Supercharger (Destination) outputs at most 150 kw A", + "nl": "Tesla Supercharger (destination) levert een vermogen van maximaal 150 kw A", + "de": "Tesla Supercharger (Destination) liefert maximal 150 kw A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2909,8 +3186,9 @@ { "if": "socket:tesla_destination:output=250 kW", "then": { - "en": "Tesla Supercharger (destination) outputs at most 250 kW A", - "nl": "Tesla Supercharger (destination) levert een vermogen van maximaal 250 kW A" + "en": "Tesla Supercharger (Destination) outputs at most 250 kw A", + "nl": "Tesla Supercharger (destination) levert een vermogen van maximaal 250 kw A", + "de": "Tesla Supercharger (Destination) liefert maximal 250 kw A" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -2929,12 +3207,14 @@ "id": "voltage-12", "group": "technical", "question": { - "en": "What voltage do the plugs with
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    offer?", - "nl": "Welke spanning levert de stekker van type
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    " + "en": "What voltage do the plugs with
    Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla)
    offer?", + "nl": "Welke spanning levert de stekker van type
    Tesla supercharger (destination). (Een Type 2 met kabel en Tesla-logo)
    ?", + "de": "Welche Spannung bieten die
    Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)
    ?" }, "render": { "en": "
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    outputs {socket:tesla_destination:voltage} volt", - "nl": "
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    heeft een spanning van {socket:tesla_destination:voltage} volt" + "nl": "
    Tesla supercharger (destination). (Een Type 2 met kabel en Tesla-logo)
    heeft een spanning van {socket:tesla_destination:voltage} volt", + "de": "
    Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)
    liefert {socket:tesla_destination:voltage} Volt" }, "freeform": { "key": "socket:tesla_destination:voltage", @@ -2944,8 +3224,9 @@ { "if": "socket:tesla_destination:voltage=230 V", "then": { - "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla) outputs 230 volt", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 230 volt" + "en": "Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla) outputs 230 volt", + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 230 volt", + "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla) liefert 230 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2955,8 +3236,9 @@ { "if": "socket:tesla_destination:voltage=400 V", "then": { - "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla) outputs 400 volt", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 400 volt" + "en": "Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla) outputs 400 volt", + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 400 volt", + "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla) liefert 400 Volt" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -2975,12 +3257,14 @@ "id": "current-12", "group": "technical", "question": { - "en": "What current do the plugs with
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    offer?", - "nl": "Welke stroom levert de stekker van type
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    ?" + "en": "What current do the plugs with
    Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla)
    offer?", + "nl": "Welke stroom levert de stekker van type
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    ?", + "de": "Welche Stromstärke liefern die Stecker mit
    Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)
    ?" }, "render": { - "en": "
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    outputs at most {socket:tesla_destination:current}A", - "nl": "
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    levert een stroom van maximaal {socket:tesla_destination:current}A" + "en": "
    Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla)
    outputs at most {socket:tesla_destination:current}A", + "nl": "
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    levert een stroom van maximaal {socket:tesla_destination:current}A", + "de": "
    Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)
    liefert maximal {socket:tesla_destination:current} A" }, "freeform": { "key": "socket:tesla_destination:current", @@ -2990,8 +3274,9 @@ { "if": "socket:tesla_destination:current=16 A", "then": { - "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla) outputs at most 16 A", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 16 A" + "en": "Tesla Supercharger (Destination) (A Type 2 with cable branded as tesla) outputs at most 16 A", + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 16 A", + "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel) liefert maximal 16 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -3001,8 +3286,9 @@ { "if": "socket:tesla_destination:current=32 A", "then": { - "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla) outputs at most 32 A", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 32 A" + "en": "Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla) outputs at most 32 A", + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 32 A", + "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla) liefert maximal 32 A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -3021,12 +3307,14 @@ "id": "power-output-12", "group": "technical", "question": { - "en": "What power output does a single plug of type
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    ?" + "en": "What power output does a single plug of type
    Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla)
    offer?", + "nl": "Welk vermogen levert een enkele stekker van type
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker des Typs
    Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)
    ?" }, "render": { - "en": "
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    outputs at most {socket:tesla_destination:output}", - "nl": "
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    levert een vermogen van maximaal {socket:tesla_destination:output}" + "en": "
    Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla)
    outputs at most {socket:tesla_destination:output}", + "nl": "
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    levert een vermogen van maximaal {socket:tesla_destination:output}", + "de": "
    Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)
    liefert maximal {socket:tesla_destination:output}" }, "freeform": { "key": "socket:tesla_destination:output", @@ -3036,8 +3324,9 @@ { "if": "socket:tesla_destination:output=11 kW", "then": { - "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla) outputs at most 11 kW A", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een vermogen van maximaal 11 kW A" + "en": "Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla) outputs at most 11 kw A", + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een vermogen van maximaal 11 kw A", + "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla) liefert maximal 11 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -3047,8 +3336,9 @@ { "if": "socket:tesla_destination:output=22 kW", "then": { - "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla) outputs at most 22 kW A", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een vermogen van maximaal 22 kW A" + "en": "Tesla Supercharger (Destination) (A Type 2 with cable branded as Tesla) outputs at most 22 kw A", + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo) levert een vermogen van maximaal 22 kw A", + "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla) liefert maximal 22 kw A" }, "icon": { "path": "./assets/layers/charging_station/Type2_tethered.svg", @@ -3068,11 +3358,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    USB to charge phones and small electronics
    offer?", - "nl": "Welke spanning levert de stekker van type
    USB om GSMs en kleine electronica op te laden
    " + "nl": "Welke spanning levert de stekker van type
    USB om GSMs en kleine electronica op te laden
    ", + "de": "Welche Spannung liefern die Stecker mit
    USB zum Laden von Handys und kleinen Elektrogeräten
    ?" }, "render": { "en": "
    USB to charge phones and small electronics
    outputs {socket:USB-A:voltage} volt", - "nl": "
    USB om GSMs en kleine electronica op te laden
    heeft een spanning van {socket:USB-A:voltage} volt" + "nl": "
    USB om GSMs en kleine electronica op te laden
    heeft een spanning van {socket:USB-A:voltage} volt", + "de": "
    USB zum Aufladen von Telefonen und kleinen Elektrogeräten
    liefert {socket:USB-A:voltage} Volt" }, "freeform": { "key": "socket:USB-A:voltage", @@ -3083,7 +3375,8 @@ "if": "socket:USB-A:voltage=5 V", "then": { "en": "USB to charge phones and small electronics outputs 5 volt", - "nl": "USB om GSMs en kleine electronica op te laden heeft een spanning van 5 volt" + "nl": "USB om GSMs en kleine electronica op te laden heeft een spanning van 5 volt", + "de": "USB zum Aufladen von Handys und kleinen Elektrogeräten liefert 5 Volt" }, "icon": { "path": "./assets/layers/charging_station/usb_port.svg", @@ -3103,11 +3396,15 @@ "group": "technical", "question": { "en": "What current do the plugs with
    USB to charge phones and small electronics
    offer?", - "nl": "Welke stroom levert de stekker van type
    USB om GSMs en kleine electronica op te laden
    ?" + "nl": "Welke stroom levert de stekker van type
    USB om GSMs en kleine electronica op te laden
    ?", + "de": "Welche Stromstärke liefern die Stecker mit
    USB zum Laden von Handys und kleinen Elektrogeräten
    ?", + "es": "¿Qué corriente ofrecen los conectores con
    USB para cargar teléfonos y dispositivos electrónicos pequeños
    ?" }, "render": { "en": "
    USB to charge phones and small electronics
    outputs at most {socket:USB-A:current}A", - "nl": "
    USB om GSMs en kleine electronica op te laden
    levert een stroom van maximaal {socket:USB-A:current}A" + "nl": "
    USB om GSMs en kleine electronica op te laden
    levert een stroom van maximaal {socket:USB-A:current}A", + "de": "
    USB zum Aufladen von Telefonen und kleinen Elektrogeräten
    liefert maximal {socket:USB-A:current} A", + "es": "
    USB para carga teléfonos y dispositivos electrónicos pequeños
    salida de hasta {socket:USB-A:current}A" }, "freeform": { "key": "socket:USB-A:current", @@ -3118,7 +3415,9 @@ "if": "socket:USB-A:current=1 A", "then": { "en": "USB to charge phones and small electronics outputs at most 1 A", - "nl": "USB om GSMs en kleine electronica op te laden levert een stroom van maximaal 1 A" + "nl": "USB om GSMs en kleine electronica op te laden levert een stroom van maximaal 1 A", + "de": "USB zum Laden von Handys und kleinen Elektrogeräten liefert maximal 1 A", + "es": "USB para cargar teléfonos y dispositivos electrónicos pequeños hasta 1 A" }, "icon": { "path": "./assets/layers/charging_station/usb_port.svg", @@ -3129,7 +3428,9 @@ "if": "socket:USB-A:current=2 A", "then": { "en": "USB to charge phones and small electronics outputs at most 2 A", - "nl": "USB om GSMs en kleine electronica op te laden levert een stroom van maximaal 2 A" + "nl": "USB om GSMs en kleine electronica op te laden levert een stroom van maximaal 2 A", + "de": "USB zum Laden von Handys und kleinen Elektrogeräten liefert maximal 2 A", + "es": "USB para cargar teléfonos y dispositivos electrónicos pequeños hasta 1 A" }, "icon": { "path": "./assets/layers/charging_station/usb_port.svg", @@ -3149,11 +3450,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    USB to charge phones and small electronics
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    USB om GSMs en kleine electronica op te laden
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    USB om GSMs en kleine electronica op te laden
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker des Typs
    USB zum Aufladen von Handys und kleinen Elektrogeräten
    ?" }, "render": { "en": "
    USB to charge phones and small electronics
    outputs at most {socket:USB-A:output}", - "nl": "
    USB om GSMs en kleine electronica op te laden
    levert een vermogen van maximaal {socket:USB-A:output}" + "nl": "
    USB om GSMs en kleine electronica op te laden
    levert een vermogen van maximaal {socket:USB-A:output}", + "de": "
    USB zum Aufladen von Telefonen und kleiner Elektrogeräte
    liefert maximal {socket:USB-A:output}" }, "freeform": { "key": "socket:USB-A:output", @@ -3163,8 +3466,9 @@ { "if": "socket:USB-A:output=5W", "then": { - "en": "USB to charge phones and small electronics outputs at most 5W A", - "nl": "USB om GSMs en kleine electronica op te laden levert een vermogen van maximaal 5W A" + "en": "USB to charge phones and small electronics outputs at most 5w A", + "nl": "USB om GSMs en kleine electronica op te laden levert een vermogen van maximaal 5w A", + "de": "USB zum Laden von Handys und kleinen Elektrogeräten liefert maximal 5w A" }, "icon": { "path": "./assets/layers/charging_station/usb_port.svg", @@ -3174,8 +3478,9 @@ { "if": "socket:USB-A:output=10W", "then": { - "en": "USB to charge phones and small electronics outputs at most 10W A", - "nl": "USB om GSMs en kleine electronica op te laden levert een vermogen van maximaal 10W A" + "en": "USB to charge phones and small electronics outputs at most 10w A", + "nl": "USB om GSMs en kleine electronica op te laden levert een vermogen van maximaal 10w A", + "de": "USB zum Laden von Handys und kleinen Elektrogeräten liefert maximal 10w A" }, "icon": { "path": "./assets/layers/charging_station/usb_port.svg", @@ -3195,11 +3500,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Bosch Active Connect with 3 pins and cable
    offer?", - "nl": "Welke spanning levert de stekker van type
    Bosch Active Connect met 3 pinnen aan een kabel
    " + "nl": "Welke spanning levert de stekker van type
    Bosch Active Connect met 3 pinnen aan een kabel
    ", + "de": "Welche Spannung bieten die Stecker mit
    Bosch Active Connect mit 3 Pins und Kabel
    ?" }, "render": { "en": "
    Bosch Active Connect with 3 pins and cable
    outputs {socket:bosch_3pin:voltage} volt", - "nl": "
    Bosch Active Connect met 3 pinnen aan een kabel
    heeft een spanning van {socket:bosch_3pin:voltage} volt" + "nl": "
    Bosch Active Connect met 3 pinnen aan een kabel
    heeft een spanning van {socket:bosch_3pin:voltage} volt", + "de": "
    Bosch Active Connect mit 3 Pins und Kabel
    liefert {socket:bosch_3pin:voltage} Volt" }, "freeform": { "key": "socket:bosch_3pin:voltage", @@ -3218,11 +3525,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Bosch Active Connect with 3 pins and cable
    offer?", - "nl": "Welke stroom levert de stekker van type
    Bosch Active Connect met 3 pinnen aan een kabel
    ?" + "nl": "Welke stroom levert de stekker van type
    Bosch Active Connect met 3 pinnen aan een kabel
    ?", + "de": "Welche Stromstärke liefern die Stecker mit
    Bosch Active Connect mit 3 Pins und Kabel
    ?" }, "render": { "en": "
    Bosch Active Connect with 3 pins and cable
    outputs at most {socket:bosch_3pin:current}A", - "nl": "
    Bosch Active Connect met 3 pinnen aan een kabel
    levert een stroom van maximaal {socket:bosch_3pin:current}A" + "nl": "
    Bosch Active Connect met 3 pinnen aan een kabel
    levert een stroom van maximaal {socket:bosch_3pin:current}A", + "de": "
    Bosch Active Connect mit 3 Pins und Kabel
    liefern maximal {socket:bosch_3pin:current} A" }, "freeform": { "key": "socket:bosch_3pin:current", @@ -3241,11 +3550,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Bosch Active Connect with 3 pins and cable
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Bosch Active Connect met 3 pinnen aan een kabel
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Bosch Active Connect met 3 pinnen aan een kabel
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Bosch Active Connect mit 3 Pins und Kabel
    ?" }, "render": { "en": "
    Bosch Active Connect with 3 pins and cable
    outputs at most {socket:bosch_3pin:output}", - "nl": "
    Bosch Active Connect met 3 pinnen aan een kabel
    levert een vermogen van maximaal {socket:bosch_3pin:output}" + "nl": "
    Bosch Active Connect met 3 pinnen aan een kabel
    levert een vermogen van maximaal {socket:bosch_3pin:output}", + "de": "
    Bosch Active Connect mit 3 Pins und Kabel
    liefert maximal {socket:bosch_3pin:output}" }, "freeform": { "key": "socket:bosch_3pin:output", @@ -3264,11 +3575,13 @@ "group": "technical", "question": { "en": "What voltage do the plugs with
    Bosch Active Connect with 5 pins and cable
    offer?", - "nl": "Welke spanning levert de stekker van type
    Bosch Active Connect met 5 pinnen aan een kabel
    " + "nl": "Welke spanning levert de stekker van type
    Bosch Active Connect met 5 pinnen aan een kabel
    ", + "de": "Welche Spannung liefern die
    Bosch Active Connect mit 5 Pins und Kabel
    ?" }, "render": { "en": "
    Bosch Active Connect with 5 pins and cable
    outputs {socket:bosch_5pin:voltage} volt", - "nl": "
    Bosch Active Connect met 5 pinnen aan een kabel
    heeft een spanning van {socket:bosch_5pin:voltage} volt" + "nl": "
    Bosch Active Connect met 5 pinnen aan een kabel
    heeft een spanning van {socket:bosch_5pin:voltage} volt", + "de": "
    Bosch Active Connect mit 5 Pins und Kabel
    liefert {socket:bosch_5pin:voltage} Volt" }, "freeform": { "key": "socket:bosch_5pin:voltage", @@ -3287,11 +3600,13 @@ "group": "technical", "question": { "en": "What current do the plugs with
    Bosch Active Connect with 5 pins and cable
    offer?", - "nl": "Welke stroom levert de stekker van type
    Bosch Active Connect met 5 pinnen aan een kabel
    ?" + "nl": "Welke stroom levert de stekker van type
    Bosch Active Connect met 5 pinnen aan een kabel
    ?", + "de": "Welche Stromstärke liefern die Stecker mit
    Bosch Active Connect mit 5 Pins und Kabel
    ?" }, "render": { "en": "
    Bosch Active Connect with 5 pins and cable
    outputs at most {socket:bosch_5pin:current}A", - "nl": "
    Bosch Active Connect met 5 pinnen aan een kabel
    levert een stroom van maximaal {socket:bosch_5pin:current}A" + "nl": "
    Bosch Active Connect met 5 pinnen aan een kabel
    levert een stroom van maximaal {socket:bosch_5pin:current}A", + "de": "
    Bosch Active Connect mit 5 Pins und Kabel
    liefern maximal {socket:bosch_5pin:current} A" }, "freeform": { "key": "socket:bosch_5pin:current", @@ -3310,11 +3625,13 @@ "group": "technical", "question": { "en": "What power output does a single plug of type
    Bosch Active Connect with 5 pins and cable
    offer?", - "nl": "Welk vermogen levert een enkele stekker van type
    Bosch Active Connect met 5 pinnen aan een kabel
    ?" + "nl": "Welk vermogen levert een enkele stekker van type
    Bosch Active Connect met 5 pinnen aan een kabel
    ?", + "de": "Welche Leistung bietet ein einzelner Stecker vom Typ
    Bosch Active Connect mit 5 Pins und Kabel
    ?" }, "render": { "en": "
    Bosch Active Connect with 5 pins and cable
    outputs at most {socket:bosch_5pin:output}", - "nl": "
    Bosch Active Connect met 5 pinnen aan een kabel
    levert een vermogen van maximaal {socket:bosch_5pin:output}" + "nl": "
    Bosch Active Connect met 5 pinnen aan een kabel
    levert een vermogen van maximaal {socket:bosch_5pin:output}", + "de": "
    Bosch Active Connect mit 5 Pins und Kabel
    liefert maximal {socket:bosch_5pin:output}" }, "freeform": { "key": "socket:bosch_5pin:output", @@ -3337,14 +3654,18 @@ }, "question": { "en": "When is this charging station opened?", - "nl": "Wanneer is dit oplaadpunt beschikbaar??" + "nl": "Wanneer is dit oplaadpunt beschikbaar??", + "de": "Wann ist diese Ladestation geöffnet?", + "es": "¿Cuándo abre esta estación de carga?" }, "mappings": [ { "if": "opening_hours=24/7", "then": { "en": "24/7 opened (including holidays)", - "nl": "24/7 open - ook tijdens vakanties" + "nl": "24/7 open - ook tijdens vakanties", + "de": "Die Station ist durchgehend geöffnet (einschließlich Feiertage)", + "es": "Abre 24/7 (incluidos días festivos)" } } ] @@ -3353,7 +3674,9 @@ "id": "fee", "question": { "en": "Does one have to pay to use this charging station?", - "nl": "Moet men betalen om dit oplaadpunt te gebruiken?" + "nl": "Moet men betalen om dit oplaadpunt te gebruiken?", + "de": "Muss man für die Nutzung dieser Ladestation bezahlen?", + "es": "¿Hay que pagar para utilizar esta estación de carga?" }, "mappings": [ { @@ -3367,7 +3690,8 @@ }, "then": { "nl": "Gratis te gebruiken (zonder aan te melden)", - "en": "Free to use (without authenticating)" + "en": "Free to use (without authenticating)", + "de": "Die Nutzung ist kostenlos, keine Authentifizierung erforderlich" } }, { @@ -3381,7 +3705,8 @@ }, "then": { "nl": "Gratis te gebruiken, maar aanmelden met een applicatie is verplicht", - "en": "Free to use, but one has to authenticate" + "en": "Free to use, but one has to authenticate", + "de": "Die Nutzung ist kostenlos, Authentifizierung erforderlich" } }, { @@ -3392,7 +3717,8 @@ }, "then": { "nl": "Gratis te gebruiken", - "en": "Free to use" + "en": "Free to use", + "de": "Kostenlose Nutzung" }, "hideInAnswer": true }, @@ -3405,7 +3731,9 @@ }, "then": { "nl": "Betalend te gebruiken, maar gratis voor klanten van het bijhorende hotel/café/ziekenhuis/...", - "en": "Paid use, but free for customers of the hotel/pub/hospital/... who operates the charging station" + "en": "Paid use, but free for customers of the hotel/pub/hospital/… who operates the charging station", + "de": "Die Nutzung ist kostenpflichtig, aber für Kunden des Betreibers der Einrichtung, wie Hotel, Krankenhaus, … kostenlos", + "es": "De pago, pero gratis para clientes del hotel/pub/hostpital... quien opera la estación de carga" } }, { @@ -3417,7 +3745,9 @@ }, "then": { "nl": "Betalend", - "en": "Paid use" + "en": "Paid use", + "de": "Die Nutzung ist kostenpflichtig", + "es": "Uso de pago" } } ] @@ -3426,11 +3756,15 @@ "id": "charge", "question": { "en": "How much does one have to pay to use this charging station?", - "nl": "Hoeveel moet men betalen om dit oplaadpunt te gebruiken?" + "nl": "Hoeveel moet men betalen om dit oplaadpunt te gebruiken?", + "de": "Wie viel muss man für die Nutzung dieser Ladestation bezahlen?", + "es": "¿Cuánto hay que pagar para utilizar esta estación de carga?" }, "render": { "en": "Using this charging station costs {charge}", - "nl": "Dit oplaadpunt gebruiken kost {charge}" + "nl": "Dit oplaadpunt gebruiken kost {charge}", + "de": "Die Nutzung dieser Ladestation kostet {charge}", + "es": "Utilizar esta estación de carga cuesta {charge}" }, "freeform": { "key": "charge" @@ -3454,7 +3788,10 @@ "#": "In some cases, charging is free but one has to be authenticated. We only ask for authentication if fee is no (or unset). By default one sees the questions for either the payment options or the authentication options, but normally not both", "question": { "en": "What kind of authentication is available at the charging station?", - "nl": "Hoe kan men zich aanmelden aan dit oplaadstation?" + "nl": "Hoe kan men zich aanmelden aan dit oplaadstation?", + "de": "Welche Art der Authentifizierung ist an der Ladestation möglich?", + "es": "¿Qué tipo de autenticación está disponible en esta estación de carga?", + "fr": "Quelle sorte d'authentification est disponible à cette station de charge ?" }, "multiAnswer": true, "mappings": [ @@ -3463,7 +3800,10 @@ "ifnot": "authentication:membership_card=no", "then": { "en": "Authentication by a membership card", - "nl": "Aanmelden met een lidkaart is mogelijk" + "nl": "Aanmelden met een lidkaart is mogelijk", + "de": "Authentifizierung per Mitgliedskarte", + "es": "Autenticación mediante tarjeta de membresía", + "fr": "Authentification par carte de membre" } }, { @@ -3471,7 +3811,10 @@ "ifnot": "authentication:app=no", "then": { "en": "Authentication by an app", - "nl": "Aanmelden via een applicatie is mogelijk" + "nl": "Aanmelden via een applicatie is mogelijk", + "de": "Authentifizierung per App", + "es": "Autenticación mediante aplicación", + "fr": "Authentification par une app" } }, { @@ -3479,7 +3822,10 @@ "ifnot": "authentication:phone_call=no", "then": { "en": "Authentication via phone call is available", - "nl": "Aanmelden door te bellen naar een telefoonnummer is mogelijk" + "nl": "Aanmelden door te bellen naar een telefoonnummer is mogelijk", + "de": "Authentifizierung per Anruf ist möglich", + "es": "Autenticación mediante llamada telefónica disponible", + "fr": "Authentification par appel téléphonique est disponible" } }, { @@ -3487,7 +3833,10 @@ "ifnot": "authentication:short_message=no", "then": { "en": "Authentication via SMS is available", - "nl": "Aanmelden via SMS is mogelijk" + "nl": "Aanmelden via SMS is mogelijk", + "de": "Authentifizierung per SMS ist möglich", + "es": "Autenticación mediante SMS disponible", + "fr": "Authentification par SMS est disponible" } }, { @@ -3495,7 +3844,10 @@ "ifnot": "authentication:nfc=no", "then": { "en": "Authentication via NFC is available", - "nl": "Aanmelden via NFC is mogelijk" + "nl": "Aanmelden via NFC is mogelijk", + "de": "Authentifizierung per NFC ist möglich", + "es": "Autenticación mediante NFC disponible", + "fr": "Authentification par NFC est disponible" } }, { @@ -3503,7 +3855,9 @@ "ifnot": "authentication:money_card=no", "then": { "en": "Authentication via Money Card is available", - "nl": "Aanmelden met Money Card is mogelijk" + "nl": "Aanmelden met Money Card is mogelijk", + "de": "Authentifizierung per Geldkarte ist möglich", + "es": "Autenticación mediante Money Card disponible" } }, { @@ -3511,7 +3865,10 @@ "ifnot": "authentication:debit_card=no", "then": { "en": "Authentication via debit card is available", - "nl": "Aanmelden met een betaalkaart is mogelijk" + "nl": "Aanmelden met een betaalkaart is mogelijk", + "de": "Authentifizierung per Kreditkarte ist möglich", + "es": "Autenticación mediante tarjeta de débito disponible", + "fr": "Authentification par carte de débit est disponible" } }, { @@ -3519,7 +3876,10 @@ "ifnot": "authentication:none=no", "then": { "en": "Charging here is (also) possible without authentication", - "nl": "Hier opladen is (ook) mogelijk zonder aan te melden" + "nl": "Hier opladen is (ook) mogelijk zonder aan te melden", + "de": "Das Laden ist hier (auch) ohne Authentifizierung möglich", + "es": "La carga aquí (también) es posible sin autenticación", + "fr": "Charger ici est (aussi) possible sans authentification" } } ], @@ -3534,11 +3894,14 @@ "id": "Auth phone", "render": { "en": "Authenticate by calling or SMS'ing to {authentication:phone_call:number}", - "nl": "Aanmelden door te bellen of te SMS'en naar {authentication:phone_call:number}" + "nl": "Aanmelden door te bellen of te SMS'en naar {authentication:phone_call:number}", + "de": "Authentifizierung durch Anruf oder SMS an {authentication:phone_call:number}" }, "question": { "en": "What's the phone number for authentication call or SMS?", - "nl": "Wat is het telefoonnummer dat men moet bellen of SMS'en om zich aan te melden?" + "nl": "Wat is het telefoonnummer dat men moet bellen of SMS'en om zich aan te melden?", + "de": "Wie lautet die Telefonnummer für den Authentifizierungsanruf oder die SMS?", + "es": "¿Cual es el número de teléfono para la llamada de autenticación o SMS?" }, "freeform": { "key": "authentication:phone_call:number", @@ -3555,21 +3918,27 @@ "id": "maxstay", "question": { "en": "What is the maximum amount of time one is allowed to stay here?", - "nl": "Hoelang mag een voertuig hier blijven staan?" + "nl": "Hoelang mag een voertuig hier blijven staan?", + "de": "Wie lange darf man hier maximal parken?", + "es": "¿Cuál es la máxima cantidad de tiempo que se permite permanecer aquí?" }, "freeform": { "key": "maxstay" }, "render": { "en": "One can stay at most {canonical(maxstay)}", - "nl": "De maximale parkeertijd hier is {canonical(maxstay)}" + "nl": "De maximale parkeertijd hier is {canonical(maxstay)}", + "de": "Die maximale Parkdauer beträgt {canonical(maxstay)}", + "es": "Se puede estar como máximo {canonical(maxstay)}" }, "mappings": [ { "if": "maxstay=unlimited", "then": { "en": "No timelimit on leaving your vehicle here", - "nl": "Geen maximum parkeertijd" + "nl": "Geen maximum parkeertijd", + "de": "Keine Höchstparkdauer", + "es": "No hay límite de tiempo para dejar tu vehículo aquí" } } ], @@ -3586,11 +3955,15 @@ "id": "Network", "render": { "en": "Part of the network {network}", - "nl": "Maakt deel uit van het {network}-netwerk" + "nl": "Maakt deel uit van het {network}-netwerk", + "de": "Teil des Netzwerks {network}", + "es": "Parte de la red {network}" }, "question": { "en": "Is this charging station part of a network?", - "nl": "Is dit oplaadpunt deel van een groter netwerk?" + "nl": "Is dit oplaadpunt deel van een groter netwerk?", + "de": "Ist diese Ladestation Teil eines Netzwerks?", + "es": "¿Esta estación de carga forma parte de una red?" }, "freeform": { "key": "network" @@ -3600,14 +3973,18 @@ "if": "no:network=yes", "then": { "en": "Not part of a bigger network, e.g. because the charging station is maintained by a local business", - "nl": "Maakt geen deel uit van een groter netwerk, een lokale zaak of organisatie beheert dit oplaadpunt" + "nl": "Maakt geen deel uit van een groter netwerk, een lokale zaak of organisatie beheert dit oplaadpunt", + "de": "Nicht Teil eines größeren Netzwerks, z. B. weil die Ladestation von einem lokalen Unternehmen betrieben wird", + "es": "No forma parte de una red más grande, ej. porque la estación de carga la mantiene un negocio local" } }, { "if": "network=none", "then": { "en": "Not part of a bigger network", - "nl": "Maakt geen deel uit van een groter netwerk" + "nl": "Maakt geen deel uit van een groter netwerk", + "de": "Nicht Teil eines größeren Netzwerks", + "es": "No forma parte de una red mayor" }, "hideInAnswer": true }, @@ -3653,11 +4030,15 @@ "id": "Operator", "question": { "en": "Who is the operator of this charging station?", - "nl": "Wie beheert dit oplaadpunt?" + "nl": "Wie beheert dit oplaadpunt?", + "de": "Wer ist der Betreiber dieser Ladestation?", + "es": "¿Quien es la operadora de esta estación de carga?" }, "render": { "en": "This charging station is operated by {operator}", - "nl": "Wordt beheerd door {operator}" + "nl": "Wordt beheerd door {operator}", + "de": "Die Station wird betrieben von {operator}", + "es": "Esta estación de carga la opera {operator}" }, "freeform": { "key": "operator" @@ -3671,7 +4052,9 @@ }, "then": { "en": "Actually, {operator} is the network", - "nl": "Eigenlijk is {operator} het netwerk waarvan het deel uitmaakt" + "nl": "Eigenlijk is {operator} het netwerk waarvan het deel uitmaakt", + "de": "Eigentlich ist {operator} das Netzwerk", + "es": "De hecho, {operator} es la red" }, "addExtraTags": [ "operator=" @@ -3685,11 +4068,15 @@ "id": "phone", "question": { "en": "What number can one call if there is a problem with this charging station?", - "nl": "Wat is het telefoonnummer van de beheerder van dit oplaadpunt?" + "nl": "Wat is het telefoonnummer van de beheerder van dit oplaadpunt?", + "de": "Welche Nummer kann man anrufen, wenn es ein Problem mit dieser Ladestation gibt?", + "es": "¿A qué número se puede llamar si hay un problema con esta estación de carga?" }, "render": { "en": "In case of problems, call {phone}", - "nl": "Bij problemen, bel naar {phone}" + "nl": "Bij problemen, bel naar {phone}", + "de": "Bei Problemen, anrufen unter {phone}", + "es": "En caso de problemas, llama a {phone}" }, "freeform": { "key": "phone", @@ -3700,11 +4087,15 @@ "id": "email", "question": { "en": "What is the email address of the operator?", - "nl": "Wat is het email-adres van de operator?" + "nl": "Wat is het email-adres van de operator?", + "de": "Wie lautet die E-Mail-Adresse des Betreibers?", + "es": "¿Cual es la dirección de correo electrónico de esta operadora?" }, "render": { "en": "In case of problems, send an email to {email}", - "nl": "Bij problemen, email naar {email}" + "nl": "Bij problemen, email naar {email}", + "de": "Bei Problemen senden Sie bitte eine E-Mail an {email}", + "es": "En caso de problemas, envía un correo electrónico a {email}" }, "freeform": { "key": "email", @@ -3715,11 +4106,13 @@ "id": "website", "question": { "en": "What is the website where one can find more information about this charging station?", - "nl": "Wat is de website waar men meer info kan vinden over dit oplaadpunt?" + "nl": "Wat is de website waar men meer info kan vinden over dit oplaadpunt?", + "de": "Auf welcher Webseite kann man weitere Informationen über diese Ladestation finden?" }, "render": { "en": "More info on {website}", - "nl": "Meer informatie op {website}" + "nl": "Meer informatie op {website}", + "de": "Weitere Informationen unter {website}" }, "freeform": { "key": "website", @@ -3731,11 +4124,15 @@ "id": "ref", "question": { "en": "What is the reference number of this charging station?", - "nl": "Wat is het referentienummer van dit oplaadstation?" + "nl": "Wat is het referentienummer van dit oplaadstation?", + "de": "Welche Kennnummer hat die Ladestation?", + "es": "¿Cual es el número de referencia de esta estación de carga?" }, "render": { "en": "Reference number is {ref}", - "nl": "Het referentienummer van dit oplaadpunt is {ref}" + "nl": "Het referentienummer van dit oplaadpunt is {ref}", + "de": "Die Kennziffer ist {ref}", + "es": "El número de referencia es {ref}" }, "freeform": { "key": "ref" @@ -3747,7 +4144,9 @@ "id": "Operational status", "question": { "en": "Is this charging point in use?", - "nl": "Is dit oplaadpunt operationeel?" + "nl": "Is dit oplaadpunt operationeel?", + "de": "Ist die Station in Betrieb?", + "es": "¿Está en uso este punto de carga?" }, "mappings": [ { @@ -3762,7 +4161,9 @@ }, "then": { "en": "This charging station works", - "nl": "Dit oplaadpunt werkt" + "nl": "Dit oplaadpunt werkt", + "de": "Die Station ist in Betrieb", + "es": "Esta estación de carga funciona" } }, { @@ -3777,7 +4178,9 @@ }, "then": { "en": "This charging station is broken", - "nl": "Dit oplaadpunt is kapot" + "nl": "Dit oplaadpunt is kapot", + "de": "Die Station ist defekt", + "es": "Esta estación de carga está rota" } }, { @@ -3792,7 +4195,9 @@ }, "then": { "en": "A charging station is planned here", - "nl": "Hier zal binnenkort een oplaadpunt gebouwd worden" + "nl": "Hier zal binnenkort een oplaadpunt gebouwd worden", + "de": "Die Station ist erst in Planung", + "es": "Una estación de carga está planeada aquí" } }, { @@ -3807,7 +4212,9 @@ }, "then": { "en": "A charging station is constructed here", - "nl": "Hier wordt op dit moment een oplaadpunt gebouwd" + "nl": "Hier wordt op dit moment een oplaadpunt gebouwd", + "de": "Die Station ist aktuell im Bau", + "es": "Una estación de carga está construida aquí" } }, { @@ -3822,7 +4229,9 @@ }, "then": { "en": "This charging station has beed permanently disabled and is not in use anymore but is still visible", - "nl": "Dit oplaadpunt is niet meer in gebruik maar is wel nog aanwezig" + "nl": "Dit oplaadpunt is niet meer in gebruik maar is wel nog aanwezig", + "de": "Die Station ist dauerhaft geschlossen und nicht mehr in Nutzung, aber noch sichtbar", + "es": "Esta estación de carga se ha deshabilitado de forma permanente y ya no está en uso pero todavía es visible" } } ] @@ -3831,21 +4240,27 @@ "id": "Parking:fee", "question": { "en": "Does one have to pay a parking fee while charging?", - "nl": "Moet men parkeergeld betalen tijdens het opladen?" + "nl": "Moet men parkeergeld betalen tijdens het opladen?", + "de": "Muss man während des Ladens eine Parkgebühr bezahlen?", + "es": "¿Hay que pagar una tasa de aparcamiento mientras se carga?" }, "mappings": [ { "if": "parking:fee=no", "then": { "en": "No additional parking cost while charging", - "nl": "Geen extra parkeerkost tijdens het opladen" + "nl": "Geen extra parkeerkost tijdens het opladen", + "de": "Keine zusätzlichen Parkkosten während des Ladens", + "es": "No hay costes de aparcamiento adicionales mientras se carga" } }, { "if": "parking:fee=yes", "then": { "en": "An additional parking fee should be paid while charging", - "nl": "Tijdens het opladen moet er parkeergeld betaald worden" + "nl": "Tijdens het opladen moet er parkeergeld betaald worden", + "de": "Während des Ladens ist eine zusätzliche Parkgebühr zu entrichten", + "es": "Se deberá de pagar una tasa adicional de aparcamiento mientras se carga" } } ], @@ -3867,7 +4282,8 @@ "group": "technical", "render": { "en": "

    Technical questions

    The questions below are very technical. Feel free to ignore them
    {questions}", - "nl": "

    Technische vragen

    De vragen hieronder zijn erg technisch - sla deze over indien je hier geen tijd voor hebt
    {questions}" + "nl": "

    Technische vragen

    De vragen hieronder zijn erg technisch - sla deze over indien je hier geen tijd voor hebt
    {questions}", + "de": "

    Technische Fragen

    Die folgenden Fragen sind sehr technisch. Sie können sie gerne ignorieren
    {questions}" } } ], @@ -3943,8 +4359,10 @@ "socket:typee=1" ], "title": { - "en": "charging station for electrical bikes with a normal european wall plug (meant to charge electrical bikes)", - "nl": "oplaadpunt voor elektrische fietsen" + "en": "a charging station for electrical bikes with a normal european wall plug (meant to charge electrical bikes)", + "nl": "een oplaadpunt voor elektrische fietsen met een gewoon Europees stopcontact (speciaal bedoeld voor fietsen)", + "de": "eine Ladestation für Elektrofahrräder mit einer normalen europäischen Steckdose (zum Laden von Elektrofahrrädern)", + "es": "una estación de carga para bicicletas eléctricas con un enchufe de pared europeo normal (pensado para cargar bicicletas eléctricas)" }, "preciseInput": { "preferredBackground": "map" @@ -3957,8 +4375,10 @@ "bicycle=no" ], "title": { - "en": "charging station for cars", - "nl": "oplaadstation voor elektrische auto's" + "en": "a charging station for cars", + "nl": "een oplaadstation voor elektrische auto's", + "de": "eine ladestation für e-bikes", + "es": "una estación de carga para coches" }, "preciseInput": { "preferredBackground": "map" @@ -3972,20 +4392,32 @@ { "question": { "en": "All vehicle types", - "nl": "Alle voertuigen" + "nl": "Alle voertuigen", + "da": "Alle køretøjstyper", + "de": "Ladestationen für alle Fahrzeugtypen", + "es": "Todo tipo de vehículos", + "fr": "Tout type de véhicule" } }, { "question": { "en": "Charging station for bicycles", - "nl": "Oplaadpunten voor fietsen" + "nl": "Oplaadpunten voor fietsen", + "da": "Ladestation til cykler", + "de": "Ladestationen für Fahrräder", + "es": "Estación de carga para bicicletas", + "fr": "Station de charge pour vélos" }, "osmTags": "bicycle=yes" }, { "question": { "en": "Charging station for cars", - "nl": "Oplaadpunten voor auto's" + "nl": "Oplaadpunten voor auto's", + "da": "Ladestation til biler", + "de": "Ladestationen für Autos", + "es": "Estación de carga para coches", + "fr": "Station de charge pour automobiles" }, "osmTags": { "or": [ @@ -4002,7 +4434,10 @@ { "question": { "en": "Only working charging stations", - "nl": "Enkel werkende oplaadpunten" + "nl": "Enkel werkende oplaadpunten", + "da": "Kun fungerende ladestationer", + "de": "Nur Ladestationen in Betrieb", + "es": "Solo estaciones de carga funcionales" }, "osmTags": { "and": [ @@ -4019,118 +4454,152 @@ { "question": { "en": "All connectors", - "nl": "Alle types" + "nl": "Alle types", + "ca": "Tots els connectors", + "de": "Alle Anschlüsse", + "es": "Todos los conectores" } }, { "question": { "en": "Has a
    Schuko wall plug without ground pin (CEE7/4 type F)
    connector", - "nl": "Heeft een
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    " + "nl": "Heeft een
    Schuko stekker zonder aardingspin (CEE7/4 type F)
    ", + "de": "Verfügt über einen
    Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
    " }, "osmTags": "socket:schuko~*" }, { "question": { "en": "Has a
    European wall plug with ground pin (CEE7/4 type E)
    connector", - "nl": "Heeft een
    Europese stekker met aardingspin (CEE7/4 type E)
    " + "nl": "Heeft een
    Europese stekker met aardingspin (CEE7/4 type E)
    ", + "de": "Verfügt über einen
    europäischen Netzstecker mit Erdungsstift (CEE7/4 Typ E)
    Anschluss", + "es": "Tiene un conector
    enchufe de pared Europeo con un pin de tierra (CEE7/4 tipo E
    " }, "osmTags": "socket:typee~*" }, { "question": { "en": "Has a
    Chademo
    connector", - "nl": "Heeft een
    Chademo
    " + "nl": "Heeft een
    Chademo
    ", + "de": "Verfügt über einen
    Chademo
    Stecker", + "es": "Tiene un conector
    Chademo
    " }, "osmTags": "socket:chademo~*" }, { "question": { "en": "Has a
    Type 1 with cable (J1772)
    connector", - "nl": "Heeft een
    Type 1 met kabel (J1772)
    " + "nl": "Heeft een
    Type 1 met kabel (J1772)
    ", + "de": "Verfügt über einen
    Typ 1 (J1772)
    Stecker mit Kabel", + "es": "Tiene un conector de
    Tipo 1 con cable (J1772)
    " }, "osmTags": "socket:type1_cable~*" }, { "question": { - "en": "Has a
    Type 1 without cable (J1772)
    connector", - "nl": "Heeft een
    Type 1 zonder kabel (J1772)
    " + "en": "Has a
    Type 1 without cable (J1772)
    connector", + "nl": "Heeft een
    Type 1 zonder kabel (J1772)
    ", + "de": "Verfügt über einen
    Typ 1 (J1772)Stecker ohne Kabel
    ", + "es": "Tiene un conector de
    Tipo 1 sin cable (J1772)
    " }, "osmTags": "socket:type1~*" }, { "question": { - "en": "Has a
    Type 1 CCS (aka Type 1 Combo)
    connector", - "nl": "Heeft een
    Type 1 CCS (ook gekend als Type 1 Combo)
    " + "en": "Has a
    Type 1 CCS (aka Type 1 Combo)
    connector", + "nl": "Heeft een
    Type 1 CCS (ook gekend als Type 1 Combo)
    ", + "de": "Verfügt über einen
    Typ 1 CCS (Typ 1 Combo)
    Stecker", + "es": "Tiene un conector
    Tipo 1 CCS (Combo Tipo 1)
    " }, "osmTags": "socket:type1_combo~*" }, { "question": { "en": "Has a
    Tesla Supercharger
    connector", - "nl": "Heeft een
    Tesla Supercharger
    " + "nl": "Heeft een
    Tesla Supercharger
    ", + "de": "Verfügt über einen
    Tesla Supercharger
    Stecker", + "es": "Tiene un conector
    Tesla Supercharger
    " }, "osmTags": "socket:tesla_supercharger~*" }, { "question": { "en": "Has a
    Type 2 (mennekes)
    connector", - "nl": "Heeft een
    Type 2 (mennekes)
    " + "nl": "Heeft een
    Type 2 (mennekes)
    ", + "de": "Hat einen
    Typ 2 (Mennekes)
    Anschluss", + "es": "Tiene un conector
    Tipo 2 (mennekes)
    " }, "osmTags": "socket:type2~*" }, { "question": { "en": "Has a
    Type 2 CCS (mennekes)
    connector", - "nl": "Heeft een
    Type 2 CCS (mennekes)
    " + "nl": "Heeft een
    Type 2 CCS (mennekes)
    ", + "de": "Hat einen
    Typ 2 CCS (Mennekes)
    Anschluss", + "es": "Tiene un conector
    Tipo 2 CCS (mennekes
    " }, "osmTags": "socket:type2_combo~*" }, { "question": { "en": "Has a
    Type 2 with cable (mennekes)
    connector", - "nl": "Heeft een
    Type 2 met kabel (J1772)
    " + "nl": "Heeft een
    Type 2 met kabel (J1772)
    ", + "de": "Hat einen
    Typ 2 (Mennekes)
    Anschluss mit Kabel", + "es": "Tiene un conector
    Tipo 2 con cable (mennekes)
    " }, "osmTags": "socket:type2_cable~*" }, { "question": { "en": "Has a
    Tesla Supercharger CCS (a branded type2_css)
    connector", - "nl": "Heeft een
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    " + "nl": "Heeft een
    Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
    ", + "de": "Hat einen
    Tesla Supercharger CCS (Typ 2 CSS vonTesla)
    Anschluss", + "es": "Tiene un conector
    Tesla Supercharger CCS (un tipo2_css de marca)
    " }, "osmTags": "socket:tesla_supercharger_ccs~*" }, { "question": { "en": "Has a
    Tesla Supercharger (destination)
    connector", - "nl": "Heeft een
    Tesla Supercharger (destination)
    " + "nl": "Heeft een
    Tesla Supercharger (destination)
    ", + "de": "Hat einen
    Tesla Supercharger (Destination)
    Anschluss", + "es": "Tiene un conector
    Tesla Supercharger (destination)
    " }, "osmTags": "socket:tesla_destination~*" }, { "question": { - "en": "Has a
    Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
    connector", - "nl": "Heeft een
    Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
    " + "en": "Has a
    Tesla Supercharger (Destination) (A Type 2 with cable branded as tesla)
    connector", + "nl": "Heeft een
    Tesla supercharger (destination) (Een Type 2 met kabel en Tesla-logo)
    ", + "de": "Hat einen
    Tesla Supercharger (Destination) (Typ 2 von Tesla)
    Anschluss mit Kabel", + "es": "Tiene un conector
    Tesla Supercharger (Destination) (Tipo2 A con un cable de marca tesla)
    " }, "osmTags": "socket:tesla_destination~*" }, { "question": { "en": "Has a
    USB to charge phones and small electronics
    connector", - "nl": "Heeft een
    USB om GSMs en kleine electronica op te laden
    " + "nl": "Heeft een
    USB om GSMs en kleine electronica op te laden
    ", + "de": "Hat einen
    USB-Anschluss zum Aufladen von Telefonen und kleinen Elektrogeräten
    ", + "es": "Tiene un conector
    USB para cargar teléfonos y dispositivos electrónicos pequeños
    " }, "osmTags": "socket:USB-A~*" }, { "question": { "en": "Has a
    Bosch Active Connect with 3 pins and cable
    connector", - "nl": "Heeft een
    Bosch Active Connect met 3 pinnen aan een kabel
    " + "nl": "Heeft een
    Bosch Active Connect met 3 pinnen aan een kabel
    ", + "de": "Hat einen
    Bosch Active Connect Anschluss mit 3 Pins
    und Kabel", + "es": "Tiene un conector
    Bosch Active Connect con 3 pines y cable
    " }, "osmTags": "socket:bosch_3pin~*" }, { "question": { "en": "Has a
    Bosch Active Connect with 5 pins and cable
    connector", - "nl": "Heeft een
    Bosch Active Connect met 5 pinnen aan een kabel
    " + "nl": "Heeft een
    Bosch Active Connect met 5 pinnen aan een kabel
    ", + "de": "Hat einen
    Bosch Active Connect Anschluss mit 5 Pins
    und Kabel", + "es": "Tiene un conector
    Bosch Active Connect con 5 pines y cable
    " }, "osmTags": "socket:bosch_5pin~*" } @@ -4155,11 +4624,19 @@ ], "human": { "en": " minutes", - "nl": " minuten" + "nl": " minuten", + "ca": " minuts", + "de": " Minuten", + "es": " minutos", + "ru": " минут" }, "humanSingular": { "en": " minute", - "nl": " minuut" + "nl": " minuut", + "ca": " minut", + "de": " Minute", + "es": " minuto", + "ru": " минута" } }, { @@ -4175,11 +4652,19 @@ ], "human": { "en": " hours", - "nl": " uren" + "nl": " uren", + "ca": " hores", + "de": " Stunden", + "es": " horas", + "ru": " часов" }, "humanSingular": { "en": " hour", - "nl": " uur" + "nl": " uur", + "ca": " hora", + "de": " Stunde", + "es": " hora", + "ru": " час" } }, { @@ -4192,11 +4677,19 @@ ], "human": { "en": " days", - "nl": " day" + "nl": " day", + "ca": " dies", + "de": " Tage", + "es": " días", + "ru": " дней" }, "humanSingular": { "en": " day", - "nl": " dag" + "nl": " dag", + "ca": " dia", + "de": " Tag", + "es": " día", + "ru": " день" } } ] @@ -4232,7 +4725,11 @@ ], "human": { "en": "Volts", - "nl": "volt" + "nl": "volt", + "ca": "Volts", + "de": "Volt", + "es": "Voltios", + "ru": "Вольт" } } ], @@ -4268,7 +4765,10 @@ ], "human": { "en": "A", - "nl": "A" + "nl": "A", + "ca": "A", + "de": "Ein", + "es": "A" } } ], @@ -4301,7 +4801,11 @@ ], "human": { "en": "kilowatt", - "nl": "kilowatt" + "nl": "kilowatt", + "ca": "quilovats", + "de": "Kilowatt", + "es": "kilvatio", + "ru": "киловатт" } }, { @@ -4311,7 +4815,11 @@ ], "human": { "en": "megawatt", - "nl": "megawatt" + "nl": "megawatt", + "ca": "megavats", + "de": "Megawatt", + "es": "megavatio", + "ru": "мегаватт" } } ], diff --git a/assets/themes/healthcare/healthcare.json b/assets/themes/healthcare/healthcare.json index b527c884a..482d21396 100644 --- a/assets/themes/healthcare/healthcare.json +++ b/assets/themes/healthcare/healthcare.json @@ -1,22 +1,22 @@ { - "id": "healthcare", - "title": { - "en": "Healthcare" - }, - "description": { - "en": "On this map, various healthcare related items are shown" - }, - "maintainer": "MapComplete", - "icon": "./assets/layers/doctors/doctors.svg", - "version": "0", - "startLat": 50.8465573, - "defaultBackgroundId": "CartoDB.Voyager", - "startLon": 4.351697, - "startZoom": 16, - "widenFactor": 2, - "layers": [ - "doctors", - "hospital", - "pharmacy" - ] + "id": "healthcare", + "title": { + "en": "Healthcare" + }, + "description": { + "en": "On this map, various healthcare related items are shown" + }, + "maintainer": "MapComplete", + "icon": "./assets/layers/doctors/doctors.svg", + "version": "0", + "startLat": 50.8465573, + "defaultBackgroundId": "CartoDB.Voyager", + "startLon": 4.351697, + "startZoom": 16, + "widenFactor": 2, + "layers": [ + "doctors", + "hospital", + "pharmacy" + ] } \ No newline at end of file diff --git a/langs/layers/en.json b/langs/layers/en.json index e077d30cd..0b3b8a767 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -3255,6 +3255,52 @@ "description": "This layer visualizes directions", "name": "Direction visualization" }, + "doctors": { + "filter": { + "0": { + "options": { + "0": { + "question": "Opened now" + } + } + } + }, + "name": "doctors", + "presets": { + "0": { + "title": "a doctors office" + }, + "1": { + "title": "a dentists office" + }, + "2": { + "title": "a physiotherapists office" + } + }, + "tagRenderings": { + "specialty": { + "mappings": { + "0": { + "then": "This is a general practitioner" + }, + "1": { + "then": "This is a gynaecologist" + }, + "2": { + "then": "This is a psychiatrist" + }, + "3": { + "then": "This is a paediatrician" + } + }, + "question": "What is this doctor specialized in?", + "render": "This doctor is specialized in {healthcare:speciality}" + } + }, + "title": { + "render": "Doctors Office {name}" + } + }, "dogpark": { "name": "dog parks", "presets": { @@ -3572,6 +3618,9 @@ "nonDeleteMappings": { "0": { "then": "This is actually a pub" + }, + "1": { + "then": "This is actually a cafe" } } }, @@ -3995,6 +4044,18 @@ "render": "Hackerspace" } }, + "hospital": { + "name": "Hospital", + "tagRenderings": { + "name": { + "question": "What does the of the hospital ?", + "render": "Name of the hospital name is {name}" + } + }, + "title": { + "render": "Hospital" + } + }, "hydrant": { "description": "Map layer to show fire hydrants.", "name": "Map of hydrants", @@ -4629,6 +4690,28 @@ "description": "Pedestrian footpaths, especially used for indoor navigation and snapping entrances to this layer", "name": "Pedestrian paths" }, + "pharmacy": { + "name": "pharmacy", + "tagRenderings": { + "wheelchair": { + "mappings": { + "0": { + "then": "This pharmacy is easy to access on a wheelchair" + }, + "1": { + "then": "This pharmacy is hard to access on a wheelchair" + }, + "2": { + "then": "This pharmacy has limited access for wheelchair users" + } + }, + "question": "Is this pharmacy easy to access on a wheelchair?" + } + }, + "title": { + "render": "{name}" + } + }, "picnic_table": { "description": "The layer showing picnic tables", "name": "Picnic tables", @@ -5322,6 +5405,26 @@ "question": "What kind of shop is this?" } }, + "copyshop-print-sizes": { + "mappings": { + "0": { + "then": "This shop can print on papers of size A4" + }, + "1": { + "then": "This shop can print on papers of size A3" + }, + "2": { + "then": "This shop can print on papers of size A2" + }, + "3": { + "then": "This shop can print on papers of size A1" + }, + "4": { + "then": "This shop can print on papers of size A0" + } + }, + "question": "What paper formats does this shop offer?" + }, "shops-name": { "question": "What is the name of this shop?" } diff --git a/langs/themes/en.json b/langs/themes/en.json index 4fb6f8226..b3e3d3a17 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -647,6 +647,10 @@ "shortDescription": "Map to show hydrants, extinguishers, fire stations, and ambulance stations.", "title": "Hydrants, Extinguishers, Fire stations, and Ambulance stations" }, + "healthcare": { + "description": "On this map, various healthcare related items are shown", + "title": "Healthcare" + }, "kerbs_and_crossings": { "description": "A map showing kerbs and crossings.", "title": "Kerbs and crossings" From 92f9a25fb0d03bd376446d2316508de1e624a5b6 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sat, 9 Jul 2022 18:04:35 +0200 Subject: [PATCH 50/71] Fix #933 --- assets/layers/maxspeed/maxspeed.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/assets/layers/maxspeed/maxspeed.json b/assets/layers/maxspeed/maxspeed.json index fe5caaec6..dbf5d65f9 100644 --- a/assets/layers/maxspeed/maxspeed.json +++ b/assets/layers/maxspeed/maxspeed.json @@ -68,6 +68,19 @@ "type": "pnat" }, "mappings": [ + { + "if": { + "and":["highway=living_street","_country!=be"] + }, + "then": { + "en": "This is a living street" + }, + "icon": { + "path": "./assets/layers/maxspeed/living_street_be.svg", + "class": "large" + }, + "hideInAnswer": true + }, { "if": "highway=living_street", "then": { From 1bb816206ccb83c050182fbb9f887778ae78e251 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sat, 9 Jul 2022 20:35:59 +0200 Subject: [PATCH 51/71] Fix #918 --- UI/Popup/FeatureInfoBox.ts | 2 +- css/index-tailwind-output.css | 26 ++++++++------------------ index.css | 7 +++++++ 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/UI/Popup/FeatureInfoBox.ts b/UI/Popup/FeatureInfoBox.ts index 143fb6e5d..a277a7d7f 100644 --- a/UI/Popup/FeatureInfoBox.ts +++ b/UI/Popup/FeatureInfoBox.ts @@ -54,7 +54,7 @@ export default class FeatureInfoBox extends ScrollableFullScreen { const titleIcons = new Combine( layerConfig.titleIcons.map(icon => { return new TagRenderingAnswer(tags, icon, state, - "block h-8 max-h-8 align-baseline box-content sm:p-0.5").SetClass("flex"); + "block h-8 max-h-8 align-baseline box-content sm:p-0.5 titleicon"); } )) .SetClass("flex flex-row flex-wrap pt-0.5 sm:pt-1 items-center mr-2") diff --git a/css/index-tailwind-output.css b/css/index-tailwind-output.css index 6bef61478..f8e22e23b 100644 --- a/css/index-tailwind-output.css +++ b/css/index-tailwind-output.css @@ -1668,10 +1668,6 @@ video { font-weight: 600; } -.font-medium { - font-weight: 500; -} - .uppercase { text-transform: uppercase; } @@ -1701,10 +1697,6 @@ video { --tw-ordinal: ordinal; } -.leading-6 { - line-height: 1.5rem; -} - .tracking-tight { letter-spacing: -0.025em; } @@ -1912,6 +1904,14 @@ svg, img { height: 100%; } +.titleicon img { + width: unset; +} + +.titleicon svg { + width: unset; +} + .svg-catch svg path { fill: var(--catch-detail-color) !important; stroke: var(--catch-detail-color) !important; @@ -2507,16 +2507,6 @@ input { color: var(--unsubtle-detail-color-contrast); } -.group:hover .group-hover\:text-blue-800 { - --tw-text-opacity: 1; - color: rgba(30, 64, 175, var(--tw-text-opacity)); -} - -.group:hover .group-hover\:text-blue-900 { - --tw-text-opacity: 1; - color: rgba(30, 58, 138, var(--tw-text-opacity)); -} - @media (min-width: 640px) { .sm\:mx-auto { margin-left: auto; diff --git a/index.css b/index.css index 7e8799923..5ac1901b8 100644 --- a/index.css +++ b/index.css @@ -137,6 +137,13 @@ svg, img { height: 100%; } +.titleicon img { + width: unset; +} + +.titleicon svg { + width: unset; +} .svg-catch svg path { fill: var(--catch-detail-color) !important; stroke: var(--catch-detail-color) !important; From f9ce1e4db40626cb5e580258dbfa7fdfa8b87d0a Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sun, 10 Jul 2022 03:58:07 +0200 Subject: [PATCH 52/71] More work on searchable mappings --- UI/Input/InputElementMap.ts | 4 +- UI/Input/SearchableMappingsSelector.ts | 241 +++++++++++++++++++++++ UI/Popup/TagRenderingQuestion.ts | 79 +++++++- assets/layers/shops/shops.json | 7 + assets/themes/healthcare/healthcare.json | 40 ++-- css/index-tailwind-output.css | 63 +++--- index.css | 6 + langs/en.json | 1 + test.ts | 184 +---------------- 9 files changed, 398 insertions(+), 227 deletions(-) create mode 100644 UI/Input/SearchableMappingsSelector.ts diff --git a/UI/Input/InputElementMap.ts b/UI/Input/InputElementMap.ts index 3cb1a60cc..0f0d74d0c 100644 --- a/UI/Input/InputElementMap.ts +++ b/UI/Input/InputElementMap.ts @@ -1,5 +1,5 @@ import {InputElement} from "./InputElement"; -import {UIEventSource} from "../../Logic/UIEventSource"; +import {Store, UIEventSource} from "../../Logic/UIEventSource"; export default class InputElementMap extends InputElement { @@ -13,7 +13,7 @@ export default class InputElementMap extends InputElement { isSame: (x0: X, x1: X) => boolean, toX: (t: T) => X, fromX: (x: X) => T, - extraSources: UIEventSource[] = [] + extraSources: Store[] = [] ) { super(); this.isSame = isSame; diff --git a/UI/Input/SearchableMappingsSelector.ts b/UI/Input/SearchableMappingsSelector.ts new file mode 100644 index 000000000..02ab40dc3 --- /dev/null +++ b/UI/Input/SearchableMappingsSelector.ts @@ -0,0 +1,241 @@ +import {UIElement} from "../UIElement"; +import {InputElement} from "./InputElement"; +import BaseUIElement from "../BaseUIElement"; +import {Store, UIEventSource} from "../../Logic/UIEventSource"; +import Translations from "../i18n/Translations"; +import Locale from "../i18n/Locale"; +import Combine from "../Base/Combine"; +import {TextField} from "./TextField"; +import Svg from "../../Svg"; +import {VariableUiElement} from "../Base/VariableUIElement"; + + +/** + * A single 'pill' which can hide itself if the search criteria is not met + */ +class SelfHidingToggle extends UIElement implements InputElement { + private readonly _shown: BaseUIElement; + public readonly _selected: UIEventSource + public readonly isShown: Store = new UIEventSource(true); + public readonly forceSelected: UIEventSource + public constructor( + shown: string | BaseUIElement, + mainTerm: Record, + search: Store, + options?: { + searchTerms?: Record, + selected?: UIEventSource, + forceSelected?: UIEventSource + } + ) { + super(); + this._shown = Translations.W(shown); + const searchTerms: Record = {}; + for (const lng in options?.searchTerms ?? []) { + if (lng === "_context") { + continue + } + searchTerms[lng] = options?.searchTerms[lng]?.map(SelfHidingToggle.clean) + } + for (const lng in mainTerm) { + if (lng === "_context") { + continue + } + const main = SelfHidingToggle.clean( mainTerm[lng]) + searchTerms[lng] = [main].concat(searchTerms[lng] ?? []) + } + const selected = this._selected = options?.selected ?? new UIEventSource(false); + const forceSelected = this.forceSelected = options?.forceSelected ?? new UIEventSource(false) + this.isShown = search.map(s => { + if (s === undefined || s.length === 0) { + return true; + } + if (selected.data && !forceSelected.data) { + return true + } + s = s?.trim()?.toLowerCase() + return searchTerms[Locale.language.data].some(t => t.indexOf(s) >= 0); + }, [selected, Locale.language]) + + const self = this; + this.isShown.addCallbackAndRun(shown => { + if (shown) { + self.RemoveClass("hidden") + } else { + self.SetClass("hidden") + } + }) + } + + private static clean(s: string) : string{ + return s?.trim()?.toLowerCase()?.replace(/[-]/, "") + } + + + GetValue(): UIEventSource { + return this._selected + } + + IsValid(t: boolean): boolean { + return true; + } + + protected InnerRender(): string | BaseUIElement { + let el: BaseUIElement = this._shown; + const selected = this._selected; + + selected.addCallbackAndRun(selected => { + if (selected) { + el.SetClass("border-4") + el.RemoveClass("border") + el.SetStyle("margin: 0") + } else { + el.SetStyle("margin: 3px") + el.SetClass("border") + el.RemoveClass("border-4") + } + }) + + el.onClick(() => selected.setData(!selected.data)) + + return el.SetClass("border border-black rounded-full p-1 px-4") + } +} + + +/** + * The searchable mappings selector is a selector which shows various pills from which one (or more) options can be chosen. + * A searchfield can be used to filter the values + */ +export class SearchablePillsSelector extends Combine implements InputElement { + private selectedElements: UIEventSource; + + public readonly someMatchFound: Store; + + constructor( + values: { show: BaseUIElement, value: T, mainTerm: Record, searchTerms?: Record }[], + options?: { + mode?: "select-one" | "select-many", + selectedElements?: UIEventSource, + searchValue?: UIEventSource, + onNoMatches?: BaseUIElement, + onNoSearchMade?: BaseUIElement, + selectIfSingle?: false | boolean, + searchAreaClass?: string + }) { + + const search = new TextField({value: options?.searchValue}) + + const searchBar = new Combine([Svg.search_svg().SetClass("w-8 normal-background"), search.SetClass("w-full")]) + .SetClass("flex items-center border-2 border-black m-2") + + const searchValue = search.GetValue().map(s => s?.trim()?.toLowerCase()) + const selectedElements = options?.selectedElements ?? new UIEventSource([]); + const mode = options?.mode ?? "select-one"; + const onEmpty = options?.onNoMatches ?? Translations.t.general.noMatchingMapping + + const mappedValues: { show: SelfHidingToggle, mainTerm: Record, value: T }[] = values.map(v => { + + const vIsSelected = new UIEventSource(false); + + selectedElements.addCallbackAndRunD(selectedElements => { + vIsSelected.setData(selectedElements.some(t => t === v.value)) + }) + + vIsSelected.addCallback(selected => { + if (selected) { + if (mode === "select-one") { + selectedElements.setData([v.value]) + } else if (!selectedElements.data.some(t => t === v.value)) { + selectedElements.data.push(v.value); + selectedElements.ping() + } + } else { + for (let i = 0; i < selectedElements.data.length; i++) { + const t = selectedElements.data[i] + if (t == v.value) { + selectedElements.data.splice(i, 1) + selectedElements.ping() + break; + } + } + } + }) + + const toggle = new SelfHidingToggle(v.show, v.mainTerm, searchValue, { + searchTerms: v.searchTerms, + selected: vIsSelected + }) + + + return { + ...v, + show: toggle + }; + }) + + + let somethingShown: Store + if (options.selectIfSingle) { + let forcedSelection : { value: T, show: SelfHidingToggle }= undefined + somethingShown = searchValue.map(_ => { + let totalShown = 0; + let lastShownValue: { value: T, show: SelfHidingToggle } + for (const mv of mappedValues) { + const valueIsShown = mv.show.isShown.data + if (valueIsShown) { + totalShown++; + lastShownValue = mv + } + } + if (totalShown == 1) { + if (this.selectedElements.data.indexOf(lastShownValue.value) < 0) { + this.selectedElements.setData([lastShownValue.value]) + lastShownValue.show.forceSelected.setData(true) + forcedSelection = lastShownValue + } + } else if (forcedSelection != undefined) { + this.selectedElements.setData([]) + forcedSelection.show.forceSelected.setData(false) + forcedSelection = undefined; + } + + return totalShown > 0 + }, mappedValues.map(mv => mv.show.GetValue())) + } else { + somethingShown = searchValue.map(_ => mappedValues.some(mv => mv.show.isShown.data), mappedValues.map(mv => mv.show.GetValue())) + + } + + super([ + searchBar, + new VariableUiElement(Locale.language.map(lng => { + if (options?.onNoSearchMade !== undefined && (searchValue.data === undefined || searchValue.data.length === 0)) { + return options?.onNoSearchMade + } + if (!somethingShown.data) { + return onEmpty + } + mappedValues.sort((a, b) => a.mainTerm[lng] < b.mainTerm[lng] ? -1 : 1) + return new Combine(mappedValues.map(e => e.show)) + .SetClass("flex flex-wrap w-full") + .SetClass(options?.searchAreaClass ?? "") + }, [somethingShown, searchValue])) + + ]) + this.selectedElements = selectedElements; + this.someMatchFound = somethingShown; + + } + + public GetValue(): UIEventSource { + return this.selectedElements; + } + + IsValid(t: T[]): boolean { + return true; + } + + +} + diff --git a/UI/Popup/TagRenderingQuestion.ts b/UI/Popup/TagRenderingQuestion.ts index 9278a86c7..14104f463 100644 --- a/UI/Popup/TagRenderingQuestion.ts +++ b/UI/Popup/TagRenderingQuestion.ts @@ -31,6 +31,7 @@ import FeaturePipelineState from "../../Logic/State/FeaturePipelineState"; import Title from "../Base/Title"; import {OsmConnection} from "../../Logic/Osm/OsmConnection"; import {GeoOperations} from "../../Logic/GeoOperations"; +import {SearchablePillsSelector} from "../Input/SearchableMappingsSelector"; /** * Shows the question element. @@ -141,19 +142,25 @@ export default class TagRenderingQuestion extends Combine { private static GenerateInputElement( state: FeaturePipelineState, configuration: TagRenderingConfig, - applicableMappings: { if: TagsFilter, then: TypedTranslation, icon?: string, ifnot?: TagsFilter, addExtraTags: Tag[] }[], + applicableMappings: { if: TagsFilter, then: TypedTranslation, icon?: string, ifnot?: TagsFilter, addExtraTags: Tag[], searchTerms?: Record }[], applicableUnit: Unit, tagsSource: UIEventSource, feedback: UIEventSource ): ReadonlyInputElement { - // FreeForm input will be undefined if not present; will already contain a special input element if applicable - const ff = TagRenderingQuestion.GenerateFreeform(state, configuration, applicableUnit, tagsSource, feedback); - + const hasImages = applicableMappings.findIndex(mapping => mapping.icon !== undefined) >= 0 let inputEls: InputElement[]; const ifNotsPresent = applicableMappings.some(mapping => mapping.ifnot !== undefined) + + if(applicableMappings.length > 8 && !ifNotsPresent && (configuration.freeform?.type === undefined || configuration.freeform?.type === "string")){ + return TagRenderingQuestion.GenerateSearchableSelector(state, configuration, applicableMappings, tagsSource) + } + + + // FreeForm input will be undefined if not present; will already contain a special input element if applicable + const ff = TagRenderingQuestion.GenerateFreeform(state, configuration, applicableUnit, tagsSource, feedback); function allIfNotsExcept(excludeIndex: number): TagsFilter[] { if (configuration.mappings === undefined || configuration.mappings.length === 0) { @@ -221,6 +228,64 @@ export default class TagRenderingQuestion extends Combine { } + private static GenerateSearchableSelector( + state: FeaturePipelineState, + configuration: TagRenderingConfig, + applicableMappings: { if: TagsFilter; then: TypedTranslation; icon?: string; iconClass?: string, addExtraTags: Tag[], searchTerms?: Record }[], tagsSource: UIEventSource): InputElement{ + const values : { show: BaseUIElement, value: TagsFilter, mainTerm: Record, searchTerms?: Record }[] = [] + for (const mapping of applicableMappings) { + const tr = mapping.then.Subs(tagsSource.data) + const patchedMapping = <{iconClass: "small-height", then: TypedTranslation}> {...mapping, iconClass: "small-height"} + const fancy = TagRenderingQuestion.GenerateMappingContent(patchedMapping, tagsSource, state).SetClass("normal-background") + values.push({ + show: fancy, + value: mapping.if, + mainTerm: tr.translations, + searchTerms: mapping.searchTerms + }) + } + + const searchValue: UIEventSource = new UIEventSource(undefined) + const ff = configuration.freeform + let onEmpty : BaseUIElement = undefined + if(ff !== undefined){ + onEmpty = new VariableUiElement(searchValue.map(search => configuration.render.Subs({[ff.key] : search}))) + } + + const classes = "h-32 overflow-scroll" + const presetSearch = new SearchablePillsSelector(values,{ + selectIfSingle: true, + mode: configuration.multiAnswer ? "select-many" : "select-one", + searchValue, + onNoMatches: onEmpty?.SetClass(classes).SetClass("flex justify-center items-center"), + searchAreaClass:classes + }) + return new InputElementMap(presetSearch, + (x0, x1) => false, + arr => { + console.log("Arr is ", arr) + if(arr[0] !== undefined){ + return new And(arr) + } + if(ff !== undefined && searchValue.data?.length > 0 && !presetSearch.someMatchFound.data){ + const t = new Tag(ff.key, searchValue.data) + if(ff.addExtraTags){ + return new And([t, ...ff.addExtraTags]) + } + return t; + + } + return undefined; + }, + tf => { + if(tf["and"] !== undefined){ + return tf["and"]; + } + return [tf]; + }, + [searchValue, presetSearch.someMatchFound] + ); + } private static GenerateMultiAnswer( configuration: TagRenderingConfig, @@ -337,7 +402,7 @@ export default class TagRenderingQuestion extends Combine { then: Translation, addExtraTags: Tag[], icon?: string, - iconClass?: string + iconClass?: "small" | "medium" | "large" | "small-height" }, ifNot?: TagsFilter[]): InputElement { let tagging: TagsFilter = mapping.if; @@ -358,13 +423,13 @@ export default class TagRenderingQuestion extends Combine { private static GenerateMappingContent(mapping: { then: Translation, icon?: string, - iconClass?: string + iconClass?: "small" | "medium" | "large" | "small-height" }, tagsSource: UIEventSource, state: FeaturePipelineState): BaseUIElement { const text = new SubstitutedTranslation(mapping.then, tagsSource, state) if (mapping.icon === undefined) { return text; } - return new Combine([new Img(mapping.icon).SetClass("mapping-icon-"+(mapping.iconClass ?? "small")), text]).SetClass("flex") + return new Combine([new Img(mapping.icon).SetClass("mr-1 mapping-icon-"+(mapping.iconClass ?? "small")), text]).SetClass("flex") } private static GenerateFreeform(state: FeaturePipelineState, configuration: TagRenderingConfig, applicableUnit: Unit, tags: UIEventSource, feedback: UIEventSource) diff --git a/assets/layers/shops/shops.json b/assets/layers/shops/shops.json index d72121c86..594c788da 100644 --- a/assets/layers/shops/shops.json +++ b/assets/layers/shops/shops.json @@ -105,6 +105,13 @@ "question": { "en": "What kind of shop is this?", "nl": "Wat voor soort winkel is dit?" + }, + "render": { + "en":"This is a {shop}" + }, + "freeform": { + "key": "shop", + "addExtraTags": ["fixme=freeform shop key used, to be reviewed"] } } }, diff --git a/assets/themes/healthcare/healthcare.json b/assets/themes/healthcare/healthcare.json index b527c884a..482d21396 100644 --- a/assets/themes/healthcare/healthcare.json +++ b/assets/themes/healthcare/healthcare.json @@ -1,22 +1,22 @@ { - "id": "healthcare", - "title": { - "en": "Healthcare" - }, - "description": { - "en": "On this map, various healthcare related items are shown" - }, - "maintainer": "MapComplete", - "icon": "./assets/layers/doctors/doctors.svg", - "version": "0", - "startLat": 50.8465573, - "defaultBackgroundId": "CartoDB.Voyager", - "startLon": 4.351697, - "startZoom": 16, - "widenFactor": 2, - "layers": [ - "doctors", - "hospital", - "pharmacy" - ] + "id": "healthcare", + "title": { + "en": "Healthcare" + }, + "description": { + "en": "On this map, various healthcare related items are shown" + }, + "maintainer": "MapComplete", + "icon": "./assets/layers/doctors/doctors.svg", + "version": "0", + "startLat": 50.8465573, + "defaultBackgroundId": "CartoDB.Voyager", + "startLon": 4.351697, + "startZoom": 16, + "widenFactor": 2, + "layers": [ + "doctors", + "hospital", + "pharmacy" + ] } \ No newline at end of file diff --git a/css/index-tailwind-output.css b/css/index-tailwind-output.css index 2514d1a9b..4dd901a29 100644 --- a/css/index-tailwind-output.css +++ b/css/index-tailwind-output.css @@ -858,10 +858,6 @@ video { margin-bottom: 0.75rem; } -.mr-4 { - margin-right: 1rem; -} - .ml-3 { margin-left: 0.75rem; } @@ -890,6 +886,10 @@ video { margin-bottom: 6rem; } +.mr-4 { + margin-right: 1rem; +} + .mt-2 { margin-top: 0.5rem; } @@ -950,6 +950,10 @@ video { margin-top: -3rem; } +.mr-1 { + margin-right: 0.25rem; +} + .mb-0 { margin-bottom: 0px; } @@ -1126,8 +1130,8 @@ video { width: 2rem; } -.w-1\/2 { - width: 50%; +.w-1 { + width: 0.25rem; } .w-24 { @@ -1167,6 +1171,10 @@ video { width: min-content; } +.w-1\/2 { + width: 50%; +} + .w-max { width: -webkit-max-content; width: max-content; @@ -1400,10 +1408,6 @@ video { border-bottom-left-radius: 0.25rem; } -.border-4 { - border-width: 4px; -} - .border { border-width: 1px; } @@ -1412,6 +1416,10 @@ video { border-width: 2px; } +.border-4 { + border-width: 4px; +} + .border-l-4 { border-left-width: 4px; } @@ -1420,16 +1428,16 @@ video { border-bottom-width: 1px; } -.border-black { - --tw-border-opacity: 1; - border-color: rgba(0, 0, 0, var(--tw-border-opacity)); -} - .border-gray-500 { --tw-border-opacity: 1; border-color: rgba(107, 114, 128, var(--tw-border-opacity)); } +.border-black { + --tw-border-opacity: 1; + border-color: rgba(0, 0, 0, var(--tw-border-opacity)); +} + .border-gray-400 { --tw-border-opacity: 1; border-color: rgba(156, 163, 175, var(--tw-border-opacity)); @@ -1508,14 +1516,14 @@ video { padding: 0.75rem; } -.p-1 { - padding: 0.25rem; -} - .p-4 { padding: 1rem; } +.p-1 { + padding: 0.25rem; +} + .p-2 { padding: 0.5rem; } @@ -1528,16 +1536,16 @@ video { padding: 0.125rem; } -.px-4 { - padding-left: 1rem; - padding-right: 1rem; -} - .px-0 { padding-left: 0px; padding-right: 0px; } +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + .pr-2 { padding-right: 0.5rem; } @@ -2455,6 +2463,13 @@ input { /* Additional class on the first layer filter */ } +.mapping-icon-small-height { + /* A mapping icon type */ + height: 1.5rem; + margin-right: 0.5rem; + width: unset; +} + .mapping-icon-small { /* A mapping icon type */ width: 1.5rem; diff --git a/index.css b/index.css index 7e8799923..cbba97a37 100644 --- a/index.css +++ b/index.css @@ -620,6 +620,12 @@ input { /* Additional class on the first layer filter */ } +.mapping-icon-small-height { + /* A mapping icon type */ + height: 1.5rem; + margin-right: 0.5rem; + width: unset; +} .mapping-icon-small { /* A mapping icon type */ diff --git a/langs/en.json b/langs/en.json index 45b119476..e893fb262 100644 --- a/langs/en.json +++ b/langs/en.json @@ -160,6 +160,7 @@ }, "nameInlineQuestion": "The name of this {category} is $$$", "next": "Next", + "noMatchingMapping": "No entries mapped your search…", "noNameCategory": "{category} without a name", "noTagsSelected": "No tags selected", "notValid": "Select a valid value to continue", diff --git a/test.ts b/test.ts index 916a46654..e25a2ad54 100644 --- a/test.ts +++ b/test.ts @@ -2,187 +2,18 @@ import * as shops from "./assets/generated/layers/shops.json" import Combine from "./UI/Base/Combine"; import Img from "./UI/Base/Img"; import BaseUIElement from "./UI/BaseUIElement"; -import Svg from "./Svg"; -import {TextField} from "./UI/Input/TextField"; -import {Store, UIEventSource} from "./Logic/UIEventSource"; import {VariableUiElement} from "./UI/Base/VariableUIElement"; -import Locale from "./UI/i18n/Locale"; import LanguagePicker from "./UI/LanguagePicker"; -import {InputElement} from "./UI/Input/InputElement"; -import {UIElement} from "./UI/UIElement"; -import Translations from "./UI/i18n/Translations"; import TagRenderingConfig, {Mapping} from "./Models/ThemeConfig/TagRenderingConfig"; import {MappingConfigJson} from "./Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"; import {FixedUiElement} from "./UI/Base/FixedUiElement"; import {TagsFilter} from "./Logic/Tags/TagsFilter"; +import {SearchablePillsSelector} from "./UI/Input/SearchableMappingsSelector"; +import {UIEventSource} from "./Logic/UIEventSource"; const mappingsRaw: MappingConfigJson[] = shops.tagRenderings.find(tr => tr.id == "shop_types").mappings const mappings = mappingsRaw.map((m, i) => TagRenderingConfig.ExtractMapping(m, i, "test", "test")) - -export class SelfHidingToggle extends UIElement implements InputElement { - private readonly _shown: BaseUIElement; - private readonly _searchTerms: Record; - private readonly _search: Store; - - private readonly _selected: UIEventSource - - public constructor( - shown: string | BaseUIElement, - mainTerm: Record, - search: Store, - searchTerms?: Record, - selected: UIEventSource = new UIEventSource(false) - ) { - super(); - this._shown = Translations.W(shown); - this._search = search; - this._searchTerms = {}; - for (const lng in searchTerms ?? []) { - if (lng === "_context") { - continue - } - this._searchTerms[lng] = searchTerms[lng].map(t => t.trim().toLowerCase()) - } - for (const lng in mainTerm) { - if (lng === "_context") { - continue - } - this._searchTerms[lng] = [mainTerm[lng]].concat(this._searchTerms[lng] ?? []) - } - this._selected = selected; - } - - - GetValue(): UIEventSource { - return this._selected - } - - IsValid(t: boolean): boolean { - return true; - } - - protected InnerRender(): string | BaseUIElement { - let el: BaseUIElement = this._shown; - const selected = this._selected; - const search = this._search; - const terms = this._searchTerms; - const applySearch = () => { - const s = search.data?.trim()?.toLowerCase() - if (s === undefined || s.length === 0 || selected.data) { - el.RemoveClass("hidden") - return; - } - - if (terms[Locale.language.data].some(t => t.toLowerCase().indexOf(s) >= 0)) { - el.RemoveClass("hidden"); - return; - } - - el.SetClass("hidden") - } - search.addCallbackAndRun(_ => { - applySearch() - }) - Locale.language.addCallback(_ => { - applySearch() - }) - - selected.addCallbackAndRun(selected => { - if (selected) { - el.SetClass("border-4") - el.RemoveClass("border") - el.SetStyle("margin: calc( 0.25rem )") - } else { - el.SetStyle("margin: calc( 0.25rem + 3px )") - el.SetClass("border") - el.RemoveClass("border-4") - } - applySearch() - }) - - el.onClick(() => selected.setData(!selected.data)) - - return el.SetClass("border border-black rounded-full p-1 px-4") - } -} - - -class SearchablePresets extends Combine implements InputElement { - private selectedElements: UIEventSource; - - constructor( - values: { show: BaseUIElement, value: T, mainTerm: Record, searchTerms?: Record }[], - mode: "select-one" | "select-many", - selectedElements: UIEventSource = new UIEventSource([])) { - - const search = new TextField({}) - - const searchBar = new Combine([Svg.search_svg().SetClass("w-8"), search.SetClass("mr-4 w-full")]) - .SetClass("flex rounded-full border-2 border-black items-center my-2 w-1/2") - - const searchValue = search.GetValue().map(s => s?.trim()?.toLowerCase()) - - - values = values.map(v => { - - const vIsSelected = new UIEventSource(false); - - selectedElements.addCallbackAndRunD(selectedElements => { - vIsSelected.setData(selectedElements.some(t => t === v.value)) - }) - - vIsSelected.addCallback(selected => { - if (selected) { - if (mode === "select-one") { - selectedElements.setData([v.value]) - } else if (!selectedElements.data.some(t => t === v.value)) { - selectedElements.data.push(v.value); - selectedElements.ping() - } - }else{ - for (let i = 0; i < selectedElements.data.length; i++) { - const t = selectedElements.data[i] - if(t == v.value){ - selectedElements.data.splice(i, 1) - selectedElements.ping() - break; - } - } - } - }) - - return { - ...v, - show: new SelfHidingToggle(v.show, v.mainTerm, searchValue, v.searchTerms, vIsSelected) - }; - }) - - super([ - searchBar, - new VariableUiElement(Locale.language.map(lng => { - values.sort((a, b) => a.mainTerm[lng] < b.mainTerm[lng] ? -1 : 1) - return new Combine(values.map(e => e.show)) - .SetClass("flex flex-wrap w-full") - })) - - ]) - this.selectedElements = selectedElements; - - } - - public GetValue(): UIEventSource { - return this.selectedElements; - } - - IsValid(t: T[]): boolean { - return true; - } - - -} - - function fromMapping(m: Mapping): { show: BaseUIElement, value: TagsFilter, mainTerm: Record, searchTerms?: Record } { const el: BaseUIElement = m.then let icon: BaseUIElement @@ -199,10 +30,15 @@ function fromMapping(m: Mapping): { show: BaseUIElement, value: TagsFilter, main return {show, mainTerm: m.then.translations, searchTerms: m.searchTerms, value: m.if}; } - -const sp = new SearchablePresets( +const search = new UIEventSource("") +const sp = new SearchablePillsSelector( mappings.map(m => fromMapping(m)), - "select-one" + { + noMatchFound: new VariableUiElement(search.map(s => "Mark this a `"+s+"`")), + onNoSearch: new FixedUiElement("Search in "+mappingsRaw.length+" categories"), + selectIfSingle: true, + searchValue: search + } ) sp.AttachTo("maindiv") From 4a8a07a10bba35a8d02f1dc2cfd2752aaaf0fda5 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sun, 10 Jul 2022 17:47:29 +0200 Subject: [PATCH 53/71] TagRenderingConfig now automatically chooses an iconsize based on common icon sizes --- Models/ThemeConfig/TagRenderingConfig.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Models/ThemeConfig/TagRenderingConfig.ts b/Models/ThemeConfig/TagRenderingConfig.ts index 619e28c2f..67141780b 100644 --- a/Models/ThemeConfig/TagRenderingConfig.ts +++ b/Models/ThemeConfig/TagRenderingConfig.ts @@ -177,7 +177,8 @@ export default class TagRenderingConfig { throw "Tagrendering has a 'mappings'-object, but expected a list (" + context + ")" } - this.mappings = json.mappings.map((m, i) => TagRenderingConfig.ExtractMapping(m, i, translationKey, context, this.multiAnswer, this.question !== undefined)); + const commonIconSize = Utils.NoNull(json.mappings.map(m => m.icon !== undefined ? m.icon["class"] : undefined))[0] ?? "small" + this.mappings = json.mappings.map((m, i) => TagRenderingConfig.ExtractMapping(m, i, translationKey, context, this.multiAnswer, this.question !== undefined, commonIconSize)); } if (this.question && this.freeform?.key === undefined && this.mappings === undefined) { @@ -288,7 +289,7 @@ export default class TagRenderingConfig { public static ExtractMapping(mapping: MappingConfigJson, i: number, translationKey: string, context: string, - multiAnswer?: boolean, isQuestionable?: boolean) { + multiAnswer?: boolean, isQuestionable?: boolean, commonSize: string = "small") { const ctx = `${translationKey}.mappings.${i}` if (mapping.if === undefined) { @@ -327,7 +328,7 @@ export default class TagRenderingConfig { } let icon = undefined; - let iconClass = "small" + let iconClass = commonSize if (mapping.icon !== undefined) { if (typeof mapping.icon === "string" && mapping.icon !== "") { icon = mapping.icon From 734947ae61221fe016951e16c405ffb087e3651e Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sun, 10 Jul 2022 17:48:27 +0200 Subject: [PATCH 54/71] Styling tweaks and small bug fixes to SearchableMappingSelector --- UI/Input/SearchableMappingsSelector.ts | 30 +++++++++++++++++++------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/UI/Input/SearchableMappingsSelector.ts b/UI/Input/SearchableMappingsSelector.ts index 02ab40dc3..191230ece 100644 --- a/UI/Input/SearchableMappingsSelector.ts +++ b/UI/Input/SearchableMappingsSelector.ts @@ -18,6 +18,7 @@ class SelfHidingToggle extends UIElement implements InputElement { public readonly _selected: UIEventSource public readonly isShown: Store = new UIEventSource(true); public readonly forceSelected: UIEventSource + private readonly _squared: boolean; public constructor( shown: string | BaseUIElement, mainTerm: Record, @@ -25,11 +26,13 @@ class SelfHidingToggle extends UIElement implements InputElement { options?: { searchTerms?: Record, selected?: UIEventSource, - forceSelected?: UIEventSource + forceSelected?: UIEventSource, + squared?: boolean } ) { super(); this._shown = Translations.W(shown); + this._squared = options?.squared ?? false; const searchTerms: Record = {}; for (const lng in options?.searchTerms ?? []) { if (lng === "_context") { @@ -96,9 +99,19 @@ class SelfHidingToggle extends UIElement implements InputElement { } }) - el.onClick(() => selected.setData(!selected.data)) + const forcedSelection = this.forceSelected + el.onClick(() => { + if(forcedSelection.data){ + selected.setData(true) + }else{ + selected.setData(!selected.data); + } + }) - return el.SetClass("border border-black rounded-full p-1 px-4") + if(!this._squared){ + el.SetClass("rounded-full") + } + return el.SetClass("border border-black p-1 px-4") } } @@ -164,7 +177,8 @@ export class SearchablePillsSelector extends Combine implements InputElement< const toggle = new SelfHidingToggle(v.show, v.mainTerm, searchValue, { searchTerms: v.searchTerms, - selected: vIsSelected + selected: vIsSelected, + squared: mode === "select-many" }) @@ -177,7 +191,7 @@ export class SearchablePillsSelector extends Combine implements InputElement< let somethingShown: Store if (options.selectIfSingle) { - let forcedSelection : { value: T, show: SelfHidingToggle }= undefined + let forcedSelection : { value: T, show: SelfHidingToggle } = undefined somethingShown = searchValue.map(_ => { let totalShown = 0; let lastShownValue: { value: T, show: SelfHidingToggle } @@ -195,9 +209,9 @@ export class SearchablePillsSelector extends Combine implements InputElement< forcedSelection = lastShownValue } } else if (forcedSelection != undefined) { - this.selectedElements.setData([]) - forcedSelection.show.forceSelected.setData(false) + forcedSelection?.show?.forceSelected?.setData(false) forcedSelection = undefined; + this.selectedElements.setData([]) } return totalShown > 0 @@ -218,7 +232,7 @@ export class SearchablePillsSelector extends Combine implements InputElement< } mappedValues.sort((a, b) => a.mainTerm[lng] < b.mainTerm[lng] ? -1 : 1) return new Combine(mappedValues.map(e => e.show)) - .SetClass("flex flex-wrap w-full") + .SetClass("flex flex-wrap w-full content-start") .SetClass(options?.searchAreaClass ?? "") }, [somethingShown, searchValue])) From f79730ac0f1ca893564d5092013dc23c78f6a695 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sun, 10 Jul 2022 17:48:42 +0200 Subject: [PATCH 55/71] Styling tweaks --- css/index-tailwind-output.css | 20 +++++++++++++++++++- index.css | 15 +++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/css/index-tailwind-output.css b/css/index-tailwind-output.css index 4dd901a29..3d0bf8ee2 100644 --- a/css/index-tailwind-output.css +++ b/css/index-tailwind-output.css @@ -1290,6 +1290,10 @@ video { flex-wrap: wrap-reverse; } +.content-start { + align-content: flex-start; +} + .items-end { align-items: flex-end; } @@ -2465,7 +2469,21 @@ input { .mapping-icon-small-height { /* A mapping icon type */ - height: 1.5rem; + height: 2rem; + margin-right: 0.5rem; + width: unset; +} + +.mapping-icon-medium-height { + /* A mapping icon type */ + height: 3rem; + margin-right: 0.5rem; + width: unset; +} + +.mapping-icon-large-height { + /* A mapping icon type */ + height: 5rem; margin-right: 0.5rem; width: unset; } diff --git a/index.css b/index.css index cbba97a37..54cbd4d22 100644 --- a/index.css +++ b/index.css @@ -627,6 +627,21 @@ input { width: unset; } +.mapping-icon-medium-height { + /* A mapping icon type */ + height: 3rem; + margin-right: 0.5rem; + width: unset; +} + +.mapping-icon-large-height { + /* A mapping icon type */ + height: 5rem; + margin-right: 0.5rem; + width: unset; +} + + .mapping-icon-small { /* A mapping icon type */ width: 1.5rem; From 6f5283a2d2e9ef999d26ab0a14c9a9923092bf44 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sun, 10 Jul 2022 18:08:06 +0200 Subject: [PATCH 56/71] First working version --- UI/Popup/TagRenderingQuestion.ts | 137 ++++++++++++++++++++----------- 1 file changed, 88 insertions(+), 49 deletions(-) diff --git a/UI/Popup/TagRenderingQuestion.ts b/UI/Popup/TagRenderingQuestion.ts index 14104f463..34b0e3d9c 100644 --- a/UI/Popup/TagRenderingQuestion.ts +++ b/UI/Popup/TagRenderingQuestion.ts @@ -82,11 +82,11 @@ export default class TagRenderingQuestion extends Combine { const feedback = new UIEventSource(undefined) const inputElement: ReadonlyInputElement = - new VariableInputElement(applicableMappingsSrc.map(applicableMappings => { - return TagRenderingQuestion.GenerateInputElement(state, configuration, applicableMappings, applicableUnit, tags, feedback) + new VariableInputElement(applicableMappingsSrc.map(applicableMappings => { + return TagRenderingQuestion.GenerateInputElement(state, configuration, applicableMappings, applicableUnit, tags, feedback) } )) - + const save = () => { const selection = inputElement.GetValue().data; if (selection) { @@ -148,13 +148,16 @@ export default class TagRenderingQuestion extends Combine { feedback: UIEventSource ): ReadonlyInputElement { - + const hasImages = applicableMappings.findIndex(mapping => mapping.icon !== undefined) >= 0 let inputEls: InputElement[]; const ifNotsPresent = applicableMappings.some(mapping => mapping.ifnot !== undefined) - - if(applicableMappings.length > 8 && !ifNotsPresent && (configuration.freeform?.type === undefined || configuration.freeform?.type === "string")){ + + if (applicableMappings.length > 8 && + (configuration.freeform?.type === undefined || configuration.freeform?.type === "string") && + (!configuration.multiAnswer || configuration.freeform === undefined)) { + return TagRenderingQuestion.GenerateSearchableSelector(state, configuration, applicableMappings, tagsSource) } @@ -231,60 +234,96 @@ export default class TagRenderingQuestion extends Combine { private static GenerateSearchableSelector( state: FeaturePipelineState, configuration: TagRenderingConfig, - applicableMappings: { if: TagsFilter; then: TypedTranslation; icon?: string; iconClass?: string, addExtraTags: Tag[], searchTerms?: Record }[], tagsSource: UIEventSource): InputElement{ - const values : { show: BaseUIElement, value: TagsFilter, mainTerm: Record, searchTerms?: Record }[] = [] - for (const mapping of applicableMappings) { + applicableMappings: { if: TagsFilter; ifnot?: TagsFilter, then: TypedTranslation; icon?: string; iconClass?: string, addExtraTags: Tag[], searchTerms?: Record }[], tagsSource: UIEventSource): InputElement { + const values: { show: BaseUIElement, value: number, mainTerm: Record, searchTerms?: Record }[] = [] + for (let i = 0; i < applicableMappings.length; i++) { + const mapping = applicableMappings[i]; const tr = mapping.then.Subs(tagsSource.data) - const patchedMapping = <{iconClass: "small-height", then: TypedTranslation}> {...mapping, iconClass: "small-height"} - const fancy = TagRenderingQuestion.GenerateMappingContent(patchedMapping, tagsSource, state).SetClass("normal-background") - values.push({ + const patchedMapping = <{ iconClass: "small-height", then: TypedTranslation }>{ + ...mapping, + iconClass: `small-height`, + icon: mapping.icon ?? "./assets/svg/none.svg" + } + const fancy = TagRenderingQuestion.GenerateMappingContent(patchedMapping, tagsSource, state).SetClass("normal-background") + values.push({ show: fancy, - value: mapping.if, + value: i, mainTerm: tr.translations, searchTerms: mapping.searchTerms }) } - + const searchValue: UIEventSource = new UIEventSource(undefined) const ff = configuration.freeform - let onEmpty : BaseUIElement = undefined - if(ff !== undefined){ - onEmpty = new VariableUiElement(searchValue.map(search => configuration.render.Subs({[ff.key] : search}))) + let onEmpty: BaseUIElement = undefined + if (ff !== undefined) { + onEmpty = new VariableUiElement(searchValue.map(search => configuration.render.Subs({[ff.key]: search}))) } - - const classes = "h-32 overflow-scroll" - const presetSearch = new SearchablePillsSelector(values,{ + + const classes = "h-64 overflow-scroll" + const presetSearch = new SearchablePillsSelector(values, { selectIfSingle: true, mode: configuration.multiAnswer ? "select-many" : "select-one", searchValue, onNoMatches: onEmpty?.SetClass(classes).SetClass("flex justify-center items-center"), - searchAreaClass:classes + searchAreaClass: classes }) - return new InputElementMap(presetSearch, - (x0, x1) => false, - arr => { - console.log("Arr is ", arr) - if(arr[0] !== undefined){ - return new And(arr) + return new InputElementMap(presetSearch, + (x0, x1) => { + if (x0 == x1) { + return true; } - if(ff !== undefined && searchValue.data?.length > 0 && !presetSearch.someMatchFound.data){ - const t = new Tag(ff.key, searchValue.data) - if(ff.addExtraTags){ - return new And([t, ...ff.addExtraTags]) + if (x0 === undefined || x1 === undefined) { + return false; + } + if (x0.and.length !== x1.and.length) { + return false; + } + for (let i = 0; i < x0.and.length; i++) { + if (x1.and[i] != x0.and[i]) { + return false } - return t; - } - return undefined; + return true; }, - tf => { - if(tf["and"] !== undefined){ - return tf["and"]; + (selected) => { + if (ff !== undefined && searchValue.data?.length > 0 && !presetSearch.someMatchFound.data) { + const t = new Tag(ff.key, searchValue.data) + if (ff.addExtraTags) { + return new And([t, ...ff.addExtraTags]) + } + return new And([t]); } - return [tf]; + + if (selected === undefined || selected.length == 0) { + return undefined; + } + + const tfs = Utils.NoNull(applicableMappings.map((mapping, i) => { + if (selected.indexOf(i) >= 0) { + return mapping.if + } else { + return mapping.ifnot + } + })) + console.log("Got tags", tfs) + return new And(tfs); + }, + (tf) => { + if (tf === undefined) { + return [] + } + const selected: number[] = [] + for (let i = 0; i < applicableMappings.length; i++) { + const mapping = applicableMappings[i] + if (tf.and.some(t => mapping.if == t)) { + selected.push(i) + } + } + return selected; }, [searchValue, presetSearch.someMatchFound] - ); + ); } private static GenerateMultiAnswer( @@ -402,7 +441,7 @@ export default class TagRenderingQuestion extends Combine { then: Translation, addExtraTags: Tag[], icon?: string, - iconClass?: "small" | "medium" | "large" | "small-height" + iconClass?: "small" | "medium" | "large" | "small-height" }, ifNot?: TagsFilter[]): InputElement { let tagging: TagsFilter = mapping.if; @@ -423,13 +462,13 @@ export default class TagRenderingQuestion extends Combine { private static GenerateMappingContent(mapping: { then: Translation, icon?: string, - iconClass?: "small" | "medium" | "large" | "small-height" + iconClass?: "small" | "medium" | "large" | "small-height" | "medium-height" | "large-height" }, tagsSource: UIEventSource, state: FeaturePipelineState): BaseUIElement { const text = new SubstitutedTranslation(mapping.then, tagsSource, state) if (mapping.icon === undefined) { return text; } - return new Combine([new Img(mapping.icon).SetClass("mr-1 mapping-icon-"+(mapping.iconClass ?? "small")), text]).SetClass("flex") + return new Combine([new Img(mapping.icon).SetClass("mr-1 mapping-icon-" + (mapping.iconClass ?? "small")), text]).SetClass("flex items-center") } private static GenerateFreeform(state: FeaturePipelineState, configuration: TagRenderingConfig, applicableUnit: Unit, tags: UIEventSource, feedback: UIEventSource) @@ -477,7 +516,7 @@ export default class TagRenderingQuestion extends Combine { const tagsData = tags.data; const feature = state?.allElements?.ContainingFeatures?.get(tagsData.id) - const center = feature != undefined ? GeoOperations.centerpointCoordinates(feature) : [0,0] + const center = feature != undefined ? GeoOperations.centerpointCoordinates(feature) : [0, 0] const input: InputElement = ValidatedTextField.ForType(configuration.freeform.type)?.ConstructInputElement({ country: () => tagsData._country, location: [center[1], center[0]], @@ -488,13 +527,13 @@ export default class TagRenderingQuestion extends Combine { placeholder: configuration.freeform.placeholder, feedback }); - + // Init with correct value input?.GetValue().setData(tagsData[freeform.key] ?? freeform.default); - + // Add a length check - input?.GetValue().addCallbackD((v : string | undefined) => { - if(v?.length >= 255){ + input?.GetValue().addCallbackD((v: string | undefined) => { + if (v?.length >= 255) { feedback.setData(Translations.t.validation.tooLong.Subs({count: v.length})) } }) @@ -513,10 +552,10 @@ export default class TagRenderingQuestion extends Combine { return inputTagsFilter; } - + public static CreateTagExplanation(selectedValue: Store, tags: Store, - state?: {osmConnection?: OsmConnection}){ + state?: { osmConnection?: OsmConnection }) { return new VariableUiElement( selectedValue.map( (tagsFilter: TagsFilter) => { From 42012ac7f7f1cf7408db004aacf695433fc24f3f Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sun, 10 Jul 2022 18:20:42 +0200 Subject: [PATCH 57/71] Add some tests --- Logic/Tags/TagUtils.ts | 25 ++++++++++++++++++------- UI/Popup/TagRenderingQuestion.ts | 4 ++-- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Logic/Tags/TagUtils.ts b/Logic/Tags/TagUtils.ts index 7086f7a14..0440ffd2a 100644 --- a/Logic/Tags/TagUtils.ts +++ b/Logic/Tags/TagUtils.ts @@ -116,12 +116,21 @@ export class TagUtils { * Given multiple tagsfilters which can be used as answer, will take the tags with the same keys together as set. * E.g: * - * FlattenMultiAnswer([and: [ "x=a", "y=0;1"], and: ["x=b", "y=2"], and: ["x=", "y=3"]]) - * will result in - * ["x=a;b", "y=0;1;2;3"] - * - * @param tagsFilters - * @constructor + * const tag = TagUtils.Tag({"and": [ + * { + * and: [ "x=a", "y=0;1"], + * }, + * { + * and: ["x=", "y=3"] + * }, + * { + * and: ["x=b", "y=2"] + * } + * ]}) + * TagUtils.FlattenMultiAnswer([tag]) // => TagUtils.Tag({and:["x=a;b", "y=0;1;2;3"] }) + * + * TagUtils.FlattenMultiAnswer(([new Tag("x","y"), new Tag("a","b")])) // => new And([new Tag("x","y"), new Tag("a","b")]) + * TagUtils.FlattenMultiAnswer(([new Tag("x","")])) // => new And([new Tag("x","")]) */ static FlattenMultiAnswer(tagsFilters: TagsFilter[]): And { if (tagsFilters === undefined) { @@ -131,7 +140,9 @@ export class TagUtils { let keyValues = TagUtils.SplitKeys(tagsFilters); const and: TagsFilter[] = [] for (const key in keyValues) { - and.push(new Tag(key, Utils.Dedup(keyValues[key]).join(";"))); + const values = Utils.Dedup(keyValues[key]).filter(v => v !== "") + values.sort() + and.push(new Tag(key, values.join(";"))); } return new And(and); } diff --git a/UI/Popup/TagRenderingQuestion.ts b/UI/Popup/TagRenderingQuestion.ts index 34b0e3d9c..ed00ceb82 100644 --- a/UI/Popup/TagRenderingQuestion.ts +++ b/UI/Popup/TagRenderingQuestion.ts @@ -39,7 +39,7 @@ import {SearchablePillsSelector} from "../Input/SearchableMappingsSelector"; */ export default class TagRenderingQuestion extends Combine { - constructor(tags: UIEventSource, + constructor(tags: UIEventSource & {id: string}>, configuration: TagRenderingConfig, state?: FeaturePipelineState, options?: { @@ -88,7 +88,7 @@ export default class TagRenderingQuestion extends Combine { )) const save = () => { - const selection = inputElement.GetValue().data; + const selection = TagUtils.FlattenMultiAnswer([inputElement.GetValue().data]); if (selection) { (state?.changes) .applyAction(new ChangeTagAction( From b75581405e56d67bf04ea9803fa3b8be9a986e2c Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sun, 10 Jul 2022 18:37:23 +0200 Subject: [PATCH 58/71] Housekeeping... --- Docs/BuiltinIndex.md | 27 ++ Docs/BuiltinLayers.md | 7 + Docs/Layers/bike_parking.md | 1 + Docs/Layers/dogshop.md | 36 +- Docs/Layers/maxspeed.md | 2 + Docs/Layers/parking.md | 1 + Docs/Layers/shops.md | 38 +- Docs/TagInfo/mapcomplete_maxspeed.json | 5 + Docs/TagInfo/mapcomplete_personal.json | 446 ++++++++++++++++++ Docs/TagInfo/mapcomplete_pets.json | 29 ++ Docs/TagInfo/mapcomplete_shops.json | 93 ++++ assets/contributors.json | 12 +- assets/layers/bench/bench.json | 2 +- .../layers/climbing_area/climbing_area.json | 3 +- .../climbing_opportunity.json | 3 +- assets/layers/food/food.json | 6 +- assets/layers/maxspeed/maxspeed.json | 18 +- assets/layers/shops/shops.json | 6 +- assets/translators.json | 6 +- langs/layers/de.json | 6 +- langs/layers/en.json | 6 +- langs/layers/nl.json | 27 +- 22 files changed, 742 insertions(+), 38 deletions(-) diff --git a/Docs/BuiltinIndex.md b/Docs/BuiltinIndex.md index 1670e123b..a9f1a8c58 100644 --- a/Docs/BuiltinIndex.md +++ b/Docs/BuiltinIndex.md @@ -39,6 +39,7 @@ + [export_as_geojson](#export_as_geojson) + [minimap](#minimap) + [wikipedia](#wikipedia) + + [id_presets.shop_types](#id_presetsshop_types) + [school.capacity](#schoolcapacity) + [school.gender](#schoolgender) @@ -80,6 +81,7 @@ - climbing_gym - climbing_route - defibrillator + - doctors - dogpark - drinking_water - entrance @@ -94,6 +96,7 @@ - nature_reserve - observation_tower - parking + - pharmacy - picnic_table - play_forest - playground @@ -106,6 +109,7 @@ - surveillance_camera - toilet - trail + - transit_stops - tree_node - viewpoint - village_green @@ -128,11 +132,14 @@ - cafe_pub - climbing_club - climbing_gym + - doctors - food - hackerspace + - hospital - kindergarten_childcare - nature_reserve - observation_tower + - pharmacy - playground - recycling - school @@ -155,9 +162,12 @@ - cafe_pub - climbing_club - climbing_gym + - doctors - food - hackerspace + - hospital - kindergarten_childcare + - pharmacy - recycling - school - shops @@ -179,9 +189,12 @@ - cafe_pub - climbing_club - climbing_gym + - doctors - food - hackerspace + - hospital - kindergarten_childcare + - pharmacy - recycling - school - shops @@ -203,8 +216,10 @@ - cafe_pub - climbing_club - climbing_gym + - doctors - food - kindergarten_childcare + - pharmacy - shops - veterinary @@ -300,6 +315,7 @@ - food - hackerspace - observation_tower + - transit_stops @@ -516,6 +532,17 @@ +### id_presets.shop_types + + + + + + - shops + + + + ### school.capacity diff --git a/Docs/BuiltinLayers.md b/Docs/BuiltinLayers.md index 5ad662e77..c5b18bb99 100644 --- a/Docs/BuiltinLayers.md +++ b/Docs/BuiltinLayers.md @@ -800,6 +800,7 @@ The following layers are included in MapComplete: - [cycleways_and_roads](./Layers/cycleways_and_roads.md) - [defibrillator](./Layers/defibrillator.md) - [direction](./Layers/direction.md) + - [doctors](./Layers/doctors.md) - [dogpark](./Layers/dogpark.md) - [drinking_water](./Layers/drinking_water.md) - [entrance](./Layers/entrance.md) @@ -814,7 +815,9 @@ The following layers are included in MapComplete: - [grass_in_parks](./Layers/grass_in_parks.md) - [hackerspace](./Layers/hackerspace.md) - [home_location](./Layers/home_location.md) + - [hospital](./Layers/hospital.md) - [hydrant](./Layers/hydrant.md) + - [id_presets](./Layers/id_presets.md) - [import_candidate](./Layers/import_candidate.md) - [information_board](./Layers/information_board.md) - [kerbs](./Layers/kerbs.md) @@ -829,12 +832,14 @@ The following layers are included in MapComplete: - [observation_tower](./Layers/observation_tower.md) - [parking](./Layers/parking.md) - [pedestrian_path](./Layers/pedestrian_path.md) + - [pharmacy](./Layers/pharmacy.md) - [picnic_table](./Layers/picnic_table.md) - [play_forest](./Layers/play_forest.md) - [playground](./Layers/playground.md) - [public_bookcase](./Layers/public_bookcase.md) - [recycling](./Layers/recycling.md) - [school](./Layers/school.md) + - [shelter](./Layers/shelter.md) - [shops](./Layers/shops.md) - [slow_roads](./Layers/slow_roads.md) - [split_point](./Layers/split_point.md) @@ -844,6 +849,8 @@ The following layers are included in MapComplete: - [tertiary_education](./Layers/tertiary_education.md) - [toilet](./Layers/toilet.md) - [trail](./Layers/trail.md) + - [transit_routes](./Layers/transit_routes.md) + - [transit_stops](./Layers/transit_stops.md) - [tree_node](./Layers/tree_node.md) - [type_node](./Layers/type_node.md) - [veterinary](./Layers/veterinary.md) diff --git a/Docs/Layers/bike_parking.md b/Docs/Layers/bike_parking.md index 0ca5cedf0..08a42bfaa 100644 --- a/Docs/Layers/bike_parking.md +++ b/Docs/Layers/bike_parking.md @@ -27,6 +27,7 @@ A layer showing where you can park your bike - [cyclofix](https://mapcomplete.osm.be/cyclofix) - [personal](https://mapcomplete.osm.be/personal) + - [transit](https://mapcomplete.osm.be/transit) diff --git a/Docs/Layers/dogshop.md b/Docs/Layers/dogshop.md index 3dd700051..eba6f30ca 100644 --- a/Docs/Layers/dogshop.md +++ b/Docs/Layers/dogshop.md @@ -61,7 +61,7 @@ this quick overview is incomplete attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | Multiple choice | [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [hobby](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhobby) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) +[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | [string](../SpecialInputElements.md#string) | [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [hobby](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhobby) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) [](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | [](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | @@ -94,12 +94,16 @@ This is rendered with This shop is called {name} -### shops-type-from-id +### shop_types The question is What kind of shop is this? +This rendering asks information about the property [shop](https://wiki.openstreetmap.org/wiki/Key:shop) + +This is rendered with This is a {shop} + @@ -266,6 +270,8 @@ The question is What kind of shop is this? - Wine Shop corresponds with shop=wine +Only visible if `id~^..*$` is shown + ### opening_hours @@ -360,6 +366,32 @@ The question is Which methods of payment are accepted here? +### copyshop-print-sizes + + + +The question is What paper formats does this shop offer? + + + + + + - This shop can print on papers of size A4 corresponds with service:print:A4=yes + - Unselecting this answer will add service:print:A4=no + - This shop can print on papers of size A3 corresponds with service:print:A3=yes + - Unselecting this answer will add service:print:A3=no + - This shop can print on papers of size A2 corresponds with service:print:A2=yes + - Unselecting this answer will add service:print:A2=no + - This shop can print on papers of size A1 corresponds with service:print:A1=yes + - Unselecting this answer will add service:print:A1=no + - This shop can print on papers of size A0 corresponds with service:print:A0=yes + - Unselecting this answer will add service:print:A0=no + + +Only visible if `shop~^.*copyshop.*$|shop~^.*stationary.*$|service:print=yes` is shown + + + ### questions diff --git a/Docs/Layers/maxspeed.md b/Docs/Layers/maxspeed.md index 60a9fdd1b..5f0a6b96c 100644 --- a/Docs/Layers/maxspeed.md +++ b/Docs/Layers/maxspeed.md @@ -81,6 +81,8 @@ This is rendered with The maximum allowed speed on this road is {maxspeed} + - This is a living street, which has a maxspeed of 20km/h corresponds with highway=living_street&_country!=be + - This option cannot be chosen as answer - This is a living street, which has a maxspeed of 20km/h corresponds with highway=living_street diff --git a/Docs/Layers/parking.md b/Docs/Layers/parking.md index 0f88ff7cb..3f8479bc8 100644 --- a/Docs/Layers/parking.md +++ b/Docs/Layers/parking.md @@ -27,6 +27,7 @@ A layer showing car parkings - [parkings](https://mapcomplete.osm.be/parkings) - [personal](https://mapcomplete.osm.be/personal) + - [transit](https://mapcomplete.osm.be/transit) diff --git a/Docs/Layers/shops.md b/Docs/Layers/shops.md index a3e22cec5..b3f29720b 100644 --- a/Docs/Layers/shops.md +++ b/Docs/Layers/shops.md @@ -5,7 +5,7 @@ - + A shop @@ -62,7 +62,7 @@ this quick overview is incomplete attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | Multiple choice | [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [hobby](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhobby) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) +[](https://taginfo.openstreetmap.org/keys/shop#values) [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | [string](../SpecialInputElements.md#string) | [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [hobby](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhobby) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) [](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | [](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | @@ -95,12 +95,16 @@ This is rendered with This shop is called {name} -### shops-type-from-id +### shop_types The question is What kind of shop is this? +This rendering asks information about the property [shop](https://wiki.openstreetmap.org/wiki/Key:shop) + +This is rendered with This is a {shop} + @@ -267,6 +271,8 @@ The question is What kind of shop is this? - Wine Shop corresponds with shop=wine +Only visible if `id~^..*$` is shown + ### opening_hours @@ -361,6 +367,32 @@ The question is Which methods of payment are accepted here? +### copyshop-print-sizes + + + +The question is What paper formats does this shop offer? + + + + + + - This shop can print on papers of size A4 corresponds with service:print:A4=yes + - Unselecting this answer will add service:print:A4=no + - This shop can print on papers of size A3 corresponds with service:print:A3=yes + - Unselecting this answer will add service:print:A3=no + - This shop can print on papers of size A2 corresponds with service:print:A2=yes + - Unselecting this answer will add service:print:A2=no + - This shop can print on papers of size A1 corresponds with service:print:A1=yes + - Unselecting this answer will add service:print:A1=no + - This shop can print on papers of size A0 corresponds with service:print:A0=yes + - Unselecting this answer will add service:print:A0=no + + +Only visible if `shop~^.*copyshop.*$|shop~^.*stationary.*$|service:print=yes` is shown + + + ### questions diff --git a/Docs/TagInfo/mapcomplete_maxspeed.json b/Docs/TagInfo/mapcomplete_maxspeed.json index aa7bb4b61..c0f4b1602 100644 --- a/Docs/TagInfo/mapcomplete_maxspeed.json +++ b/Docs/TagInfo/mapcomplete_maxspeed.json @@ -84,6 +84,11 @@ "key": "maxspeed", "description": "Layer 'Maxspeed' shows and asks freeform values for key 'maxspeed' (in the MapComplete.osm.be theme 'Maxspeed')" }, + { + "key": "highway", + "description": "Layer 'Maxspeed' shows highway=living_street&_country!=be with a fixed text, namely 'This is a living street, which has a maxspeed of 20km/h' (in the MapComplete.osm.be theme 'Maxspeed')", + "value": "living_street" + }, { "key": "highway", "description": "Layer 'Maxspeed' shows highway=living_street with a fixed text, namely 'This is a living street, which has a maxspeed of 20km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Maxspeed')", diff --git a/Docs/TagInfo/mapcomplete_personal.json b/Docs/TagInfo/mapcomplete_personal.json index 343700b4e..ea728a1b0 100644 --- a/Docs/TagInfo/mapcomplete_personal.json +++ b/Docs/TagInfo/mapcomplete_personal.json @@ -4569,6 +4569,89 @@ "key": "fixme", "description": "Layer 'Defibrillators' shows and asks freeform values for key 'fixme' (in the MapComplete.osm.be theme 'Personal theme')" }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer doctors showing features with this tag", + "value": "doctors" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer doctors showing features with this tag", + "value": "dentist" + }, + { + "key": "healthcare", + "description": "The MapComplete theme Personal theme has a layer doctors showing features with this tag", + "value": "physiotherapist" + }, + { + "key": "image", + "description": "The layer 'doctors allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'doctors allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'doctors allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'doctors allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "opening_hours", + "description": "Layer 'doctors' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'doctors' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'doctors' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'doctors' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:email", + "description": "Layer 'doctors' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'doctors' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:website", + "description": "Layer 'doctors' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows and asks freeform values for key 'healthcare:speciality' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows healthcare:speciality=general with a fixed text, namely 'This is a general practitioner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "general" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows healthcare:speciality=gynaecology with a fixed text, namely 'This is a gynaecologist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "gynaecology" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows healthcare:speciality=psychiatry with a fixed text, namely 'This is a psychiatrist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "psychiatry" + }, + { + "key": "healthcare:speciality", + "description": "Layer 'doctors' shows healthcare:speciality=paediatrics with a fixed text, namely 'This is a paediatrician' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "paediatrics" + }, { "key": "leisure", "description": "The MapComplete theme Personal theme has a layer dog parks showing features with this tag", @@ -5537,6 +5620,39 @@ "key": "start_date", "description": "Layer 'Hackerspace' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'Personal theme')" }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Hospital showing features with this tag", + "value": "hospital" + }, + { + "key": "name", + "description": "Layer 'Hospital' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Hospital' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'Hospital' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Hospital' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:email", + "description": "Layer 'Hospital' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'Hospital' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:website", + "description": "Layer 'Hospital' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, { "key": "emergency", "description": "The MapComplete theme Personal theme has a layer Map of hydrants showing features with this tag", @@ -5840,6 +5956,11 @@ "key": "maxspeed", "description": "Layer 'Maxspeed' shows and asks freeform values for key 'maxspeed' (in the MapComplete.osm.be theme 'Personal theme')" }, + { + "key": "highway", + "description": "Layer 'Maxspeed' shows highway=living_street&_country!=be with a fixed text, namely 'This is a living street, which has a maxspeed of 20km/h' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "living_street" + }, { "key": "highway", "description": "Layer 'Maxspeed' shows highway=living_street with a fixed text, namely 'This is a living street, which has a maxspeed of 20km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", @@ -6171,6 +6292,70 @@ "key": "wikipedia", "description": "The layer 'Parking allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer pharmacy showing features with this tag", + "value": "pharmacy" + }, + { + "key": "image", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "opening_hours", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'pharmacy' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:email", + "description": "Layer 'pharmacy' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:website", + "description": "Layer 'pharmacy' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=yes with a fixed text, namely 'This pharmacy is easy to access on a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=no with a fixed text, namely 'This pharmacy is hard to access on a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=limited with a fixed text, namely 'This pharmacy has limited access for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, { "key": "leisure", "description": "The MapComplete theme Personal theme has a layer Picnic tables showing features with this tag", @@ -6708,6 +6893,50 @@ "description": "Layer 'Recycling' shows opening_hours=24/7 with a fixed text, namely '24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", "value": "24/7" }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Shelter showing features with this tag", + "value": "shelter" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows and asks freeform values for key 'shelter_type' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=public_transport with a fixed text, namely 'This is a shelter at a public transport stop.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "public_transport" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=picnic_shelter with a fixed text, namely 'This is a shelter protecting from rain at a picnic site.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "picnic_shelter" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=gazebo with a fixed text, namely 'This is a gazebo.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "gazebo" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=weather_shelter with a fixed text, namely 'This is a small shelter, primarily intended for short breaks. Usually found in the mountains or alongside roads.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "weather_shelter" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=lean_to with a fixed text, namely 'This is a shed with 3 walls, primarily intended for camping.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "lean_to" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=pavilion with a fixed text, namely 'This is a pavilion' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pavilion" + }, + { + "key": "shelter_type", + "description": "Layer 'Shelter' shows shelter_type=basic_hut with a fixed text, namely 'This is a basic hut, providing basic shelter and sleeping facilities.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "basic_hut" + }, { "key": "shop", "description": "The MapComplete theme Personal theme has a layer Shop showing features with this tag" @@ -6732,6 +6961,10 @@ "key": "name", "description": "Layer 'Shop' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" }, + { + "key": "shop", + "description": "Layer 'Shop' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'Personal theme')" + }, { "key": "shop", "description": "Layer 'Shop' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", @@ -7570,6 +7803,31 @@ "description": "Layer 'Shop' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", "value": "yes" }, + { + "key": "service:print:A4", + "description": "Layer 'Shop' shows service:print:A4=yes with a fixed text, namely 'This shop can print on papers of size A4' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:print:A3", + "description": "Layer 'Shop' shows service:print:A3=yes with a fixed text, namely 'This shop can print on papers of size A3' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:print:A2", + "description": "Layer 'Shop' shows service:print:A2=yes with a fixed text, namely 'This shop can print on papers of size A2' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:print:A1", + "description": "Layer 'Shop' shows service:print:A1=yes with a fixed text, namely 'This shop can print on papers of size A1' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:print:A0", + "description": "Layer 'Shop' shows service:print:A0=yes with a fixed text, namely 'This shop can print on papers of size A0' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, { "key": "leisure", "description": "The MapComplete theme Personal theme has a layer Sport pitches showing features with this tag", @@ -8268,6 +8526,194 @@ "key": "description", "description": "Layer 'Toilets' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Personal theme')" }, + { + "key": "type", + "description": "The MapComplete theme Personal theme has a layer Bus lines showing features with this tag", + "value": "route" + }, + { + "key": "route", + "description": "The MapComplete theme Personal theme has a layer Bus lines showing features with this tag", + "value": "bus" + }, + { + "key": "name", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "from", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'from' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "via", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'via' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "to", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'to' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "colour", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'colour' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "network", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'network' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "operator", + "description": "Layer 'Bus lines' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Transit Stops showing features with this tag", + "value": "bus_stop" + }, + { + "key": "name", + "description": "Layer 'Transit Stops' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "noname", + "description": "Layer 'Transit Stops' shows noname=yes with a fixed text, namely 'This stop has no name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "name", + "description": "Layer 'Transit Stops' shows noname=yes with a fixed text, namely 'This stop has no name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key name.", + "value": "" + }, + { + "key": "image", + "description": "The layer 'Transit Stops allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Transit Stops allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Transit Stops allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Transit Stops allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "shelter", + "description": "Layer 'Transit Stops' shows shelter=yes with a fixed text, namely 'This stop has a shelter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "shelter", + "description": "Layer 'Transit Stops' shows shelter=no with a fixed text, namely 'This stop does not have a shelter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "shelter", + "description": "Layer 'Transit Stops' shows shelter=separate with a fixed text, namely 'This stop has a shelter, that's separately mapped' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "separate" + }, + { + "key": "bench", + "description": "Layer 'Transit Stops' shows bench=yes with a fixed text, namely 'This stop has a bench' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "bench", + "description": "Layer 'Transit Stops' shows bench=no with a fixed text, namely 'This stop does not have a bench' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "bench", + "description": "Layer 'Transit Stops' shows bench=separate with a fixed text, namely 'This stop has a bench, that's separately mapped' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "separate" + }, + { + "key": "bin", + "description": "Layer 'Transit Stops' shows bin=yes with a fixed text, namely 'This stop has a bin' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "bin", + "description": "Layer 'Transit Stops' shows bin=no with a fixed text, namely 'This stop does not have a bin' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "bin", + "description": "Layer 'Transit Stops' shows bin=separate with a fixed text, namely 'This stop has a bin, that's separately mapped' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "separate" + }, + { + "key": "wheelchair", + "description": "Layer 'Transit Stops' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "designated" + }, + { + "key": "wheelchair", + "description": "Layer 'Transit Stops' shows wheelchair=yes with a fixed text, namely 'This place is easily reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'Transit Stops' shows wheelchair=limited with a fixed text, namely 'It is possible to reach this place in a wheelchair, but it is not easy' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, + { + "key": "wheelchair", + "description": "Layer 'Transit Stops' shows wheelchair=no with a fixed text, namely 'This place is not reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Transit Stops' shows tactile_paving=yes with a fixed text, namely 'This stop has tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Transit Stops' shows tactile_paving=no with a fixed text, namely 'This stop does not have tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "lit", + "description": "Layer 'Transit Stops' shows lit=yes with a fixed text, namely 'This stop is lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "lit", + "description": "Layer 'Transit Stops' shows lit=no with a fixed text, namely 'This stop is not lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=yes with a fixed text, namely 'This stop has a departures board of unknown type' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=realtime with a fixed text, namely 'This stop has a board showing realtime departure information' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "realtime" + }, + { + "key": "passenger_information_display", + "description": "Layer 'Transit Stops' shows passenger_information_display=yes with a fixed text, namely 'This stop has a board showing realtime departure information' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=timetable with a fixed text, namely 'This stop has a timetable showing regular departures' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "timetable" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=interval with a fixed text, namely 'This stop has a timetable containing just the interval between departures' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "interval" + }, + { + "key": "departures_board", + "description": "Layer 'Transit Stops' shows departures_board=no with a fixed text, namely 'This stop does not have a departures board' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, { "key": "natural", "description": "The MapComplete theme Personal theme has a layer Tree showing features with this tag", diff --git a/Docs/TagInfo/mapcomplete_pets.json b/Docs/TagInfo/mapcomplete_pets.json index 125b76155..2872218ae 100644 --- a/Docs/TagInfo/mapcomplete_pets.json +++ b/Docs/TagInfo/mapcomplete_pets.json @@ -476,6 +476,10 @@ "key": "name", "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" }, + { + "key": "shop", + "description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')" + }, { "key": "shop", "description": "Layer 'Dog-friendly shops' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", @@ -1314,6 +1318,31 @@ "description": "Layer 'Dog-friendly shops' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", "value": "yes" }, + { + "key": "service:print:A4", + "description": "Layer 'Dog-friendly shops' shows service:print:A4=yes with a fixed text, namely 'This shop can print on papers of size A4' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "yes" + }, + { + "key": "service:print:A3", + "description": "Layer 'Dog-friendly shops' shows service:print:A3=yes with a fixed text, namely 'This shop can print on papers of size A3' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "yes" + }, + { + "key": "service:print:A2", + "description": "Layer 'Dog-friendly shops' shows service:print:A2=yes with a fixed text, namely 'This shop can print on papers of size A2' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "yes" + }, + { + "key": "service:print:A1", + "description": "Layer 'Dog-friendly shops' shows service:print:A1=yes with a fixed text, namely 'This shop can print on papers of size A1' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "yes" + }, + { + "key": "service:print:A0", + "description": "Layer 'Dog-friendly shops' shows service:print:A0=yes with a fixed text, namely 'This shop can print on papers of size A0' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "yes" + }, { "key": "amenity", "description": "The MapComplete theme Veterinarians, dog parks and other pet-amenities has a layer veterinary showing features with this tag", diff --git a/Docs/TagInfo/mapcomplete_shops.json b/Docs/TagInfo/mapcomplete_shops.json index 8d07b36e3..409f381f6 100644 --- a/Docs/TagInfo/mapcomplete_shops.json +++ b/Docs/TagInfo/mapcomplete_shops.json @@ -34,6 +34,10 @@ "key": "name", "description": "Layer 'Shop' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Open Shop Map')" }, + { + "key": "shop", + "description": "Layer 'Shop' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, { "key": "shop", "description": "Layer 'Shop' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", @@ -871,6 +875,95 @@ "key": "payment:cards", "description": "Layer 'Shop' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", "value": "yes" + }, + { + "key": "service:print:A4", + "description": "Layer 'Shop' shows service:print:A4=yes with a fixed text, namely 'This shop can print on papers of size A4' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "service:print:A3", + "description": "Layer 'Shop' shows service:print:A3=yes with a fixed text, namely 'This shop can print on papers of size A3' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "service:print:A2", + "description": "Layer 'Shop' shows service:print:A2=yes with a fixed text, namely 'This shop can print on papers of size A2' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "service:print:A1", + "description": "Layer 'Shop' shows service:print:A1=yes with a fixed text, namely 'This shop can print on papers of size A1' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "service:print:A0", + "description": "Layer 'Shop' shows service:print:A0=yes with a fixed text, namely 'This shop can print on papers of size A0' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "amenity", + "description": "The MapComplete theme Open Shop Map has a layer pharmacy showing features with this tag", + "value": "pharmacy" + }, + { + "key": "image", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'pharmacy allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "opening_hours", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "phone", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "contact:phone", + "description": "Layer 'pharmacy' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "email", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "contact:email", + "description": "Layer 'pharmacy' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "website", + "description": "Layer 'pharmacy' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "contact:website", + "description": "Layer 'pharmacy' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Open Shop Map')" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=yes with a fixed text, namely 'This pharmacy is easy to access on a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=no with a fixed text, namely 'This pharmacy is hard to access on a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "no" + }, + { + "key": "wheelchair", + "description": "Layer 'pharmacy' shows wheelchair=limited with a fixed text, namely 'This pharmacy has limited access for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "limited" } ] } \ No newline at end of file diff --git a/assets/contributors.json b/assets/contributors.json index d64759d47..58241c2d0 100644 --- a/assets/contributors.json +++ b/assets/contributors.json @@ -1,11 +1,11 @@ { "contributors": [ { - "commits": 4054, + "commits": 4109, "contributor": "Pieter Vander Vennet" }, { - "commits": 103, + "commits": 112, "contributor": "Robin van der Linde" }, { @@ -124,6 +124,10 @@ "commits": 5, "contributor": "David Haberthür" }, + { + "commits": 4, + "contributor": "AlexanderRebai" + }, { "commits": 4, "contributor": "OliNau" @@ -148,6 +152,10 @@ "commits": 3, "contributor": "Léo Villeveygoux" }, + { + "commits": 2, + "contributor": "Andrews Leruth" + }, { "commits": 2, "contributor": "pdassori" diff --git a/assets/layers/bench/bench.json b/assets/layers/bench/bench.json index ea2062d4f..851a43b84 100644 --- a/assets/layers/bench/bench.json +++ b/assets/layers/bench/bench.json @@ -711,7 +711,7 @@ } ], "description": { - "nl": "Deze laag toont zitbanken en enkele vragen over deze zitbanken", + "nl": "Een zitbank is een houten, metalen, stenen, … oppervlak waar een mens kan zitten. Deze laag toont ze en stelt er enkele vragen over.", "en": "A bench is a wooden, metal, stone, … surface where a human can sit. This layers visualises them and asks a few questions about them.", "fr": "Un banc est une surface en bois, métal, pierre… sur laquelle un humain peut s'asseoir. Cette couche permet de les visualiser et pose des questions à leur sujet.", "de": "Diese Karte stellt Sitzbänke aus Holz, Metall, Stein, … dar und stellt ein paar Fragen, um weitere Informationen zu ergänzen.", diff --git a/assets/layers/climbing_area/climbing_area.json b/assets/layers/climbing_area/climbing_area.json index ab75354ba..ffa386cbb 100644 --- a/assets/layers/climbing_area/climbing_area.json +++ b/assets/layers/climbing_area/climbing_area.json @@ -141,7 +141,8 @@ "en": "

    Contains {_contained_climbing_routes_count} routes

      {_contained_climbing_routes}
    ", "fr": "

    Contient {_contained_climbing_routes_count} voies

      {_contained_climbing_routes}
    ", "it": "

    Contiene {_contained_climbing_routes_count} vie

      {_contained_climbing_routes}
    ", - "de": "

    Enthält {_contained_climbing_routes_count} Routen

      {_contained_climbing_routes}
    " + "de": "

    Enthält {_contained_climbing_routes_count} Routen

      {_contained_climbing_routes}
    ", + "nl": "

    Bevat {_contained_climbing_routes_count} routes

      {_contained_climbing_routes}
    " }, "condition": "_contained_climbing_routes~*", "id": "Contained_climbing_routes" diff --git a/assets/layers/climbing_opportunity/climbing_opportunity.json b/assets/layers/climbing_opportunity/climbing_opportunity.json index 107ec35ab..ecdba430b 100644 --- a/assets/layers/climbing_opportunity/climbing_opportunity.json +++ b/assets/layers/climbing_opportunity/climbing_opportunity.json @@ -66,7 +66,8 @@ "ja": "ここで登坂はできますか?", "nb_NO": "Er klatring mulig her?", "fr": "Est-il possible d’escalader ici ?", - "it": "È possibile arrampicarsi qua?" + "it": "È possibile arrampicarsi qua?", + "nl": "Is klimmen hier mogelijk?" }, "mappings": [ { diff --git a/assets/layers/food/food.json b/assets/layers/food/food.json index 7289dfe15..107503c96 100644 --- a/assets/layers/food/food.json +++ b/assets/layers/food/food.json @@ -792,7 +792,8 @@ "question": { "en": "Accepts cash", "de": "Akzeptiert Bargeld", - "es": "Acepta efectivo" + "es": "Acepta efectivo", + "nl": "Accepteert cash" } } ] @@ -805,7 +806,8 @@ "question": { "en": "Accepts payment cards", "de": "Akzeptiert Kartenzahlung", - "es": "Acepta tarjetas de pago" + "es": "Acepta tarjetas de pago", + "nl": "Accepteert betaalkaarten" } } ] diff --git a/assets/layers/maxspeed/maxspeed.json b/assets/layers/maxspeed/maxspeed.json index dbf5d65f9..ca0ff2dcb 100644 --- a/assets/layers/maxspeed/maxspeed.json +++ b/assets/layers/maxspeed/maxspeed.json @@ -42,20 +42,23 @@ "if": "name=", "then": { "en": "Road without a name", - "de": "Straße ohne Namen" + "de": "Straße ohne Namen", + "nl": "Weg zonder een naam" } } ] }, "description": { "en": "Shows the allowed speed for every road", - "de": "Zeigt die zulässige Geschwindigkeit für jede Straße an" + "de": "Zeigt die zulässige Geschwindigkeit für jede Straße an", + "nl": "Toont de toegestane snelheid voor elke weg" }, "tagRenderings": [ { "render": { "en": "The maximum allowed speed on this road is {maxspeed}", - "de": "Die zulässige Höchstgeschwindigkeit auf dieser Straße ist {maxspeed}" + "de": "Die zulässige Höchstgeschwindigkeit auf dieser Straße ist {maxspeed}", + "nl": "De maximum toegestane snelheid op deze weg is {maxspeed}" }, "question": { "es": "Qué velocidad tiene", @@ -70,10 +73,15 @@ "mappings": [ { "if": { - "and":["highway=living_street","_country!=be"] + "and": [ + "highway=living_street", + "_country!=be" + ] }, "then": { - "en": "This is a living street" + "en": "This is a living street, which has a maxspeed of 20km/h", + "de": "Dies ist eine Wohnstraße, auf der eine Höchstgeschwindigkeit von 20 km/h gilt", + "nl": "Dit is een woonerf en heeft dus een maximale snelheid van 20km/h" }, "icon": { "path": "./assets/layers/maxspeed/living_street_be.svg", diff --git a/assets/layers/shops/shops.json b/assets/layers/shops/shops.json index dd8538c8f..341fd4c0d 100644 --- a/assets/layers/shops/shops.json +++ b/assets/layers/shops/shops.json @@ -107,11 +107,13 @@ "nl": "Wat voor soort winkel is dit?" }, "render": { - "en":"This is a {shop}" + "en": "This is a {shop}" }, "freeform": { "key": "shop", - "addExtraTags": ["fixme=freeform shop key used, to be reviewed"] + "addExtraTags": [ + "fixme=freeform shop key used, to be reviewed" + ] } } }, diff --git a/assets/translators.json b/assets/translators.json index b57c1c805..fcdb0e6e0 100644 --- a/assets/translators.json +++ b/assets/translators.json @@ -46,11 +46,11 @@ }, { "commits": 18, - "contributor": "Reza Almanda" + "contributor": "Robin van der Linde" }, { - "commits": 17, - "contributor": "Robin van der Linde" + "commits": 18, + "contributor": "Reza Almanda" }, { "commits": 16, diff --git a/langs/layers/de.json b/langs/layers/de.json index 525455f6d..2d686ca62 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -4276,6 +4276,9 @@ "mappings": { "0": { "then": "Dies ist eine Wohnstraße, auf der eine Höchstgeschwindigkeit von 20 km/h gilt" + }, + "1": { + "then": "Dies ist eine Wohnstraße, auf der eine Höchstgeschwindigkeit von 20 km/h gilt" } }, "question": "Wie hoch ist die zulässige Höchstgeschwindigkeit, die man auf dieser Straße fahren darf?", @@ -5281,9 +5284,6 @@ "tagRenderings": { "shops-name": { "question": "Wie ist der Name dieses Geschäfts?" - }, - "shops-type-from-id": { - "question": "Was ist das für ein Geschäft?" } }, "title": { diff --git a/langs/layers/en.json b/langs/layers/en.json index 0b3b8a767..6ddb00990 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -4342,6 +4342,9 @@ "mappings": { "0": { "then": "This is a living street, which has a maxspeed of 20km/h" + }, + "1": { + "then": "This is a living street, which has a maxspeed of 20km/h" } }, "question": "What is the legal maximum speed one is allowed to drive on this road?", @@ -5402,7 +5405,8 @@ "tagRenderings": { "2": { "override": { - "question": "What kind of shop is this?" + "question": "What kind of shop is this?", + "render": "This is a {shop}" } }, "copyshop-print-sizes": { diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 9613c44f3..db44efd9a 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -2438,6 +2438,9 @@ "Contained routes length hist": { "render": "

    Overzicht van lengtes

    {histogram(_length_hist)}" }, + "Contained_climbing_routes": { + "render": "

    Bevat {_contained_climbing_routes_count} routes

      {_contained_climbing_routes}
    " + }, "Rock type (crag/rock/cliff only)": { "mappings": { "0": { @@ -2455,9 +2458,6 @@ }, "question": "Wat is de naam van dit Klimgelegenheid?", "render": "{name}" - }, - "Contained_climbing_routes": { - "render": "

    Bevat {_contained_climbing_routes_count} routes

      {_contained_climbing_routes}
    " } }, "title": { @@ -4182,16 +4182,27 @@ } }, "maxspeed": { + "description": "Toont de toegestane snelheid voor elke weg", "tagRenderings": { "maxspeed-maxspeed": { "mappings": { "0": { "then": "Dit is een woonerf en heeft dus een maximale snelheid van 20km/h" + }, + "1": { + "then": "Dit is een woonerf en heeft dus een maximale snelheid van 20km/h" } }, "render": "De maximum toegestane snelheid op deze weg is {maxspeed}" } }, + "title": { + "mappings": { + "0": { + "then": "Weg zonder een naam" + } + } + }, "units": { "0": { "applicableUnits": { @@ -4205,14 +4216,6 @@ } } } - }, - "description": "Toont de toegestane snelheid voor elke weg", - "title": { - "mappings": { - "0": { - "then": "Weg zonder een naam" - } - } } }, "nature_reserve": { @@ -6431,4 +6434,4 @@ } } } -} +} \ No newline at end of file From aef6bece49fa1c8b2db2867d2b9bb34d9aad150d Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Mon, 11 Jul 2022 11:09:25 +0200 Subject: [PATCH 59/71] Attempt to fix import flow --- UI/ImportFlow/ConflationChecker.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/UI/ImportFlow/ConflationChecker.ts b/UI/ImportFlow/ConflationChecker.ts index 88c394bf8..e64a75342 100644 --- a/UI/ImportFlow/ConflationChecker.ts +++ b/UI/ImportFlow/ConflationChecker.ts @@ -80,6 +80,8 @@ export default class ConflationChecker extends Combine implements FlowStep<{ fea if (v !== undefined && v !== null) { console.log("Loaded from local storage:", v) overpassStatus.setData("cached") + }else{ + loadDataFromOverpass() } } }); From a0096f9bd6fe5788aa2d491320f792db94c44a7d Mon Sep 17 00:00:00 2001 From: AlexanderRebai Date: Mon, 11 Jul 2022 09:34:46 +0000 Subject: [PATCH 60/71] able to add name of the doctors office --- assets/layers/doctors/doctors.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/assets/layers/doctors/doctors.json b/assets/layers/doctors/doctors.json index e69fb27a4..e1d2037ae 100644 --- a/assets/layers/doctors/doctors.json +++ b/assets/layers/doctors/doctors.json @@ -38,6 +38,16 @@ "phone", "email", "website", + { + "question": { + "en": "What is the name of this doctors place?" + }, + "render": "This doctors place is called {name}", + "freeform": { + "key": "name" + }, + "id": "name" + }, { "condition": "amenity=doctors", "id": "specialty", From a4bb29516a84228c3880d13e520df37df8fe5398 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Mon, 11 Jul 2022 12:00:55 +0200 Subject: [PATCH 61/71] Fix typing error in import flow --- UI/ImportFlow/CompareToAlreadyExistingNotes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/ImportFlow/CompareToAlreadyExistingNotes.ts b/UI/ImportFlow/CompareToAlreadyExistingNotes.ts index 3be0f1991..8cf334660 100644 --- a/UI/ImportFlow/CompareToAlreadyExistingNotes.ts +++ b/UI/ImportFlow/CompareToAlreadyExistingNotes.ts @@ -93,7 +93,7 @@ export class CompareToAlreadyExistingNotes extends Combine implements FlowStep<{ state, zoomToFeatures: true, leafletMap: comparisonMap.leafletMap, - features: new StaticFeatureSource(partitionedImportPoints.map(p => p.hasNearby)), + features: StaticFeatureSource.fromGeojsonStore(partitionedImportPoints.map(p => p.hasNearby)), popup: (tags, layer) => new FeatureInfoBox(tags, layer, state) }) From 3cf5bd8dc601d870d3578625803662531ba3475f Mon Sep 17 00:00:00 2001 From: AlexanderRebai Date: Mon, 11 Jul 2022 11:45:09 +0000 Subject: [PATCH 62/71] Created a first version for onWheels layer --- assets/layers/doctors/license_info.json | 10 +++++ .../mapcomplete-changes.json | 4 ++ assets/themes/onwheels/crest.svg | 12 ++++++ assets/themes/onwheels/license_info.json | 10 +++++ assets/themes/onwheels/onwheels.json | 40 +++++++++++++++++++ 5 files changed, 76 insertions(+) create mode 100644 assets/themes/onwheels/crest.svg create mode 100644 assets/themes/onwheels/license_info.json create mode 100644 assets/themes/onwheels/onwheels.json diff --git a/assets/layers/doctors/license_info.json b/assets/layers/doctors/license_info.json index 90889fdc6..cc0457d85 100644 --- a/assets/layers/doctors/license_info.json +++ b/assets/layers/doctors/license_info.json @@ -1,4 +1,14 @@ [ + { + "path": "dentist.svg", + "license": "CC0", + "authors": [ + "OSM Carto" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Dentist-14.svg" + ] + }, { "path": "doctors.svg", "license": "cc0", diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index 8fc630f67..e618af73b 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -243,6 +243,10 @@ "if": "theme=observation_towers", "then": "./assets/layers/observation_tower/Tower_observation.svg" }, + { + "if": "theme=onwheels", + "then": "./assets/themes/onwheels/crest.svg" + }, { "if": "theme=openwindpowermap", "then": "./assets/themes/openwindpowermap/logo.svg" diff --git a/assets/themes/onwheels/crest.svg b/assets/themes/onwheels/crest.svg new file mode 100644 index 000000000..5f23194f7 --- /dev/null +++ b/assets/themes/onwheels/crest.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/themes/onwheels/license_info.json b/assets/themes/onwheels/license_info.json new file mode 100644 index 000000000..9f2dcf81a --- /dev/null +++ b/assets/themes/onwheels/license_info.json @@ -0,0 +1,10 @@ +[ + { + "path": "crest.svg", + "license": "CC0", + "authors": [ + "Free Wheelies" + ], + "sources": [] + } +] \ No newline at end of file diff --git a/assets/themes/onwheels/onwheels.json b/assets/themes/onwheels/onwheels.json new file mode 100644 index 000000000..822a75349 --- /dev/null +++ b/assets/themes/onwheels/onwheels.json @@ -0,0 +1,40 @@ +{ + "id": "onwheels", + "title": { + "en": "OnWheels" + }, + "description": { + "en": "On this map, publicly weelchair accessible places are shown and can be easily added" + }, + "maintainer": "MapComplete", + "icon": "./assets/themes/onwheels/crest.svg", + "version": "0", + "startLat": 50.8465573, + "defaultBackgroundId": "CartoDB.Voyager", + "startLon": 4.351697, + "startZoom": 16, + "widenFactor": 2, + "layers": [ + "bike_repair_station", + "bike_shop", + "cafe_pub", + "entrance", + "food", + "kerbs", + "parking", + "picnic_table", + "school", + "shops", + "toilet", + "viewpoint", + "doctors" + ], + "overrideAll" : { + "minZoom" : "15", + "mapRendering" : [ + { + "label" : null + } + ] + } +} \ No newline at end of file From bfdc1056a0d8034f49e3a72c89769fefc8153ede Mon Sep 17 00:00:00 2001 From: AlexanderRebai Date: Mon, 11 Jul 2022 14:06:37 +0000 Subject: [PATCH 63/71] fixed language english and crest background --- assets/layers/doctors/doctors.json | 4 +++- assets/themes/onwheels/crest.svg | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/assets/layers/doctors/doctors.json b/assets/layers/doctors/doctors.json index e1d2037ae..236d13c54 100644 --- a/assets/layers/doctors/doctors.json +++ b/assets/layers/doctors/doctors.json @@ -42,7 +42,9 @@ "question": { "en": "What is the name of this doctors place?" }, - "render": "This doctors place is called {name}", + "render": { + "en": "This doctors place is called {name}" + }, "freeform": { "key": "name" }, diff --git a/assets/themes/onwheels/crest.svg b/assets/themes/onwheels/crest.svg index 5f23194f7..383b543b1 100644 --- a/assets/themes/onwheels/crest.svg +++ b/assets/themes/onwheels/crest.svg @@ -1,5 +1,4 @@ - @@ -7,6 +6,6 @@ - + From 3a682970bfa4866fa53ef0c813f030cb21a032e1 Mon Sep 17 00:00:00 2001 From: bxl-forever Date: Mon, 11 Jul 2022 20:48:19 +0200 Subject: [PATCH 64/71] New feature request: rainbow-crossings --- .../rainbow_crossings/rainbow_crossings.json | 77 +++++++++++++++++++ .../rainbow_crossings/license_info.json | 10 +++ assets/themes/rainbow_crossings/logo.svg | 12 +++ .../rainbow_crossings/rainbow_crossings.json | 22 ++++++ 4 files changed, 121 insertions(+) create mode 100644 assets/layers/rainbow_crossings/rainbow_crossings.json create mode 100644 assets/themes/rainbow_crossings/license_info.json create mode 100644 assets/themes/rainbow_crossings/logo.svg create mode 100644 assets/themes/rainbow_crossings/rainbow_crossings.json diff --git a/assets/layers/rainbow_crossings/rainbow_crossings.json b/assets/layers/rainbow_crossings/rainbow_crossings.json new file mode 100644 index 000000000..9e8179c20 --- /dev/null +++ b/assets/layers/rainbow_crossings/rainbow_crossings.json @@ -0,0 +1,77 @@ +{ + "id": "rainbow_crossings", + "name": { + "en": "Crossings with rainbow paintings" + }, + "description": { + "en": "Crossings with decorative rainbow paintings" + }, + "source": { + "osmTags": { + "highway=crossing" + } + }, + "minzoom": 17, + "title": { + "render": { + "en": "Crossing" + } + }, + "presets": [ + { + "title": { + "en": "a crossing" + }, + "tags": [ + "highway=crossing" + ], + "description": { + "en": "Pedestrian crossing" + }, + "preciseInput": { + "preferredBackground": [ + "photo" + ], + "snapToLayer": "cycleways_and_roads", + "maxSnapDistance": 25 + } + }, + "tagRenderings": [ + { + "id": "crossing-with-rainbow", + "question": { + "en": "Does this crossing has rainbow paintings?" + }, + "condition": "highway=crossing", + "mappings": [ + { + "if": "crossing:marking=rainbow", + "then": { + "en": "This crossing has rainbow paintings" + } + }, + { + "if": "crossing:marking!=rainbow", + "then": { + "en": "No rainbow paintings here" + } + } + ] + } + ], + "mapRendering": [ + { + "icon": { + "render": "./assets/themes/rainbow_crossings/logo.svg" + }, + "iconSize": "40,40,bottom", + "location": [ + "point", + "centroid" + ] + } + ], + "description": { + "en": "A layer showing pedestrian crossings with rainbow paintings" + } +} diff --git a/assets/themes/rainbow_crossings/license_info.json b/assets/themes/rainbow_crossings/license_info.json new file mode 100644 index 000000000..1e701de22 --- /dev/null +++ b/assets/themes/rainbow_crossings/license_info.json @@ -0,0 +1,10 @@ +[ + { + "path": "logo.svg", + "license": "CC0", + "authors": [ + "bxl-forever" + ], + "sources": [] + } +] diff --git a/assets/themes/rainbow_crossings/logo.svg b/assets/themes/rainbow_crossings/logo.svg new file mode 100644 index 000000000..a5cd70668 --- /dev/null +++ b/assets/themes/rainbow_crossings/logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/themes/rainbow_crossings/rainbow_crossings.json b/assets/themes/rainbow_crossings/rainbow_crossings.json new file mode 100644 index 000000000..84602a67f --- /dev/null +++ b/assets/themes/rainbow_crossings/rainbow_crossings.json @@ -0,0 +1,22 @@ +{ + "id": "rainbow_crossings", + "title": { + "en": "Rainbow pedestrian crossings" + }, + "description": { + "en": "On this map, rainbow-painted pedestrian crossings are shown and can be easily added" + }, + "maintainer": "", + "icon": "./assets/themes/rainbow_crossings/logo.svg", + "version": "0", + "startLat": 50.8465573, + "defaultBackgroundId": "CartoDB.Voyager", + "startLon": 4.351697, + "startZoom": 16, + "widenFactor": 2, + "layers": [ + "rainbow_crossings" + ] +} + + From 441d8467fe09f0ee4842c40965cd36cf676521f8 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 12 Jul 2022 10:23:45 +0200 Subject: [PATCH 65/71] Fix rainbox theme and add improvements --- Customizations/AllKnownLayouts.ts | 2 +- Models/ThemeConfig/LayerConfig.ts | 3 + Models/ThemeConfig/TagRenderingConfig.ts | 6 +- .../rainbow_crossings/rainbow_crossings.json | 39 +++++++---- .../mapcomplete-changes.json | 4 ++ assets/themes/rainbow_crossings/crossing.svg | 66 +++++++++++++++++++ .../rainbow_crossings/license_info.json | 10 ++- .../rainbow_crossings/rainbow_crossings.json | 23 ++++++- 8 files changed, 135 insertions(+), 18 deletions(-) create mode 100644 assets/themes/rainbow_crossings/crossing.svg diff --git a/Customizations/AllKnownLayouts.ts b/Customizations/AllKnownLayouts.ts index 82e969564..3bfa56f93 100644 --- a/Customizations/AllKnownLayouts.ts +++ b/Customizations/AllKnownLayouts.ts @@ -19,7 +19,7 @@ export class AllKnownLayouts { public static AllPublicLayers(options?: { includeInlineLayers:true | boolean - }) { + }) : LayerConfig[] { const allLayers: LayerConfig[] = [] const seendIds = new Set() AllKnownLayouts.sharedLayers.forEach((layer, key) => { diff --git a/Models/ThemeConfig/LayerConfig.ts b/Models/ThemeConfig/LayerConfig.ts index 4779f5ebc..0582c57ac 100644 --- a/Models/ThemeConfig/LayerConfig.ts +++ b/Models/ThemeConfig/LayerConfig.ts @@ -191,6 +191,9 @@ export default class LayerConfig extends WithContextLoader { this.doNotDownload = json.doNotDownload ?? false; this.passAllFeatures = json.passAllFeatures ?? false; this.minzoom = json.minzoom ?? 0; + if(json["minZoom"] !== undefined){ + throw "At "+context+": minzoom is written all lowercase" + } this.minzoomVisible = json.minzoomVisible ?? this.minzoom; this.shownByDefault = json.shownByDefault ?? true; this.forceLoad = json.forceLoad ?? false; diff --git a/Models/ThemeConfig/TagRenderingConfig.ts b/Models/ThemeConfig/TagRenderingConfig.ts index 67141780b..656d880de 100644 --- a/Models/ThemeConfig/TagRenderingConfig.ts +++ b/Models/ThemeConfig/TagRenderingConfig.ts @@ -364,7 +364,7 @@ export default class TagRenderingConfig { * Returns true if it is known or not shown, false if the question should be asked * @constructor */ - public IsKnown(tags: any): boolean { + public IsKnown(tags: Record): boolean { if (this.condition && !this.condition.matchesProperties(tags)) { // Filtered away by the condition, so it is kindof known @@ -400,7 +400,7 @@ export default class TagRenderingConfig { * @param tags * @constructor */ - public GetRenderValues(tags: any): { then: Translation, icon?: string, iconClass?: string }[] { + public GetRenderValues(tags: Record): { then: Translation, icon?: string, iconClass?: string }[] { if (!this.multiAnswer) { return [this.GetRenderValueWithImage(tags)] } @@ -410,7 +410,7 @@ export default class TagRenderingConfig { let freeformKeyDefined = this.freeform?.key !== undefined; let usedFreeformValues = new Set() // We run over all the mappings first, to check if the mapping matches - const applicableMappings: { then: TypedTranslation, img?: string }[] = Utils.NoNull((this.mappings ?? [])?.map(mapping => { + const applicableMappings: { then: TypedTranslation>, img?: string }[] = Utils.NoNull((this.mappings ?? [])?.map(mapping => { if (mapping.if === undefined) { return mapping; } diff --git a/assets/layers/rainbow_crossings/rainbow_crossings.json b/assets/layers/rainbow_crossings/rainbow_crossings.json index 9e8179c20..35c99d8d9 100644 --- a/assets/layers/rainbow_crossings/rainbow_crossings.json +++ b/assets/layers/rainbow_crossings/rainbow_crossings.json @@ -4,12 +4,11 @@ "en": "Crossings with rainbow paintings" }, "description": { - "en": "Crossings with decorative rainbow paintings" + "en": "A layer showing pedestrian crossings with rainbow paintings" }, "source": { - "osmTags": { + "osmTags": "highway=crossing" - } }, "minzoom": 17, "title": { @@ -35,9 +34,11 @@ "snapToLayer": "cycleways_and_roads", "maxSnapDistance": 25 } - }, + } + ], "tagRenderings": [ - { + "images", + { "id": "crossing-with-rainbow", "question": { "en": "Does this crossing has rainbow paintings?" @@ -48,13 +49,26 @@ "if": "crossing:marking=rainbow", "then": { "en": "This crossing has rainbow paintings" + }, + "icon": { + "path": "./assets/themes/rainbow_crossings/logo.svg", + "class": "medium" } }, + { + "if": "not:crossing:marking=rainbow", + "then": { + "en": "No rainbow paintings here" + }, + "icon": "./assets/themes/rainbow_crossings/crossing.svg" + }, { "if": "crossing:marking!=rainbow", "then": { "en": "No rainbow paintings here" - } + }, + "icon": "./assets/themes/rainbow_crossings/crossing.svg", + "hideInAnswer": true } ] } @@ -62,16 +76,17 @@ "mapRendering": [ { "icon": { - "render": "./assets/themes/rainbow_crossings/logo.svg" + "render": "./assets/themes/rainbow_crossings/crossing.svg", + "mappings": [{ + "if": "crossing:marking=rainbow", + "then": "./assets/themes/rainbow_crossings/logo.svg" + }] }, - "iconSize": "40,40,bottom", + "iconSize": "40,40,center", "location": [ "point", "centroid" ] } - ], - "description": { - "en": "A layer showing pedestrian crossings with rainbow paintings" - } + ] } diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index db1b9bd23..60452cb5b 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -279,6 +279,10 @@ "if": "theme=postboxes", "then": "./assets/themes/postboxes/postbox.svg" }, + { + "if": "theme=rainbow_crossings", + "then": "./assets/themes/rainbow_crossings/logo.svg" + }, { "if": "theme=shops", "then": "./assets/themes/shops/shop.svg" diff --git a/assets/themes/rainbow_crossings/crossing.svg b/assets/themes/rainbow_crossings/crossing.svg new file mode 100644 index 000000000..37304af0f --- /dev/null +++ b/assets/themes/rainbow_crossings/crossing.svg @@ -0,0 +1,66 @@ + + + + + + + + + diff --git a/assets/themes/rainbow_crossings/license_info.json b/assets/themes/rainbow_crossings/license_info.json index 1e701de22..ff2acdfd7 100644 --- a/assets/themes/rainbow_crossings/license_info.json +++ b/assets/themes/rainbow_crossings/license_info.json @@ -1,4 +1,12 @@ [ + { + "path": "crossing.svg", + "license": "CC0", + "authors": [ + "bxl-forever" + ], + "sources": [] + }, { "path": "logo.svg", "license": "CC0", @@ -7,4 +15,4 @@ ], "sources": [] } -] +] \ No newline at end of file diff --git a/assets/themes/rainbow_crossings/rainbow_crossings.json b/assets/themes/rainbow_crossings/rainbow_crossings.json index 84602a67f..d05e6c5f6 100644 --- a/assets/themes/rainbow_crossings/rainbow_crossings.json +++ b/assets/themes/rainbow_crossings/rainbow_crossings.json @@ -15,7 +15,28 @@ "startZoom": 16, "widenFactor": 2, "layers": [ - "rainbow_crossings" + "rainbow_crossings", + { + "builtin": "rainbow_crossings", + "override": { + "minzoom": 10, + "id": "rainbow_crossing_high_zoom", + "name": null, + "=presets": [], + "source": { + "osmTags": { + "and+": ["crossing:marking=rainbow"] + } + } + } + }, + { + "builtin": "cycleways_and_roads", + "override": { + "minzoom": 18, + "name": null + } + } ] } From 755d34c16082b107106e03c641169fef256d1554 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 12 Jul 2022 10:30:43 +0200 Subject: [PATCH 66/71] s/minZoom/minzoom/g --- assets/layers/doctors/doctors.json | 3 +++ assets/layers/street_lamps/street_lamps.json | 2 +- assets/themes/bicyclelib/bicyclelib.json | 2 +- assets/themes/onwheels/onwheels.json | 2 +- assets/themes/street_lighting/street_lighting.json | 4 ++-- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/assets/layers/doctors/doctors.json b/assets/layers/doctors/doctors.json index 236d13c54..8979e43c0 100644 --- a/assets/layers/doctors/doctors.json +++ b/assets/layers/doctors/doctors.json @@ -3,6 +3,9 @@ "name": { "en": "doctors" }, + "description": { + "en": "This layer shows doctor offices, dentists and other healthcare facilities" + }, "source": { "osmTags": { "or": [ diff --git a/assets/layers/street_lamps/street_lamps.json b/assets/layers/street_lamps/street_lamps.json index d30882903..bcb15754a 100644 --- a/assets/layers/street_lamps/street_lamps.json +++ b/assets/layers/street_lamps/street_lamps.json @@ -9,7 +9,7 @@ "source": { "osmTags": "highway=street_lamp" }, - "minZoom": 16, + "minzoom": 16, "title": { "render": { "en": "Street Lamp", diff --git a/assets/themes/bicyclelib/bicyclelib.json b/assets/themes/bicyclelib/bicyclelib.json index 4e1db4886..9d2723f84 100644 --- a/assets/themes/bicyclelib/bicyclelib.json +++ b/assets/themes/bicyclelib/bicyclelib.json @@ -38,7 +38,7 @@ { "builtin": "bicycle_library", "override": { - "minZoom": 0 + "minzoom": 0 } } ] diff --git a/assets/themes/onwheels/onwheels.json b/assets/themes/onwheels/onwheels.json index 822a75349..881729e71 100644 --- a/assets/themes/onwheels/onwheels.json +++ b/assets/themes/onwheels/onwheels.json @@ -30,7 +30,7 @@ "doctors" ], "overrideAll" : { - "minZoom" : "15", + "minzoom" : "15", "mapRendering" : [ { "label" : null diff --git a/assets/themes/street_lighting/street_lighting.json b/assets/themes/street_lighting/street_lighting.json index 00d4f79b9..770668204 100644 --- a/assets/themes/street_lighting/street_lighting.json +++ b/assets/themes/street_lighting/street_lighting.json @@ -51,7 +51,7 @@ ] } }, - "minZoom": 16, + "minzoom": 16, "title": { "render": { "en": "Lit street", @@ -171,7 +171,7 @@ ] } }, - "minZoom": 19, + "minzoom": 19, "title": { "render": { "en": "Street", From fbe11d4a908ecc768e9d60bd690dad4fdcee640d Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 12 Jul 2022 10:45:08 +0200 Subject: [PATCH 67/71] Fix reset:layeroverview, improve rainbow map --- assets/themes/rainbow_crossings/rainbow_crossings.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/themes/rainbow_crossings/rainbow_crossings.json b/assets/themes/rainbow_crossings/rainbow_crossings.json index d05e6c5f6..32fe470a3 100644 --- a/assets/themes/rainbow_crossings/rainbow_crossings.json +++ b/assets/themes/rainbow_crossings/rainbow_crossings.json @@ -15,7 +15,6 @@ "startZoom": 16, "widenFactor": 2, "layers": [ - "rainbow_crossings", { "builtin": "rainbow_crossings", "override": { @@ -30,6 +29,7 @@ } } }, + "rainbow_crossings", { "builtin": "cycleways_and_roads", "override": { diff --git a/package.json b/package.json index 1d97a1908..78485fa28 100644 --- a/package.json +++ b/package.json @@ -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", From 19aab0358b256d80e5872da1857841ee3d7de0af Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 12 Jul 2022 14:20:21 +0200 Subject: [PATCH 68/71] Fix #947 --- manifest.webmanifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.webmanifest b/manifest.webmanifest index 1e577af78..5679708fc 100644 --- a/manifest.webmanifest +++ b/manifest.webmanifest @@ -1,5 +1,5 @@ { - "name": "index", + "name": "MapComplete", "short_name": "MapComplete", "start_url": "index.html", "lang": "en", From a7b0db24161cacdcd5293529c6ede1fe48f57e5f Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 12 Jul 2022 14:20:40 +0200 Subject: [PATCH 69/71] Fix build, formatting --- assets/themes/rainbow_crossings/crossing.svg | 2 ++ assets/themes/rainbow_crossings/logo.svg | 2 +- assets/themes/rainbow_crossings/rainbow_crossings.json | 8 ++++---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/assets/themes/rainbow_crossings/crossing.svg b/assets/themes/rainbow_crossings/crossing.svg index 37304af0f..468f421dd 100644 --- a/assets/themes/rainbow_crossings/crossing.svg +++ b/assets/themes/rainbow_crossings/crossing.svg @@ -1,6 +1,8 @@ - + diff --git a/assets/themes/rainbow_crossings/rainbow_crossings.json b/assets/themes/rainbow_crossings/rainbow_crossings.json index 32fe470a3..1a63df6fc 100644 --- a/assets/themes/rainbow_crossings/rainbow_crossings.json +++ b/assets/themes/rainbow_crossings/rainbow_crossings.json @@ -24,7 +24,9 @@ "=presets": [], "source": { "osmTags": { - "and+": ["crossing:marking=rainbow"] + "and+": [ + "crossing:marking=rainbow" + ] } } } @@ -38,6 +40,4 @@ } } ] -} - - +} \ No newline at end of file From d50b60f07a1cd7de2ed09c0d06ea3b91df32e42b Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 12 Jul 2022 14:21:14 +0200 Subject: [PATCH 70/71] Fix caching behaviour of service worker --- service-worker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service-worker.ts b/service-worker.ts index 56e006a4e..d50009104 100644 --- a/service-worker.ts +++ b/service-worker.ts @@ -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 From 02711c43c3166d4835257ad09a4d22c441af5e0f Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 12 Jul 2022 14:22:14 +0200 Subject: [PATCH 71/71] Actually use awaits where appropriate --- scripts/generateLayouts.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/scripts/generateLayouts.ts b/scripts/generateLayouts.ts index 546d26350..1272117c5 100644 --- a/scripts/generateLayouts.ts +++ b/scripts/generateLayouts.ts @@ -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(/.*/s, themeSpecific) .replace(/.*/s, layout.shortDescription.textFor(targetLanguage)) .replace("", ``); - +0 try { output = output .replace(/.*/s, ``) @@ -320,10 +320,9 @@ async function main(): Promise { 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) }