Merge branch 'develop' into feature/360-view

This commit is contained in:
Pieter Vander Vennet 2025-03-31 02:09:19 +02:00
commit 96878c1d63
39 changed files with 480 additions and 81 deletions

View file

@ -54,6 +54,7 @@ jobs:
- name: Zipping dist file - name: Zipping dist file
run: | run: |
BRANCH=$(echo ${{ github.ref_name }} | sed 's/\//-/g') BRANCH=$(echo ${{ github.ref_name }} | sed 's/\//-/g')
rm -rf /tmp/${BRANCH}
mv dist /tmp/${BRANCH} mv dist /tmp/${BRANCH}
cd /tmp cd /tmp
zip ${BRANCH}.zip -r ${BRANCH}/* zip ${BRANCH}.zip -r ${BRANCH}/*
@ -72,7 +73,7 @@ jobs:
- name: unzipping remote file - name: unzipping remote file
run: | run: |
BRANCH=$(echo ${{ github.ref_name }} | sed 's/\//-/g') 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 - name: Comment on the PR
run: | run: |

View file

@ -241,6 +241,30 @@
} }
}, },
"opening_hours_24_7", "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", "id": "cash_out",
"question": { "question": {
@ -650,4 +674,4 @@
"enableImproveAccuracy": true, "enableImproveAccuracy": true,
"enableRelocation": false "enableRelocation": false
} }
} }

View file

@ -574,6 +574,29 @@
"es": "Diámetro de los acoplamientos: {couplings:diameters}" "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" "images"
], ],
"allowMove": { "allowMove": {
@ -590,4 +613,4 @@
} }
} }
] ]
} }

View file

@ -82,6 +82,26 @@
], ],
"tagRenderings": [ "tagRenderings": [
"images", "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", "id": "ref",
"render": { "render": {
@ -104,7 +124,10 @@
}, },
"freeform": { "freeform": {
"key": "ref" "key": "ref"
} },
"labels": [
"street_lamp_question"
]
}, },
{ {
"id": "support", "id": "support",
@ -194,6 +217,10 @@
"cs": "Toto svítidlo se montuje na stěnu pomocí kovové tyče" "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?", "ca": "Com està muntat aquest fanal al pal?",
"cs": "Jak se tato lampa montuje na sloup?" "cs": "Jak se tato lampa montuje na sloup?"
}, },
"condition": "support=pole", "condition": {
"and": [
"support=pole",
"man_made!=utility_pole"
]
},
"mappings": [ "mappings": [
{ {
"if": "lamp_mount=straight_mast", "if": "lamp_mount=straight_mast",
@ -230,6 +262,9 @@
"cs": "Tato lampa je umístěna na konci ohnutého stožáru" "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" "cs": "Tato lampa svítí pomocí plynu"
} }
} }
],
"labels": [
"street_lamp_question"
] ]
}, },
{ {
@ -434,6 +472,9 @@
"cs": "Tato lampa vydává oranžové světlo" "cs": "Tato lampa vydává oranžové světlo"
} }
} }
],
"labels": [
"street_lamp_question"
] ]
}, },
{ {
@ -482,6 +523,9 @@
"es": "Esta lámpara tiene 2 accesorios" "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)" "cs": "Tato lampa se rozsvítí na základě požadavku (např. pomocí tlačítka)"
} }
} }
],
"labels": [
"street_lamp_question"
] ]
}, },
{ {
@ -563,7 +610,10 @@
"freeform": { "freeform": {
"key": "light:direction", "key": "light:direction",
"type": "direction" "type": "direction"
} },
"labels": [
"street_lamp_question"
]
} }
], ],
"deletion": {}, "deletion": {},
@ -571,4 +621,4 @@
"enableImproveAccuracy": true, "enableImproveAccuracy": true,
"enableRelocation": false "enableRelocation": false
} }
} }

View file

@ -0,0 +1,10 @@
[
{
"path": "utility_pole.svg",
"license": "CC0-1.0",
"authors": [
"Robin van der Linde"
],
"sources": []
}
]

View file

@ -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
}
}

View file

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="500"
height="500"
viewBox="0 0 500 500"
fill="none"
version="1.1"
id="svg6"
sodipodi:docname="utility_pole.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview6"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="0.46831027"
inkscape:cx="25.624038"
inkscape:cy="541.30779"
inkscape:window-width="1704"
inkscape:window-height="996"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg6" />
<g
id="g6"
transform="matrix(1.3262599,0,0,1.3262599,150.53051,8.85e-6)">
<rect
x="62"
y="27"
width="25"
height="350"
fill="#000000"
id="rect1" />
<rect
y="0"
width="15"
height="150"
transform="rotate(-90)"
fill="#000000"
id="rect2"
x="-27" />
<rect
x="4"
width="8"
height="12"
fill="#000000"
id="rect3"
y="0" />
<rect
x="15"
width="8"
height="12"
fill="#000000"
id="rect4"
y="0" />
<rect
x="127"
width="8"
height="12"
fill="#000000"
id="rect5"
y="0" />
<rect
x="138"
width="8"
height="12"
fill="#000000"
id="rect6"
y="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Robin van der Linde
SPDX-License-Identifier: CC0-1.0

View file

@ -280,7 +280,11 @@
"render": { "render": {
"en": "This shrine is {religion}" "en": "This shrine is {religion}"
}, },
"condition": "historic!=wayside_cross" "condition": {
"and": [
"historic!=wayside_cross"
]
}
}, },
{ {
"question": { "question": {
@ -493,4 +497,4 @@
}, },
"credits": "Bastian Greshake Tzovaras", "credits": "Bastian Greshake Tzovaras",
"credits:uid": 20617622 "credits:uid": 20617622
} }

View file

@ -98,6 +98,35 @@
"name": null "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", "builtin": "shops",
"override": { "override": {
@ -185,4 +214,4 @@
} }
} }
] ]
} }

View file

@ -45,6 +45,20 @@
], ],
"layers": [ "layers": [
"street_lamps", "street_lamps",
{
"builtin": "utility_pole",
"override": {
"tagRenderings+": [
{
"builtin": "street_lamps.street_lamp_question",
"override": {
"condition": "highway=street_lamp"
}
}
],
"shownByDefault": false
}
},
{ {
"id": "lit_streets", "id": "lit_streets",
"name": { "name": {

View file

@ -15,7 +15,13 @@
], ],
"hideFromOverview": true, "hideFromOverview": true,
"layers": [ "layers": [
"street_lamps", {
"builtin": "street_lamps",
"hideTagRenderingsWithLabels": [
"utility_pole"
],
"override": {}
},
{ {
"id": "assen", "id": "assen",
"name": "Dataset Assen", "name": "Dataset Assen",
@ -76,4 +82,4 @@
} }
} }
] ]
} }

View file

@ -755,7 +755,7 @@
"name": "Restaurants que accepten gossos" "name": "Restaurants que accepten gossos"
} }
}, },
"6": { "7": {
"override": { "override": {
"name": "Botigues amigues dels gossos" "name": "Botigues amigues dels gossos"
} }
@ -873,7 +873,7 @@
"street_lighting": { "street_lighting": {
"description": "En aquest mapa pots trobar tot el relacionat amb l'enllumenat públic", "description": "En aquest mapa pots trobar tot el relacionat amb l'enllumenat públic",
"layers": { "layers": {
"1": { "2": {
"name": "Il·luminació de carrers", "name": "Il·luminació de carrers",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -898,7 +898,7 @@
"render": "Il·luminació del carrer" "render": "Il·luminació del carrer"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -1048,12 +1048,12 @@
"name": "Restaurace vhodné pro vstup se psy" "name": "Restaurace vhodné pro vstup se psy"
} }
}, },
"6": { "7": {
"override": { "override": {
"name": "Obchody vhodné pro vstup se psy" "name": "Obchody vhodné pro vstup se psy"
} }
}, },
"8": { "9": {
"override": { "override": {
"name=": "Odpadkové koše se sáčky na exkrementy" "name=": "Odpadkové koše se sáčky na exkrementy"
} }
@ -1231,7 +1231,7 @@
"street_lighting": { "street_lighting": {
"description": "Na této mapě najdete vše o pouličním osvětlení", "description": "Na této mapě najdete vše o pouličním osvětlení",
"layers": { "layers": {
"1": { "2": {
"name": "Osvětlené ulice", "name": "Osvětlené ulice",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -1256,7 +1256,7 @@
"render": "Osvětlená ulice" "render": "Osvětlená ulice"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -598,7 +598,7 @@
"name": "Hundevenlige madsteder" "name": "Hundevenlige madsteder"
} }
}, },
"6": { "7": {
"override": { "override": {
"name": "hundevenlig butik" "name": "hundevenlig butik"
} }
@ -684,7 +684,7 @@
"street_lighting": { "street_lighting": {
"description": "På dette kort kan du finde alt om gadebelysning", "description": "På dette kort kan du finde alt om gadebelysning",
"layers": { "layers": {
"1": { "2": {
"name": "Oplyste gader", "name": "Oplyste gader",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -709,7 +709,7 @@
"render": "Oplyst gade" "render": "Oplyst gade"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -1034,12 +1034,12 @@
"name": "Hundefreundliche Restaurants" "name": "Hundefreundliche Restaurants"
} }
}, },
"6": { "7": {
"override": { "override": {
"name": "Hundefreundliche Geschäfte" "name": "Hundefreundliche Geschäfte"
} }
}, },
"8": { "9": {
"override": { "override": {
"name=": "Mülleimer mit Spender für Kotbeutel" "name=": "Mülleimer mit Spender für Kotbeutel"
} }
@ -1212,7 +1212,7 @@
"street_lighting": { "street_lighting": {
"description": "Eine Karte für alles zum Thema Straßenbeleuchtung", "description": "Eine Karte für alles zum Thema Straßenbeleuchtung",
"layers": { "layers": {
"1": { "2": {
"name": "Beleuchtete Straßen", "name": "Beleuchtete Straßen",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -1237,7 +1237,7 @@
"render": "Beleuchtete Straße" "render": "Beleuchtete Straße"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -1073,11 +1073,21 @@
} }
}, },
"6": { "6": {
"override": {
"=presets": {
"0": {
"title": "a pet shop"
}
},
"name": "Pet stores"
}
},
"7": {
"override": { "override": {
"name": "Dog-friendly shops" "name": "Dog-friendly shops"
} }
}, },
"8": { "9": {
"override": { "override": {
"name=": "Waste baskets with excrement bag dispensers" "name=": "Waste baskets with excrement bag dispensers"
} }
@ -1255,7 +1265,7 @@
"street_lighting": { "street_lighting": {
"description": "On this map you can find everything about street lighting", "description": "On this map you can find everything about street lighting",
"layers": { "layers": {
"1": { "2": {
"name": "Lit streets", "name": "Lit streets",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -1280,7 +1290,7 @@
"render": "Lit street" "render": "Lit street"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -1008,7 +1008,7 @@
"name": "Restaurantes que admiten perros" "name": "Restaurantes que admiten perros"
} }
}, },
"6": { "7": {
"override": { "override": {
"name": "Tiendas que admiten perros" "name": "Tiendas que admiten perros"
} }
@ -1156,7 +1156,7 @@
"street_lighting": { "street_lighting": {
"description": "En este mapa puedes encontrar todo sobre el alumbrado público", "description": "En este mapa puedes encontrar todo sobre el alumbrado público",
"layers": { "layers": {
"1": { "2": {
"name": "Calles iluminadas", "name": "Calles iluminadas",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -1181,7 +1181,7 @@
"render": "Calle iluminada" "render": "Calle iluminada"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -834,7 +834,7 @@
"name": "Restaurants acceptant les chiens" "name": "Restaurants acceptant les chiens"
} }
}, },
"6": { "7": {
"override": { "override": {
"name": "Magasins acceptant les chiens" "name": "Magasins acceptant les chiens"
} }
@ -956,7 +956,7 @@
"street_lighting": { "street_lighting": {
"description": "Retrouvez tout ce qui touche à léclairage de rue sur cette carte", "description": "Retrouvez tout ce qui touche à léclairage de rue sur cette carte",
"layers": { "layers": {
"1": { "2": {
"name": "Rues éclairées", "name": "Rues éclairées",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -981,7 +981,7 @@
"render": "Rue éclairée" "render": "Rue éclairée"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -405,7 +405,7 @@
"street_lighting": { "street_lighting": {
"description": "Ezen a térképen minden megtalálható, ami a közvilágítással kapcsolatos", "description": "Ezen a térképen minden megtalálható, ami a közvilágítással kapcsolatos",
"layers": { "layers": {
"1": { "2": {
"name": "Kivilágított utcák", "name": "Kivilágított utcák",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -430,7 +430,7 @@
"render": "Kivilágított utca" "render": "Kivilágított utca"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -471,7 +471,7 @@
"name": "Ristoranti che accettano i cani" "name": "Ristoranti che accettano i cani"
} }
}, },
"6": { "7": {
"override": { "override": {
"name": "Negozi che accettano i cani" "name": "Negozi che accettano i cani"
} }
@ -540,7 +540,7 @@
"street_lighting": { "street_lighting": {
"description": "Su questa mappa puoi trovare tutto ciò che riguarda l'illuminazione stradale", "description": "Su questa mappa puoi trovare tutto ciò che riguarda l'illuminazione stradale",
"layers": { "layers": {
"1": { "2": {
"name": "Strade illuminate", "name": "Strade illuminate",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -565,7 +565,7 @@
"render": "Strada illuminata" "render": "Strada illuminata"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -994,7 +994,7 @@
"name": "반려견 친화적 식당" "name": "반려견 친화적 식당"
} }
}, },
"6": { "7": {
"override": { "override": {
"name": "반려견 친화적 상점" "name": "반려견 친화적 상점"
} }
@ -1142,7 +1142,7 @@
"street_lighting": { "street_lighting": {
"description": "이 지도에서 가로등에 관한 모든 것을 찾을 수 있습니다", "description": "이 지도에서 가로등에 관한 모든 것을 찾을 수 있습니다",
"layers": { "layers": {
"1": { "2": {
"name": "조명이 있는 거리", "name": "조명이 있는 거리",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -1167,7 +1167,7 @@
"render": "밝은 거리" "render": "밝은 거리"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -349,7 +349,7 @@
"name": "Hundevennlige spisesteder" "name": "Hundevennlige spisesteder"
} }
}, },
"6": { "7": {
"override": { "override": {
"name": "Hundevennlige butikker" "name": "Hundevennlige butikker"
} }
@ -414,7 +414,7 @@
"street_lighting": { "street_lighting": {
"description": "Alt om gatebelysning", "description": "Alt om gatebelysning",
"layers": { "layers": {
"1": { "2": {
"name": "Belyste gater", "name": "Belyste gater",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -439,7 +439,7 @@
"render": "Belyst gate" "render": "Belyst gate"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -1093,11 +1093,21 @@
} }
}, },
"6": { "6": {
"override": {
"=presets": {
"0": {
"title": "een dierenwinkel"
}
},
"name": "Dierenwinkels"
}
},
"7": {
"override": { "override": {
"name": "Hondvriendelijke winkels" "name": "Hondvriendelijke winkels"
} }
}, },
"8": { "9": {
"override": { "override": {
"name=": "Vuilnisbakken met verdelers voor hondenpoepzakjes" "name=": "Vuilnisbakken met verdelers voor hondenpoepzakjes"
} }
@ -1291,7 +1301,7 @@
"street_lighting": { "street_lighting": {
"description": "Op deze kaart vind je alles over straatlantaarns", "description": "Op deze kaart vind je alles over straatlantaarns",
"layers": { "layers": {
"1": { "2": {
"name": "Verlichte straten", "name": "Verlichte straten",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -1316,7 +1326,7 @@
"render": "Verlichte straat" "render": "Verlichte straat"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -131,7 +131,7 @@
}, },
"pets": { "pets": {
"layers": { "layers": {
"6": { "7": {
"override": { "override": {
"name": "کُتیاں دی اِجازت دیاں دکاناں" "name": "کُتیاں دی اِجازت دیاں دکاناں"
} }
@ -153,7 +153,7 @@
}, },
"street_lighting": { "street_lighting": {
"layers": { "layers": {
"1": { "2": {
"name": "روشنی والیاں سڑکاں", "name": "روشنی والیاں سڑکاں",
"title": { "title": {
"render": "روشنی والی سڑک" "render": "روشنی والی سڑک"

View file

@ -711,7 +711,7 @@
"name": "Restauracje przyjazne psom" "name": "Restauracje przyjazne psom"
} }
}, },
"6": { "7": {
"override": { "override": {
"name": "Sklepy przyjazne psom" "name": "Sklepy przyjazne psom"
} }
@ -829,7 +829,7 @@
"street_lighting": { "street_lighting": {
"description": "Na tej mapie możesz znaleźć wszystko o oświetleniu ulicznym", "description": "Na tej mapie możesz znaleźć wszystko o oświetleniu ulicznym",
"layers": { "layers": {
"1": { "2": {
"name": "Oświetlone ulice", "name": "Oświetlone ulice",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -854,7 +854,7 @@
"render": "Ulica oświetlona" "render": "Ulica oświetlona"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

View file

@ -514,12 +514,12 @@
"name": "Заклади харчування, дружні до собак" "name": "Заклади харчування, дружні до собак"
} }
}, },
"6": { "7": {
"override": { "override": {
"name": "Магазини, дружні до собак" "name": "Магазини, дружні до собак"
} }
}, },
"8": { "9": {
"override": { "override": {
"name=": "Кошики для сміття з дозаторами для пакетів для екскрементів" "name=": "Кошики для сміття з дозаторами для пакетів для екскрементів"
} }

View file

@ -678,7 +678,7 @@
"name": "寵物友善餐廳" "name": "寵物友善餐廳"
} }
}, },
"6": { "7": {
"override": { "override": {
"name": "寵物友善商家" "name": "寵物友善商家"
} }
@ -781,7 +781,7 @@
"street_lighting": { "street_lighting": {
"description": "在這份地圖你可以找到任何有關路燈的事情", "description": "在這份地圖你可以找到任何有關路燈的事情",
"layers": { "layers": {
"1": { "2": {
"name": "有照明的道路", "name": "有照明的道路",
"tagRenderings": { "tagRenderings": {
"lit": { "lit": {
@ -806,7 +806,7 @@
"render": "照明道路" "render": "照明道路"
} }
}, },
"2": { "3": {
"override": { "override": {
"tagRenderings+": { "tagRenderings+": {
"0": { "0": {

12
package-lock.json generated
View file

@ -84,6 +84,7 @@
"showdown": "^2.1.0", "showdown": "^2.1.0",
"svelte": "^3.59.2", "svelte": "^3.59.2",
"svg-path-parser": "^1.1.0", "svg-path-parser": "^1.1.0",
"tag2link": "^2025.3.21",
"tailwind-merge": "^1.14.0", "tailwind-merge": "^1.14.0",
"tailwindcss": "^3.4.17", "tailwindcss": "^3.4.17",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
@ -26406,6 +26407,12 @@
"version": "3.2.4", "version": "3.2.4",
"license": "MIT" "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": { "node_modules/tailwind-merge": {
"version": "1.14.0", "version": "1.14.0",
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz",
@ -48559,6 +48566,11 @@
"symbol-tree": { "symbol-tree": {
"version": "3.2.4" "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": { "tailwind-merge": {
"version": "1.14.0", "version": "1.14.0",
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz",

View file

@ -247,6 +247,7 @@
"showdown": "^2.1.0", "showdown": "^2.1.0",
"svelte": "^3.59.2", "svelte": "^3.59.2",
"svg-path-parser": "^1.1.0", "svg-path-parser": "^1.1.0",
"tag2link": "^2025.3.21",
"tailwind-merge": "^1.14.0", "tailwind-merge": "^1.14.0",
"tailwindcss": "^3.4.17", "tailwindcss": "^3.4.17",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",

View file

@ -24,7 +24,7 @@ export default abstract class Script {
}) })
.catch((e) => { .catch((e) => {
console.log(`ERROR in script ${process.argv[1]}:`, e) console.log(`ERROR in script ${process.argv[1]}:`, e)
// process.exit(1) process.exit(1)
}) })
} }

View file

@ -9,16 +9,12 @@ import {
DoesImageExist, DoesImageExist,
PrevalidateTheme, PrevalidateTheme,
ValidateLayer, ValidateLayer,
ValidateThemeEnsemble, ValidateThemeEnsemble
} from "../src/Models/ThemeConfig/Conversion/Validation" } from "../src/Models/ThemeConfig/Conversion/Validation"
import { Translation } from "../src/UI/i18n/Translation" import { Translation } from "../src/UI/i18n/Translation"
import { PrepareLayer } from "../src/Models/ThemeConfig/Conversion/PrepareLayer" import { PrepareLayer } from "../src/Models/ThemeConfig/Conversion/PrepareLayer"
import { PrepareTheme } from "../src/Models/ThemeConfig/Conversion/PrepareTheme" import { PrepareTheme } from "../src/Models/ThemeConfig/Conversion/PrepareTheme"
import { import { Conversion, DesugaringContext, DesugaringStep } from "../src/Models/ThemeConfig/Conversion/Conversion"
Conversion,
DesugaringContext,
DesugaringStep,
} from "../src/Models/ThemeConfig/Conversion/Conversion"
import { Utils } from "../src/Utils" import { Utils } from "../src/Utils"
import Script from "./Script" import Script from "./Script"
import { AllSharedLayers } from "../src/Customizations/AllSharedLayers" import { AllSharedLayers } from "../src/Customizations/AllSharedLayers"
@ -654,6 +650,9 @@ class LayerOverviewUtils extends Script {
if (sharedLayers.has(fixed.id)) { if (sharedLayers.has(fixed.id)) {
throw "There are multiple layers with the id " + fixed.id + ", " + sharedLayerPath 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) sharedLayers.set(fixed.id, fixed)
recompiledLayers.push(fixed.id) recompiledLayers.push(fixed.id)

View file

@ -20,9 +20,8 @@ npm run download:editor-layer-index &&
npm run prep:layeroverview && 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 && # 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 generate:mapcomplete-changes-theme &&
npm run refresh:layeroverview && # run refresh:layeroverview a second time to propagate all calls npm 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 third time to fix some issues with the favourite layer all calls
npm run generate:layouts npm run generate:layouts
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then

View file

@ -1,10 +1,12 @@
<script lang="ts"> <script lang="ts">
import { Store, UIEventSource } from "../../Logic/UIEventSource" import { Store, UIEventSource } from "../../../Logic/UIEventSource"
import SimpleMetaTaggers from "../../Logic/SimpleMetaTagger" import SimpleMetaTaggers from "../../../Logic/SimpleMetaTagger"
import LayerConfig from "../../Models/ThemeConfig/LayerConfig" import LayerConfig from "../../../Models/ThemeConfig/LayerConfig"
import Searchbar from "../Base/Searchbar.svelte" import Searchbar from "../../Base/Searchbar.svelte"
import Translations from "../i18n/Translations" import Translations from "../../i18n/Translations"
import { Utils } from "../../Utils" import { Utils } from "../../../Utils"
import TagLink from "./TagLink.svelte"
import Tag from "@rgossiaux/svelte-heroicons/solid/Tag"
export let tags: UIEventSource<Record<string, any>> export let tags: UIEventSource<Record<string, any>>
export let tagKeys = tags.map((tgs) => (tgs === undefined ? [] : Object.keys(tgs))) export let tagKeys = tags.map((tgs) => (tgs === undefined ? [] : Object.keys(tgs)))
@ -69,7 +71,7 @@
{:else if typeof $tags[key] === "object"} {:else if typeof $tags[key] === "object"}
<div class="literal-code">{JSON.stringify($tags[key])}</div> <div class="literal-code">{JSON.stringify($tags[key])}</div>
{:else} {:else}
{$tags[key]} <TagLink {tags} {key} />
{/if} {/if}
</td> </td>
</tr> </tr>
@ -95,7 +97,7 @@
<span class="literal-code">{JSON.stringify($tags[key])}</span> <span class="literal-code">{JSON.stringify($tags[key])}</span>
<i>{typeof $tags[key]}</i> <i>{typeof $tags[key]}</i>
{:else} {:else}
{$tags[key]} <TagLink {tags} {key} />
{/if} {/if}
</td> </td>
</tr> </tr>
@ -123,7 +125,7 @@
{:else if $tags[key] === ""} {:else if $tags[key] === ""}
<i>Empty string</i> <i>Empty string</i>
{:else} {:else}
{$tags[key]} <TagLink {tags} {key} />
{/if} {/if}
</td> </td>
</tr> </tr>

View file

@ -0,0 +1,46 @@
<script lang="ts">
import { UIEventSource } from "../../../Logic/UIEventSource"
import tag2link from "tag2link/index.json"
export let tags: UIEventSource<Record<string, any>>
export let key: string
const tag2linkData = tag2link as Tag2LinkElement[]
interface Tag2LinkElement {
/**
* OSM tag key
*/
key: string
/**
* URL template or formatter URL: replace `$1` with the tag value
*/
url: string
/**
* Source of this formatter URL
*/
source?: string
/**
* Rank or relative importance of this formatter URL.
*/
rank?: "preferred" | "normal" | "deprecated"
}
const url = tag2linkData.find((item) => item.key === `Key:${key}`)?.url
</script>
{#if url}
<a
href={url.replace("$1", $tags[key])}
target="_blank"
rel="noopener noreferrer"
class="tag-link"
>
{$tags[key]}
</a>
{:else}
{$tags[key]}
{/if}

View file

@ -6,7 +6,7 @@ import LogoutButton from "../Base/LogoutButton.svelte"
import LoginButton from "../Base/LoginButton.svelte" import LoginButton from "../Base/LoginButton.svelte"
import ThemeViewState from "../../Models/ThemeViewState" import ThemeViewState from "../../Models/ThemeViewState"
import OrientationDebugPanel from "../Debug/OrientationDebugPanel.svelte" 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 { ImmutableStore, UIEventSource } from "../../Logic/UIEventSource"
import ClearCaches from "../Popup/ClearCaches.svelte" import ClearCaches from "../Popup/ClearCaches.svelte"
import Locale from "../i18n/Locale" import Locale from "../i18n/Locale"

View file

@ -10,7 +10,7 @@ import { HistogramViz } from "./Popup/HistogramViz"
import { UploadToOsmViz } from "./Popup/UploadToOsmViz" import { UploadToOsmViz } from "./Popup/UploadToOsmViz"
import { MultiApplyViz } from "./Popup/MultiApplyViz" import { MultiApplyViz } from "./Popup/MultiApplyViz"
import { UIEventSource } from "../Logic/UIEventSource" import { UIEventSource } from "../Logic/UIEventSource"
import AllTagsPanel from "./Popup/AllTagsPanel.svelte" import AllTagsPanel from "./Popup/AllTagsPanel/AllTagsPanel.svelte"
import { VariableUiElement } from "./Base/VariableUIElement" import { VariableUiElement } from "./Base/VariableUIElement"
import { Translation } from "./i18n/Translation" import { Translation } from "./i18n/Translation"
import Translations from "./i18n/Translations" import Translations from "./i18n/Translations"

View file

@ -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") let all = new UIEventSource<"online" | "degraded" | "offline">("online")

View file

@ -13,7 +13,7 @@
import SchemaBasedInput from "./SchemaBasedInput.svelte" import SchemaBasedInput from "./SchemaBasedInput.svelte"
import FloatOver from "../Base/FloatOver.svelte" import FloatOver from "../Base/FloatOver.svelte"
import TagRenderingInput from "./TagRenderingInput.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 QuestionPreview from "./QuestionPreview.svelte"
import ShowConversionMessages from "./ShowConversionMessages.svelte" import ShowConversionMessages from "./ShowConversionMessages.svelte"
import RawEditor from "./RawEditor.svelte" import RawEditor from "./RawEditor.svelte"