Merge branch 'develop' into layer/mobility_hub

This commit is contained in:
Robin van der Linde 2025-04-16 16:11:17 +02:00
commit 2ae93108aa
Signed by untrusted user: Robin-van-der-Linde
GPG key ID: 53956B3252478F0D
51 changed files with 665 additions and 394 deletions

View file

@ -1,6 +1,5 @@
{
"id": "all_streets",
"isCounted": false,
"name": {
"en": "All streets",
"nl": "Alle straten",
@ -32,6 +31,7 @@
]
}
},
"isCounted": false,
"minzoom": 18,
"title": {
"render": {
@ -60,10 +60,6 @@
}
]
},
"tagRenderings": [
"images"
],
"allowSplit": true,
"pointRendering": null,
"lineRendering": [
{
@ -82,5 +78,9 @@
}
}
],
"allowMove": false
}
"tagRenderings": [
"images"
],
"allowMove": false,
"allowSplit": true
}

View file

@ -9,7 +9,15 @@
"es": "Puntos de carga",
"uk": "Зарядні станції"
},
"minzoom": 10,
"description": {
"en": "A charging station",
"nl": "Oplaadpunten",
"ca": "Una estació de càrrega",
"cs": "Nabíjecí stanice",
"de": "Eine Ladestation",
"es": "Un punto de carga",
"fr": "Une station de recharge"
},
"source": {
"osmTags": {
"and": [
@ -24,6 +32,7 @@
]
}
},
"minzoom": 10,
"title": {
"render": {
"en": "Charging station",
@ -81,16 +90,117 @@
}
]
},
"description": {
"en": "A charging station",
"nl": "Oplaadpunten",
"ca": "Una estació de càrrega",
"cs": "Nabíjecí stanice",
"de": "Eine Ladestation",
"es": "Un punto de carga",
"fr": "Une station de recharge"
},
"#": "no-question-hint-check",
"pointRendering": [
{
"location": [
"point",
"centroid"
],
"marker": [
{
"icon": "pin",
"color": "#fff"
},
{
"icon": {
"render": "./assets/themes/charging_stations/plug.svg",
"mappings": [
{
"if": "bicycle=yes",
"then": "./assets/themes/charging_stations/bicycle.svg"
},
{
"if": {
"or": [
"car=yes",
"motorcar=yes"
]
},
"then": "./assets/themes/charging_stations/car.svg"
}
]
}
}
],
"iconBadges": [
{
"if": {
"or": [
"disused:amenity=charging_station",
"operational_status=broken"
]
},
"then": "close:#c22;"
},
{
"if": {
"or": [
"proposed:amenity=charging_station",
"planned:amenity=charging_station"
]
},
"then": "./assets/layers/charging_station/under_construction.svg"
},
{
"if": {
"and": [
"bicycle=yes",
{
"or": [
"motorcar=yes",
"car=yes"
]
}
]
},
"then": "circle:#fff;./assets/themes/charging_stations/car.svg"
}
],
"anchor": "bottom",
"iconSize": "50,50"
}
],
"lineRendering": [
{
"color": "black",
"width": 2,
"fillColor": "#80808080"
}
],
"presets": [
{
"tags": [
"amenity=charging_station",
"motorcar=no",
"bicycle=yes"
],
"title": {
"en": "charging station for electrical bikes",
"nl": "oplaadpunt voor elektrische fietsen",
"ca": "Estació de càrrega de bicicletes elèctriques",
"cs": "nabíjecí stanice pro elektrokola",
"de": "Ladestation für Elektrofahrräder",
"es": "punto de carga para bicicletas eléctricas",
"uk": "зарядна станція для електровелосипедів"
}
},
{
"tags": [
"amenity=charging_station",
"motorcar=yes",
"bicycle=no"
],
"title": {
"en": "charging station for cars",
"nl": "oplaadstation voor elektrische auto's",
"ca": "estació de càrrega per a cotxes",
"cs": "nabíjecí stanice pro auta",
"de": "Ladestation für Autos",
"es": "punto de carga para coches",
"uk": "зарядна станція для автомобілів"
}
}
],
"tagRenderings": [
"images",
{
@ -3255,117 +3365,6 @@
}
}
],
"lineRendering": [
{
"color": "black",
"width": 2,
"fillColor": "#80808080"
}
],
"pointRendering": [
{
"location": [
"point",
"centroid"
],
"marker": [
{
"icon": "pin",
"color": "#fff"
},
{
"icon": {
"render": "./assets/themes/charging_stations/plug.svg",
"mappings": [
{
"if": "bicycle=yes",
"then": "./assets/themes/charging_stations/bicycle.svg"
},
{
"if": {
"or": [
"car=yes",
"motorcar=yes"
]
},
"then": "./assets/themes/charging_stations/car.svg"
}
]
}
}
],
"iconBadges": [
{
"if": {
"or": [
"disused:amenity=charging_station",
"operational_status=broken"
]
},
"then": "close:#c22;"
},
{
"if": {
"or": [
"proposed:amenity=charging_station",
"planned:amenity=charging_station"
]
},
"then": "./assets/layers/charging_station/under_construction.svg"
},
{
"if": {
"and": [
"bicycle=yes",
{
"or": [
"motorcar=yes",
"car=yes"
]
}
]
},
"then": "circle:#fff;./assets/themes/charging_stations/car.svg"
}
],
"anchor": "bottom",
"iconSize": "50,50"
}
],
"presets": [
{
"tags": [
"amenity=charging_station",
"motorcar=no",
"bicycle=yes"
],
"title": {
"en": "charging station for electrical bikes",
"nl": "oplaadpunt voor elektrische fietsen",
"ca": "Estació de càrrega de bicicletes elèctriques",
"cs": "nabíjecí stanice pro elektrokola",
"de": "Ladestation für Elektrofahrräder",
"es": "punto de carga para bicicletas eléctricas",
"uk": "зарядна станція для електровелосипедів"
}
},
{
"tags": [
"amenity=charging_station",
"motorcar=yes",
"bicycle=no"
],
"title": {
"en": "charging station for cars",
"nl": "oplaadstation voor elektrische auto's",
"ca": "estació de càrrega per a cotxes",
"cs": "nabíjecí stanice pro auta",
"de": "Ladestation für Autos",
"es": "punto de carga para coches",
"uk": "зарядна станція для автомобілів"
}
}
],
"filter": [
{
"id": "vehicle-type",
@ -3688,6 +3687,19 @@
]
}
],
"deletion": {
"softDeletionTags": {
"and": [
"amenity=",
"disused:amenity=charging_station"
]
},
"neededChangesets": 10
},
"allowMove": {
"enableRelocation": false,
"enableImproveAccuracy": true
},
"units": [
{
"maxstay": {
@ -3882,17 +3894,5 @@
}
}
],
"allowMove": {
"enableRelocation": false,
"enableImproveAccuracy": true
},
"deletion": {
"softDeletionTags": {
"and": [
"amenity=",
"disused:amenity=charging_station"
]
},
"neededChangesets": 10
}
}
"#": "no-question-hint-check"
}

View file

@ -754,7 +754,13 @@
},
"hideInAnswer": true
}
]
],
"condition": {
"and": [
"climbing:toprope!=",
"climbing:toprope!=no"
]
}
},
"shower",
"internet",

View file

@ -933,4 +933,4 @@
"enableImproveAccuracy": true,
"enableRelocation": false
}
}
}

View file

@ -296,9 +296,20 @@
"es": "¿Qué tipo de punto de agua potable es este?"
},
"multiAnswer": true,
"invalidValues": {
"or": [
{
"and": [
"natural=spring",
"fountain~*"
]
}
]
},
"mappings": [
{
"if": "fountain=bubbler",
"ifnot": "fountain=",
"icon": "./assets/layers/drinking_water/bubbler.svg",
"then": {
"en": "This is a bubbler fountain. A water jet to drink from is sent upwards, typically controlled by a push button.",
@ -311,6 +322,7 @@
},
{
"if": "fountain=bottle_refill",
"ifnot": "fountain=",
"icon": "./assets/layers/drinking_water/bottle.svg",
"then": {
"en": "This is a bottle refill point where the water is sent downwards, typically controlled by a push button or a motion sensor. Drinking directly from the stream might be very hard or impossible.",
@ -337,6 +349,14 @@
"uk": "Це водопровідний кран. Вода тече вниз, а керує потоком вентиль або кнопка.",
"es": "Esta es una toma de agua. El agua fluye hacia abajo y el chorro está controlado por una válvula o un botón."
}
},
{
"if": "natural=spring",
"ifnot": "natural=",
"then": {
"en": "This is a natural spring",
"nl": "Dit is een bronnetje"
}
}
]
},

View file

@ -1,10 +1,10 @@
{
"id": "geocoded_image",
"name": null,
"source": "special",
"description": {
"*": "Layer showing green dots where a geocoded image was found. See NearbyImages.svelte. Propreties: 'rotation':number,'spherical':'yes'|'no'"
},
"source": "special",
"pointRendering": [
{
"location": [

View file

@ -613,4 +613,4 @@
}
}
]
}
}

View file

@ -528,4 +528,4 @@
"es": "un bordillo",
"ca": "un kerb"
}
}
}

View file

@ -309,4 +309,4 @@
}
],
"allowMove": false
}
}

View file

@ -1866,4 +1866,4 @@
"enableRelocation": true,
"enableImproveAccuracy": true
}
}
}

View file

@ -621,4 +621,4 @@
"enableImproveAccuracy": true,
"enableRelocation": false
}
}
}

View file

@ -39,6 +39,16 @@
"https://www.openstreetmap.org/user/M!dgard"
]
},
{
"path": "palm.svg",
"license": "Apache 2.0",
"authors": [
"Google"
],
"sources": [
"https://commons.wikimedia.org/wiki/File:Emoji_u1f334.svg"
]
},
{
"path": "unknown.svg",
"license": "CC-BY-SA-4.0",

View file

@ -0,0 +1,12 @@
<svg width="128" height="128" style="enable-background:new 0 0 128 128;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g>
<g>
<path d="M63.17,58.21c-0.04,0.24,0.19,0.56,0.65,1.16c1.17,1.52,1.52,3.79,1.99,5.62 c0.68,2.69,1.2,5.62,1.48,8.36c0.26,2.62,0.66,5.05,0.66,7.7c0,2.76,0,5.52,0,8.28c0,5.9-1,11.82-1.82,17.57 c-0.29,2-0.9,4.18-1.4,6.15c-0.21,0.82-0.24,1.69-0.43,2.5c-0.03,0.13-0.07,0.26-0.1,0.39c-1.25,3.89-0.87,7.32-0.02,8.19 c1.45,1.49,3.48,2.55,5.3,3.03c4.15,1.1,8.87,1.12,12.86-0.58c3.72-1.58,2.87-4.78,3.51-8.25c0.37-2.04,0.59-4.29,0.59-6.46 c0-4.99,0.17-10.02-0.29-14.95c-0.59-6.4-1.54-12.8-2.94-19.16c-0.87-3.94-1.57-7.62-3.16-11.38c-0.78-1.86-1.6-3.49-2.64-5.2 c-0.99-1.62-1.5-3.16-3.12-4.2c-0.39-0.25-2.76-2.33-3.2-2.16c-2.19,0.87-4.38,1.73-6.57,2.6 C63.64,57.77,63.21,57.93,63.17,58.21z" style="fill:#855C52;"/>
<path d="M121.62,65.12c-0.48-6.65-2.81-13.86-8.28-18.05c-2.58-1.97-6.32-3.44-9.41-4.34 c-8.25-2.39-17.94-0.86-26.37,2.43c1.98-1.74,4.01-3.45,6.16-4.93c2.22-1.53,4.49-2.93,6.9-4.16c0.63-0.32,1.09-0.42,1.01-1.2 c-0.04-0.41-0.25-0.79-0.41-1.2c-0.52-1.27-1.4-2.19-2.14-3.34c-0.8-1.22-2.1-2.6-1.93-4.14c0.64-0.22,2.06,0.74,2.68,0.99 c1.14,0.47,2.2,0.99,3.3,1.54c0.92,0.46,1.85,0.91,2.75,1.41c0.51,0.29,1.21,0.97,1.79,1.07c0.97,0.18,2-0.85,2.81-1.25 c0.59-0.29,0.81-0.24,0.56-0.93c-0.42-1.17-0.97-2.15-1.43-3.27c-0.48-1.18-0.92-2.46-0.76-3.76c0.89-0.31,2.88,1.33,3.57,1.77 c0.7,0.44,1.47,0.93,2.11,1.48c0.54,0.46,0.86,1.31,1.65,1.24c0.43-0.03,0.81-0.42,1.19-0.57c0.67-0.26,1.04-0.61,1.66-0.95 c1.21-0.67,2.5-1.34,3.75-1.94c1.49-0.71,1.41-1.02,0.41-2.32c-0.56-0.73-1.31-1.33-1.99-1.94c-1.84-1.63-3.56-2.68-5.77-3.69 c-0.81-0.37-1.72-0.42-2.51-0.83c-0.74-0.37-1.42-0.52-2.26-0.65c-1.79-0.3-3.61-0.46-5.43-0.52 c-11.61-0.38-22.24,7.89-26.65,18.49c-0.15-2.83-0.04-5.7-0.04-8.53c0-0.96-0.07-1.83,0.1-2.77c0.12-0.67,0.45-3.05-0.15-3.39 c-0.84-0.47-8.03-0.37-7.57-1.32c0.44-0.91,2.17-1.2,3.02-1.48c1.06-0.35,2.14-0.59,3.17-1.02c0.76-0.31,1.85-0.25,2.48-0.8 c0.49-0.43,0.44-1.25,0.57-1.82C70.34,9.61,72.6,0.3,71.81,0.09c-0.45-0.12-1.3,0.21-1.77,0.27c-0.7,0.1-1.42,0.35-2.1,0.55 c-0.96,0.28-1.98,0.55-2.9,0.96c-2.05,0.91-4.06,1.97-5.94,3.21c-0.93,0.61-1.83,1.26-2.68,1.96c-4.01,3.3-6.98,7.56-7.98,12.81 c-0.91,4.75,0.76,9.46,3.11,13.58c-2.19-1.44-4.47-2.75-6.83-3.86c-7.95-3.73-17.97-2.66-25.49,1.63 c-2.6,1.48-5.23,3.46-7.34,5.59c-2,2.02-4.85,6.31-5.41,9.16c-0.11,0.58-0.2,1.18-0.29,1.77c0.04,0,0.09,0.01,0.13,0.01 c1.01,0.08,11.63,1.44,11.8,0.3c0.13-0.88,0.89-1.73,1.26-2.52c1.09-2.32,4.44-6.83,7.6-6.14c0.13,0.68-0.29,1.16-0.55,1.78 c-0.41,0.99-0.8,1.98-1.21,2.97c-0.52,1.27-1.08,2.37-0.9,3.76c1.3,0.16,2.72,0.02,4.03,0.02c1.14,0,2.28,0.12,3.42-0.02 c0.03,0,0.89-2.69,1.03-3.06c0.46-1.12,1.19-2.03,1.99-2.93c0.43-0.48,1.5-1.72,2.23-1.47c0.15,0.05-0.42,5.28-0.46,5.67 c-0.1,0.8-0.35,1.57-0.25,2.38c2.55,0.68,5.22,0.57,7.82,0.83c1.14,0.12,2.29,0.32,3.43,0.54c-0.07,0-0.14,0.01-0.21,0.01 c-3.49,0.28-6.97,0.87-10.32,1.89c-6.66,2.02-13.17,5.38-17.78,10.62c-4.45,5.06-7.05,14.52-6.46,21.15 c0.23,2.5,0.22,3.15,0.69,5.62c0.3,1.58,0.59,3.47,1.48,4.85c0.34,0.54,1.58,2.83,2.43,2.17c0.61-0.47,0.94-1.42,1.39-2.05 c1.21-1.68,2.48-3.31,3.68-5c0.54-0.76,2.46-2.59,2.09-3.57c-0.43-1.12-0.55-2.41-0.69-3.59c-0.2-1.7-0.3-3.44-0.16-5.15 c0.06-0.74,0.16-1.49,0.41-2.19c0.11-0.31,0.68-1.52,1.11-1.38c0.2,0.06,0.22,0.96,0.24,1.12c0.08,0.68,0.14,1.36,0.2,2.04 c0.07,0.81,0.06,1.6,0.23,2.4c0.2,0.96,0.53,1.88,0.82,2.82c0.16,0.52,0.37,1.25,0.82,1.6c0.52,0.4,1.06-0.27,1.41-0.62 c0.92-0.91,1.83-1.88,2.68-2.82c0.37-0.41,0.64-0.91,1-1.35c0.11-0.13,0.35-0.25,0.42-0.4c0.13-0.28-0.1-0.91-0.16-1.21 c-0.12-0.54-0.33-1.07-0.42-1.62c-0.2-1.17-0.12-2.34,0-3.51c0.07-0.71-0.08-2.58,0.58-3.05c0.5-0.36,0.39,0.47,0.39,0.76 c0,1.48,0.33,2.91,0.8,4.31c0.2,0.59,0.38,1.31,0.8,1.79c0.58,0.65,1.15-0.15,1.61-0.57c1.45-1.34,2.9-2.68,4.37-4 c0.31-0.28,0.63-0.56,0.95-0.84c0.67-0.56,1.36-1.1,2.04-1.65c-1.5,2.26-2.68,4.72-3.37,7.33c-0.84,3.13-1.32,7.21-0.82,10.42 c0.45,2.92,1.52,6.23,3.16,8.72c1.29,1.95,3.46,4.08,5.58,5.12c1.41,0.69,2.76-3.5,3.06-4.27c0.45-1.2,0.78-2.47,1.29-3.65 c0.4-0.94,1.52-2.64,0.91-3.65c-0.26-0.45-0.61-0.84-0.87-1.33c-1.46-2.71-3.45-5.12-3.07-8.44c0.38,0.08,0.76,0.72,0.97,1.06 c0.49,0.82,0.91,1.7,1.47,2.47c0.55,0.76,0.93,1.65,1.61,2.35c0.45,0.46,0.82,1.07,1.43,1.36c0.8,0.38,0.96-0.59,1.12-1.15 c0.27-0.98,0.84-1.81,1.22-2.74c0.36-0.87,0.86-1.68,1.24-2.55c0.35-0.8,1.08-1.79,0.92-2.71c-0.09-0.51-0.57-0.93-0.81-1.4 c-0.32-0.68-0.64-1.36-0.92-2.06c-0.21-0.55-0.4-1.12-0.55-1.68c-0.08-0.29-0.08-0.89-0.24-1.08c0.33,0.52,1.18,0.96,1.64,1.4 c0.42,0.39,1.88,2.14,2.57,1.72c0.95-0.58,1.22-1.9,1.65-2.84c0.57-1.3,1.3-2.49,1.82-3.79c0.65-1.66,1.68-2.98,2.65-4.44 c0.67-1.02,1.5-1.88,2.15-2.9c0.37-0.58,1.27-1.53,1.49-2.23c4.43,1.07,9,1.91,13.34,3.33c1.74,0.56,3.44,1.27,5.16,1.9 c1.25,0.46,2.58,0.58,3.85,0.98c0.72,0.23,1.54,0.83,2.03-0.03c0.35-0.63,0.44-1.42,0.78-2.1c0.44-0.88,0.67-1.76,0.89-2.71 c0.18-0.71,0.21-1.55,0.49-2.21c0.19-0.43,0.46-1.44,0.82-1.73c0.77-0.61,0.94,0.73,1.13,1.36c0.62,2.12,0.47,4.56,0.42,6.75 c-0.03,1.01-0.4,2.01-0.28,3.01c0.46-0.01,0.93,0.33,1.36,0.47c0.7,0.24,1.46,0.39,2.18,0.57c0.43,0.1,1.28,0.5,1.69,0.45 c0.55-0.07,0.5-0.55,0.78-0.99c0.74-1.13,1.26-2.45,1.73-3.74c0.6-1.63,0.71-3.44,1.57-4.97c0.03-0.06,0.63,1.35,0.67,1.48 c0.32,0.98,0.54,1.74,0.67,2.74c0.07,0.5,0.22,1,0.3,1.5c0.13,0.83,0.12,1.65,0.12,2.51c0,1.41-0.15,2.93,0.02,4.32 c1.04,0.15,2,0.95,2.98,1.28c0.75,0.25,7.03,2.59,7.03,2.78c-0.02-0.58,0.26-1.19,0.32-1.77c0.07-0.76,0.15-1.49,0.31-2.25 C121.97,68.7,121.75,66.84,121.62,65.12z" style="fill:#757F3F;"/>
</g>
<path d="M46.5,69.97c-0.29,0.18-0.47,0.58-0.63,0.89c-0.92,1.74-1.63,3.61-2.13,5.52 c-0.74,2.84-0.99,5.83-0.58,8.74c0.26,1.91,0.83,3.78,1.63,5.54c0.41,0.89,0.87,1.74,1.39,2.57c0.45,0.71,0.9,2.09,1.95,1.34 c0.57-0.4,1.49-1.91,1.24-2.66c-0.58-1.71-1.7-3.24-2.36-4.95c-0.71-1.83-1-3.82-1.09-5.78c-0.07-1.65,0.01-3.31,0.21-4.95 c0.12-0.96,0.27-1.9,0.46-2.85c0.1-0.51,0.21-1.02,0.33-1.52C47,71.5,47.53,69.33,46.5,69.97z" style="fill:#BDCF46;"/>
<path d="M39.87,53.3c-0.15-0.11-0.37-0.15-0.58-0.09c-1.8,0.49-3.57,1.16-5.29,1.91 c-2.59,1.13-5.08,2.5-7.36,4.18c-2.61,1.91-4.95,4.23-6.71,6.96c-2.07,3.23-3.37,6.9-3.89,10.7c-0.4,3-0.33,6.07,0.13,9.06 c0.14,0.89,0.32,1.78,0.53,2.66c0.15,0.64,0.26,1.62,0.75,2.07c0.44,0.39,0.64,0.02,0.95-0.33c0.53-0.59,1.1-1.16,1.59-1.78 c0.37-0.46,0.36-1.08,0.22-1.64c-0.25-0.94-0.44-1.9-0.58-2.87c-0.2-1.4-0.31-2.82-0.31-4.24c0-1.73,0.17-3.46,0.51-5.16 c0.39-1.95,1.02-3.84,1.87-5.63c0.98-2.06,2.26-3.96,3.77-5.66c1.81-2.03,3.93-3.78,6.22-5.24c1.35-0.86,2.75-1.63,4.2-2.32 c0.79-0.38,1.59-0.73,2.4-1.06c0.44-0.18,1.6-0.36,1.77-0.9C40.13,53.64,40.04,53.42,39.87,53.3z" style="fill:#BDCF46;"/>
<path d="M11.63,43.94c-0.35-0.71,0.28-1.43,0.77-2.17c2.12-3.25,4.97-6.04,8.28-8.07 c2.99-1.84,6.34-3.02,9.79-3.6c1.12-0.19,2.24-0.28,3.36-0.35c0.37-0.02,4.35-0.37,3.41,0.9c-0.25,0.33-0.9,0.34-1.27,0.37 c-1,0.09-2,0.24-2.98,0.45c-1.93,0.41-3.81,1.02-5.61,1.82c-2.42,1.07-4.7,2.49-6.71,4.22c-1.46,1.25-2.73,2.7-3.89,4.23 c-0.68,0.9-1.24,2.43-2.38,2.87c-0.64,0.25-1.88,0.25-2.42-0.22C11.82,44.24,11.7,44.09,11.63,43.94z" style="fill:#BDCF46;"/>
<path d="M57.88,9.89c-0.12-0.06-0.28-0.07-0.47,0c-0.43,0.14-1.16,1.04-1.47,1.37 c-2.18,2.35-3.42,5.69-3.85,8.83c-0.26,1.83-0.15,3.7,0.25,5.51c0.2,0.91,0.48,1.81,0.82,2.68c0.18,0.46,0.29,0.87,0.67,1.19 c0.35,0.31,0.72,0.29,1.11,0.07c0.26-0.15,0.67-0.4,0.87-0.63c0.44-0.51-0.13-1.29-0.3-1.8c-0.51-1.5-1.15-2.98-1.33-4.56 c-0.18-1.59,0.04-3.26,0.4-4.82c0.4-1.75,1.05-3.44,1.94-4.99c0.43-0.75,0.95-1.42,1.43-2.13C58.16,10.27,58.09,10,57.88,9.89z" style="fill:#BDCF46;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Google
SPDX-License-Identifier: Apache 2.0

View file

@ -112,6 +112,14 @@
]
},
"then": "./assets/layers/tree_node/needleleaved.svg"
},
{
"if": {
"and": [
"leaf_type=palm"
]
},
"then": "./assets/layers/tree_node/palm.svg"
}
]
}
@ -219,6 +227,16 @@
"ca": "Si no esteu segur de si es tracta d'un arbre amb fulles amples o amb fulles d'agulles.",
"cs": "Pokud si nejste jisti, zda se jedná o listnatý nebo jehličnatý strom."
}
},
{
"tags": [
"natural=tree",
"leaf_type=palm"
],
"title": {
"en": "a palm tree",
"nl": "een palmboom"
}
}
],
"tagRenderings": [
@ -600,6 +618,13 @@
"path": "./assets/layers/tree_node/leafless.svg",
"class": "small"
}
},
{
"if": "leaf_type=palm",
"then": {
"en": "This is a palm tree",
"nl": "Dit is een palmboom"
}
}
],
"condition": {

View file

@ -3,15 +3,39 @@
"name": {
"en": "Utility Poles"
},
"source": {
"osmTags": "man_made=utility_pole"
},
"title": {
"en": "Utility Pole"
},
"description": {
"en": "Layer showing various types of utility poles."
},
"source": {
"osmTags": "man_made=utility_pole"
},
"minzoom": 18,
"title": {
"en": "Utility Pole"
},
"pointRendering": [
{
"marker": [
{
"icon": "./assets/layers/utility_pole/utility_pole.svg"
}
],
"location": [
"point",
"centroid"
]
}
],
"presets": [
{
"tags": [
"man_made=utility_pole"
],
"title": {
"en": "a utility pole"
}
}
],
"tagRenderings": [
{
"id": "street_lamp",
@ -34,32 +58,8 @@
]
}
],
"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

@ -19,50 +19,6 @@
"shortDescription": {
"nl": "Grb import helper tool"
},
"popup": [
{
"id": "wikilink-needed",
"condition": "_description!~.*https://wiki.openstreetmap.org/wiki/WikiProject_Belgium/Building_and_address_import.*",
"dismissable": false,
"title": {
"render": {
"en": "Profile mention obligated",
"nl": "Link op profiel verplicht"
}
},
"body": [
{
"render": {
"special": {
"type": "link",
"href": "https://www.openstreetmap.org/profile/edit",
"text": {
"en": "Edit your user profile",
"nl": "Pas je profiel aan"
}
},
"after": {
"en": "to include the link <span class='literal-code'>https://wiki.openstreetmap.org/wiki/WikiProject_Belgium/Building_and_address_import</code>",
"nl": " en voeg deze link toe: <span class='literal-code'>https://wiki.openstreetmap.org/wiki/WikiProject_Belgium/Building_and_address_import</code>"
}
}
},
{
"id": "reload_profile",
"render": {
"special": {
"type": "login_button",
"force": "yes",
"message": {
"en": "Reload your profile",
"nl": "Herlaad je profiel"
}
}
}
}
]
}
],
"icon": "./assets/themes/grb/logo.svg",
"startZoom": 9,
"startLat": 51.0249,
@ -844,5 +800,49 @@
"overpassMaxZoom": 15,
"osmApiTileSize": 17,
"enableCache": false,
"popup": [
{
"id": "wikilink-needed",
"condition": "_description!~.*https://wiki.openstreetmap.org/wiki/WikiProject_Belgium/Building_and_address_import.*",
"dismissable": false,
"title": {
"render": {
"en": "Profile mention obligated",
"nl": "Link op profiel verplicht"
}
},
"body": [
{
"render": {
"special": {
"type": "link",
"href": "https://www.openstreetmap.org/profile/edit",
"text": {
"en": "Edit your user profile",
"nl": "Pas je profiel aan"
}
},
"after": {
"en": "to include the link <span class='literal-code'>https://wiki.openstreetmap.org/wiki/WikiProject_Belgium/Building_and_address_import</code>",
"nl": " en voeg deze link toe: <span class='literal-code'>https://wiki.openstreetmap.org/wiki/WikiProject_Belgium/Building_and_address_import</code>"
}
}
},
{
"id": "reload_profile",
"render": {
"special": {
"type": "login_button",
"force": "yes",
"message": {
"en": "Reload your profile",
"nl": "Herlaad je profiel"
}
}
}
}
]
}
],
"widenFactor": 2
}

View file

@ -9,15 +9,6 @@
"nl": "Wijzigingen gemaakt met MapComplete",
"ko": "MapComplete로 이루어진 변경 사항"
},
"shortDescription": {
"en": "Shows changes made by MapComplete",
"de": "Zeigt die von MapComplete vorgenommenen Änderungen an",
"cs": "Zobrazuje změny provedené nástrojem MapComplete",
"es": "Muestra los cambios realizados por MapComplete",
"fr": "Afficher les modifications faites avec MapComplete",
"nl": "Toont wijzigingen gemaakt met MapComplete",
"ko": "MapComplete를 통해 이루어진 변경 사항을 표시합니다"
},
"description": {
"en": "This maps shows all the changes made with MapComplete",
"de": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen",
@ -28,11 +19,17 @@
"nl": "Deze kaarten tonen alle wijzigingen die zijn gemaakt met MapComplete",
"ko": "이 지도는 MapComplete를 사용하여 이루어진 모든 변경 사항을 표시합니다"
},
"shortDescription": {
"en": "Shows changes made by MapComplete",
"de": "Zeigt die von MapComplete vorgenommenen Änderungen an",
"cs": "Zobrazuje změny provedené nástrojem MapComplete",
"es": "Muestra los cambios realizados por MapComplete",
"fr": "Afficher les modifications faites avec MapComplete",
"nl": "Toont wijzigingen gemaakt met MapComplete",
"ko": "MapComplete를 통해 이루어진 변경 사항을 표시합니다"
},
"icon": "./assets/svg/logo.svg",
"hideFromOverview": true,
"startLat": 0,
"startLon": 0,
"startZoom": 1,
"layers": [
{
"id": "mapcomplete-changes",

View file

@ -1,11 +1,16 @@
{
"credits": "Robin van der Linde",
"credits:uid": 5093765,
"id": "winter_service",
"title": {
"en": "Winter Service"
},
"description": {
"en": "A map showing roads and whether they're cleared in winter"
},
"icon": "./assets/svg/snowflake.svg",
"credits": [
"Robin van der Linde"
],
"hideFromOverview": true,
"layers": [
{
"id": "serviced_streets",
@ -92,9 +97,6 @@
}
}
],
"description": {
"en": "A map showing roads and whether they're cleared in winter"
},
"overrideAll": {
"tagRenderings+": [
{
@ -128,5 +130,5 @@
}
]
},
"hideFromOverview": true
"credits:uid": 5093765
}

View file

@ -155,7 +155,6 @@
"layerNotEnabled": "La capa {layer} no està habilitada. Fes-ho per poder afegir un element a aquesta capa",
"openLayerControl": "Obrir el control de capes",
"pleaseLogin": "Entra per afegir un nou element",
"presetInfo": "El nou PDI tindrà les etiquetes {tags}",
"stillLoading": "Les dades es segueixen carregant. Espera una mica abans d'afegir cap element.",
"title": "Afegeix un element nou",
"wrongType": "Aquest element no és un punt o una via i no pot ser importat",

View file

@ -155,7 +155,6 @@
"layerNotEnabled": "Vrstva {layer} není povolena. Chcete-li přidat funkci, povolte tuto vrstvu",
"openLayerControl": "Otevřete ovládací okno vrstvy",
"pleaseLogin": "Chcete-li přidat novou funkci, přihlaste se prosím do aplikace OpenStreetMap",
"presetInfo": "Nový bod zájmu bude mít {tags}",
"stillLoading": "Data se stále načítají. Před přidáním nové funkce prosím chvíli počkejte.",
"title": "Přidat novou funkci",
"wrongType": "Tato funkce není uzel ani cesta a nelze ji importovat",

View file

@ -108,7 +108,6 @@
"layerNotEnabled": "Laget {layer} er ikke slået til. Slå laget til for at tilføje et punkt",
"openLayerControl": "Åbn kontrolboksen for lag",
"pleaseLogin": "Log venligst ind for at tilføje et nyt punkt",
"presetInfo": "Det nye POI vil have {tags}",
"stillLoading": "Data indlæses stadig. Vent venligt lidt før du tilføjer et nyt punkt.",
"title": "Tilføj et nyt punkt?",
"wrongType": "Dette element er ikke et punkt eller en vej og kan ikke importeres",
@ -460,8 +459,7 @@
"activateButton": "Hjælp med at oversætte MapComplete",
"missing": "{count} uoversatte strenge"
},
"userinfo": {
},
"userinfo": {},
"validation": {
"color": {
"description": "En farve eller hex-kode"

View file

@ -155,7 +155,6 @@
"layerNotEnabled": "Die Ebene {layer} ist nicht eingeschaltet. Schalten Sie die Ebene ein, um ein Objekt hinzuzufügen",
"openLayerControl": "Das Ebenen-Fenster öffnen",
"pleaseLogin": "Bitte über OpenStreetMap anmelden, um ein neues Objekt hinzuzufügen",
"presetInfo": "Der neue POI hat {tags}",
"stillLoading": "Die Daten werden noch geladen. Bitte warten Sie, bevor Sie ein neues Objekt hinzufügen.",
"title": "Neues Objekt hinzufügen",
"wrongType": "Dieses Objekt ist weder ein Punkt noch ein Weg und kann nicht importiert werden",

View file

@ -1,2 +1 @@
{
}
{}

View file

@ -155,7 +155,6 @@
"layerNotEnabled": "The layer {layer} is not enabled. Enable this layer to add a feature",
"openLayerControl": "Open the layer control box",
"pleaseLogin": "Please log in with OpenStreetMap to add a new feature",
"presetInfo": "The new POI will have {tags}",
"stillLoading": "The data is still loading. Please wait a bit before you add a new feature.",
"title": "Add a new feature",
"wrongType": "This feature is not a node or a way and can not be imported",

View file

@ -155,7 +155,6 @@
"layerNotEnabled": "La capa {layer} no está habilitada. Habilita esta capa para agregar un elemento",
"openLayerControl": "Abrir el cuadro de control de capas",
"pleaseLogin": "Por favor, inicia sesión con OpenStreetMap para agregar un nuevo elemento",
"presetInfo": "El nuevo PDI tendrá {tags}",
"stillLoading": "Los datos aún se están cargando. Espera un poco antes de agregar un nuevo elemento.",
"title": "Agregar un nuevo elemento",
"wrongType": "Este elemento no es un nodo o una línea y no se puede importar",

View file

@ -133,7 +133,6 @@
"layerNotEnabled": "Taso {layer} ei ole käytössä. Ota taso käyttöön, jotta voit lisätä kohteen",
"openLayerControl": "Avaa tason hallintaikkuna",
"pleaseLogin": "Kirjaudu sisään, jotta voit lisätä uuden kohteen",
"presetInfo": "Uudelle pisteelle kirjataan {tags}",
"stillLoading": "Data latautuu vielä. Odota hetki ennen kuin lisäät uuden kohteen.",
"title": "Lisää uusi kohde",
"wrongType": "Tämä kohde ei ole piste eikä viiva eikä sitä voida tuoda",

View file

@ -94,8 +94,7 @@
"question_opinion": "Kamusta ang iyong karanasan?",
"reviewPlaceholder": "Ilarawan ang iyong karanasan…"
},
"translations": {
},
"translations": {},
"unknown": {
"clear": "Tanggalin ang sagot"
},

View file

@ -134,7 +134,6 @@
"layerNotEnabled": "La couche {layer} est désactivée. Activez-la pour ajouter un élément",
"openLayerControl": "Ouvrir la panneau de contrôle",
"pleaseLogin": "Vous devez vous connecter pour ajouter un élément",
"presetInfo": "Le nouveau POI aura {tags}",
"stillLoading": "Chargement des données en cours. Patientez un instant avant d'ajouter un nouvel élément.",
"title": "Ajouter un nouvel élément?",
"wrongType": "Cet élément n'est pas un nœud ou un chemin et ne peut pas être importé",

View file

@ -1,2 +1 @@
{
}
{}

View file

@ -155,7 +155,6 @@
"layerNotEnabled": "A {layer} réteg nincs engedélyezve. Objektum felrajzolásához engedélyezd ezt a réteget",
"openLayerControl": "Rétegvezérlő-doboz megnyitása",
"pleaseLogin": "Új objektum felvételéhez be kell jelentkezned",
"presetInfo": "Az új érdekes pont (POI) címkéi: {tags}",
"stillLoading": "Az adatok betöltése folyamatban van. Kérjük, várj egy kicsit mielőtt felviszel egy új objektumot.",
"title": "Új objektum felvétele",
"wrongType": "Ez az elem nem pont vagy vonal, ezért nem importálható",

View file

@ -150,8 +150,7 @@
"split": {
"cancel": "Batal"
},
"translations": {
},
"translations": {},
"validation": {
"date": {
"description": "Tanggal, dimulai dari tahun"

View file

@ -132,7 +132,6 @@
"layerNotEnabled": "Il livello {layer} non è abilitato. Abilita questo livello per aggiungere un elemento",
"openLayerControl": "Apri il pannello di controllo dei livelli",
"pleaseLogin": "Accedi in OpenStreetMap per aggiungere un nuovo elemento",
"presetInfo": "Il nuovo PDI avrà {tags}",
"stillLoading": "Caricamento dei dati ancora in corso. Attendi un po prima di aggiungere un nuovo elemento.",
"title": "Aggiungi un nuovo elemento",
"wrongType": "Questo elemento non è un nodo o una way e non può essere importato",

View file

@ -155,7 +155,6 @@
"layerNotEnabled": "기능을 추가하려면 레이어 {layer}를 먼저 활성화해야 합니다",
"openLayerControl": "레이어 조정 상자 열기",
"pleaseLogin": "새로운 기능을 추가하려면 OpenStreetMap으로 로그인 해야 합니다",
"presetInfo": "새로운 POI에는 {tags}가 추가됩니다",
"stillLoading": "데이터가 아직 로딩 중입니다. 새로운 기능을 추가하기 전에 잠시만 기다려주세요.",
"title": "새로운 기능 추가",
"wrongType": "이 요소는 경로나 길이 아니기 때문에 추가할 수 없습니다",

View file

@ -88,7 +88,6 @@
"layerNotEnabled": "Laget {layer} er ikke påslått. Skru på dette laget for å legge til et punkt.",
"openLayerControl": "Åpne lagkontrollboksen",
"pleaseLogin": "Logg inn for å legge til et nytt punkt",
"presetInfo": "Det nye interessepunktet vil få {tags}",
"stillLoading": "Dataen lastes fremdeles inn. Vent litt før du legger til et nytt punkt.",
"title": "Legg til et nytt punkt?",
"wrongType": "Dette er ikke et punkt eller en vei og kan ikke importeres",
@ -274,8 +273,7 @@
"importInspector": {
"title": "Inspiser og håndter importnotater"
},
"importLayer": {
},
"importLayer": {},
"index": {
"intro": "MapComplete er en OpenStreetMap-viser og redigerer, som viser deg info om funksjoner for et gitt tema og tillater oppdatering av det.",
"logIn": "Logg inn for å vise tema du har besøkt tidligere",
@ -370,8 +368,7 @@
"activateButton": "Bistå oversettelsen av MapComplete",
"missing": "{count} uoversatte strenger"
},
"userinfo": {
},
"userinfo": {},
"validation": {
"color": {
"description": "En farge eller heksadesimal kode"

View file

@ -155,7 +155,6 @@
"layerNotEnabled": "De laag {layer} is gedeactiveerd. Activeer deze om een object toe te voegen",
"openLayerControl": "Open de laag-instellingen",
"pleaseLogin": "Gelieve je aan te melden om een object toe te voegen",
"presetInfo": "Het nieuwe object krijgt de attributen {tags}",
"stillLoading": "De data worden nog geladen. Nog even geduld en dan kan je een object toevoegen.",
"title": "Nieuw object toevoegen",
"wrongType": "Dit object is geen punt of lijn en kan daarom niet geïmporteerd worden",

View file

@ -53,8 +53,7 @@
"search": "ستھتیاں وچ کھوجو",
"searching": "کھوجیا جا رہا اے۔ ۔ ۔"
},
"sharescreen": {
},
"sharescreen": {},
"weekdays": {
"abbreviations": {
"friday": "جـ",

View file

@ -113,7 +113,6 @@
"layerNotEnabled": "Warstwa {layer} nie jest włączona. Włącz tę warstwę, aby dodać funkcję",
"openLayerControl": "Otwórz okno sterowania warstwą",
"pleaseLogin": "Zaloguj się, aby dodać nową funkcję",
"presetInfo": "Nowe POI będzie miało {tags}",
"stillLoading": "Dane nadal są wczytywane. Poczekaj chwilę, zanim dodasz nową funkcję.",
"title": "Dodaj nową funkcję",
"wrongType": "Ten obiekt nie jest węzłem ani linią i nie można go zaimportować",

View file

@ -153,7 +153,6 @@
"layerNotEnabled": "A camada {layer} não está ativa. Ative esta camada para adicionar um elemento",
"openLayerControl": "Abra a caixa de controlo da camada",
"pleaseLogin": "Por favor, inicie sessão para adicionar um novo elemento",
"presetInfo": "O novo POI terá {tags}",
"stillLoading": "Os dados ainda estão a ser carregados. Aguarde um pouco antes de adicionar um novo elemento.",
"title": "Adicionar um novo elemento",
"wrongType": "Este elemento não é um nó nem uma linha e não pode ser importado",

View file

@ -1,2 +1 @@
{
}
{}

View file

@ -155,7 +155,6 @@
"layerNotEnabled": "Шар {layer} не увімкнений. Увімкніть цей шар, щоб додати обʼєкт",
"openLayerControl": "Відкрийте вікно керування шаром",
"pleaseLogin": "Будь ласка, увійдіть у систему OpenStreetMap, щоб додати новий об'єкт",
"presetInfo": "Нова точка інтересу матиме {tags}",
"stillLoading": "Дані все ще завантаження. Будь ласка, почекайте трохи, перш ніж додати новий обʼєкт.",
"title": "Додати новий об'єкт",
"wrongType": "Цей обʼєкт не є, а ні точкою, а ні лінією і не може бути імпортований",

View file

@ -155,7 +155,6 @@
"layerNotEnabled": "圖層 {layer} 目前無法使用,請先啟用這圖層再加新的圖徵",
"openLayerControl": "開啟圖層控制框",
"pleaseLogin": "請先使用 OpenStreetMap 登入來新增圖徵",
"presetInfo": "新的興趣點有 {tags}",
"stillLoading": "目前仍在載入資料,請稍後再來新增圖徵。",
"title": "新增新的圖徵",
"wrongType": "這個圖徵並非節點也不是路徑,因此無法匯入",

View file

@ -599,9 +599,8 @@
"river"
],
[
"<",
"level",
0
"has",
"is_tunnel"
]
],
"layout": {
@ -673,9 +672,8 @@
"filter": [
"all",
[
"<",
"level",
0
"has",
"is_tunnel"
],
[
"in",
@ -702,6 +700,98 @@
]
}
},
{
"id": "roads_tunnels_footway_casing_outer",
"type": "line",
"source": "protomaps",
"source-layer": "roads",
"filter": [
"all",
[
"has",
"is_tunnel"
],
[
"!has",
"is_bridge"
],
[
"in",
"kind",
"other",
"path"
],
[
"in",
"kind_detail",
"footway",
"cycleway"
]
],
"paint": {
"line-color": "#888888",
"line-width": [
"interpolate",
[
"exponential",
1.6
],
[
"zoom"
],
14,
0,
20,
9
]
}
},
{
"id": "roads_tunnels_footway_casing_inner",
"type": "line",
"source": "protomaps",
"source-layer": "roads",
"filter": [
"all",
[
"has",
"is_tunnel"
],
[
"!has",
"is_bridge"
],
[
"in",
"kind",
"other",
"path"
],
[
"in",
"kind_detail",
"footway",
"cycleway"
]
],
"paint": {
"line-color": "#ffffff",
"line-width": [
"interpolate",
[
"exponential",
1.6
],
[
"zoom"
],
14,
0,
20,
8
]
}
},
{
"id": "roads_tunnels_minor_casing",
"type": "line",
@ -710,9 +800,8 @@
"filter": [
"all",
[
"<",
"level",
0
"has",
"is_tunnel"
],
[
"==",
@ -768,9 +857,8 @@
"filter": [
"all",
[
"<",
"level",
0
"has",
"is_tunnel"
],
[
"==",
@ -824,9 +912,8 @@
"filter": [
"all",
[
"<",
"level",
0
"has",
"is_tunnel"
],
[
"==",
@ -880,9 +967,8 @@
"filter": [
"all",
[
"<",
"level",
0
"has",
"is_tunnel"
],
[
"==",
@ -943,15 +1029,24 @@
"filter": [
"all",
[
"<",
"level",
0
"has",
"is_tunnel"
],
[
"in",
"kind",
"other",
"path"
],
[
"!=",
"kind_detail",
"footway"
],
[
"!=",
"kind_detail",
"cycleway"
]
],
"paint": {
@ -976,6 +1071,96 @@
]
}
},
{
"id": "roads_tunnels_footway",
"type": "line",
"source": "protomaps",
"source-layer": "roads",
"filter": [
"all",
[
"has",
"is_tunnel"
],
[
"in",
"kind",
"other",
"path"
],
[
"==",
"kind_detail",
"footway"
]
],
"paint": {
"line-color": "#d46710",
"line-dasharray": [
4,
1
],
"line-width": [
"interpolate",
[
"exponential",
1.6
],
[
"zoom"
],
14,
0,
20,
5
]
}
},
{
"id": "roads_tunnels_cycleway",
"type": "line",
"source": "protomaps",
"source-layer": "roads",
"filter": [
"all",
[
"has",
"is_tunnel"
],
[
"in",
"kind",
"other",
"path"
],
[
"==",
"kind_detail",
"cycleway"
]
],
"paint": {
"line-color": "#6099c9",
"line-dasharray": [
4,
1
],
"line-width": [
"interpolate",
[
"exponential",
1.6
],
[
"zoom"
],
14,
0,
20,
5
]
}
},
{
"id": "roads_tunnels_minor",
"type": "line",
@ -984,9 +1169,8 @@
"filter": [
"all",
[
"<",
"level",
0
"has",
"is_tunnel"
],
[
"==",
@ -1024,9 +1208,8 @@
"filter": [
"all",
[
"<",
"level",
0
"has",
"is_tunnel"
],
[
"==",
@ -1062,9 +1245,8 @@
"filter": [
"all",
[
"<",
"level",
0
"has",
"is_tunnel"
],
[
"==",
@ -1244,7 +1426,20 @@
"source-layer": "buildings",
"paint": {
"fill-color": "#cccccc",
"fill-opacity": 0.5
"fill-opacity": 0.7,
"fill-outline-color": [
"interpolate",
[
"linear"
],
[
"zoom"
],
15,
"#cccccc",
18,
"#aaaaaa"
]
}
},
{
@ -1363,7 +1558,21 @@
]
],
"paint": {
"line-color": "#e0e0e0",
"line-color": [
"interpolate",
[
"linear"
],
[
"zoom"
],
12,
"#dddddd",
14,
"#aaaaaa",
18,
"#888888"
],
"line-gap-width": [
"interpolate",
[
@ -2956,6 +3165,16 @@
"kind",
"other",
"path"
],
[
"!=",
"kind_detail",
"cycleway"
],
[
"!=",
"kind_detail",
"footway"
]
],
"paint": {

View file

@ -1,6 +1,6 @@
import { Utils } from "../../Utils"
import { Store, UIEventSource } from "../UIEventSource"
import { WBK } from "wikibase-sdk"
import { SimplifiedClaims, WBK } from "wikibase-sdk"
export class WikidataResponse {
public readonly id: string
@ -54,14 +54,13 @@ export class WikidataResponse {
}
static extractClaims(claimsJson: any): Map<string, Set<string>> {
// @ts-ignore
const simplified = Wikidata.wds.simplify.claims(claimsJson, {
const simplified: SimplifiedClaims = Wikidata.wds.simplify.claims(claimsJson, {
timeConverter: "simple-day",
})
const claims = new Map<string, Set<string>>()
for (const claimId in simplified) {
const claimsList: any[] = simplified[claimId]
const claimsList = simplified[claimId]
claims.set(claimId, new Set(claimsList))
}
return claims
@ -439,6 +438,9 @@ export default class Wikidata {
return new WikidataLexeme(response).asWikidataResponse()
}
return WikidataResponse.fromJson(response)
const resp: WikidataResponse = WikidataResponse.fromJson(response)
// 'mul' is the fallback language for wikidata, see https://source.mapcomplete.org/MapComplete/MapComplete/issues/2346
resp.labels.set("*", resp.labels.get("mul"))
return resp
}
}

View file

@ -23,7 +23,7 @@ export class UpdateLegacyLayer extends DesugaringStep<
return json
}
context = context.enter(json.id)
let config = { ...json }
const config = { ...json }
if (config["credits"] === "Not logged in") {
delete config["credits"]
@ -100,7 +100,7 @@ export class UpdateLegacyLayer extends DesugaringStep<
config["mapRendering"] = []
// This is a legacy format, lets create a pointRendering
let location: ("point" | "centroid")[] = ["point"]
let wayHandling: number = config["wayHandling"] ?? 0
const wayHandling: number = config["wayHandling"] ?? 0
if (wayHandling !== 0) {
location = ["point", "centroid"]
}

View file

@ -125,6 +125,9 @@ export interface MappingConfigJson {
* Note that we can not explicitly render this negative case to the user, we cannot show `does _not_ accept coins`.
* If this is important to your usecase, consider using multiple radiobutton-fields without `multiAnswer`
*
* Ifnot has the lowest priority in comparison with 'if', 'freeform', 'addExtraTags', ...
* In the case that two options set different values (e.g. selected option sets "X=Y" and an unselected option sets "X=" through `ifnot`), the latter ifnot is ignored.
*
* ifunset: Do not apply a tag if a different mapping is chosen.
*/
ifnot?: TagConfigJson
@ -267,13 +270,7 @@ export interface QuestionableTagRenderingConfigJson extends TagRenderingConfigJs
* group: expert
*/
default?: string
/**
* question: What tag combintations key should be interpreted as 'unknown'?
* For example, if a feature has `shop=yes`, the question 'what type of shop is this?' should still asked
* ifunset: The question will be considered answered if any value is set for the key
* group: expert
*/
invalidValues?: TagConfigJson
/**
* question: If this key shared and distinguished by a postfix, what is the postfix?
@ -335,4 +332,12 @@ export interface QuestionableTagRenderingConfigJson extends TagRenderingConfigJs
* question: What tags should be applied when the object is soft-deleted?
*/
onSoftDelete?: string[]
/**
* question: What tag combintations key should be interpreted as 'unknown'?
* For example, if a feature has `shop=yes`, the question 'what type of shop is this?' should still asked
* ifunset: The question will be considered answered if any value is set for the key
* group: expert
*/
invalidValues?: TagConfigJson
}

View file

@ -766,6 +766,10 @@ export default class TagRenderingConfig {
* const tags = config.constructChangeSpecification("€5", undefined, undefined, {vending: "books;bicycle_tubes" charge: "€42/book"})
* tags // => [ new Tag("charge", "€5/bicycle_tube; €42/book")]
*
* // Conflicting 'if' and 'ifnot' should ignore ifnot (i.e.: should not have 'fountain='
* const config = new TagRenderingConfig({"id":"drinking_water_type", multiAnswer: true, mappings: [ {"if": "fountain=bubbler", then: "bubbler", "ifnot": "fountain="},{ "if": "fountain=tap", then: "tap", ifnot: "fountain="}, {if: "natural=spring", then: "spring", ifnot: "natural="}]})
* const tags = config.constructChangeSpecification(undefined, undefined, [true, false, false], {})
* tags // => [new Tag("fountain", "bubbler"), new Tag("natural", "")]
*
* @param freeformValue The freeform value which will be applied as 'freeform.key'. Ignored if 'freeform.key' is not set
*

View file

@ -37,6 +37,7 @@
import BaseUIElement from "../../BaseUIElement"
import TitledPanel from "../../Base/TitledPanel.svelte"
import ThemeViewState from "../../../Models/ThemeViewState"
import SpecialTranslation from "../TagRendering/SpecialTranslation.svelte"
export let coordinate: { lon: number; lat: number }
export let state: ThemeViewState
@ -285,10 +286,6 @@
{/each}
</span>
{/if}
<TagHint
embedIn={(tags) => t.presetInfo.Subs({ tags })}
tags={new And(selectedPreset.preset.tags)}
/>
<div class="flex w-full flex-wrap-reverse md:flex-nowrap">
<BackButton on:click={() => (selectedPreset = undefined)} clss="w-full">
@ -305,6 +302,9 @@
</div>
</NextButton>
</div>
<TagHint
tags={selectedPreset.preset.tags}
/>
</TitledPanel>
{:else if _globalFilter?.length > 0 && _globalFilter?.length > checkedOfGlobalFilters}
<Tr t={_globalFilter[checkedOfGlobalFilters].onNewPoint?.safetyCheck} cls="mx-12" />

View file

@ -24,8 +24,8 @@ export class WebAndCommunicationSpecialVisualisations {
{
name: "key",
doc: "The attribute-name containing the link",
required: true,
},
required: true
}
],
constr(
@ -35,7 +35,7 @@ export class WebAndCommunicationSpecialVisualisations {
): BaseUIElement {
const key = argument[0]
return new SvelteUIElement(FediverseLink, { key, tags, state })
},
}
},
{
funcName: "wikipedia",
@ -45,8 +45,8 @@ export class WebAndCommunicationSpecialVisualisations {
{
name: "keyToShowWikipediaFor",
doc: "Use the wikidata entry from this key to show the wikipedia article for. Multiple keys can be given (separated by ';'), in which case the first matching value is used",
defaultValue: "wikidata;wikipedia",
},
defaultValue: "wikidata;wikipedia"
}
],
needsUrls: [...Wikidata.neededUrls, ...Wikipedia.neededUrls],
@ -59,9 +59,9 @@ export class WebAndCommunicationSpecialVisualisations {
return tags[key]?.split(";")?.map((id) => id.trim()) ?? []
})
return new SvelteUIElement(WikipediaPanel, {
wikiIds,
wikiIds
})
},
}
},
{
funcName: "wikidata_label",
@ -72,32 +72,32 @@ export class WebAndCommunicationSpecialVisualisations {
{
name: "keyToShowWikidataFor",
doc: "Use the wikidata entry from this key to show the label",
defaultValue: "wikidata",
},
defaultValue: "wikidata"
}
],
needsUrls: Wikidata.neededUrls,
example:
"`{wikidata_label()}` is a basic example, `{wikipedia(name:etymology:wikidata)}` to show the label itself",
constr: (_, tagsSource, args) =>
new VariableUiElement(
tagsSource
.map((tags) => tags[args[0]])
.map((wikidata) => {
wikidata = Utils.NoEmpty(
wikidata?.split(";")?.map((wd) => wd.trim()) ?? []
)[0]
const entry = Wikidata.LoadWikidataEntry(wikidata)
return new VariableUiElement(
entry.map((e) => {
if (e === undefined || e["success"] === undefined) {
return wikidata
}
const response = <WikidataResponse>e["success"]
return Translation.fromMap(response.labels)
})
)
})
),
constr: (_, tagsSource, args) => {
const id = tagsSource
.map((tags) => tags[args[0]])
.map((wikidata) => {
const wikidataIds = Utils.NoEmpty(
wikidata?.split(";")?.map((wd) => wd.trim()) ?? []
)
return wikidataIds?.[0]
})
const entry = id.bind(id => Wikidata.LoadWikidataEntry(id))
return new VariableUiElement(
entry.map((e) => {
if (e === undefined || e["success"] === undefined) {
return id.data
}
const response = <WikidataResponse>e["success"]
return Translation.fromMap(response.labels)
}))
}
},
new MapillaryLinkVis(),
{
@ -108,29 +108,29 @@ export class WebAndCommunicationSpecialVisualisations {
{
name: "to",
doc: "Who to send the email to?",
required: true,
required: true
},
{
name: "subject",
doc: "The subject of the email",
required: true,
required: true
},
{
name: "body",
doc: "The text in the email",
required: true,
required: true
},
{
name: "button_text",
doc: "The text shown on the button in the UI",
required: true,
},
required: true
}
],
constr(__, tags, args) {
return new SvelteUIElement(SendEmail, { args, tags })
},
}
},
{
funcName: "link",
@ -140,29 +140,29 @@ export class WebAndCommunicationSpecialVisualisations {
{
name: "text",
doc: "Text to be shown",
required: true,
required: true
},
{
name: "href",
doc: "The URL to link to. Note that this will be URI-encoded before ",
required: true,
required: true
},
{
name: "class",
doc: "CSS-classes to add to the element",
doc: "CSS-classes to add to the element"
},
{
name: "download",
doc: "Expects a string which denotes the filename to download the contents of `href` into. If set, this link will act as a download-button.",
doc: "Expects a string which denotes the filename to download the contents of `href` into. If set, this link will act as a download-button."
},
{
name: "arialabel",
doc: "If set, this text will be used as aria-label",
doc: "If set, this text will be used as aria-label"
},
{
name: "icon",
doc: "If set, show this icon next to the link. You might want to combine this with `class: button`",
},
doc: "If set, show this icon next to the link. You might want to combine this with `class: button`"
}
],
constr(
@ -184,10 +184,10 @@ export class WebAndCommunicationSpecialVisualisations {
download: tagSource.map((tags) => Utils.SubstituteKeys(download, tags)),
ariaLabel: tagSource.map((tags) => Utils.SubstituteKeys(ariaLabel, tags)),
newTab: new ImmutableStore(newTab),
icon: tagSource.map((tags) => Utils.SubstituteKeys(icon, tags)),
icon: tagSource.map((tags) => Utils.SubstituteKeys(icon, tags))
}).setSpan()
},
},
}
}
]
}
}

View file

@ -1,11 +1,7 @@
import { FixedUiElement } from "./Base/FixedUiElement"
import BaseUIElement from "./BaseUIElement"
import { default as FeatureTitle } from "./Popup/Title.svelte"
import {
RenderingSpecification,
SpecialVisualization,
SpecialVisualizationState,
} from "./SpecialVisualization"
import { RenderingSpecification, SpecialVisualization, SpecialVisualizationState } from "./SpecialVisualization"
import { HistogramViz } from "./Popup/HistogramViz"
import { UploadToOsmViz } from "./Popup/UploadToOsmViz"
import { MultiApplyViz } from "./Popup/MultiApplyViz"
@ -40,8 +36,11 @@ import { UISpecialVisualisations } from "./SpecialVisualisations/UISpecialVisual
import { SettingsVisualisations } from "./SpecialVisualisations/SettingsVisualisations"
import { ReviewSpecialVisualisations } from "./SpecialVisualisations/ReviewSpecialVisualisations"
import { DataImportSpecialVisualisations } from "./SpecialVisualisations/DataImportSpecialVisualisations"
import TagrenderingManipulationSpecialVisualisations from "./SpecialVisualisations/TagrenderingManipulationSpecialVisualisations"
import { WebAndCommunicationSpecialVisualisations } from "./SpecialVisualisations/WebAndCommunicationSpecialVisualisations"
import TagrenderingManipulationSpecialVisualisations
from "./SpecialVisualisations/TagrenderingManipulationSpecialVisualisations"
import {
WebAndCommunicationSpecialVisualisations
} from "./SpecialVisualisations/WebAndCommunicationSpecialVisualisations"
import ClearGPSHistory from "./BigComponents/ClearGPSHistory.svelte"
import AllFeaturesStatistics from "./Statistics/AllFeaturesStatistics.svelte"
@ -373,7 +372,6 @@ export default class SpecialVisualizations {
})
},
},
{
funcName: "clear_location_history",
docs: "A button to remove the travelled track information from the device",
@ -383,7 +381,6 @@ export default class SpecialVisualizations {
return new SvelteUIElement(ClearGPSHistory, { state })
},
},
{
funcName: "title",
args: [],
@ -408,7 +405,6 @@ export default class SpecialVisualizations {
constr: (state) => new SvelteUIElement(AllFeaturesStatistics, { state }),
},
{
funcName: "translated",
docs: "If the given key can be interpreted as a JSON, only show the key containing the current language (or 'en'). This specialRendering is meant to be used by MapComplete studio and is not useful in map themes",
@ -503,7 +499,6 @@ export default class SpecialVisualizations {
)
},
},
{
funcName: "direction_indicator",
args: [],
@ -519,7 +514,6 @@ export default class SpecialVisualizations {
return new SvelteUIElement(DirectionIndicator, { state, feature })
},
},
{
funcName: "direction_absolute",
docs: "Converts compass degrees (with 0° being north, 90° being east, ...) into a human readable, translated direction such as 'north', 'northeast'",
@ -553,7 +547,6 @@ export default class SpecialVisualizations {
)
},
},
{
funcName: "preset_description",
docs: "Shows the extra description from the presets of the layer, if one matches. It will pick the most specific one (e.g. if preset `A` implies `B`, but `B` does not imply `A`, it'll pick B) or the first one if no ordering can be made. Might be empty",
@ -569,7 +562,6 @@ export default class SpecialVisualizations {
return new VariableUiElement(translation)
},
},
{
funcName: "preset_type_select",
docs: "An editable tag rendering which allows to change the type",

View file

@ -165,16 +165,17 @@ export class Translation extends BaseUIElement {
* Which language will be effectively used for the given language of choice?
*/
public actualLanguage(language: string): "*" | string | undefined {
if (this.translations["*"]) {
return "*"
}
const txt = this.translations[language]
if (txt === undefined && this._strictLanguages) {
return undefined
}
if (txt !== undefined) {
return language
}
if (this._strictLanguages) {
return undefined
}
if (this.translations["*"]) {
return "*"
}
if (this.translations["en"] !== undefined) {
return "en"
}