diff --git a/.forgejo/workflows/deploy_hosted.yml b/.forgejo/workflows/deploy_hosted.yml
index 80347594c0..2664762d60 100644
--- a/.forgejo/workflows/deploy_hosted.yml
+++ b/.forgejo/workflows/deploy_hosted.yml
@@ -54,6 +54,7 @@ jobs:
- name: Zipping dist file
run: |
BRANCH=$(echo ${{ github.ref_name }} | sed 's/\//-/g')
+ rm -rf /tmp/${BRANCH}
mv dist /tmp/${BRANCH}
cd /tmp
zip ${BRANCH}.zip -r ${BRANCH}/*
@@ -72,7 +73,7 @@ jobs:
- name: unzipping remote file
run: |
BRANCH=$(echo ${{ github.ref_name }} | sed 's/\//-/g')
- ssh hetzner "cd /root/staging && rm -rf ${BRANCH} && unzip ${BRANCH}.zip && rm -rf /root/public/${BRANCH} && mv /root/staging/${BRANCH}/ /root/public/ && rm ${BRANCH}.zip"
+ ssh hetzner "cd /root/staging && rm -rf ${BRANCH} && unzip ${BRANCH}.zip && rm -rf /root/public/${BRANCH} && mv /root/staging/${BRANCH}/ /root/public/ && date --iso > /root/staging/${BRANCH}/date.txt && rm ${BRANCH}.zip"
- name: Comment on the PR
run: |
diff --git a/assets/layers/atm/atm.json b/assets/layers/atm/atm.json
index c0df058aa0..251915e39c 100644
--- a/assets/layers/atm/atm.json
+++ b/assets/layers/atm/atm.json
@@ -241,6 +241,30 @@
}
},
"opening_hours_24_7",
+ {
+ "builtin": "indoor",
+ "override": {
+ "question": {
+ "en": "Is this ATM located indoors?",
+ "nl": "Bevindt deze geldautomaat zich binnen?"
+ },
+ "mappings": [
+ {
+ "then": {
+ "en": "This ATM is located indoors",
+ "nl": "Deze geldautomaat bevindt zich binnen"
+ }
+ },
+ {
+ "if": "indoor=no",
+ "then": {
+ "en": "This ATM is located outdoors",
+ "nl": "Deze geldautomaat bevindt zich buiten"
+ }
+ }
+ ]
+ }
+ },
{
"id": "cash_out",
"question": {
@@ -650,4 +674,4 @@
"enableImproveAccuracy": true,
"enableRelocation": false
}
-}
+}
\ No newline at end of file
diff --git a/assets/layers/hydrant/hydrant.json b/assets/layers/hydrant/hydrant.json
index 66a5f2bd50..9532f217df 100644
--- a/assets/layers/hydrant/hydrant.json
+++ b/assets/layers/hydrant/hydrant.json
@@ -574,6 +574,29 @@
"es": "Diámetro de los acoplamientos: {couplings:diameters}"
}
},
+ {
+ "id": "ref",
+ "question": {
+ "en": "What is the reference number of this hydrant?",
+ "nl": "Wat is het referentienummer van deze brandkraan?"
+ },
+ "questionHint": {
+ "en": "This can usually be found on the hydrant or on a nearby sign.",
+ "nl": "Dit nummer is meestal te vinden op de brandkraan of op een nabijgelegen bord."
+ },
+ "freeform": {
+ "key": "ref",
+ "placeholder": {
+ "en": "Reference number of the hydrant",
+ "nl": "Referentienummer van de brandkraan"
+ },
+ "type": "string"
+ },
+ "render": {
+ "en": "Reference number: {ref}",
+ "nl": "Referentienummer: {ref}"
+ }
+ },
"images"
],
"allowMove": {
@@ -590,4 +613,4 @@
}
}
]
-}
+}
\ No newline at end of file
diff --git a/assets/layers/street_lamps/street_lamps.json b/assets/layers/street_lamps/street_lamps.json
index ddcc1be946..0f618e8133 100644
--- a/assets/layers/street_lamps/street_lamps.json
+++ b/assets/layers/street_lamps/street_lamps.json
@@ -82,6 +82,26 @@
],
"tagRenderings": [
"images",
+ {
+ "id": "utility_pole",
+ "question": {
+ "en": "Is this lamp mounted on a utility pole?"
+ },
+ "mappings": [
+ {
+ "if": "man_made=utility_pole",
+ "then": {
+ "en": "This lamp is mounted on a utility pole"
+ }
+ },
+ {
+ "if": "man_made=",
+ "then": {
+ "en": "This lamp is not mounted on a utility pole"
+ }
+ }
+ ]
+ },
{
"id": "ref",
"render": {
@@ -104,7 +124,10 @@
},
"freeform": {
"key": "ref"
- }
+ },
+ "labels": [
+ "street_lamp_question"
+ ]
},
{
"id": "support",
@@ -194,6 +217,10 @@
"cs": "Toto svítidlo se montuje na stěnu pomocí kovové tyče"
}
}
+ ],
+ "condition": "man_made!=utility_pole",
+ "labels": [
+ "street_lamp_question"
]
},
{
@@ -206,7 +233,12 @@
"ca": "Com està muntat aquest fanal al pal?",
"cs": "Jak se tato lampa montuje na sloup?"
},
- "condition": "support=pole",
+ "condition": {
+ "and": [
+ "support=pole",
+ "man_made!=utility_pole"
+ ]
+ },
"mappings": [
{
"if": "lamp_mount=straight_mast",
@@ -230,6 +262,9 @@
"cs": "Tato lampa je umístěna na konci ohnutého stožáru"
}
}
+ ],
+ "labels": [
+ "street_lamp_question"
]
},
{
@@ -376,6 +411,9 @@
"cs": "Tato lampa svítí pomocí plynu"
}
}
+ ],
+ "labels": [
+ "street_lamp_question"
]
},
{
@@ -434,6 +472,9 @@
"cs": "Tato lampa vydává oranžové světlo"
}
}
+ ],
+ "labels": [
+ "street_lamp_question"
]
},
{
@@ -482,6 +523,9 @@
"es": "Esta lámpara tiene 2 accesorios"
}
}
+ ],
+ "labels": [
+ "street_lamp_question"
]
},
{
@@ -539,6 +583,9 @@
"cs": "Tato lampa se rozsvítí na základě požadavku (např. pomocí tlačítka)"
}
}
+ ],
+ "labels": [
+ "street_lamp_question"
]
},
{
@@ -563,7 +610,10 @@
"freeform": {
"key": "light:direction",
"type": "direction"
- }
+ },
+ "labels": [
+ "street_lamp_question"
+ ]
}
],
"deletion": {},
@@ -571,4 +621,4 @@
"enableImproveAccuracy": true,
"enableRelocation": false
}
-}
+}
\ No newline at end of file
diff --git a/assets/layers/utility_pole/license_info.json b/assets/layers/utility_pole/license_info.json
new file mode 100644
index 0000000000..4814fcc566
--- /dev/null
+++ b/assets/layers/utility_pole/license_info.json
@@ -0,0 +1,10 @@
+[
+ {
+ "path": "utility_pole.svg",
+ "license": "CC0-1.0",
+ "authors": [
+ "Robin van der Linde"
+ ],
+ "sources": []
+ }
+]
\ No newline at end of file
diff --git a/assets/layers/utility_pole/utility_pole.json b/assets/layers/utility_pole/utility_pole.json
new file mode 100644
index 0000000000..cfda46bab4
--- /dev/null
+++ b/assets/layers/utility_pole/utility_pole.json
@@ -0,0 +1,65 @@
+{
+ "id": "utility_pole",
+ "name": {
+ "en": "Utility Poles"
+ },
+ "source": {
+ "osmTags": "man_made=utility_pole"
+ },
+ "title": {
+ "en": "Utility Pole"
+ },
+ "description": {
+ "en": "Layer showing various types of utility poles."
+ },
+ "tagRenderings": [
+ {
+ "id": "street_lamp",
+ "question": {
+ "en": "Does this utility pole have a street lamp mounted on it?"
+ },
+ "mappings": [
+ {
+ "if": "highway=street_lamp",
+ "then": {
+ "en": "This utility pole has a street lamp mounted on it."
+ }
+ },
+ {
+ "if": "highway=",
+ "then": {
+ "en": "This utility pole does not have a street lamp mounted on it."
+ }
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "tags": [
+ "man_made=utility_pole"
+ ],
+ "title": {
+ "en": "a utility pole"
+ }
+ }
+ ],
+ "pointRendering": [
+ {
+ "marker": [
+ {
+ "icon": "./assets/layers/utility_pole/utility_pole.svg"
+ }
+ ],
+ "location": [
+ "point",
+ "centroid"
+ ]
+ }
+ ],
+ "minzoom": 18,
+ "allowMove": {
+ "enableImproveAccuracy": true,
+ "enableRelocation": false
+ }
+}
\ No newline at end of file
diff --git a/assets/layers/utility_pole/utility_pole.svg b/assets/layers/utility_pole/utility_pole.svg
new file mode 100644
index 0000000000..81c22e227d
--- /dev/null
+++ b/assets/layers/utility_pole/utility_pole.svg
@@ -0,0 +1,82 @@
+
+
diff --git a/assets/layers/utility_pole/utility_pole.svg.license b/assets/layers/utility_pole/utility_pole.svg.license
new file mode 100644
index 0000000000..75299f8845
--- /dev/null
+++ b/assets/layers/utility_pole/utility_pole.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Robin van der Linde
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/layers/wayside_shrine/wayside_shrine.json b/assets/layers/wayside_shrine/wayside_shrine.json
index 7b6de4a462..af9a5fc90b 100644
--- a/assets/layers/wayside_shrine/wayside_shrine.json
+++ b/assets/layers/wayside_shrine/wayside_shrine.json
@@ -280,7 +280,11 @@
"render": {
"en": "This shrine is {religion}"
},
- "condition": "historic!=wayside_cross"
+ "condition": {
+ "and": [
+ "historic!=wayside_cross"
+ ]
+ }
},
{
"question": {
@@ -493,4 +497,4 @@
},
"credits": "Bastian Greshake Tzovaras",
"credits:uid": 20617622
-}
+}
\ No newline at end of file
diff --git a/assets/themes/pets/pets.json b/assets/themes/pets/pets.json
index bf5e6476ce..7754ef03ef 100644
--- a/assets/themes/pets/pets.json
+++ b/assets/themes/pets/pets.json
@@ -98,6 +98,35 @@
"name": null
}
},
+ {
+ "builtin": "shops",
+ "override": {
+ "id": "pet_shops",
+ "name": {
+ "en": "Pet stores",
+ "nl": "Dierenwinkels"
+ },
+ "=presets": [
+ {
+ "tags": [
+ "shop=pet"
+ ],
+ "title": {
+ "en": "a pet shop",
+ "nl": "een dierenwinkel"
+ }
+ }
+ ],
+ "source": {
+ "osmTags": {
+ "and": [
+ "shop=pet"
+ ]
+ }
+ },
+ "=filter": []
+ }
+ },
{
"builtin": "shops",
"override": {
@@ -185,4 +214,4 @@
}
}
]
-}
+}
\ No newline at end of file
diff --git a/assets/themes/street_lighting/street_lighting.json b/assets/themes/street_lighting/street_lighting.json
index 133d3536f0..f114f83212 100644
--- a/assets/themes/street_lighting/street_lighting.json
+++ b/assets/themes/street_lighting/street_lighting.json
@@ -45,6 +45,20 @@
],
"layers": [
"street_lamps",
+ {
+ "builtin": "utility_pole",
+ "override": {
+ "tagRenderings+": [
+ {
+ "builtin": "street_lamps.street_lamp_question",
+ "override": {
+ "condition": "highway=street_lamp"
+ }
+ }
+ ],
+ "shownByDefault": false
+ }
+ },
{
"id": "lit_streets",
"name": {
diff --git a/assets/themes/street_lighting_assen/street_lighting_assen.json b/assets/themes/street_lighting_assen/street_lighting_assen.json
index 1cca1a0ad5..c4ec176d5e 100644
--- a/assets/themes/street_lighting_assen/street_lighting_assen.json
+++ b/assets/themes/street_lighting_assen/street_lighting_assen.json
@@ -15,7 +15,13 @@
],
"hideFromOverview": true,
"layers": [
- "street_lamps",
+ {
+ "builtin": "street_lamps",
+ "hideTagRenderingsWithLabels": [
+ "utility_pole"
+ ],
+ "override": {}
+ },
{
"id": "assen",
"name": "Dataset Assen",
@@ -76,4 +82,4 @@
}
}
]
-}
+}
\ No newline at end of file
diff --git a/langs/themes/ca.json b/langs/themes/ca.json
index 7313559afe..b3945108b1 100644
--- a/langs/themes/ca.json
+++ b/langs/themes/ca.json
@@ -755,7 +755,7 @@
"name": "Restaurants que accepten gossos"
}
},
- "6": {
+ "7": {
"override": {
"name": "Botigues amigues dels gossos"
}
@@ -873,7 +873,7 @@
"street_lighting": {
"description": "En aquest mapa pots trobar tot el relacionat amb l'enllumenat públic",
"layers": {
- "1": {
+ "2": {
"name": "Il·luminació de carrers",
"tagRenderings": {
"lit": {
@@ -898,7 +898,7 @@
"render": "Il·luminació del carrer"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/cs.json b/langs/themes/cs.json
index d08ee07348..05648107f4 100644
--- a/langs/themes/cs.json
+++ b/langs/themes/cs.json
@@ -1048,12 +1048,12 @@
"name": "Restaurace vhodné pro vstup se psy"
}
},
- "6": {
+ "7": {
"override": {
"name": "Obchody vhodné pro vstup se psy"
}
},
- "8": {
+ "9": {
"override": {
"name=": "Odpadkové koše se sáčky na exkrementy"
}
@@ -1231,7 +1231,7 @@
"street_lighting": {
"description": "Na této mapě najdete vše o pouličním osvětlení",
"layers": {
- "1": {
+ "2": {
"name": "Osvětlené ulice",
"tagRenderings": {
"lit": {
@@ -1256,7 +1256,7 @@
"render": "Osvětlená ulice"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/da.json b/langs/themes/da.json
index 5c7dd8b286..143de74828 100644
--- a/langs/themes/da.json
+++ b/langs/themes/da.json
@@ -598,7 +598,7 @@
"name": "Hundevenlige madsteder"
}
},
- "6": {
+ "7": {
"override": {
"name": "hundevenlig butik"
}
@@ -684,7 +684,7 @@
"street_lighting": {
"description": "På dette kort kan du finde alt om gadebelysning",
"layers": {
- "1": {
+ "2": {
"name": "Oplyste gader",
"tagRenderings": {
"lit": {
@@ -709,7 +709,7 @@
"render": "Oplyst gade"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/de.json b/langs/themes/de.json
index 988fd937e5..47946dc198 100644
--- a/langs/themes/de.json
+++ b/langs/themes/de.json
@@ -1034,12 +1034,12 @@
"name": "Hundefreundliche Restaurants"
}
},
- "6": {
+ "7": {
"override": {
"name": "Hundefreundliche Geschäfte"
}
},
- "8": {
+ "9": {
"override": {
"name=": "Mülleimer mit Spender für Kotbeutel"
}
@@ -1212,7 +1212,7 @@
"street_lighting": {
"description": "Eine Karte für alles zum Thema Straßenbeleuchtung",
"layers": {
- "1": {
+ "2": {
"name": "Beleuchtete Straßen",
"tagRenderings": {
"lit": {
@@ -1237,7 +1237,7 @@
"render": "Beleuchtete Straße"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/en.json b/langs/themes/en.json
index bf5720e340..1adaea5006 100644
--- a/langs/themes/en.json
+++ b/langs/themes/en.json
@@ -1073,11 +1073,21 @@
}
},
"6": {
+ "override": {
+ "=presets": {
+ "0": {
+ "title": "a pet shop"
+ }
+ },
+ "name": "Pet stores"
+ }
+ },
+ "7": {
"override": {
"name": "Dog-friendly shops"
}
},
- "8": {
+ "9": {
"override": {
"name=": "Waste baskets with excrement bag dispensers"
}
@@ -1255,7 +1265,7 @@
"street_lighting": {
"description": "On this map you can find everything about street lighting",
"layers": {
- "1": {
+ "2": {
"name": "Lit streets",
"tagRenderings": {
"lit": {
@@ -1280,7 +1290,7 @@
"render": "Lit street"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/es.json b/langs/themes/es.json
index f6bc95ee11..ed6855f782 100644
--- a/langs/themes/es.json
+++ b/langs/themes/es.json
@@ -1008,7 +1008,7 @@
"name": "Restaurantes que admiten perros"
}
},
- "6": {
+ "7": {
"override": {
"name": "Tiendas que admiten perros"
}
@@ -1156,7 +1156,7 @@
"street_lighting": {
"description": "En este mapa puedes encontrar todo sobre el alumbrado público",
"layers": {
- "1": {
+ "2": {
"name": "Calles iluminadas",
"tagRenderings": {
"lit": {
@@ -1181,7 +1181,7 @@
"render": "Calle iluminada"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/fr.json b/langs/themes/fr.json
index 0686170e04..1035857e68 100644
--- a/langs/themes/fr.json
+++ b/langs/themes/fr.json
@@ -834,7 +834,7 @@
"name": "Restaurants acceptant les chiens"
}
},
- "6": {
+ "7": {
"override": {
"name": "Magasins acceptant les chiens"
}
@@ -956,7 +956,7 @@
"street_lighting": {
"description": "Retrouvez tout ce qui touche à l’éclairage de rue sur cette carte",
"layers": {
- "1": {
+ "2": {
"name": "Rues éclairées",
"tagRenderings": {
"lit": {
@@ -981,7 +981,7 @@
"render": "Rue éclairée"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/hu.json b/langs/themes/hu.json
index c4e89bb5c7..e77abe32b4 100644
--- a/langs/themes/hu.json
+++ b/langs/themes/hu.json
@@ -405,7 +405,7 @@
"street_lighting": {
"description": "Ezen a térképen minden megtalálható, ami a közvilágítással kapcsolatos",
"layers": {
- "1": {
+ "2": {
"name": "Kivilágított utcák",
"tagRenderings": {
"lit": {
@@ -430,7 +430,7 @@
"render": "Kivilágított utca"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/it.json b/langs/themes/it.json
index fc77a01064..3721bf7dd3 100644
--- a/langs/themes/it.json
+++ b/langs/themes/it.json
@@ -471,7 +471,7 @@
"name": "Ristoranti che accettano i cani"
}
},
- "6": {
+ "7": {
"override": {
"name": "Negozi che accettano i cani"
}
@@ -540,7 +540,7 @@
"street_lighting": {
"description": "Su questa mappa puoi trovare tutto ciò che riguarda l'illuminazione stradale",
"layers": {
- "1": {
+ "2": {
"name": "Strade illuminate",
"tagRenderings": {
"lit": {
@@ -565,7 +565,7 @@
"render": "Strada illuminata"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/ko.json b/langs/themes/ko.json
index 1e1e49476b..7302f5ada3 100644
--- a/langs/themes/ko.json
+++ b/langs/themes/ko.json
@@ -994,7 +994,7 @@
"name": "반려견 친화적 식당"
}
},
- "6": {
+ "7": {
"override": {
"name": "반려견 친화적 상점"
}
@@ -1142,7 +1142,7 @@
"street_lighting": {
"description": "이 지도에서 가로등에 관한 모든 것을 찾을 수 있습니다",
"layers": {
- "1": {
+ "2": {
"name": "조명이 있는 거리",
"tagRenderings": {
"lit": {
@@ -1167,7 +1167,7 @@
"render": "밝은 거리"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/nb_NO.json b/langs/themes/nb_NO.json
index 46055c0f66..9d0d67a790 100644
--- a/langs/themes/nb_NO.json
+++ b/langs/themes/nb_NO.json
@@ -349,7 +349,7 @@
"name": "Hundevennlige spisesteder"
}
},
- "6": {
+ "7": {
"override": {
"name": "Hundevennlige butikker"
}
@@ -414,7 +414,7 @@
"street_lighting": {
"description": "Alt om gatebelysning",
"layers": {
- "1": {
+ "2": {
"name": "Belyste gater",
"tagRenderings": {
"lit": {
@@ -439,7 +439,7 @@
"render": "Belyst gate"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/nl.json b/langs/themes/nl.json
index 6597630507..6daef08702 100644
--- a/langs/themes/nl.json
+++ b/langs/themes/nl.json
@@ -1093,11 +1093,21 @@
}
},
"6": {
+ "override": {
+ "=presets": {
+ "0": {
+ "title": "een dierenwinkel"
+ }
+ },
+ "name": "Dierenwinkels"
+ }
+ },
+ "7": {
"override": {
"name": "Hondvriendelijke winkels"
}
},
- "8": {
+ "9": {
"override": {
"name=": "Vuilnisbakken met verdelers voor hondenpoepzakjes"
}
@@ -1291,7 +1301,7 @@
"street_lighting": {
"description": "Op deze kaart vind je alles over straatlantaarns",
"layers": {
- "1": {
+ "2": {
"name": "Verlichte straten",
"tagRenderings": {
"lit": {
@@ -1316,7 +1326,7 @@
"render": "Verlichte straat"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/pa_PK.json b/langs/themes/pa_PK.json
index c5879317aa..27775f49c4 100644
--- a/langs/themes/pa_PK.json
+++ b/langs/themes/pa_PK.json
@@ -131,7 +131,7 @@
},
"pets": {
"layers": {
- "6": {
+ "7": {
"override": {
"name": "کُتیاں دی اِجازت دیاں دکاناں"
}
@@ -153,7 +153,7 @@
},
"street_lighting": {
"layers": {
- "1": {
+ "2": {
"name": "روشنی والیاں سڑکاں",
"title": {
"render": "روشنی والی سڑک"
diff --git a/langs/themes/pl.json b/langs/themes/pl.json
index adc045a154..699d12bbd2 100644
--- a/langs/themes/pl.json
+++ b/langs/themes/pl.json
@@ -711,7 +711,7 @@
"name": "Restauracje przyjazne psom"
}
},
- "6": {
+ "7": {
"override": {
"name": "Sklepy przyjazne psom"
}
@@ -829,7 +829,7 @@
"street_lighting": {
"description": "Na tej mapie możesz znaleźć wszystko o oświetleniu ulicznym",
"layers": {
- "1": {
+ "2": {
"name": "Oświetlone ulice",
"tagRenderings": {
"lit": {
@@ -854,7 +854,7 @@
"render": "Ulica oświetlona"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/langs/themes/uk.json b/langs/themes/uk.json
index 01738ca571..6214bf12df 100644
--- a/langs/themes/uk.json
+++ b/langs/themes/uk.json
@@ -514,12 +514,12 @@
"name": "Заклади харчування, дружні до собак"
}
},
- "6": {
+ "7": {
"override": {
"name": "Магазини, дружні до собак"
}
},
- "8": {
+ "9": {
"override": {
"name=": "Кошики для сміття з дозаторами для пакетів для екскрементів"
}
diff --git a/langs/themes/zh_Hant.json b/langs/themes/zh_Hant.json
index 3278776d81..63b761424f 100644
--- a/langs/themes/zh_Hant.json
+++ b/langs/themes/zh_Hant.json
@@ -678,7 +678,7 @@
"name": "寵物友善餐廳"
}
},
- "6": {
+ "7": {
"override": {
"name": "寵物友善商家"
}
@@ -781,7 +781,7 @@
"street_lighting": {
"description": "在這份地圖你可以找到任何有關路燈的事情",
"layers": {
- "1": {
+ "2": {
"name": "有照明的道路",
"tagRenderings": {
"lit": {
@@ -806,7 +806,7 @@
"render": "照明道路"
}
},
- "2": {
+ "3": {
"override": {
"tagRenderings+": {
"0": {
diff --git a/package-lock.json b/package-lock.json
index 5cf482c453..a1f84ad32f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -84,6 +84,7 @@
"showdown": "^2.1.0",
"svelte": "^3.59.2",
"svg-path-parser": "^1.1.0",
+ "tag2link": "^2025.3.21",
"tailwind-merge": "^1.14.0",
"tailwindcss": "^3.4.17",
"ts-node": "^10.9.2",
@@ -26406,6 +26407,12 @@
"version": "3.2.4",
"license": "MIT"
},
+ "node_modules/tag2link": {
+ "version": "2025.3.21",
+ "resolved": "https://registry.npmjs.org/tag2link/-/tag2link-2025.3.21.tgz",
+ "integrity": "sha512-JvRTQdY/z0vAEFUzL7rhLndNiDnStlurW+1jgXL5FW+GppR2T/dq2lXMEppbFNxJ9C4h5b+ykjcMPH791YeLdA==",
+ "license": "ISC"
+ },
"node_modules/tailwind-merge": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz",
@@ -48559,6 +48566,11 @@
"symbol-tree": {
"version": "3.2.4"
},
+ "tag2link": {
+ "version": "2025.3.21",
+ "resolved": "https://registry.npmjs.org/tag2link/-/tag2link-2025.3.21.tgz",
+ "integrity": "sha512-JvRTQdY/z0vAEFUzL7rhLndNiDnStlurW+1jgXL5FW+GppR2T/dq2lXMEppbFNxJ9C4h5b+ykjcMPH791YeLdA=="
+ },
"tailwind-merge": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz",
diff --git a/package.json b/package.json
index 034a5722c2..94cb462292 100644
--- a/package.json
+++ b/package.json
@@ -247,6 +247,7 @@
"showdown": "^2.1.0",
"svelte": "^3.59.2",
"svg-path-parser": "^1.1.0",
+ "tag2link": "^2025.3.21",
"tailwind-merge": "^1.14.0",
"tailwindcss": "^3.4.17",
"ts-node": "^10.9.2",
diff --git a/scripts/Script.ts b/scripts/Script.ts
index b8fb4f400d..65b2fcfa39 100644
--- a/scripts/Script.ts
+++ b/scripts/Script.ts
@@ -24,7 +24,7 @@ export default abstract class Script {
})
.catch((e) => {
console.log(`ERROR in script ${process.argv[1]}:`, e)
- // process.exit(1)
+ process.exit(1)
})
}
diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts
index 51b2edab3f..1ad9c5e2b3 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"
@@ -654,6 +650,9 @@ class LayerOverviewUtils extends Script {
if (sharedLayers.has(fixed.id)) {
throw "There are multiple layers with the id " + fixed.id + ", " + sharedLayerPath
}
+ if (parsed.context.hasErrors()) {
+ throw "Some layers contain errors"
+ }
sharedLayers.set(fixed.id, fixed)
recompiledLayers.push(fixed.id)
diff --git a/scripts/prepare-build.sh b/scripts/prepare-build.sh
index 0e0fc6c581..88bb11ee78 100755
--- a/scripts/prepare-build.sh
+++ b/scripts/prepare-build.sh
@@ -20,9 +20,8 @@ npm run download:editor-layer-index &&
npm run prep:layeroverview &&
npm run generate && # includes a single "refresh:layeroverview". Resetting the files is unnecessary as they are not in there in the first place
npm run generate:mapcomplete-changes-theme &&
-npm run refresh:layeroverview && # run refresh:layeroverview a second time to propagate all calls
-npm run generate:layeroverview && # run refresh:layeroverview a third time to fix some issues with the favourite layer all calls
-
+npm run refresh:layeroverview && # a second time to propagate all calls
+npm run refresh:layeroverview && # a third time to fix some issues with the favourite layer all calls
npm run generate:layouts
if [ $? -ne 0 ]; then
diff --git a/src/UI/Popup/AllTagsPanel.svelte b/src/UI/Popup/AllTagsPanel/AllTagsPanel.svelte
similarity index 86%
rename from src/UI/Popup/AllTagsPanel.svelte
rename to src/UI/Popup/AllTagsPanel/AllTagsPanel.svelte
index 39a66f3353..33b710ad09 100644
--- a/src/UI/Popup/AllTagsPanel.svelte
+++ b/src/UI/Popup/AllTagsPanel/AllTagsPanel.svelte
@@ -1,10 +1,12 @@
+
+{#if url}
+
+ {$tags[key]}
+
+{:else}
+ {$tags[key]}
+{/if}
diff --git a/src/UI/SpecialVisualisations/SettingsVisualisations.ts b/src/UI/SpecialVisualisations/SettingsVisualisations.ts
index ea52ea6274..d22cf68882 100644
--- a/src/UI/SpecialVisualisations/SettingsVisualisations.ts
+++ b/src/UI/SpecialVisualisations/SettingsVisualisations.ts
@@ -6,7 +6,7 @@ import LogoutButton from "../Base/LogoutButton.svelte"
import LoginButton from "../Base/LoginButton.svelte"
import ThemeViewState from "../../Models/ThemeViewState"
import OrientationDebugPanel from "../Debug/OrientationDebugPanel.svelte"
-import AllTagsPanel from "../Popup/AllTagsPanel.svelte"
+import AllTagsPanel from "../Popup/AllTagsPanel/AllTagsPanel.svelte"
import { ImmutableStore, UIEventSource } from "../../Logic/UIEventSource"
import ClearCaches from "../Popup/ClearCaches.svelte"
import Locale from "../i18n/Locale"
diff --git a/src/UI/SpecialVisualizations.ts b/src/UI/SpecialVisualizations.ts
index a212ae0115..0fdee9e989 100644
--- a/src/UI/SpecialVisualizations.ts
+++ b/src/UI/SpecialVisualizations.ts
@@ -10,7 +10,7 @@ import { HistogramViz } from "./Popup/HistogramViz"
import { UploadToOsmViz } from "./Popup/UploadToOsmViz"
import { MultiApplyViz } from "./Popup/MultiApplyViz"
import { UIEventSource } from "../Logic/UIEventSource"
-import AllTagsPanel from "./Popup/AllTagsPanel.svelte"
+import AllTagsPanel from "./Popup/AllTagsPanel/AllTagsPanel.svelte"
import { VariableUiElement } from "./Base/VariableUIElement"
import { Translation } from "./i18n/Translation"
import Translations from "./i18n/Translations"
diff --git a/src/UI/Status/StatusGUI.svelte b/src/UI/Status/StatusGUI.svelte
index 3dd8ad4ddb..9bf90cb92a 100644
--- a/src/UI/Status/StatusGUI.svelte
+++ b/src/UI/Status/StatusGUI.svelte
@@ -351,6 +351,16 @@
})
})
+ services.push({
+ name: "Translation service (Weblate)",
+ status: testDownload("https://translate.mapcomplete.org", true).mapD(r => {
+ if (r["success"]) {
+ return "online"
+ }
+ return "offline"
+
+ })
+ })
}
let all = new UIEventSource<"online" | "degraded" | "offline">("online")
diff --git a/src/UI/Studio/EditLayer.svelte b/src/UI/Studio/EditLayer.svelte
index 79ef7776e1..c561edfe1a 100644
--- a/src/UI/Studio/EditLayer.svelte
+++ b/src/UI/Studio/EditLayer.svelte
@@ -13,7 +13,7 @@
import SchemaBasedInput from "./SchemaBasedInput.svelte"
import FloatOver from "../Base/FloatOver.svelte"
import TagRenderingInput from "./TagRenderingInput.svelte"
- import AllTagsPanel from "../Popup/AllTagsPanel.svelte"
+ import AllTagsPanel from "../Popup/AllTagsPanel/AllTagsPanel.svelte"
import QuestionPreview from "./QuestionPreview.svelte"
import ShowConversionMessages from "./ShowConversionMessages.svelte"
import RawEditor from "./RawEditor.svelte"