From 748eccba5903c55c17e5995b747065a3d6835036 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Sun, 9 Mar 2025 23:51:56 +0100 Subject: [PATCH 01/65] Themes: winter_service theme, split off all_streets from street_lighting --- assets/layers/all_streets/all_streets.json | 86 ++++++ assets/svg/license_info.json | 17 +- assets/svg/snowflake.svg | 41 +++ assets/svg/snowflake.svg.license | 2 + .../mapcomplete-changes.json | 4 + .../street_lighting/street_lighting.json | 265 +++++++----------- .../themes/winter_service/winter_service.json | 112 ++++++++ langs/themes/ca.json | 38 ++- langs/themes/cs.json | 38 ++- langs/themes/da.json | 38 ++- langs/themes/de.json | 38 ++- langs/themes/en.json | 69 +++-- langs/themes/es.json | 38 ++- langs/themes/eu.json | 9 - langs/themes/fr.json | 38 ++- langs/themes/hu.json | 38 ++- langs/themes/it.json | 38 ++- langs/themes/ko.json | 38 ++- langs/themes/nb_NO.json | 38 ++- langs/themes/nl.json | 38 ++- langs/themes/pa_PK.json | 6 - langs/themes/pl.json | 38 ++- langs/themes/ru.json | 8 - langs/themes/zh_Hant.json | 38 ++- src/Models/Constants.ts | 1 + src/assets/svg/Snowflake.svelte | 4 + 26 files changed, 639 insertions(+), 479 deletions(-) create mode 100644 assets/layers/all_streets/all_streets.json create mode 100644 assets/svg/snowflake.svg create mode 100644 assets/svg/snowflake.svg.license create mode 100644 assets/themes/winter_service/winter_service.json create mode 100644 src/assets/svg/Snowflake.svelte diff --git a/assets/layers/all_streets/all_streets.json b/assets/layers/all_streets/all_streets.json new file mode 100644 index 0000000000..9d1d18443c --- /dev/null +++ b/assets/layers/all_streets/all_streets.json @@ -0,0 +1,86 @@ +{ + "id": "all_streets", + "isCounted": false, + "name": { + "en": "All streets", + "nl": "Alle straten", + "ru": "Все улицы", + "zh_Hant": "所有道路", + "hu": "Minden utca", + "de": "Alle Straßen", + "ca": "Tots els carrers", + "es": "Todas las calles", + "fr": "Toutes les rues", + "nb_NO": "Alle gater", + "da": "Alle gader", + "pa_PK": "ساریاں سڑکاں", + "cs": "Všechny ulice", + "it": "Tutte le strade", + "pl": "Wszystkie ulice", + "ko": "모든 거리" + }, + "description": { + "en": "Layer with (almost) all streets", + "nl": "Laag met (bijna) alle straten" + }, + "source": { + "osmTags": { + "and": [ + "highway!=", + "service!=driveway", + "highway!=platform" + ] + } + }, + "minzoom": 18, + "title": { + "render": { + "en": "Street", + "nl": "Straat", + "ru": "Улица", + "zh_Hant": "照明", + "hu": "Utca", + "de": "Straße", + "ca": "Carrer", + "nb_NO": "Gate", + "fr": "Rue", + "da": "Gade", + "pa_PK": "سڑک", + "es": "Calle", + "cs": "Ulice", + "eu": "Kalea", + "it": "Strada", + "pl": "Ulica", + "ko": "거리" + }, + "mappings": [ + { + "if": "name~*", + "then": "{name}" + } + ] + }, + "tagRenderings": [ + "images" + ], + "allowSplit": true, + "pointRendering": null, + "lineRendering": [ + { + "color": { + "render": "#a9a9a9", + "mappings": [ + { + "if": "lit=no", + "then": "#303030" + }, + { + "if": "lit=yes", + "then": "#ff0" + } + ] + } + } + ], + "allowMove": false +} \ No newline at end of file diff --git a/assets/svg/license_info.json b/assets/svg/license_info.json index 06bc3869d9..e94c29d518 100644 --- a/assets/svg/license_info.json +++ b/assets/svg/license_info.json @@ -451,12 +451,6 @@ "authors": [], "sources": [] }, - { - "path": "gear.svg", - "license": "TRIVIAL", - "authors": [], - "sources": [] - }, { "path": "gender_bi.svg", "license": "CC0-1.0", @@ -1103,6 +1097,17 @@ ], "sources": [] }, + { + "path": "snowflake.svg", + "license": "CC0-1.0", + "authors": [ + "Schnouf25", + "Razorbliss" + ], + "sources": [ + "https://commons.wikimedia.org/wiki/File:Snow_flake.svg" + ] + }, { "path": "speech_bubble.svg", "license": "CC-BY-4.0", diff --git a/assets/svg/snowflake.svg b/assets/svg/snowflake.svg new file mode 100644 index 0000000000..f90eb6ca1b --- /dev/null +++ b/assets/svg/snowflake.svg @@ -0,0 +1,41 @@ + + + + + + diff --git a/assets/svg/snowflake.svg.license b/assets/svg/snowflake.svg.license new file mode 100644 index 0000000000..9d76893189 --- /dev/null +++ b/assets/svg/snowflake.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Schnouf25; Razorbliss +SPDX-License-Identifier: CC0-1.0 \ 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 8bc4511d3f..5090a5fc8f 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -605,6 +605,10 @@ { "if": "theme=width", "then": "./assets/themes/width/icon.svg" + }, + { + "if": "theme=winter_service", + "then": "./assets/svg/snowflake.svg" } ] } diff --git a/assets/themes/street_lighting/street_lighting.json b/assets/themes/street_lighting/street_lighting.json index a181a6e1cf..133d3536f0 100644 --- a/assets/themes/street_lighting/street_lighting.json +++ b/assets/themes/street_lighting/street_lighting.json @@ -211,184 +211,109 @@ "allowMove": false }, { - "id": "all_streets", - "isCounted": false, - "name": { - "en": "All streets", - "nl": "Alle straten", - "ru": "Все улицы", - "zh_Hant": "所有道路", - "hu": "Minden utca", - "de": "Alle Straßen", - "ca": "Tots els carrers", - "es": "Todas las calles", - "fr": "Toutes les rues", - "nb_NO": "Alle gater", - "da": "Alle gader", - "pa_PK": "ساریاں سڑکاں", - "cs": "Všechny ulice", - "it": "Tutte le strade", - "pl": "Wszystkie ulice", - "ko": "모든 거리" - }, - "source": { - "osmTags": { - "and": [ - "highway!=", - "service!=driveway", - "highway!=platform" - ] - } - }, - "minzoom": 18, - "title": { - "render": { - "en": "Street", - "nl": "Straat", - "ru": "Улица", - "zh_Hant": "照明", - "hu": "Utca", - "de": "Straße", - "ca": "Carrer", - "nb_NO": "Gate", - "fr": "Rue", - "da": "Gade", - "pa_PK": "سڑک", - "es": "Calle", - "cs": "Ulice", - "eu": "Kalea", - "it": "Strada", - "pl": "Ulica", - "ko": "거리" - }, - "mappings": [ + "builtin": "all_streets", + "override": { + "tagRenderings+": [ { - "if": "name~*", - "then": "{name}" - } - ] - }, - "tagRenderings": [ - "images", - { - "id": "lit", - "question": { - "en": "Is this street lit?", - "nl": "Is deze straat verlicht?", - "zh_Hant": "這道路有照明嗎?", - "hu": "Ki van-e világítva ez az utca?", - "de": "Ist diese Straße beleuchtet?", - "nb_NO": "Er denne gaten belyst?", - "fr": "Cette rue est-elle éclairée ?", - "da": "Er denne gade oplyst?", - "ca": "Aquest carrer està il·luminat?", - "es": "¿Está iluminada esta calle?", - "cs": "Je tato ulice osvětlená?", - "it": "Questa strada è illuminata?", - "pl": "Czy ta ulica jest oświetlona?", - "ko": "이 거리는 밝나요?" - }, - "mappings": [ - { - "if": "lit=yes", - "then": { - "en": "This street is lit", - "nl": "Deze straat is verlicht", - "zh_Hant": "這道路有照明", - "hu": "Ez az utca ki van világítva", - "de": "Diese Straße ist beleuchtet", - "es": "Esta calle está iluminada", - "nb_NO": "Denne gaten er belyst", - "fr": "Cette rue est éclairée", - "da": "Denne gade er oplyst", - "ca": "Aquest carrer està il·luminat", - "cs": "Tato ulice je osvětlená", - "it": "Questa strada è illuminata", - "pl": "Ta ulica jest oświetlona", - "ko": "이 거리는 밝습니다" - } + "id": "lit", + "question": { + "en": "Is this street lit?", + "nl": "Is deze straat verlicht?", + "zh_Hant": "這道路有照明嗎?", + "hu": "Ki van-e világítva ez az utca?", + "de": "Ist diese Straße beleuchtet?", + "nb_NO": "Er denne gaten belyst?", + "fr": "Cette rue est-elle éclairée ?", + "da": "Er denne gade oplyst?", + "ca": "Aquest carrer està il·luminat?", + "es": "¿Está iluminada esta calle?", + "cs": "Je tato ulice osvětlená?", + "it": "Questa strada è illuminata?", + "pl": "Czy ta ulica jest oświetlona?", + "ko": "이 거리는 밝나요?" }, - { - "if": "lit=no", - "then": { - "en": "This street is not lit", - "nl": "Deze straat is niet verlicht", - "zh_Hant": "這道路沒有照明", - "hu": "Ez az utca nincs kivilágítva", - "de": "Diese Straße ist nicht beleuchtet", - "es": "Esta calle no está iluminada", - "nb_NO": "Denne gaten er ikke belyst", - "fr": "Cette rue n’est pas éclairée", - "da": "Denne gade er ikke oplyst", - "ca": "Aquest carrer no està il·luminat", - "cs": "Tato ulice není osvětlená", - "it": "Questa strada non è illuminata", - "pl": "Ta ulica nie jest oświetlona", - "ko": "이 거리는 밝지 않습니다" - } - }, - { - "if": "lit=sunset-sunrise", - "then": { - "en": "This street is lit at night", - "nl": "Deze straat is 's nachts verlicht", - "zh_Hant": "這道路晚上有照明", - "hu": "Ez az utca éjjel ki van világítva", - "de": "Diese Straße ist nachts beleuchtet", - "nb_NO": "Denne gaten er belyst nattestid", - "fr": "Cette rue est éclairée la nuit", - "da": "Denne gade er oplyst om natten", - "ca": "Aquest carrer està il·luminat per la nit", - "es": "Esta calle está iluminada por la noche", - "cs": "Tato ulice je v noci osvětlená", - "it": "Questa strada è illuminata di sera", - "pl": "Ta ulica jest oświetlona w nocy", - "ko": "이 거리는 밤에 밝습니다" - }, - "hideInAnswer": true - }, - { - "if": "lit=24/7", - "then": { - "en": "This street is lit 24/7", - "nl": "Deze straat is 24/7 verlicht", - "zh_Hant": "這道路 24/7 有照明", - "hu": "Ez az utca éjjel-nappal ki van világítva", - "de": "Diese Straße ist durchgehend beleuchtet", - "nb_NO": "Denne gaten er belyst døgnet rundt", - "fr": "Cette rue est éclairée en permanence", - "da": "Denne gade er oplyst 24/7", - "ca": "Aquest carrer està il·luminat 24/7", - "es": "Esta calle está iluminada 24/7", - "cs": "Tato ulice je osvětlena 24/7", - "it": "Questa strada è illuminata 24 ore su 24", - "pl": "Ta ulica jest oświetlona 24/7", - "ko": "이 거리는 24시간 밝습니다" - } - } - ] - } - ], - "allowSplit": true, - "pointRendering": null, - "lineRendering": [ - { - "color": { - "render": "#a9a9a9", "mappings": [ { - "if": "lit=no", - "then": "#303030" + "if": "lit=yes", + "then": { + "en": "This street is lit", + "nl": "Deze straat is verlicht", + "zh_Hant": "這道路有照明", + "hu": "Ez az utca ki van világítva", + "de": "Diese Straße ist beleuchtet", + "es": "Esta calle está iluminada", + "nb_NO": "Denne gaten er belyst", + "fr": "Cette rue est éclairée", + "da": "Denne gade er oplyst", + "ca": "Aquest carrer està il·luminat", + "cs": "Tato ulice je osvětlená", + "it": "Questa strada è illuminata", + "pl": "Ta ulica jest oświetlona", + "ko": "이 거리는 밝습니다" + } }, { - "if": "lit=yes", - "then": "#ff0" + "if": "lit=no", + "then": { + "en": "This street is not lit", + "nl": "Deze straat is niet verlicht", + "zh_Hant": "這道路沒有照明", + "hu": "Ez az utca nincs kivilágítva", + "de": "Diese Straße ist nicht beleuchtet", + "es": "Esta calle no está iluminada", + "nb_NO": "Denne gaten er ikke belyst", + "fr": "Cette rue n’est pas éclairée", + "da": "Denne gade er ikke oplyst", + "ca": "Aquest carrer no està il·luminat", + "cs": "Tato ulice není osvětlená", + "it": "Questa strada non è illuminata", + "pl": "Ta ulica nie jest oświetlona", + "ko": "이 거리는 밝지 않습니다" + } + }, + { + "if": "lit=sunset-sunrise", + "then": { + "en": "This street is lit at night", + "nl": "Deze straat is 's nachts verlicht", + "zh_Hant": "這道路晚上有照明", + "hu": "Ez az utca éjjel ki van világítva", + "de": "Diese Straße ist nachts beleuchtet", + "nb_NO": "Denne gaten er belyst nattestid", + "fr": "Cette rue est éclairée la nuit", + "da": "Denne gade er oplyst om natten", + "ca": "Aquest carrer està il·luminat per la nit", + "es": "Esta calle está iluminada por la noche", + "cs": "Tato ulice je v noci osvětlená", + "it": "Questa strada è illuminata di sera", + "pl": "Ta ulica jest oświetlona w nocy", + "ko": "이 거리는 밤에 밝습니다" + }, + "hideInAnswer": true + }, + { + "if": "lit=24/7", + "then": { + "en": "This street is lit 24/7", + "nl": "Deze straat is 24/7 verlicht", + "zh_Hant": "這道路 24/7 有照明", + "hu": "Ez az utca éjjel-nappal ki van világítva", + "de": "Diese Straße ist durchgehend beleuchtet", + "nb_NO": "Denne gaten er belyst døgnet rundt", + "fr": "Cette rue est éclairée en permanence", + "da": "Denne gade er oplyst 24/7", + "ca": "Aquest carrer està il·luminat 24/7", + "es": "Esta calle está iluminada 24/7", + "cs": "Tato ulice je osvětlena 24/7", + "it": "Questa strada è illuminata 24 ore su 24", + "pl": "Ta ulica jest oświetlona 24/7", + "ko": "이 거리는 24시간 밝습니다" + } } ] } - } - ], - "allowMove": false + ] + } } ] -} +} \ No newline at end of file diff --git a/assets/themes/winter_service/winter_service.json b/assets/themes/winter_service/winter_service.json new file mode 100644 index 0000000000..cda079ef8b --- /dev/null +++ b/assets/themes/winter_service/winter_service.json @@ -0,0 +1,112 @@ +{ + "credits": "Robin van der Linde", + "credits:uid": 5093765, + "id": "winter_service", + "title": { + "en": "Winter Service" + }, + "icon": "./assets/svg/snowflake.svg", + "layers": [ + { + "id": "serviced_streets", + "name": { + "en": "Serviced streets" + }, + "description": { + "en": "Streets that have some form of winter service" + }, + "source": { + "osmTags": { + "and": [ + "highway!=", + "service!=driveway", + "highway!=platform", + "winter_service=yes" + ] + } + }, + "minzoom": 16, + "title": { + "render": { + "en": "Serviced street" + }, + "mappings": [ + { + "if": "name~*", + "then": "{name}" + } + ] + }, + "lineRendering": [ + { + "color": "#00ff00" + } + ], + "pointRendering": null, + "allowMove": false, + "tagRenderings": [] + }, + { + "builtin": "all_streets", + "override": { + "lineRendering": [ + { + "color": { + "mappings": [ + { + "if": "winter_service=yes", + "then": "#00ff00" + }, + { + "if": "winter_service=limited", + "then": "#ffff00" + }, + { + "if": "winter_service=no", + "then": "#ff0000" + } + ] + } + } + ] + } + } + ], + "description": { + "en": "A map showing roads and whether they're cleared in winter" + }, + "overrideAll": { + "tagRenderings+": [ + { + "id": "winter_service", + "question": { + "en": "Is this road serviced (e.g. cleared of snow) in winter?" + }, + "mappings": [ + { + "if": "winter_service=yes", + "then": { + "en": "This road is serviced in winter" + }, + "icon": "snowflake:green" + }, + { + "if": "winter_service=limited", + "then": { + "en": "This road is serviced in winter, but only to a limited extent. This is often signposted as well." + }, + "icon": "snowflake:yellow" + }, + { + "if": "winter_service=no", + "then": { + "en": "This road is not serviced in winter" + }, + "icon": "snowflake:red" + } + ] + } + ] + }, + "hideFromOverview": true +} \ No newline at end of file diff --git a/langs/themes/ca.json b/langs/themes/ca.json index 89f2719199..07c9ec19f7 100644 --- a/langs/themes/ca.json +++ b/langs/themes/ca.json @@ -876,28 +876,26 @@ } }, "2": { - "name": "Tots els carrers", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "Aquest carrer està il·luminat" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Aquest carrer està il·luminat" + }, + "1": { + "then": "Aquest carrer no està il·luminat" + }, + "2": { + "then": "Aquest carrer està il·luminat per la nit" + }, + "3": { + "then": "Aquest carrer està il·luminat 24/7" + } }, - "1": { - "then": "Aquest carrer no està il·luminat" - }, - "2": { - "then": "Aquest carrer està il·luminat per la nit" - }, - "3": { - "then": "Aquest carrer està il·luminat 24/7" - } - }, - "question": "Aquest carrer està il·luminat?" + "question": "Aquest carrer està il·luminat?" + } } - }, - "title": { - "render": "Carrer" } } }, diff --git a/langs/themes/cs.json b/langs/themes/cs.json index 0ab985cb71..c0224d0334 100644 --- a/langs/themes/cs.json +++ b/langs/themes/cs.json @@ -1168,28 +1168,26 @@ } }, "2": { - "name": "Všechny ulice", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "Tato ulice je osvětlená" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Tato ulice je osvětlená" + }, + "1": { + "then": "Tato ulice není osvětlená" + }, + "2": { + "then": "Tato ulice je v noci osvětlená" + }, + "3": { + "then": "Tato ulice je osvětlena 24/7" + } }, - "1": { - "then": "Tato ulice není osvětlená" - }, - "2": { - "then": "Tato ulice je v noci osvětlená" - }, - "3": { - "then": "Tato ulice je osvětlena 24/7" - } - }, - "question": "Je tato ulice osvětlená?" + "question": "Je tato ulice osvětlená?" + } } - }, - "title": { - "render": "Ulice" } } }, diff --git a/langs/themes/da.json b/langs/themes/da.json index 0552ecf665..80ba8b2920 100644 --- a/langs/themes/da.json +++ b/langs/themes/da.json @@ -687,28 +687,26 @@ } }, "2": { - "name": "Alle gader", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "Denne gade er oplyst" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Denne gade er oplyst" + }, + "1": { + "then": "Denne gade er ikke oplyst" + }, + "2": { + "then": "Denne gade er oplyst om natten" + }, + "3": { + "then": "Denne gade er oplyst 24/7" + } }, - "1": { - "then": "Denne gade er ikke oplyst" - }, - "2": { - "then": "Denne gade er oplyst om natten" - }, - "3": { - "then": "Denne gade er oplyst 24/7" - } - }, - "question": "Er denne gade oplyst?" + "question": "Er denne gade oplyst?" + } } - }, - "title": { - "render": "Gade" } } }, diff --git a/langs/themes/de.json b/langs/themes/de.json index e82d5d44af..f43f16d7f7 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -1202,28 +1202,26 @@ } }, "2": { - "name": "Alle Straßen", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "Diese Straße ist beleuchtet" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Diese Straße ist beleuchtet" + }, + "1": { + "then": "Diese Straße ist nicht beleuchtet" + }, + "2": { + "then": "Diese Straße ist nachts beleuchtet" + }, + "3": { + "then": "Diese Straße ist durchgehend beleuchtet" + } }, - "1": { - "then": "Diese Straße ist nicht beleuchtet" - }, - "2": { - "then": "Diese Straße ist nachts beleuchtet" - }, - "3": { - "then": "Diese Straße ist durchgehend beleuchtet" - } - }, - "question": "Ist diese Straße beleuchtet?" + "question": "Ist diese Straße beleuchtet?" + } } - }, - "title": { - "render": "Straße" } } }, diff --git a/langs/themes/en.json b/langs/themes/en.json index 729c671b4f..0fa5aeda95 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -1234,28 +1234,26 @@ } }, "2": { - "name": "All streets", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "This street is lit" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "This street is lit" + }, + "1": { + "then": "This street is not lit" + }, + "2": { + "then": "This street is lit at night" + }, + "3": { + "then": "This street is lit 24/7" + } }, - "1": { - "then": "This street is not lit" - }, - "2": { - "then": "This street is lit at night" - }, - "3": { - "then": "This street is lit 24/7" - } - }, - "question": "Is this street lit?" + "question": "Is this street lit?" + } } - }, - "title": { - "render": "Street" } } }, @@ -1378,5 +1376,36 @@ "description": "On this map, you'll find waste baskets near you. If a waste basket is missing on this map, you can add it yourself.", "shortDescription": "A map with waste baskets", "title": "Waste Baskets" + }, + "winter_service": { + "description": "A map showing roads and whether they're cleared in winter", + "layers": { + "0": { + "description": "Streets that have some form of winter service", + "name": "Serviced streets", + "title": { + "render": "Serviced street" + } + } + }, + "overrideAll": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "This road is serviced in winter" + }, + "1": { + "then": "This road is serviced in winter, but only to a limited extent. This is often signposted as well." + }, + "2": { + "then": "This road is not serviced in winter" + } + }, + "question": "Is this road serviced (e.g. cleared of snow) in winter?" + } + } + }, + "title": "Winter Service" } } \ No newline at end of file diff --git a/langs/themes/es.json b/langs/themes/es.json index 3ca061daed..9b673c1f6e 100644 --- a/langs/themes/es.json +++ b/langs/themes/es.json @@ -1159,28 +1159,26 @@ } }, "2": { - "name": "Todas las calles", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "Esta calle está iluminada" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Esta calle está iluminada" + }, + "1": { + "then": "Esta calle no está iluminada" + }, + "2": { + "then": "Esta calle está iluminada por la noche" + }, + "3": { + "then": "Esta calle está iluminada 24/7" + } }, - "1": { - "then": "Esta calle no está iluminada" - }, - "2": { - "then": "Esta calle está iluminada por la noche" - }, - "3": { - "then": "Esta calle está iluminada 24/7" - } - }, - "question": "¿Está iluminada esta calle?" + "question": "¿Está iluminada esta calle?" + } } - }, - "title": { - "render": "Calle" } } }, diff --git a/langs/themes/eu.json b/langs/themes/eu.json index c352448436..a940a77a81 100644 --- a/langs/themes/eu.json +++ b/langs/themes/eu.json @@ -178,15 +178,6 @@ "sports": { "title": "Kirolak" }, - "street_lighting": { - "layers": { - "2": { - "title": { - "render": "Kalea" - } - } - } - }, "trees": { "title": "Zuhaitzak" }, diff --git a/langs/themes/fr.json b/langs/themes/fr.json index 7d88aba22c..0686170e04 100644 --- a/langs/themes/fr.json +++ b/langs/themes/fr.json @@ -982,28 +982,26 @@ } }, "2": { - "name": "Toutes les rues", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "Cette rue est éclairée" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Cette rue est éclairée" + }, + "1": { + "then": "Cette rue n’est pas éclairée" + }, + "2": { + "then": "Cette rue est éclairée la nuit" + }, + "3": { + "then": "Cette rue est éclairée en permanence" + } }, - "1": { - "then": "Cette rue n’est pas éclairée" - }, - "2": { - "then": "Cette rue est éclairée la nuit" - }, - "3": { - "then": "Cette rue est éclairée en permanence" - } - }, - "question": "Cette rue est-elle éclairée ?" + "question": "Cette rue est-elle éclairée ?" + } } - }, - "title": { - "render": "Rue" } } }, diff --git a/langs/themes/hu.json b/langs/themes/hu.json index 5f4ae6bc25..c4e89bb5c7 100644 --- a/langs/themes/hu.json +++ b/langs/themes/hu.json @@ -431,28 +431,26 @@ } }, "2": { - "name": "Minden utca", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "Ez az utca ki van világítva" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Ez az utca ki van világítva" + }, + "1": { + "then": "Ez az utca nincs kivilágítva" + }, + "2": { + "then": "Ez az utca éjjel ki van világítva" + }, + "3": { + "then": "Ez az utca éjjel-nappal ki van világítva" + } }, - "1": { - "then": "Ez az utca nincs kivilágítva" - }, - "2": { - "then": "Ez az utca éjjel ki van világítva" - }, - "3": { - "then": "Ez az utca éjjel-nappal ki van világítva" - } - }, - "question": "Ki van-e világítva ez az utca?" + "question": "Ki van-e világítva ez az utca?" + } } - }, - "title": { - "render": "Utca" } } }, diff --git a/langs/themes/it.json b/langs/themes/it.json index 7e549ebb3f..fc77a01064 100644 --- a/langs/themes/it.json +++ b/langs/themes/it.json @@ -566,28 +566,26 @@ } }, "2": { - "name": "Tutte le strade", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "Questa strada è illuminata" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Questa strada è illuminata" + }, + "1": { + "then": "Questa strada non è illuminata" + }, + "2": { + "then": "Questa strada è illuminata di sera" + }, + "3": { + "then": "Questa strada è illuminata 24 ore su 24" + } }, - "1": { - "then": "Questa strada non è illuminata" - }, - "2": { - "then": "Questa strada è illuminata di sera" - }, - "3": { - "then": "Questa strada è illuminata 24 ore su 24" - } - }, - "question": "Questa strada è illuminata?" + "question": "Questa strada è illuminata?" + } } - }, - "title": { - "render": "Strada" } } }, diff --git a/langs/themes/ko.json b/langs/themes/ko.json index 076fff142d..1e1e49476b 100644 --- a/langs/themes/ko.json +++ b/langs/themes/ko.json @@ -1168,28 +1168,26 @@ } }, "2": { - "name": "모든 거리", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "이 거리는 밝습니다" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "이 거리는 밝습니다" + }, + "1": { + "then": "이 거리는 밝지 않습니다" + }, + "2": { + "then": "이 거리는 밤에 밝습니다" + }, + "3": { + "then": "이 거리는 24시간 밝습니다" + } }, - "1": { - "then": "이 거리는 밝지 않습니다" - }, - "2": { - "then": "이 거리는 밤에 밝습니다" - }, - "3": { - "then": "이 거리는 24시간 밝습니다" - } - }, - "question": "이 거리는 밝나요?" + "question": "이 거리는 밝나요?" + } } - }, - "title": { - "render": "거리" } } }, diff --git a/langs/themes/nb_NO.json b/langs/themes/nb_NO.json index e602bac9e4..46055c0f66 100644 --- a/langs/themes/nb_NO.json +++ b/langs/themes/nb_NO.json @@ -440,28 +440,26 @@ } }, "2": { - "name": "Alle gater", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "Denne gaten er belyst" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Denne gaten er belyst" + }, + "1": { + "then": "Denne gaten er ikke belyst" + }, + "2": { + "then": "Denne gaten er belyst nattestid" + }, + "3": { + "then": "Denne gaten er belyst døgnet rundt" + } }, - "1": { - "then": "Denne gaten er ikke belyst" - }, - "2": { - "then": "Denne gaten er belyst nattestid" - }, - "3": { - "then": "Denne gaten er belyst døgnet rundt" - } - }, - "question": "Er denne gaten belyst?" + "question": "Er denne gaten belyst?" + } } - }, - "title": { - "render": "Gate" } } }, diff --git a/langs/themes/nl.json b/langs/themes/nl.json index 61dea1ffa2..c512a1de10 100644 --- a/langs/themes/nl.json +++ b/langs/themes/nl.json @@ -1270,28 +1270,26 @@ } }, "2": { - "name": "Alle straten", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "Deze straat is verlicht" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Deze straat is verlicht" + }, + "1": { + "then": "Deze straat is niet verlicht" + }, + "2": { + "then": "Deze straat is 's nachts verlicht" + }, + "3": { + "then": "Deze straat is 24/7 verlicht" + } }, - "1": { - "then": "Deze straat is niet verlicht" - }, - "2": { - "then": "Deze straat is 's nachts verlicht" - }, - "3": { - "then": "Deze straat is 24/7 verlicht" - } - }, - "question": "Is deze straat verlicht?" + "question": "Is deze straat verlicht?" + } } - }, - "title": { - "render": "Straat" } } }, diff --git a/langs/themes/pa_PK.json b/langs/themes/pa_PK.json index aefe3545fc..c5879317aa 100644 --- a/langs/themes/pa_PK.json +++ b/langs/themes/pa_PK.json @@ -158,12 +158,6 @@ "title": { "render": "روشنی والی سڑک" } - }, - "2": { - "name": "ساریاں سڑکاں", - "title": { - "render": "سڑک" - } } }, "title": "سڑک دیاں روشنیاں" diff --git a/langs/themes/pl.json b/langs/themes/pl.json index 56809ae403..adc045a154 100644 --- a/langs/themes/pl.json +++ b/langs/themes/pl.json @@ -855,28 +855,26 @@ } }, "2": { - "name": "Wszystkie ulice", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "Ta ulica jest oświetlona" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Ta ulica jest oświetlona" + }, + "1": { + "then": "Ta ulica nie jest oświetlona" + }, + "2": { + "then": "Ta ulica jest oświetlona w nocy" + }, + "3": { + "then": "Ta ulica jest oświetlona 24/7" + } }, - "1": { - "then": "Ta ulica nie jest oświetlona" - }, - "2": { - "then": "Ta ulica jest oświetlona w nocy" - }, - "3": { - "then": "Ta ulica jest oświetlona 24/7" - } - }, - "question": "Czy ta ulica jest oświetlona?" + "question": "Czy ta ulica jest oświetlona?" + } } - }, - "title": { - "render": "Ulica" } } }, diff --git a/langs/themes/ru.json b/langs/themes/ru.json index d865e05a04..5292a9bd36 100644 --- a/langs/themes/ru.json +++ b/langs/themes/ru.json @@ -236,14 +236,6 @@ "title": "Спортивные объекты" }, "street_lighting": { - "layers": { - "2": { - "name": "Все улицы", - "title": { - "render": "Улица" - } - } - }, "title": "Уличное освещение" }, "surveillance": { diff --git a/langs/themes/zh_Hant.json b/langs/themes/zh_Hant.json index adcb076260..3278776d81 100644 --- a/langs/themes/zh_Hant.json +++ b/langs/themes/zh_Hant.json @@ -807,28 +807,26 @@ } }, "2": { - "name": "所有道路", - "tagRenderings": { - "lit": { - "mappings": { - "0": { - "then": "這道路有照明" + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "這道路有照明" + }, + "1": { + "then": "這道路沒有照明" + }, + "2": { + "then": "這道路晚上有照明" + }, + "3": { + "then": "這道路 24/7 有照明" + } }, - "1": { - "then": "這道路沒有照明" - }, - "2": { - "then": "這道路晚上有照明" - }, - "3": { - "then": "這道路 24/7 有照明" - } - }, - "question": "這道路有照明嗎?" + "question": "這道路有照明嗎?" + } } - }, - "title": { - "render": "照明" } } }, diff --git a/src/Models/Constants.ts b/src/Models/Constants.ts index 8eb2984674..cad980136d 100644 --- a/src/Models/Constants.ts +++ b/src/Models/Constants.ts @@ -191,6 +191,7 @@ export default class Constants { "resolved", "ring", "scissors", + "snowflake", "square", "square_rounded", "teardrop", diff --git a/src/assets/svg/Snowflake.svelte b/src/assets/svg/Snowflake.svelte new file mode 100644 index 0000000000..cce4078a2c --- /dev/null +++ b/src/assets/svg/Snowflake.svelte @@ -0,0 +1,4 @@ + + \ No newline at end of file From cf1ae2f354a63bbec87325cbebe249f92158891a Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Sun, 9 Mar 2025 23:52:36 +0100 Subject: [PATCH 02/65] Themes(postboxes): Drop old tagging, add returns_only as option --- .../layers/parcel_lockers/parcel_lockers.json | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/assets/layers/parcel_lockers/parcel_lockers.json b/assets/layers/parcel_lockers/parcel_lockers.json index c82c8cfc1b..5b51a38fa0 100644 --- a/assets/layers/parcel_lockers/parcel_lockers.json +++ b/assets/layers/parcel_lockers/parcel_lockers.json @@ -21,17 +21,7 @@ "es": "Capa que muestra taquillas para recoger y enviar paquetes." }, "source": { - "osmTags": { - "or": [ - "amenity=parcel_locker", - { - "and": [ - "amenity=vending_machine", - "vending=parcel_pickup;parcel_mail_in" - ] - } - ] - } + "osmTags": "amenity=parcel_locker" }, "minzoom": 12, "title": { @@ -259,9 +249,15 @@ "cs": "Z této schránky na balíky nemůžete posílat balíky", "es": "No puedes enviar paquetes desde esta taquilla" } + }, + { + "if": "parcel_mail_in=returns_only", + "then": { + "en": "You can send packages from this parcel locker, but only for returns", + "nl": "Je kan pakk etten versturen vanuit deze pakketautomaat, maar alleen voor retouren" + } } - ], - "condition": "amenity=parcel_locker" + ] }, { "id": "pickup", @@ -302,8 +298,7 @@ "es": "No puedes recoger paquetes de esta taquilla" } } - ], - "condition": "amenity=parcel_locker" + ] } ], "filter": [ @@ -313,4 +308,4 @@ "allowMove": { "enableImproveAccuracy": true } -} +} \ No newline at end of file From 4a23fb87a16e00bef7566c70200b38637b92d76b Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Mon, 10 Mar 2025 00:03:22 +0100 Subject: [PATCH 03/65] Themes(guideposts): Add question for name, ref and elevation (#2326) --- assets/layers/guidepost/guidepost.json | 50 +++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/assets/layers/guidepost/guidepost.json b/assets/layers/guidepost/guidepost.json index 18b8f6c403..407e8fc3ff 100644 --- a/assets/layers/guidepost/guidepost.json +++ b/assets/layers/guidepost/guidepost.json @@ -133,6 +133,54 @@ } } ] + }, + { + "id": "name", + "question": { + "en": "What is the name noted on this guidepost?" + }, + "freeform": { + "key": "name", + "type": "string", + "placeholder": { + "en": "Name on the guidepost" + } + }, + "render": { + "en": "Name noted on the guidepost: {name}" + } + }, + { + "id": "ref", + "question": { + "en": "What is the reference number of this guidepost?" + }, + "freeform": { + "key": "ref", + "type": "string", + "placeholder": { + "en": "Reference number of the guidepost" + } + }, + "render": { + "en": "Reference number of the guidepost: {ref}" + } + }, + { + "id": "ele", + "question": { + "en": "What is the elevation noted on this guidepost?" + }, + "freeform": { + "key": "ele", + "type": "float", + "placeholder": { + "en": "Elevation on the guidepost (in meters)" + } + }, + "render": { + "en": "Elevation noted on the guidepost: {ele} m" + } } ], "deletion": true, @@ -140,4 +188,4 @@ "enableImproveAccuracy": true, "enableRelocation": false } -} +} \ No newline at end of file From 19189edbc03b41ebe835f77dc3ef3121129f135f Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Thu, 13 Mar 2025 19:11:09 +0100 Subject: [PATCH 04/65] Chore: Gitlens settings --- .vscode/settings.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index aa73d8edf8..b607ae0fc3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -53,5 +53,12 @@ "[svelte]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "editor.formatOnSave": true + "editor.formatOnSave": true, + "gitlens.remotes": [ + { + "domain": "source.mapcomplete.org", + "type": "Gitea", + "name": "MapComplete Forgejo" + } + ] } From 5c7246766eb4d5dcbc3ad42b75ed6a93358baf07 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Thu, 13 Mar 2025 20:35:53 +0100 Subject: [PATCH 05/65] Themes(kerbs and crossings): Remove crossing type, add tactile_paving=partial, invalid values --- assets/layers/crossings/crossings.json | 86 ++++----- langs/layers/ca.json | 42 +---- langs/layers/cs.json | 42 +---- langs/layers/da.json | 25 +-- langs/layers/de.json | 42 +---- langs/layers/en.json | 244 +++++++++++++++++++++---- langs/layers/es.json | 42 +---- langs/layers/fr.json | 23 +-- langs/layers/nl.json | 63 +++---- 9 files changed, 306 insertions(+), 303 deletions(-) diff --git a/assets/layers/crossings/crossings.json b/assets/layers/crossings/crossings.json index 354c455cdc..77c56e9ddb 100644 --- a/assets/layers/crossings/crossings.json +++ b/assets/layers/crossings/crossings.json @@ -166,69 +166,44 @@ "tagRenderings": [ "images", { - "id": "crossing-type", + "id": "signals", "question": { - "en": "What kind of crossing is this?", - "nl": "Wat voor oversteekplaats is dit?", - "de": "Was ist das für eine Kreuzung?", - "es": "¿Qué tipo de cruce es este?", - "fr": "Quel type de passage piéton est-ce ?", - "ca": "Quin tipus de creuament és aquest?", - "cs": "Co je to za přechod?" + "en": "Are there traffic signals at this crossing?", + "nl": "Zijn er verkeerslichten bij deze oversteekplaats?" }, - "condition": "highway=crossing", "mappings": [ { - "if": "crossing=uncontrolled", + "if": "crossing:signals=no", "then": { - "en": "Crossing, without traffic lights", - "nl": "Oversteekplaats, zonder verkeerslichten", - "de": "Kreuzungen ohne Ampeln", - "es": "Cruce, sin semáforos", - "fr": "Passage piéton, sans feux de signalisation", - "ca": "Creuament, sense semàfors", - "cs": "Přechod bez světelné signalizace" + "en": "There are no traffic signals at this crossing", + "nl": "Er zijn geen verkeerslichten bij deze oversteekplaats" + } + }, + { + "if": "crossing:signals=yes", + "then": { + "en": "There are traffic signals at this crossing", + "nl": "Er zijn verkeerslichten bij deze oversteekplaats" + }, + "icon": { + "class": "small", + "path": "./assets/layers/crossings/traffic_lights.svg" } }, { "if": "crossing=traffic_signals", "then": { - "en": "Crossing with traffic signals", - "nl": "Oversteekplaats met verkeerslichten", - "de": "Kreuzungen mit Ampeln", - "es": "Cruce con semáforos", - "fr": "Passage piéton avec des feux de signalisation", - "ca": "Creuament amb semàfors", - "cs": "Přechod se světelnou signalizací" - } - }, - { - "if": "crossing=zebra", - "then": { - "en": "Zebra crossing", - "nl": "Zebrapad", - "de": "Zebrastreifen", - "ca": "Pas de zebra", - "es": "Paso de peatones", - "fr": "Passage piéton", - "cs": "Zebra přechod" + "en": "There are traffic signals at this crossing", + "nl": "Er zijn verkeerslichten bij deze oversteekplaats" }, - "hideInAnswer": true - }, - { - "if": "crossing=unmarked", - "then": { - "en": "Crossing without crossing markings", - "nl": "Oversteekplaats zonder kruispuntmarkeringen", - "de": "Kreuzung ohne Kreuzungsmarkierungen", - "es": "Cruce sin marcas de cruce", - "fr": "Passage piéton sans marquages", - "ca": "Creuament sense senyalitzar", - "cs": "Přechod bez označení přechodu" + "icon": { + "class": "small", + "path": "./assets/layers/crossings/traffic_lights.svg" }, "hideInAnswer": true } - ] + ], + "condition": "highway=crossing" }, { "id": "markings", @@ -467,7 +442,9 @@ "fixme=Free-form value used in MapComplete for crossing:markings" ] }, - "multiAnswer": true + "multiAnswer": true, + "condition": "highway=crossing", + "invalidValues": "crossing:markings=yes" }, { "id": "crossing-bicycle-allowed", @@ -599,6 +576,13 @@ "cs": "Tento přechod má hmatovou dlažbu, ale ne správně" }, "hideInAnswer": true + }, + { + "if": "tactile_paving=partial", + "then": { + "en": "This crrosing has tactile paving, but only on one side", + "nl": "Deze oversteekplaats heeft een geleidelijn, maar slechts aan één kant" + } } ] }, @@ -949,4 +933,4 @@ "enableImproveAccuracy": true, "enableRelocation": false } -} +} \ No newline at end of file diff --git a/langs/layers/ca.json b/langs/layers/ca.json index a558af062b..41646be4f7 100644 --- a/langs/layers/ca.json +++ b/langs/layers/ca.json @@ -357,6 +357,12 @@ "render": "Telefèric {name}" } }, + "all_streets": { + "name": "Tots els carrers", + "title": { + "render": "Carrer" + } + }, "ambulancestation": { "description": "Una estició d'abulàncies és una àrea per a emmagatzemar ambulàncies, equipament mèdic, equips de protecció personal i altres subministraments mèdics.", "name": "Mapa d'estacions d'ambulàncies", @@ -3796,23 +3802,6 @@ }, "question": "Aquest creuament té superfície podotàctil?" }, - "crossing-type": { - "mappings": { - "0": { - "then": "Creuament, sense semàfors" - }, - "1": { - "then": "Creuament amb semàfors" - }, - "2": { - "then": "Pas de zebra" - }, - "3": { - "then": "Creuament sense senyalitzar" - } - }, - "question": "Quin tipus de creuament és aquest?" - }, "crossing-vibration": { "mappings": { "0": { @@ -13569,25 +13558,6 @@ "walls_and_buildings": { "description": "Capa construïda especial que proporciona totes les parets i edificis. Aquesta capa és útil als predefinits per a objectes que es poden col·locar a les parets (p. ex. DEA, bústies de correus, entrades, adreces, càmeres de vigilància, ...). Aquesta capa és invisible per defecte i no es pot activar per l'usuari.", "snapName": "un mur o edifici", - "tagRenderings": { - "entrance_info": { - "mappings": { - "0": { - "then": "No s'ha senyalitzat cap entrada" - }, - "1": { - "then": "Cap de les {_entrance_count} entrades té informació d'amplada encara" - } - }, - "render": { - "after": "{_entrances_count_without_width_count} entrades encara no tenen informació d'amplada", - "before": "

Entrades

Aquest edifici té {_entrances_count} entrades:", - "special": { - "tagrendering": "Una entrada de {canonical(width)}" - } - } - } - }, "title": { "render": "Paret o edifici" } diff --git a/langs/layers/cs.json b/langs/layers/cs.json index 96b9af7981..8411a69b9f 100644 --- a/langs/layers/cs.json +++ b/langs/layers/cs.json @@ -357,6 +357,12 @@ "render": "Dráha {name}" } }, + "all_streets": { + "name": "Všechny ulice", + "title": { + "render": "Ulice" + } + }, "ambulancestation": { "description": "Stanice záchranné služby je prostor pro umístění sanitních vozidel, zdravotnického vybavení, osobních ochranných prostředků a dalšího zdravotnického materiálu.", "name": "Mapa stanic rychlé záchranné služby", @@ -3835,23 +3841,6 @@ }, "question": "Má tento přechod hmatovou dlažbu?" }, - "crossing-type": { - "mappings": { - "0": { - "then": "Přechod bez světelné signalizace" - }, - "1": { - "then": "Přechod se světelnou signalizací" - }, - "2": { - "then": "Zebra přechod" - }, - "3": { - "then": "Přechod bez označení přechodu" - } - }, - "question": "Co je to za přechod?" - }, "crossing-vibration": { "mappings": { "0": { @@ -11230,25 +11219,6 @@ "walls_and_buildings": { "description": "Speciální zabudovaná vrstva poskytující všechny stěny a budovy. Tato vrstva je užitečná v předvolbách pro objekty, které lze umístit ke stěnám (např. AED, poštovní schránky, vchody, adresy, bezpečnostní kamery, …). Tato vrstva je ve výchozím nastavení neviditelná a uživatel ji nemůže přepínat.", "snapName": "zeď nebo budova", - "tagRenderings": { - "entrance_info": { - "mappings": { - "0": { - "then": "Nebyl označen žádný vchod" - }, - "1": { - "then": "Žádný z {_entrance_count} vchodů zatím nemá informace o šířce" - } - }, - "render": { - "after": "{_entrances_count_without_width_count} vchody zatím nemají informace o šířce", - "before": "

Vchody

Tato budova má {_entrances_count} vchodů:", - "special": { - "tagrendering": "vchod {canonical(width)}" - } - } - } - }, "title": { "render": "Zeď nebo budova" } diff --git a/langs/layers/da.json b/langs/layers/da.json index 08ace78314..2642b6788f 100644 --- a/langs/layers/da.json +++ b/langs/layers/da.json @@ -24,6 +24,12 @@ "render": "Kendt adresse" } }, + "all_streets": { + "name": "Alle gader", + "title": { + "render": "Gade" + } + }, "ambulancestation": { "description": "En ambulancestation er et område til opbevaring af ambulancekøretøjer, medicinsk udstyr, personlige værnemidler og andre medicinske forsyninger.", "name": "Kort over ambulancestationer", @@ -2898,25 +2904,6 @@ }, "walls_and_buildings": { "description": "Specielt indbygget lag giver alle vægge og bygninger. Dette lag er nyttigt i forudindstillinger til objekter, der kan placeres mod vægge (f.eks. AED'er, postkasser, indgange, adresser, overvågningskameraer, …). Dette lag er usynligt som standard og kan ikke skiftes af brugeren.", - "tagRenderings": { - "entrance_info": { - "mappings": { - "0": { - "then": "Der er ikke markeret nogen indgang" - }, - "1": { - "then": "Ingen af {_entrance_count}-indgangene har oplysninger om bredde endnu" - } - }, - "render": { - "after": "{_entrances_count_without_width_count} indgange har endnu ikke oplysninger om bredde", - "before": "

Indgange

Denne bygning har {_entrances_count} indgange:", - "special": { - "tagrendering": "En indgang på {canonical(width)}" - } - } - } - }, "title": { "render": "Mur eller bygning" } diff --git a/langs/layers/de.json b/langs/layers/de.json index 510eefac7c..04da9b073f 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -357,6 +357,12 @@ "render": "Seilbahn {name}" } }, + "all_streets": { + "name": "Alle Straßen", + "title": { + "render": "Straße" + } + }, "ambulancestation": { "description": "Eine Rettungswache ist ein Ort, an dem Rettungsfahrzeuge, medizinische Ausrüstung, persönliche Schutzausrüstung und anderes medizinisches Material untergebracht sind.", "name": "Rettungswachen", @@ -3766,23 +3772,6 @@ }, "question": "Gibt es an dieser Kreuzung ein Blindenleitsystem?" }, - "crossing-type": { - "mappings": { - "0": { - "then": "Kreuzungen ohne Ampeln" - }, - "1": { - "then": "Kreuzungen mit Ampeln" - }, - "2": { - "then": "Zebrastreifen" - }, - "3": { - "then": "Kreuzung ohne Kreuzungsmarkierungen" - } - }, - "question": "Was ist das für eine Kreuzung?" - }, "crossing-vibration": { "mappings": { "0": { @@ -13545,25 +13534,6 @@ "walls_and_buildings": { "description": "Spezielle Ebene, die alle Wände und Gebäude bereitstellt. Diese Ebene ist nützlich in Voreinstellungen für Objekte, die an Wänden platziert werden können (z. B. AEDs, Briefkästen, Eingänge, Adressen, Überwachungskameras, ...). Diese Ebene ist standardmäßig unsichtbar und kann vom Benutzer nicht umgeschaltet werden.", "snapName": "eine Wand oder ein Gebäude", - "tagRenderings": { - "entrance_info": { - "mappings": { - "0": { - "then": "Es wurde kein Eingang markiert" - }, - "1": { - "then": "Keiner der {_entrance_count} Eingänge hat bisher Angaben zur Breite" - } - }, - "render": { - "after": "{_entrances_count_without_width_count} Eingänge haben keine Angaben zur Breite", - "before": "

Eingänge

Das Gebäude hat {_entrances_count} Eingänge:", - "special": { - "tagrendering": "Ein Eingang von {canonical(width)}" - } - } - } - }, "title": { "render": "Wand oder Gebäude" } diff --git a/langs/layers/en.json b/langs/layers/en.json index d8ea29115e..70b2cc6b89 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -357,6 +357,13 @@ "render": "Aerialway {name}" } }, + "all_streets": { + "description": "Layer with (almost) all streets", + "name": "All streets", + "title": { + "render": "Street" + } + }, "ambulancestation": { "description": "An ambulance station is an area for storage of ambulance vehicles, medical equipment, personal protective equipment, and other medical supplies.", "name": "Map of ambulance stations", @@ -565,6 +572,17 @@ } }, "question": "Does this artwork serve as a memorial?" + }, + "doubles_as_wayside_shrine": { + "mappings": { + "0": { + "then": "This artwork acts as a wayside shrine" + }, + "1": { + "then": "This artwork does not act as a wayside shrine" + } + }, + "question": "Does this artwork also double as wayside shrine?" } }, "title": { @@ -3874,27 +3892,13 @@ }, "2": { "then": "This crossing has tactile paving, but is not correct" + }, + "3": { + "then": "This crrosing has tactile paving, but only on one side" } }, "question": "Does this crossing have tactile paving?" }, - "crossing-type": { - "mappings": { - "0": { - "then": "Crossing, without traffic lights" - }, - "1": { - "then": "Crossing with traffic signals" - }, - "2": { - "then": "Zebra crossing" - }, - "3": { - "then": "Crossing without crossing markings" - } - }, - "question": "What kind of crossing is this?" - }, "crossing-vibration": { "mappings": { "0": { @@ -3956,6 +3960,20 @@ }, "question": "What kind of markings does this crossing have?", "render": "This crossing has {crossing:markings} markings" + }, + "signals": { + "mappings": { + "0": { + "then": "There are no traffic signals at this crossing" + }, + "1": { + "then": "There are traffic signals at this crossing" + }, + "2": { + "then": "There are traffic signals at this crossing" + } + }, + "question": "Are there traffic signals at this crossing?" } }, "title": { @@ -6374,6 +6392,27 @@ } }, "tagRenderings": { + "ele": { + "freeform": { + "placeholder": "Elevation on the guidepost (in meters)" + }, + "question": "What is the elevation noted on this guidepost?", + "render": "Elevation noted on the guidepost: {ele} m" + }, + "name": { + "freeform": { + "placeholder": "Name on the guidepost" + }, + "question": "What is the name noted on this guidepost?", + "render": "Name noted on the guidepost: {name}" + }, + "ref": { + "freeform": { + "placeholder": "Reference number of the guidepost" + }, + "question": "What is the reference number of this guidepost?", + "render": "Reference number of the guidepost: {ref}" + }, "type": { "mappings": { "0": { @@ -7926,6 +7965,9 @@ }, "1": { "then": "You can't send packages from this parcel locker" + }, + "2": { + "then": "You can send packages from this parcel locker, but only for returns" } }, "question": "Can you send packages from this parcel locker?" @@ -10086,6 +10128,15 @@ }, "scouting_group": { "description": "A map showing scouting groups.", + "filter": { + "1": { + "options": { + "0": { + "question": "Search for brand: {search}" + } + } + } + }, "name": "Scouting groups", "presets": { "0": { @@ -13715,25 +13766,6 @@ "walls_and_buildings": { "description": "Special builtin layer providing all walls and buildings. This layer is useful in presets for objects which can be placed against walls (e.g. AEDs, postboxes, entrances, addresses, surveillance cameras, …). This layer is invisible by default and not toggleable by the user.", "snapName": "a wall or building", - "tagRenderings": { - "entrance_info": { - "mappings": { - "0": { - "then": "No entrance has been marked" - }, - "1": { - "then": "None of the {_entrance_count} entrances have width information yet" - } - }, - "render": { - "after": "{_entrances_count_without_width_count} entrances don't have width information yet", - "before": "

Entrances

This building has {_entrances_count} entrances:", - "special": { - "tagrendering": "An entrance of {canonical(width)}" - } - } - } - }, "title": { "render": "Wall or building" } @@ -13902,6 +13934,146 @@ "render": "Waste Disposal" } }, + "wayside_shrine": { + "description": "Shrines are religious places that are dedicated to specific deities, saints and other figures of religious importance. Typically, the contain religious depictions and people frequently leave offerings at those places. Wayside shrines are small shrines that can be found next to a road or pathway and are frequented by travellers passing by.", + "name": "Wayside Shrines", + "presets": { + "0": { + "description": "A wayside shrine typically shows a religious depiction, usually placed by a road or pathway. ", + "title": "a wayside shrine" + }, + "1": { + "description": "A wayside shrine typically shows a religious depiction, usually placed by a road or pathway. This shrine is mounted on a wall", + "title": "a wayside shrine mounted on a wall" + } + }, + "tagRenderings": { + "denomination_christian": { + "mappings": { + "0": { + "then": "The religious subdenomination is Catholic" + }, + "1": { + "then": "The religious subdenomination is Roman Catholic" + }, + "2": { + "then": "The religious subdenomination is Orthodox" + }, + "3": { + "then": "The religious subdenomination is Greek-Orthodox" + }, + "4": { + "then": "The religious subdenomination is Russian-Orthodox" + }, + "5": { + "then": "The religious subdenomination is Serbian Orthodox" + }, + "6": { + "then": "The religious subdenomination is Protestant" + }, + "7": { + "then": "The religious subdenomination is Anglican" + }, + "8": { + "then": "The religious subdenomination is Adventist" + }, + "9": { + "then": "The religious subdenomination is evangelical" + } + }, + "question": "What's the Christian denomination of the shrine?", + "render": "The religious denomination is {denomination}" + }, + "denomination_jewish": { + "mappings": { + "0": { + "then": "The religious subdenomination is Conservative" + }, + "1": { + "then": "The religious subdenomination is Orthodox" + }, + "2": { + "then": "The religious subdenomination is Hasidic" + }, + "3": { + "then": "The religious subdenomination is Reform" + } + }, + "question": "What's the Jewish denomination of this shrine?", + "render": "The religious subdenomination is {denomination}" + }, + "denomination_muslim": { + "mappings": { + "0": { + "then": "The religious subdenomination is Shia" + }, + "1": { + "then": "The religious subdenomination is Sunni" + }, + "2": { + "then": "The religious subdenomination is Sufi" + } + }, + "question": "What's the Muslim denomination of this shrine?", + "render": "The religious subdenomination is {denomination}" + }, + "denomination_other": { + "question": "What's the denomination of this shrine?", + "render": "The denomination of this shrine is {denomination}" + }, + "religion": { + "mappings": { + "0": { + "then": "This is a Christian shrine" + }, + "1": { + "then": "This is a Buddhist shrine" + }, + "10": { + "then": "This is a Zoroastrian shrine" + }, + "2": { + "then": "This is a Hindu shrine" + }, + "3": { + "then": "This is a Jain shrine" + }, + "4": { + "then": "This is a Jewish shrine" + }, + "5": { + "then": "This is an Islamic shrine" + }, + "6": { + "then": "This is a Pagan shrine" + }, + "7": { + "then": "This is a Shinto shrine" + }, + "8": { + "then": "This is a Sikh shrine" + }, + "9": { + "then": "This is a Taoist shrine" + } + }, + "question": "To which religion is this shrine dedicated?", + "render": "This shrine is {religion}" + }, + "shrine_name": { + "mappings": { + "0": { + "then": "This shrine does not have a name" + } + }, + "question": "What's the name of this shrine?", + "render": "The name of this shrine is {name}" + } + }, + "title": { + "render": "Wayside Shrine {name}" + } + }, "windturbine": { "description": "Modern windmills generating electricity", "name": "wind turbine", diff --git a/langs/layers/es.json b/langs/layers/es.json index c7875c70a7..a7943852b7 100644 --- a/langs/layers/es.json +++ b/langs/layers/es.json @@ -339,6 +339,12 @@ "render": "Teleférico {name}" } }, + "all_streets": { + "name": "Todas las calles", + "title": { + "render": "Calle" + } + }, "ambulancestation": { "description": "Una estación de ambulancias es un área para el almacenamiento de vehículos de ambulancia, equipo médico, equipo de protección personal y otros suministros médicos.", "name": "Mapa de estaciones de ambulancias", @@ -3537,23 +3543,6 @@ }, "question": "¿Este cruce tiene pavimento táctil?" }, - "crossing-type": { - "mappings": { - "0": { - "then": "Cruce, sin semáforos" - }, - "1": { - "then": "Cruce con semáforos" - }, - "2": { - "then": "Paso de peatones" - }, - "3": { - "then": "Cruce sin marcas de cruce" - } - }, - "question": "¿Qué tipo de cruce es este?" - }, "crossing-vibration": { "mappings": { "0": { @@ -12433,25 +12422,6 @@ "walls_and_buildings": { "description": "Capa incorporada especial que proporciona todas las paredes y edificios. Esta capa es útil en los ajustes preestablecidos para objetos que se pueden colocar contra las paredes (por ejemplo, DEA, buzones, entradas, direcciones, cámaras de vigilancia, etc.). Esta capa es invisible de forma predeterminada y el usuario no puede activarla.", "snapName": "una pared o edificio", - "tagRenderings": { - "entrance_info": { - "mappings": { - "0": { - "then": "No se ha marcado ninguna entrada" - }, - "1": { - "then": "Ninguna de las {_entrance_count} entradas tiene información de ancho todavía" - } - }, - "render": { - "after": "{_entrances_count_without_width_count} entradas aún no tienen información de ancho", - "before": "

Entradas

Este edificio tiene {_entrances_count} entradas:", - "special": { - "tagrendering": "Una entrada de {canonical(width)}" - } - } - } - }, "title": { "render": "Pared o edificio" } diff --git a/langs/layers/fr.json b/langs/layers/fr.json index fa7aace690..e9562cce7b 100644 --- a/langs/layers/fr.json +++ b/langs/layers/fr.json @@ -262,6 +262,12 @@ } } }, + "all_streets": { + "name": "Toutes les rues", + "title": { + "render": "Rue" + } + }, "ambulancestation": { "description": "Une station d’ambulance est un lieu où sont stockés les véhicules d’urgence ainsi que de l’équipement médical.", "name": "Couche des ambulances", @@ -2528,23 +2534,6 @@ }, "question": "Est-ce que ce passage piéton a une surface podotactile ?" }, - "crossing-type": { - "mappings": { - "0": { - "then": "Passage piéton, sans feux de signalisation" - }, - "1": { - "then": "Passage piéton avec des feux de signalisation" - }, - "2": { - "then": "Passage piéton" - }, - "3": { - "then": "Passage piéton sans marquages" - } - }, - "question": "Quel type de passage piéton est-ce ?" - }, "crossing-vibration": { "mappings": { "0": { diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 63684eeb88..7d06009de1 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -343,6 +343,13 @@ "render": "Kabelbaan {name}" } }, + "all_streets": { + "description": "Laag met (bijna) alle straten", + "name": "Alle straten", + "title": { + "render": "Straat" + } + }, "ambulancestation": { "description": "Een ambulancestation is een plaats waar ambulances, medisch materiaal, persoonlijk beschermingsmateriaal en aanverwanten worden bewaard.", "name": "Kaart van ambulancestations", @@ -3693,27 +3700,13 @@ }, "2": { "then": "Deze oversteekplaats heeft een geleidelijn, die incorrect is." + }, + "3": { + "then": "Deze oversteekplaats heeft een geleidelijn, maar slechts aan één kant" } }, "question": "Heeft deze oversteekplaats een geleidelijn?" }, - "crossing-type": { - "mappings": { - "0": { - "then": "Oversteekplaats, zonder verkeerslichten" - }, - "1": { - "then": "Oversteekplaats met verkeerslichten" - }, - "2": { - "then": "Zebrapad" - }, - "3": { - "then": "Oversteekplaats zonder kruispuntmarkeringen" - } - }, - "question": "Wat voor oversteekplaats is dit?" - }, "crossing-vibration": { "mappings": { "0": { @@ -3775,6 +3768,20 @@ }, "question": "Wat voor markering heeft deze oversteekplaats?", "render": "Deze oversteekplaats heeft {crossing:markings} markeringen" + }, + "signals": { + "mappings": { + "0": { + "then": "Er zijn geen verkeerslichten bij deze oversteekplaats" + }, + "1": { + "then": "Er zijn verkeerslichten bij deze oversteekplaats" + }, + "2": { + "then": "Er zijn verkeerslichten bij deze oversteekplaats" + } + }, + "question": "Zijn er verkeerslichten bij deze oversteekplaats?" } }, "title": { @@ -6834,6 +6841,9 @@ }, "1": { "then": "Je kan geen pakketten versturen vanuit deze pakketautomaat" + }, + "2": { + "then": "Je kan pakk etten versturen vanuit deze pakketautomaat, maar alleen voor retouren" } }, "question": "Kan je pakketten versturen vanuit deze pakketautomaat?" @@ -11032,25 +11042,6 @@ "walls_and_buildings": { "description": "Speciale ingebouwde laag voor alle muren en gebouwen. Deze laag is nuttig in voorkeuzen voor objecten die tegen muren geplaatst kunnen worden (bv. AEDs, brievenbussen, ingangen, adressen, beveiligingscamera's,…). Deze laag is standaard onzichtbaar en niet in te schakelen door de gebruiker.", "snapName": "een muur of gebouw", - "tagRenderings": { - "entrance_info": { - "mappings": { - "0": { - "then": "Geen ingang is gemarkeerd" - }, - "1": { - "then": "Geen van de {_entrance_count} ingangen hebben al informatie over de breedte" - } - }, - "render": { - "after": "{_entrances_count_without_width_count} ingangen hebben nog geen informatie over de breedte", - "before": "

Ingangen

Dit gebouw heeft {_entrances_count} ingangen:", - "special": { - "tagrendering": "Een ingang van {canonical(width)}" - } - } - } - }, "title": { "render": "Muur of gebouw" } From 455f540cbdd28062578129e66945f0693328b290 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Thu, 13 Mar 2025 21:33:07 +0100 Subject: [PATCH 06/65] Themes(guideposts): Add mappings for empty ref, name and elevation --- assets/layers/guidepost/guidepost.json | 30 +++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/assets/layers/guidepost/guidepost.json b/assets/layers/guidepost/guidepost.json index 407e8fc3ff..a13341ea54 100644 --- a/assets/layers/guidepost/guidepost.json +++ b/assets/layers/guidepost/guidepost.json @@ -148,7 +148,15 @@ }, "render": { "en": "Name noted on the guidepost: {name}" - } + }, + "mappings": [ + { + "if": "noname=yes", + "then": { + "en": "There is no name noted on this guidepost" + } + } + ] }, { "id": "ref", @@ -164,7 +172,15 @@ }, "render": { "en": "Reference number of the guidepost: {ref}" - } + }, + "mappings": [ + { + "if": "noref=yes", + "then": { + "en": "There is no reference number noted on this guidepost" + } + } + ] }, { "id": "ele", @@ -180,7 +196,15 @@ }, "render": { "en": "Elevation noted on the guidepost: {ele} m" - } + }, + "mappings": [ + { + "if": "noele=yes", + "then": { + "en": "There is no elevation noted on this guidepost" + } + } + ] } ], "deletion": true, From d2ed83972fe4f19572729e0169594b88f691bcb8 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Thu, 13 Mar 2025 21:49:23 +0100 Subject: [PATCH 07/65] Themes(winter_service): add colour to serviced_streets, also show winter_service=limited --- .../themes/winter_service/winter_service.json | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/assets/themes/winter_service/winter_service.json b/assets/themes/winter_service/winter_service.json index cda079ef8b..52dc08a6ff 100644 --- a/assets/themes/winter_service/winter_service.json +++ b/assets/themes/winter_service/winter_service.json @@ -21,7 +21,12 @@ "highway!=", "service!=driveway", "highway!=platform", - "winter_service=yes" + { + "or": [ + "winter_service=yes", + "winter_service=limited" + ] + } ] } }, @@ -39,7 +44,22 @@ }, "lineRendering": [ { - "color": "#00ff00" + "color": { + "mappings": [ + { + "if": "winter_service=yes", + "then": "#00ff00" + }, + { + "if": "winter_service=limited", + "then": "#ffff00" + }, + { + "if": "winter_service=no", + "then": "#ff0000" + } + ] + } } ], "pointRendering": null, From c465f756d610566375f28a123fc2f8cc8e6f95cc Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Thu, 13 Mar 2025 22:19:42 +0100 Subject: [PATCH 08/65] Themes(guideposts): Clean tags when changing --- assets/layers/guidepost/guidepost.json | 30 +++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/assets/layers/guidepost/guidepost.json b/assets/layers/guidepost/guidepost.json index a13341ea54..1d69cabb9a 100644 --- a/assets/layers/guidepost/guidepost.json +++ b/assets/layers/guidepost/guidepost.json @@ -144,7 +144,10 @@ "type": "string", "placeholder": { "en": "Name on the guidepost" - } + }, + "addExtraTags": [ + "noname=" + ] }, "render": { "en": "Name noted on the guidepost: {name}" @@ -155,6 +158,11 @@ "then": { "en": "There is no name noted on this guidepost" } + }, + { + "addExtraTags": [ + "name=" + ] } ] }, @@ -168,7 +176,10 @@ "type": "string", "placeholder": { "en": "Reference number of the guidepost" - } + }, + "addExtraTags": [ + "noref=" + ] }, "render": { "en": "Reference number of the guidepost: {ref}" @@ -178,7 +189,10 @@ "if": "noref=yes", "then": { "en": "There is no reference number noted on this guidepost" - } + }, + "addExtraTags": [ + "ref=" + ] } ] }, @@ -192,7 +206,10 @@ "type": "float", "placeholder": { "en": "Elevation on the guidepost (in meters)" - } + }, + "addExtraTags": [ + "noele=" + ] }, "render": { "en": "Elevation noted on the guidepost: {ele} m" @@ -202,7 +219,10 @@ "if": "noele=yes", "then": { "en": "There is no elevation noted on this guidepost" - } + }, + "addExtraTags": [ + "ele=" + ] } ] } From c00e9474467401b2b78106367b4472ed24587750 Mon Sep 17 00:00:00 2001 From: Supaplex Date: Sat, 15 Mar 2025 13:23:05 +0000 Subject: [PATCH 09/65] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (678 of 678 strings) Translation: MapComplete/core Translate-URL: https://translate.mapcomplete.org/projects/mapcomplete/core/zh_Hant/ --- langs/zh_Hant.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/langs/zh_Hant.json b/langs/zh_Hant.json index 1e4e3b8673..aa2b6641fe 100644 --- a/langs/zh_Hant.json +++ b/langs/zh_Hant.json @@ -743,7 +743,11 @@ "title": "隱私政策", "tracking": "要瞭解造訪我們網站的洞察,需要收集一些技術資訊。這包括你從那個國家造訪的,你從那個網站連線過來,你採用的裝置與螢幕大小。當你今日稍早造訪 MapComplete 時,我們會在你的裝置內放置 cookies。這些資料並沒有詳盡到能識別出你來,這些統計資料只會統整後,然後公開給所有人", "trackingTitle": "統計資料", - "whileYoureHere": "你在意隱私嗎?" + "whileYoureHere": "你在意隱私嗎?", + "browsingHistoryLoggedIn": "你目前的設定:", + "browsingHistoryNotLoggedIn": "登入來改變你的設定", + "browsingHistoryTitle": "瀏覽歷史", + "browsingHistoryIntro": "MapComplete 會儲存你最後開始的主題與地點,來幫助你快速恢復狀態。如果你沒有登入,這些設定會在裝置當中。如果你有登入,能透過開放街圖在其他裝置也會同步你的歷史。" }, "reviews": { "affiliated_reviewer_warning": "(關係者審核)", @@ -877,4 +881,4 @@ "startsWithQ": "維基數據編號以 Q 開頭後面接數字" } } -} \ No newline at end of file +} From ecd2099faf6cfe13c954836e2affd83361397e2f Mon Sep 17 00:00:00 2001 From: Supaplex Date: Sat, 15 Mar 2025 13:24:35 +0000 Subject: [PATCH 10/65] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 8.2% (353 of 4272 strings) Translation: MapComplete/layers Translate-URL: https://translate.mapcomplete.org/projects/mapcomplete/layers/zh_Hant/ --- langs/layers/zh_Hant.json | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/langs/layers/zh_Hant.json b/langs/layers/zh_Hant.json index 2bbb89ac6e..66edeeb978 100644 --- a/langs/layers/zh_Hant.json +++ b/langs/layers/zh_Hant.json @@ -17,7 +17,25 @@ }, "street": { "question": "地址所在的道路是?", - "render": "此地址位於街道 {addr:street}" + "render": "此地址位於街道 {addr:street}", + "questionHint": "不要包含門牌號碼" + }, + "header": { + "render": "{addr:street} {addr:housenumber} {addr:unit}", + "mappings": { + "0": { + "then": "未知的地址" + } + } + }, + "unit": { + "mappings": { + "0": { + "then": "沒有單位號碼" + } + }, + "question": "這邊的單位號碼或是字母是什麼?", + "render": "單位號碼是{addr:unit}" } }, "title": { @@ -33,7 +51,8 @@ "2": { "title": "獨自設立的海報框" } - } + }, + "description": "我們會從廣告功能的參數、營運者以及亮燈來完成資料" }, "artwork": { "description": "顯示全世界的雕像、半身像、塗鴉以及其他類型的藝術品的地圖", @@ -1213,4 +1232,4 @@ "render": "風機" } } -} \ No newline at end of file +} From 584dc6b5e64495a1bd89c792c06e837004897719 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 15 Mar 2025 23:12:43 +0100 Subject: [PATCH 11/65] Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: MapComplete/layers Translate-URL: https://translate.mapcomplete.org/projects/mapcomplete/layers/ --- langs/layers/nl.json | 42 ++---------------------------------------- 1 file changed, 2 insertions(+), 40 deletions(-) diff --git a/langs/layers/nl.json b/langs/layers/nl.json index adb6781927..78de10f2a9 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -2065,9 +2065,6 @@ }, "title": { "mappings": { - "0": { - "then": "{name}" - }, "1": { "then": "Vogelkijkhut {name}" }, @@ -6605,11 +6602,6 @@ } }, "title": { - "mappings": { - "0": { - "then": "{name}" - } - }, "render": "Natuurgebied" } }, @@ -7141,21 +7133,6 @@ "render": "Picknicktafel" } }, - "play_forest": { - "description": "Een speelbos is een vrij toegankelijke zone in een bos", - "name": "Speelbossen", - "title": { - "mappings": { - "0": { - "then": "{name}" - }, - "1": { - "then": "Speelbos {name}" - } - }, - "render": "Speelbos" - } - }, "playground": { "deletion": { "nonDeleteMappings": { @@ -8835,9 +8812,6 @@ }, "title": { "mappings": { - "0": { - "then": "{name}" - }, "1": { "then": "Voetpad" }, @@ -11003,25 +10977,13 @@ } }, "village_green": { - "description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)", - "name": "Speelweide", - "title": { - "mappings": { - "0": { - "then": "{name}" - } - }, - "render": "Speelweide" - } + "description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)" }, "visitor_information_centre": { "description": "Een bezoekerscentrum biedt informatie over een specifieke attractie of bezienswaardigheid waar het is gevestigd.", "name": "Bezoekerscentrum", "title": { "mappings": { - "0": { - "then": "{name:nl}" - }, "1": { "then": "{name}" } @@ -11232,4 +11194,4 @@ "render": "windturbine" } } -} \ No newline at end of file +} From e24b465783fc933f908b3d01290dd5166abff746 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sat, 15 Mar 2025 00:45:00 +0100 Subject: [PATCH 12/65] Fix: tests --- src/Logic/Tags/TagUtils.ts | 7 ++++--- src/Models/ThemeConfig/TagRenderingConfig.ts | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/Logic/Tags/TagUtils.ts b/src/Logic/Tags/TagUtils.ts index aa92c24bd4..2f5506b96f 100644 --- a/src/Logic/Tags/TagUtils.ts +++ b/src/Logic/Tags/TagUtils.ts @@ -353,6 +353,7 @@ export class TagUtils { /** * Given multiple tagsfilters which can be used as answer, will take the tags with the same keys together as set. + * The result must be interpreted as 'and' * * @see MatchesMultiAnswer to do the reverse * @@ -369,10 +370,10 @@ export class TagUtils { * and: ["x=b", "y=2"] * } * ]}) - * TagUtils.FlattenMultiAnswer([tag]) // => TagUtils.Tag({and:["x=a;b", "y=0;1;2;3"] }) + * TagUtils.FlattenMultiAnswer([tag]) // => [new Tag("x","a;b"),new Tag("y","0;1;2;3")] * - * TagUtils.FlattenMultiAnswer(([new Tag("x","y"), new Tag("a","b")])) // => new And([new Tag("x","y"), new Tag("a","b")]) - * TagUtils.FlattenMultiAnswer(([new Tag("x","")])) // => new And([new Tag("x","")]) + * TagUtils.FlattenMultiAnswer(([new Tag("x","y"), new Tag("a","b")])) // => [new Tag("x","y"), new Tag("a","b")] + * TagUtils.FlattenMultiAnswer(([new Tag("x","")])) // => [new Tag("x","")] */ static FlattenMultiAnswer(tagsFilters: UploadableTag[]): UploadableTag[] { if (tagsFilters === undefined) { diff --git a/src/Models/ThemeConfig/TagRenderingConfig.ts b/src/Models/ThemeConfig/TagRenderingConfig.ts index 8751e77381..3d083299f7 100644 --- a/src/Models/ThemeConfig/TagRenderingConfig.ts +++ b/src/Models/ThemeConfig/TagRenderingConfig.ts @@ -686,7 +686,8 @@ export default class TagRenderingConfig { } /** - * Given a value for the freeform key and an overview of the selected mappings, construct the correct tagsFilter to apply + * Given a value for the freeform key and an overview of the selected mappings, construct the correct tagsFilter to apply. + * Result should be interpreted as "and" * * const config = new TagRenderingConfig({"id":"bookcase-booktypes","render":{"en":"This place mostly serves {books}" }, * "question":{"en":"What kind of books can be found in this public bookcase?"}, @@ -696,17 +697,17 @@ export default class TagRenderingConfig { * "mappings":[{"if":"books=children","then":"Mostly children books"}, * {"if":"books=adults","then": "Mostly books for adults"}]} * , "testcase") - * config.constructChangeSpecification(undefined, undefined, [false, true, false], {amenity: "public_bookcase"}) // => new And([new Tag("books","adults")]) + * config.constructChangeSpecification(undefined, undefined, [false, true, false], {amenity: "public_bookcase"}) // => [new Tag("books","adults")] * * const config = new TagRenderingConfig({"id":"capacity", "render": "Fits {capcity} books",freeform: {"key":"capacity",type:"pnat"} }) * config.constructChangeSpecification("", undefined, undefined, {}) // => undefined - * config.constructChangeSpecification("5", undefined, undefined, {}).optimize() // => new Tag("capacity", "5") + * config.constructChangeSpecification("5", undefined, undefined, {}).optimize() // => [new Tag("capacity", "5")] * - * // Should pick a mapping, even if freeform is used + * // Should pick a mapping, even if freeform is usedconstructChange * const config = new TagRenderingConfig({"id": "shop-types", render: "Shop type is {shop}", freeform: {key: "shop", addExtraTags:["fixme=freeform shop type used"]}, mappings:[{if: "shop=second_hand", then: "Second hand shop"}]}) - * config.constructChangeSpecification("freeform", 1, undefined, {}).asHumanString(false, false, {}) // => "shop=freeform & fixme=freeform shop type used" - * config.constructChangeSpecification("freeform", undefined, undefined, {}).asHumanString(false, false, {}) // => "shop=freeform & fixme=freeform shop type used" - * config.constructChangeSpecification("second_hand", 1, undefined, {}).asHumanString(false, false, {}) // => "shop=second_hand" + * config.constructChangeSpecification("freeform", 1, undefined, {}).asHumanString(false, false, {}) // => [new Tag("shop","freeform",new Tag("fixme","freeform shop type used")] + * config.constructChangeSpecification("freeform", undefined, undefined, {}) // => [new Tag("shop","freeform), new Tag("fixme","freeform shop type used")] + * config.constructChangeSpecification("second_hand", 1, undefined, {}) // => [new Tag("shop","second_hand")] * * * const config = new TagRenderingConfig({id: "oh", render: "{opening_hours}", question: {"en":"When open?"}, freeform: {key: "opening_hours"}, @@ -716,11 +717,11 @@ export default class TagRenderingConfig { * }, * "hideInAnswer": true}] } * const tags = config.constructChangeSpecification("Tu-Fr 05:30-09:30", undefined, undefined, { }} - * tags // =>new And([ new Tag("opening_hours", "Tu-Fr 05:30-09:30")]) + * tags // => [ new Tag("opening_hours", "Tu-Fr 05:30-09:30")] * * const config = new TagRenderingConfig({"id": "charge", render: "One tube costs {charge}", freeform: {key: "charge", postfixDistinguished: "bicycle_tube"]}, }) * const tags = config.constructChangeSpecification("€5", undefined, undefined, {vending: "books;bicycle_tubes" charge: "€42/book"}) - * tags // =>new And([ new Tag("charge", "€5/bicycle_tube; €42/book")]) + * tags // => [ new Tag("charge", "€5/bicycle_tube; €42/book")] * * * @param freeformValue The freeform value which will be applied as 'freeform.key'. Ignored if 'freeform.key' is not set From 7c29a04f6bacd82955a6cbba79935b50bd3263e0 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 16 Mar 2025 16:34:46 +0100 Subject: [PATCH 13/65] Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: MapComplete/themes Translate-URL: https://translate.mapcomplete.org/projects/mapcomplete/themes/ --- langs/themes/nl.json | 114 +------------------------------------------ 1 file changed, 2 insertions(+), 112 deletions(-) diff --git a/langs/themes/nl.json b/langs/themes/nl.json index 49c9e8b22b..6139f1a531 100644 --- a/langs/themes/nl.json +++ b/langs/themes/nl.json @@ -595,37 +595,8 @@ "building type": { "question": "Wat voor soort gebouw is dit?" }, - "grb-fixme": { - "mappings": { - "0": { - "then": "Geen fixme" - } - }, - "question": "Wat zegt de fixme?", - "render": "De fixme is {fixme}" - }, - "grb-housenumber": { - "mappings": { - "0": { - "then": "Geen huisnummer" - } - }, - "question": "Wat is het huisnummer?", - "render": "Het huisnummer is {addr:housenumber}" - }, - "grb-min-level": { - "question": "Hoeveel verdiepingen ontbreken?", - "render": "Dit gebouw begint maar op de {building:min_level} verdieping" - }, "grb-reference": { "render": "Werd geïmporteerd vanuit GRB, het referentienummer is {source:geometry:ref}" - }, - "grb-street": { - "question": "Wat is de straat?", - "render": "De straat is {addr:street}" - }, - "grb-unit": { - "render": "De wooneenheid-aanduiding is {addr:unit} " } } }, @@ -642,35 +613,8 @@ } } } - }, - "5": { - "override": { - "tagRenderings+": { - "0": { - "mappings": { - "0": { - "then": "Geen omliggend OSM-gebouw gevonden" - } - } - }, - "3": { - "mappings": { - "0": { - "then": "Geen omliggend OSM-gebouw gevonden. Een omliggend gebouw is nodig om dit punt als adres punt toe te voegen.
Importeer eerst de gebouwen. Vernieuw dan de pagina om losse adressen toe te voegen
" - } - }, - "render": { - "special": { - "text": "Voeg dit adres als een nieuw adrespunt toe" - } - } - } - } - } } - }, - "shortDescription": "Grb import helper tool", - "title": "GRB import helper" + } }, "guideposts": { "description": "Wegwijzers (ook wel handwijzer genoemd) zijn vaak te vinden langs officiële wandel-, fiets-, ski- of paardrijroutes om de richtingen naar verschillende bestemmingen aan te geven. Vaak zijn ze vernoemd naar een regio of plaats en geven ze de hoogte aan.\n\nDe positie van een wegwijzer kan door een wandelaar/fietser/renner/skiër worden gebruikt als bevestiging van de huidige positie, vooral als ze een gedrukte kaart zonder GPS-ontvanger gebruiken. ", @@ -1081,11 +1025,6 @@ }, "title": "Dierenartsen, hondenloopzones en andere huisdiervriendelijke plaatsen" }, - "play_forests": { - "description": "Een speelbos is een zone in een bos die vrij toegankelijk is voor spelende kinderen. Deze wordt in bossen van het Agentschap Natuur en bos altijd aangeduid met het overeenkomstige bord.", - "shortDescription": "Deze kaart toont speelbossen", - "title": "Speelbossen" - }, "playgrounds": { "description": "Op deze kaart vind je speeltuinen en kan je zelf meer informatie en foto's toevoegen", "shortDescription": "Een kaart met speeltuinen", @@ -1159,47 +1098,6 @@ "description": "Alles om te skiën", "title": "Skipistes en kabelbanen" }, - "speelplekken": { - "description": "

Welkom bij de Groendoener!

De Zuidrand dat is spelen, ravotten, chillen, wandelen,… in het groen. Meer dan 200 grote en kleine speelplekken liggen er in parken, in bossen en op pleintjes te wachten om ontdekt te worden. De verschillende speelplekken werden getest én goedgekeurd door kinder- en jongerenreporters uit de Zuidrand. Met leuke challenges dagen de reporters jou uit om ook op ontdekking te gaan. Klik op een speelplek op de kaart, bekijk het filmpje en ga op verkenning!

Het project groendoener kadert binnen het strategisch project Beleefbare Open Ruimte in de Antwerpse Zuidrand en is een samenwerking tussen het departement Leefmilieu van provincie Antwerpen, Sportpret vzw, een OpenStreetMap-België Consultent en Createlli vzw. Het project kwam tot stand met steun van Departement Omgeving van de Vlaamse Overheid.
", - "layers": { - "6": { - "name": "Wandelroutes van provincie Antwerpen", - "tagRenderings": { - "walk-description": { - "render": "

Korte beschrijving:

{description}" - }, - "walk-length": { - "render": "Deze wandeling is {_length:km}km lang" - }, - "walk-operator": { - "question": "Wie beheert deze wandeling en plaatst dus de signalisatiebordjes?" - }, - "walk-operator-email": { - "question": "Naar wie kan men emailen bij problemen rond signalisatie?", - "render": "Bij problemen met signalisatie kan men emailen naar {operator:email}" - }, - "walk-type": { - "mappings": { - "0": { - "then": "Dit is een internationale wandelroute" - }, - "1": { - "then": "Dit is een nationale wandelroute" - }, - "2": { - "then": "Dit is een regionale wandelroute" - }, - "3": { - "then": "Dit is een lokale wandelroute" - } - } - } - } - } - }, - "shortDescription": "Speelplekken in de Antwerpse Zuidrand", - "title": "Welkom bij de groendoener!" - }, "sport_pitches": { "description": "Een sportveld is een ingerichte plaats met infrastructuur om een sport te beoefenen", "shortDescription": "Deze kaart toont sportvelden", @@ -1320,10 +1218,6 @@ }, "title": "Straatverlichting" }, - "street_lighting_assen": { - "description": "Op deze kaart vind je alles over straatlantaarns + een dataset van Assen", - "title": "Straatverlichting - Assen" - }, "surveillance": { "description": "Op deze open kaart kan je bewakingscamera's vinden.", "shortDescription": "Bewakingscameras en dergelijke", @@ -1437,13 +1331,9 @@ "description": "Kaart met afvalbakken en recyclingfaciliteiten.", "title": "Afval" }, - "waste_assen": { - "description": "Kaart met afvalbakken en recyclingfaciliteiten + een dataset voor Assen.", - "title": "Afval - Assen" - }, "waste_basket": { "description": "Op deze kaart vind je afvalbakken bij jou in de buurt. Als er een afvalbak ontbreekt op deze kaart, kun je deze zelf toevoegen", "shortDescription": "Een kaart met vuilnisbakken", "title": "Vuilnisbakken" } -} \ No newline at end of file +} From 093667cceaaf51576420ef206342a270b1dc8ed9 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 16 Mar 2025 16:34:34 +0100 Subject: [PATCH 14/65] Chore: translation sync --- assets/layers/address/address.json | 18 ++++++---- assets/layers/advertising/advertising.json | 3 +- langs/layers/nl.json | 42 ++++++++++++++++++++-- langs/layers/zh_Hant.json | 26 +++++++------- langs/zh_Hant.json | 12 +++---- 5 files changed, 73 insertions(+), 28 deletions(-) diff --git a/assets/layers/address/address.json b/assets/layers/address/address.json index 93b4d32bfa..fbb73152a4 100644 --- a/assets/layers/address/address.json +++ b/assets/layers/address/address.json @@ -173,7 +173,8 @@ "en": "{addr:street} {addr:housenumber} {addr:unit}", "ca": "{addr:street} {addr:housenumber} {addr:unit}", "de": "{addr:street} {addr:housenumber} {addr:unit}", - "cs": "{addr:street} {addr:housenumber} {addr:unit}" + "cs": "{addr:street} {addr:housenumber} {addr:unit}", + "zh_Hant": "{addr:street} {addr:housenumber} {addr:unit}" }, "mappings": [ { @@ -190,7 +191,8 @@ "ca": "No es coneix cap adreça", "de": "Adresse unbekannt", "cs": "Není známa žádná adresa", - "uk": "Адреса не відома" + "uk": "Адреса не відома", + "zh_Hant": "未知的地址" } } ] @@ -345,7 +347,8 @@ "en": "Do not include the house number", "ca": "No incloguis el número de casa", "de": "Gib die Hausnummer nicht an", - "cs": "Nezahrnovat číslo domu" + "cs": "Nezahrnovat číslo domu", + "zh_Hant": "不要包含門牌號碼" }, "freeform": { "inline": false, @@ -368,14 +371,16 @@ "nl": "Wat is het busnummer?", "ca": "Quin és el número o la lletra de la unitat?", "de": "Wie lautet die Nummer oder der Buchstabe der Einheit?", - "cs": "Co je číslo nebo písmeno jednotky?" + "cs": "Co je číslo nebo písmeno jednotky?", + "zh_Hant": "這邊的單位號碼或是字母是什麼?" }, "render": { "en": "The unit number is {addr:unit}", "nl": "De bus is {addr:unit}", "ca": "El número d'unitat és {addr:unit}", "de": "Die Nummer der Einheit lautet {addr:unit}", - "cs": "Číslo jednotky je {addr:unit}" + "cs": "Číslo jednotky je {addr:unit}", + "zh_Hant": "單位號碼是{addr:unit}" }, "freeform": { "key": "addr:unit" @@ -388,7 +393,8 @@ "nl": "Geen apart busnummer of letter", "ca": "No hi ha número d'unitat", "de": "Keine Einheitennummer", - "cs": "Žádné číslo jednotky" + "cs": "Žádné číslo jednotky", + "zh_Hant": "沒有單位號碼" } } ] diff --git a/assets/layers/advertising/advertising.json b/assets/layers/advertising/advertising.json index 50aa8ea2ca..93b1380e50 100644 --- a/assets/layers/advertising/advertising.json +++ b/assets/layers/advertising/advertising.json @@ -33,7 +33,8 @@ "it": "Completeremo i dati da caratteristiche pubblicitarie, con referenza, operatore e illuminazione", "fr": "Nous allons compléter les information sur la publicité avec la référence, l'opérateur et l'éclairage", "uk": "Ми доповнимо дані з рекламних об'єктів посиланням, оператором та освітленням", - "nl": "We vullen de informatie over de advertentie aan met de referentie, de operator en de verlichting" + "nl": "We vullen de informatie over de advertentie aan met de referentie, de operator en de verlichting", + "zh_Hant": "我們會從廣告功能的參數、營運者以及亮燈來完成資料" }, "source": { "osmTags": { diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 78de10f2a9..adb6781927 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -2065,6 +2065,9 @@ }, "title": { "mappings": { + "0": { + "then": "{name}" + }, "1": { "then": "Vogelkijkhut {name}" }, @@ -6602,6 +6605,11 @@ } }, "title": { + "mappings": { + "0": { + "then": "{name}" + } + }, "render": "Natuurgebied" } }, @@ -7133,6 +7141,21 @@ "render": "Picknicktafel" } }, + "play_forest": { + "description": "Een speelbos is een vrij toegankelijke zone in een bos", + "name": "Speelbossen", + "title": { + "mappings": { + "0": { + "then": "{name}" + }, + "1": { + "then": "Speelbos {name}" + } + }, + "render": "Speelbos" + } + }, "playground": { "deletion": { "nonDeleteMappings": { @@ -8812,6 +8835,9 @@ }, "title": { "mappings": { + "0": { + "then": "{name}" + }, "1": { "then": "Voetpad" }, @@ -10977,13 +11003,25 @@ } }, "village_green": { - "description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)" + "description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)", + "name": "Speelweide", + "title": { + "mappings": { + "0": { + "then": "{name}" + } + }, + "render": "Speelweide" + } }, "visitor_information_centre": { "description": "Een bezoekerscentrum biedt informatie over een specifieke attractie of bezienswaardigheid waar het is gevestigd.", "name": "Bezoekerscentrum", "title": { "mappings": { + "0": { + "then": "{name:nl}" + }, "1": { "then": "{name}" } @@ -11194,4 +11232,4 @@ "render": "windturbine" } } -} +} \ No newline at end of file diff --git a/langs/layers/zh_Hant.json b/langs/layers/zh_Hant.json index 66edeeb978..574a725779 100644 --- a/langs/layers/zh_Hant.json +++ b/langs/layers/zh_Hant.json @@ -6,6 +6,14 @@ "fixme": { "question": "這裡需要修什麼?請直接解釋" }, + "header": { + "mappings": { + "0": { + "then": "未知的地址" + } + }, + "render": "{addr:street} {addr:housenumber} {addr:unit}" + }, "housenumber": { "mappings": { "0": { @@ -17,16 +25,8 @@ }, "street": { "question": "地址所在的道路是?", - "render": "此地址位於街道 {addr:street}", - "questionHint": "不要包含門牌號碼" - }, - "header": { - "render": "{addr:street} {addr:housenumber} {addr:unit}", - "mappings": { - "0": { - "then": "未知的地址" - } - } + "questionHint": "不要包含門牌號碼", + "render": "此地址位於街道 {addr:street}" }, "unit": { "mappings": { @@ -43,6 +43,7 @@ } }, "advertising": { + "description": "我們會從廣告功能的參數、營運者以及亮燈來完成資料", "name": "廣告", "presets": { "0": { @@ -51,8 +52,7 @@ "2": { "title": "獨自設立的海報框" } - }, - "description": "我們會從廣告功能的參數、營運者以及亮燈來完成資料" + } }, "artwork": { "description": "顯示全世界的雕像、半身像、塗鴉以及其他類型的藝術品的地圖", @@ -1232,4 +1232,4 @@ "render": "風機" } } -} +} \ No newline at end of file diff --git a/langs/zh_Hant.json b/langs/zh_Hant.json index aa2b6641fe..e5691f3a08 100644 --- a/langs/zh_Hant.json +++ b/langs/zh_Hant.json @@ -723,6 +723,10 @@ "typeTitle": "這是 {title}" }, "privacy": { + "browsingHistoryIntro": "MapComplete 會儲存你最後開始的主題與地點,來幫助你快速恢復狀態。如果你沒有登入,這些設定會在裝置當中。如果你有登入,能透過開放街圖在其他裝置也會同步你的歷史。", + "browsingHistoryLoggedIn": "你目前的設定:", + "browsingHistoryNotLoggedIn": "登入來改變你的設定", + "browsingHistoryTitle": "瀏覽歷史", "editingIntro": "當你對地圖變動時,這些變動會存在開放街圖並且是公開給所有人。採用 MapComplete 的編輯變動包括以下資料:", "editingOutro": "請參考OpenStreetMap.org的隱私政策來取得更多資訊。我們也提醒你註冊帳號時能夠採用假名。", "editingTitle": "當做出變動", @@ -743,11 +747,7 @@ "title": "隱私政策", "tracking": "要瞭解造訪我們網站的洞察,需要收集一些技術資訊。這包括你從那個國家造訪的,你從那個網站連線過來,你採用的裝置與螢幕大小。當你今日稍早造訪 MapComplete 時,我們會在你的裝置內放置 cookies。這些資料並沒有詳盡到能識別出你來,這些統計資料只會統整後,然後公開給所有人", "trackingTitle": "統計資料", - "whileYoureHere": "你在意隱私嗎?", - "browsingHistoryLoggedIn": "你目前的設定:", - "browsingHistoryNotLoggedIn": "登入來改變你的設定", - "browsingHistoryTitle": "瀏覽歷史", - "browsingHistoryIntro": "MapComplete 會儲存你最後開始的主題與地點,來幫助你快速恢復狀態。如果你沒有登入,這些設定會在裝置當中。如果你有登入,能透過開放街圖在其他裝置也會同步你的歷史。" + "whileYoureHere": "你在意隱私嗎?" }, "reviews": { "affiliated_reviewer_warning": "(關係者審核)", @@ -881,4 +881,4 @@ "startsWithQ": "維基數據編號以 Q 開頭後面接數字" } } -} +} \ No newline at end of file From bdd416dbe6daf243ca50da6292271201bb27e3a4 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 16 Mar 2025 16:38:09 +0100 Subject: [PATCH 15/65] Chore: translation sync --- langs/themes/nl.json | 114 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 2 deletions(-) diff --git a/langs/themes/nl.json b/langs/themes/nl.json index 6139f1a531..49c9e8b22b 100644 --- a/langs/themes/nl.json +++ b/langs/themes/nl.json @@ -595,8 +595,37 @@ "building type": { "question": "Wat voor soort gebouw is dit?" }, + "grb-fixme": { + "mappings": { + "0": { + "then": "Geen fixme" + } + }, + "question": "Wat zegt de fixme?", + "render": "De fixme is {fixme}" + }, + "grb-housenumber": { + "mappings": { + "0": { + "then": "Geen huisnummer" + } + }, + "question": "Wat is het huisnummer?", + "render": "Het huisnummer is {addr:housenumber}" + }, + "grb-min-level": { + "question": "Hoeveel verdiepingen ontbreken?", + "render": "Dit gebouw begint maar op de {building:min_level} verdieping" + }, "grb-reference": { "render": "Werd geïmporteerd vanuit GRB, het referentienummer is {source:geometry:ref}" + }, + "grb-street": { + "question": "Wat is de straat?", + "render": "De straat is {addr:street}" + }, + "grb-unit": { + "render": "De wooneenheid-aanduiding is {addr:unit} " } } }, @@ -613,8 +642,35 @@ } } } + }, + "5": { + "override": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Geen omliggend OSM-gebouw gevonden" + } + } + }, + "3": { + "mappings": { + "0": { + "then": "Geen omliggend OSM-gebouw gevonden. Een omliggend gebouw is nodig om dit punt als adres punt toe te voegen.
Importeer eerst de gebouwen. Vernieuw dan de pagina om losse adressen toe te voegen
" + } + }, + "render": { + "special": { + "text": "Voeg dit adres als een nieuw adrespunt toe" + } + } + } + } + } } - } + }, + "shortDescription": "Grb import helper tool", + "title": "GRB import helper" }, "guideposts": { "description": "Wegwijzers (ook wel handwijzer genoemd) zijn vaak te vinden langs officiële wandel-, fiets-, ski- of paardrijroutes om de richtingen naar verschillende bestemmingen aan te geven. Vaak zijn ze vernoemd naar een regio of plaats en geven ze de hoogte aan.\n\nDe positie van een wegwijzer kan door een wandelaar/fietser/renner/skiër worden gebruikt als bevestiging van de huidige positie, vooral als ze een gedrukte kaart zonder GPS-ontvanger gebruiken. ", @@ -1025,6 +1081,11 @@ }, "title": "Dierenartsen, hondenloopzones en andere huisdiervriendelijke plaatsen" }, + "play_forests": { + "description": "Een speelbos is een zone in een bos die vrij toegankelijk is voor spelende kinderen. Deze wordt in bossen van het Agentschap Natuur en bos altijd aangeduid met het overeenkomstige bord.", + "shortDescription": "Deze kaart toont speelbossen", + "title": "Speelbossen" + }, "playgrounds": { "description": "Op deze kaart vind je speeltuinen en kan je zelf meer informatie en foto's toevoegen", "shortDescription": "Een kaart met speeltuinen", @@ -1098,6 +1159,47 @@ "description": "Alles om te skiën", "title": "Skipistes en kabelbanen" }, + "speelplekken": { + "description": "

Welkom bij de Groendoener!

De Zuidrand dat is spelen, ravotten, chillen, wandelen,… in het groen. Meer dan 200 grote en kleine speelplekken liggen er in parken, in bossen en op pleintjes te wachten om ontdekt te worden. De verschillende speelplekken werden getest én goedgekeurd door kinder- en jongerenreporters uit de Zuidrand. Met leuke challenges dagen de reporters jou uit om ook op ontdekking te gaan. Klik op een speelplek op de kaart, bekijk het filmpje en ga op verkenning!

Het project groendoener kadert binnen het strategisch project Beleefbare Open Ruimte in de Antwerpse Zuidrand en is een samenwerking tussen het departement Leefmilieu van provincie Antwerpen, Sportpret vzw, een OpenStreetMap-België Consultent en Createlli vzw. Het project kwam tot stand met steun van Departement Omgeving van de Vlaamse Overheid.
", + "layers": { + "6": { + "name": "Wandelroutes van provincie Antwerpen", + "tagRenderings": { + "walk-description": { + "render": "

Korte beschrijving:

{description}" + }, + "walk-length": { + "render": "Deze wandeling is {_length:km}km lang" + }, + "walk-operator": { + "question": "Wie beheert deze wandeling en plaatst dus de signalisatiebordjes?" + }, + "walk-operator-email": { + "question": "Naar wie kan men emailen bij problemen rond signalisatie?", + "render": "Bij problemen met signalisatie kan men emailen naar {operator:email}" + }, + "walk-type": { + "mappings": { + "0": { + "then": "Dit is een internationale wandelroute" + }, + "1": { + "then": "Dit is een nationale wandelroute" + }, + "2": { + "then": "Dit is een regionale wandelroute" + }, + "3": { + "then": "Dit is een lokale wandelroute" + } + } + } + } + } + }, + "shortDescription": "Speelplekken in de Antwerpse Zuidrand", + "title": "Welkom bij de groendoener!" + }, "sport_pitches": { "description": "Een sportveld is een ingerichte plaats met infrastructuur om een sport te beoefenen", "shortDescription": "Deze kaart toont sportvelden", @@ -1218,6 +1320,10 @@ }, "title": "Straatverlichting" }, + "street_lighting_assen": { + "description": "Op deze kaart vind je alles over straatlantaarns + een dataset van Assen", + "title": "Straatverlichting - Assen" + }, "surveillance": { "description": "Op deze open kaart kan je bewakingscamera's vinden.", "shortDescription": "Bewakingscameras en dergelijke", @@ -1331,9 +1437,13 @@ "description": "Kaart met afvalbakken en recyclingfaciliteiten.", "title": "Afval" }, + "waste_assen": { + "description": "Kaart met afvalbakken en recyclingfaciliteiten + een dataset voor Assen.", + "title": "Afval - Assen" + }, "waste_basket": { "description": "Op deze kaart vind je afvalbakken bij jou in de buurt. Als er een afvalbak ontbreekt op deze kaart, kun je deze zelf toevoegen", "shortDescription": "Een kaart met vuilnisbakken", "title": "Vuilnisbakken" } -} +} \ No newline at end of file From 40c6a582c76baacf007fa6a7675b1564c4e31f46 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 16 Mar 2025 18:49:48 +0100 Subject: [PATCH 16/65] Themes(toilets): add supervision, hand_drying questions --- assets/layers/toilet/toilet.json | 141 ++++++++++++++++++++++++------- 1 file changed, 111 insertions(+), 30 deletions(-) diff --git a/assets/layers/toilet/toilet.json b/assets/layers/toilet/toilet.json index aeced6e974..8da1b40be0 100644 --- a/assets/layers/toilet/toilet.json +++ b/assets/layers/toilet/toilet.json @@ -954,45 +954,35 @@ "id": "toilet-changing_table:location" }, { - "labels": [ - "relevant-questions" - ], - "id": "toilet-handwashing", + "id": "toilet-supervised", "question": { - "en": "Do these toilets have a sink to wash your hands?", - "nl": "Hebben deze toiletten een lavabo om de handen te wassen?", - "de": "Gibt es hier ein Handwaschbecken?", - "es": "¿Estos baños tienen un lavabo para lavarse las manos?", - "fr": "Ces toilettes ont-ils un lavabo pour se laver les mains ?", - "da": "Har disse toiletter en håndvask til at vaske hænder?", - "ca": "Aquests lavabos tenen una pica per a rentar-se les mans?", - "cs": "Mají tyto toalety umyvadlo na mytí rukou?" + "en": "Is this toilets supervised by a person?", + "nl": "Is er toezicht op deze toilet?" + }, + "questionHint": { + "en": "This is typically a person tasked with keeping the toilets clean and collecting the fee", + "nl": "Deze persoon houdt typisch de toiletten proper en int het toiletgeld" }, "mappings": [ { - "if": "toilets:handwashing=yes", + "if": "supervised=yes", "then": { - "en": "These toilets have a sink to wash your hands", - "nl": "Deze toiletten hebben een lavabo waar men de handen kan wassen", - "de": "Die Toilette hat ein Handwaschbecken", - "es": "Estos baños tienen un lavabo para lavarse las manos", - "fr": "Ces toilettes ont un lavabo pour se laver les mains", - "da": "Dette toilet har en vask til at vaske dine hænder", - "ca": "Aquests lavabos tenen una pica per a rentar-se les mans", - "cs": "Tyto toalety mají umyvadlo na mytí rukou" + "en": "There is a person supervising these toilets during (most of) the opening hours", + "nl": "Er is een persoon die toezicht houdt op deze toiletten" } }, { - "if": "toilets:handwashing=no", + "if": "supervised=interval", "then": { - "en": "These toilets don't have a sink to wash your hands", - "nl": "Deze toiletten hebben geen lavabo waar men de handen kan wassen", - "de": "Die Toilette hat kein Handwaschbecken", - "es": "Estos baños no tienen un lavabo para lavarse las manos", - "fr": "Ces toilettes n'ont pas de lavabo pour se laver les mains", - "da": "Disse toiletter har ikke en vask til at vaske dine hænder", - "ca": "Aquests lavabos no tenen una pica per a rentar-se les mans", - "cs": "Tyto toalety nemají umyvadlo na mytí rukou" + "en": "There is a person supervising these toilets, but they are present only during certain times of the opening hours", + "nl": "Er is een persoon die toezicht houdt op deze toiletten, maar deze is slechts op enkele vaste momenten aanwezig" + } + }, + { + "if": "supervised=no", + "then": { + "en": "These toilets are not supervised", + "nl": "Er is geen persoon die toezicht houdt" } } ] @@ -1047,6 +1037,97 @@ ] } }, + { + "labels": [ + "relevant-questions" + ], + "id": "toilet-handwashing", + "question": { + "en": "Do these toilets have a sink to wash your hands?", + "nl": "Hebben deze toiletten een lavabo om de handen te wassen?", + "de": "Gibt es hier ein Handwaschbecken?", + "es": "¿Estos baños tienen un lavabo para lavarse las manos?", + "fr": "Ces toilettes ont-ils un lavabo pour se laver les mains ?", + "da": "Har disse toiletter en håndvask til at vaske hænder?", + "ca": "Aquests lavabos tenen una pica per a rentar-se les mans?", + "cs": "Mají tyto toalety umyvadlo na mytí rukou?" + }, + "mappings": [ + { + "if": "toilets:handwashing=yes", + "then": { + "en": "These toilets have a sink to wash your hands", + "nl": "Deze toiletten hebben een lavabo waar men de handen kan wassen", + "de": "Die Toilette hat ein Handwaschbecken", + "es": "Estos baños tienen un lavabo para lavarse las manos", + "fr": "Ces toilettes ont un lavabo pour se laver les mains", + "da": "Dette toilet har en vask til at vaske dine hænder", + "ca": "Aquests lavabos tenen una pica per a rentar-se les mans", + "cs": "Tyto toalety mají umyvadlo na mytí rukou" + } + }, + { + "if": "toilets:handwashing=no", + "then": { + "en": "These toilets don't have a sink to wash your hands", + "nl": "Deze toiletten hebben geen lavabo waar men de handen kan wassen", + "de": "Die Toilette hat kein Handwaschbecken", + "es": "Estos baños no tienen un lavabo para lavarse las manos", + "fr": "Ces toilettes n'ont pas de lavabo pour se laver les mains", + "da": "Disse toiletter har ikke en vask til at vaske dine hænder", + "ca": "Aquests lavabos no tenen una pica per a rentar-se les mans", + "cs": "Tyto toalety nemají umyvadlo na mytí rukou" + } + } + ] + }, + + { + "id": "toilet-drying", + "question": { + "en": "Do these toilets have a device to dry your hands?", + "nl": "Hebben deze toiletten een apparaat om je handen te drogen?" + }, + "multiAnswer": true, + "mappings": [ + { + "if": "toilets:hands_drying=electric_hand_dryer", + "then": { + "en": "Electric hand dryers are available for drying hands.", + "nl": "Elektrische handdrogers zijn beschikbaar om handen te drogen." + } + }, + { + "if": "toilets:hands_drying=paper_towel", + "then": { + "en": "Paper towels are available for drying hands.", + "nl": "Papieren wegwerphanddoeken zijn beschikbaar om handen te drogen." + } + }, + { + "if": "toilets:hands_drying=towel_cabinet", + "then": { + "en": "A towel roll cabinet is available for drying hands", + "nl": "Een apparaat met een handdoekrol is beschikbaar om handen te drogen" + } + }, + { + "if": "toilets:hands_drying=towel", + "then": { + "en": "A fabric towel available to dry your hands.", + "nl": "Een stoffen handdoek is beschikbaar om handen te drogen." + } + }, + { + "if": "toilets:hands_drying=no", + "then": { + "en": "There are no hand drying facilities available.", + "nl": "Er zijn geen handdroogvoorzieningen beschikbaar." + } + } + ], + "condition": "toilets:handwashing=yes" + }, "description" ], "filter": [ From 1dd78563efe0d4d8513f621884e8d42fbaa18513 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 16 Mar 2025 22:48:12 +0100 Subject: [PATCH 17/65] Themes(toilets): add condition to supervision question: only ask if a public toilet --- assets/layers/toilet/toilet.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/assets/layers/toilet/toilet.json b/assets/layers/toilet/toilet.json index 8da1b40be0..ff4ff196b3 100644 --- a/assets/layers/toilet/toilet.json +++ b/assets/layers/toilet/toilet.json @@ -985,7 +985,17 @@ "nl": "Er is geen persoon die toezicht houdt" } } - ] + ], + "condition": { + "and": [ + { + "or": [ + "access=yes", + "access=" + ] + } + ] + } }, { "id": "toilet-has-paper", @@ -1081,7 +1091,6 @@ } ] }, - { "id": "toilet-drying", "question": { From 1933b8a7be28d78bddb83c13619766338c85afcf Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 16 Mar 2025 22:48:54 +0100 Subject: [PATCH 18/65] Themes(entrance): add question about reference numbers --- assets/layers/entrance/entrance.json | 56 ++++++++++++++++++++++------ langs/layers/ca.json | 2 +- langs/layers/cs.json | 2 +- langs/layers/cy.json | 2 +- langs/layers/da.json | 2 +- langs/layers/de.json | 2 +- langs/layers/en.json | 46 ++++++++++++++++++++++- langs/layers/es.json | 2 +- langs/layers/fr.json | 2 +- langs/layers/nl.json | 46 ++++++++++++++++++++++- langs/layers/pa_PK.json | 2 +- langs/layers/pl.json | 2 +- 12 files changed, 143 insertions(+), 23 deletions(-) diff --git a/assets/layers/entrance/entrance.json b/assets/layers/entrance/entrance.json index 50148fc9c7..e044044ffd 100644 --- a/assets/layers/entrance/entrance.json +++ b/assets/layers/entrance/entrance.json @@ -33,17 +33,17 @@ "minzoom": 14, "title": { "render": { - "en": "Entrance", - "nl": "Ingang", - "ca": "Entrada", - "da": "Indgang", - "de": "Eingang", - "es": "Entrada", - "fr": "Entrée", - "pa_PK": "دروازہ", - "pl": "Wejście", - "cs": "Vchod", - "cy": "Mynedfa" + "en": "Entrance {ref}", + "nl": "Ingang {ref}", + "ca": "Entrada {ref}", + "da": "Indgang {ref}", + "de": "Eingang {ref}", + "es": "Entrada {ref}", + "fr": "Entrée {ref}", + "pa_PK": "دروازہ{ref}", + "pl": "Wejście {ref}", + "cs": "Vchod {ref}", + "cy": "Mynedfa {ref}" } }, "pointRendering": [ @@ -68,7 +68,16 @@ ] } } - ] + ], + "label": { + "mappings": [ + { + "if": "ref~*", + "then": "{ref}" + } + ] + }, + "labelCssClasses": "rounded bg-white px-2" } ], "lineRendering": [], @@ -578,6 +587,29 @@ } } ] + }, + { + "id": "ref", + "question": { + "en": "Does this door have a reference number?", + "nl": "Heeft deze toegang een referentienummer?" + }, + "render": { + "en": "This door has {ref} as reference number", + "nl": "Deze deur heeft {ref} als referentienummer" + }, + "mappings": [ + { + "if": "ref=", + "then": { + "en": "No reference number", + "nl": "Geen referentienummer" + } + } + ], + "freeform": { + "key": "ref" + } } ], "filter": [ diff --git a/langs/layers/ca.json b/langs/layers/ca.json index 64a94bc08a..3fdf28f25e 100644 --- a/langs/layers/ca.json +++ b/langs/layers/ca.json @@ -5245,7 +5245,7 @@ } }, "title": { - "render": "Entrada" + "render": "Entrada {ref}" } }, "etymology": { diff --git a/langs/layers/cs.json b/langs/layers/cs.json index 4d19e10c0d..5ad1e02b95 100644 --- a/langs/layers/cs.json +++ b/langs/layers/cs.json @@ -5049,7 +5049,7 @@ } }, "title": { - "render": "Vchod" + "render": "Vchod {ref}" } }, "etymology": { diff --git a/langs/layers/cy.json b/langs/layers/cy.json index aed6d66f84..5aaca51be8 100644 --- a/langs/layers/cy.json +++ b/langs/layers/cy.json @@ -356,7 +356,7 @@ "entrance": { "name": "Mynedfa", "title": { - "render": "Mynedfa" + "render": "Mynedfa {ref}" } }, "extinguisher": { diff --git a/langs/layers/da.json b/langs/layers/da.json index c784113f9f..3418120daf 100644 --- a/langs/layers/da.json +++ b/langs/layers/da.json @@ -1564,7 +1564,7 @@ } }, "title": { - "render": "Indgang" + "render": "Indgang {ref}" } }, "etymology": { diff --git a/langs/layers/de.json b/langs/layers/de.json index b122b8aedf..497d741b44 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -5204,7 +5204,7 @@ } }, "title": { - "render": "Eingang" + "render": "Eingang {ref}" } }, "etymology": { diff --git a/langs/layers/en.json b/langs/layers/en.json index f68d3443fe..e1356aa1f1 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -5321,13 +5321,22 @@ "question": "What is the height of this kerb?", "render": "The kerb height of this door is {kerb:height}" }, + "ref": { + "mappings": { + "0": { + "then": "No reference number" + } + }, + "question": "Does this door have a reference number?", + "render": "This door has {ref} as reference number" + }, "width": { "question": "What is the width of this door/entrance?", "render": "This door has a width of {canonical(width)}" } }, "title": { - "render": "Entrance" + "render": "Entrance {ref}" } }, "etymology": { @@ -12133,6 +12142,26 @@ "question": "How much does one have to pay for these toilets?", "render": "The fee is {charge}" }, + "toilet-drying": { + "mappings": { + "0": { + "then": "Electric hand dryers are available for drying hands." + }, + "1": { + "then": "Paper towels are available for drying hands." + }, + "2": { + "then": "A towel roll cabinet is available for drying hands" + }, + "3": { + "then": "A fabric towel available to dry your hands." + }, + "4": { + "then": "There are no hand drying facilities available." + } + }, + "question": "Do these toilets have a device to dry your hands?" + }, "toilet-handwashing": { "mappings": { "0": { @@ -12162,6 +12191,21 @@ } } }, + "toilet-supervised": { + "mappings": { + "0": { + "then": "There is a person supervising these toilets during (most of) the opening hours" + }, + "1": { + "then": "There is a person supervising these toilets, but they are present only during certain times of the opening hours" + }, + "2": { + "then": "These toilets are not supervised" + } + }, + "question": "Is this toilets supervised by a person?", + "questionHint": "This is typically a person tasked with keeping the toilets clean and collecting the fee" + }, "toilets-changing-table": { "mappings": { "0": { diff --git a/langs/layers/es.json b/langs/layers/es.json index 6ece3aa66f..59387bb15e 100644 --- a/langs/layers/es.json +++ b/langs/layers/es.json @@ -4903,7 +4903,7 @@ } }, "title": { - "render": "Entrada" + "render": "Entrada {ref}" } }, "etymology": { diff --git a/langs/layers/fr.json b/langs/layers/fr.json index fa7aace690..5b2cfcac26 100644 --- a/langs/layers/fr.json +++ b/langs/layers/fr.json @@ -3467,7 +3467,7 @@ } }, "title": { - "render": "Entrée" + "render": "Entrée {ref}" } }, "etymology": { diff --git a/langs/layers/nl.json b/langs/layers/nl.json index adb6781927..a58a6d128c 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -4990,13 +4990,22 @@ "question": "Hoe hoog is de drempel?", "render": "De drempel bij deze deur is {kerb:height}" }, + "ref": { + "mappings": { + "0": { + "then": "Geen referentienummer" + } + }, + "question": "Heeft deze toegang een referentienummer?", + "render": "Deze deur heeft {ref} als referentienummer" + }, "width": { "question": "Wat is de breedte van deze deur/toegang?", "render": "Deze deur heeft een breedte van {canonical(width)}" } }, "title": { - "render": "Ingang" + "render": "Ingang {ref}" } }, "etymology": { @@ -9757,6 +9766,26 @@ "question": "Hoeveel moet men betalen om deze toiletten te gebruiken?", "render": "De toiletten gebruiken kost {charge}" }, + "toilet-drying": { + "mappings": { + "0": { + "then": "Elektrische handdrogers zijn beschikbaar om handen te drogen." + }, + "1": { + "then": "Papieren wegwerphanddoeken zijn beschikbaar om handen te drogen." + }, + "2": { + "then": "Een apparaat met een handdoekrol is beschikbaar om handen te drogen" + }, + "3": { + "then": "Een stoffen handdoek is beschikbaar om handen te drogen." + }, + "4": { + "then": "Er zijn geen handdroogvoorzieningen beschikbaar." + } + }, + "question": "Hebben deze toiletten een apparaat om je handen te drogen?" + }, "toilet-handwashing": { "mappings": { "0": { @@ -9786,6 +9815,21 @@ } } }, + "toilet-supervised": { + "mappings": { + "0": { + "then": "Er is een persoon die toezicht houdt op deze toiletten" + }, + "1": { + "then": "Er is een persoon die toezicht houdt op deze toiletten, maar deze is slechts op enkele vaste momenten aanwezig" + }, + "2": { + "then": "Er is geen persoon die toezicht houdt" + } + }, + "question": "Is er toezicht op deze toilet?", + "questionHint": "Deze persoon houdt typisch de toiletten proper en int het toiletgeld" + }, "toilets-changing-table": { "mappings": { "0": { diff --git a/langs/layers/pa_PK.json b/langs/layers/pa_PK.json index 5e7360bba3..a870525b64 100644 --- a/langs/layers/pa_PK.json +++ b/langs/layers/pa_PK.json @@ -151,7 +151,7 @@ "entrance": { "name": "دروازہ", "title": { - "render": "دروازہ" + "render": "دروازہ{ref}" } }, "food": { diff --git a/langs/layers/pl.json b/langs/layers/pl.json index c5d216106c..fc45953e56 100644 --- a/langs/layers/pl.json +++ b/langs/layers/pl.json @@ -1881,7 +1881,7 @@ } }, "title": { - "render": "Wejście" + "render": "Wejście {ref}" } }, "etymology": { From ac5565d54646f14a444833bfa93b0f8607421d2b Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 16 Mar 2025 22:49:47 +0100 Subject: [PATCH 19/65] Chore: ignore 'bing.json' --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6c69ad958d..14f62e4687 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,4 @@ dist-full/ public/assets/icons/*.webp uploaded_images.json /app/dist/ +src/assets/bing.json From b3009367a38c12bc97950d85e0b716c4e28545d8 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 16 Mar 2025 23:47:12 +0100 Subject: [PATCH 20/65] Scripts: deploy hosted now actually stops when the tests fail --- .forgejo/workflows/deploy_hosted.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/deploy_hosted.yml b/.forgejo/workflows/deploy_hosted.yml index 77698c8a79..6cf54b381f 100644 --- a/.forgejo/workflows/deploy_hosted.yml +++ b/.forgejo/workflows/deploy_hosted.yml @@ -16,7 +16,7 @@ jobs: node-version: "20" cache: "npm" cache-dependency-path: package-lock.json - + - name: install deps run: npm ci shell: bash @@ -43,8 +43,7 @@ jobs: export NODE_OPTIONS="--max-old-space-size=8192" npm run clean:tests npm run generate:doctests 2>&1 | grep -v "No doctests found in" - vitest --run test - npm run clean:tests + vitest --run test && npm run clean:tests shell: bash From c0f7de25fd1baeb0899c49dc8ebbbd8b6c0dc3b8 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 16 Mar 2025 23:47:46 +0100 Subject: [PATCH 21/65] Fix tests --- src/Models/ThemeConfig/TagRenderingConfig.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Models/ThemeConfig/TagRenderingConfig.ts b/src/Models/ThemeConfig/TagRenderingConfig.ts index 3d083299f7..313cd1bd0b 100644 --- a/src/Models/ThemeConfig/TagRenderingConfig.ts +++ b/src/Models/ThemeConfig/TagRenderingConfig.ts @@ -701,12 +701,12 @@ export default class TagRenderingConfig { * * const config = new TagRenderingConfig({"id":"capacity", "render": "Fits {capcity} books",freeform: {"key":"capacity",type:"pnat"} }) * config.constructChangeSpecification("", undefined, undefined, {}) // => undefined - * config.constructChangeSpecification("5", undefined, undefined, {}).optimize() // => [new Tag("capacity", "5")] + * config.constructChangeSpecification("5", undefined, undefined, {}) // => [new Tag("capacity", "5")] * * // Should pick a mapping, even if freeform is usedconstructChange * const config = new TagRenderingConfig({"id": "shop-types", render: "Shop type is {shop}", freeform: {key: "shop", addExtraTags:["fixme=freeform shop type used"]}, mappings:[{if: "shop=second_hand", then: "Second hand shop"}]}) - * config.constructChangeSpecification("freeform", 1, undefined, {}).asHumanString(false, false, {}) // => [new Tag("shop","freeform",new Tag("fixme","freeform shop type used")] - * config.constructChangeSpecification("freeform", undefined, undefined, {}) // => [new Tag("shop","freeform), new Tag("fixme","freeform shop type used")] + * config.constructChangeSpecification("freeform", 1, undefined, {}) // => [new Tag("shop","freeform"),new Tag("fixme","freeform shop type used")] + * config.constructChangeSpecification("freeform", undefined, undefined, {}) // => [new Tag("shop","freeform"), new Tag("fixme","freeform shop type used")] * config.constructChangeSpecification("second_hand", 1, undefined, {}) // => [new Tag("shop","second_hand")] * * From c3d905b26ab2825ed5e6f3849c694414ba68d98d Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 17 Mar 2025 01:16:30 +0100 Subject: [PATCH 22/65] Scripts: deploy hosted now actually now uses the '/tmp/' directory --- .forgejo/workflows/deploy_hosted.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/deploy_hosted.yml b/.forgejo/workflows/deploy_hosted.yml index 6cf54b381f..6cf6e2d9dd 100644 --- a/.forgejo/workflows/deploy_hosted.yml +++ b/.forgejo/workflows/deploy_hosted.yml @@ -52,11 +52,11 @@ jobs: - name: Zipping dist file run: | - mv dist ${{ github.ref_name }} - zip ${{ github.ref_name }}.zip -r ${{ github.ref_name }}/* + mv dist /tmp/${{ github.ref_name }} + zip /tmp/${{ github.ref_name }}.zip -r /tmp/${{ github.ref_name }}/* - name: uploading file - run: scp ${{ github.ref_name }}.zip hetzner:/root/staging/ + run: scp /tmp/${{ github.ref_name }}.zip hetzner:/root/staging/ - name: unzipping remote file run: ssh hetzner "cd /root/staging && rm -rf ${{ github.ref_name }} && unzip ${{ github.ref_name }}.zip && rm -rf /root/public/${{ github.ref_name }} && mv /root/staging/${{ github.ref_name }}/ /root/public/ && rm ${{ github.ref_name }}.zip" From ecd8f5e1da5b929ddeba0a3ed2651f8b4dbc0cc1 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 17 Mar 2025 01:17:02 +0100 Subject: [PATCH 23/65] Feature(grb): add popup feature to validate e.g. a user profile --- assets/themes/grb/grb.json | 44 ++++++++ langs/themes/en.json | 24 +++++ langs/themes/nl.json | 24 +++++ .../ThemeConfig/Conversion/PrepareTheme.ts | 101 +++++++++--------- .../ThemeConfig/Json/ThemeConfigJson.ts | 22 ++++ src/Models/ThemeConfig/ThemeConfig.ts | 31 +++++- src/Models/ThemeConfig/WithContextLoader.ts | 2 +- src/UI/Base/LoginButton.svelte | 14 ++- src/UI/Base/Popup.svelte | 4 +- .../SettingsVisualisations.ts | 21 +++- src/UI/ThemeViewGUI.svelte | 24 ++++- 11 files changed, 247 insertions(+), 64 deletions(-) diff --git a/assets/themes/grb/grb.json b/assets/themes/grb/grb.json index 58409d3030..5508a22ed0 100644 --- a/assets/themes/grb/grb.json +++ b/assets/themes/grb/grb.json @@ -19,6 +19,50 @@ "shortDescription": { "nl": "Grb import helper tool" }, + "popup": [ + { + "id": "wikilink-needed", + "condition": "_description!~.*https://wiki.openstreetmap.org/wiki/WikiProject_Belgium/Building_and_address_import.*", + "dismissable": false, + "title": { + "render": { + "en": "Profile mention obligated", + "nl": "Link op profiel verplicht" + } + }, + "body": [ + { + "render": { + "special": { + "type": "link", + "href": "https://www.openstreetmap.org/profile/edit", + "text": { + "en": "Edit your user profile", + "nl": "Pas je profiel aan" + } + }, + "after": { + "en": "to include the link https://wiki.openstreetmap.org/wiki/WikiProject_Belgium/Building_and_address_import", + "nl": " en voeg deze link toe: https://wiki.openstreetmap.org/wiki/WikiProject_Belgium/Building_and_address_import" + } + } + }, + { + "id": "reload_profile", + "render": { + "special": { + "type": "login_button", + "force": "yes", + "message": { + "en": "Reload your profile", + "nl": "Herlaad je profiel" + } + } + } + } + ] + } + ], "icon": "./assets/themes/grb/logo.svg", "startZoom": 9, "startLat": 51.0249, diff --git a/langs/themes/en.json b/langs/themes/en.json index 8a91f31920..8744e04485 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -623,6 +623,30 @@ } } } + }, + "popup": { + "0": { + "body": { + "0": { + "render": { + "special": { + "after": "to include the link https://wiki.openstreetmap.org/wiki/WikiProject_Belgium/Building_and_address_import", + "text": "Edit your user profile" + } + } + }, + "1": { + "render": { + "special": { + "msg": "Reload your profile" + } + } + } + }, + "title": { + "render": "Profile mention obligated" + } + } } }, "guideposts": { diff --git a/langs/themes/nl.json b/langs/themes/nl.json index 49c9e8b22b..56088c853d 100644 --- a/langs/themes/nl.json +++ b/langs/themes/nl.json @@ -669,6 +669,30 @@ } } }, + "popup": { + "0": { + "body": { + "0": { + "render": { + "special": { + "after": " en voeg deze link toe: https://wiki.openstreetmap.org/wiki/WikiProject_Belgium/Building_and_address_import", + "text": "Pas je profiel aan" + } + } + }, + "1": { + "render": { + "special": { + "msg": "Herlaad je profiel" + } + } + } + }, + "title": { + "render": "Link op profiel verplicht" + } + } + }, "shortDescription": "Grb import helper tool", "title": "GRB import helper" }, diff --git a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts index 4ad260ce1e..3e28b85df5 100644 --- a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts +++ b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts @@ -1,16 +1,6 @@ -import { - Concat, - Conversion, - DesugaringContext, - DesugaringStep, - Each, - Fuse, - On, - Pass, - SetDefault, -} from "./Conversion" +import { Concat, Conversion, DesugaringContext, DesugaringStep, Each, Fuse, On, Pass, SetDefault } from "./Conversion" import { ThemeConfigJson } from "../Json/ThemeConfigJson" -import { PrepareLayer } from "./PrepareLayer" +import { PrepareLayer, RewriteSpecial } from "./PrepareLayer" import { LayerConfigJson } from "../Json/LayerConfigJson" import { Utils } from "../../../Utils" import Constants from "../../Constants" @@ -40,7 +30,7 @@ class SubstituteLayer extends Conversion [ lname, - Utils.levenshteinDistance(name, lname), + Utils.levenshteinDistance(name, lname) ]) withDistance.sort((a, b) => a[1] - b[1]) const ids = withDistance.map((n) => n[0]) @@ -130,9 +120,9 @@ class SubstituteLayer extends Conversion 0) { context.err( "This theme specifies that certain tagrenderings have to be removed based on forbidden layers. One or more of these layers did not match any tagRenderings and caused no deletions: " + - unused.join(", ") + - "\n This means that this label can be removed or that the original tagRendering that should be deleted does not have this label anymore" + unused.join(", ") + + "\n This means that this label can be removed or that the original tagRendering that should be deleted does not have this label anymore" ) } found.tagRenderings = filtered @@ -205,10 +195,10 @@ export class AddDefaultLayers extends DesugaringStep { if (alreadyLoaded.has(v.id)) { context.warn( "Layout " + - context + - " already has a layer with name " + - v.id + - "; skipping inclusion of this builtin layer" + context + + " already has a layer with name " + + v.id + + "; skipping inclusion of this builtin layer" ) continue } @@ -352,10 +342,10 @@ class AddDependencyLayersToTheme extends DesugaringStep { .enters("layer dependency") .err( "Layer " + - dependency.neededLayer + - " is loaded because " + - dependency.reason + - "; so it must specify a `snapName`. This is used in the sentence `move this point to snap it to {snapName}`" + dependency.neededLayer + + " is loaded because " + + dependency.reason + + "; so it must specify a `snapName`. This is used in the sentence `move this point to snap it to {snapName}`" ) } } @@ -380,12 +370,12 @@ class AddDependencyLayersToTheme extends DesugaringStep { if (dep === undefined) { const message = [ "Loading a dependency failed: layer " + - unmetDependency.neededLayer + - " is not found, neither as layer of " + - themeId + - " nor as builtin layer.", + unmetDependency.neededLayer + + " is not found, neither as layer of " + + themeId + + " nor as builtin layer.", reason, - "Loaded layers are: " + alreadyLoaded.map((l) => l.id).join(","), + "Loaded layers are: " + alreadyLoaded.map((l) => l.id).join(",") ] throw message.join("\n\t") } @@ -395,7 +385,7 @@ class AddDependencyLayersToTheme extends DesugaringStep { dep.description = reason dependenciesToAdd.unshift({ config: dep, - reason, + reason }) loadedLayerIds.add(dep.id) unmetDependencies = unmetDependencies.filter( @@ -440,7 +430,7 @@ class AddDependencyLayersToTheme extends DesugaringStep { return { ...theme, - layers: layers, + layers: layers } } } @@ -510,10 +500,10 @@ class WarnForUnsubstitutedLayersInTheme extends DesugaringStep context.warn( "The theme " + - json.id + - " has an inline layer: " + - layer["id"] + - ". This is discouraged." + json.id + + " has an inline layer: " + + layer["id"] + + ". This is discouraged." ) } return json @@ -555,12 +545,12 @@ class PostvalidateTheme extends DesugaringStep { if (minZoomAll < layer.minzoom) { context.err( "There are multiple layers based on " + - basedOn + - ". The layer with id " + - layer.id + - " has a minzoom of " + - layer.minzoom + - ", and has a name set. Another similar layer has a lower minzoom. As such, the layer selection might show 'zoom in to see features' even though some of the features are already visible. Set `\"name\": null` for this layer and eventually remove the 'name':null for the other layer." + basedOn + + ". The layer with id " + + layer.id + + " has a minzoom of " + + layer.minzoom + + ", and has a name set. Another similar layer has a lower minzoom. As such, the layer selection might show 'zoom in to see features' even though some of the features are already visible. Set `\"name\": null` for this layer and eventually remove the 'name':null for the other layer." ) } } @@ -586,11 +576,11 @@ class PostvalidateTheme extends DesugaringStep { .enters("layers", config.id, "filter", "sameAs") .err( "The layer " + - config.id + - " follows the filter state of layer " + - sameAs + - ", but no layer with this name was found.\n\tDid you perhaps mean one of: " + - closeLayers.slice(0, 3).join(", ") + config.id + + " follows the filter state of layer " + + sameAs + + ", but no layer with this name was found.\n\tDid you perhaps mean one of: " + + closeLayers.slice(0, 3).join(", ") ) } } @@ -618,6 +608,13 @@ export class PrepareTheme extends Fuse { new SetDefault("socialImage", "assets/SocialImage.png", true), // We expand all tagrenderings first... new On("layers", new Each(new PrepareLayer(state))), + new On("popup", new Each( + new Fuse("Prepare popups", + new On("body", new Each(new RewriteSpecial())), + new On("title", new RewriteSpecial()) + ) + )), + // Then we apply the override all. We must first expand everything in case that we override something in an expanded tag // Note that it'll cheat with tagRenderings+ new ApplyOverrideAll(), diff --git a/src/Models/ThemeConfig/Json/ThemeConfigJson.ts b/src/Models/ThemeConfig/Json/ThemeConfigJson.ts index cbdeef07b2..654a6b7462 100644 --- a/src/Models/ThemeConfig/Json/ThemeConfigJson.ts +++ b/src/Models/ThemeConfig/Json/ThemeConfigJson.ts @@ -3,6 +3,8 @@ import ExtraLinkConfigJson from "./ExtraLinkConfigJson" import { RasterLayerProperties } from "../../RasterLayerProperties" import { Translatable } from "./Translatable" +import { TagConfigJson } from "./TagConfigJson" +import { TagRenderingConfigJson } from "./TagRenderingConfigJson" /** * Defines the entire theme. @@ -468,4 +470,24 @@ export interface ThemeConfigJson { * group: hidden */ _usedImages?: string[] + + /** + * If set, an _additional_ popup will be shown under the theme introduction page. + * + * The embedded tagRenderingConfigs will be run against the settings-state of the contributor. + * If multiple popups are set, the first popup of the list will be rendered on top (and thus be seen first). + */ + popup?: { + /** + * ifset: the user can dismiss this message + */ + dismissible?: boolean + condition?: TagConfigJson + title: TagRenderingConfigJson, + body: TagRenderingConfigJson[], + /** + * id of the popup, mostly to keep the translations in check + */ + id: string, + }[] } diff --git a/src/Models/ThemeConfig/ThemeConfig.ts b/src/Models/ThemeConfig/ThemeConfig.ts index de1851fc66..ad677a380b 100644 --- a/src/Models/ThemeConfig/ThemeConfig.ts +++ b/src/Models/ThemeConfig/ThemeConfig.ts @@ -9,6 +9,10 @@ import LanguageUtils from "../../Utils/LanguageUtils" import { RasterLayerProperties } from "../RasterLayerProperties" import { Translatable } from "./Json/Translatable" +import { TagsFilter } from "../../Logic/Tags/TagsFilter" +import TagRenderingConfig from "./TagRenderingConfig" +import { TagUtils } from "../../Logic/Tags/TagUtils" +import { TagRenderingConfigJson } from "./Json/TagRenderingConfigJson" /** * Minimal information about a theme @@ -93,6 +97,14 @@ export default class ThemeConfig implements ThemeInformation { public readonly source: ThemeConfigJson public readonly enableCache: boolean + public readonly popups: Readonly<{ + id: string, + dismissible?: boolean, + condition: TagsFilter, + title: TagRenderingConfig, + body: TagRenderingConfig[] + }>[] + constructor( json: ThemeConfigJson, official = true, @@ -193,11 +205,26 @@ export default class ThemeConfig implements ThemeInformation { icon: "./assets/svg/pop-out.svg", href: "https://{basepath}/{theme}.html?lat={lat}&lon={lon}&z={zoom}&language={language}", newTab: true, - requirements: ["iframe", "no-welcome-message"], + requirements: ["iframe", "no-welcome-message"] }, context + ".extraLink" ) + this.popups = (json.popup ?? []).map((p, i) => { + const ctx = context + ".popup." + i + if (!p.id) { + throw (ctx + ": an id is required") + } + const body: TagRenderingConfigJson[] = Array.isArray(p.body) ? p.body : [p.body] + return { + id: p.id, + dismissible: p.dismissible ?? false, + condition: TagUtils.Tag(p.condition), + title: new TagRenderingConfig(p.title, ctx + ".title"), + body: body.map((body, i) => new TagRenderingConfig(body, ctx + ".body." + i)) + } + }) + this.hideFromOverview = json.hideFromOverview ?? false this.lockLocation = <[[number, number], [number, number]]>json.lockLocation ?? undefined this.enableUserBadge = json.enableUserBadge ?? true @@ -351,7 +378,7 @@ export default class ThemeConfig implements ThemeInformation { // The 'favourite'-layer contains pretty much all images as it bundles all layers, so we exclude it const jsonNoFavourites = { ...json, - layers: json.layers.filter((l) => l["id"] !== "favourite"), + layers: json.layers.filter((l) => l["id"] !== "favourite") } const usedImages = jsonNoFavourites._usedImages usedImages.sort() diff --git a/src/Models/ThemeConfig/WithContextLoader.ts b/src/Models/ThemeConfig/WithContextLoader.ts index 0fee9d6dbf..46d16e2812 100644 --- a/src/Models/ThemeConfig/WithContextLoader.ts +++ b/src/Models/ThemeConfig/WithContextLoader.ts @@ -12,7 +12,7 @@ export default class WithContextLoader { this._context = context } - /** Given a key, gets the corresponding property from the json (or the default if not found + /** Given a key, gets the corresponding property from the json (or the default if not found) * * The found value is interpreted as a tagrendering and fetched/parsed * */ diff --git a/src/UI/Base/LoginButton.svelte b/src/UI/Base/LoginButton.svelte index 21d3327267..011732003a 100644 --- a/src/UI/Base/LoginButton.svelte +++ b/src/UI/Base/LoginButton.svelte @@ -6,18 +6,26 @@ export let osmConnection: OsmConnection export let clss: string | undefined = undefined - + /** + * Show the button, even though we are logged in + */ + export let forceShow: boolean = false + export let msg: String = undefined if (osmConnection === undefined) { console.error("No osmConnection passed into loginButton") } let isLoggedIn = osmConnection.isLoggedIn -{#if !$isLoggedIn} +{#if !$isLoggedIn || forceShow} {/if} diff --git a/src/UI/Base/Popup.svelte b/src/UI/Base/Popup.svelte index 0670c5e7bf..96df2ac07c 100644 --- a/src/UI/Base/Popup.svelte +++ b/src/UI/Base/Popup.svelte @@ -42,8 +42,8 @@ shown.set(false)} - outsideclose + on:close={() =>shown.set(false)} + outsideclose={dismissable} size="xl" {dismissable} {defaultClass} diff --git a/src/UI/SpecialVisualisations/SettingsVisualisations.ts b/src/UI/SpecialVisualisations/SettingsVisualisations.ts index 8d12420396..b7ff0890c2 100644 --- a/src/UI/SpecialVisualisations/SettingsVisualisations.ts +++ b/src/UI/SpecialVisualisations/SettingsVisualisations.ts @@ -111,12 +111,27 @@ export class SettingsVisualisations { }, { funcName: "login_button", - args: [], + args: [{ + name: "force", + doc: "Always show this button, even if logged in" + }, { + name: "message", + doc: "Message to display on the button" + }], docs: "Show a login button", needsUrls: [], group: "settings", - constr(state: SpecialVisualizationState): SvelteUIElement { - return new SvelteUIElement(LoginButton, { osmConnection: state.osmConnection }) + constr(state: SpecialVisualizationState, _, args): SvelteUIElement { + const force = args[0].toLowerCase() + let msg = args[1] + if (msg === "") { + msg = undefined + } + return new SvelteUIElement(LoginButton, { + osmConnection: state.osmConnection, + msg, + forceShow: force === "yes" || force === "true" + }) }, }, diff --git a/src/UI/ThemeViewGUI.svelte b/src/UI/ThemeViewGUI.svelte index a7d54765f9..bff3dac807 100644 --- a/src/UI/ThemeViewGUI.svelte +++ b/src/UI/ThemeViewGUI.svelte @@ -49,6 +49,8 @@ import Loading from "./Base/Loading.svelte" import { WithSearchState } from "../Models/ThemeViewState/WithSearchState" import TitleHandler from "../Logic/Actors/TitleHandler" + import Popup from "./Base/Popup.svelte" + import TagRenderingAnswer from "./Popup/TagRendering/TagRenderingAnswer.svelte" export let state: WithSearchState new TitleHandler(state.selectedElement, state) @@ -76,6 +78,7 @@ let mapproperties: MapProperties = state.mapProperties let searchOpened = state.searchState.showSearchDrawer + let metatags = state.userRelatedState.preferencesAsTags Orientation.singleton.startMeasurements() let slideDuration = 150 // ms @@ -148,7 +151,7 @@ const bottomRight = mlmap.unproject([rect.right, rect.bottom]) const bbox = new BBox([ [topLeft.lng, topLeft.lat], - [bottomRight.lng, bottomRight.lat], + [bottomRight.lng, bottomRight.lat] ]) state.visualFeedbackViewportBounds.setData(bbox) } @@ -500,5 +503,24 @@ {/if} {/if} + {#each theme.popups as popup} + {#if popup.condition.matchesProperties($metatags)} + + +
+ {#each popup.body as body} + + {/each} + {popup.id} +
+
+ {/if} + {/each} From 75a0eeed83990b727abd04ef78126001c3675e69 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 17 Mar 2025 02:04:40 +0100 Subject: [PATCH 24/65] Scripts: fixes to deploy-hosted --- .forgejo/workflows/deploy_hosted.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/deploy_hosted.yml b/.forgejo/workflows/deploy_hosted.yml index 6cf6e2d9dd..88b6f5c5cd 100644 --- a/.forgejo/workflows/deploy_hosted.yml +++ b/.forgejo/workflows/deploy_hosted.yml @@ -52,8 +52,10 @@ jobs: - name: Zipping dist file run: | - mv dist /tmp/${{ github.ref_name }} - zip /tmp/${{ github.ref_name }}.zip -r /tmp/${{ github.ref_name }}/* + mv -f dist /tmp/${{ github.ref_name }} + cd /tmp + zip ${{ github.ref_name }}.zip -r ${{ github.ref_name }}/* + cd - - name: uploading file run: scp /tmp/${{ github.ref_name }}.zip hetzner:/root/staging/ From be68837ffbc6875843f9d3fd0d3e77d89df1a2d2 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 17 Mar 2025 02:05:45 +0100 Subject: [PATCH 25/65] Feature: add user_block endpoint --- scripts/generateLayerOverview.ts | 10 +++------- src/Logic/Osm/OsmConnection.ts | 22 +++++++++++++++++++++- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index d3f4dd4f98..cf46736438 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" @@ -501,7 +497,7 @@ class LayerOverviewUtils extends Script { priviliged.delete(key) }) - // These two get a free pass + // These get a free pass priviliged.delete("summary") priviliged.delete("last_click") priviliged.delete("search") diff --git a/src/Logic/Osm/OsmConnection.ts b/src/Logic/Osm/OsmConnection.ts index 0230aa4ee5..c8dea75dd1 100644 --- a/src/Logic/Osm/OsmConnection.ts +++ b/src/Logic/Osm/OsmConnection.ts @@ -65,6 +65,16 @@ interface OsmUserInfo { } } +interface UserBlock { + "id": number, + "created_at": string, + "updated_at": string, + "ends_at": string, + "needs_view": boolean, + "user": { "uid": number, "user": string }, + "creator": { "uid": number, "user": string } +} + export default interface UserDetails { name: string uid: number @@ -77,7 +87,8 @@ export default interface UserDetails { account_created: string tracesCount: number description?: string - languages: string[] + languages: string[], + active_blocks: number } export type OsmServiceState = "online" | "readonly" | "offline" | "unknown" | "unreachable" @@ -309,6 +320,7 @@ export class OsmConnection { account_created: user.account_created, tracesCount: user.traces?.count ?? 0, unreadMessages: user.messages.received?.unread ?? 0, + active_blocks: user.blocks.received.active ?? 0 } this.userDetails.set(userdetails) this.loadingStatus.setData("logged-in") @@ -559,6 +571,14 @@ export class OsmConnection { }) } + /** + * Have you been banned by the DWG? + */ + public async getUserBlocks(): Promise { + const raw = await this.interact("/user/blocks/active.json") + return JSON.parse(raw)["user_blocks"] + } + /** * To be called by land.html */ From c559b4ae1ee089c47db3a6be07ed4e04a084c31c Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 17 Mar 2025 02:15:06 +0100 Subject: [PATCH 26/65] Chore: resize some images to fix warnings --- assets/layers/ice_cream/ice_cream.svg | 101 +++--- assets/layers/item_with_image/camera.svg | 356 +++++++++++++++++--- assets/themes/advertising/wall_painting.svg | 76 +++-- 3 files changed, 408 insertions(+), 125 deletions(-) diff --git a/assets/layers/ice_cream/ice_cream.svg b/assets/layers/ice_cream/ice_cream.svg index f40ca6c486..5cd3498128 100644 --- a/assets/layers/ice_cream/ice_cream.svg +++ b/assets/layers/ice_cream/ice_cream.svg @@ -1,40 +1,61 @@ - - - - - - - - image/svg+xml - - - - - - - - - + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/assets/layers/item_with_image/camera.svg b/assets/layers/item_with_image/camera.svg index a29853276f..5dae59d812 100644 --- a/assets/layers/item_with_image/camera.svg +++ b/assets/layers/item_with_image/camera.svg @@ -1,64 +1,316 @@ - - Adwaita Icon Template - - - - + + + Adwaita Icon Template + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - + + + + Adwaita Icon Template + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/assets/themes/advertising/wall_painting.svg b/assets/themes/advertising/wall_painting.svg index fbf462c648..b1b1908a42 100644 --- a/assets/themes/advertising/wall_painting.svg +++ b/assets/themes/advertising/wall_painting.svg @@ -2,12 +2,12 @@ + inkscape:current-layer="layer1" + inkscape:showpageshadow="2" + inkscape:deskcolor="#d1d1d1"> + id="guide1027" + inkscape:locked="false" /> + id="guide1029" + inkscape:locked="false" /> + id="guide1031" + inkscape:locked="false" /> + id="guide1033" + inkscape:locked="false" /> + id="guide1035" + inkscape:locked="false" /> + id="guide1037" + inkscape:locked="false" /> + id="guide1039" + inkscape:locked="false" /> + id="guide1041" + inkscape:locked="false" /> @@ -86,26 +96,25 @@ + style="display:inline"> + rx="12.591385" /> + mask="url(#mask1309)" + transform="matrix(12.591377,0,0,12.591377,0.30278402,0.86556738)"> From e34ecd2f62c1c333596be7a321f9a2e141e8a825 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 17 Mar 2025 02:37:31 +0100 Subject: [PATCH 27/65] Chore: deploy script now cleans up files --- .forgejo/workflows/deploy_hosted.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy_hosted.yml b/.forgejo/workflows/deploy_hosted.yml index 88b6f5c5cd..e11635f0f2 100644 --- a/.forgejo/workflows/deploy_hosted.yml +++ b/.forgejo/workflows/deploy_hosted.yml @@ -52,7 +52,7 @@ jobs: - name: Zipping dist file run: | - mv -f dist /tmp/${{ github.ref_name }} + mv dist /tmp/${{ github.ref_name }} cd /tmp zip ${{ github.ref_name }}.zip -r ${{ github.ref_name }}/* cd - @@ -60,6 +60,9 @@ jobs: - name: uploading file run: scp /tmp/${{ github.ref_name }}.zip hetzner:/root/staging/ + - name: cleanup files + run: rm /tmp/${{ github.ref_name }}.zip && rm -rf /tmp/${{ github.ref_name }}/ + - name: unzipping remote file run: ssh hetzner "cd /root/staging && rm -rf ${{ github.ref_name }} && unzip ${{ github.ref_name }}.zip && rm -rf /root/public/${{ github.ref_name }} && mv /root/staging/${{ github.ref_name }}/ /root/public/ && rm ${{ github.ref_name }}.zip" From 92352ed2740ce052a7bc5f575b80167a69cbd01f Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 17 Mar 2025 02:44:39 +0100 Subject: [PATCH 28/65] chore(release): 0.50.5 --- CHANGELOG.md | 18 ++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 235b0a712e..5e476d26e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,24 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [0.50.5](https://github.com/pietervdvn/mapcomplete/compare/v0.50.4...v0.50.5) (2025-03-17) + + +### Bug Fixes + +* fix postfixdistinguished-charge input ([70ad243](https://github.com/pietervdvn/mapcomplete/commits/70ad2431d0aa0ad25772cd5a72ec0e6ecf16a3e9)) +* merge translations ([c83eaf9](https://github.com/pietervdvn/mapcomplete/commits/c83eaf9b1618ceac668782223e45c16b64f9a937)) +* tests ([e24b465](https://github.com/pietervdvn/mapcomplete/commits/e24b465783fc933f908b3d01290dd5166abff746)) +* tests ([874f92d](https://github.com/pietervdvn/mapcomplete/commits/874f92d70fc54285e42be69d9350b3b943029fc3)) + + +### Theme improvements + +* **entrance:** add question about reference numbers ([1933b8a](https://github.com/pietervdvn/mapcomplete/commits/1933b8a7be28d78bddb83c13619766338c85afcf)) +* **toilets:** add condition to supervision question: only ask if a public toilet ([1dd7856](https://github.com/pietervdvn/mapcomplete/commits/1dd78563efe0d4d8513f621884e8d42fbaa18513)) +* **toilets:** add supervision, hand_drying questions ([40c6a58](https://github.com/pietervdvn/mapcomplete/commits/40c6a582c76baacf007fa6a7675b1564c4e31f46)) +* **wayside_shrine:** add level, do not count 'artwork' ([ac19702](https://github.com/pietervdvn/mapcomplete/commits/ac19702189c36df50f20f7063387ac506b3dbbf9)) + ### [0.50.4](https://github.com/pietervdvn/mapcomplete/compare/v0.50.3...v0.50.4) (2025-03-13) diff --git a/package-lock.json b/package-lock.json index 2fd7ed9297..0575894dcc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mapcomplete", - "version": "0.50.4", + "version": "0.50.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mapcomplete", - "version": "0.50.4", + "version": "0.50.5", "license": "GPL-3.0-or-later", "dependencies": { "@capacitor/android": "^6.1.2", diff --git a/package.json b/package.json index 391836415f..ce0ceb6cd9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mapcomplete", - "version": "0.50.4", + "version": "0.50.5", "repository": "https://github.com/pietervdvn/MapComplete", "description": "A small website to edit OSM easily", "bugs": "https://github.com/pietervdvn/MapComplete/issues", From 535e36a0063c132fc4c946bbc52f21406e892559 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 17 Mar 2025 02:54:12 +0100 Subject: [PATCH 29/65] chore: automated housekeeping... --- Docs/BuiltinIndex.md | 6 + Docs/Layers/all_vending_machine.md | 6 +- Docs/Layers/artwork.md | 114 ++- Docs/Layers/artwork_on_wall.md | 113 ++- Docs/Layers/entrance.md | 10 +- Docs/Layers/group_campsite.md | 8 +- Docs/Layers/group_hostel.md | 6 +- Docs/Layers/indoors.md | 26 +- Docs/Layers/scouting_group.md | 11 + Docs/Layers/toilet.md | 42 +- Docs/Layers/vending_machine.md | 6 +- Docs/Layers/vending_machine_bicycle.md | 6 +- Docs/Layers/walls_and_buildings.md | 27 +- Docs/Layers/wayside_shrine.md | 200 +++++ Docs/SpecialRenderings.md | 7 +- Docs/TagInfo/mapcomplete_artwork.json | 179 ++++ Docs/TagInfo/mapcomplete_climbing.json | 48 +- Docs/TagInfo/mapcomplete_ghostsigns.json | 179 ++++ Docs/TagInfo/mapcomplete_indoors.json | 29 +- Docs/TagInfo/mapcomplete_memorials.json | 179 ++++ Docs/TagInfo/mapcomplete_nature.json | 48 +- Docs/TagInfo/mapcomplete_onwheels.json | 57 +- Docs/TagInfo/mapcomplete_playgrounds.json | 48 +- Docs/TagInfo/mapcomplete_scouting.json | 29 + Docs/TagInfo/mapcomplete_ski.json | 48 +- Docs/TagInfo/mapcomplete_toilets.json | 48 +- Docs/TagInfo/mapcomplete_wayside_shrines.json | 814 ++++++++++++++++++ Docs/Themes/architecture.md | 2 + Docs/Themes/cyclofix.md | 6 +- Docs/Themes/ghostsigns.md | 113 ++- Docs/Themes/openlovemap.md | 6 +- Docs/Themes/personal.md | 1 + Docs/Themes/scouting.md | 15 +- Docs/Themes/velopark.md | 2 +- Docs/Themes/vending_machine.md | 6 +- Docs/Themes/wayside_shrines.md | 23 + Docs/wikiIndex.txt | 13 +- package-lock.json | 12 +- scripts/generateLayerOverview.ts | 8 +- src/Logic/GeoOperations.ts | 1 - src/Logic/Osm/OsmConnection.ts | 18 +- src/Logic/SimpleMetaTagger.ts | 12 +- src/Logic/State/SearchState.ts | 6 +- src/Logic/State/UserSettingsMetaTagging.ts | 48 +- src/Logic/Tags/TagTypes.ts | 1 - src/Logic/Tags/TagUtils.ts | 68 +- src/Models/MenuState.ts | 4 +- .../ThemeConfig/Conversion/PrepareTheme.ts | 106 ++- .../ThemeConfig/Json/ThemeConfigJson.ts | 6 +- src/Models/ThemeConfig/TagRenderingConfig.ts | 63 +- src/Models/ThemeConfig/ThemeConfig.ts | 16 +- src/UI/Base/Popup.svelte | 8 +- src/UI/Image/LinkableImage.svelte | 3 +- src/UI/Image/NearbyImagesCollapsed.svelte | 24 +- src/UI/InspectorGUI.svelte | 29 +- src/UI/Map/MapLibreAdaptor.ts | 38 +- src/UI/Map/ShowDataLayer.ts | 5 +- .../TagRendering/TagRenderingQuestion.svelte | 26 +- src/UI/Search/GeocodeResult.svelte | 6 +- src/UI/Search/GeocodeResults.svelte | 3 +- src/UI/Search/SearchResults.svelte | 6 +- .../SettingsVisualisations.ts | 19 +- src/UI/ThemeViewGUI.svelte | 33 +- src/assets/contributors.json | 18 +- src/assets/language_in_country.json | 4 +- src/assets/schemas/layerconfigmeta.json | 4 + src/assets/schemas/layoutconfigmeta.json | 12 + src/assets/translators.json | 28 +- 68 files changed, 2734 insertions(+), 382 deletions(-) create mode 100644 Docs/Layers/wayside_shrine.md create mode 100644 Docs/TagInfo/mapcomplete_wayside_shrines.json create mode 100644 Docs/Themes/wayside_shrines.md diff --git a/Docs/BuiltinIndex.md b/Docs/BuiltinIndex.md index c1c23d8dd8..9f431a055f 100644 --- a/Docs/BuiltinIndex.md +++ b/Docs/BuiltinIndex.md @@ -132,6 +132,7 @@ - village_green - waste_basket - waste_disposal + - wayside_shrine - windturbine ### luminous_or_lit @@ -305,6 +306,10 @@ - artwork - memorial + ### wayside_shrine.shrine_questions + + - artwork + ### preset_description - assisted_repair @@ -424,6 +429,7 @@ - toilet - toilet_at_amenity - vending_machine + - wayside_shrine ### shops.* diff --git a/Docs/Layers/all_vending_machine.md b/Docs/Layers/all_vending_machine.md index 7fd40fddde..84b54371d3 100644 --- a/Docs/Layers/all_vending_machine.md +++ b/Docs/Layers/all_vending_machine.md @@ -242,21 +242,21 @@ This tagrendering has labels ### charge_bicycle_tube The question is `How much does a a bicycle tube cost?` -*a bicycle tube costs {charge:bicycle_tube}* is shown if `charge` is set +*a bicycle tube costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*bicycle_tube.*)$ ### charge_bicycle_light The question is `How much does a bicycle light cost?` -*bicycle light costs {charge:bicycle_light}* is shown if `charge` is set +*bicycle light costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*bicycle_light.*)$ ### charge_condom The question is `How much does a a condom cost?` -*a condom costs {charge:condom}* is shown if `charge` is set +*a condom costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*condom.*)$ diff --git a/Docs/Layers/artwork.md b/Docs/Layers/artwork.md index f68bcfd674..bc8de6b84c 100644 --- a/Docs/Layers/artwork.md +++ b/Docs/Layers/artwork.md @@ -33,6 +33,13 @@ An open map of statues, busts, graffitis and other artwork all over the world - [bench-survey:date](#bench-surveydate) - [bench-inscription](#bench-inscription) - [bench-memorial](#bench-memorial) + - [doubles_as_wayside_shrine](#doubles_as_wayside_shrine) + - [shrine_name](#shrine_name) + - [religion](#religion) + - [denomination_christian](#denomination_christian) + - [denomination_muslim](#denomination_muslim) + - [denomination_jewish](#denomination_jewish) + - [denomination_other](#denomination_other) - [leftover-questions](#leftover-questions) - [move-button](#move-button) - [delete-button](#delete-button) @@ -44,6 +51,7 @@ An open map of statues, busts, graffitis and other artwork all over the world - [artwork](https://mapcomplete.org/artwork) - [memorials](https://mapcomplete.org/memorials) - [personal](https://mapcomplete.org/personal) + - [wayside_shrines](https://mapcomplete.org/wayside_shrines) ## Presets @@ -83,6 +91,13 @@ Elements must match the expression ** [survey:date](https://wiki.openstreetmap.org/wiki/Key:survey:date) | [date](../SpecialInputElements.md#date) | [](https://wiki.openstreetmap.org/wiki/Tag:survey:date%3D) | | [inscription](https://wiki.openstreetmap.org/wiki/Key:inscription) | [text](../SpecialInputElements.md#text) | | | [historic](https://wiki.openstreetmap.org/wiki/Key:historic) | Multiple choice | [memorial](https://wiki.openstreetmap.org/wiki/Tag:historic%3Dmemorial) [](https://wiki.openstreetmap.org/wiki/Tag:historic%3D) | +| [historic](https://wiki.openstreetmap.org/wiki/Key:historic) | Multiple choice | [wayside_shrine](https://wiki.openstreetmap.org/wiki/Tag:historic%3Dwayside_shrine) [](https://wiki.openstreetmap.org/wiki/Tag:historic%3D) | +| [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [religion](https://wiki.openstreetmap.org/wiki/Key:religion) | [string](../SpecialInputElements.md#string) | [christian](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dchristian) [buddhist](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dbuddhist) [hindu](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dhindu) [jain](https://wiki.openstreetmap.org/wiki/Tag:religion%3Djain) [jewish](https://wiki.openstreetmap.org/wiki/Tag:religion%3Djewish) [muslim](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dmuslim) [pagan](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dpagan) [shinto](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dshinto) [sikh](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dsikh) [taoist](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dtaoist) [zoroastrian](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dzoroastrian) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [catholic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dcatholic) [roman_catholic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Droman_catholic) [orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dorthodox) [greek_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dgreek_orthodox) [russian_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Drussian_orthodox) [serbian_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dserbian_orthodox) [protestant](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dprotestant) [anglican](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Danglican) [adventist](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dadventist) [evangelical](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Devangelical) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [shia](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dshia) [sunni](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dsunni) [sufi](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dsufi) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [conservative](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dconservative) [orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dorthodox) [hasidic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dhasidic) [reform](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dreform) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | | ### images_no_blur Same as `images`, but uploaded request to disable blurring to the panoramax server @@ -156,7 +171,7 @@ This tagrendering has labels The question is `Does this artwork serve as a memorial?` - - *This artwork also serves as a memorial* is shown if with historic=memorial + - *This artwork also serves as a memorial* is shown if with historic=memorial - *This artwork does not serve as a memorial* is shown if with historic= ### memorial-type @@ -199,7 +214,7 @@ This tagrendering has labels The question is `Does this artwork serve as a bench?` - - *This artwork also serves as a bench* is shown if with amenity=bench + - *This artwork also serves as a bench* is shown if with amenity=bench - *This artwork does not serve as a bench* is shown if with amenity= - *This artwork does not serve as a bench* is shown if with amenity!=bench. _This option cannot be chosen as answer_ @@ -314,6 +329,101 @@ This tagrendering is only visible in the popup if the following condition is met This tagrendering has labels `bench-questions` +### doubles_as_wayside_shrine + +The question is `Does this artwork also double as wayside shrine?` + + - *This artwork acts as a wayside shrine* is shown if with historic=wayside_shrine + - *This artwork does not act as a wayside shrine* is shown if with historic= + +### shrine_name + +The question is `What's the name of this shrine?` +*The name of this shrine is {name}* is shown if `name` is set + + - *This shrine does not have a name* is shown if with noname=yes + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine +This tagrendering has labels +`shrine_questions` + +### religion + +The question is `To which religion is this shrine dedicated?` +*This shrine is {religion}* is shown if `religion` is set + + - *This is a Christian shrine* is shown if with religion=christian + - *This is a Buddhist shrine* is shown if with religion=buddhist + - *This is a Hindu shrine* is shown if with religion=hindu + - *This is a Jain shrine* is shown if with religion=jain + - *This is a Jewish shrine* is shown if with religion=jewish + - *This is an Islamic shrine* is shown if with religion=muslim + - *This is a Pagan shrine* is shown if with religion=pagan + - *This is a Shinto shrine* is shown if with religion=shinto + - *This is a Sikh shrine* is shown if with religion=sikh + - *This is a Taoist shrine* is shown if with religion=taoist + - *This is a Zoroastrian shrine* is shown if with religion=zoroastrian + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine +This tagrendering has labels +`shrine_questions` + +### denomination_christian + +The question is `What's the Christian denomination of the shrine?` +*The religious denomination is {denomination}* is shown if `denomination` is set + + - *The religious subdenomination is Catholic* is shown if with denomination=catholic + - *The religious subdenomination is Roman Catholic* is shown if with denomination=roman_catholic + - *The religious subdenomination is Orthodox* is shown if with denomination=orthodox + - *The religious subdenomination is Greek-Orthodox* is shown if with denomination=greek_orthodox + - *The religious subdenomination is Russian-Orthodox* is shown if with denomination=russian_orthodox + - *The religious subdenomination is Serbian Orthodox* is shown if with denomination=serbian_orthodox + - *The religious subdenomination is Protestant* is shown if with denomination=protestant + - *The religious subdenomination is Anglican* is shown if with denomination=anglican + - *The religious subdenomination is Adventist* is shown if with denomination=adventist + - *The religious subdenomination is evangelical* is shown if with denomination=evangelical + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine & religion=christian +This tagrendering has labels +`shrine_questions` + +### denomination_muslim + +The question is `What's the Muslim denomination of this shrine?` +*The religious subdenomination is {denomination}* is shown if `denomination` is set + + - *The religious subdenomination is Shia* is shown if with denomination=shia + - *The religious subdenomination is Sunni* is shown if with denomination=sunni + - *The religious subdenomination is Sufi* is shown if with denomination=sufi + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine & religion=muslim +This tagrendering has labels +`shrine_questions` + +### denomination_jewish + +The question is `What's the Jewish denomination of this shrine?` +*The religious subdenomination is {denomination}* is shown if `denomination` is set + + - *The religious subdenomination is Conservative* is shown if with denomination=conservative + - *The religious subdenomination is Orthodox* is shown if with denomination=orthodox + - *The religious subdenomination is Hasidic* is shown if with denomination=hasidic + - *The religious subdenomination is Reform* is shown if with denomination=reform + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine & religion=jewish +This tagrendering has labels +`shrine_questions` + +### denomination_other + +The question is `What's the denomination of this shrine?` +*The denomination of this shrine is {denomination}* is shown if `denomination` is set + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine & religion!=christian & religion!=muslim & religion!=jewish & religion~.+ +This tagrendering has labels +`shrine_questions` + ### leftover-questions _This tagrendering has no question and is thus read-only_ diff --git a/Docs/Layers/artwork_on_wall.md b/Docs/Layers/artwork_on_wall.md index 3b30dd0b8c..c6a7953cfc 100644 --- a/Docs/Layers/artwork_on_wall.md +++ b/Docs/Layers/artwork_on_wall.md @@ -34,6 +34,13 @@ An open map of statues, busts, graffitis and other artwork all over the world - [bench-survey:date](#bench-surveydate) - [bench-inscription](#bench-inscription) - [bench-memorial](#bench-memorial) + - [doubles_as_wayside_shrine](#doubles_as_wayside_shrine) + - [shrine_name](#shrine_name) + - [religion](#religion) + - [denomination_christian](#denomination_christian) + - [denomination_muslim](#denomination_muslim) + - [denomination_jewish](#denomination_jewish) + - [denomination_other](#denomination_other) - [leftover-questions](#leftover-questions) - [move-button](#move-button) - [delete-button](#delete-button) @@ -79,6 +86,13 @@ Elements must match **all** of the following expressions: | [survey:date](https://wiki.openstreetmap.org/wiki/Key:survey:date) | [date](../SpecialInputElements.md#date) | [](https://wiki.openstreetmap.org/wiki/Tag:survey:date%3D) | | [inscription](https://wiki.openstreetmap.org/wiki/Key:inscription) | [text](../SpecialInputElements.md#text) | | | [historic](https://wiki.openstreetmap.org/wiki/Key:historic) | Multiple choice | [memorial](https://wiki.openstreetmap.org/wiki/Tag:historic%3Dmemorial) [](https://wiki.openstreetmap.org/wiki/Tag:historic%3D) | +| [historic](https://wiki.openstreetmap.org/wiki/Key:historic) | Multiple choice | [wayside_shrine](https://wiki.openstreetmap.org/wiki/Tag:historic%3Dwayside_shrine) [](https://wiki.openstreetmap.org/wiki/Tag:historic%3D) | +| [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [religion](https://wiki.openstreetmap.org/wiki/Key:religion) | [string](../SpecialInputElements.md#string) | [christian](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dchristian) [buddhist](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dbuddhist) [hindu](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dhindu) [jain](https://wiki.openstreetmap.org/wiki/Tag:religion%3Djain) [jewish](https://wiki.openstreetmap.org/wiki/Tag:religion%3Djewish) [muslim](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dmuslim) [pagan](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dpagan) [shinto](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dshinto) [sikh](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dsikh) [taoist](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dtaoist) [zoroastrian](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dzoroastrian) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [catholic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dcatholic) [roman_catholic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Droman_catholic) [orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dorthodox) [greek_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dgreek_orthodox) [russian_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Drussian_orthodox) [serbian_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dserbian_orthodox) [protestant](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dprotestant) [anglican](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Danglican) [adventist](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dadventist) [evangelical](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Devangelical) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [shia](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dshia) [sunni](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dsunni) [sufi](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dsufi) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [conservative](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dconservative) [orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dorthodox) [hasidic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dhasidic) [reform](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dreform) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | | ### historic_or_not @@ -159,7 +173,7 @@ This tagrendering has labels The question is `Does this artwork serve as a memorial?` - - *This artwork also serves as a memorial* is shown if with historic=memorial + - *This artwork also serves as a memorial* is shown if with historic=memorial - *This artwork does not serve as a memorial* is shown if with historic= ### memorial-type @@ -202,7 +216,7 @@ This tagrendering has labels The question is `Does this artwork serve as a bench?` - - *This artwork also serves as a bench* is shown if with amenity=bench + - *This artwork also serves as a bench* is shown if with amenity=bench - *This artwork does not serve as a bench* is shown if with amenity= - *This artwork does not serve as a bench* is shown if with amenity!=bench. _This option cannot be chosen as answer_ @@ -317,6 +331,101 @@ This tagrendering is only visible in the popup if the following condition is met This tagrendering has labels `bench-questions` +### doubles_as_wayside_shrine + +The question is `Does this artwork also double as wayside shrine?` + + - *This artwork acts as a wayside shrine* is shown if with historic=wayside_shrine + - *This artwork does not act as a wayside shrine* is shown if with historic= + +### shrine_name + +The question is `What's the name of this shrine?` +*The name of this shrine is {name}* is shown if `name` is set + + - *This shrine does not have a name* is shown if with noname=yes + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine +This tagrendering has labels +`shrine_questions` + +### religion + +The question is `To which religion is this shrine dedicated?` +*This shrine is {religion}* is shown if `religion` is set + + - *This is a Christian shrine* is shown if with religion=christian + - *This is a Buddhist shrine* is shown if with religion=buddhist + - *This is a Hindu shrine* is shown if with religion=hindu + - *This is a Jain shrine* is shown if with religion=jain + - *This is a Jewish shrine* is shown if with religion=jewish + - *This is an Islamic shrine* is shown if with religion=muslim + - *This is a Pagan shrine* is shown if with religion=pagan + - *This is a Shinto shrine* is shown if with religion=shinto + - *This is a Sikh shrine* is shown if with religion=sikh + - *This is a Taoist shrine* is shown if with religion=taoist + - *This is a Zoroastrian shrine* is shown if with religion=zoroastrian + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine +This tagrendering has labels +`shrine_questions` + +### denomination_christian + +The question is `What's the Christian denomination of the shrine?` +*The religious denomination is {denomination}* is shown if `denomination` is set + + - *The religious subdenomination is Catholic* is shown if with denomination=catholic + - *The religious subdenomination is Roman Catholic* is shown if with denomination=roman_catholic + - *The religious subdenomination is Orthodox* is shown if with denomination=orthodox + - *The religious subdenomination is Greek-Orthodox* is shown if with denomination=greek_orthodox + - *The religious subdenomination is Russian-Orthodox* is shown if with denomination=russian_orthodox + - *The religious subdenomination is Serbian Orthodox* is shown if with denomination=serbian_orthodox + - *The religious subdenomination is Protestant* is shown if with denomination=protestant + - *The religious subdenomination is Anglican* is shown if with denomination=anglican + - *The religious subdenomination is Adventist* is shown if with denomination=adventist + - *The religious subdenomination is evangelical* is shown if with denomination=evangelical + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine & religion=christian +This tagrendering has labels +`shrine_questions` + +### denomination_muslim + +The question is `What's the Muslim denomination of this shrine?` +*The religious subdenomination is {denomination}* is shown if `denomination` is set + + - *The religious subdenomination is Shia* is shown if with denomination=shia + - *The religious subdenomination is Sunni* is shown if with denomination=sunni + - *The religious subdenomination is Sufi* is shown if with denomination=sufi + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine & religion=muslim +This tagrendering has labels +`shrine_questions` + +### denomination_jewish + +The question is `What's the Jewish denomination of this shrine?` +*The religious subdenomination is {denomination}* is shown if `denomination` is set + + - *The religious subdenomination is Conservative* is shown if with denomination=conservative + - *The religious subdenomination is Orthodox* is shown if with denomination=orthodox + - *The religious subdenomination is Hasidic* is shown if with denomination=hasidic + - *The religious subdenomination is Reform* is shown if with denomination=reform + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine & religion=jewish +This tagrendering has labels +`shrine_questions` + +### denomination_other + +The question is `What's the denomination of this shrine?` +*The denomination of this shrine is {denomination}* is shown if `denomination` is set + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine & religion!=christian & religion!=muslim & religion!=jewish & religion~.+ +This tagrendering has labels +`shrine_questions` + ### leftover-questions _This tagrendering has no question and is thus read-only_ diff --git a/Docs/Layers/entrance.md b/Docs/Layers/entrance.md index 1e4d4f1e9f..ff9b13fb6f 100644 --- a/Docs/Layers/entrance.md +++ b/Docs/Layers/entrance.md @@ -8,7 +8,6 @@ A layer showing entrances and offering capabilities to survey some advanced data - This layer will automatically load [walls_and_buildings](./walls_and_buildings.md) into the layout as it depends on it: preset `an entrance` snaps to this layer (entrance.presets[0]) - This layer will automatically load [pedestrian_path](./pedestrian_path.md) into the layout as it depends on it: preset `an entrance` snaps to this layer (entrance.presets[0]) - This layer will automatically load [indoors](./indoors.md) into the layout as it depends on it: preset `an indoor door` snaps to this layer (entrance.presets[1]) - - This layer is needed as dependency for layer [walls_and_buildings](#walls_and_buildings) ## Table of contents @@ -24,6 +23,7 @@ A layer showing entrances and offering capabilities to survey some advanced data - [automatic_door](#automatic_door) - [width](#width) - [kerb-height](#kerb-height) + - [ref](#ref) - [leftover-questions](#leftover-questions) - [move-button](#move-button) - [lod](#lod) @@ -66,6 +66,7 @@ Elements must match **any** of the following expressions: | [automatic_door](https://wiki.openstreetmap.org/wiki/Key:automatic_door) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:automatic_door%3Dno) [motion](https://wiki.openstreetmap.org/wiki/Tag:automatic_door%3Dmotion) [floor](https://wiki.openstreetmap.org/wiki/Tag:automatic_door%3Dfloor) [button](https://wiki.openstreetmap.org/wiki/Tag:automatic_door%3Dbutton) [slowdown_button](https://wiki.openstreetmap.org/wiki/Tag:automatic_door%3Dslowdown_button) [continuous](https://wiki.openstreetmap.org/wiki/Tag:automatic_door%3Dcontinuous) [serviced_on_button_press](https://wiki.openstreetmap.org/wiki/Tag:automatic_door%3Dserviced_on_button_press) [serviced_on_request](https://wiki.openstreetmap.org/wiki/Tag:automatic_door%3Dserviced_on_request) | | [width](https://wiki.openstreetmap.org/wiki/Key:width) | [pfloat](../SpecialInputElements.md#pfloat) | | | [kerb:height](https://wiki.openstreetmap.org/wiki/Key:kerb:height) | [pnat](../SpecialInputElements.md#pnat) | [0](https://wiki.openstreetmap.org/wiki/Tag:kerb:height%3D0) | +| [ref](https://wiki.openstreetmap.org/wiki/Key:ref) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:ref%3D) | ### images This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images @@ -146,6 +147,13 @@ The question is `What is the height of this kerb?` - *This door does not have a kerb* is shown if with kerb:height=0 +### ref + +The question is `Does this door have a reference number?` +*This door has {ref} as reference number* is shown if `ref` is set + + - *No reference number* is shown if with ref= + ### leftover-questions _This tagrendering has no question and is thus read-only_ diff --git a/Docs/Layers/group_campsite.md b/Docs/Layers/group_campsite.md index 1a1cac99ea..76d9cc5cc2 100644 --- a/Docs/Layers/group_campsite.md +++ b/Docs/Layers/group_campsite.md @@ -34,12 +34,12 @@ Campsites ## Basic tags for this layer -Elements must match **all** of the following expressions: +Elements must match **any** of the following expressions: -0. tourism=camp_site -1. group_only=yes | scout=yes + - leisure=summer_camp + - tourism=camp_site & (group=yes | group_only=yes | scout=yes | scout=only) & group!=no & scout!=no -[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22group_only%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22scout%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22leisure%22%3D%22summer_camp%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22group%22%3D%22yes%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22group_only%22%3D%22yes%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22scout%22%3D%22yes%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22scout%22%3D%22only%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) ## Supported attributes diff --git a/Docs/Layers/group_hostel.md b/Docs/Layers/group_hostel.md index eea98200cc..1a55bd4d3f 100644 --- a/Docs/Layers/group_hostel.md +++ b/Docs/Layers/group_hostel.md @@ -50,9 +50,11 @@ The following options to create new points are included: Elements must match **all** of the following expressions: 0. tourism=hostel -1. group_only=yes | scout=yes +1. group=yes | group_only=yes | scout=yes | scout=only +2. group!=no +3. scout!=no -[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22tourism%22%3D%22hostel%22%5D%5B%22group_only%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22hostel%22%5D%5B%22scout%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22tourism%22%3D%22hostel%22%5D%5B%22group%22%3D%22yes%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22hostel%22%5D%5B%22group_only%22%3D%22yes%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22hostel%22%5D%5B%22scout%22%3D%22yes%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22hostel%22%5D%5B%22scout%22%3D%22only%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) ## Supported attributes diff --git a/Docs/Layers/indoors.md b/Docs/Layers/indoors.md index fb967d1967..3486a6475a 100644 --- a/Docs/Layers/indoors.md +++ b/Docs/Layers/indoors.md @@ -32,8 +32,8 @@ Basic indoor mapping: shows room outlines - [toilets-type](#toilets-type) - [toilets-changing-table](#toilets-changing-table) - [toilet-changing_table:location](#toilet-changing_tablelocation) - - [toilet-handwashing](#toilet-handwashing) - [toilet-has-paper](#toilet-has-paper) + - [toilet-handwashing](#toilet-handwashing) - [leftover-questions](#leftover-questions) - [move-button](#move-button) - [lod](#lod) @@ -80,8 +80,8 @@ Elements must match **any** of the following expressions: | [toilets:position](https://wiki.openstreetmap.org/wiki/Key:toilets:position) | Multiple choice | [seated](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Dseated) [urinal](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Durinal) [squat](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Dsquat) [seated;urinal](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Dseated;urinal) | | [changing_table](https://wiki.openstreetmap.org/wiki/Key:changing_table) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:changing_table%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:changing_table%3Dno) | | [changing_table:location](https://wiki.openstreetmap.org/wiki/Key:changing_table:location) | [string](../SpecialInputElements.md#string) | [female_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dfemale_toilet) [male_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dmale_toilet) [wheelchair_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dwheelchair_toilet) [dedicated_room](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Ddedicated_room) | -| [toilets:handwashing](https://wiki.openstreetmap.org/wiki/Key:toilets:handwashing) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dno) | | [toilets:paper_supplied](https://wiki.openstreetmap.org/wiki/Key:toilets:paper_supplied) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:paper_supplied%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:paper_supplied%3Dno) | +| [toilets:handwashing](https://wiki.openstreetmap.org/wiki/Key:toilets:handwashing) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dno) | ### images This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images @@ -290,17 +290,6 @@ This tagrendering is only visible in the popup if the following condition is met This tagrendering has labels `relevant-questions` -### toilet-handwashing - -The question is `Do these toilets have a sink to wash your hands?` - - - *These toilets have a sink to wash your hands* is shown if with toilets:handwashing=yes - - *These toilets don't have a sink to wash your hands* is shown if with toilets:handwashing=no - -This tagrendering is only visible in the popup if the following condition is met: amenity=toilets -This tagrendering has labels -`relevant-questions` - ### toilet-has-paper The question is `Does one have to bring their own toilet paper to this toilet?` @@ -312,6 +301,17 @@ This tagrendering is only visible in the popup if the following condition is met This tagrendering has labels `relevant-questions` +### toilet-handwashing + +The question is `Do these toilets have a sink to wash your hands?` + + - *These toilets have a sink to wash your hands* is shown if with toilets:handwashing=yes + - *These toilets don't have a sink to wash your hands* is shown if with toilets:handwashing=no + +This tagrendering is only visible in the popup if the following condition is met: amenity=toilets +This tagrendering has labels +`relevant-questions` + ### leftover-questions _This tagrendering has no question and is thus read-only_ diff --git a/Docs/Layers/scouting_group.md b/Docs/Layers/scouting_group.md index 187d018e9a..0543f165fa 100644 --- a/Docs/Layers/scouting_group.md +++ b/Docs/Layers/scouting_group.md @@ -17,6 +17,7 @@ A map showing scouting groups. - [phone](#phone) - [email](#email) - [website](#website) + - [start_date](#start_date) - [questions](#questions) - [mastodon](#mastodon) - [move-button](#move-button) @@ -51,6 +52,7 @@ Elements must match the expression ** [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | | | [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | | | [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | | +| [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) | [date](../SpecialInputElements.md#date) | | | [contact:mastodon](https://wiki.openstreetmap.org/wiki/Key:contact:mastodon) | [fediverse](../SpecialInputElements.md#fediverse) | | ### name @@ -94,6 +96,11 @@ The question is `What is the website of {title()}?` This tagrendering has labels `contact` +### start_date + +The question is `When was this group founded?` +*This group was founded at {start_date}* is shown if `start_date` is set + ### questions Show the questions block at this location _This tagrendering has no question and is thus read-only_ @@ -139,6 +146,10 @@ This tagrendering has labels | brand.15 | 香港女童軍總會 Hong Kong Girl Guides Association | brand=香港女童軍總會 | brand:en=Hong Kong Girl Guides Association | brand:wikidata=Q5894627 | brand:zh=香港女童軍總會 | brand:zh-Hans=香港女童军总会 | brand:zh-Hant=香港女童軍總會 | | brand.16 | 香港童軍總會 Scout Association of Hong Kong | brand=香港童軍總會 Scout Association of Hong Kong | brand:en=Scout Association of Hong Kong | brand:wikidata=Q1883585 | brand:zh=香港童軍總會 | brand:zh-Hans=香港童军总会 | brand:zh-Hant=香港童軍總會 | +| id | question | osmTags | fields | +-----|-----|-----|----- | +| brand_search.0 | Search for brand: {search} | | search (regex) | + This document is autogenerated from [assets/layers/scouting_group/scouting_group.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/layers/scouting_group/scouting_group.json) diff --git a/Docs/Layers/toilet.md b/Docs/Layers/toilet.md index 0a02a41967..2c0e8229fc 100644 --- a/Docs/Layers/toilet.md +++ b/Docs/Layers/toilet.md @@ -30,8 +30,10 @@ A layer showing (public) toilets - [menstrual_products_location](#menstrual_products_location) - [toilets-changing-table](#toilets-changing-table) - [toilet-changing_table:location](#toilet-changing_tablelocation) - - [toilet-handwashing](#toilet-handwashing) + - [toilet-supervised](#toilet-supervised) - [toilet-has-paper](#toilet-has-paper) + - [toilet-handwashing](#toilet-handwashing) + - [toilet-drying](#toilet-drying) - [description](#description) - [leftover-questions](#leftover-questions) - [move-button](#move-button) @@ -84,8 +86,10 @@ Elements must match the expression ** [toilets:menstrual_products:location](https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products:location) | [string](../SpecialInputElements.md#string) | [female_toilet](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dfemale_toilet) [male_toilet](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dmale_toilet) [wheelchair_toilet](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dwheelchair_toilet) | | [changing_table](https://wiki.openstreetmap.org/wiki/Key:changing_table) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:changing_table%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:changing_table%3Dno) | | [changing_table:location](https://wiki.openstreetmap.org/wiki/Key:changing_table:location) | [string](../SpecialInputElements.md#string) | [female_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dfemale_toilet) [male_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dmale_toilet) [wheelchair_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dwheelchair_toilet) [dedicated_room](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Ddedicated_room) | -| [toilets:handwashing](https://wiki.openstreetmap.org/wiki/Key:toilets:handwashing) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dno) | +| [supervised](https://wiki.openstreetmap.org/wiki/Key:supervised) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:supervised%3Dyes) [interval](https://wiki.openstreetmap.org/wiki/Tag:supervised%3Dinterval) [no](https://wiki.openstreetmap.org/wiki/Tag:supervised%3Dno) | | [toilets:paper_supplied](https://wiki.openstreetmap.org/wiki/Key:toilets:paper_supplied) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:paper_supplied%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:paper_supplied%3Dno) | +| [toilets:handwashing](https://wiki.openstreetmap.org/wiki/Key:toilets:handwashing) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dno) | +| [toilets:hands_drying](https://wiki.openstreetmap.org/wiki/Key:toilets:hands_drying) | Multiple choice | [electric_hand_dryer](https://wiki.openstreetmap.org/wiki/Tag:toilets:hands_drying%3Delectric_hand_dryer) [paper_towel](https://wiki.openstreetmap.org/wiki/Tag:toilets:hands_drying%3Dpaper_towel) [towel_cabinet](https://wiki.openstreetmap.org/wiki/Tag:toilets:hands_drying%3Dtowel_cabinet) [towel](https://wiki.openstreetmap.org/wiki/Tag:toilets:hands_drying%3Dtowel) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:hands_drying%3Dno) | | [description](https://wiki.openstreetmap.org/wiki/Key:description) | [text](../SpecialInputElements.md#text) | | ### images @@ -263,15 +267,13 @@ This tagrendering is only visible in the popup if the following condition is met This tagrendering has labels `relevant-questions` -### toilet-handwashing +### toilet-supervised -The question is `Do these toilets have a sink to wash your hands?` +The question is `Is this toilets supervised by a person?` - - *These toilets have a sink to wash your hands* is shown if with toilets:handwashing=yes - - *These toilets don't have a sink to wash your hands* is shown if with toilets:handwashing=no - -This tagrendering has labels -`relevant-questions` + - *There is a person supervising these toilets during (most of) the opening hours* is shown if with supervised=yes + - *There is a person supervising these toilets, but they are present only during certain times of the opening hours* is shown if with supervised=interval + - *These toilets are not supervised* is shown if with supervised=no ### toilet-has-paper @@ -283,6 +285,28 @@ The question is `Does one have to bring their own toilet paper to this toilet?` This tagrendering has labels `relevant-questions` +### toilet-handwashing + +The question is `Do these toilets have a sink to wash your hands?` + + - *These toilets have a sink to wash your hands* is shown if with toilets:handwashing=yes + - *These toilets don't have a sink to wash your hands* is shown if with toilets:handwashing=no + +This tagrendering has labels +`relevant-questions` + +### toilet-drying + +The question is `Do these toilets have a device to dry your hands?` + + - *Electric hand dryers are available for drying hands.* is shown if with toilets:hands_drying=electric_hand_dryer + - *Paper towels are available for drying hands.* is shown if with toilets:hands_drying=paper_towel + - *A towel roll cabinet is available for drying hands* is shown if with toilets:hands_drying=towel_cabinet + - *A fabric towel available to dry your hands.* is shown if with toilets:hands_drying=towel + - *There are no hand drying facilities available.* is shown if with toilets:hands_drying=no + +This tagrendering is only visible in the popup if the following condition is met: toilets:handwashing=yes + ### description The question is `Is there still some relevant info that the previous questions did not cover? Feel free to add it here.` diff --git a/Docs/Layers/vending_machine.md b/Docs/Layers/vending_machine.md index 67377891d0..7e1a349361 100644 --- a/Docs/Layers/vending_machine.md +++ b/Docs/Layers/vending_machine.md @@ -249,21 +249,21 @@ This tagrendering has labels ### charge_bicycle_tube The question is `How much does a a bicycle tube cost?` -*a bicycle tube costs {charge:bicycle_tube}* is shown if `charge` is set +*a bicycle tube costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*bicycle_tube.*)$ ### charge_bicycle_light The question is `How much does a bicycle light cost?` -*bicycle light costs {charge:bicycle_light}* is shown if `charge` is set +*bicycle light costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*bicycle_light.*)$ ### charge_condom The question is `How much does a a condom cost?` -*a condom costs {charge:condom}* is shown if `charge` is set +*a condom costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*condom.*)$ diff --git a/Docs/Layers/vending_machine_bicycle.md b/Docs/Layers/vending_machine_bicycle.md index de33e9cb85..d7bd3b22de 100644 --- a/Docs/Layers/vending_machine_bicycle.md +++ b/Docs/Layers/vending_machine_bicycle.md @@ -242,21 +242,21 @@ This tagrendering has labels ### charge_bicycle_tube The question is `How much does a a bicycle tube cost?` -*a bicycle tube costs {charge:bicycle_tube}* is shown if `charge` is set +*a bicycle tube costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*bicycle_tube.*)$ ### charge_bicycle_light The question is `How much does a bicycle light cost?` -*bicycle light costs {charge:bicycle_light}* is shown if `charge` is set +*bicycle light costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*bicycle_light.*)$ ### charge_condom The question is `How much does a a condom cost?` -*a condom costs {charge:condom}* is shown if `charge` is set +*a condom costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*condom.*)$ diff --git a/Docs/Layers/walls_and_buildings.md b/Docs/Layers/walls_and_buildings.md index 09e20f1e59..3fcc5496c7 100644 --- a/Docs/Layers/walls_and_buildings.md +++ b/Docs/Layers/walls_and_buildings.md @@ -9,7 +9,6 @@ Special builtin layer providing all walls and buildings. This layer is useful in - This layer is not visible by default and the visibility cannot be toggled, effectively resulting in a fully hidden layer. This can be useful, e.g. to calculate some metatags. If you want to render this layer (e.g. for debugging), enable it by setting the URL-parameter layer-=true - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - This layer will automatically load [entrance](./entrance.md) into the layout as it depends on it: a calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _entrance_properties) - This layer is needed as dependency for layer [advertising](#advertising) - This layer is needed as dependency for layer [artwork](#artwork) - This layer is needed as dependency for layer [clock](#clock) @@ -18,6 +17,7 @@ Special builtin layer providing all walls and buildings. This layer is useful in - This layer is needed as dependency for layer [ghostsign](#ghostsign) - This layer is needed as dependency for layer [postboxes](#postboxes) - This layer is needed as dependency for layer [surveillance_camera](#surveillance_camera) + - This layer is needed as dependency for layer [wayside_shrine](#wayside_shrine) - This layer is needed as dependency for layer [facadegardens](#facadegardens) - This layer is needed as dependency for layer [onwheels_entrance_data](#onwheels_entrance_data) - This layer is needed as dependency for layer [parking_spaces_disabled](#parking_spaces_disabled) @@ -27,10 +27,6 @@ Special builtin layer providing all walls and buildings. This layer is useful in 1. [Themes using this layer](#themes-using-this-layer) 2. [Basic tags for this layer](#basic-tags-for-this-layer) 3. [Supported attributes](#supported-attributes) - - [entrance_info](#entrance_info) - - [Entrances](#entrances) - - [biggest_width](#biggest_width) - - [leftover-questions](#leftover-questions) - [lod](#lod) ## Themes using this layer @@ -50,6 +46,7 @@ Special builtin layer providing all walls and buildings. This layer is useful in - [stations](https://mapcomplete.org/stations) - [surveillance](https://mapcomplete.org/surveillance) - [walls_and_buildings](https://mapcomplete.org/walls_and_buildings) + - [wayside_shrines](https://mapcomplete.org/wayside_shrines) ## Basic tags for this layer @@ -62,26 +59,6 @@ Elements must match **any** of the following expressions: ## Supported attributes -### entrance_info - -_This tagrendering has no question and is thus read-only_ -*

Entrances

This building has {_entrances_count} entrances:{multi(_entrance_properties_with_width,An entrance of &LBRACEcanonical&LPARENSwidth&RPARENS&RBRACE,)}{_entrances_count_without_width_count} entrances don't have width information yet* - - - *No entrance has been marked* is shown if with _entrances_count=0 - - *None of the {_entrance_count} entrances have width information yet* is shown if with _entrances_count_without_width=_entrances_count - -### biggest_width - -_This tagrendering has no question and is thus read-only_ -*The entrance with the biggest width is {canonical(_biggest_width)} wide* - -This tagrendering is only visible in the popup if the following condition is met: _biggest_width_id~.+ - -### leftover-questions - -_This tagrendering has no question and is thus read-only_ -*{questions( ,)}* - ### lod _This tagrendering has no question and is thus read-only_ diff --git a/Docs/Layers/wayside_shrine.md b/Docs/Layers/wayside_shrine.md new file mode 100644 index 0000000000..8fa9117819 --- /dev/null +++ b/Docs/Layers/wayside_shrine.md @@ -0,0 +1,200 @@ +[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources) + +# wayside_shrine + +Shrines are religious places that are dedicated to specific deities, saints and other figures of religious importance. Typically, the contain religious depictions and people frequently leave offerings at those places. Wayside shrines are small shrines that can be found next to a road or pathway and are frequented by travellers passing by. + + - This layer is shown at zoomlevel **12** and higher + - This layer will automatically load [walls_and_buildings](./walls_and_buildings.md) into the layout as it depends on it: preset `a wayside shrine mounted on a wall` snaps to this layer (wayside_shrine.presets[1]) + +## Table of contents + +1. [Themes using this layer](#themes-using-this-layer) +2. [Presets](#presets) +3. [Basic tags for this layer](#basic-tags-for-this-layer) +4. [Supported attributes](#supported-attributes) + - [images](#images) + - [shrine_name](#shrine_name) + - [religion](#religion) + - [denomination_christian](#denomination_christian) + - [denomination_muslim](#denomination_muslim) + - [denomination_jewish](#denomination_jewish) + - [denomination_other](#denomination_other) + - [repeated](#repeated) + - [single_level](#single_level) + - [leftover-questions](#leftover-questions) + - [move-button](#move-button) + - [delete-button](#delete-button) + - [lod](#lod) + +## Themes using this layer + + - [personal](https://mapcomplete.org/personal) + - [wayside_shrines](https://mapcomplete.org/wayside_shrines) + +## Presets + +The following options to create new points are included: + + - **a wayside shrine** which has the following tags:historic=wayside_shrine + - **a wayside shrine mounted on a wall** which has the following tags:historic=wayside_shrine (snaps to layers `walls_and_buildings`) + +## Basic tags for this layer + +Elements must match the expression **historic=wayside_shrine** + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22historic%22%3D%22wayside_shrine%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + +## Supported attributes + +**Warning:**,this quick overview is incomplete, + +| attribute | type | values which are supported by this layer | +-----|-----|----- | +| [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [religion](https://wiki.openstreetmap.org/wiki/Key:religion) | [string](../SpecialInputElements.md#string) | [christian](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dchristian) [buddhist](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dbuddhist) [hindu](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dhindu) [jain](https://wiki.openstreetmap.org/wiki/Tag:religion%3Djain) [jewish](https://wiki.openstreetmap.org/wiki/Tag:religion%3Djewish) [muslim](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dmuslim) [pagan](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dpagan) [shinto](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dshinto) [sikh](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dsikh) [taoist](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dtaoist) [zoroastrian](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dzoroastrian) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [catholic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dcatholic) [roman_catholic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Droman_catholic) [orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dorthodox) [greek_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dgreek_orthodox) [russian_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Drussian_orthodox) [serbian_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dserbian_orthodox) [protestant](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dprotestant) [anglican](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Danglican) [adventist](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dadventist) [evangelical](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Devangelical) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [shia](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dshia) [sunni](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dsunni) [sufi](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dsufi) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [conservative](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dconservative) [orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dorthodox) [hasidic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dhasidic) [reform](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dreform) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | | +| [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1) | + +### images +This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images +_This tagrendering has no question and is thus read-only_ +*{image_carousel()}{image_upload()}* + +### shrine_name + +The question is `What's the name of this shrine?` +*The name of this shrine is {name}* is shown if `name` is set + + - *This shrine does not have a name* is shown if with noname=yes + +This tagrendering has labels +`shrine_questions` + +### religion + +The question is `To which religion is this shrine dedicated?` +*This shrine is {religion}* is shown if `religion` is set + + - *This is a Christian shrine* is shown if with religion=christian + - *This is a Buddhist shrine* is shown if with religion=buddhist + - *This is a Hindu shrine* is shown if with religion=hindu + - *This is a Jain shrine* is shown if with religion=jain + - *This is a Jewish shrine* is shown if with religion=jewish + - *This is an Islamic shrine* is shown if with religion=muslim + - *This is a Pagan shrine* is shown if with religion=pagan + - *This is a Shinto shrine* is shown if with religion=shinto + - *This is a Sikh shrine* is shown if with religion=sikh + - *This is a Taoist shrine* is shown if with religion=taoist + - *This is a Zoroastrian shrine* is shown if with religion=zoroastrian + +This tagrendering has labels +`shrine_questions` + +### denomination_christian + +The question is `What's the Christian denomination of the shrine?` +*The religious denomination is {denomination}* is shown if `denomination` is set + + - *The religious subdenomination is Catholic* is shown if with denomination=catholic + - *The religious subdenomination is Roman Catholic* is shown if with denomination=roman_catholic + - *The religious subdenomination is Orthodox* is shown if with denomination=orthodox + - *The religious subdenomination is Greek-Orthodox* is shown if with denomination=greek_orthodox + - *The religious subdenomination is Russian-Orthodox* is shown if with denomination=russian_orthodox + - *The religious subdenomination is Serbian Orthodox* is shown if with denomination=serbian_orthodox + - *The religious subdenomination is Protestant* is shown if with denomination=protestant + - *The religious subdenomination is Anglican* is shown if with denomination=anglican + - *The religious subdenomination is Adventist* is shown if with denomination=adventist + - *The religious subdenomination is evangelical* is shown if with denomination=evangelical + +This tagrendering is only visible in the popup if the following condition is met: religion=christian +This tagrendering has labels +`shrine_questions` + +### denomination_muslim + +The question is `What's the Muslim denomination of this shrine?` +*The religious subdenomination is {denomination}* is shown if `denomination` is set + + - *The religious subdenomination is Shia* is shown if with denomination=shia + - *The religious subdenomination is Sunni* is shown if with denomination=sunni + - *The religious subdenomination is Sufi* is shown if with denomination=sufi + +This tagrendering is only visible in the popup if the following condition is met: religion=muslim +This tagrendering has labels +`shrine_questions` + +### denomination_jewish + +The question is `What's the Jewish denomination of this shrine?` +*The religious subdenomination is {denomination}* is shown if `denomination` is set + + - *The religious subdenomination is Conservative* is shown if with denomination=conservative + - *The religious subdenomination is Orthodox* is shown if with denomination=orthodox + - *The religious subdenomination is Hasidic* is shown if with denomination=hasidic + - *The religious subdenomination is Reform* is shown if with denomination=reform + +This tagrendering is only visible in the popup if the following condition is met: religion=jewish +This tagrendering has labels +`shrine_questions` + +### denomination_other + +The question is `What's the denomination of this shrine?` +*The denomination of this shrine is {denomination}* is shown if `denomination` is set + +This tagrendering is only visible in the popup if the following condition is met: religion!=christian & religion!=muslim & religion!=jewish & religion~.+ +This tagrendering has labels +`shrine_questions` + +### repeated + +_This tagrendering has no question and is thus read-only_ +*Multiple, identical objects can be found on floors {repeat_on}.* + +This tagrendering is only visible in the popup if the following condition is met: repeat_on~.+ +This tagrendering has labels +`level` + +### single_level + +The question is `On what level is this feature located?` +*Located on the {level}th floor* is shown if `level` is set + + - *Located underground* is shown if with location=underground. _This option cannot be chosen as answer_ + - *Located on the ground floor* is shown if with level=0 + - *Located on the ground floor* is shown if with level=. _This option cannot be chosen as answer_ + - *Located on the first floor* is shown if with level=1 + - *Located on the first basement level* is shown if with level=-1 + +This tagrendering has labels +`level` + +### leftover-questions + +_This tagrendering has no question and is thus read-only_ +*{questions( ,)}* + +### move-button + +_This tagrendering has no question and is thus read-only_ +*{move_button()}* + +### delete-button + +_This tagrendering has no question and is thus read-only_ +*{delete_button()}* + +### lod + +_This tagrendering has no question and is thus read-only_ +*{linked_data_from_website()}* + +This tagrendering has labels +`added_by_default` + + +This document is autogenerated from [assets/layers/wayside_shrine/wayside_shrine.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/layers/wayside_shrine/wayside_shrine.json) diff --git a/Docs/SpecialRenderings.md b/Docs/SpecialRenderings.md index 5652d849f0..7de46df1d7 100644 --- a/Docs/SpecialRenderings.md +++ b/Docs/SpecialRenderings.md @@ -645,9 +645,14 @@ A component to set the language of the user interface Show a login button +| name | default | description | +-----|-----|----- | +| force | _undefined_ | Always show this button, even if logged in | +| message | _undefined_ | Message to display on the button | + #### Example usage of login_button -`{login_button()}` +`{login_button(,)}` ### logout diff --git a/Docs/TagInfo/mapcomplete_artwork.json b/Docs/TagInfo/mapcomplete_artwork.json index 094e14b74f..fb43bdd0e1 100644 --- a/Docs/TagInfo/mapcomplete_artwork.json +++ b/Docs/TagInfo/mapcomplete_artwork.json @@ -404,6 +404,185 @@ "description": "Layer 'Artworks' shows historic= & not:historic=memorial with a fixed text, namely 'This bench is a not a memorial for someone or something' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if (historic=memorial | inscription~.+ | memorial=bench | tourism=artwork) & amenity=bench)", "value": "memorial" }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic=wayside_shrine with a fixed text, namely 'This artwork acts as a wayside shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork')", + "value": "wayside_shrine" + }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic= with a fixed text, namely 'This artwork does not act as a wayside shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') Picking this answer will delete the key historic.", + "value": "" + }, + { + "key": "name", + "description": "Layer 'Artworks' shows and asks freeform values for key 'name' (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)" + }, + { + "key": "noname", + "description": "Layer 'Artworks' shows noname=yes with a fixed text, namely 'This shrine does not have a name' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)", + "value": "yes" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows and asks freeform values for key 'religion' (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=christian with a fixed text, namely 'This is a Christian shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)", + "value": "christian" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=buddhist with a fixed text, namely 'This is a Buddhist shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)", + "value": "buddhist" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=hindu with a fixed text, namely 'This is a Hindu shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)", + "value": "hindu" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=jain with a fixed text, namely 'This is a Jain shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)", + "value": "jain" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=jewish with a fixed text, namely 'This is a Jewish shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)", + "value": "jewish" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=muslim with a fixed text, namely 'This is an Islamic shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)", + "value": "muslim" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=pagan with a fixed text, namely 'This is a Pagan shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)", + "value": "pagan" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=shinto with a fixed text, namely 'This is a Shinto shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)", + "value": "shinto" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=sikh with a fixed text, namely 'This is a Sikh shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)", + "value": "sikh" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=taoist with a fixed text, namely 'This is a Taoist shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)", + "value": "taoist" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=zoroastrian with a fixed text, namely 'This is a Zoroastrian shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if historic=wayside_shrine)", + "value": "zoroastrian" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=christian & historic=wayside_shrine)" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=catholic with a fixed text, namely 'The religious subdenomination is Catholic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "catholic" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=roman_catholic with a fixed text, namely 'The religious subdenomination is Roman Catholic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "roman_catholic" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=orthodox with a fixed text, namely 'The religious subdenomination is Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=greek_orthodox with a fixed text, namely 'The religious subdenomination is Greek-Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "greek_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=russian_orthodox with a fixed text, namely 'The religious subdenomination is Russian-Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "russian_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=serbian_orthodox with a fixed text, namely 'The religious subdenomination is Serbian Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "serbian_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=protestant with a fixed text, namely 'The religious subdenomination is Protestant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "protestant" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=anglican with a fixed text, namely 'The religious subdenomination is Anglican' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "anglican" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=adventist with a fixed text, namely 'The religious subdenomination is Adventist' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "adventist" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=evangelical with a fixed text, namely 'The religious subdenomination is evangelical' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "evangelical" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=muslim & historic=wayside_shrine)" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=shia with a fixed text, namely 'The religious subdenomination is Shia' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=muslim & historic=wayside_shrine)", + "value": "shia" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=sunni with a fixed text, namely 'The religious subdenomination is Sunni' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=muslim & historic=wayside_shrine)", + "value": "sunni" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=sufi with a fixed text, namely 'The religious subdenomination is Sufi' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=muslim & historic=wayside_shrine)", + "value": "sufi" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=jewish & historic=wayside_shrine)" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=conservative with a fixed text, namely 'The religious subdenomination is Conservative' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "conservative" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=orthodox with a fixed text, namely 'The religious subdenomination is Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=hasidic with a fixed text, namely 'The religious subdenomination is Hasidic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "hasidic" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=reform with a fixed text, namely 'The religious subdenomination is Reform' and allows to pick this as a default answer (in the mapcomplete.org theme 'Artwork') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "reform" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Artwork') (This is only shown if religion!=christian & religion!=muslim & religion!=jewish & religion~.+ & historic=wayside_shrine)" + }, { "key": "memorial", "description": "The MapComplete theme Artwork has a layer Memorials showing features with this tag" diff --git a/Docs/TagInfo/mapcomplete_climbing.json b/Docs/TagInfo/mapcomplete_climbing.json index e37d2a451e..fd9c38cd33 100644 --- a/Docs/TagInfo/mapcomplete_climbing.json +++ b/Docs/TagInfo/mapcomplete_climbing.json @@ -2432,13 +2432,18 @@ "value": "dedicated_room" }, { - "key": "toilets:handwashing", - "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots')", + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=yes with a fixed text, namely 'There is a person supervising these toilets during (most of) the opening hours' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (access=yes | access=))", "value": "yes" }, { - "key": "toilets:handwashing", - "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots')", + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=interval with a fixed text, namely 'There is a person supervising these toilets, but they are present only during certain times of the opening hours' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (access=yes | access=))", + "value": "interval" + }, + { + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=no with a fixed text, namely 'These toilets are not supervised' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (access=yes | access=))", "value": "no" }, { @@ -2451,6 +2456,41 @@ "description": "Layer 'Toilets' shows toilets:paper_supplied=no with a fixed text, namely 'You have to bring your own toilet paper to this toilet' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if toilets:position!=urinal)", "value": "no" }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots')", + "value": "yes" + }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots')", + "value": "no" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=electric_hand_dryer with a fixed text, namely 'Electric hand dryers are available for drying hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if toilets:handwashing=yes)", + "value": "electric_hand_dryer" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=paper_towel with a fixed text, namely 'Paper towels are available for drying hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if toilets:handwashing=yes)", + "value": "paper_towel" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=towel_cabinet with a fixed text, namely 'A towel roll cabinet is available for drying hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if toilets:handwashing=yes)", + "value": "towel_cabinet" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=towel with a fixed text, namely 'A fabric towel available to dry your hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if toilets:handwashing=yes)", + "value": "towel" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=no with a fixed text, namely 'There are no hand drying facilities available.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if toilets:handwashing=yes)", + "value": "no" + }, { "key": "description", "description": "Layer 'Toilets' shows and asks freeform values for key 'description' (in the mapcomplete.org theme 'Climbing gyms, clubs and spots')" diff --git a/Docs/TagInfo/mapcomplete_ghostsigns.json b/Docs/TagInfo/mapcomplete_ghostsigns.json index 48a776f290..edb3e903c0 100644 --- a/Docs/TagInfo/mapcomplete_ghostsigns.json +++ b/Docs/TagInfo/mapcomplete_ghostsigns.json @@ -797,6 +797,185 @@ "key": "not:historic", "description": "Layer 'Artworks' shows historic= & not:historic=memorial with a fixed text, namely 'This bench is a not a memorial for someone or something' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if (historic=memorial | inscription~.+ | memorial=bench | tourism=artwork) & amenity=bench)", "value": "memorial" + }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic=wayside_shrine with a fixed text, namely 'This artwork acts as a wayside shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs')", + "value": "wayside_shrine" + }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic= with a fixed text, namely 'This artwork does not act as a wayside shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') Picking this answer will delete the key historic.", + "value": "" + }, + { + "key": "name", + "description": "Layer 'Artworks' shows and asks freeform values for key 'name' (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)" + }, + { + "key": "noname", + "description": "Layer 'Artworks' shows noname=yes with a fixed text, namely 'This shrine does not have a name' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)", + "value": "yes" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows and asks freeform values for key 'religion' (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=christian with a fixed text, namely 'This is a Christian shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)", + "value": "christian" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=buddhist with a fixed text, namely 'This is a Buddhist shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)", + "value": "buddhist" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=hindu with a fixed text, namely 'This is a Hindu shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)", + "value": "hindu" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=jain with a fixed text, namely 'This is a Jain shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)", + "value": "jain" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=jewish with a fixed text, namely 'This is a Jewish shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)", + "value": "jewish" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=muslim with a fixed text, namely 'This is an Islamic shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)", + "value": "muslim" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=pagan with a fixed text, namely 'This is a Pagan shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)", + "value": "pagan" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=shinto with a fixed text, namely 'This is a Shinto shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)", + "value": "shinto" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=sikh with a fixed text, namely 'This is a Sikh shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)", + "value": "sikh" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=taoist with a fixed text, namely 'This is a Taoist shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)", + "value": "taoist" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=zoroastrian with a fixed text, namely 'This is a Zoroastrian shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if historic=wayside_shrine)", + "value": "zoroastrian" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=christian & historic=wayside_shrine)" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=catholic with a fixed text, namely 'The religious subdenomination is Catholic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "catholic" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=roman_catholic with a fixed text, namely 'The religious subdenomination is Roman Catholic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "roman_catholic" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=orthodox with a fixed text, namely 'The religious subdenomination is Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=greek_orthodox with a fixed text, namely 'The religious subdenomination is Greek-Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "greek_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=russian_orthodox with a fixed text, namely 'The religious subdenomination is Russian-Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "russian_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=serbian_orthodox with a fixed text, namely 'The religious subdenomination is Serbian Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "serbian_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=protestant with a fixed text, namely 'The religious subdenomination is Protestant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "protestant" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=anglican with a fixed text, namely 'The religious subdenomination is Anglican' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "anglican" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=adventist with a fixed text, namely 'The religious subdenomination is Adventist' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "adventist" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=evangelical with a fixed text, namely 'The religious subdenomination is evangelical' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "evangelical" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=muslim & historic=wayside_shrine)" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=shia with a fixed text, namely 'The religious subdenomination is Shia' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=muslim & historic=wayside_shrine)", + "value": "shia" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=sunni with a fixed text, namely 'The religious subdenomination is Sunni' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=muslim & historic=wayside_shrine)", + "value": "sunni" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=sufi with a fixed text, namely 'The religious subdenomination is Sufi' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=muslim & historic=wayside_shrine)", + "value": "sufi" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=jewish & historic=wayside_shrine)" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=conservative with a fixed text, namely 'The religious subdenomination is Conservative' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "conservative" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=orthodox with a fixed text, namely 'The religious subdenomination is Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=hasidic with a fixed text, namely 'The religious subdenomination is Hasidic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "hasidic" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=reform with a fixed text, namely 'The religious subdenomination is Reform' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "reform" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Ghost Signs') (This is only shown if religion!=christian & religion!=muslim & religion!=jewish & religion~.+ & historic=wayside_shrine)" } ] } \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_indoors.json b/Docs/TagInfo/mapcomplete_indoors.json index 10532eb40c..20ffc06735 100644 --- a/Docs/TagInfo/mapcomplete_indoors.json +++ b/Docs/TagInfo/mapcomplete_indoors.json @@ -389,16 +389,6 @@ "description": "Layer 'Indoors' shows changing_table:location=dedicated_room with a fixed text, namely 'A changing table is in a dedicated room' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets & changing_table=yes)", "value": "dedicated_room" }, - { - "key": "toilets:handwashing", - "description": "Layer 'Indoors' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)", - "value": "yes" - }, - { - "key": "toilets:handwashing", - "description": "Layer 'Indoors' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)", - "value": "no" - }, { "key": "toilets:paper_supplied", "description": "Layer 'Indoors' shows toilets:paper_supplied=yes with a fixed text, namely 'This toilet is equipped with toilet paper' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets & toilets:position!=urinal)", @@ -409,6 +399,16 @@ "description": "Layer 'Indoors' shows toilets:paper_supplied=no with a fixed text, namely 'You have to bring your own toilet paper to this toilet' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets & toilets:position!=urinal)", "value": "no" }, + { + "key": "toilets:handwashing", + "description": "Layer 'Indoors' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)", + "value": "yes" + }, + { + "key": "toilets:handwashing", + "description": "Layer 'Indoors' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)", + "value": "no" + }, { "key": "highway", "description": "The MapComplete theme Indoors has a layer Pedestrian paths showing features with this tag", @@ -801,6 +801,15 @@ "key": "kerb:height", "description": "Layer 'Entrance' shows kerb:height=0 with a fixed text, namely 'This door does not have a kerb' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors')", "value": "0" + }, + { + "key": "ref", + "description": "Layer 'Entrance' shows and asks freeform values for key 'ref' (in the mapcomplete.org theme 'Indoors')" + }, + { + "key": "ref", + "description": "Layer 'Entrance' shows ref= with a fixed text, namely 'No reference number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') Picking this answer will delete the key ref.", + "value": "" } ] } \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_memorials.json b/Docs/TagInfo/mapcomplete_memorials.json index bfdf7f45db..8371dbaa2d 100644 --- a/Docs/TagInfo/mapcomplete_memorials.json +++ b/Docs/TagInfo/mapcomplete_memorials.json @@ -1074,6 +1074,185 @@ "key": "not:historic", "description": "Layer 'Artworks' shows historic= & not:historic=memorial with a fixed text, namely 'This bench is a not a memorial for someone or something' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if (historic=memorial | inscription~.+ | memorial=bench | tourism=artwork) & amenity=bench)", "value": "memorial" + }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic=wayside_shrine with a fixed text, namely 'This artwork acts as a wayside shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials')", + "value": "wayside_shrine" + }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic= with a fixed text, namely 'This artwork does not act as a wayside shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') Picking this answer will delete the key historic.", + "value": "" + }, + { + "key": "name", + "description": "Layer 'Artworks' shows and asks freeform values for key 'name' (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)" + }, + { + "key": "noname", + "description": "Layer 'Artworks' shows noname=yes with a fixed text, namely 'This shrine does not have a name' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)", + "value": "yes" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows and asks freeform values for key 'religion' (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=christian with a fixed text, namely 'This is a Christian shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)", + "value": "christian" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=buddhist with a fixed text, namely 'This is a Buddhist shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)", + "value": "buddhist" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=hindu with a fixed text, namely 'This is a Hindu shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)", + "value": "hindu" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=jain with a fixed text, namely 'This is a Jain shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)", + "value": "jain" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=jewish with a fixed text, namely 'This is a Jewish shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)", + "value": "jewish" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=muslim with a fixed text, namely 'This is an Islamic shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)", + "value": "muslim" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=pagan with a fixed text, namely 'This is a Pagan shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)", + "value": "pagan" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=shinto with a fixed text, namely 'This is a Shinto shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)", + "value": "shinto" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=sikh with a fixed text, namely 'This is a Sikh shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)", + "value": "sikh" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=taoist with a fixed text, namely 'This is a Taoist shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)", + "value": "taoist" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=zoroastrian with a fixed text, namely 'This is a Zoroastrian shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if historic=wayside_shrine)", + "value": "zoroastrian" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=christian & historic=wayside_shrine)" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=catholic with a fixed text, namely 'The religious subdenomination is Catholic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "catholic" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=roman_catholic with a fixed text, namely 'The religious subdenomination is Roman Catholic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "roman_catholic" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=orthodox with a fixed text, namely 'The religious subdenomination is Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=greek_orthodox with a fixed text, namely 'The religious subdenomination is Greek-Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "greek_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=russian_orthodox with a fixed text, namely 'The religious subdenomination is Russian-Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "russian_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=serbian_orthodox with a fixed text, namely 'The religious subdenomination is Serbian Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "serbian_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=protestant with a fixed text, namely 'The religious subdenomination is Protestant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "protestant" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=anglican with a fixed text, namely 'The religious subdenomination is Anglican' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "anglican" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=adventist with a fixed text, namely 'The religious subdenomination is Adventist' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "adventist" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=evangelical with a fixed text, namely 'The religious subdenomination is evangelical' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "evangelical" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=muslim & historic=wayside_shrine)" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=shia with a fixed text, namely 'The religious subdenomination is Shia' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=muslim & historic=wayside_shrine)", + "value": "shia" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=sunni with a fixed text, namely 'The religious subdenomination is Sunni' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=muslim & historic=wayside_shrine)", + "value": "sunni" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=sufi with a fixed text, namely 'The religious subdenomination is Sufi' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=muslim & historic=wayside_shrine)", + "value": "sufi" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=jewish & historic=wayside_shrine)" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=conservative with a fixed text, namely 'The religious subdenomination is Conservative' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "conservative" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=orthodox with a fixed text, namely 'The religious subdenomination is Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=hasidic with a fixed text, namely 'The religious subdenomination is Hasidic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "hasidic" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=reform with a fixed text, namely 'The religious subdenomination is Reform' and allows to pick this as a default answer (in the mapcomplete.org theme 'Memorials') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "reform" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Memorials') (This is only shown if religion!=christian & religion!=muslim & religion!=jewish & religion~.+ & historic=wayside_shrine)" } ] } \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_nature.json b/Docs/TagInfo/mapcomplete_nature.json index 6988c56dac..a2e9291de9 100644 --- a/Docs/TagInfo/mapcomplete_nature.json +++ b/Docs/TagInfo/mapcomplete_nature.json @@ -1360,13 +1360,18 @@ "value": "dedicated_room" }, { - "key": "toilets:handwashing", - "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=yes with a fixed text, namely 'There is a person supervising these toilets during (most of) the opening hours' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if (access=yes | access=))", "value": "yes" }, { - "key": "toilets:handwashing", - "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=interval with a fixed text, namely 'There is a person supervising these toilets, but they are present only during certain times of the opening hours' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if (access=yes | access=))", + "value": "interval" + }, + { + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=no with a fixed text, namely 'These toilets are not supervised' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if (access=yes | access=))", "value": "no" }, { @@ -1379,6 +1384,41 @@ "description": "Layer 'Toilets' shows toilets:paper_supplied=no with a fixed text, namely 'You have to bring your own toilet paper to this toilet' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if toilets:position!=urinal)", "value": "no" }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "value": "yes" + }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "value": "no" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=electric_hand_dryer with a fixed text, namely 'Electric hand dryers are available for drying hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if toilets:handwashing=yes)", + "value": "electric_hand_dryer" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=paper_towel with a fixed text, namely 'Paper towels are available for drying hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if toilets:handwashing=yes)", + "value": "paper_towel" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=towel_cabinet with a fixed text, namely 'A towel roll cabinet is available for drying hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if toilets:handwashing=yes)", + "value": "towel_cabinet" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=towel with a fixed text, namely 'A fabric towel available to dry your hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if toilets:handwashing=yes)", + "value": "towel" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=no with a fixed text, namely 'There are no hand drying facilities available.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if toilets:handwashing=yes)", + "value": "no" + }, { "key": "description", "description": "Layer 'Toilets' shows and asks freeform values for key 'description' (in the mapcomplete.org theme 'Into nature')" diff --git a/Docs/TagInfo/mapcomplete_onwheels.json b/Docs/TagInfo/mapcomplete_onwheels.json index b6dbfd16ac..38bdb30e45 100644 --- a/Docs/TagInfo/mapcomplete_onwheels.json +++ b/Docs/TagInfo/mapcomplete_onwheels.json @@ -557,6 +557,15 @@ "description": "Layer 'Entrance' shows kerb:height=0 with a fixed text, namely 'This door does not have a kerb' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", "value": "0" }, + { + "key": "ref", + "description": "Layer 'Entrance' shows and asks freeform values for key 'ref' (in the mapcomplete.org theme 'OnWheels')" + }, + { + "key": "ref", + "description": "Layer 'Entrance' shows ref= with a fixed text, namely 'No reference number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') Picking this answer will delete the key ref.", + "value": "" + }, { "key": "amenity", "description": "The MapComplete theme OnWheels has a layer Restaurants and fast food showing features with this tag", @@ -3201,13 +3210,18 @@ "value": "dedicated_room" }, { - "key": "toilets:handwashing", - "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=yes with a fixed text, namely 'There is a person supervising these toilets during (most of) the opening hours' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if (access=yes | access=))", "value": "yes" }, { - "key": "toilets:handwashing", - "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=interval with a fixed text, namely 'There is a person supervising these toilets, but they are present only during certain times of the opening hours' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if (access=yes | access=))", + "value": "interval" + }, + { + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=no with a fixed text, namely 'These toilets are not supervised' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if (access=yes | access=))", "value": "no" }, { @@ -3220,6 +3234,41 @@ "description": "Layer 'Toilets' shows toilets:paper_supplied=no with a fixed text, namely 'You have to bring your own toilet paper to this toilet' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if toilets:position!=urinal)", "value": "no" }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", + "value": "yes" + }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", + "value": "no" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=electric_hand_dryer with a fixed text, namely 'Electric hand dryers are available for drying hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if toilets:handwashing=yes)", + "value": "electric_hand_dryer" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=paper_towel with a fixed text, namely 'Paper towels are available for drying hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if toilets:handwashing=yes)", + "value": "paper_towel" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=towel_cabinet with a fixed text, namely 'A towel roll cabinet is available for drying hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if toilets:handwashing=yes)", + "value": "towel_cabinet" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=towel with a fixed text, namely 'A fabric towel available to dry your hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if toilets:handwashing=yes)", + "value": "towel" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=no with a fixed text, namely 'There are no hand drying facilities available.' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if toilets:handwashing=yes)", + "value": "no" + }, { "key": "description", "description": "Layer 'Toilets' shows and asks freeform values for key 'description' (in the mapcomplete.org theme 'OnWheels')" diff --git a/Docs/TagInfo/mapcomplete_playgrounds.json b/Docs/TagInfo/mapcomplete_playgrounds.json index 1425703e87..0d5ab8556c 100644 --- a/Docs/TagInfo/mapcomplete_playgrounds.json +++ b/Docs/TagInfo/mapcomplete_playgrounds.json @@ -1113,13 +1113,18 @@ "value": "dedicated_room" }, { - "key": "toilets:handwashing", - "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=yes with a fixed text, namely 'There is a person supervising these toilets during (most of) the opening hours' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds') (This is only shown if (access=yes | access=))", "value": "yes" }, { - "key": "toilets:handwashing", - "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=interval with a fixed text, namely 'There is a person supervising these toilets, but they are present only during certain times of the opening hours' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds') (This is only shown if (access=yes | access=))", + "value": "interval" + }, + { + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=no with a fixed text, namely 'These toilets are not supervised' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds') (This is only shown if (access=yes | access=))", "value": "no" }, { @@ -1132,6 +1137,41 @@ "description": "Layer 'Toilets' shows toilets:paper_supplied=no with a fixed text, namely 'You have to bring your own toilet paper to this toilet' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds') (This is only shown if toilets:position!=urinal)", "value": "no" }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "value": "yes" + }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "value": "no" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=electric_hand_dryer with a fixed text, namely 'Electric hand dryers are available for drying hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds') (This is only shown if toilets:handwashing=yes)", + "value": "electric_hand_dryer" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=paper_towel with a fixed text, namely 'Paper towels are available for drying hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds') (This is only shown if toilets:handwashing=yes)", + "value": "paper_towel" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=towel_cabinet with a fixed text, namely 'A towel roll cabinet is available for drying hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds') (This is only shown if toilets:handwashing=yes)", + "value": "towel_cabinet" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=towel with a fixed text, namely 'A fabric towel available to dry your hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds') (This is only shown if toilets:handwashing=yes)", + "value": "towel" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=no with a fixed text, namely 'There are no hand drying facilities available.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds') (This is only shown if toilets:handwashing=yes)", + "value": "no" + }, { "key": "description", "description": "Layer 'Toilets' shows and asks freeform values for key 'description' (in the mapcomplete.org theme 'Playgrounds')" diff --git a/Docs/TagInfo/mapcomplete_scouting.json b/Docs/TagInfo/mapcomplete_scouting.json index 4c565eb08f..ba9fdf870e 100644 --- a/Docs/TagInfo/mapcomplete_scouting.json +++ b/Docs/TagInfo/mapcomplete_scouting.json @@ -55,10 +55,19 @@ "key": "contact:website", "description": "Layer 'Scouting groups' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'Scouting groups')" }, + { + "key": "start_date", + "description": "Layer 'Scouting groups' shows and asks freeform values for key 'start_date' (in the mapcomplete.org theme 'Scouting groups')" + }, { "key": "contact:mastodon", "description": "Layer 'Scouting groups' shows and asks freeform values for key 'contact:mastodon' (in the mapcomplete.org theme 'Scouting groups')" }, + { + "key": "leisure", + "description": "The MapComplete theme Scouting groups has a layer Group Campsites showing features with this tag", + "value": "summer_camp" + }, { "key": "tourism", "description": "The MapComplete theme Scouting groups has a layer Group Campsites showing features with this tag", @@ -69,6 +78,16 @@ "description": "The MapComplete theme Scouting groups has a layer Group Campsites showing features with this tag", "value": "yes" }, + { + "key": "scout", + "description": "The MapComplete theme Scouting groups has a layer Group Campsites showing features with this tag", + "value": "only" + }, + { + "key": "group", + "description": "The MapComplete theme Scouting groups has a layer Group Campsites showing features with this tag", + "value": "yes" + }, { "key": "group_only", "description": "The MapComplete theme Scouting groups has a layer Group Campsites showing features with this tag", @@ -202,6 +221,16 @@ "description": "The MapComplete theme Scouting groups has a layer Hostels for groups and scouts showing features with this tag", "value": "yes" }, + { + "key": "scout", + "description": "The MapComplete theme Scouting groups has a layer Hostels for groups and scouts showing features with this tag", + "value": "only" + }, + { + "key": "group", + "description": "The MapComplete theme Scouting groups has a layer Hostels for groups and scouts showing features with this tag", + "value": "yes" + }, { "key": "group_only", "description": "The MapComplete theme Scouting groups has a layer Hostels for groups and scouts showing features with this tag", diff --git a/Docs/TagInfo/mapcomplete_ski.json b/Docs/TagInfo/mapcomplete_ski.json index b2bdcc2b03..11274b7d72 100644 --- a/Docs/TagInfo/mapcomplete_ski.json +++ b/Docs/TagInfo/mapcomplete_ski.json @@ -682,13 +682,18 @@ "value": "dedicated_room" }, { - "key": "toilets:handwashing", - "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=yes with a fixed text, namely 'There is a person supervising these toilets during (most of) the opening hours' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if (access=yes | access=))", "value": "yes" }, { - "key": "toilets:handwashing", - "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=interval with a fixed text, namely 'There is a person supervising these toilets, but they are present only during certain times of the opening hours' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if (access=yes | access=))", + "value": "interval" + }, + { + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=no with a fixed text, namely 'These toilets are not supervised' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if (access=yes | access=))", "value": "no" }, { @@ -701,6 +706,41 @@ "description": "Layer 'Toilets' shows toilets:paper_supplied=no with a fixed text, namely 'You have to bring your own toilet paper to this toilet' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if toilets:position!=urinal)", "value": "no" }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", + "value": "yes" + }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", + "value": "no" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=electric_hand_dryer with a fixed text, namely 'Electric hand dryers are available for drying hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if toilets:handwashing=yes)", + "value": "electric_hand_dryer" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=paper_towel with a fixed text, namely 'Paper towels are available for drying hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if toilets:handwashing=yes)", + "value": "paper_towel" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=towel_cabinet with a fixed text, namely 'A towel roll cabinet is available for drying hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if toilets:handwashing=yes)", + "value": "towel_cabinet" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=towel with a fixed text, namely 'A fabric towel available to dry your hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if toilets:handwashing=yes)", + "value": "towel" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=no with a fixed text, namely 'There are no hand drying facilities available.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if toilets:handwashing=yes)", + "value": "no" + }, { "key": "description", "description": "Layer 'Toilets' shows and asks freeform values for key 'description' (in the mapcomplete.org theme 'Ski pistes and aerialways')" diff --git a/Docs/TagInfo/mapcomplete_toilets.json b/Docs/TagInfo/mapcomplete_toilets.json index f98ce14c3b..21fa9a64c0 100644 --- a/Docs/TagInfo/mapcomplete_toilets.json +++ b/Docs/TagInfo/mapcomplete_toilets.json @@ -278,13 +278,18 @@ "value": "dedicated_room" }, { - "key": "toilets:handwashing", - "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets')", + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=yes with a fixed text, namely 'There is a person supervising these toilets during (most of) the opening hours' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if (access=yes | access=))", "value": "yes" }, { - "key": "toilets:handwashing", - "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets')", + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=interval with a fixed text, namely 'There is a person supervising these toilets, but they are present only during certain times of the opening hours' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if (access=yes | access=))", + "value": "interval" + }, + { + "key": "supervised", + "description": "Layer 'Toilets' shows supervised=no with a fixed text, namely 'These toilets are not supervised' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if (access=yes | access=))", "value": "no" }, { @@ -297,6 +302,41 @@ "description": "Layer 'Toilets' shows toilets:paper_supplied=no with a fixed text, namely 'You have to bring your own toilet paper to this toilet' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:position!=urinal)", "value": "no" }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'These toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets')", + "value": "yes" + }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'These toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets')", + "value": "no" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=electric_hand_dryer with a fixed text, namely 'Electric hand dryers are available for drying hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:handwashing=yes)", + "value": "electric_hand_dryer" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=paper_towel with a fixed text, namely 'Paper towels are available for drying hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:handwashing=yes)", + "value": "paper_towel" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=towel_cabinet with a fixed text, namely 'A towel roll cabinet is available for drying hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:handwashing=yes)", + "value": "towel_cabinet" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=towel with a fixed text, namely 'A fabric towel available to dry your hands.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:handwashing=yes)", + "value": "towel" + }, + { + "key": "toilets:hands_drying", + "description": "Layer 'Toilets' shows toilets:hands_drying=no with a fixed text, namely 'There are no hand drying facilities available.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:handwashing=yes)", + "value": "no" + }, { "key": "description", "description": "Layer 'Toilets' shows and asks freeform values for key 'description' (in the mapcomplete.org theme 'Public toilets')" diff --git a/Docs/TagInfo/mapcomplete_wayside_shrines.json b/Docs/TagInfo/mapcomplete_wayside_shrines.json new file mode 100644 index 0000000000..fcfa44a06b --- /dev/null +++ b/Docs/TagInfo/mapcomplete_wayside_shrines.json @@ -0,0 +1,814 @@ +{ + "data_format": 1, + "project": { + "name": "MapComplete Wayside shrines", + "description": "This map shows shrines found on the side of roads and paths, and allows adding new ones", + "project_url": "https://mapcomplete.org/wayside_shrines", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Themes", + "icon_url": "https://mapcomplete.org/assets/layers/wayside_shrine/shrine.svg", + "contact_name": "Pieter Vander Vennet", + "contact_email": "pietervdvn@posteo.net" + }, + "tags": [ + { + "key": "historic", + "description": "The MapComplete theme Wayside shrines has a layer Wayside Shrines showing features with this tag", + "value": "wayside_shrine" + }, + { + "key": "id", + "description": "Layer 'Wayside Shrines' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))" + }, + { + "key": "image", + "description": "The layer 'Wayside Shrines allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "panoramax", + "description": "The layer 'Wayside Shrines allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Wayside Shrines allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Wayside Shrines allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Wayside Shrines allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "name", + "description": "Layer 'Wayside Shrines' shows and asks freeform values for key 'name' (in the mapcomplete.org theme 'Wayside shrines')" + }, + { + "key": "noname", + "description": "Layer 'Wayside Shrines' shows noname=yes with a fixed text, namely 'This shrine does not have a name' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "yes" + }, + { + "key": "religion", + "description": "Layer 'Wayside Shrines' shows and asks freeform values for key 'religion' (in the mapcomplete.org theme 'Wayside shrines')" + }, + { + "key": "religion", + "description": "Layer 'Wayside Shrines' shows religion=christian with a fixed text, namely 'This is a Christian shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "christian" + }, + { + "key": "religion", + "description": "Layer 'Wayside Shrines' shows religion=buddhist with a fixed text, namely 'This is a Buddhist shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "buddhist" + }, + { + "key": "religion", + "description": "Layer 'Wayside Shrines' shows religion=hindu with a fixed text, namely 'This is a Hindu shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "hindu" + }, + { + "key": "religion", + "description": "Layer 'Wayside Shrines' shows religion=jain with a fixed text, namely 'This is a Jain shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "jain" + }, + { + "key": "religion", + "description": "Layer 'Wayside Shrines' shows religion=jewish with a fixed text, namely 'This is a Jewish shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "jewish" + }, + { + "key": "religion", + "description": "Layer 'Wayside Shrines' shows religion=muslim with a fixed text, namely 'This is an Islamic shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "muslim" + }, + { + "key": "religion", + "description": "Layer 'Wayside Shrines' shows religion=pagan with a fixed text, namely 'This is a Pagan shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "pagan" + }, + { + "key": "religion", + "description": "Layer 'Wayside Shrines' shows religion=shinto with a fixed text, namely 'This is a Shinto shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "shinto" + }, + { + "key": "religion", + "description": "Layer 'Wayside Shrines' shows religion=sikh with a fixed text, namely 'This is a Sikh shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "sikh" + }, + { + "key": "religion", + "description": "Layer 'Wayside Shrines' shows religion=taoist with a fixed text, namely 'This is a Taoist shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "taoist" + }, + { + "key": "religion", + "description": "Layer 'Wayside Shrines' shows religion=zoroastrian with a fixed text, namely 'This is a Zoroastrian shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "zoroastrian" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian)" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=catholic with a fixed text, namely 'The religious subdenomination is Catholic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian)", + "value": "catholic" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=roman_catholic with a fixed text, namely 'The religious subdenomination is Roman Catholic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian)", + "value": "roman_catholic" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=orthodox with a fixed text, namely 'The religious subdenomination is Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian)", + "value": "orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=greek_orthodox with a fixed text, namely 'The religious subdenomination is Greek-Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian)", + "value": "greek_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=russian_orthodox with a fixed text, namely 'The religious subdenomination is Russian-Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian)", + "value": "russian_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=serbian_orthodox with a fixed text, namely 'The religious subdenomination is Serbian Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian)", + "value": "serbian_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=protestant with a fixed text, namely 'The religious subdenomination is Protestant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian)", + "value": "protestant" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=anglican with a fixed text, namely 'The religious subdenomination is Anglican' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian)", + "value": "anglican" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=adventist with a fixed text, namely 'The religious subdenomination is Adventist' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian)", + "value": "adventist" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=evangelical with a fixed text, namely 'The religious subdenomination is evangelical' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian)", + "value": "evangelical" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=muslim)" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=shia with a fixed text, namely 'The religious subdenomination is Shia' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=muslim)", + "value": "shia" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=sunni with a fixed text, namely 'The religious subdenomination is Sunni' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=muslim)", + "value": "sunni" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=sufi with a fixed text, namely 'The religious subdenomination is Sufi' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=muslim)", + "value": "sufi" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=jewish)" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=conservative with a fixed text, namely 'The religious subdenomination is Conservative' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=jewish)", + "value": "conservative" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=orthodox with a fixed text, namely 'The religious subdenomination is Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=jewish)", + "value": "orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=hasidic with a fixed text, namely 'The religious subdenomination is Hasidic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=jewish)", + "value": "hasidic" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows denomination=reform with a fixed text, namely 'The religious subdenomination is Reform' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=jewish)", + "value": "reform" + }, + { + "key": "denomination", + "description": "Layer 'Wayside Shrines' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion!=christian & religion!=muslim & religion!=jewish & religion~.+)" + }, + { + "key": "level", + "description": "Layer 'Wayside Shrines' shows and asks freeform values for key 'level' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if repeat_on=)" + }, + { + "key": "location", + "description": "Layer 'Wayside Shrines' shows location=underground with a fixed text, namely 'Located underground' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if repeat_on=)", + "value": "underground" + }, + { + "key": "level", + "description": "Layer 'Wayside Shrines' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if repeat_on=)", + "value": "0" + }, + { + "key": "level", + "description": "Layer 'Wayside Shrines' shows level= with a fixed text, namely 'Located on the ground floor' (in the mapcomplete.org theme 'Wayside shrines') Picking this answer will delete the key level. (This is only shown if repeat_on=)", + "value": "" + }, + { + "key": "level", + "description": "Layer 'Wayside Shrines' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if repeat_on=)", + "value": "1" + }, + { + "key": "level", + "description": "Layer 'Wayside Shrines' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if repeat_on=)", + "value": "-1" + }, + { + "key": "tourism", + "description": "The MapComplete theme Wayside shrines has a layer Artworks showing features with this tag", + "value": "artwork" + }, + { + "key": "id", + "description": "Layer 'Artworks' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))" + }, + { + "key": "image", + "description": "The layer 'Artworks allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "panoramax", + "description": "The layer 'Artworks allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Artworks allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Artworks allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Artworks allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows and asks freeform values for key 'artwork_type' (in the mapcomplete.org theme 'Wayside shrines')" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=architecture with a fixed text, namely 'Architecture' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "architecture" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=mural with a fixed text, namely 'Mural' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "mural" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=painting with a fixed text, namely 'Painting' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "painting" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=sculpture with a fixed text, namely 'Sculpture' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "sculpture" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=statue with a fixed text, namely 'Statue' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "statue" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=bust with a fixed text, namely 'Bust' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "bust" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=stone with a fixed text, namely 'Stone' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "stone" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=installation with a fixed text, namely 'Installation' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "installation" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=graffiti with a fixed text, namely 'Graffiti' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "graffiti" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=relief with a fixed text, namely 'Relief' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "relief" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=azulejo with a fixed text, namely 'Azulejo (Spanish decorative tilework)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "azulejo" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=tilework with a fixed text, namely 'Tilework' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "tilework" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=woodcarving with a fixed text, namely 'Woodcarving' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "woodcarving" + }, + { + "key": "artist:wikidata", + "description": "Layer 'Artworks' shows and asks freeform values for key 'artist:wikidata' (in the mapcomplete.org theme 'Wayside shrines')" + }, + { + "key": "artist_name", + "description": "Layer 'Artworks' shows and asks freeform values for key 'artist_name' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if artist:wikidata=)" + }, + { + "key": "website", + "description": "Layer 'Artworks' shows and asks freeform values for key 'website' (in the mapcomplete.org theme 'Wayside shrines')" + }, + { + "key": "wikidata", + "description": "Layer 'Artworks' shows and asks freeform values for key 'wikidata' (in the mapcomplete.org theme 'Wayside shrines')" + }, + { + "key": "wikipedia", + "description": "Layer 'Artworks' shows wikipedia~.+ with a fixed text, namely '{wikipedia():max-height:25rem}' (in the mapcomplete.org theme 'Wayside shrines')" + }, + { + "key": "wikidata", + "description": "Layer 'Artworks' shows wikidata= with a fixed text, namely 'No Wikipedia page has been linked yet' (in the mapcomplete.org theme 'Wayside shrines') Picking this answer will delete the key wikidata.", + "value": "" + }, + { + "key": "subject:wikidata", + "description": "Layer 'Artworks' shows and asks freeform values for key 'subject:wikidata' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if subject:wikidata~.+)" + }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic=memorial with a fixed text, namely 'This artwork also serves as a memorial' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "memorial" + }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic= with a fixed text, namely 'This artwork does not serve as a memorial' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') Picking this answer will delete the key historic.", + "value": "" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows and asks freeform values for key 'memorial' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=statue with a fixed text, namely 'This is a statue' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "statue" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=plaque with a fixed text, namely 'This is a plaque' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "plaque" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=bench with a fixed text, namely 'This is a commemorative bench' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "bench" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=ghost_bike with a fixed text, namely 'This is a ghost bike - a bicycle painted white to remember a cyclist whom deceased because of a car crash' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "ghost_bike" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=stolperstein with a fixed text, namely 'This is a stolperstein (stumbing stone)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "stolperstein" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=stele with a fixed text, namely 'This is a stele' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "stele" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=stone with a fixed text, namely 'This is a memorial stone' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "stone" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=bust with a fixed text, namely 'This is a bust' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "bust" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=sculpture with a fixed text, namely 'This is a sculpture' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "sculpture" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=obelisk with a fixed text, namely 'This is an obelisk' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "obelisk" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=cross with a fixed text, namely 'This is a cross' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "cross" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=blue_plaque with a fixed text, namely 'This is a blue plaque' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "blue_plaque" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=tank with a fixed text, namely 'This is a historic tank, permanently placed in public space as memorial' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "tank" + }, + { + "key": "memorial", + "description": "Layer 'Artworks' shows memorial=tree with a fixed text, namely 'This is a memorial tree' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "tree" + }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic=tomb with a fixed text, namely 'This is a gravestone; the person is buried here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=memorial)", + "value": "tomb" + }, + { + "key": "inscription", + "description": "Layer 'Artworks' shows and asks freeform values for key 'inscription' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if memorial!=bench & historic=memorial)" + }, + { + "key": "not:inscription", + "description": "Layer 'Artworks' shows not:inscription=yes with a fixed text, namely 'This memorial does not have an inscription' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if memorial!=bench & historic=memorial)", + "value": "yes" + }, + { + "key": "amenity", + "description": "Layer 'Artworks' shows amenity=bench with a fixed text, namely 'This artwork also serves as a bench' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "bench" + }, + { + "key": "amenity", + "description": "Layer 'Artworks' shows amenity= with a fixed text, namely 'This artwork does not serve as a bench' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') Picking this answer will delete the key amenity.", + "value": "" + }, + { + "key": "backrest", + "description": "Layer 'Artworks' shows backrest=yes & two_sided=yes with a fixed text, namely 'This bench is two-sided and shares the backrest' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "yes" + }, + { + "key": "two_sided", + "description": "Layer 'Artworks' shows backrest=yes & two_sided=yes with a fixed text, namely 'This bench is two-sided and shares the backrest' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "yes" + }, + { + "key": "backrest", + "description": "Layer 'Artworks' shows backrest=yes with a fixed text, namely 'This bench does have a backrest' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "yes" + }, + { + "key": "backrest", + "description": "Layer 'Artworks' shows backrest=no with a fixed text, namely 'This bench does not have a backrest' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "no" + }, + { + "key": "armrest", + "description": "Layer 'Artworks' shows armrest=yes with a fixed text, namely 'This bench does have one or more armrests' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "yes" + }, + { + "key": "armrest", + "description": "Layer 'Artworks' shows armrest=no with a fixed text, namely 'This bench does not have any armrests' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "no" + }, + { + "key": "seats", + "description": "Layer 'Artworks' shows and asks freeform values for key 'seats' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)" + }, + { + "key": "seats:separated", + "description": "Layer 'Artworks' shows seats:separated=no with a fixed text, namely 'This bench does not have separated seats' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "no" + }, + { + "key": "material", + "description": "Layer 'Artworks' shows and asks freeform values for key 'material' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)" + }, + { + "key": "material", + "description": "Layer 'Artworks' shows material=wood with a fixed text, namely 'The seating is made from wood' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "wood" + }, + { + "key": "material", + "description": "Layer 'Artworks' shows material=metal with a fixed text, namely 'The seating is made from metal' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "metal" + }, + { + "key": "material", + "description": "Layer 'Artworks' shows material=stone with a fixed text, namely 'The seating is made from stone' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "stone" + }, + { + "key": "material", + "description": "Layer 'Artworks' shows material=concrete with a fixed text, namely 'The seating is made from concrete' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "concrete" + }, + { + "key": "material", + "description": "Layer 'Artworks' shows material=plastic with a fixed text, namely 'The seating is made from plastic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "plastic" + }, + { + "key": "material", + "description": "Layer 'Artworks' shows material=steel with a fixed text, namely 'The seating is made from steel' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "steel" + }, + { + "key": "direction", + "description": "Layer 'Artworks' shows and asks freeform values for key 'direction' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if two_sided!=yes & amenity=bench)" + }, + { + "key": "colour", + "description": "Layer 'Artworks' shows and asks freeform values for key 'colour' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)" + }, + { + "key": "colour", + "description": "Layer 'Artworks' shows colour=brown with a fixed text, namely 'Colour: brown' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "brown" + }, + { + "key": "colour", + "description": "Layer 'Artworks' shows colour=green with a fixed text, namely 'Colour: green' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "green" + }, + { + "key": "colour", + "description": "Layer 'Artworks' shows colour=gray with a fixed text, namely 'Colour: gray' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "gray" + }, + { + "key": "colour", + "description": "Layer 'Artworks' shows colour=white with a fixed text, namely 'Colour: white' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "white" + }, + { + "key": "colour", + "description": "Layer 'Artworks' shows colour=red with a fixed text, namely 'Colour: red' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "red" + }, + { + "key": "colour", + "description": "Layer 'Artworks' shows colour=black with a fixed text, namely 'Colour: black' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "black" + }, + { + "key": "colour", + "description": "Layer 'Artworks' shows colour=blue with a fixed text, namely 'Colour: blue' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "blue" + }, + { + "key": "colour", + "description": "Layer 'Artworks' shows colour=yellow with a fixed text, namely 'Colour: yellow' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "yellow" + }, + { + "key": "survey:date", + "description": "Layer 'Artworks' shows and asks freeform values for key 'survey:date' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)" + }, + { + "key": "survey:date", + "description": "Layer 'Artworks' shows survey:date= with a fixed text, namely 'Surveyed today!' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') Picking this answer will delete the key survey:date. (This is only shown if amenity=bench)", + "value": "" + }, + { + "key": "inscription", + "description": "Layer 'Artworks' shows and asks freeform values for key 'inscription' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)" + }, + { + "key": "not:inscription", + "description": "Layer 'Artworks' shows not:inscription=yes with a fixed text, namely 'This bench does not have an inscription' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if amenity=bench)", + "value": "yes" + }, + { + "key": "inscription", + "description": "Layer 'Artworks' shows inscription= with a fixed text, namely 'This bench probably does not not have an inscription' (in the mapcomplete.org theme 'Wayside shrines') Picking this answer will delete the key inscription. (This is only shown if amenity=bench)", + "value": "" + }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic=memorial with a fixed text, namely 'This bench is a memorial for someone or something' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if (historic=memorial | inscription~.+ | memorial=bench | tourism=artwork) & amenity=bench)", + "value": "memorial" + }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic= & not:historic=memorial with a fixed text, namely 'This bench is a not a memorial for someone or something' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') Picking this answer will delete the key historic. (This is only shown if (historic=memorial | inscription~.+ | memorial=bench | tourism=artwork) & amenity=bench)", + "value": "" + }, + { + "key": "not:historic", + "description": "Layer 'Artworks' shows historic= & not:historic=memorial with a fixed text, namely 'This bench is a not a memorial for someone or something' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if (historic=memorial | inscription~.+ | memorial=bench | tourism=artwork) & amenity=bench)", + "value": "memorial" + }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic=wayside_shrine with a fixed text, namely 'This artwork acts as a wayside shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines')", + "value": "wayside_shrine" + }, + { + "key": "historic", + "description": "Layer 'Artworks' shows historic= with a fixed text, namely 'This artwork does not act as a wayside shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') Picking this answer will delete the key historic.", + "value": "" + }, + { + "key": "name", + "description": "Layer 'Artworks' shows and asks freeform values for key 'name' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)" + }, + { + "key": "noname", + "description": "Layer 'Artworks' shows noname=yes with a fixed text, namely 'This shrine does not have a name' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)", + "value": "yes" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows and asks freeform values for key 'religion' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=christian with a fixed text, namely 'This is a Christian shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)", + "value": "christian" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=buddhist with a fixed text, namely 'This is a Buddhist shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)", + "value": "buddhist" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=hindu with a fixed text, namely 'This is a Hindu shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)", + "value": "hindu" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=jain with a fixed text, namely 'This is a Jain shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)", + "value": "jain" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=jewish with a fixed text, namely 'This is a Jewish shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)", + "value": "jewish" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=muslim with a fixed text, namely 'This is an Islamic shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)", + "value": "muslim" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=pagan with a fixed text, namely 'This is a Pagan shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)", + "value": "pagan" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=shinto with a fixed text, namely 'This is a Shinto shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)", + "value": "shinto" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=sikh with a fixed text, namely 'This is a Sikh shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)", + "value": "sikh" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=taoist with a fixed text, namely 'This is a Taoist shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)", + "value": "taoist" + }, + { + "key": "religion", + "description": "Layer 'Artworks' shows religion=zoroastrian with a fixed text, namely 'This is a Zoroastrian shrine' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if historic=wayside_shrine)", + "value": "zoroastrian" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian & historic=wayside_shrine)" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=catholic with a fixed text, namely 'The religious subdenomination is Catholic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "catholic" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=roman_catholic with a fixed text, namely 'The religious subdenomination is Roman Catholic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "roman_catholic" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=orthodox with a fixed text, namely 'The religious subdenomination is Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=greek_orthodox with a fixed text, namely 'The religious subdenomination is Greek-Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "greek_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=russian_orthodox with a fixed text, namely 'The religious subdenomination is Russian-Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "russian_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=serbian_orthodox with a fixed text, namely 'The religious subdenomination is Serbian Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "serbian_orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=protestant with a fixed text, namely 'The religious subdenomination is Protestant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "protestant" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=anglican with a fixed text, namely 'The religious subdenomination is Anglican' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "anglican" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=adventist with a fixed text, namely 'The religious subdenomination is Adventist' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "adventist" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=evangelical with a fixed text, namely 'The religious subdenomination is evangelical' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=christian & historic=wayside_shrine)", + "value": "evangelical" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=muslim & historic=wayside_shrine)" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=shia with a fixed text, namely 'The religious subdenomination is Shia' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=muslim & historic=wayside_shrine)", + "value": "shia" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=sunni with a fixed text, namely 'The religious subdenomination is Sunni' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=muslim & historic=wayside_shrine)", + "value": "sunni" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=sufi with a fixed text, namely 'The religious subdenomination is Sufi' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=muslim & historic=wayside_shrine)", + "value": "sufi" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=jewish & historic=wayside_shrine)" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=conservative with a fixed text, namely 'The religious subdenomination is Conservative' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "conservative" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=orthodox with a fixed text, namely 'The religious subdenomination is Orthodox' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "orthodox" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=hasidic with a fixed text, namely 'The religious subdenomination is Hasidic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "hasidic" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows denomination=reform with a fixed text, namely 'The religious subdenomination is Reform' and allows to pick this as a default answer (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion=jewish & historic=wayside_shrine)", + "value": "reform" + }, + { + "key": "denomination", + "description": "Layer 'Artworks' shows and asks freeform values for key 'denomination' (in the mapcomplete.org theme 'Wayside shrines') (This is only shown if religion!=christian & religion!=muslim & religion!=jewish & religion~.+ & historic=wayside_shrine)" + } + ] +} \ No newline at end of file diff --git a/Docs/Themes/architecture.md b/Docs/Themes/architecture.md index 5632e23023..1db572970d 100644 --- a/Docs/Themes/architecture.md +++ b/Docs/Themes/architecture.md @@ -16,6 +16,8 @@ Available languages: - en - de - zh_Hant + - cs + - uk # Table of contents diff --git a/Docs/Themes/cyclofix.md b/Docs/Themes/cyclofix.md index 18f2e146f7..3f43b6675a 100644 --- a/Docs/Themes/cyclofix.md +++ b/Docs/Themes/cyclofix.md @@ -2133,21 +2133,21 @@ This tagrendering has labels ### charge_bicycle_tube The question is `How much does a a bicycle tube cost?` -*a bicycle tube costs {charge:bicycle_tube}* is shown if `charge` is set +*a bicycle tube costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*bicycle_tube.*)$ ### charge_bicycle_light The question is `How much does a bicycle light cost?` -*bicycle light costs {charge:bicycle_light}* is shown if `charge` is set +*bicycle light costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*bicycle_light.*)$ ### charge_condom The question is `How much does a a condom cost?` -*a condom costs {charge:condom}* is shown if `charge` is set +*a condom costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*condom.*)$ diff --git a/Docs/Themes/ghostsigns.md b/Docs/Themes/ghostsigns.md index 0caac1677b..7a31649d4f 100644 --- a/Docs/Themes/ghostsigns.md +++ b/Docs/Themes/ghostsigns.md @@ -67,6 +67,13 @@ Available languages: + [bench-survey:date](#bench-surveydate) + [bench-inscription](#bench-inscription) + [bench-memorial](#bench-memorial) + + [doubles_as_wayside_shrine](#doubles_as_wayside_shrine) + + [shrine_name](#shrine_name) + + [religion](#religion) + + [denomination_christian](#denomination_christian) + + [denomination_muslim](#denomination_muslim) + + [denomination_jewish](#denomination_jewish) + + [denomination_other](#denomination_other) + [leftover-questions](#leftover-questions) + [move-button](#move-button) + [delete-button](#delete-button) @@ -259,6 +266,13 @@ Elements must match **all** of the following expressions: | [survey:date](https://wiki.openstreetmap.org/wiki/Key:survey:date) | [date](../SpecialInputElements.md#date) | [](https://wiki.openstreetmap.org/wiki/Tag:survey:date%3D) | | [inscription](https://wiki.openstreetmap.org/wiki/Key:inscription) | [text](../SpecialInputElements.md#text) | | | [historic](https://wiki.openstreetmap.org/wiki/Key:historic) | Multiple choice | [memorial](https://wiki.openstreetmap.org/wiki/Tag:historic%3Dmemorial) [](https://wiki.openstreetmap.org/wiki/Tag:historic%3D) | +| [historic](https://wiki.openstreetmap.org/wiki/Key:historic) | Multiple choice | [wayside_shrine](https://wiki.openstreetmap.org/wiki/Tag:historic%3Dwayside_shrine) [](https://wiki.openstreetmap.org/wiki/Tag:historic%3D) | +| [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [religion](https://wiki.openstreetmap.org/wiki/Key:religion) | [string](../SpecialInputElements.md#string) | [christian](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dchristian) [buddhist](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dbuddhist) [hindu](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dhindu) [jain](https://wiki.openstreetmap.org/wiki/Tag:religion%3Djain) [jewish](https://wiki.openstreetmap.org/wiki/Tag:religion%3Djewish) [muslim](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dmuslim) [pagan](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dpagan) [shinto](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dshinto) [sikh](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dsikh) [taoist](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dtaoist) [zoroastrian](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dzoroastrian) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [catholic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dcatholic) [roman_catholic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Droman_catholic) [orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dorthodox) [greek_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dgreek_orthodox) [russian_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Drussian_orthodox) [serbian_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dserbian_orthodox) [protestant](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dprotestant) [anglican](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Danglican) [adventist](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dadventist) [evangelical](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Devangelical) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [shia](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dshia) [sunni](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dsunni) [sufi](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dsufi) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [conservative](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dconservative) [orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dorthodox) [hasidic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dhasidic) [reform](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dreform) | +| [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | | ### historic_or_not @@ -339,7 +353,7 @@ This tagrendering has labels The question is `Does this artwork serve as a memorial?` - - *This artwork also serves as a memorial* is shown if with historic=memorial + - *This artwork also serves as a memorial* is shown if with historic=memorial - *This artwork does not serve as a memorial* is shown if with historic= ### memorial-type @@ -382,7 +396,7 @@ This tagrendering has labels The question is `Does this artwork serve as a bench?` - - *This artwork also serves as a bench* is shown if with amenity=bench + - *This artwork also serves as a bench* is shown if with amenity=bench - *This artwork does not serve as a bench* is shown if with amenity= - *This artwork does not serve as a bench* is shown if with amenity!=bench. _This option cannot be chosen as answer_ @@ -497,6 +511,101 @@ This tagrendering is only visible in the popup if the following condition is met This tagrendering has labels `bench-questions` +### doubles_as_wayside_shrine + +The question is `Does this artwork also double as wayside shrine?` + + - *This artwork acts as a wayside shrine* is shown if with historic=wayside_shrine + - *This artwork does not act as a wayside shrine* is shown if with historic= + +### shrine_name + +The question is `What's the name of this shrine?` +*The name of this shrine is {name}* is shown if `name` is set + + - *This shrine does not have a name* is shown if with noname=yes + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine +This tagrendering has labels +`shrine_questions` + +### religion + +The question is `To which religion is this shrine dedicated?` +*This shrine is {religion}* is shown if `religion` is set + + - *This is a Christian shrine* is shown if with religion=christian + - *This is a Buddhist shrine* is shown if with religion=buddhist + - *This is a Hindu shrine* is shown if with religion=hindu + - *This is a Jain shrine* is shown if with religion=jain + - *This is a Jewish shrine* is shown if with religion=jewish + - *This is an Islamic shrine* is shown if with religion=muslim + - *This is a Pagan shrine* is shown if with religion=pagan + - *This is a Shinto shrine* is shown if with religion=shinto + - *This is a Sikh shrine* is shown if with religion=sikh + - *This is a Taoist shrine* is shown if with religion=taoist + - *This is a Zoroastrian shrine* is shown if with religion=zoroastrian + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine +This tagrendering has labels +`shrine_questions` + +### denomination_christian + +The question is `What's the Christian denomination of the shrine?` +*The religious denomination is {denomination}* is shown if `denomination` is set + + - *The religious subdenomination is Catholic* is shown if with denomination=catholic + - *The religious subdenomination is Roman Catholic* is shown if with denomination=roman_catholic + - *The religious subdenomination is Orthodox* is shown if with denomination=orthodox + - *The religious subdenomination is Greek-Orthodox* is shown if with denomination=greek_orthodox + - *The religious subdenomination is Russian-Orthodox* is shown if with denomination=russian_orthodox + - *The religious subdenomination is Serbian Orthodox* is shown if with denomination=serbian_orthodox + - *The religious subdenomination is Protestant* is shown if with denomination=protestant + - *The religious subdenomination is Anglican* is shown if with denomination=anglican + - *The religious subdenomination is Adventist* is shown if with denomination=adventist + - *The religious subdenomination is evangelical* is shown if with denomination=evangelical + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine & religion=christian +This tagrendering has labels +`shrine_questions` + +### denomination_muslim + +The question is `What's the Muslim denomination of this shrine?` +*The religious subdenomination is {denomination}* is shown if `denomination` is set + + - *The religious subdenomination is Shia* is shown if with denomination=shia + - *The religious subdenomination is Sunni* is shown if with denomination=sunni + - *The religious subdenomination is Sufi* is shown if with denomination=sufi + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine & religion=muslim +This tagrendering has labels +`shrine_questions` + +### denomination_jewish + +The question is `What's the Jewish denomination of this shrine?` +*The religious subdenomination is {denomination}* is shown if `denomination` is set + + - *The religious subdenomination is Conservative* is shown if with denomination=conservative + - *The religious subdenomination is Orthodox* is shown if with denomination=orthodox + - *The religious subdenomination is Hasidic* is shown if with denomination=hasidic + - *The religious subdenomination is Reform* is shown if with denomination=reform + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine & religion=jewish +This tagrendering has labels +`shrine_questions` + +### denomination_other + +The question is `What's the denomination of this shrine?` +*The denomination of this shrine is {denomination}* is shown if `denomination` is set + +This tagrendering is only visible in the popup if the following condition is met: historic=wayside_shrine & religion!=christian & religion!=muslim & religion!=jewish & religion~.+ +This tagrendering has labels +`shrine_questions` + ### leftover-questions _This tagrendering has no question and is thus read-only_ diff --git a/Docs/Themes/openlovemap.md b/Docs/Themes/openlovemap.md index 6dbc31c137..a6f68a1a28 100644 --- a/Docs/Themes/openlovemap.md +++ b/Docs/Themes/openlovemap.md @@ -1250,21 +1250,21 @@ This tagrendering has labels ### charge_bicycle_tube The question is `How much does a a bicycle tube cost?` -*a bicycle tube costs {charge:bicycle_tube}* is shown if `charge` is set +*a bicycle tube costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*bicycle_tube.*)$ ### charge_bicycle_light The question is `How much does a bicycle light cost?` -*bicycle light costs {charge:bicycle_light}* is shown if `charge` is set +*bicycle light costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*bicycle_light.*)$ ### charge_condom The question is `How much does a a condom cost?` -*a condom costs {charge:condom}* is shown if `charge` is set +*a condom costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*condom.*)$ diff --git a/Docs/Themes/personal.md b/Docs/Themes/personal.md index e47de79a76..072df8b90b 100644 --- a/Docs/Themes/personal.md +++ b/Docs/Themes/personal.md @@ -146,6 +146,7 @@ This theme contains the following layers: - [walls_and_buildings](../Layers/walls_and_buildings.md) - [waste_basket](../Layers/waste_basket.md) - [waste_disposal](../Layers/waste_disposal.md) + - [wayside_shrine](../Layers/wayside_shrine.md) - [windturbine](../Layers/windturbine.md) Available languages: diff --git a/Docs/Themes/scouting.md b/Docs/Themes/scouting.md index 4ca2a44b62..f9707dfaf1 100644 --- a/Docs/Themes/scouting.md +++ b/Docs/Themes/scouting.md @@ -19,6 +19,7 @@ Available languages: - en - de - uk + - cs # Table of contents @@ -104,12 +105,12 @@ No themes use this layer ## Basic tags for this layer -Elements must match **all** of the following expressions: +Elements must match **any** of the following expressions: -0. tourism=camp_site -1. group_only=yes | scout=yes + - leisure=summer_camp + - tourism=camp_site & (group=yes | group_only=yes | scout=yes | scout=only) & group!=no & scout!=no -[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22group_only%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22scout%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22leisure%22%3D%22summer_camp%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22group%22%3D%22yes%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22group_only%22%3D%22yes%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22scout%22%3D%22yes%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22scout%22%3D%22only%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) ## Supported attributes @@ -267,9 +268,11 @@ The following options to create new points are included: Elements must match **all** of the following expressions: 0. tourism=hostel -1. group_only=yes | scout=yes +1. group=yes | group_only=yes | scout=yes | scout=only +2. group!=no +3. scout!=no -[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22tourism%22%3D%22hostel%22%5D%5B%22group_only%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22hostel%22%5D%5B%22scout%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22tourism%22%3D%22hostel%22%5D%5B%22group%22%3D%22yes%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22hostel%22%5D%5B%22group_only%22%3D%22yes%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22hostel%22%5D%5B%22scout%22%3D%22yes%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22hostel%22%5D%5B%22scout%22%3D%22only%22%5D%5B%22group%22!%3D%22no%22%5D%5B%22scout%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) ## Supported attributes diff --git a/Docs/Themes/velopark.md b/Docs/Themes/velopark.md index 1fb197ec81..157c8452ce 100644 --- a/Docs/Themes/velopark.md +++ b/Docs/Themes/velopark.md @@ -135,7 +135,7 @@ This tagrendering is only visible in the popup if the following condition is met ### login _This tagrendering has no question and is thus read-only_ -*{login_button()}* +*{login_button(,)}* ### is_linked diff --git a/Docs/Themes/vending_machine.md b/Docs/Themes/vending_machine.md index 9c202d7831..83f0ffd566 100644 --- a/Docs/Themes/vending_machine.md +++ b/Docs/Themes/vending_machine.md @@ -276,21 +276,21 @@ This tagrendering has labels ### charge_bicycle_tube The question is `How much does a a bicycle tube cost?` -*a bicycle tube costs {charge:bicycle_tube}* is shown if `charge` is set +*a bicycle tube costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*bicycle_tube.*)$ ### charge_bicycle_light The question is `How much does a bicycle light cost?` -*bicycle light costs {charge:bicycle_light}* is shown if `charge` is set +*bicycle light costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*bicycle_light.*)$ ### charge_condom The question is `How much does a a condom cost?` -*a condom costs {charge:condom}* is shown if `charge` is set +*a condom costs {charge}* is shown if `charge` is set This tagrendering is only visible in the popup if the following condition is met: vending~^(.*condom.*)$ diff --git a/Docs/Themes/wayside_shrines.md b/Docs/Themes/wayside_shrines.md new file mode 100644 index 0000000000..4ff97c7651 --- /dev/null +++ b/Docs/Themes/wayside_shrines.md @@ -0,0 +1,23 @@ +[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources) + +## Wayside shrines ( [wayside_shrines](https://mapcomplete.org/wayside_shrines) ) +_This document details some technical information about this MapComplete theme, mostly about the attributes used in the theme. Various links point toward more information about the attributes, e.g. to the OpenStreetMap-wiki, to TagInfo or tools creating statistics_ +The theme introduction reads: + +> This map shows shrines found on the side of roads and paths, and allows adding new ones + +This theme contains the following layers: + + - [wayside_shrine](../Layers/wayside_shrine.md) + - [artwork](../Layers/artwork.md) + - [walls_and_buildings](../Layers/walls_and_buildings.md) + +Available languages: + + - en + +# Layers defined in this theme configuration file +These layers can not be reused in different themes. + + +This document is autogenerated from [assets/themes/wayside_shrines/wayside_shrines.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/themes/wayside_shrines/wayside_shrines.json) diff --git a/Docs/wikiIndex.txt b/Docs/wikiIndex.txt index e9b8edddf0..4c425f8961 100644 --- a/Docs/wikiIndex.txt +++ b/Docs/wikiIndex.txt @@ -193,7 +193,7 @@ {{service_item |name= [https://mapcomplete.org/architecture architecture] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:zh_Hant|en}} +|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:zh_Hant|en}}, {{#language:cs|en}}, {{#language:uk|en}} |descr= A MapComplete theme: A map showing the archetectural style of buildings |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png @@ -591,7 +591,7 @@ The position of a signpost can be used by a hiker/biker/rider/s… {{service_item |name= [https://mapcomplete.org/scouting scouting] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:uk|en}} +|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:uk|en}}, {{#language:cs|en}} |descr= A MapComplete theme: A scouting group is a social youth movement with a heavy emphasis on the outdoors |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png @@ -651,4 +651,13 @@ The position of a signpost can be used by a hiker/biker/rider/s… |image= MapComplete_Screenshot.png |genre= POI, editor, waste_basket }} +{{service_item +|name= [https://mapcomplete.org/wayside_shrines wayside_shrines] +|region= Worldwide +|lang= {{#language:en|en}} +|descr= A MapComplete theme: This map shows shrines found on the side of roads and paths, and allows adding new ones +|material= {{yes|[https://mapcomplete.org/ Yes]}} +|image= MapComplete_Screenshot.png +|genre= POI, editor, wayside_shrines +}} |} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0575894dcc..5a58d8d009 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12749,9 +12749,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001702", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", - "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", + "version": "1.0.30001705", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001705.tgz", + "integrity": "sha512-S0uyMMiYvA7CxNgomYBwwwPUnWzFD83f3B1ce5jHUfHTH//QL6hHsreI8RVC5606R4ssqravelYO5TU6t8sEyg==", "dev": true, "funding": [ { @@ -39188,9 +39188,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001702", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", - "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", + "version": "1.0.30001705", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001705.tgz", + "integrity": "sha512-S0uyMMiYvA7CxNgomYBwwwPUnWzFD83f3B1ce5jHUfHTH//QL6hHsreI8RVC5606R4ssqravelYO5TU6t8sEyg==", "dev": true }, "canonicalize": { diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index cf46736438..51b2edab3f 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -9,12 +9,16 @@ 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" diff --git a/src/Logic/GeoOperations.ts b/src/Logic/GeoOperations.ts index 2e6beab8f1..cb719760f2 100644 --- a/src/Logic/GeoOperations.ts +++ b/src/Logic/GeoOperations.ts @@ -14,7 +14,6 @@ import { } from "geojson" import { Tiles } from "../Models/TileRange" import { Utils } from "../Utils" - ;("use strict") export class GeoOperations { diff --git a/src/Logic/Osm/OsmConnection.ts b/src/Logic/Osm/OsmConnection.ts index c8dea75dd1..15d010fae2 100644 --- a/src/Logic/Osm/OsmConnection.ts +++ b/src/Logic/Osm/OsmConnection.ts @@ -66,13 +66,13 @@ interface OsmUserInfo { } interface UserBlock { - "id": number, - "created_at": string, - "updated_at": string, - "ends_at": string, - "needs_view": boolean, - "user": { "uid": number, "user": string }, - "creator": { "uid": number, "user": string } + id: number + created_at: string + updated_at: string + ends_at: string + needs_view: boolean + user: { uid: number; user: string } + creator: { uid: number; user: string } } export default interface UserDetails { @@ -87,7 +87,7 @@ export default interface UserDetails { account_created: string tracesCount: number description?: string - languages: string[], + languages: string[] active_blocks: number } export type OsmServiceState = "online" | "readonly" | "offline" | "unknown" | "unreachable" @@ -320,7 +320,7 @@ export class OsmConnection { account_created: user.account_created, tracesCount: user.traces?.count ?? 0, unreadMessages: user.messages.received?.unread ?? 0, - active_blocks: user.blocks.received.active ?? 0 + active_blocks: user.blocks.received.active ?? 0, } this.userDetails.set(userdetails) this.loadingStatus.setData("logged-in") diff --git a/src/Logic/SimpleMetaTagger.ts b/src/Logic/SimpleMetaTagger.ts index 51c905cbf6..c91cd2c506 100644 --- a/src/Logic/SimpleMetaTagger.ts +++ b/src/Logic/SimpleMetaTagger.ts @@ -497,7 +497,10 @@ export default class SimpleMetaTaggers { continue } const value = feature.properties[key] - const denom: [string, Denomination] = unit.findDenomination(value, () => feature.properties["_country"]) + const denom: [string, Denomination] = unit.findDenomination( + value, + () => feature.properties["_country"] + ) if (denom === undefined) { // no valid value found break @@ -515,7 +518,12 @@ export default class SimpleMetaTaggers { if (canonical === value) { break } - console.log("Rewritten ", key, ` from '${value}' into '${canonical}' due to denomination`, denomination) + console.log( + "Rewritten ", + key, + ` from '${value}' into '${canonical}' due to denomination`, + denomination + ) if (canonical === undefined && !unit.eraseInvalid) { break } diff --git a/src/Logic/State/SearchState.ts b/src/Logic/State/SearchState.ts index 01746cb6a7..59b59d9bb0 100644 --- a/src/Logic/State/SearchState.ts +++ b/src/Logic/State/SearchState.ts @@ -61,7 +61,7 @@ export default class SearchState { return new ImmutableStore(true) } return Stores.concat(suggestions).map((suggestions) => - suggestions.some(list => list === undefined) + suggestions.some((list) => list === undefined) ) }) this.suggestions = suggestionsList.bindD((suggestions) => @@ -101,7 +101,7 @@ export default class SearchState { this.showSearchDrawer = new UIEventSource(false) - this.searchIsFocused.addCallbackAndRunD(sugg => { + this.searchIsFocused.addCallbackAndRunD((sugg) => { if (sugg) { this.showSearchDrawer.set(true) } @@ -192,7 +192,7 @@ export default class SearchState { state.mapProperties.bounds.set( new BBox([ [lon0, lat0], - [lon1, lat1] + [lon1, lat1], ]).pad(0.01) ) } else { diff --git a/src/Logic/State/UserSettingsMetaTagging.ts b/src/Logic/State/UserSettingsMetaTagging.ts index 33a5ae85b5..6e568c5c32 100644 --- a/src/Logic/State/UserSettingsMetaTagging.ts +++ b/src/Logic/State/UserSettingsMetaTagging.ts @@ -1,14 +1,42 @@ import { Utils } from "../../Utils" /** This code is autogenerated - do not edit. Edit ./assets/layers/usersettings/usersettings.json instead */ export class ThemeMetaTagging { - public static readonly themeName = "usersettings" + public static readonly themeName = "usersettings" - public metaTaggging_for_usersettings(feat: {properties: Record}) { - Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_md', () => feat.properties._description.match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)?.at(1) ) - Utils.AddLazyProperty(feat.properties, '_d', () => feat.properties._description?.replace(/</g,'<')?.replace(/>/g,'>') ?? '' ) - Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_a', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.href.match(/mastodon|en.osm.town/) !== null)[0]?.href }) (feat) ) - Utils.AddLazyProperty(feat.properties, '_mastodon_link', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.getAttribute("rel")?.indexOf('me') >= 0)[0]?.href})(feat) ) - Utils.AddLazyProperty(feat.properties, '_mastodon_candidate', () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a ) - feat.properties['__current_backgroun'] = 'initial_value' - } -} \ No newline at end of file + public metaTaggging_for_usersettings(feat: { properties: Record }) { + Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_md", () => + feat.properties._description + .match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/) + ?.at(1) + ) + Utils.AddLazyProperty( + feat.properties, + "_d", + () => feat.properties._description?.replace(/</g, "<")?.replace(/>/g, ">") ?? "" + ) + Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_a", () => + ((feat) => { + const e = document.createElement("div") + e.innerHTML = feat.properties._d + return Array.from(e.getElementsByTagName("a")).filter( + (a) => a.href.match(/mastodon|en.osm.town/) !== null + )[0]?.href + })(feat) + ) + Utils.AddLazyProperty(feat.properties, "_mastodon_link", () => + ((feat) => { + const e = document.createElement("div") + e.innerHTML = feat.properties._d + return Array.from(e.getElementsByTagName("a")).filter( + (a) => a.getAttribute("rel")?.indexOf("me") >= 0 + )[0]?.href + })(feat) + ) + Utils.AddLazyProperty( + feat.properties, + "_mastodon_candidate", + () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a + ) + feat.properties["__current_backgroun"] = "initial_value" + } +} diff --git a/src/Logic/Tags/TagTypes.ts b/src/Logic/Tags/TagTypes.ts index 17e37d96e0..9e19bc8421 100644 --- a/src/Logic/Tags/TagTypes.ts +++ b/src/Logic/Tags/TagTypes.ts @@ -29,7 +29,6 @@ export class TagTypes { return and.and } - static safeOr(or: Or & OptimizedTag): ((FlatTag | (And & OptimizedTag)) & OptimizedTag)[] { return or.or } diff --git a/src/Logic/Tags/TagUtils.ts b/src/Logic/Tags/TagUtils.ts index 2f5506b96f..b6db516818 100644 --- a/src/Logic/Tags/TagUtils.ts +++ b/src/Logic/Tags/TagUtils.ts @@ -21,7 +21,7 @@ export class TagUtils { ["<=", (a, b) => a <= b], [">=", (a, b) => a >= b], ["<", (a, b) => a < b], - [">", (a, b) => a > b] + [">", (a, b) => a > b], ] public static modeDocumentation: Record< string, @@ -48,7 +48,7 @@ export class TagUtils { "### Removing a key\n" + "\n" + "If a key should be deleted in the OpenStreetMap-database, specify `key=` as well. This can be used e.g. to remove a\n" + - "fixme or value from another mapping if another field is filled out." + "fixme or value from another mapping if another field is filled out.", }, "!=": { name: "strict not equals", @@ -62,7 +62,7 @@ export class TagUtils { "### If key is present\n" + "\n" + "This implies that, to check if a key is present, `key!=` can be used. This will only match if the key is present and not\n" + - "empty." + "empty.", }, "~": { name: "Value matches regex", @@ -73,12 +73,12 @@ export class TagUtils { "The regex is put within braces as to prevent runaway values.\n" + "\nUse `key~*` to indicate that any value is allowed. This is effectively the check that the attribute is present (defined _and_ not empty)." + "\n" + - "Regexes will match the newline character with `.` too - the `s`-flag is enabled by default." + "Regexes will match the newline character with `.` too - the `s`-flag is enabled by default.", }, "~i~": { name: "Value matches case-invariant regex", overpassSupport: true, - docs: "A tag can also be tested against a regex with `key~i~regex`, where the case of the value will be ignored. The regex is still matched against the _entire_ value" + docs: "A tag can also be tested against a regex with `key~i~regex`, where the case of the value will be ignored. The regex is still matched against the _entire_ value", }, "!~": { name: "Value should _not_ match regex", @@ -87,27 +87,27 @@ export class TagUtils { "A tag can also be tested against a regex with `key!~regex`. This filter will match if the value does *not* match the regex. " + "\n If the\n" + "value is allowed to appear anywhere as substring, use `key~.*regex.*`.\n" + - "The regex is put within braces as to prevent runaway values.\n" + "The regex is put within braces as to prevent runaway values.\n", }, "!~i~": { name: "Value does *not* match case-invariant regex", overpassSupport: true, - docs: "A tag can also be tested against a regex with `key~i~regex`, where the case of the value will be ignored. The regex is still matched against the _entire_ value. This filter returns true if the value does *not* match" + docs: "A tag can also be tested against a regex with `key~i~regex`, where the case of the value will be ignored. The regex is still matched against the _entire_ value. This filter returns true if the value does *not* match", }, "~~": { name: "Key and value should match given regex", overpassSupport: true, - docs: "Both the `key` and `value` part of this specification are interpreted as regexes, both the key and value musth completely match their respective regexes" + docs: "Both the `key` and `value` part of this specification are interpreted as regexes, both the key and value musth completely match their respective regexes", }, "~i~~": { name: "Key and value should match a given regex; value is case-invariant", overpassSupport: true, - docs: "Similar to ~~, except that the value is case-invariant" + docs: "Similar to ~~, except that the value is case-invariant", }, "!~i~~": { name: "Key and value should match a given regex; value is case-invariant", overpassSupport: true, - docs: "Similar to !~~, except that the value is case-invariant" + docs: "Similar to !~~, except that the value is case-invariant", }, ":=": { name: "Substitute `... {some_key} ...` and match `key`", @@ -133,24 +133,24 @@ export class TagUtils { "\n" + "```json\n" + "{\n" + - " \"mappings\": [\n" + + ' "mappings": [\n' + " {\n" + - " \"if\":\"key:={some_other_key}\",\n" + - " \"then\": \"...\",\n" + - " \"hideInAnswer\": \"some_other_key=\"\n" + + ' "if":"key:={some_other_key}",\n' + + ' "then": "...",\n' + + ' "hideInAnswer": "some_other_key="\n' + " }\n" + " ]\n" + "}\n" + "```\n" + "\n" + "One can use `key!:=prefix-{other_key}-postfix` as well, to match if `key` is _not_ the same\n" + - "as `prefix-{other_key}-postfix` (with `other_key` substituted by the value)" + "as `prefix-{other_key}-postfix` (with `other_key` substituted by the value)", }, "!:=": { name: "Substitute `{some_key}` should not match `key`", overpassSupport: false, - docs: "See `:=`, except that this filter is inverted" - } + docs: "See `:=`, except that this filter is inverted", + }, } private static keyCounts: { keys: any; tags: any } = key_counts public static readonly numberAndDateComparisonDocs = @@ -175,10 +175,10 @@ export class TagUtils { "\n" + "```json\n" + "{\n" + - " \"osmTags\": {\n" + - " \"or\": [\n" + - " \"amenity=school\",\n" + - " \"amenity=kindergarten\"\n" + + ' "osmTags": {\n' + + ' "or": [\n' + + ' "amenity=school",\n' + + ' "amenity=kindergarten"\n' + " ]\n" + " }\n" + "}\n" + @@ -194,7 +194,7 @@ export class TagUtils { "If the schema-files note a type [`TagConfigJson`](https://github.com/pietervdvn/MapComplete/blob/develop/src/Models/ThemeConfig/Json/TagConfigJson.ts), you can use one of these values.\n" + "\n" + "In some cases, not every type of tags-filter can be used. For example, _rendering_ an option with a regex is\n" + - "fine (`\"if\": \"brand~[Bb]randname\", \"then\":\" The brand is Brandname\"`); but this regex can not be used to write a value\n" + + 'fine (`"if": "brand~[Bb]randname", "then":" The brand is Brandname"`); but this regex can not be used to write a value\n' + "into the database. The theme loader will however refuse to work with such inconsistencies and notify you of this while\n" + "you are building your theme.\n" + "\n" + @@ -205,18 +205,18 @@ export class TagUtils { "\n" + "```json\n" + "{\n" + - " \"and\": [\n" + - " \"key=value\",\n" + + ' "and": [\n' + + ' "key=value",\n' + " {\n" + - " \"or\": [\n" + - " \"other_key=value\",\n" + - " \"other_key=some_other_value\"\n" + + ' "or": [\n' + + ' "other_key=value",\n' + + ' "other_key=some_other_value"\n' + " ]\n" + " },\n" + - " \"key_which_should_be_missing=\",\n" + - " \"key_which_should_have_a_value~*\",\n" + - " \"key~.*some_regex_a*_b+_[a-z]?\",\n" + - " \"height<1\"\n" + + ' "key_which_should_be_missing=",\n' + + ' "key_which_should_have_a_value~*",\n' + + ' "key~.*some_regex_a*_b+_[a-z]?",\n' + + ' "height<1"\n' + " ]\n" + "}\n" + "```\n" + @@ -986,10 +986,10 @@ export class TagUtils { return ["", "## `" + mode + "` " + doc.name, "", doc.docs, "", ""].join("\n") }), "## " + - TagUtils.comparators.map((comparator) => "`" + comparator[0] + "`").join(" ") + - " Logical comparators", + TagUtils.comparators.map((comparator) => "`" + comparator[0] + "`").join(" ") + + " Logical comparators", TagUtils.numberAndDateComparisonDocs, - TagUtils.logicalOperator + TagUtils.logicalOperator, ].join("\n") } diff --git a/src/Models/MenuState.ts b/src/Models/MenuState.ts index f2ff936f86..c4105fbde8 100644 --- a/src/Models/MenuState.ts +++ b/src/Models/MenuState.ts @@ -28,7 +28,7 @@ export class MenuState { "favourites", "usersettings", "share", - "menu" + "menu", ] as const /** @@ -140,7 +140,6 @@ export class MenuState { this.isClosingAll = true const ps = this.pageStates try { - if (ps.menu.data) { ps.menu.set(false) return true @@ -177,6 +176,5 @@ export class MenuState { return } MenuState.previewedImage.setData(img) - } } diff --git a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts index 3e28b85df5..abbd5c9d9e 100644 --- a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts +++ b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts @@ -1,4 +1,14 @@ -import { Concat, Conversion, DesugaringContext, DesugaringStep, Each, Fuse, On, Pass, SetDefault } from "./Conversion" +import { + Concat, + Conversion, + DesugaringContext, + DesugaringStep, + Each, + Fuse, + On, + Pass, + SetDefault, +} from "./Conversion" import { ThemeConfigJson } from "../Json/ThemeConfigJson" import { PrepareLayer, RewriteSpecial } from "./PrepareLayer" import { LayerConfigJson } from "../Json/LayerConfigJson" @@ -30,7 +40,7 @@ class SubstituteLayer extends Conversion [ lname, - Utils.levenshteinDistance(name, lname) + Utils.levenshteinDistance(name, lname), ]) withDistance.sort((a, b) => a[1] - b[1]) const ids = withDistance.map((n) => n[0]) @@ -120,9 +130,9 @@ class SubstituteLayer extends Conversion 0) { context.err( "This theme specifies that certain tagrenderings have to be removed based on forbidden layers. One or more of these layers did not match any tagRenderings and caused no deletions: " + - unused.join(", ") + - "\n This means that this label can be removed or that the original tagRendering that should be deleted does not have this label anymore" + unused.join(", ") + + "\n This means that this label can be removed or that the original tagRendering that should be deleted does not have this label anymore" ) } found.tagRenderings = filtered @@ -195,10 +205,10 @@ export class AddDefaultLayers extends DesugaringStep { if (alreadyLoaded.has(v.id)) { context.warn( "Layout " + - context + - " already has a layer with name " + - v.id + - "; skipping inclusion of this builtin layer" + context + + " already has a layer with name " + + v.id + + "; skipping inclusion of this builtin layer" ) continue } @@ -342,10 +352,10 @@ class AddDependencyLayersToTheme extends DesugaringStep { .enters("layer dependency") .err( "Layer " + - dependency.neededLayer + - " is loaded because " + - dependency.reason + - "; so it must specify a `snapName`. This is used in the sentence `move this point to snap it to {snapName}`" + dependency.neededLayer + + " is loaded because " + + dependency.reason + + "; so it must specify a `snapName`. This is used in the sentence `move this point to snap it to {snapName}`" ) } } @@ -370,12 +380,12 @@ class AddDependencyLayersToTheme extends DesugaringStep { if (dep === undefined) { const message = [ "Loading a dependency failed: layer " + - unmetDependency.neededLayer + - " is not found, neither as layer of " + - themeId + - " nor as builtin layer.", + unmetDependency.neededLayer + + " is not found, neither as layer of " + + themeId + + " nor as builtin layer.", reason, - "Loaded layers are: " + alreadyLoaded.map((l) => l.id).join(",") + "Loaded layers are: " + alreadyLoaded.map((l) => l.id).join(","), ] throw message.join("\n\t") } @@ -385,7 +395,7 @@ class AddDependencyLayersToTheme extends DesugaringStep { dep.description = reason dependenciesToAdd.unshift({ config: dep, - reason + reason, }) loadedLayerIds.add(dep.id) unmetDependencies = unmetDependencies.filter( @@ -430,7 +440,7 @@ class AddDependencyLayersToTheme extends DesugaringStep { return { ...theme, - layers: layers + layers: layers, } } } @@ -500,10 +510,10 @@ class WarnForUnsubstitutedLayersInTheme extends DesugaringStep context.warn( "The theme " + - json.id + - " has an inline layer: " + - layer["id"] + - ". This is discouraged." + json.id + + " has an inline layer: " + + layer["id"] + + ". This is discouraged." ) } return json @@ -545,12 +555,12 @@ class PostvalidateTheme extends DesugaringStep { if (minZoomAll < layer.minzoom) { context.err( "There are multiple layers based on " + - basedOn + - ". The layer with id " + - layer.id + - " has a minzoom of " + - layer.minzoom + - ", and has a name set. Another similar layer has a lower minzoom. As such, the layer selection might show 'zoom in to see features' even though some of the features are already visible. Set `\"name\": null` for this layer and eventually remove the 'name':null for the other layer." + basedOn + + ". The layer with id " + + layer.id + + " has a minzoom of " + + layer.minzoom + + ", and has a name set. Another similar layer has a lower minzoom. As such, the layer selection might show 'zoom in to see features' even though some of the features are already visible. Set `\"name\": null` for this layer and eventually remove the 'name':null for the other layer." ) } } @@ -576,11 +586,11 @@ class PostvalidateTheme extends DesugaringStep { .enters("layers", config.id, "filter", "sameAs") .err( "The layer " + - config.id + - " follows the filter state of layer " + - sameAs + - ", but no layer with this name was found.\n\tDid you perhaps mean one of: " + - closeLayers.slice(0, 3).join(", ") + config.id + + " follows the filter state of layer " + + sameAs + + ", but no layer with this name was found.\n\tDid you perhaps mean one of: " + + closeLayers.slice(0, 3).join(", ") ) } } @@ -608,12 +618,16 @@ export class PrepareTheme extends Fuse { new SetDefault("socialImage", "assets/SocialImage.png", true), // We expand all tagrenderings first... new On("layers", new Each(new PrepareLayer(state))), - new On("popup", new Each( - new Fuse("Prepare popups", - new On("body", new Each(new RewriteSpecial())), - new On("title", new RewriteSpecial()) + new On( + "popup", + new Each( + new Fuse( + "Prepare popups", + new On("body", new Each(new RewriteSpecial())), + new On("title", new RewriteSpecial()) + ) ) - )), + ), // Then we apply the override all. We must first expand everything in case that we override something in an expanded tag // Note that it'll cheat with tagRenderings+ diff --git a/src/Models/ThemeConfig/Json/ThemeConfigJson.ts b/src/Models/ThemeConfig/Json/ThemeConfigJson.ts index 654a6b7462..bebc25b82e 100644 --- a/src/Models/ThemeConfig/Json/ThemeConfigJson.ts +++ b/src/Models/ThemeConfig/Json/ThemeConfigJson.ts @@ -483,11 +483,11 @@ export interface ThemeConfigJson { */ dismissible?: boolean condition?: TagConfigJson - title: TagRenderingConfigJson, - body: TagRenderingConfigJson[], + title: TagRenderingConfigJson + body: TagRenderingConfigJson[] /** * id of the popup, mostly to keep the translations in check */ - id: string, + id: string }[] } diff --git a/src/Models/ThemeConfig/TagRenderingConfig.ts b/src/Models/ThemeConfig/TagRenderingConfig.ts index 313cd1bd0b..a03a8a9b92 100644 --- a/src/Models/ThemeConfig/TagRenderingConfig.ts +++ b/src/Models/ThemeConfig/TagRenderingConfig.ts @@ -5,7 +5,10 @@ import { TagUtils } from "../../Logic/Tags/TagUtils" import { And } from "../../Logic/Tags/And" import { Utils } from "../../Utils" import { Tag } from "../../Logic/Tags/Tag" -import { MappingConfigJson, QuestionableTagRenderingConfigJson } from "./Json/QuestionableTagRenderingConfigJson" +import { + MappingConfigJson, + QuestionableTagRenderingConfigJson, +} from "./Json/QuestionableTagRenderingConfigJson" import Validators, { ValidatorType } from "../../UI/InputElement/Validators" import { TagRenderingConfigJson } from "./Json/TagRenderingConfigJson" import { RegexTag } from "../../Logic/Tags/RegexTag" @@ -223,7 +226,7 @@ export default class TagRenderingConfig { inline: json.freeform.inline ?? false, default: json.freeform.default, postfixDistinguished: json.freeform.postfixDistinguished?.trim(), - args: json.freeform.helperArgs + args: json.freeform.helperArgs, } if (json.freeform["extraTags"] !== undefined) { throw `Freeform.extraTags is defined. This should probably be 'freeform.addExtraTag' (at ${context})` @@ -447,7 +450,7 @@ export default class TagRenderingConfig { iconClass, addExtraTags, searchTerms: mapping.searchTerms, - priorityIf: prioritySearch + priorityIf: prioritySearch, } if (isQuestionable) { if (hideInAnswer !== true && mp.if !== undefined && !mp.if.isUsableAsAnswer()) { @@ -554,7 +557,7 @@ export default class TagRenderingConfig { then: new TypedTranslation( this.render.replace("{" + this.freeform.key + "}", leftover).translations, this.render.context - ) + ), }) } } @@ -607,7 +610,7 @@ export default class TagRenderingConfig { return { then: this.render.PartialSubs({ [this.freeform.key]: v.trim() }), icon: this.renderIcon, - iconClass: this.renderIconClass + iconClass: this.renderIconClass, } } } @@ -662,7 +665,7 @@ export default class TagRenderingConfig { key: commonKey, values: Utils.NoNull( values.map((arr) => arr.filter((item) => item.k === commonKey)[0]?.v) - ) + ), } } @@ -677,7 +680,7 @@ export default class TagRenderingConfig { return { key, type: this.freeform.type, - values + values, } } catch (e) { console.error("Could not create FreeformValues for tagrendering", this.id) @@ -753,7 +756,7 @@ export default class TagRenderingConfig { const allValues = v.split(";").map((s) => s.trim()) const perPostfix: Record = {} for (const value of allValues) { - const [v, postfix] = value.split("/").map(s => s.trim()) + const [v, postfix] = value.split("/").map((s) => s.trim()) perPostfix[postfix ?? pf] = v.trim() } if (freeformValue === "" || freeformValue === undefined) { @@ -790,7 +793,7 @@ export default class TagRenderingConfig { // Either no mappings, or this is a radio-button selected freeform value const tag = [ new Tag(this.freeform.key, freeformValue), - ...(this.freeform.addExtraTags ?? []) + ...(this.freeform.addExtraTags ?? []), ] const newProperties = new And(tag).applyOn(currentProperties) if (this.invalidValues?.matchesProperties(newProperties)) { @@ -814,7 +817,7 @@ export default class TagRenderingConfig { selectedMappings.push( new And([ new Tag(this.freeform.key, freeformValue), - ...(this.freeform.addExtraTags ?? []) + ...(this.freeform.addExtraTags ?? []), ]) ) } @@ -847,12 +850,12 @@ export default class TagRenderingConfig { if (useFreeform) { return [ new Tag(this.freeform.key, freeformValue), - ...(this.freeform.addExtraTags ?? []) + ...(this.freeform.addExtraTags ?? []), ] } else if (singleSelectedMapping !== undefined) { return [ this.mappings[singleSelectedMapping].if, - ...(this.mappings[singleSelectedMapping].addExtraTags ?? []) + ...(this.mappings[singleSelectedMapping].addExtraTags ?? []), ] } else { console.error("TagRenderingConfig.ConstructSpecification has a weird fallback for", { @@ -860,7 +863,7 @@ export default class TagRenderingConfig { singleSelectedMapping, multiSelectedMapping, currentProperties, - useFreeform + useFreeform, }) return undefined } @@ -889,11 +892,11 @@ export default class TagRenderingConfig { } const msgs: string[] = [ icon + - " " + - "*" + - m.then.textFor(lang) + - "* is shown if with " + - m.if.asHumanString(true, false, {}) + " " + + "*" + + m.then.textFor(lang) + + "* is shown if with " + + m.if.asHumanString(true, false, {}), ] if (m.hideInAnswer === true) { @@ -902,7 +905,7 @@ export default class TagRenderingConfig { if (m.ifnot !== undefined) { msgs.push( "Unselecting this answer will add " + - m.ifnot.asHumanString(true, false, {}) + m.ifnot.asHumanString(true, false, {}) ) } return msgs.join(". ") @@ -926,7 +929,7 @@ export default class TagRenderingConfig { if (this.labels?.length > 0) { labels = [ "This tagrendering has labels ", - ...this.labels.map((label) => "`" + label + "`") + ...this.labels.map((label) => "`" + label + "`"), ].join("\n") } @@ -939,7 +942,7 @@ export default class TagRenderingConfig { freeform, mappings, condition, - labels + labels, ].join("\n") } @@ -983,7 +986,7 @@ export default class TagRenderingConfig { if (part.indexOf("/") < 0) { continue } - const [v, denom] = part.split("/").map(s => s.trim()) + const [v, denom] = part.split("/").map((s) => s.trim()) if (denom === distinguish) { return v } @@ -1043,19 +1046,21 @@ export default class TagRenderingConfig { /** * Gives all the tags that should be applied to "reset" the freeform key to an "unknown" state */ - public markUnknown(layer: LayerConfig, currentProperties: Record): UploadableTag[] { + public markUnknown( + layer: LayerConfig, + currentProperties: Record + ): UploadableTag[] { if (this.freeform?.postfixDistinguished) { const v = currentProperties[this.freeform.key] ?? "" - const allValues = v.split(";").filter( - part => part.split("/")[1]?.trim() !== this.freeform.postfixDistinguished - ) + const allValues = v + .split(";") + .filter((part) => part.split("/")[1]?.trim() !== this.freeform.postfixDistinguished) return [new Tag(this.freeform.key, allValues.join(";"))] } const keys = this.removeToSetUnknown(layer, currentProperties) - - return keys?.map(k => new Tag(k, "")) + return keys?.map((k) => new Tag(k, "")) } } @@ -1095,7 +1100,7 @@ export class TagRenderingConfigUtils { clone.mappings?.map((m) => { const mapping = { ...m, - priorityIf: m.priorityIf ?? TagUtils.Tag("id~*") + priorityIf: m.priorityIf ?? TagUtils.Tag("id~*"), } if (m.if.usedKeys().indexOf("nobrand") < 0) { // Erase 'nobrand=yes', unless this option explicitly sets it diff --git a/src/Models/ThemeConfig/ThemeConfig.ts b/src/Models/ThemeConfig/ThemeConfig.ts index ad677a380b..bb96fe744e 100644 --- a/src/Models/ThemeConfig/ThemeConfig.ts +++ b/src/Models/ThemeConfig/ThemeConfig.ts @@ -98,10 +98,10 @@ export default class ThemeConfig implements ThemeInformation { public readonly enableCache: boolean public readonly popups: Readonly<{ - id: string, - dismissible?: boolean, - condition: TagsFilter, - title: TagRenderingConfig, + id: string + dismissible?: boolean + condition: TagsFilter + title: TagRenderingConfig body: TagRenderingConfig[] }>[] @@ -205,7 +205,7 @@ export default class ThemeConfig implements ThemeInformation { icon: "./assets/svg/pop-out.svg", href: "https://{basepath}/{theme}.html?lat={lat}&lon={lon}&z={zoom}&language={language}", newTab: true, - requirements: ["iframe", "no-welcome-message"] + requirements: ["iframe", "no-welcome-message"], }, context + ".extraLink" ) @@ -213,7 +213,7 @@ export default class ThemeConfig implements ThemeInformation { this.popups = (json.popup ?? []).map((p, i) => { const ctx = context + ".popup." + i if (!p.id) { - throw (ctx + ": an id is required") + throw ctx + ": an id is required" } const body: TagRenderingConfigJson[] = Array.isArray(p.body) ? p.body : [p.body] return { @@ -221,7 +221,7 @@ export default class ThemeConfig implements ThemeInformation { dismissible: p.dismissible ?? false, condition: TagUtils.Tag(p.condition), title: new TagRenderingConfig(p.title, ctx + ".title"), - body: body.map((body, i) => new TagRenderingConfig(body, ctx + ".body." + i)) + body: body.map((body, i) => new TagRenderingConfig(body, ctx + ".body." + i)), } }) @@ -378,7 +378,7 @@ export default class ThemeConfig implements ThemeInformation { // The 'favourite'-layer contains pretty much all images as it bundles all layers, so we exclude it const jsonNoFavourites = { ...json, - layers: json.layers.filter((l) => l["id"] !== "favourite") + layers: json.layers.filter((l) => l["id"] !== "favourite"), } const usedImages = jsonNoFavourites._usedImages usedImages.sort() diff --git a/src/UI/Base/Popup.svelte b/src/UI/Base/Popup.svelte index 96df2ac07c..f5290107b0 100644 --- a/src/UI/Base/Popup.svelte +++ b/src/UI/Base/Popup.svelte @@ -24,11 +24,13 @@ let dialogClass = "fixed top-0 start-0 end-0 h-modal inset-0 w-full p-4 flex border-none " + zIndex - export let backdropClass = "fixed inset-0 z-40 bg-gray-900 bg-opacity-50 dark:bg-opacity-80 frozen-glass" + export let backdropClass = + "fixed inset-0 z-40 bg-gray-900 bg-opacity-50 dark:bg-opacity-80 frozen-glass" if (fullscreen) { dialogClass += " h-full-child" } - let bodyClass = bodyPadding + " h-full space-y-4 flex-1 overflow-y-auto overscroll-contain background-normal" + let bodyClass = + bodyPadding + " h-full space-y-4 flex-1 overflow-y-auto overscroll-contain background-normal" let headerClass = "flex justify-between items-center p-2 px-4 md:px-5 rounded-t-lg" if (!$$slots.header) { @@ -42,7 +44,7 @@ shown.set(false)} + on:close={() => shown.set(false)} outsideclose={dismissable} size="xl" {dismissable} diff --git a/src/UI/Image/LinkableImage.svelte b/src/UI/Image/LinkableImage.svelte index c1527215f7..a5748885b6 100644 --- a/src/UI/Image/LinkableImage.svelte +++ b/src/UI/Image/LinkableImage.svelte @@ -88,8 +88,7 @@ image={providedImage} imgClass="max-h-64 w-auto sm:h-32 md:h-64" attributionFormat="minimal" - > - + /> {#if linkable}