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 1/8] 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 2/8] 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 3/8] 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 4/8] 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 5/8] 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 6/8] 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 7/8] 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 8/8] 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=" + ] } ] }