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..d53368529
--- /dev/null
+++ b/.gitpod.yml
@@ -0,0 +1,14 @@
+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",
+ - "GitHub.vscode-pull-request-github"
\ No newline at end of file
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 000000000..68d524f21
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,7 @@
+{
+ "recommendations": [
+ "esbenp.prettier-vscode",
+ "eamodio.gitlens",
+ "GitHub.vscode-pull-request-github"
+ ]
+}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 000000000..ff6d1b68d
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,20 @@
+{
+ "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,
+ "files.autoSave": "onFocusChange"
+}
\ 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"
+ }
+ ]
+}
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/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..8d9c4d13b
--- /dev/null
+++ b/assets/layers/transit_stops/bus_stop.svg
@@ -0,0 +1,55 @@
+
+
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 56650d440..8fc630f67 100644
--- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json
+++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json
@@ -311,6 +311,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 01aa1fabb..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)",
@@ -5232,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": {
@@ -5279,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": {
@@ -5962,6 +6002,169 @@
"render": "Trail"
}
},
+ "transit_routes": {
+ "description": "Layer showing bus lines",
+ "mapRendering": {
+ "0": {
+ "color": {
+ "render": "#ff0000"
+ }
+ }
+ },
+ "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": {
+ "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/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 fc2a5c198..4fb6f8226 100644
--- a/langs/themes/en.json
+++ b/langs/themes/en.json
@@ -953,6 +953,10 @@
"description": "A map of public toilets",
"title": "Open Toilet Map"
},
+ "transit": {
+ "description": "Plan your trip with the help of the public transport system.",
+ "title": "Bus routes"
+ },
"trees": {
"description": "Map all the trees!",
"shortDescription": "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",