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"