diff --git a/assets/layers/adult_changing_table/adult_changing_table.json b/assets/layers/adult_changing_table/adult_changing_table.json
new file mode 100644
index 000000000..18ca9659e
--- /dev/null
+++ b/assets/layers/adult_changing_table/adult_changing_table.json
@@ -0,0 +1,240 @@
+{
+ "id": "adult_changing_table",
+ "source": {
+ "osmTags": {
+ "or": [
+ "amenity=adult_changing_table",
+ "changing_table:adult=yes",
+ "toilets:changing_table:adult=yes",
+ "toilets:wheelchair:changing_table:adult=yes"
+ ]
+ }
+ },
+ "description": {
+ "en": "An adult changing table is a bench where adult people can be placed on. They are often used by adults with a severe motoric handicap"
+ },
+ "minzoom": 6,
+ "allowMove": {
+ "enableRelocation": false,
+ "enableImproveAccuracy": true
+ },
+ "deletion": true,
+ "name": {
+ "en": "Adult changing tables",
+ "nl": "Verzorgingstafels voor volwassenen"
+ },
+ "presets": [
+ {
+ "title": {
+ "en": "an adult changing table",
+ "nl": "een verzorgingstafel voor volwassenen"
+ },
+ "tags": [
+ "amenity=adult_changing_table"
+ ]
+ }
+ ],
+ "pointRendering": [
+ {
+ "location": [
+ "centroid",
+ "point"
+ ],
+ "marker": [
+ {
+ "icon": "circle",
+ "color": "white"
+ }
+ ]
+ }
+ ],
+ "tagRenderings": [
+ {
+ "id": "height",
+ "labels": [
+ "relevant_questions"
+ ],
+ "question": {
+ "en": "What is the height of the adult changing table?",
+ "nl": "Hoe hoog is de verzorgingstafel voor volwassenen?"
+ },
+ "questionHint": {
+ "en": "This is measured between the floor and the top of the changing table",
+ "nl": "Dit wordt gemeten van de vloer tot de bovenkant van de verzorgingstafel"
+ },
+ "mappings": [
+ {
+ "if": "height=adjustable",
+ "then": {
+ "en": "The changing table is adjustable in height",
+ "nl": "De verzorgingstafel is in hoogte verstelbaar"
+ }
+ }
+ ],
+ "freeform": {
+ "key": "height",
+ "type": "pfloat"
+ },
+ "render": {
+ "en": "The changing table is {canonical(height)} high",
+ "nl": "De verzorgingstafel is {canonical(height)} hoog"
+ }
+ },
+ {
+ "labels": [
+ "relevant_questions"
+ ],
+ "id": "adult-changing-table-min_height",
+ "question": {
+ "en": "What is the lowest height the adult changing table can be moved to?",
+ "nl": "Wat is de laagste stand waarop de verzorgingstafel voor volwassenen gezet kan worden?"
+ },
+ "questionHint": {
+ "en": "This is measured between the floor and the top of the changing table",
+ "nl": "Dit wordt gemeten van de vloer tot de bovenkant van de verzorgingstafel"
+ },
+ "freeform": {
+ "key": "min_height",
+ "type": "pfloat"
+ },
+ "render": {
+ "en": "The lowest height of the adult changing table is {canonical(min_height)}",
+ "nl": "De laagste stand van de verzorgingstafel is {canonical(min_height)} hoog"
+ },
+ "condition": {
+ "and": [
+ "height=adjustable"
+ ]
+ }
+ },
+ {
+ "labels": [
+ "relevant_questions"
+ ],
+ "id": "adult-changing-table-max_height",
+ "question": {
+ "en": "What is the highest height the adult changing table can be moved to?",
+ "nl": "Wat is de hoogste stand waarop de verzorgingstafel voor volwassenen gezet kan worden?"
+ },
+ "questionHint": {
+ "en": "This is measured between the floor and the top of the changing table",
+ "nl": "Dit wordt gemeten van de vloer tot de bovenkant van de verzorgingstafel"
+ },
+ "freeform": {
+ "key": "max_height",
+ "type": "pfloat"
+ },
+ "render": {
+ "en": "The highest height of the adult changing table is {canonical(max_height)}",
+ "nl": "De hoogste stand van de verzorgingstafel is {canonical(max_height)} hoog"
+ },
+ "condition": {
+ "and": [
+ "height=adjustable"
+ ]
+ }
+ },
+ {
+ "labels": [
+ "relevant_questions"
+ ],
+ "id": "adult-changing-table-mechanism",
+ "question": {
+ "en": "How is the height of the changing table adjusted?",
+ "nl": "Hoe wordt de hoogte van de verzorgingstafel aangepast?"
+ },
+ "mappings": [
+ {
+ "if": "height:mechanism=manual",
+ "then": {
+ "nl": "De hoogte van de verzorgingstafel wordt met de hand aangepast",
+ "en": "The height of the adult changing table is adjusted manually"
+ }
+ },
+ {
+ "if": "height:mechanism=electric",
+ "then": {
+ "nl": "De verzorgingstafel wordt door een electrische motor in hoogte versteld",
+ "en": "The height of the adult changing table is adjusted electrically"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "height=adjustable"
+ ]
+ }
+ },
+ {
+ "labels": [
+ "relevant_questions"
+ ],
+ "id": "adult-changing-table-support",
+ "labels": [
+ "hidden",
+ "prefixed",
+ "adult-changing-table"
+ ],
+ "question": {
+ "en": "How is the adult changing table supported?",
+ "nl": "Hoe is de verschoningstafel in de ruimte geplaatst?"
+ },
+ "mappings": [
+ {
+ "if": "support=wall_mounted",
+ "then": {
+ "en": "The changing table is mounted to the wall",
+ "nl": "De verschoningstafel voor volwassenen hangt vast aan de muur"
+ }
+ },
+ {
+ "if": "support=legs",
+ "then": {
+ "en": "The changing table stands on table legs",
+ "nl": "De verschoningstafel voor volwassenen staat op tafelpoten"
+ }
+ },
+ {
+ "if": "support=wheels",
+ "then": {
+ "en": "The changing table stands on table legs with wheels and can be moved",
+ "nl": "De verschoningstafel voor volwassenen staat op tafelpoten met wielen en kan verplaatst worden"
+ }
+ }
+ ]
+ }
+ ],
+ "title": {
+ "en": "Adult changing table",
+ "nl": "Verzorgingstafel voor volwassenen"
+ },
+ "units": [
+ {
+ "adult:height": {
+ "quantity": "distance",
+ "denominations": [
+ "m",
+ "cm"
+ ]
+ }
+ },
+ {
+ "adult:min_height": {
+ "quantity": "distance",
+ "denominations": [
+ "m",
+ "cm"
+ ]
+ }
+ },
+ {
+ "adult:max_height": {
+ "quantity": "distance",
+ "denominations": [
+ "m",
+ "cm"
+ ]
+ }
+ }
+ ]
+}
diff --git a/assets/layers/bike_cleaning/bike_cleaning.json b/assets/layers/bike_cleaning/bike_cleaning.json
index 2c0cba8fd..4b459795a 100644
--- a/assets/layers/bike_cleaning/bike_cleaning.json
+++ b/assets/layers/bike_cleaning/bike_cleaning.json
@@ -131,6 +131,7 @@
],
"tagRenderings": [
"images",
+ "opening_hours_24_7",
{
"question": {
"en": "How much does it cost to use the cleaning service?",
@@ -283,6 +284,24 @@
],
"id": "bike_cleaning-charge"
},
+ {
+ "builtin": "payment-options-split",
+ "override": {
+ "condition": "fee=yes"
+ }
+ },
+ {
+ "builtin": "denominations-coins",
+ "override": {
+ "condition": "payment:coins=yes"
+ }
+ },
+ {
+ "builtin": "denominations-notes",
+ "override": {
+ "condition": "payment:notes=yes"
+ }
+ },
{
"question": {
"en": "Is this bicycle cleaning service automated?",
@@ -297,8 +316,8 @@
{
"if": "automated=no",
"then": {
- "en": "This is a manual bike washing station",
- "nl": "Dit is een handmatig fietsschoonmaakpunt",
+ "en": "This is a manual bike washing station - a person still has to point the water hose towards the bicycle",
+ "nl": "Dit is een handmatig fietsschoonmaakpunt - een persoon moet zelf de waterspuit richten naar de fiets",
"de": "Dies ist eine manuelle Fahrradwaschanlage",
"cs": "Jedná se o ruční mycí stanici kol",
"es": "Esta es una estación manual de lavado de bicicletas",
@@ -309,8 +328,8 @@
{
"if": "automated=yes",
"then": {
- "en": "This is an automated bike wash",
- "nl": "Dit is een automatisch fietsschoonmaakpunt",
+ "en": "This is an automated bike wash. Your bicycle is placed in the device and everything happens automatically.",
+ "nl": "Dit is een automatisch fietsschoonmaakpunt - eens je fiets erin geplaats, wordt alles volledig automatisch proper gemaakt",
"de": "Dies ist eine automatische Fahrradwaschanlage",
"cs": "Jedná se o mytí kol bez obsluhy",
"es": "Esta es una estación automática de lavado de bicicletas",
diff --git a/assets/layers/cafe_pub/cafe_pub.json b/assets/layers/cafe_pub/cafe_pub.json
index daa55af8f..5aab7dad0 100644
--- a/assets/layers/cafe_pub/cafe_pub.json
+++ b/assets/layers/cafe_pub/cafe_pub.json
@@ -413,10 +413,9 @@
"service:electricity",
"seating",
"dog-access",
- "internet",
- "internet-fee",
- "internet-ssid",
- "reviews"
+ "internet-all",
+ "reviews",
+ "toilet_at_amenity_lib.all"
],
"filter": [
"open_now",
diff --git a/assets/layers/excrement_bag_dispenser/excrement_bag_dispenser.json b/assets/layers/excrement_bag_dispenser/excrement_bag_dispenser.json
new file mode 100644
index 000000000..75ceaf117
--- /dev/null
+++ b/assets/layers/excrement_bag_dispenser/excrement_bag_dispenser.json
@@ -0,0 +1,88 @@
+{
+ "id": "excrement_bag_dispenser",
+ "name": {
+ "en": "Excrement bag dispensers"
+ },
+ "description": {
+ "en": "Dispensers giving out bags for animal waste"
+ },
+ "source": {
+ "osmTags": {
+ "and": [
+ "amenity=vending_machine",
+ "vending=excrement_bags"
+ ]
+ }
+ },
+ "minzoom": 16,
+ "title": {
+ "render": {
+ "en": "Excrement bag dispenser"
+ }
+ },
+ "tagRenderings": [
+ {
+ "id": "fee",
+ "question": {
+ "en": "Does it cost money to use this dispenser?"
+ },
+ "mappings": [
+ {
+ "if": "fee=",
+ "then": {
+ "en": "This dispenser probably gives out bags for free."
+ }
+ },
+ {
+ "if": "fee=yes",
+ "then": {
+ "en": "This dispenser give out bags for a fee."
+ }
+ },
+ {
+ "if": "fee=no",
+ "then": {
+ "en": "This dispenser gives out bags for free."
+ }
+ }
+ ]
+ },
+ "check_date"
+ ],
+ "presets": [
+ {
+ "tags": [
+ "amenity=vending_machine",
+ "vending=excrement_bags"
+ ],
+ "title": {
+ "en": "an excrement bag dispenser"
+ },
+ "description": {
+ "en": "A stand-alone dispenser giving out bags for animal waste."
+ }
+ }
+ ],
+ "pointRendering": [
+ {
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "marker": [
+ {
+ "icon": "square",
+ "color": "white"
+ },
+ {
+ "icon": "./assets/layers/excrement_bag_dispenser/excrement_bags.svg"
+ }
+ ],
+ "iconSize": "30,30"
+ }
+ ],
+ "allowMove": {
+ "enableImproveAccuracy": true,
+ "enableRelocation": true
+ }
+}
\ No newline at end of file
diff --git a/assets/layers/excrement_bag_dispenser/excrement_bags.svg b/assets/layers/excrement_bag_dispenser/excrement_bags.svg
new file mode 100644
index 000000000..755f008ac
--- /dev/null
+++ b/assets/layers/excrement_bag_dispenser/excrement_bags.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/layers/excrement_bag_dispenser/excrement_bags.svg.license b/assets/layers/excrement_bag_dispenser/excrement_bags.svg.license
new file mode 100644
index 000000000..a342db9b9
--- /dev/null
+++ b/assets/layers/excrement_bag_dispenser/excrement_bags.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Jérémy Ragusa
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/layers/excrement_bag_dispenser/license_info.json b/assets/layers/excrement_bag_dispenser/license_info.json
new file mode 100644
index 000000000..b15d15270
--- /dev/null
+++ b/assets/layers/excrement_bag_dispenser/license_info.json
@@ -0,0 +1,12 @@
+[
+ {
+ "path": "excrement_bags.svg",
+ "license": "CC0-1.0",
+ "authors": [
+ "Jérémy Ragusa"
+ ],
+ "sources": [
+ "https://github.com/gravitystorm/openstreetmap-carto/blob/master/symbols/amenity/excrement_bags.svg"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/assets/layers/food/food.json b/assets/layers/food/food.json
index c259f6edb..3d02e4d0e 100644
--- a/assets/layers/food/food.json
+++ b/assets/layers/food/food.json
@@ -1433,7 +1433,8 @@
"dog-access",
"internet",
"internet-fee",
- "internet-ssid"
+ "internet-ssid",
+ "toilet_at_amenity_lib.all"
],
"filter": [
"open_now",
diff --git a/assets/layers/mobility_hub/mobility_hub.json b/assets/layers/mobility_hub/mobility_hub.json
index d3d0cc710..d55ae9937 100644
--- a/assets/layers/mobility_hub/mobility_hub.json
+++ b/assets/layers/mobility_hub/mobility_hub.json
@@ -73,8 +73,20 @@
"placeholder": {
"en": "Name of the mobility hub",
"nl": "Naam van de mobiliteitshub"
+ },
+ "addExtraTags": [
+ "noname="
+ ]
+ },
+ "mappings": [
+ {
+ "if": "noname=yes",
+ "then": {
+ "en": "This mobility hub does not have a name",
+ "nl": "Deze mobiliteitshub heeft geen naam"
+ }
}
- }
+ ]
},
{
"question": {
@@ -90,7 +102,8 @@
"nl": "Netwerk van deze mobiliteitshub"
},
"addExtraTags": [
- "network:wikidata="
+ "network:wikidata=",
+ "nonetwork="
]
},
"render": {
@@ -98,6 +111,16 @@
"nl": "Deze mobiliteitshub hoort bij het netwerk {network}"
},
"mappings": [
+ {
+ "if": "nonetwork=yes",
+ "then": {
+ "en": "This mobility hub does not belong to a network",
+ "nl": "Deze mobiliteitshub hoort niet bij een netwerk"
+ },
+ "addExtraTags": [
+ "network:wikidata="
+ ]
+ },
{
"if": "network=Groningen-Drenthe",
"then": {
@@ -107,7 +130,8 @@
"hideInAnswer": "_country!=nl",
"icon": "./assets/layers/mobility_hub/hub-gd.svg",
"addExtraTags": [
- "network:wikidata=Q108742233"
+ "network:wikidata=Q108742233",
+ "nonetwork="
]
},
{
@@ -119,7 +143,8 @@
"hideInAnswer": "_country!=be",
"icon": "./assets/layers/mobility_hub/logo-hoppin.svg",
"addExtraTags": [
- "network:wikidata=Q124310711"
+ "network:wikidata=Q124310711",
+ "nonetwork="
]
},
{
@@ -130,7 +155,8 @@
},
"hideInAnswer": "_country!=de",
"addExtraTags": [
- "network:wikidata=Q110948933"
+ "network:wikidata=Q110948933",
+ "nonetwork="
]
}
]
@@ -179,7 +205,8 @@
"nl": "Deze mobiliteitshub is gemarkeerd door een eenvoudig bord met alleen simpele informatie zoals het logo of de naam"
}
}
- ]
+ ],
+ "condition": "_geometry:type=Point"
}
],
"lineRendering": [
diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json
index c12842a1a..f620399ba 100644
--- a/assets/layers/questions/questions.json
+++ b/assets/layers/questions/questions.json
@@ -1827,7 +1827,11 @@
"labels": [
"level"
],
- "condition": "repeat_on~*",
+ "condition": {
+ "and": [
+ "repeat_on~*"
+ ]
+ },
"render": {
"en": "Multiple, identical objects can be found on floors {repeat_on}.",
"nl": "Er zijn verschillende, identieke objecten op verdiepingen {repeat_on}.",
@@ -1842,7 +1846,11 @@
"labels": [
"level"
],
- "condition": "repeat_on=",
+ "condition": {
+ "and": [
+ "repeat_on="
+ ]
+ },
"question": {
"nl": "Op welke verdieping bevindt dit punt zich?",
"en": "On what level is this feature located?",
@@ -2053,7 +2061,11 @@
"pl": "Czy w {title()} wolno palić?"
},
"#condition": "Based on https://en.wikipedia.org/wiki/List_of_smoking_bans",
- "condition": "_country!~al|be",
+ "condition": {
+ "and": [
+ "_country!~al|be"
+ ]
+ },
"mappings": [
{
"if": "smoking=yes",
@@ -2401,7 +2413,11 @@
"labels": [
"internet-all"
],
- "condition": "internet_access~.*wlan.*",
+ "condition": {
+ "and": [
+ "internet_access~.*wlan.*"
+ ]
+ },
"question": {
"en": "What is the network name for the wireless internet access?",
"nl": "Wat is de netwerknaam voor de draadloze internettoegang?",
@@ -3321,6 +3337,29 @@
"freeform": {
"key": "name"
}
+ },
+ {
+ "id": "has_toilets",
+ "question": {
+ "en": "Has {title()} toilets?",
+ "nl": "Heeft {title()} toiletten?"
+ },
+ "mappings": [
+ {
+ "if": "toilets=yes",
+ "then": {
+ "en": "Has toilets",
+ "nl": "Heeft toiletten"
+ }
+ },
+ {
+ "if": "toilets=no",
+ "then": {
+ "en": "Has no toilets",
+ "nl": "Heeft geenad toiletten"
+ }
+ }
+ ]
}
],
"allowMove": false,
diff --git a/assets/layers/shops/shops.json b/assets/layers/shops/shops.json
index 9c6bf084b..9b9c70351 100644
--- a/assets/layers/shops/shops.json
+++ b/assets/layers/shops/shops.json
@@ -1326,7 +1326,8 @@
}
},
"dog-access",
- "description"
+ "description",
+ "toilet_at_amenity_lib.all"
],
"filter": [
{
diff --git a/assets/layers/toilet/toilet.json b/assets/layers/toilet/toilet.json
index 65d3271b0..861637781 100644
--- a/assets/layers/toilet/toilet.json
+++ b/assets/layers/toilet/toilet.json
@@ -211,7 +211,14 @@
}
}
},
- "level",
+ {
+ "builtin": "level",
+ "override": {
+ "labels+": [
+ "amenity-no-prefix"
+ ]
+ }
+ },
{
"question": {
"en": "Are these toilets publicly accessible?",
@@ -247,6 +254,7 @@
"mappings": [
{
"if": "access=yes",
+ "alsoShowIf": "access=public",
"then": {
"en": "Public access",
"de": "Der Zugang ist öffentlich",
@@ -258,7 +266,38 @@
"da": "Offentlig adgang",
"ca": "Accés públic",
"cs": "Veřejný přístup",
- "uk": "Публічний доступ"
+ "uk": "Публічний доступ",
+ "en": "Public access",
+ "de": "Öffentlicher Zugang",
+ "fr": "Accès publique",
+ "nl": "Publiek toegankelijk",
+ "it": "Accesso pubblico",
+ "ru": "Свободный доступ",
+ "es": "Acceso público",
+ "da": "Offentlig adgang",
+ "ca": "Accés públic",
+ "cs": "Veřejný přístup",
+ "en": "Public access",
+ "de": "Der Zugang ist öffentlich",
+ "fr": "Accès publique",
+ "nl": "Publiek toegankelijk",
+ "it": "Accesso pubblico",
+ "ru": "Свободный доступ",
+ "es": "Acceso público",
+ "da": "Offentlig adgang",
+ "ca": "Accés públic",
+ "cs": "Veřejný přístup",
+ "sl": "Javno dostopno",
+ "en": "Public access",
+ "de": "Öffentlicher Zugang",
+ "fr": "Accès publique",
+ "nl": "Publiek toegankelijk",
+ "it": "Accesso pubblico",
+ "ru": "Свободный доступ",
+ "es": "Acceso público",
+ "da": "Offentlig adgang",
+ "ca": "Accés públic",
+ "cs": "Veřejný přístup"
}
},
{
@@ -310,33 +349,19 @@
"cs": "Přístupné, ale pro vstup je třeba požádat o klíč",
"uk": "Доступний, але для входу потрібно попросити ключ"
}
- },
- {
- "if": "access=public",
- "then": {
- "en": "Public access",
- "de": "Öffentlicher Zugang",
- "fr": "Accès publique",
- "nl": "Publiek toegankelijk",
- "it": "Accesso pubblico",
- "ru": "Свободный доступ",
- "es": "Acceso público",
- "da": "Offentlig adgang",
- "ca": "Accés públic",
- "cs": "Veřejný přístup"
- },
- "hideInAnswer": true
}
],
"labels": [
- "relevant-questions"
+ "relevant-questions",
+ "amenity-no-prefix"
],
"id": "toilet-access"
},
{
"id": "toilets-fee",
"labels": [
- "relevant-questions"
+ "relevant-questions",
+ "amenity-no-prefix"
],
"condition": {
"and": [
@@ -352,6 +377,8 @@
"da": "Er det gratis at benytte disse toiletter?",
"ca": "Aquest serveis són gratuïts?",
"cs": "Jsou tyto toalety zdarma?",
+ "es": "¿Son estos baños de uso gratuito?",
+ "sl": "Ali so ta stranišča brezplačna za uporabo?",
"es": "¿Son estos baños de uso gratuito?"
},
"mappings": [
@@ -366,7 +393,9 @@
"es": "Estos son baños de pago",
"da": "Det er betalingstoiletter",
"ca": "Aquests serveis són de pagament",
- "cs": "Jedná se o placené toalety"
+ "cs": "Jedná se o placené toalety",
+ "cs": "Jedná se o placené toalety",
+ "sl": "To so plačljiva stranišča"
},
"if": "fee=yes"
},
@@ -381,14 +410,17 @@
"da": "Gratis at bruge",
"ca": "Gratuït",
"cs": "Použití zdarma",
- "es": "De uso gratuito"
+ "es": "De uso gratuito",
+ "pt": "Grátis para usar",
+ "sl": "Brezplačna uporaba"
}
}
]
},
{
"labels": [
- "relevant-questions"
+ "relevant-questions",
+ "amenity-no-prefix"
],
"question": {
"en": "How much does one have to pay for these toilets?",
@@ -400,7 +432,8 @@
"es": "¿Cuánto hay que pagar por estos baños?",
"da": "Hvor meget skal man betale for disse toiletter?",
"ca": "Quant s'ha de pagar per aquests lavabos?",
- "cs": "Kolik se za tyto toalety platí?"
+ "cs": "Kolik se za tyto toalety platí?",
+ "sl": "Koliko je potrebno plačati za ta stranišča?"
},
"render": {
"en": "The fee is {charge}",
@@ -412,7 +445,8 @@
"es": "La tarifa es {charge}",
"da": "Gebyret er {charge}",
"ca": "La taxa és {charge}",
- "cs": "Poplatek je {charge}"
+ "cs": "Poplatek je {charge}",
+ "sl": "Plačilo je {charge}"
},
"condition": {
"and": [
@@ -442,7 +476,8 @@
]
},
"=labels": [
- "relevant-questions"
+ "relevant-questions",
+ "amenity-no-prefix"
]
}
},
@@ -454,6 +489,7 @@
"access!=no"
]
},
+ "#labels": "NOT included in amenity-no-prefix! The 'amenity' has their own opening hours",
"=labels": [
"relevant-questions",
"no-prefix"
@@ -474,7 +510,8 @@
"id": "toilets-type",
"labels": [
"relevant-questions",
- "prefixed"
+ "prefixed",
+ "amenity-prefixed"
],
"question": {
"en": "Which kind of toilets are these?",
@@ -550,7 +587,8 @@
"id": "toilets-disposal",
"labels": [
"relevant-questions",
- "prefixed"
+ "prefixed",
+ "amenity-prefixed"
],
"question": {
"en": "How is the waste handled?",
@@ -589,7 +627,8 @@
"id": "gender_segregated",
"labels": [
"relevant-questions",
- "no-prefix"
+ "no-prefix",
+ "amenity-no-prefix"
],
"question": {
"en": "Are these toilets gender-segregated?",
@@ -636,7 +675,8 @@
"id": "menstrual_products",
"labels": [
"relevant-questions",
- "prefixed"
+ "prefixed",
+ "amenity-prefixed"
],
"question": {
"en": "Are free, menstrual products distributed here?",
@@ -699,7 +739,8 @@
"id": "menstrual_products_location",
"labels": [
"relevant-questions",
- "prefixed"
+ "prefixed",
+ "amenity-prefixed"
],
"question": {
"en": "Where are the free menstrual products located?",
@@ -769,9 +810,11 @@
},
{
"id": "toilets-changing-table",
+ "#labels": "Very weird case: we transfer this as is to the 'amenity'-layer",
"labels": [
"relevant-questions",
- "no-prefix"
+ "no-prefix",
+ "amenity-prefixed"
],
"question": {
"en": "Is a changing table (to change diapers) available?",
@@ -819,7 +862,8 @@
{
"labels": [
"relevant-questions",
- "no-prefix"
+ "no-prefix",
+ "amenity-prefixed"
],
"question": {
"en": "Where is the changing table located?",
@@ -917,7 +961,8 @@
"id": "toilet-supervised",
"labels": [
"relevant-questions",
- "no-prefix"
+ "no-prefix",
+ "amenity-no-prefix"
],
"question": {
"en": "Is this toilets supervised by a person?",
@@ -964,7 +1009,8 @@
{
"id": "toilet-has-paper",
"labels": [
- "relevant-questions"
+ "relevant-questions",
+ "amenity-prefixed"
],
"question": {
"en": "Does one have to bring their own toilet paper to this toilet?",
@@ -1014,7 +1060,8 @@
{
"labels": [
"relevant-questions",
- "prefixed"
+ "prefixed",
+ "amenity-prefixed"
],
"id": "toilet-handwashing",
"question": {
@@ -1060,7 +1107,8 @@
"id": "toilet-drying",
"labels": [
"relevant-questions",
- "prefixed"
+ "prefixed",
+ "amenity-prefixed"
],
"question": {
"en": "Do these toilets have a device to dry your hands?",
@@ -1110,12 +1158,23 @@
]
}
},
+ {
+ "builtin":
"description",
+ "override": {
+ "labels": [
+ "amenity-no-prefix",
+ "no-prefix",
+ "relevant-questions"
+ ]
+ }
+ },
{
"id": "wheelchair-group",
"labels": [
"relevant-questions",
- "prefixed"
+ "prefixed",
+ "amenity-prefixed"
],
"render": {
"special": {
@@ -1131,7 +1190,8 @@
"relevant-questions",
"wheelchair",
"hidden",
- "no-prefix"
+ "no-prefix",
+ "amenity-no-prefix"
],
"question": {
"en": "Is there a dedicated toilet for wheelchair users?",
@@ -1142,7 +1202,8 @@
"da": "Er der et særligt toilet til kørestolsbrugere?",
"ca": "Hi ha un lavabo específic per a usuaris amb cadira de rodes?",
"cs": "Je zde vyhrazená toaleta pro vozíčkáře?",
- "es": "¿Hay un baño dedicado para usuarios de sillas de ruedas?"
+ "es": "¿Hay un baño dedicado para usuarios de sillas de ruedas?",
+ "sl": "Ali je tu stranišče namenjeno invalidom na vozičku?"
},
"mappings": [
{
@@ -1171,7 +1232,8 @@
"es": "Sin acceso para sillas de ruedas",
"da": "Ingen kørestolsadgang",
"ca": "Sense accés per a cadires de rodes",
- "cs": "Žádný bezbariérový přístup"
+ "cs": "Žádný bezbariérový přístup",
+ "sl": "Ni dostopno invalidom na vozičku"
}
},
{
@@ -1205,7 +1267,8 @@
"wheelchair",
"hidden",
"relevant-questions",
- "prefixed"
+ "prefixed",
+ "amenity-prefixed"
],
"render": {
"special": {
@@ -1231,7 +1294,8 @@
"wheelchair",
"hidden",
"relevant-questions",
- "prefixed"
+ "prefixed",
+ "amenity-prefixed"
],
"render": {
"special": {
@@ -1249,7 +1313,8 @@
"labels": [
"hidden",
"relevant-questions",
- "prefixed"
+ "prefixed",
+ "amenity-prefixed"
],
"render": {
"en": "Wheelchair accessible toilet",
@@ -1284,7 +1349,7 @@
]
},
{
- "id": "wheelchair-access",
+ "id": "toilet-wheelchair-access",
"question": {
"en": "Is the wheelchair-accessible toilet locked?",
"nl": "Is de rolstoeltoegankelijke toilet op slot?"
@@ -1311,7 +1376,8 @@
"hidden",
"wheelchair",
"relevant-questions",
- "prefixed"
+ "prefixed",
+ "amenity-prefixed"
],
"mappings": [
{
@@ -1429,7 +1495,8 @@
"labels": [
"wheelchair",
"hidden",
- "relevant-questions"
+ "relevant-questions",
+ "amenity-prefixed"
],
"render": {
"special": {
@@ -1439,17 +1506,21 @@
}
},
{
- "id": "adult-changing-table-title",
- "labels": [
- "hidden",
+ "builtin": "adult_changing_table.title",
+ "override": {
+ "labels+": [
+ "hidden",
"prefixed",
- "adult-changing-table"
+ "adult-changing-table",
+ "amenity-prefixed"
],
- "render": {
- "en": "
Adult changing table
",
- "nl": "
Verzorgingstafel voor volwassenen
"
- },
- "condition": "changing_table:adult=yes"
+ "condition": {
+ "and": [
+ "changing_table:adult=yes"
+ ]
+ },
+ "classes": "bold text-lg"
+ }
},
{
"id": "adult-changing-table",
@@ -1457,7 +1528,8 @@
"prefixed",
"hidden",
"relevant-questions",
- "adult-changing-table"
+ "adult-changing-table",
+ "amenity-prefixed"
],
"question": {
"en": "Does this toilet have an adult changing table?",
@@ -1482,175 +1554,29 @@
]
},
{
- "id": "adult-changing-table-height",
- "labels": [
- "hidden",
- "prefixed",
- "adult-changing-table"
- ],
- "question": {
- "en": "What is the height of the adult changing table?",
- "nl": "Hoe hoog is de verzorgingstafel voor volwassenen?"
- },
- "questionHint": {
- "en": "This is measured between the floor and the top of the changing table",
- "nl": "Dit wordt gemeten van de vloer tot de bovenkant van de verzorgingstafel"
- },
- "mappings": [
- {
- "if": "changing_table:adult:height=adjustable",
- "then": {
- "en": "The changing table is adjustable in height",
- "nl": "De verzorgingstafel is in hoogte verstelbaar"
- }
+ "builtin": "adult_changing_table.relevant_questions",
+ "override": {
+ "labels+": [
+ "hidden",
+ "prefixed",
+ "adult-changing-table",
+ "amenity-prefixed"
+ ],
+ "condition": {
+ "and+": [
+ "changing_table:adult=yes"
+ ]
}
- ],
- "freeform": {
- "key": "changing_table:adult:height",
- "type": "pfloat"
},
- "render": {
- "en": "The changing table is {canonical(changing_table:adult:height)} high",
- "nl": "De verzorgingstafel is {canonical(changing_table:adult:height)} hoog"
- },
- "condition": {
- "and": [
- "changing_table:adult=yes"
- ]
- }
- },
- {
- "id": "adult-changing-table-min_height",
- "labels": [
- "hidden",
- "prefixed",
- "adult-changing-table"
- ],
- "question": {
- "en": "What is the lowest height the adult changing table can be moved to?",
- "nl": "Wat is de laagste stand waarop de verzorgingstafel voor volwassenen gezet kan worden?"
- },
- "questionHint": {
- "en": "This is measured between the floor and the top of the changing table",
- "nl": "Dit wordt gemeten van de vloer tot de bovenkant van de verzorgingstafel"
- },
- "freeform": {
- "key": "changing_table:adult:min_height",
- "type": "pfloat"
- },
- "render": {
- "en": "The lowest height of the adult changing table is {canonical(changing_table:adult:min_height)}",
- "nl": "De laagste stand van de verzorgingstafel is {canonical(changing_table:adult:min_height)} hoog"
- },
- "condition": {
- "and": [
- "changing_table:adult:height=adjustable"
- ]
- }
- },
- {
- "id": "adult-changing-table-max_height",
- "labels": [
- "hidden",
- "prefixed",
- "adult-changing-table"
- ],
- "question": {
- "en": "What is the highest height the adult changing table can be moved to?",
- "nl": "Wat is de hoogste stand waarop de verzorgingstafel voor volwassenen gezet kan worden?"
- },
- "questionHint": {
- "en": "This is measured between the floor and the top of the changing table",
- "nl": "Dit wordt gemeten van de vloer tot de bovenkant van de verzorgingstafel"
- },
- "freeform": {
- "key": "changing_table:adult:max_height",
- "type": "pfloat"
- },
- "render": {
- "en": "The highest height of the adult changing table is {canonical(changing_table:adult:max_height)}",
- "nl": "De hoogste stand van de verzorgingstafel is {canonical(changing_table:adult:max_height)} hoog"
- },
- "condition": {
- "and": [
- "changing_table:adult:height=adjustable"
- ]
- }
- },
- {
- "id": "adult-changing-table-mechanism",
- "labels": [
- "hidden",
- "relevant-questions",
- "adult-changing-table"
- ],
- "question": {
- "en": "How is the height of the changing table adjusted?",
- "nl": "Hoe wordt de hoogte van de verzorgingstafel aangepast?"
- },
- "mappings": [
- {
- "if": "changing_table:adult:height:mechanism=manual",
- "then": {
- "nl": "De hoogte van de verzorgingstafel wordt met de hand aangepast",
- "en": "The height of the adult changing table is adjusted manually"
- }
- },
- {
- "if": "changing_table:adult:height:mechanism=electric",
- "then": {
- "nl": "De verzorgingstafel wordt door een electrische motor in hoogte versteld",
- "en": "The height of the adult changing table is adjusted electrically"
- }
- }
- ],
- "condition": {
- "and": [
- "changing_table:adult:height=adjustable"
- ]
- }
- },
- {
- "id": "adult-changing-table-support",
- "labels": [
- "hidden",
- "prefixed",
- "adult-changing-table"
- ],
- "question": {
- "en": "How is the adult changing table supported?",
- "nl": "Hoe is de verschoningstafel in de ruimte geplaatst?"
- },
- "mappings": [
- {
- "if": "changing_table:adult:support=wall_mounted",
- "then": {
- "en": "The changing table is mounted to the wall",
- "nl": "De verschoningstafel voor volwassenen hangt vast aan de muur"
- }
- },
- {
- "if": "changing_table:adult:support=legs",
- "then": {
- "en": "The changing table stands on table legs",
- "nl": "De verschoningstafel voor volwassenen staat op tafelpoten"
- }
- },
- {
- "if": "changing_table:adult:support=wheels",
- "then": {
- "en": "The changing table stands on table legs with wheels and can be moved",
- "nl": "De verschoningstafel voor volwassenen staat op tafelpoten met wielen en kan verplaatst worden"
- }
- }
- ]
+ "prefix": "changing_table:adult"
},
{
"id": "questions-adult-changing-table",
"labels": [
"hidden",
"relevant-questions",
- "adult-changing-table"
+ "adult-changing-table",
+ "amenity-prefixed"
],
"render": {
"special": {
@@ -1753,33 +1679,6 @@
"cm"
]
}
- },
- {
- "changing_table:adult:height": {
- "quantity": "distance",
- "denominations": [
- "m",
- "cm"
- ]
- }
- },
- {
- "changing_table:adult:min_height": {
- "quantity": "distance",
- "denominations": [
- "m",
- "cm"
- ]
- }
- },
- {
- "changing_table:adult:max_height": {
- "quantity": "distance",
- "denominations": [
- "m",
- "cm"
- ]
- }
}
]
}
diff --git a/assets/layers/toilet_at_amenity/toilet_at_amenity.json b/assets/layers/toilet_at_amenity/toilet_at_amenity.json
index 3656a0eac..02b329cf6 100644
--- a/assets/layers/toilet_at_amenity/toilet_at_amenity.json
+++ b/assets/layers/toilet_at_amenity/toilet_at_amenity.json
@@ -140,203 +140,37 @@
],
"lineRendering": [],
"tagRenderings": [
- "images",
- "level",
{
- "question": {
- "en": "Are these toilets publicly accessible?",
- "de": "Ist die Toilette öffentlich zugänglich?",
- "nl": "Zijn deze toiletten publiek toegankelijk?",
- "fr": "Ces toilettes sont-elles librement accessibles ?",
- "ca": "Aquests serveis són d'accés públic?",
- "cs": "Jsou tyto toalety veřejně přístupné?",
- "sl": "Ali so ta stranišča javno dostopna?",
- "es": "¿Son estos baños de acceso público?"
- },
+ "id": "images",
"render": {
- "en": "Access is {toilets:access}",
- "de": "Zugang ist {toilets:access}",
- "fr": "L'accès est {toilets:access}",
- "nl": "Toegankelijkheid is {toilets:access}",
- "it": "L'accesso è {toilets:access}",
- "es": "El acceso es {toilets:access}",
- "da": "Adgang er {toilets:access}",
- "ca": "L'accés és {toilets:access}",
- "cs": "Přístup je {toilets:access}",
- "sl": "Dostop je {toilets:access}",
- "uk": "Доступ - {toilets:access}"
- },
- "freeform": {
- "key": "toilets:access",
- "addExtraTags": [
- "fixme=the tag toilets:access was filled out by the user and might need refinement"
+ "special": {
+ "before": "{image_carousel(toilets:panoramax;toilets:mapillary;toilets:images)}",
+ "type": "image_upload",
+ "image_key": "toilets:panoramax",
+ "label": {
+ "en": "Add a picture of the toilets",
+ "nl": "Voeg een foto van de toiletten toe"
+ }
+ }
+ }
+ },
+ {
+ "builtin": "toilet.amenity-no-prefix",
+ "prefix": "toilets",
+ "override": {
+ "labels+": [
+ "relevant_questions"
]
- },
- "mappings": [
- {
- "if": "toilets:access=yes",
- "then": {
- "en": "Public access",
- "de": "Der Zugang ist öffentlich",
- "fr": "Accès publique",
- "nl": "Publiek toegankelijk",
- "it": "Accesso pubblico",
- "ru": "Свободный доступ",
- "es": "Acceso público",
- "da": "Offentlig adgang",
- "ca": "Accés públic",
- "cs": "Veřejný přístup",
- "sl": "Javno dostopno"
- }
- },
- {
- "if": "toilets:access=customers",
- "then": {
- "en": "Only access to customers of the amenity",
- "de": "Nur Zugang für Kunden der Einrichtung",
- "nl": "Enkel toegankelijk voor klanten van de voorziening",
- "fr": "Accessibles uniquement au clients du lieu",
- "ca": "Només accessible a clients de l'instal·lació",
- "cs": "Přístup pouze zákazníkům zařízení občanské vybavenosti",
- "sl": "Samo za stranke lokala",
- "es": "Solo acceso para clientes del servicio"
- }
- },
- {
- "if": "toilets:access=no",
- "then": {
- "en": "Not accessible, even for customers of the amenity",
- "de": "Nicht zugänglich, auch nicht für Kunden der Einrichtung",
- "nl": "Niet toegankelijk, ook niet voor klanten van de voorziening",
- "fr": "Non accessibles, même pour les clients du lieu",
- "ca": "No accessible, inclús per als clients de la instal·lació",
- "cs": "Není přístupný, a to ani pro zákazníky občanské vybavenosti",
- "sl": "Ni dostopno niti za stranke lokala",
- "es": "Inaccesible, incluso para clientes del servicio"
- }
- },
- {
- "if": "toilets:access=key",
- "then": {
- "en": "Accessible, but one has to ask a key to enter",
- "de": "Der Zugang ist möglich, aber man muss nach einen Schlüssel fragen",
- "fr": "Accessibles, mais vous devez demander la clé",
- "nl": "Toegankelijk na het vragen van de sleutel",
- "it": "Accessibile, ma occorre chiedere una chiave per accedere",
- "es": "Accesible, pero hay que pedir una llave para entrar",
- "da": "Tilgængelig, men man skal bede om en nøgle for at komme ind",
- "ca": "Accessible, però hi ha que demanar la clau per a entrar",
- "cs": "Přístupné, ale ke vstupu musíte požádat o klíč",
- "sl": "Dostopno, a je potrebno vprašati za ključ"
- }
- },
- {
- "if": "toilets:access=public",
- "then": {
- "en": "Public access",
- "de": "Öffentlicher Zugang",
- "fr": "Accès publique",
- "nl": "Publiek toegankelijk",
- "it": "Accesso pubblico",
- "ru": "Свободный доступ",
- "es": "Acceso público",
- "da": "Offentlig adgang",
- "ca": "Accés públic",
- "cs": "Veřejný přístup"
- },
- "hideInAnswer": true
- }
- ],
- "id": "toilet-access"
- },
- {
- "id": "toilets-fee",
- "condition": "toilets:access!=no",
- "question": {
- "en": "Are these toilets free to use?",
- "de": "Können diese Toiletten kostenlos benutzt werden?",
- "fr": "Ces toilettes sont-elles payantes ?",
- "nl": "Zijn deze toiletten gratis te gebruiken?",
- "it": "Questi servizi igienici sono gratuiti?",
- "da": "Er det gratis at benytte disse toiletter?",
- "ca": "Aquest serveis són gratuïts?",
- "cs": "Jsou tyto toalety zdarma k použití?",
- "sl": "Ali so ta stranišča brezplačna za uporabo?",
- "es": "¿Son estos baños de uso gratuito?"
- },
- "mappings": [
- {
- "then": {
- "en": "These are paid toilets",
- "de": "Die Nutzung ist gebührenpflichtig",
- "fr": "Toilettes payantes",
- "nl": "Men moet betalen om deze toiletten te gebruiken",
- "ru": "Это платные туалеты",
- "it": "Questi servizi igienici sono a pagamento",
- "es": "Estos son baños de pago",
- "da": "Det er betalingstoiletter",
- "ca": "Aquests serveis són de pagament",
- "cs": "Jedná se o placené toalety",
- "sl": "To so plačljiva stranišča"
- },
- "if": "toilets:fee=yes"
- },
- {
- "if": "toilets:fee=no",
- "then": {
- "en": "Free to use",
- "de": "Die Nutzung ist kostenlos",
- "fr": "Toilettes gratuites",
- "nl": "Gratis te gebruiken",
- "it": "Gratis",
- "da": "Gratis at bruge",
- "ca": "Gratuït",
- "cs": "Zdarma k použití",
- "pt": "Grátis para usar",
- "sl": "Brezplačna uporaba",
- "es": "De uso gratuito"
- }
- }
- ]
- },
- {
- "question": {
- "en": "How much does one have to pay for these toilets?",
- "de": "Wie viel muss man für die Nutzung bezahlen?",
- "fr": "Quel est le prix d'accès de ces toilettes ?",
- "nl": "Hoeveel moet men betalen om deze toiletten te gebruiken?",
- "it": "Quanto costa l'accesso a questi servizi igienici?",
- "ru": "Сколько стоит посещение туалета?",
- "es": "¿Cuánto hay que pagar por estos baños?",
- "da": "Hvor meget skal man betale for disse toiletter?",
- "ca": "Quant s'ha de pagar per aquests lavabos?",
- "cs": "Kolik se platí za tyto toalety?",
- "sl": "Koliko je potrebno plačati za ta stranišča?"
- },
- "render": {
- "en": "The fee is {toilets:charge}",
- "de": "Die Gebühr beträgt {toilets:charge}",
- "fr": "Le prix est {toilets:charge}",
- "nl": "De toiletten gebruiken kost {toilets:charge}",
- "it": "La tariffa è {toilets:charge}",
- "ru": "Стоимость {toilets:charge}",
- "es": "La tarifa es {toilets:charge}",
- "da": "Gebyret er {toilets:charge}",
- "ca": "La taxa és {toilets:charge}",
- "cs": "Poplatek je {toilets:charge}",
- "sl": "Plačilo je {toilets:charge}"
- },
- "condition": "toilets:fee=yes",
- "freeform": {
- "key": "toilets:charge",
- "type": "string"
- },
- "id": "toilet-charge"
+ }
},
{
"builtin": "opening_hours",
"override": {
- "condition": "toilets:access!=no",
+ "condition": {
+ "and+": [
+ "toilets:access!=no"
+ ]
+ },
"question": {
"en": "When is the amenity where these toilets are located open?",
"de": "Wann ist der Ort, an dem sich diese Toiletten befinden, geöffnet?",
@@ -348,91 +182,11 @@
}
},
{
- "id": "toilets-wheelchair",
- "labels": [
- "wheelchair",
- "hidden"
- ],
- "question": {
- "en": "Is there a dedicated toilet for wheelchair users?",
- "de": "Können Rollstuhlfahrer die Toilette benutzen?",
- "fr": "Y a-t-il des toilettes réservées aux personnes en fauteuil roulant ?",
- "nl": "Is er een rolstoeltoegankelijke toilet voorzien?",
- "it": "C'è un WC riservato alle persone in sedia a rotelle?",
- "da": "Er der et særligt toilet til kørestolsbrugere?",
- "ca": "Hi ha un lavabo específic per a usuaris amb cadira de rodes?",
- "cs": "Existuje vyhrazená toaleta pro vozíčkáře?",
- "sl": "Ali je tu stranišče namenjeno invalidom na vozičku?",
- "es": "¿Hay un baño dedicado para usuarios de sillas de ruedas?"
- },
- "mappings": [
- {
- "then": {
- "en": "There is a dedicated toilet for wheelchair users",
- "de": "Rollstuhlfahrer können die Toilette benutzen",
- "fr": "Il y a des toilettes réservées pour les personnes à mobilité réduite",
- "nl": "Er is een toilet voor rolstoelgebruikers",
- "it": "C'è un WC riservato alle persone in sedia a rotelle",
- "es": "Hay un baño dedicado para usuarios de sillas de ruedas",
- "da": "Der er et særligt toilet til kørestolsbrugere",
- "ca": "Hi ha un lavabo dedicat per a usuaris amb cadira de rodes",
- "cs": "K dispozici je vyhrazená toaleta pro vozíčkáře"
- },
- "if": "toilets:wheelchair=yes"
- },
- {
- "if": "toilets:wheelchair=no",
- "then": {
- "en": "No wheelchair access",
- "de": "Rollstuhlfahrer können die Toilette nicht benutzen",
- "fr": "Non accessible aux personnes à mobilité réduite",
- "nl": "Niet toegankelijk voor rolstoelgebruikers",
- "it": "Non accessibile in sedia a rotelle",
- "ru": "Недоступно пользователям кресел-колясок",
- "es": "Sin acceso para sillas de ruedas",
- "da": "Ingen kørestolsadgang",
- "ca": "Sense accés per a cadires de rodes",
- "cs": "Žádný bezbariérový přístup",
- "sl": "Ni dostopno invalidom na vozičku"
- }
- },
- {
- "if": "toilets:wheelchair=designated",
- "then": {
- "en": "There is only a dedicated toilet for wheelchair users",
- "nl": "Er is alleen een toilet voor rolstoelgebruikers",
- "de": "Es gibt nur eine barrierefreie Toilette für Rollstuhlfahrer",
- "da": "Der er kun et særligt toilet til kørestolsbrugere",
- "ca": "Sols hi ha un lavabo per a usuaris amb cadira de rodes",
- "cs": "K dispozici je pouze vyhrazená toaleta pro vozíčkáře",
- "es": "Solo hay un baño dedicado para usuarios de sillas de ruedas"
- }
- }
- ]
- },
- "toilet.prefixed",
- {
- "id": "questions-wheelchair",
- "labels": [
- "wheelchair",
- "hidden"
- ],
- "render": {
- "special": {
- "type": "questions",
- "labels": "wheelchair",
- "show_all": "yes"
- }
- }
- },
- {
- "builtin": "description",
+ "builtin": "toilet.amenity-prefixed",
"override": {
- "render": "{toilets:description}",
- "freeform": {
- "key": "toilets:description",
- "type": "string"
- }
+ "labels+": [
+ "relevant_questions"
+ ]
}
}
],
diff --git a/assets/layers/toilet_at_amenity_lib/toilet_at_amenity_lib.json b/assets/layers/toilet_at_amenity_lib/toilet_at_amenity_lib.json
new file mode 100644
index 000000000..f084377f3
--- /dev/null
+++ b/assets/layers/toilet_at_amenity_lib/toilet_at_amenity_lib.json
@@ -0,0 +1,95 @@
+{
+ "id": "toilet_at_amenity_lib",
+ "description": "Special layer which makes it easy to add, as a group, information about toilets to any POI",
+ "source": "special:library",
+ "tagRenderings": [
+ {
+ "id": "toilets-group",
+ "labels": [
+ "all"
+ ],
+ "render": {
+ "special": {
+ "type": "group",
+ "header": "grouptitle",
+ "labels": "toilet-questions",
+ "blacklist": "wheelchair;wheelchair-title;adult-changing-table"
+ }
+ }
+ },
+ {
+ "id": "grouptitle",
+ "labels": [
+ "all",
+ "hidden"
+ ],
+ "icon": "./assets/layers/toilet/toilets.svg",
+ "render": {
+ "en": "Toilet information",
+ "nl": "Informatie over de toiletten"
+ },
+ "mappings": [
+ {
+ "if": "toilets=no",
+ "then": {
+ "en": "Does not have toilets",
+ "nl": "Heeft geen toiletten"
+ }
+ }
+ ]
+ },
+ {
+ "builtin": "has_toilets",
+ "override": {
+ "labels+": [
+ "toilet-questions",
+ "hidden",
+ "all"
+ ]
+ }
+ },
+ {
+ "builtin": "toilet_at_amenity.relevant_questions",
+ "override": {
+ "labels+": [
+ "toilet-questions",
+ "hidden",
+ "all"
+ ],
+ "condition": {
+ "and+": [
+ "toilets=yes"
+ ]
+ }
+ }
+ },
+ {
+ "id": "toilet-question-box",
+ "labels": [
+ "toilet-questions",
+ "all",
+ "hidden"
+ ],
+ "render": {
+ "special": {
+ "type": "questions",
+ "labels": "toilet-questions"
+ }
+ }
+ }
+ ],
+ "allowMove": false,
+ "pointRendering": [
+ {
+ "location": [
+ "centroid",
+ "point"
+ ],
+ "marker": [
+ {
+ "icon": "circle"
+ }
+ ]
+ }
+ ]
+}
diff --git a/assets/themes/waste/waste.json b/assets/themes/waste/waste.json
index 5289104ba..f8cad0f8e 100644
--- a/assets/themes/waste/waste.json
+++ b/assets/themes/waste/waste.json
@@ -46,6 +46,7 @@
}
},
"recycling",
- "waste_disposal"
+ "waste_disposal",
+ "excrement_bag_dispenser"
]
}
\ No newline at end of file
diff --git a/assets/themes/waste_basket/waste_basket.json b/assets/themes/waste_basket/waste_basket.json
index dd19d1026..39b466d21 100644
--- a/assets/themes/waste_basket/waste_basket.json
+++ b/assets/themes/waste_basket/waste_basket.json
@@ -60,7 +60,8 @@
"override": {
"minzoom": 12
}
- }
+ },
+ "excrement_bag_dispenser"
],
"widenFactor": 2
}
\ No newline at end of file
diff --git a/langs/en.json b/langs/en.json
index 456326f91..3e55ff894 100644
--- a/langs/en.json
+++ b/langs/en.json
@@ -326,6 +326,7 @@
"openTill": "till",
"open_24_7": "Open around the clock",
"open_during_ph": "During a public holiday, it is",
+ "open_until": "Closes at {date}",
"opensAt": "from",
"ph_closed": "closed",
"ph_not_known": " ",
diff --git a/langs/layers/ca.json b/langs/layers/ca.json
index bc3caf872..7defe1bff 100644
--- a/langs/layers/ca.json
+++ b/langs/layers/ca.json
@@ -11986,9 +11986,6 @@
},
"3": {
"then": "Accessible, però s'ha de demanar la clau per a entrar"
- },
- "4": {
- "then": "Accés públic"
}
},
"question": "Aquests serveis són d'accés públic?",
@@ -12135,42 +12132,6 @@
"question": "Quan està oberta la instal·lació on es troben aquests lavabos?"
}
},
- "toilet-access": {
- "mappings": {
- "0": {
- "then": "Accés públic"
- },
- "1": {
- "then": "Només accessible a clients de l'instal·lació"
- },
- "2": {
- "then": "No accessible, inclús per als clients de la instal·lació"
- },
- "3": {
- "then": "Accessible, però hi ha que demanar la clau per a entrar"
- },
- "4": {
- "then": "Accés públic"
- }
- },
- "question": "Aquests serveis són d'accés públic?",
- "render": "L'accés és {toilets:access}"
- },
- "toilet-charge": {
- "question": "Quant s'ha de pagar per aquests lavabos?",
- "render": "La taxa és {toilets:charge}"
- },
- "toilets-fee": {
- "mappings": {
- "0": {
- "then": "Aquests serveis són de pagament"
- },
- "1": {
- "then": "Gratuït"
- }
- },
- "question": "Aquest serveis són gratuïts?"
- },
"toilets-wheelchair": {
"mappings": {
"0": {
diff --git a/langs/layers/cs.json b/langs/layers/cs.json
index a20424f67..669f78d88 100644
--- a/langs/layers/cs.json
+++ b/langs/layers/cs.json
@@ -10653,9 +10653,6 @@
},
"3": {
"then": "Přístupné, ale pro vstup je třeba požádat o klíč"
- },
- "4": {
- "then": "Veřejný přístup"
}
},
"question": "Jsou tyto toalety veřejně přístupné?",
@@ -10795,42 +10792,6 @@
"question": "Kdy je otevřeno zařízení, kde se tyto toalety nacházejí?"
}
},
- "toilet-access": {
- "mappings": {
- "0": {
- "then": "Veřejný přístup"
- },
- "1": {
- "then": "Přístup pouze zákazníkům zařízení občanské vybavenosti"
- },
- "2": {
- "then": "Není přístupný, a to ani pro zákazníky občanské vybavenosti"
- },
- "3": {
- "then": "Přístupné, ale ke vstupu musíte požádat o klíč"
- },
- "4": {
- "then": "Veřejný přístup"
- }
- },
- "question": "Jsou tyto toalety veřejně přístupné?",
- "render": "Přístup je {toilets:access}"
- },
- "toilet-charge": {
- "question": "Kolik se platí za tyto toalety?",
- "render": "Poplatek je {toilets:charge}"
- },
- "toilets-fee": {
- "mappings": {
- "0": {
- "then": "Jedná se o placené toalety"
- },
- "1": {
- "then": "Zdarma k použití"
- }
- },
- "question": "Jsou tyto toalety zdarma k použití?"
- },
"toilets-wheelchair": {
"mappings": {
"0": {
diff --git a/langs/layers/da.json b/langs/layers/da.json
index ff92eddad..d451bfd80 100644
--- a/langs/layers/da.json
+++ b/langs/layers/da.json
@@ -2210,9 +2210,6 @@
},
"3": {
"then": "Tilgængelig, men man skal bede om en nøgle for at komme ind"
- },
- "4": {
- "then": "Offentlig adgang"
}
},
"question": "Er disse toiletter offentligt tilgængelige?",
@@ -2336,35 +2333,6 @@
}
},
"tagRenderings": {
- "toilet-access": {
- "mappings": {
- "0": {
- "then": "Offentlig adgang"
- },
- "3": {
- "then": "Tilgængelig, men man skal bede om en nøgle for at komme ind"
- },
- "4": {
- "then": "Offentlig adgang"
- }
- },
- "render": "Adgang er {toilets:access}"
- },
- "toilet-charge": {
- "question": "Hvor meget skal man betale for disse toiletter?",
- "render": "Gebyret er {toilets:charge}"
- },
- "toilets-fee": {
- "mappings": {
- "0": {
- "then": "Det er betalingstoiletter"
- },
- "1": {
- "then": "Gratis at bruge"
- }
- },
- "question": "Er det gratis at benytte disse toiletter?"
- },
"toilets-wheelchair": {
"mappings": {
"0": {
diff --git a/langs/layers/de.json b/langs/layers/de.json
index b352a7b81..80e1586b6 100644
--- a/langs/layers/de.json
+++ b/langs/layers/de.json
@@ -11917,7 +11917,7 @@
"toilet-access": {
"mappings": {
"0": {
- "then": "Der Zugang ist öffentlich"
+ "then": "Öffentlicher Zugang"
},
"1": {
"then": "Der Zugang ist nur für Kunden"
@@ -11927,9 +11927,6 @@
},
"3": {
"then": "Der Zugang ist möglich, aber man muss nach einen Schlüssel fragen"
- },
- "4": {
- "then": "Öffentlicher Zugang"
}
},
"question": "Ist die Toilette öffentlich zugänglich?",
@@ -12076,42 +12073,6 @@
"question": "Wann ist der Ort, an dem sich diese Toiletten befinden, geöffnet?"
}
},
- "toilet-access": {
- "mappings": {
- "0": {
- "then": "Der Zugang ist öffentlich"
- },
- "1": {
- "then": "Nur Zugang für Kunden der Einrichtung"
- },
- "2": {
- "then": "Nicht zugänglich, auch nicht für Kunden der Einrichtung"
- },
- "3": {
- "then": "Der Zugang ist möglich, aber man muss nach einen Schlüssel fragen"
- },
- "4": {
- "then": "Öffentlicher Zugang"
- }
- },
- "question": "Ist die Toilette öffentlich zugänglich?",
- "render": "Zugang ist {toilets:access}"
- },
- "toilet-charge": {
- "question": "Wie viel muss man für die Nutzung bezahlen?",
- "render": "Die Gebühr beträgt {toilets:charge}"
- },
- "toilets-fee": {
- "mappings": {
- "0": {
- "then": "Die Nutzung ist gebührenpflichtig"
- },
- "1": {
- "then": "Die Nutzung ist kostenlos"
- }
- },
- "question": "Können diese Toiletten kostenlos benutzt werden?"
- },
"toilets-wheelchair": {
"mappings": {
"0": {
diff --git a/langs/layers/en.json b/langs/layers/en.json
index 7503f57a2..c52493b32 100644
--- a/langs/layers/en.json
+++ b/langs/layers/en.json
@@ -42,6 +42,63 @@
"render": "Known address"
}
},
+ "adult_changing_table": {
+ "description": "An adult changing table is a bench where adult people can be placed on. They are often used by adults with a severe motoric handicap",
+ "name": "Adult changing tables",
+ "presets": {
+ "0": {
+ "title": "an adult changing table"
+ }
+ },
+ "tagRenderings": {
+ "adult-changing-table-max_height": {
+ "question": "What is the highest height the adult changing table can be moved to?",
+ "questionHint": "This is measured between the floor and the top of the changing table",
+ "render": "The highest height of the adult changing table is {canonical(max_height)}"
+ },
+ "adult-changing-table-mechanism": {
+ "mappings": {
+ "0": {
+ "then": "The height of the adult changing table is adjusted manually"
+ },
+ "1": {
+ "then": "The height of the adult changing table is adjusted electrically"
+ }
+ },
+ "question": "How is the height of the changing table adjusted?"
+ },
+ "adult-changing-table-min_height": {
+ "question": "What is the lowest height the adult changing table can be moved to?",
+ "questionHint": "This is measured between the floor and the top of the changing table",
+ "render": "The lowest height of the adult changing table is {canonical(min_height)}"
+ },
+ "adult-changing-table-support": {
+ "mappings": {
+ "0": {
+ "then": "The changing table is mounted to the wall"
+ },
+ "1": {
+ "then": "The changing table stands on table legs"
+ },
+ "2": {
+ "then": "The changing table stands on table legs with wheels and can be moved"
+ }
+ },
+ "question": "How is the adult changing table supported?"
+ },
+ "height": {
+ "mappings": {
+ "0": {
+ "then": "The changing table is adjustable in height"
+ }
+ },
+ "question": "What is the height of the adult changing table?",
+ "questionHint": "This is measured between the floor and the top of the changing table",
+ "render": "The changing table is {canonical(height)} high"
+ }
+ },
+ "title": "Adult changing table"
+ },
"advertising": {
"description": "We will complete data from advertising features with reference, operator and lit",
"name": "Advertisement",
@@ -1568,10 +1625,10 @@
"automated": {
"mappings": {
"0": {
- "then": "This is a manual bike washing station"
+ "then": "This is a manual bike washing station - a person still has to point the water hose towards the bicycle"
},
"1": {
- "then": "This is an automated bike wash"
+ "then": "This is an automated bike wash. Your bicycle is placed in the device and everything happens automatically."
}
},
"question": "Is this bicycle cleaning service automated?"
@@ -1659,6 +1716,9 @@
"10": {
"then": "A lean-to bracket with possibility to use a lock through eyelet. The seat tube can be held by the stand by an anchor"
},
+ "11": {
+ "then": "An anchor - a metal loop wide enough for a bike lock attached to a wall, the floor or a boulder."
+ },
"2": {
"then": "Wheelbenders / rack"
},
@@ -7423,10 +7483,21 @@
"description": "Shows the allowed speed for every road",
"name": "Maxspeed",
"tagRenderings": {
+ "maxspeed-backward": {
+ "question": "What is the maximum allowed speed when travelling {direction_absolute(,180)}?",
+ "render": "The maximum allowed speed when travelling {direction_absolute(,180)} on this road is {canonical(maxspeed:backward)}"
+ },
+ "maxspeed-forward": {
+ "question": "What is the maximum allowed speed when travelling {direction_absolute()}?",
+ "render": "The maximum allowed speed when travelling {direction_absolute()} on this road is {canonical(maxspeed:forward)}"
+ },
"maxspeed-maxspeed": {
"mappings": {
"0": {
"then": "This is a living street, which has a maxspeed of 20km/h"
+ },
+ "1": {
+ "then": "The maximum allowed speed on this road depends on the direction a vehicle goes"
}
},
"question": "What is the legal maximum speed one is allowed to drive on this road?",
@@ -12260,54 +12331,6 @@
},
"question": "Does this toilet have an adult changing table?"
},
- "adult-changing-table-height": {
- "mappings": {
- "0": {
- "then": "The changing table is adjustable in height"
- }
- },
- "question": "What is the height of the adult changing table?",
- "questionHint": "This is measured between the floor and the top of the changing table",
- "render": "The changing table is {canonical(changing_table:adult:height)} high"
- },
- "adult-changing-table-max_height": {
- "question": "What is the highest height the adult changing table can be moved to?",
- "questionHint": "This is measured between the floor and the top of the changing table",
- "render": "The highest height of the adult changing table is {canonical(changing_table:adult:max_height)}"
- },
- "adult-changing-table-mechanism": {
- "mappings": {
- "0": {
- "then": "The height of the adult changing table is adjusted manually"
- },
- "1": {
- "then": "The height of the adult changing table is adjusted electrically"
- }
- },
- "question": "How is the height of the changing table adjusted?"
- },
- "adult-changing-table-min_height": {
- "question": "What is the lowest height the adult changing table can be moved to?",
- "questionHint": "This is measured between the floor and the top of the changing table",
- "render": "The lowest height of the adult changing table is {canonical(changing_table:adult:min_height)}"
- },
- "adult-changing-table-support": {
- "mappings": {
- "0": {
- "then": "The changing table is mounted to the wall"
- },
- "1": {
- "then": "The changing table stands on table legs"
- },
- "2": {
- "then": "The changing table stands on table legs with wheels and can be moved"
- }
- },
- "question": "How is the adult changing table supported?"
- },
- "adult-changing-table-title": {
- "render": "
Adult changing table
"
- },
"email": {
"override": {
"question": "What is the email address one can send to in case of troubles or questions?"
@@ -12378,9 +12401,6 @@
},
"3": {
"then": "Accessible, but one has to ask a key to enter"
- },
- "4": {
- "then": "Public access"
}
},
"question": "Are these toilets publicly accessible?",
@@ -12614,42 +12634,6 @@
"question": "When is the amenity where these toilets are located open?"
}
},
- "toilet-access": {
- "mappings": {
- "0": {
- "then": "Public access"
- },
- "1": {
- "then": "Only access to customers of the amenity"
- },
- "2": {
- "then": "Not accessible, even for customers of the amenity"
- },
- "3": {
- "then": "Accessible, but one has to ask a key to enter"
- },
- "4": {
- "then": "Public access"
- }
- },
- "question": "Are these toilets publicly accessible?",
- "render": "Access is {toilets:access}"
- },
- "toilet-charge": {
- "question": "How much does one have to pay for these toilets?",
- "render": "The fee is {toilets:charge}"
- },
- "toilets-fee": {
- "mappings": {
- "0": {
- "then": "These are paid toilets"
- },
- "1": {
- "then": "Free to use"
- }
- },
- "question": "Are these toilets free to use?"
- },
"toilets-wheelchair": {
"mappings": {
"0": {
diff --git a/langs/layers/es.json b/langs/layers/es.json
index c2f8bf4b6..6ae6f964a 100644
--- a/langs/layers/es.json
+++ b/langs/layers/es.json
@@ -10852,9 +10852,6 @@
},
"3": {
"then": "Accesible, pero hay que pedir una llave para entrar"
- },
- "4": {
- "then": "Acceso público"
}
},
"question": "¿Son estos baños de acceso público?",
@@ -10994,42 +10991,6 @@
"question": "¿Cuándo está abierto el servicio donde se ubican estos baños?"
}
},
- "toilet-access": {
- "mappings": {
- "0": {
- "then": "Acceso público"
- },
- "1": {
- "then": "Solo acceso para clientes del servicio"
- },
- "2": {
- "then": "Inaccesible, incluso para clientes del servicio"
- },
- "3": {
- "then": "Accesible, pero hay que pedir una llave para entrar"
- },
- "4": {
- "then": "Acceso público"
- }
- },
- "question": "¿Son estos baños de acceso público?",
- "render": "El acceso es {toilets:access}"
- },
- "toilet-charge": {
- "question": "¿Cuánto hay que pagar por estos baños?",
- "render": "La tarifa es {toilets:charge}"
- },
- "toilets-fee": {
- "mappings": {
- "0": {
- "then": "Estos son baños de pago"
- },
- "1": {
- "then": "De uso gratuito"
- }
- },
- "question": "¿Son estos baños de uso gratuito?"
- },
"toilets-wheelchair": {
"mappings": {
"0": {
diff --git a/langs/layers/fr.json b/langs/layers/fr.json
index fae2dae4c..3373c02e2 100644
--- a/langs/layers/fr.json
+++ b/langs/layers/fr.json
@@ -6609,7 +6609,7 @@
"toilet-access": {
"mappings": {
"0": {
- "then": "Accès public"
+ "then": "Accès publique"
},
"1": {
"then": "Accès réservé aux clients"
@@ -6619,9 +6619,6 @@
},
"3": {
"then": "Accessible, mais vous devez demander la clé"
- },
- "4": {
- "then": "Accès publique"
}
},
"question": "Ces toilettes sont-elles accessibles au public ?",
@@ -6748,42 +6745,6 @@
}
},
"tagRenderings": {
- "toilet-access": {
- "mappings": {
- "0": {
- "then": "Accès publique"
- },
- "1": {
- "then": "Accessibles uniquement au clients du lieu"
- },
- "2": {
- "then": "Non accessibles, même pour les clients du lieu"
- },
- "3": {
- "then": "Accessibles, mais vous devez demander la clé"
- },
- "4": {
- "then": "Accès publique"
- }
- },
- "question": "Ces toilettes sont-elles librement accessibles ?",
- "render": "L'accès est {toilets:access}"
- },
- "toilet-charge": {
- "question": "Quel est le prix d'accès de ces toilettes ?",
- "render": "Le prix est {toilets:charge}"
- },
- "toilets-fee": {
- "mappings": {
- "0": {
- "then": "Toilettes payantes"
- },
- "1": {
- "then": "Toilettes gratuites"
- }
- },
- "question": "Ces toilettes sont-elles payantes ?"
- },
"toilets-wheelchair": {
"mappings": {
"0": {
diff --git a/langs/layers/it.json b/langs/layers/it.json
index 182774792..126932447 100644
--- a/langs/layers/it.json
+++ b/langs/layers/it.json
@@ -2898,9 +2898,6 @@
},
"3": {
"then": "Accessibile, ma occorre chiedere una chiave per accedere"
- },
- "4": {
- "then": "Accesso pubblico"
}
},
"question": "Questi servizi igienici sono aperti al pubblico?",
@@ -2985,35 +2982,6 @@
},
"toilet_at_amenity": {
"tagRenderings": {
- "toilet-access": {
- "mappings": {
- "0": {
- "then": "Accesso pubblico"
- },
- "3": {
- "then": "Accessibile, ma occorre chiedere una chiave per accedere"
- },
- "4": {
- "then": "Accesso pubblico"
- }
- },
- "render": "L'accesso è {toilets:access}"
- },
- "toilet-charge": {
- "question": "Quanto costa l'accesso a questi servizi igienici?",
- "render": "La tariffa è {toilets:charge}"
- },
- "toilets-fee": {
- "mappings": {
- "0": {
- "then": "Questi servizi igienici sono a pagamento"
- },
- "1": {
- "then": "Gratis"
- }
- },
- "question": "Questi servizi igienici sono gratuiti?"
- },
"toilets-wheelchair": {
"mappings": {
"0": {
diff --git a/langs/layers/nl.json b/langs/layers/nl.json
index 0bb510456..e84be8c4c 100644
--- a/langs/layers/nl.json
+++ b/langs/layers/nl.json
@@ -41,6 +41,62 @@
"render": "Bekend adres"
}
},
+ "adult_changing_table": {
+ "name": "Verzorgingstafels voor volwassenen",
+ "presets": {
+ "0": {
+ "title": "een verzorgingstafel voor volwassenen"
+ }
+ },
+ "tagRenderings": {
+ "adult-changing-table-max_height": {
+ "question": "Wat is de hoogste stand waarop de verzorgingstafel voor volwassenen gezet kan worden?",
+ "questionHint": "Dit wordt gemeten van de vloer tot de bovenkant van de verzorgingstafel",
+ "render": "De hoogste stand van de verzorgingstafel is {canonical(max_height)} hoog"
+ },
+ "adult-changing-table-mechanism": {
+ "mappings": {
+ "0": {
+ "then": "De hoogte van de verzorgingstafel wordt met de hand aangepast"
+ },
+ "1": {
+ "then": "De verzorgingstafel wordt door een electrische motor in hoogte versteld"
+ }
+ },
+ "question": "Hoe wordt de hoogte van de verzorgingstafel aangepast?"
+ },
+ "adult-changing-table-min_height": {
+ "question": "Wat is de laagste stand waarop de verzorgingstafel voor volwassenen gezet kan worden?",
+ "questionHint": "Dit wordt gemeten van de vloer tot de bovenkant van de verzorgingstafel",
+ "render": "De laagste stand van de verzorgingstafel is {canonical(min_height)} hoog"
+ },
+ "adult-changing-table-support": {
+ "mappings": {
+ "0": {
+ "then": "De verschoningstafel voor volwassenen hangt vast aan de muur"
+ },
+ "1": {
+ "then": "De verschoningstafel voor volwassenen staat op tafelpoten"
+ },
+ "2": {
+ "then": "De verschoningstafel voor volwassenen staat op tafelpoten met wielen en kan verplaatst worden"
+ }
+ },
+ "question": "Hoe is de verschoningstafel in de ruimte geplaatst?"
+ },
+ "height": {
+ "mappings": {
+ "0": {
+ "then": "De verzorgingstafel is in hoogte verstelbaar"
+ }
+ },
+ "question": "Hoe hoog is de verzorgingstafel voor volwassenen?",
+ "questionHint": "Dit wordt gemeten van de vloer tot de bovenkant van de verzorgingstafel",
+ "render": "De verzorgingstafel is {canonical(height)} hoog"
+ }
+ },
+ "title": "Verzorgingstafel voor volwassenen"
+ },
"advertising": {
"description": "We vullen de informatie over de advertentie aan met de referentie, de operator en de verlichting",
"name": "Reclame",
@@ -1520,10 +1576,10 @@
"automated": {
"mappings": {
"0": {
- "then": "Dit is een handmatig fietsschoonmaakpunt"
+ "then": "Dit is een handmatig fietsschoonmaakpunt - een persoon moet zelf de waterspuit richten naar de fiets"
},
"1": {
- "then": "Dit is een automatisch fietsschoonmaakpunt"
+ "then": "Dit is een automatisch fietsschoonmaakpunt - eens je fiets erin geplaats, wordt alles volledig automatisch proper gemaakt"
}
},
"question": "Is dit fietsschoonmaakpunt geautomatiseerd?"
@@ -1611,6 +1667,9 @@
"10": {
"then": "Een aanleunbeugel met klem waarbij je de zadelbuis in een anker kan vastklikken. Er is meestal een oog om een slot door te steken"
},
+ "11": {
+ "then": "Een anker - een metalen lus waar een fietsslot door kan en vastgemaakt aan de muur of vloer"
+ },
"2": {
"then": "Wielrek/lussen"
},
@@ -9847,54 +9906,6 @@
},
"question": "Heeft deze toilet een verzorgingstafel voor volwassenen?"
},
- "adult-changing-table-height": {
- "mappings": {
- "0": {
- "then": "De verzorgingstafel is in hoogte verstelbaar"
- }
- },
- "question": "Hoe hoog is de verzorgingstafel voor volwassenen?",
- "questionHint": "Dit wordt gemeten van de vloer tot de bovenkant van de verzorgingstafel",
- "render": "De verzorgingstafel is {canonical(changing_table:adult:height)} hoog"
- },
- "adult-changing-table-max_height": {
- "question": "Wat is de hoogste stand waarop de verzorgingstafel voor volwassenen gezet kan worden?",
- "questionHint": "Dit wordt gemeten van de vloer tot de bovenkant van de verzorgingstafel",
- "render": "De hoogste stand van de verzorgingstafel is {canonical(changing_table:adult:max_height)} hoog"
- },
- "adult-changing-table-mechanism": {
- "mappings": {
- "0": {
- "then": "De hoogte van de verzorgingstafel wordt met de hand aangepast"
- },
- "1": {
- "then": "De verzorgingstafel wordt door een electrische motor in hoogte versteld"
- }
- },
- "question": "Hoe wordt de hoogte van de verzorgingstafel aangepast?"
- },
- "adult-changing-table-min_height": {
- "question": "Wat is de laagste stand waarop de verzorgingstafel voor volwassenen gezet kan worden?",
- "questionHint": "Dit wordt gemeten van de vloer tot de bovenkant van de verzorgingstafel",
- "render": "De laagste stand van de verzorgingstafel is {canonical(changing_table:adult:min_height)} hoog"
- },
- "adult-changing-table-support": {
- "mappings": {
- "0": {
- "then": "De verschoningstafel voor volwassenen hangt vast aan de muur"
- },
- "1": {
- "then": "De verschoningstafel voor volwassenen staat op tafelpoten"
- },
- "2": {
- "then": "De verschoningstafel voor volwassenen staat op tafelpoten met wielen en kan verplaatst worden"
- }
- },
- "question": "Hoe is de verschoningstafel in de ruimte geplaatst?"
- },
- "adult-changing-table-title": {
- "render": "
Verzorgingstafel voor volwassenen
"
- },
"email": {
"override": {
"question": "Naar welk email address kan men sturen voor vragen of om problemen te melden?"
@@ -9965,9 +9976,6 @@
},
"3": {
"then": "Toegankelijk na het vragen van de sleutel"
- },
- "4": {
- "then": "Publiek toegankelijk"
}
},
"question": "Zijn deze toiletten publiek toegankelijk?",
@@ -10196,42 +10204,6 @@
},
"name": "Toilet in een voorziening",
"tagRenderings": {
- "toilet-access": {
- "mappings": {
- "0": {
- "then": "Publiek toegankelijk"
- },
- "1": {
- "then": "Enkel toegankelijk voor klanten van de voorziening"
- },
- "2": {
- "then": "Niet toegankelijk, ook niet voor klanten van de voorziening"
- },
- "3": {
- "then": "Toegankelijk na het vragen van de sleutel"
- },
- "4": {
- "then": "Publiek toegankelijk"
- }
- },
- "question": "Zijn deze toiletten publiek toegankelijk?",
- "render": "Toegankelijkheid is {toilets:access}"
- },
- "toilet-charge": {
- "question": "Hoeveel moet men betalen om deze toiletten te gebruiken?",
- "render": "De toiletten gebruiken kost {toilets:charge}"
- },
- "toilets-fee": {
- "mappings": {
- "0": {
- "then": "Men moet betalen om deze toiletten te gebruiken"
- },
- "1": {
- "then": "Gratis te gebruiken"
- }
- },
- "question": "Zijn deze toiletten gratis te gebruiken?"
- },
"toilets-wheelchair": {
"mappings": {
"0": {
diff --git a/langs/layers/pt.json b/langs/layers/pt.json
index b1b29029b..902d89b30 100644
--- a/langs/layers/pt.json
+++ b/langs/layers/pt.json
@@ -1765,7 +1765,7 @@
}
}
},
- "toilet_at_amenity": {
+ "toilet": {
"tagRenderings": {
"toilets-fee": {
"mappings": {
diff --git a/langs/layers/ru.json b/langs/layers/ru.json
index 2581c2fbf..9a7936e85 100644
--- a/langs/layers/ru.json
+++ b/langs/layers/ru.json
@@ -1909,9 +1909,6 @@
},
"2": {
"then": "Недоступно"
- },
- "4": {
- "then": "Свободный доступ"
}
},
"question": "Есть ли свободный доступ к этим туалетам?"
@@ -1944,27 +1941,6 @@
},
"toilet_at_amenity": {
"tagRenderings": {
- "toilet-access": {
- "mappings": {
- "0": {
- "then": "Свободный доступ"
- },
- "4": {
- "then": "Свободный доступ"
- }
- }
- },
- "toilet-charge": {
- "question": "Сколько стоит посещение туалета?",
- "render": "Стоимость {toilets:charge}"
- },
- "toilets-fee": {
- "mappings": {
- "0": {
- "then": "Это платные туалеты"
- }
- }
- },
"toilets-wheelchair": {
"mappings": {
"1": {
diff --git a/langs/layers/sl.json b/langs/layers/sl.json
index 3e497d7be..d2cfb23b0 100644
--- a/langs/layers/sl.json
+++ b/langs/layers/sl.json
@@ -443,33 +443,17 @@
"description": "Stranišča z vsaj enim invalidom na vozičku dostopnim straniščem"
}
},
- "title": {
- "render": "Stranišče"
- }
- },
- "toilet_at_amenity": {
"tagRenderings": {
"toilet-access": {
"mappings": {
"0": {
"then": "Javno dostopno"
- },
- "1": {
- "then": "Samo za stranke lokala"
- },
- "2": {
- "then": "Ni dostopno niti za stranke lokala"
- },
- "3": {
- "then": "Dostopno, a je potrebno vprašati za ključ"
}
- },
- "question": "Ali so ta stranišča javno dostopna?",
- "render": "Dostop je {toilets:access}"
+ }
},
"toilet-charge": {
"question": "Koliko je potrebno plačati za ta stranišča?",
- "render": "Plačilo je {toilets:charge}"
+ "render": "Plačilo je {charge}"
},
"toilets-fee": {
"mappings": {
@@ -481,7 +465,14 @@
}
},
"question": "Ali so ta stranišča brezplačna za uporabo?"
- },
+ }
+ },
+ "title": {
+ "render": "Stranišče"
+ }
+ },
+ "toilet_at_amenity": {
+ "tagRenderings": {
"toilets-wheelchair": {
"mappings": {
"1": {
diff --git a/langs/layers/uk.json b/langs/layers/uk.json
index 6f0b2784c..2975bcd8c 100644
--- a/langs/layers/uk.json
+++ b/langs/layers/uk.json
@@ -2491,9 +2491,6 @@
"override": {
"question": "Коли відкрито приміщення, де розташовані ці туалети?"
}
- },
- "toilet-access": {
- "render": "Доступ - {toilets:access}"
}
}
},
diff --git a/package.json b/package.json
index 637590a7b..10d93f811 100644
--- a/package.json
+++ b/package.json
@@ -98,16 +98,15 @@
"reset:translations": "vite-node scripts/generateTranslations.ts -- --ignore-weblate",
"generate:layouts": "export NODE_OPTIONS=\"--max-old-space-size=8192\" && vite-node scripts/generateLayouts.ts",
"generate:docs": "rm -rf Docs/Themes/* && rm -rf Docs/Layers/* && rm -rf Docs/TagInfo && mkdir Docs/TagInfo && export NODE_OPTIONS=\"--max-old-space-size=16000\" && vite-node scripts/generateDocs.ts && vite-node scripts/generateTaginfoProjectFiles.ts",
- "generate:layeroverview": "export NODE_OPTIONS=\"--max-old-space-size=16000\" && vite-node scripts/generateLayerOverview.ts",
"generate:mapcomplete-changes-theme": "export NODE_OPTIONS=\"--max-old-space-size=8192\" && vite-node scripts/generateLayerOverview.ts -- --generate-change-map",
- "refresh:layeroverview": "export NODE_OPTIONS=\"--max-old-space-size=8192\" && vite-node scripts/generateLayerOverview.ts -- --force",
"generate:licenses": "vite-node scripts/generateLicenseInfo.ts -- --no-fail",
+ "generate:layeroverview": "export NODE_OPTIONS=\"--max-old-space-size=16000\" && vite-node scripts/generateLayerOverview.ts",
+ "prep:layeroverview": "./scripts/initFiles.sh",
+ "reset:layeroverview": "npm run prep:layeroverview && npm run generate:layeroverview",
"query:licenses": "vite-node scripts/generateLicenseInfo.ts -- --query && npm run generate:licenses",
"clean:licenses": "find . -type f -name \"*.license\" -exec rm -f {} +",
"generate:contributor-list": "vite-node scripts/generateContributors.ts",
"generate:service-worker": "tsc src/service-worker.ts --outFile public/service-worker.js && git_hash=$(git rev-parse HEAD) && sed -i.bak \"s/GITHUB-COMMIT/$git_hash/\" public/service-worker.js && rm public/service-worker.js.bak",
- "reset:layeroverview": "npm run prep:layeroverview && npm run generate:layeroverview && npm run refresh:layeroverview",
- "prep:layeroverview": "./scripts/initFiles.sh",
"generate": "npm run generate:licenses && npm run generate:images && npm run generate:charging-stations && npm run generate:translations && npm run refresh:layeroverview && npm run generate:service-worker",
"generate:charging-stations": "cd ./assets/layers/charging_station && vite-node csvToJson.ts && cd -",
"clean:tests": "find . -type f -name \"*.doctest.ts\" | xargs -r rm",
@@ -224,8 +223,7 @@
"latlon2country": "^1.2.7",
"libphonenumber-js": "^1.11.19",
"mangrove-reviews-typescript": "^1.3.1",
- "maplibre": "^0.0.1-security",
- "maplibre-gl": "^5.1.0 ",
+ "maplibre-gl": "^5.1.0",
"marked": "^12.0.2",
"monaco-editor": "^0.46.0",
"mvt-to-geojson": "^0.0.6",
diff --git a/public/css/index-tailwind-output.css b/public/css/index-tailwind-output.css
index 2ac8e2f36..7981d96ad 100644
--- a/public/css/index-tailwind-output.css
+++ b/public/css/index-tailwind-output.css
@@ -3093,6 +3093,11 @@ input[type="range"].range-lg::-moz-range-thumb {
border-right-width: 1px;
}
+.border-x-2 {
+ border-left-width: 2px;
+ border-right-width: 2px;
+}
+
.border-y {
border-top-width: 1px;
border-bottom-width: 1px;
@@ -5128,6 +5133,10 @@ input[type="range"].range-lg::-moz-range-thumb {
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
+.\[a-zA-Z0-9\:_-\] {
+ a-z-a--z0-9: -;
+}
+
.\[a-zA-Z0-9\:_\] {
a-z-a--z0-9: ;
}
@@ -5286,6 +5295,11 @@ input[type="text"] {
border-radius: 0.5rem;
}
+.border-low-interaction {
+ border-color: var(--interaction-border);
+ border-style: dashed;
+}
+
.border-region {
border: 2px dashed var(--interactive-background);
border-radius: 0.5rem;
@@ -5465,6 +5479,10 @@ textarea {
h2.group {
/* For flowbite accordions */
margin: 0;
+ top: 0;
+ position: -webkit-sticky;
+ position: sticky;
+ z-index: 12;
}
.group button {
diff --git a/scripts/generateFavouritesLayer.ts b/scripts/generateFavouritesLayer.ts
index ad78cd1ea..ef4cbff57 100644
--- a/scripts/generateFavouritesLayer.ts
+++ b/scripts/generateFavouritesLayer.ts
@@ -6,13 +6,14 @@ import { AllKnownLayoutsLazy } from "../src/Customizations/AllKnownLayouts"
import { Utils } from "../src/Utils"
import {
MappingConfigJson,
- QuestionableTagRenderingConfigJson,
+ QuestionableTagRenderingConfigJson
} from "../src/Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"
import { TagConfigJson } from "../src/Models/ThemeConfig/Json/TagConfigJson"
import { TagUtils } from "../src/Logic/Tags/TagUtils"
import { TagRenderingConfigJson } from "../src/Models/ThemeConfig/Json/TagRenderingConfigJson"
import { Translatable } from "../src/Models/ThemeConfig/Json/Translatable"
import * as questions from "../assets/layers/questions/questions.json"
+
export class GenerateFavouritesLayer extends Script {
private readonly layers: LayerConfigJson[] = []
@@ -202,7 +203,7 @@ export class GenerateFavouritesLayer extends Script {
string,
TagRenderingConfigJson[]
>()
- const path = "./src/assets/generated/layers/icons.json"
+ const path = "./public/assets/generated/layers/icons.json"
if (existsSync(path)) {
const config = JSON.parse(readFileSync(path, "utf8"))
for (const tagRendering of config.tagRenderings) {
diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts
index edeb49146..93e83d907 100644
--- a/scripts/generateLayerOverview.ts
+++ b/scripts/generateLayerOverview.ts
@@ -9,16 +9,12 @@ import {
DoesImageExist,
PrevalidateTheme,
ValidateLayer,
- ValidateThemeEnsemble,
+ ValidateThemeEnsemble
} from "../src/Models/ThemeConfig/Conversion/Validation"
import { Translation } from "../src/UI/i18n/Translation"
import { PrepareLayer } from "../src/Models/ThemeConfig/Conversion/PrepareLayer"
import { PrepareTheme } from "../src/Models/ThemeConfig/Conversion/PrepareTheme"
-import {
- Conversion,
- DesugaringContext,
- DesugaringStep,
-} from "../src/Models/ThemeConfig/Conversion/Conversion"
+import { Conversion, DesugaringContext, DesugaringStep } from "../src/Models/ThemeConfig/Conversion/Conversion"
import { Utils } from "../src/Utils"
import Script from "./Script"
import { AllSharedLayers } from "../src/Customizations/AllSharedLayers"
@@ -35,6 +31,7 @@ import { Translatable } from "../src/Models/ThemeConfig/Json/Translatable"
import { ValidateThemeAndLayers } from "../src/Models/ThemeConfig/Conversion/ValidateThemeAndLayers"
import { ExtractImages } from "../src/Models/ThemeConfig/Conversion/FixImages"
import { TagRenderingConfigJson } from "../src/Models/ThemeConfig/Json/TagRenderingConfigJson"
+import { LayerConfigDependencyGraph, LevelInfo } from "../src/Models/ThemeConfig/LayerConfigDependencyGraph"
// This scripts scans 'src/assets/layers/*.json' for layer definition files and 'src/assets/themes/*.json' for theme definition files.
// It spits out an overview of those to be used to load them
@@ -138,8 +135,171 @@ class AddIconSummary extends DesugaringStep<{ raw: LayerConfigJson; parsed: Laye
}
}
+class LayerBuilder extends Conversion