diff --git a/.vscode/settings.json b/.vscode/settings.json
index b607ae0fc..a0e2c3e54 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -60,5 +60,10 @@
"type": "Gitea",
"name": "MapComplete Forgejo"
}
- ]
+ ],
+ "explorer.fileNesting.enabled": true,
+ "explorer.fileNesting.patterns": {
+ "*": "${capture}.license"
+ },
+ "explorer.fileNesting.expand": false
}
diff --git a/assets/layers/diets/diets.json b/assets/layers/diets/diets.json
index 7b82778bf..e5acaef47 100644
--- a/assets/layers/diets/diets.json
+++ b/assets/layers/diets/diets.json
@@ -692,4 +692,4 @@
}
}
]
-}
+}
\ No newline at end of file
diff --git a/assets/layers/filters/filters.json b/assets/layers/filters/filters.json
index 591e40305..67556c5e1 100644
--- a/assets/layers/filters/filters.json
+++ b/assets/layers/filters/filters.json
@@ -554,7 +554,24 @@
"osmTags": "kids_area!=no"
}
]
+ },
+ {
+ "id": "self_checkout",
+ "options": [
+ {
+ "question": {
+ "en": "Has self-checkout",
+ "nl": "Heeft zelfscan"
+ },
+ "osmTags": {
+ "or": [
+ "self_checkout=yes",
+ "self_checkout=only"
+ ]
+ }
+ }
+ ]
}
],
"allowMove": false
-}
+}
\ No newline at end of file
diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json
index fb3d90a5a..6b56671d2 100644
--- a/assets/layers/questions/questions.json
+++ b/assets/layers/questions/questions.json
@@ -3562,6 +3562,81 @@
"filter": [
"filters.kids_area"
]
+ },
+ {
+ "id": "self_checkout",
+ "labels": [
+ "self_checkout_questions"
+ ],
+ "question": {
+ "en": "Does this place offer self-checkout?",
+ "nl": "Biedt deze plaats zelfscannen aan?"
+ },
+ "questionHint": {
+ "en": "e.g. handheld scanners or a self-checkout kiosk",
+ "nl": "bijv. handscanners of een zelfscankassa"
+ },
+ "mappings": [
+ {
+ "if": "self_checkout=yes",
+ "then": {
+ "en": "This place offers self-checkout",
+ "nl": "Deze plaats biedt zelfscannen aan"
+ }
+ },
+ {
+ "if": "self_checkout=no",
+ "then": {
+ "en": "This place does not offer self-checkout",
+ "nl": "Deze plaats biedt geen zelfscannen aan"
+ }
+ },
+ {
+ "if": "self_checkout=only",
+ "then": {
+ "en": "This place only offers self-checkout",
+ "nl": "Deze plaats biedt enkel zelfscannen aan"
+ }
+ }
+ ],
+ "filter": [
+ "filters.self_checkout"
+ ]
+ },
+ {
+ "id": "self_checkout_type",
+ "labels": [
+ "self_checkout_questions"
+ ],
+ "question": {
+ "en": "What kind of self-checkout does this place offer?",
+ "nl": "Wat voor soort zelfscannen biedt deze plaats aan?"
+ },
+ "mappings": [
+ {
+ "if": "self_checkout:handheld=yes",
+ "ifnot": "self_checkout:handheld=no",
+ "then": {
+ "en": "This place offers self-checkout using a handheld scanner",
+ "nl": "Deze plaats biedt zelfscannen met een handscanner aan"
+ }
+ },
+ {
+ "if": "self_checkout:self_scan=yes",
+ "ifnot": "self_checkout:self_scan=no",
+ "then": {
+ "en": "This place offers self-checkout using a self-checkout kiosk",
+ "nl": "Deze plaats biedt zelfscannen met een zelfscankassa aan"
+ }
+ }
+ ],
+ "condition": {
+ "or": [
+ "self_checkout=yes",
+ "self_checkout=only"
+ ]
+ },
+ "multiAnswer": true
}
],
"allowMove": false,
diff --git a/assets/layers/shops/shops.json b/assets/layers/shops/shops.json
index 8023ad251..17f1ed37f 100644
--- a/assets/layers/shops/shops.json
+++ b/assets/layers/shops/shops.json
@@ -1665,6 +1665,28 @@
}
}
},
+ {
+ "builtin": "self_checkout",
+ "override": {
+ "+mappings": [
+ {
+ "if": {
+ "and": [
+ "self_checkout=",
+ "shop!=supermarket",
+ "shop!=convenience",
+ "shop!=chemist"
+ ]
+ },
+ "then": {
+ "en": "This shop (probably) does not offer self-checkout"
+ },
+ "hideInAnswer": true
+ }
+ ]
+ }
+ },
+ "self_checkout_type",
"description",
"toilet_at_amenity_lib.all"
],
@@ -1738,4 +1760,4 @@
]
},
"allowMove": true
-}
+}
\ No newline at end of file
diff --git a/assets/themes/parkings/parkings.json b/assets/themes/parkings/parkings.json
index 0e3480033..bb1ec8692 100644
--- a/assets/themes/parkings/parkings.json
+++ b/assets/themes/parkings/parkings.json
@@ -65,7 +65,10 @@
"parking_spaces",
"parking_ticket_machine",
{
- "builtin": "charging_station",
+ "builtin": [
+ "charging_station",
+ "charge_point"
+ ],
"override": {
"minzoom": 18
}
diff --git a/assets/themes/zhv/zhv.json b/assets/themes/zhv/zhv.json
index e6807a037..2629288f4 100644
--- a/assets/themes/zhv/zhv.json
+++ b/assets/themes/zhv/zhv.json
@@ -49,7 +49,7 @@
"render": {
"special": {
"type": "import_button",
- "targetLayer": "transit_stops",
+ "targetLayer": "all_transit_stops",
"tags": "_tags",
"text": {
"en": "Add this stop"
diff --git a/langs/layers/en.json b/langs/layers/en.json
index 6365bf5d6..ee422ee16 100644
--- a/langs/layers/en.json
+++ b/langs/layers/en.json
@@ -5841,6 +5841,13 @@
}
}
},
+ "22": {
+ "options": {
+ "0": {
+ "question": "Has self-checkout"
+ }
+ }
+ },
"3": {
"options": {
"0": {
@@ -9978,6 +9985,32 @@
},
"question": "What kind of seating does {title()} have?"
},
+ "self_checkout": {
+ "mappings": {
+ "0": {
+ "then": "This place offers self-checkout"
+ },
+ "1": {
+ "then": "This place does not offer self-checkout"
+ },
+ "2": {
+ "then": "This place only offers self-checkout"
+ }
+ },
+ "question": "Does this place offer self-checkout?",
+ "questionHint": "e.g. handheld scanners or a self-checkout kiosk"
+ },
+ "self_checkout_type": {
+ "mappings": {
+ "0": {
+ "then": "This place offers self-checkout using a handheld scanner"
+ },
+ "1": {
+ "then": "This place offers self-checkout using a self-checkout kiosk"
+ }
+ },
+ "question": "What kind of self-checkout does this place offer?"
+ },
"service:electricity": {
"mappings": {
"0": {
diff --git a/langs/layers/nl.json b/langs/layers/nl.json
index 6e47acc32..bac059917 100644
--- a/langs/layers/nl.json
+++ b/langs/layers/nl.json
@@ -5519,6 +5519,13 @@
}
}
},
+ "22": {
+ "options": {
+ "0": {
+ "question": "Heeft zelfscan"
+ }
+ }
+ },
"5": {
"options": {
"0": {
@@ -8655,6 +8662,32 @@
},
"question": "Wat voor zitplaatsen heeft {title()}?"
},
+ "self_checkout": {
+ "mappings": {
+ "0": {
+ "then": "Deze plaats biedt zelfscannen aan"
+ },
+ "1": {
+ "then": "Deze plaats biedt geen zelfscannen aan"
+ },
+ "2": {
+ "then": "Deze plaats biedt enkel zelfscannen aan"
+ }
+ },
+ "question": "Biedt deze plaats zelfscannen aan?",
+ "questionHint": "bijv. handscanners of een zelfscankassa"
+ },
+ "self_checkout_type": {
+ "mappings": {
+ "0": {
+ "then": "Deze plaats biedt zelfscannen met een handscanner aan"
+ },
+ "1": {
+ "then": "Deze plaats biedt zelfscannen met een zelfscankassa aan"
+ }
+ },
+ "question": "Wat voor soort zelfscannen biedt deze plaats aan?"
+ },
"service:electricity": {
"mappings": {
"0": {
diff --git a/src/UI/Popup/AllTagsPanel/TagLink.svelte b/src/UI/Popup/AllTagsPanel/TagLink.svelte
index a90c8b174..bc41ddb1b 100644
--- a/src/UI/Popup/AllTagsPanel/TagLink.svelte
+++ b/src/UI/Popup/AllTagsPanel/TagLink.svelte
@@ -30,17 +30,20 @@
}
const url = tag2linkData.find((item) => item.key === `Key:${key}`)?.url
+
+ const values: string[] =
+ typeof $tags[key] === "string" ? $tags[key].split(";").map((v: string) => v.trim()) : []
-{#if url}
-
- {$tags[key]}
-
+{#if url && values.length > 0}
+ {#each values as value, index}
+
+ {#if index > 0}; {/if}
+
+ {value}
+
+
+ {/each}
{:else}
{$tags[key]}
{/if}