From 4a45c650be64c871f3b6fb0cf50b556f4301b4f8 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 16 Mar 2025 16:31:38 +0100 Subject: [PATCH 01/90] Feature: 360-view, experimenting with photo-sphere-viewer --- package-lock.json | 93 ++++++++++++++++++++ package.json | 2 + public/assets/loader_base.jpg | Bin 0 -> 148827 bytes src/Logic/Web/NearbyImagesSearch.ts | 3 +- src/UI/Image/photoAdapter.ts | 54 ++++++++++++ src/UI/Test.svelte | 129 ++++++++++++++++++++++------ src/test.ts | 13 ++- 7 files changed, 265 insertions(+), 29 deletions(-) create mode 100644 public/assets/loader_base.jpg create mode 100644 src/UI/Image/photoAdapter.ts diff --git a/package-lock.json b/package-lock.json index 2fd7ed9297..94762b566f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@comunica/core": "^3.0.1", "@comunica/query-sparql": "^3.0.1", "@comunica/query-sparql-link-traversal": "^0.3.0", + "@photo-sphere-viewer/equirectangular-tiles-adapter": "^5.12.1", "@rapideditor/location-conflation": "^1.3.0", "@rgossiaux/svelte-headlessui": "^1.0.2", "@rgossiaux/svelte-heroicons": "^0.1.2", @@ -74,6 +75,7 @@ "panzoom": "^9.4.3", "papaparse": "^5.5.2", "pg": "^8.11.3", + "photo-sphere-viewer": "^4.8.1", "pic4carto": "^2.1.15", "pluscodes": "^2.6.0", "pmtiles": "^4.2.1", @@ -6273,6 +6275,32 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/@photo-sphere-viewer/core": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/core/-/core-5.12.1.tgz", + "integrity": "sha512-aK+SueXdKOr5FQAMwjxswHaa2OZcpWi4tx5P4fjq1vWEDa8PtdaoSdQaAp3Csmthvd9DlfNDUb6c21fTudzM/w==", + "license": "MIT", + "peer": true, + "dependencies": { + "three": "^0.173.0" + } + }, + "node_modules/@photo-sphere-viewer/core/node_modules/three": { + "version": "0.173.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.173.0.tgz", + "integrity": "sha512-AUwVmViIEUgBwxJJ7stnF0NkPpZxx1aZ6WiAbQ/Qq61h6I9UR4grXtZDmO8mnlaNORhHnIBlXJ1uBxILEKuVyw==", + "license": "MIT", + "peer": true + }, + "node_modules/@photo-sphere-viewer/equirectangular-tiles-adapter": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/equirectangular-tiles-adapter/-/equirectangular-tiles-adapter-5.12.1.tgz", + "integrity": "sha512-Z9oiPNQwBdkGD1m+bXe0EuuBgdZFzec+d7MKexYgEqzLLukgp1WJ4il+3omMaRP5HAhRVWR5vapVALag+8BmPg==", + "license": "MIT", + "peerDependencies": { + "@photo-sphere-viewer/core": "5.12.1" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -23230,6 +23258,17 @@ "split2": "^4.1.0" } }, + "node_modules/photo-sphere-viewer": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/photo-sphere-viewer/-/photo-sphere-viewer-4.8.1.tgz", + "integrity": "sha512-Yl1KZq1adtrajCOrf8Y79Qi4A35DfEu8atL779YOdA9XHoH2l2+sYovejnZlGgUM0hEbTyenRDoyXSy/MtioYg==", + "deprecated": "Use @photo-sphere-viewer/core instead, see https://photo-sphere-viewer.js.org/guide/migration.html", + "license": "MIT", + "dependencies": { + "three": "^0.147.0", + "uevent": "^2.1.1" + } + }, "node_modules/pic4carto": { "version": "2.1.15", "license": "SEE LICENSE IN LICENSE.txt", @@ -26708,6 +26747,12 @@ "node": ">=0.8" } }, + "node_modules/three": { + "version": "0.147.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.147.0.tgz", + "integrity": "sha512-LPTOslYQXFkmvceQjFTNnVVli2LaVF6C99Pv34fJypp8NbQLbTlu3KinZ0zURghS5zEehK+VQyvWuPZ/Sm8fzw==", + "license": "MIT" + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -27594,6 +27639,12 @@ "node": ">=4.2.0" } }, + "node_modules/uevent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/uevent/-/uevent-2.2.0.tgz", + "integrity": "sha512-48s5LF/c6R1fUmctGib/dWKhZjZLd4aK/85dwVAbwgHNBSO0k0UNp0ZKZpkSbU6633qYhgykYQPakTSuOxZopA==", + "license": "MIT" + }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", @@ -34147,6 +34198,29 @@ "version": "2.8.2", "dev": true }, + "@photo-sphere-viewer/core": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/core/-/core-5.12.1.tgz", + "integrity": "sha512-aK+SueXdKOr5FQAMwjxswHaa2OZcpWi4tx5P4fjq1vWEDa8PtdaoSdQaAp3Csmthvd9DlfNDUb6c21fTudzM/w==", + "peer": true, + "requires": { + "three": "^0.173.0" + }, + "dependencies": { + "three": { + "version": "0.173.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.173.0.tgz", + "integrity": "sha512-AUwVmViIEUgBwxJJ7stnF0NkPpZxx1aZ6WiAbQ/Qq61h6I9UR4grXtZDmO8mnlaNORhHnIBlXJ1uBxILEKuVyw==", + "peer": true + } + } + }, + "@photo-sphere-viewer/equirectangular-tiles-adapter": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/equirectangular-tiles-adapter/-/equirectangular-tiles-adapter-5.12.1.tgz", + "integrity": "sha512-Z9oiPNQwBdkGD1m+bXe0EuuBgdZFzec+d7MKexYgEqzLLukgp1WJ4il+3omMaRP5HAhRVWR5vapVALag+8BmPg==", + "requires": {} + }, "@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -46355,6 +46429,15 @@ "split2": "^4.1.0" } }, + "photo-sphere-viewer": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/photo-sphere-viewer/-/photo-sphere-viewer-4.8.1.tgz", + "integrity": "sha512-Yl1KZq1adtrajCOrf8Y79Qi4A35DfEu8atL779YOdA9XHoH2l2+sYovejnZlGgUM0hEbTyenRDoyXSy/MtioYg==", + "requires": { + "three": "^0.147.0", + "uevent": "^2.1.1" + } + }, "pic4carto": { "version": "2.1.15", "requires": { @@ -48749,6 +48832,11 @@ "thenify": ">= 3.1.0 < 4" } }, + "three": { + "version": "0.147.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.147.0.tgz", + "integrity": "sha512-LPTOslYQXFkmvceQjFTNnVVli2LaVF6C99Pv34fJypp8NbQLbTlu3KinZ0zURghS5zEehK+VQyvWuPZ/Sm8fzw==" + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -49436,6 +49524,11 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" }, + "uevent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/uevent/-/uevent-2.2.0.tgz", + "integrity": "sha512-48s5LF/c6R1fUmctGib/dWKhZjZLd4aK/85dwVAbwgHNBSO0k0UNp0ZKZpkSbU6633qYhgykYQPakTSuOxZopA==" + }, "uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", diff --git a/package.json b/package.json index 391836415f..5f822006ef 100644 --- a/package.json +++ b/package.json @@ -177,6 +177,7 @@ "@comunica/core": "^3.0.1", "@comunica/query-sparql": "^3.0.1", "@comunica/query-sparql-link-traversal": "^0.3.0", + "@photo-sphere-viewer/equirectangular-tiles-adapter": "^5.12.1", "@rapideditor/location-conflation": "^1.3.0", "@rgossiaux/svelte-headlessui": "^1.0.2", "@rgossiaux/svelte-heroicons": "^0.1.2", @@ -236,6 +237,7 @@ "panzoom": "^9.4.3", "papaparse": "^5.5.2", "pg": "^8.11.3", + "photo-sphere-viewer": "^4.8.1", "pic4carto": "^2.1.15", "pluscodes": "^2.6.0", "pmtiles": "^4.2.1", diff --git a/public/assets/loader_base.jpg b/public/assets/loader_base.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4be0e500342340aef0b810e47fd0167a41724ad3 GIT binary patch literal 148827 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�I*F@t{3rmk;_4|08=f8hkjp?sVN2S4426k(p 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�z)!TF-IrPPvq^OLI5kYJ26-eMDCFi&r=mB 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≶okKB5HOyc)&X#_X;}KQkO0wjjjE+ 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 O@y=j+5B~tth5y+r?d_QW literal 0 HcmV?d00001 diff --git a/src/Logic/Web/NearbyImagesSearch.ts b/src/Logic/Web/NearbyImagesSearch.ts index 0b4c07f70f..69987f855e 100644 --- a/src/Logic/Web/NearbyImagesSearch.ts +++ b/src/Logic/Web/NearbyImagesSearch.ts @@ -325,7 +325,7 @@ class MapillaryFetcher implements ImageFetcher { private readonly end_captured_at?: Date constructor(options?: { - panoramas: undefined | "only" | "no" + panoramas?: undefined | "only" | "no" max_images?: 100 | number start_captured_at?: Date end_captured_at?: Date @@ -411,7 +411,6 @@ export class CombinedFetcher { new ImagesFromPanoramaxFetcher(), new ImagesFromPanoramaxFetcher(Constants.panoramax.url), new MapillaryFetcher({ - panoramas: "no", max_images: 25, start_captured_at: maxage, }), diff --git a/src/UI/Image/photoAdapter.ts b/src/UI/Image/photoAdapter.ts new file mode 100644 index 0000000000..651052de0d --- /dev/null +++ b/src/UI/Image/photoAdapter.ts @@ -0,0 +1,54 @@ +import { + EquirectangularTilesAdapter, + EquirectangularTilesAdapterConfig +} from "@photo-sphere-viewer/equirectangular-tiles-adapter" + +export class PhotoAdapter extends EquirectangularTilesAdapter { + // This code was shamelessly stolen from https://gitlab.com/panoramax/clients/web-viewer/-/blob/develop/src/utils/PhotoAdapter.js + // MIT-license; thank you adrien! + + private readonly _shouldGoFast: () => boolean + + constructor(viewer, config?: EquirectangularTilesAdapterConfig & { shouldGoFast?: () => boolean }) { + super(viewer, config) + this._shouldGoFast = config?.shouldGoFast ?? (() => true) + } + + /** + * Override to skip loading SD images according to shouldGoFast option. + */ + public async loadTexture(panorama, loader) { + if (!panorama.origBaseUrl) { + panorama.origBaseUrl = panorama.baseUrl + } else { + panorama.baseUrl = panorama.origBaseUrl + } + + // Fast mode + thumbnail available + no HD image loaded yet + flat picture + if ( + this._shouldGoFast() + && panorama.thumbUrl + && !panorama.hdLoaded + && panorama.rows == 1 + ) { + panorama.baseUrl = panorama.thumbUrl + } + + let data = await super.loadTexture(panorama, loader) + if (panorama.baseUrl === panorama.origBaseUrl) { + panorama.hdLoaded = true + } + return data + } + + /** + * Override to skip loading tiles according to shouldGoFast option. + * @private + */ + /* + private __loadTiles(tiles) { + if (!this._shouldGoFast()) { + super.__loadTiles(tiles) + } + }*/ +} diff --git a/src/UI/Test.svelte b/src/UI/Test.svelte index 49e65bdd6b..929ee916ec 100644 --- a/src/UI/Test.svelte +++ b/src/UI/Test.svelte @@ -1,34 +1,113 @@ - -Permission: -{$permission} -Available: -{$av} -Location: -{JSON.stringify($loc)} -

    - {#each logs as log} -
  1. {log}
  2. - {/each} -
+ +
+ diff --git a/src/test.ts b/src/test.ts index 2765e2ea11..1dc31faa39 100644 --- a/src/test.ts +++ b/src/test.ts @@ -1,4 +1,13 @@ import Test from "./UI/Test.svelte" -import { OsmConnection } from "./Logic/Osm/OsmConnection" +import { ImageData, PanoramaxXYZ } from "panoramax-js" + +const target = document.getElementById("maindiv") +target.innerHTML = "" +let img = "https://panoramax-storage-public-fast.s3.gra.perf.cloud.ovh.net/main-pictures/d2/8c/ba/cf/c807-4dbf-b8c8-b1c3aa89182d.jpg" +let imgId = "d28cbacf-c807-4dbf-b8c8-b1c3aa89182d" +let panoramax = new PanoramaxXYZ() +panoramax.imageInfo(imgId).then((imageInfo: ImageData) => { + console.log("IMG INFO: ", imageInfo) + new Test({ target, props: { imageInfo } }) +}) -new OsmConnection().interact("user/details.json").then((r) => console.log(">>>", r)) From d178dca41280a48cddbb7ea74e3a27229e4e60e8 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Fri, 28 Mar 2025 22:36:02 +0100 Subject: [PATCH 02/90] Theme(hailhydrant): add ref question (#1454) --- assets/layers/hydrant/hydrant.json | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) 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 From 693114b3d6c29a13d01a1eebd71e3821764560ad Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Fri, 28 Mar 2025 23:16:12 +0100 Subject: [PATCH 03/90] Theme(street_lighting): Add utility poles (#1642) --- assets/layers/street_lamps/street_lamps.json | 58 ++++++++++++- assets/layers/utility_pole/license_info.json | 10 +++ assets/layers/utility_pole/utility_pole.json | 65 +++++++++++++++ assets/layers/utility_pole/utility_pole.svg | 82 +++++++++++++++++++ .../utility_pole/utility_pole.svg.license | 2 + .../street_lighting/street_lighting.json | 13 +++ .../street_lighting_assen.json | 10 ++- 7 files changed, 234 insertions(+), 6 deletions(-) create mode 100644 assets/layers/utility_pole/license_info.json create mode 100644 assets/layers/utility_pole/utility_pole.json create mode 100644 assets/layers/utility_pole/utility_pole.svg create mode 100644 assets/layers/utility_pole/utility_pole.svg.license 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/themes/street_lighting/street_lighting.json b/assets/themes/street_lighting/street_lighting.json index 133d3536f0..f4405d8b5e 100644 --- a/assets/themes/street_lighting/street_lighting.json +++ b/assets/themes/street_lighting/street_lighting.json @@ -45,6 +45,19 @@ ], "layers": [ "street_lamps", + { + "builtin": "utility_pole", + "override": { + "tagRenderings+": [ + { + "builtin": "street_lamps.street_lamp_question", + "override": { + "condition": "highway=street_lamp" + } + } + ] + } + }, { "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 From cb9c48a0d4fd8e7a5c266194564df7de8304128d Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Sat, 29 Mar 2025 11:15:52 +0100 Subject: [PATCH 04/90] Chore: Reset translations --- langs/themes/ca.json | 4 ++-- langs/themes/cs.json | 4 ++-- langs/themes/da.json | 4 ++-- langs/themes/de.json | 4 ++-- langs/themes/en.json | 4 ++-- langs/themes/es.json | 4 ++-- langs/themes/fr.json | 4 ++-- langs/themes/hu.json | 4 ++-- langs/themes/it.json | 4 ++-- langs/themes/ko.json | 4 ++-- langs/themes/nb_NO.json | 4 ++-- langs/themes/nl.json | 4 ++-- langs/themes/pa_PK.json | 2 +- langs/themes/pl.json | 4 ++-- langs/themes/zh_Hant.json | 4 ++-- 15 files changed, 29 insertions(+), 29 deletions(-) diff --git a/langs/themes/ca.json b/langs/themes/ca.json index 7313559afe..158149060e 100644 --- a/langs/themes/ca.json +++ b/langs/themes/ca.json @@ -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..b05f5e2998 100644 --- a/langs/themes/cs.json +++ b/langs/themes/cs.json @@ -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..070670df3d 100644 --- a/langs/themes/da.json +++ b/langs/themes/da.json @@ -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..4bfaf03090 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -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..218528132f 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -1255,7 +1255,7 @@ "street_lighting": { "description": "On this map you can find everything about street lighting", "layers": { - "1": { + "2": { "name": "Lit streets", "tagRenderings": { "lit": { @@ -1280,7 +1280,7 @@ "render": "Lit street" } }, - "2": { + "3": { "override": { "tagRenderings+": { "0": { diff --git a/langs/themes/es.json b/langs/themes/es.json index f6bc95ee11..cb93421d9d 100644 --- a/langs/themes/es.json +++ b/langs/themes/es.json @@ -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..e0314c7e03 100644 --- a/langs/themes/fr.json +++ b/langs/themes/fr.json @@ -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..4cf88737aa 100644 --- a/langs/themes/it.json +++ b/langs/themes/it.json @@ -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..6c33842fc5 100644 --- a/langs/themes/ko.json +++ b/langs/themes/ko.json @@ -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..caab9bbb7f 100644 --- a/langs/themes/nb_NO.json +++ b/langs/themes/nb_NO.json @@ -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..bc4b0c69cb 100644 --- a/langs/themes/nl.json +++ b/langs/themes/nl.json @@ -1291,7 +1291,7 @@ "street_lighting": { "description": "Op deze kaart vind je alles over straatlantaarns", "layers": { - "1": { + "2": { "name": "Verlichte straten", "tagRenderings": { "lit": { @@ -1316,7 +1316,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..4ef9e6aee8 100644 --- a/langs/themes/pa_PK.json +++ b/langs/themes/pa_PK.json @@ -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..6c0397395b 100644 --- a/langs/themes/pl.json +++ b/langs/themes/pl.json @@ -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/zh_Hant.json b/langs/themes/zh_Hant.json index 3278776d81..4c03faa2fa 100644 --- a/langs/themes/zh_Hant.json +++ b/langs/themes/zh_Hant.json @@ -781,7 +781,7 @@ "street_lighting": { "description": "在這份地圖你可以找到任何有關路燈的事情", "layers": { - "1": { + "2": { "name": "有照明的道路", "tagRenderings": { "lit": { @@ -806,7 +806,7 @@ "render": "照明道路" } }, - "2": { + "3": { "override": { "tagRenderings+": { "0": { From 01ba98a8207d887e78ad8682c75267c49e86e021 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 30 Mar 2025 03:10:29 +0200 Subject: [PATCH 05/90] =?UTF-8?q?Feature:=20first=20working=20version=20of?= =?UTF-8?q?=20inspecting=20360=C2=B0=20images?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layers/geocoded_image/geocoded_image.json | 13 +- .../mapcomplete-changes.json | 9 +- package-lock.json | 117 ++++------------- package.json | 7 +- public/assets/loader_base.jpg | Bin 148827 -> 0 bytes scripts/ScriptUtils.ts | 1 + scripts/fixPannellum.sh | 8 ++ .../ImageProviders/GenericImageProvider.ts | 4 + src/Logic/ImageProviders/ImageProvider.ts | 17 ++- src/Logic/ImageProviders/Imgur.ts | 4 + src/Logic/ImageProviders/Mapillary.ts | 44 ++++++- src/Logic/ImageProviders/Panoramax.ts | 17 ++- src/Logic/State/UserSettingsMetaTagging.ts | 48 ++----- src/Logic/Web/NearbyImagesSearch.ts | 120 ++---------------- src/UI/Image/AttributedImage.svelte | 7 +- src/UI/Image/ImageOperations.svelte | 5 +- src/UI/Image/ImagePreview.svelte | 52 ++++++-- src/UI/Image/LinkableImage.svelte | 7 +- src/UI/Image/NearbyImages.svelte | 35 +++-- src/UI/Image/photoAdapter.ts | 54 -------- src/UI/Image/photoSphereViewerWrapper.ts | 67 ++++++++++ src/UI/Test.svelte | 116 +++-------------- src/UI/ThemeViewGUI.svelte | 2 +- src/test.ts | 12 +- 24 files changed, 330 insertions(+), 436 deletions(-) delete mode 100644 public/assets/loader_base.jpg create mode 100755 scripts/fixPannellum.sh delete mode 100644 src/UI/Image/photoAdapter.ts create mode 100644 src/UI/Image/photoSphereViewerWrapper.ts diff --git a/assets/layers/geocoded_image/geocoded_image.json b/assets/layers/geocoded_image/geocoded_image.json index dd6f57efdd..e6d24f9f88 100644 --- a/assets/layers/geocoded_image/geocoded_image.json +++ b/assets/layers/geocoded_image/geocoded_image.json @@ -2,6 +2,9 @@ "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'" + }, "pointRendering": [ { "location": [ @@ -48,7 +51,15 @@ } } ], - "iconSize": "14,14" + "iconSize": { + "render": "14,14", + "mappings": [ + { + "if": "spherical=yes", + "then": "28,28" + } + ] + } }, { "location": [ diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index 335c9ba802..5b843b26b9 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -858,21 +858,24 @@ { "question": { "en": "All platforms", - "cs": "Všechny platformy" + "cs": "Všechny platformy", + "de": "Alle Plattformen" }, "quesiton": "All platforms" }, { "question": { "en": "Made with Android", - "cs": "Vytvořeno s Androidem" + "cs": "Vytvořeno s Androidem", + "de": "Mit Android erstellt" }, "osmTags": "android=yes" }, { "question": { "en": "Made on the web", - "cs": "Vytvořeno na webu" + "cs": "Vytvořeno na webu", + "de": "Im Internet erstellt" }, "osmTags": "android=" } diff --git a/package-lock.json b/package-lock.json index 4d6a27479e..5cf482c453 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,6 @@ "@comunica/core": "^3.0.1", "@comunica/query-sparql": "^3.0.1", "@comunica/query-sparql-link-traversal": "^0.3.0", - "@photo-sphere-viewer/equirectangular-tiles-adapter": "^5.12.1", "@rapideditor/location-conflation": "^1.3.0", "@rgossiaux/svelte-headlessui": "^1.0.2", "@rgossiaux/svelte-heroicons": "^0.1.2", @@ -30,6 +29,7 @@ "@types/dompurify": "^3.0.2", "@types/follow-redirects": "^1.14.4", "@types/node": "^22.13.5", + "@types/pannellum": "^2.5.0", "@types/pg": "^8.11.11", "@types/qrcode-generator": "^1.0.6", "@types/showdown": "^2.0.0", @@ -71,11 +71,11 @@ "opening_hours": "^3.6.0", "osm-auth": "^2.6.0", "osmtogeojson": "^3.0.0-beta.5", + "pannellum": "^2.5.6", "panoramax-js": "^0.4.8", "panzoom": "^9.4.3", "papaparse": "^5.5.2", "pg": "^8.11.3", - "photo-sphere-viewer": "^4.8.1", "pic4carto": "^2.1.15", "pluscodes": "^2.6.0", "pmtiles": "^4.2.1", @@ -6275,32 +6275,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@photo-sphere-viewer/core": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/core/-/core-5.12.1.tgz", - "integrity": "sha512-aK+SueXdKOr5FQAMwjxswHaa2OZcpWi4tx5P4fjq1vWEDa8PtdaoSdQaAp3Csmthvd9DlfNDUb6c21fTudzM/w==", - "license": "MIT", - "peer": true, - "dependencies": { - "three": "^0.173.0" - } - }, - "node_modules/@photo-sphere-viewer/core/node_modules/three": { - "version": "0.173.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.173.0.tgz", - "integrity": "sha512-AUwVmViIEUgBwxJJ7stnF0NkPpZxx1aZ6WiAbQ/Qq61h6I9UR4grXtZDmO8mnlaNORhHnIBlXJ1uBxILEKuVyw==", - "license": "MIT", - "peer": true - }, - "node_modules/@photo-sphere-viewer/equirectangular-tiles-adapter": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/equirectangular-tiles-adapter/-/equirectangular-tiles-adapter-5.12.1.tgz", - "integrity": "sha512-Z9oiPNQwBdkGD1m+bXe0EuuBgdZFzec+d7MKexYgEqzLLukgp1WJ4il+3omMaRP5HAhRVWR5vapVALag+8BmPg==", - "license": "MIT", - "peerDependencies": { - "@photo-sphere-viewer/core": "5.12.1" - } - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -11480,6 +11454,12 @@ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" }, + "node_modules/@types/pannellum": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@types/pannellum/-/pannellum-2.5.0.tgz", + "integrity": "sha512-iFVwMHmsTx91t74gU12bDmB1ty5lRgmfK6X+FxymQe8n0nuw3Pp/vk0nw73YdL9WqZgthrpf1KLPzQjZDUsj0g==", + "license": "MIT" + }, "node_modules/@types/papaparse": { "version": "5.3.15", "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.15.tgz", @@ -23024,6 +23004,12 @@ "version": "1.0.0", "license": "MIT" }, + "node_modules/pannellum": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/pannellum/-/pannellum-2.5.6.tgz", + "integrity": "sha512-R4kSPpj36wQPlyIi9ZftxPfVYF11DEbNBATUEI+pkMGZDFYBV5Jxi6tYFVDdmxA2xaTeKZQHMIuIIj7njVSTQQ==", + "license": "MIT" + }, "node_modules/panoramax-js": { "version": "0.4.8", "resolved": "https://registry.npmjs.org/panoramax-js/-/panoramax-js-0.4.8.tgz", @@ -23258,17 +23244,6 @@ "split2": "^4.1.0" } }, - "node_modules/photo-sphere-viewer": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/photo-sphere-viewer/-/photo-sphere-viewer-4.8.1.tgz", - "integrity": "sha512-Yl1KZq1adtrajCOrf8Y79Qi4A35DfEu8atL779YOdA9XHoH2l2+sYovejnZlGgUM0hEbTyenRDoyXSy/MtioYg==", - "deprecated": "Use @photo-sphere-viewer/core instead, see https://photo-sphere-viewer.js.org/guide/migration.html", - "license": "MIT", - "dependencies": { - "three": "^0.147.0", - "uevent": "^2.1.1" - } - }, "node_modules/pic4carto": { "version": "2.1.15", "license": "SEE LICENSE IN LICENSE.txt", @@ -26747,12 +26722,6 @@ "node": ">=0.8" } }, - "node_modules/three": { - "version": "0.147.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.147.0.tgz", - "integrity": "sha512-LPTOslYQXFkmvceQjFTNnVVli2LaVF6C99Pv34fJypp8NbQLbTlu3KinZ0zURghS5zEehK+VQyvWuPZ/Sm8fzw==", - "license": "MIT" - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -27639,12 +27608,6 @@ "node": ">=4.2.0" } }, - "node_modules/uevent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/uevent/-/uevent-2.2.0.tgz", - "integrity": "sha512-48s5LF/c6R1fUmctGib/dWKhZjZLd4aK/85dwVAbwgHNBSO0k0UNp0ZKZpkSbU6633qYhgykYQPakTSuOxZopA==", - "license": "MIT" - }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", @@ -34198,29 +34161,6 @@ "version": "2.8.2", "dev": true }, - "@photo-sphere-viewer/core": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/core/-/core-5.12.1.tgz", - "integrity": "sha512-aK+SueXdKOr5FQAMwjxswHaa2OZcpWi4tx5P4fjq1vWEDa8PtdaoSdQaAp3Csmthvd9DlfNDUb6c21fTudzM/w==", - "peer": true, - "requires": { - "three": "^0.173.0" - }, - "dependencies": { - "three": { - "version": "0.173.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.173.0.tgz", - "integrity": "sha512-AUwVmViIEUgBwxJJ7stnF0NkPpZxx1aZ6WiAbQ/Qq61h6I9UR4grXtZDmO8mnlaNORhHnIBlXJ1uBxILEKuVyw==", - "peer": true - } - } - }, - "@photo-sphere-viewer/equirectangular-tiles-adapter": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/equirectangular-tiles-adapter/-/equirectangular-tiles-adapter-5.12.1.tgz", - "integrity": "sha512-Z9oiPNQwBdkGD1m+bXe0EuuBgdZFzec+d7MKexYgEqzLLukgp1WJ4il+3omMaRP5HAhRVWR5vapVALag+8BmPg==", - "requires": {} - }, "@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -38418,6 +38358,11 @@ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" }, + "@types/pannellum": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@types/pannellum/-/pannellum-2.5.0.tgz", + "integrity": "sha512-iFVwMHmsTx91t74gU12bDmB1ty5lRgmfK6X+FxymQe8n0nuw3Pp/vk0nw73YdL9WqZgthrpf1KLPzQjZDUsj0g==" + }, "@types/papaparse": { "version": "5.3.15", "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.15.tgz", @@ -46271,6 +46216,11 @@ "packet-reader": { "version": "1.0.0" }, + "pannellum": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/pannellum/-/pannellum-2.5.6.tgz", + "integrity": "sha512-R4kSPpj36wQPlyIi9ZftxPfVYF11DEbNBATUEI+pkMGZDFYBV5Jxi6tYFVDdmxA2xaTeKZQHMIuIIj7njVSTQQ==" + }, "panoramax-js": { "version": "0.4.8", "resolved": "https://registry.npmjs.org/panoramax-js/-/panoramax-js-0.4.8.tgz", @@ -46429,15 +46379,6 @@ "split2": "^4.1.0" } }, - "photo-sphere-viewer": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/photo-sphere-viewer/-/photo-sphere-viewer-4.8.1.tgz", - "integrity": "sha512-Yl1KZq1adtrajCOrf8Y79Qi4A35DfEu8atL779YOdA9XHoH2l2+sYovejnZlGgUM0hEbTyenRDoyXSy/MtioYg==", - "requires": { - "three": "^0.147.0", - "uevent": "^2.1.1" - } - }, "pic4carto": { "version": "2.1.15", "requires": { @@ -48832,11 +48773,6 @@ "thenify": ">= 3.1.0 < 4" } }, - "three": { - "version": "0.147.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.147.0.tgz", - "integrity": "sha512-LPTOslYQXFkmvceQjFTNnVVli2LaVF6C99Pv34fJypp8NbQLbTlu3KinZ0zURghS5zEehK+VQyvWuPZ/Sm8fzw==" - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -49524,11 +49460,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" }, - "uevent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/uevent/-/uevent-2.2.0.tgz", - "integrity": "sha512-48s5LF/c6R1fUmctGib/dWKhZjZLd4aK/85dwVAbwgHNBSO0k0UNp0ZKZpkSbU6633qYhgykYQPakTSuOxZopA==" - }, "uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", diff --git a/package.json b/package.json index b5e5cbc0c1..034a5722c2 100644 --- a/package.json +++ b/package.json @@ -156,7 +156,8 @@ "android:prepare": "./scripts/prepareAndroid.sh", "android:build": "./scripts/buildAndroid.sh", "android:upload": "scp ./android/app/build/outputs/apk/release/app-release.apk hetzner:apk/mapcomplete-latest.apk && scp ./android/app/build/outputs/apk/release/app-release.apk hetzner:app/mapcomplete-latest.apk", - "android:uninstall": "adb shell pm uninstall org.mapcomplete" + "android:uninstall": "adb shell pm uninstall org.mapcomplete", + "postinstall": "./scripts/fixPannellum.sh" }, "keywords": [ "OpenStreetMap", @@ -177,7 +178,6 @@ "@comunica/core": "^3.0.1", "@comunica/query-sparql": "^3.0.1", "@comunica/query-sparql-link-traversal": "^0.3.0", - "@photo-sphere-viewer/equirectangular-tiles-adapter": "^5.12.1", "@rapideditor/location-conflation": "^1.3.0", "@rgossiaux/svelte-headlessui": "^1.0.2", "@rgossiaux/svelte-heroicons": "^0.1.2", @@ -192,6 +192,7 @@ "@types/dompurify": "^3.0.2", "@types/follow-redirects": "^1.14.4", "@types/node": "^22.13.5", + "@types/pannellum": "^2.5.0", "@types/pg": "^8.11.11", "@types/qrcode-generator": "^1.0.6", "@types/showdown": "^2.0.0", @@ -233,11 +234,11 @@ "opening_hours": "^3.6.0", "osm-auth": "^2.6.0", "osmtogeojson": "^3.0.0-beta.5", + "pannellum": "^2.5.6", "panoramax-js": "^0.4.8", "panzoom": "^9.4.3", "papaparse": "^5.5.2", "pg": "^8.11.3", - "photo-sphere-viewer": "^4.8.1", "pic4carto": "^2.1.15", "pluscodes": "^2.6.0", "pmtiles": "^4.2.1", diff --git a/public/assets/loader_base.jpg b/public/assets/loader_base.jpg deleted file mode 100644 index 4be0e500342340aef0b810e47fd0167a41724ad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148827 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�I*F@t{3rmk;_4|08=f8hkjp?sVN2S4426k(p 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 diff --git a/src/UI/Image/ImagePreview.svelte b/src/UI/Image/ImagePreview.svelte index 0dabcebce0..f19a76fdba 100644 --- a/src/UI/Image/ImagePreview.svelte +++ b/src/UI/Image/ImagePreview.svelte @@ -6,23 +6,50 @@ import type { ProvidedImage } from "../../Logic/ImageProviders/ImageProvider" import { UIEventSource } from "../../Logic/UIEventSource" import Zoomcontrol from "../Zoomcontrol" - import { onDestroy } from "svelte" + import { getContext, onDestroy } from "svelte" + import type { PanoramaView } from "./photoSphereViewerWrapper" + import { PhotoSphereViewerWrapper } from "./photoSphereViewerWrapper" + import type { Feature, Point } from "geojson" + import { Store } from "../../Logic/UIEventSource" + + + export let nearbyFeatures: Feature[] | Store = [] export let image: Partial let panzoomInstance = undefined let panzoomEl: HTMLElement + let viewerEl: HTMLElement + export let isLoaded: UIEventSource = undefined onDestroy(Zoomcontrol.createLock()) + async function initPhotosphere() { + let f: Feature = await image.provider.getPanoramaInfo(image) + + const viewer = new PhotoSphereViewerWrapper(viewerEl, f) + if (Array.isArray(nearbyFeatures)) { + viewer.setNearbyFeatures(nearbyFeatures) + } else { + nearbyFeatures.addCallbackAndRunD(feats => { + viewer.setNearbyFeatures(feats) + }) + } + isLoaded.set(true) + + } + $: { - if (panzoomEl) { + if (image.isSpherical) { + + initPhotosphere() + } else if (panzoomEl) { panzoomInstance = panzoom(panzoomEl, { bounds: true, boundsPadding: 0.49, minZoom: 0.1, maxZoom: 25, - initialZoom: 1.0, + initialZoom: 1.0 }) } else { panzoomInstance?.dispose() @@ -30,11 +57,18 @@ } - { + + + +{#if image.isSpherical} +
+{:else} + { isLoaded?.setData(true) }} - src={image.url_hd ?? image.url} -/> + src={image.url_hd ?? image.url} + /> +{/if} diff --git a/src/UI/Image/LinkableImage.svelte b/src/UI/Image/LinkableImage.svelte index a5748885b6..19a7aa779e 100644 --- a/src/UI/Image/LinkableImage.svelte +++ b/src/UI/Image/LinkableImage.svelte @@ -1,5 +1,6 @@ - -
+ + + +
diff --git a/src/UI/ThemeViewGUI.svelte b/src/UI/ThemeViewGUI.svelte index 03ead9eaa1..663f155f38 100644 --- a/src/UI/ThemeViewGUI.svelte +++ b/src/UI/ThemeViewGUI.svelte @@ -18,7 +18,7 @@ import LevelSelector from "./BigComponents/LevelSelector.svelte" import type { RasterLayerPolygon } from "../Models/RasterLayers" import { AvailableRasterLayers } from "../Models/RasterLayers" - import { onDestroy } from "svelte" + import { onDestroy, setContext } from "svelte" import OpenBackgroundSelectorButton from "./BigComponents/OpenBackgroundSelectorButton.svelte" import StateIndicator from "./BigComponents/StateIndicator.svelte" import UploadingImageCounter from "./Image/UploadingImageCounter.svelte" diff --git a/src/test.ts b/src/test.ts index 1dc31faa39..1e59509387 100644 --- a/src/test.ts +++ b/src/test.ts @@ -1,13 +1,17 @@ +import { Mapillary } from "./Logic/ImageProviders/Mapillary" import Test from "./UI/Test.svelte" -import { ImageData, PanoramaxXYZ } from "panoramax-js" const target = document.getElementById("maindiv") target.innerHTML = "" -let img = "https://panoramax-storage-public-fast.s3.gra.perf.cloud.ovh.net/main-pictures/d2/8c/ba/cf/c807-4dbf-b8c8-b1c3aa89182d.jpg" -let imgId = "d28cbacf-c807-4dbf-b8c8-b1c3aa89182d" +/* +let imgId = "8af265ba-3521-4c46-b2a9-c072215c1de3" let panoramax = new PanoramaxXYZ() panoramax.imageInfo(imgId).then((imageInfo: ImageData) => { console.log("IMG INFO: ", imageInfo) new Test({ target, props: { imageInfo } }) -}) +})*/ +let pkey = 1199645818028177 +new Mapillary().DownloadImageInfo(pkey).then(imageInfo => { + new Test({ target, props: { imageInfo } }) +}) From fc33d755b644deeaa3047662714502111fc42e3d Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 30 Mar 2025 03:16:36 +0200 Subject: [PATCH 06/90] =?UTF-8?q?Feature:=20automatically=20move=20the=20c?= =?UTF-8?q?amera=20towards=20the=20object=20in=20360=C2=B0=20view?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/UI/Image/NearbyImages.svelte | 3 ++- src/UI/Image/photoSphereViewerWrapper.ts | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/UI/Image/NearbyImages.svelte b/src/UI/Image/NearbyImages.svelte index 650e66fe9e..6b31f6a4bd 100644 --- a/src/UI/Image/NearbyImages.svelte +++ b/src/UI/Image/NearbyImages.svelte @@ -149,7 +149,8 @@ type: "Feature", geometry: { type: "Point", coordinates: GeoOperations.centerpointCoordinates(feature) }, properties: { - name: layer.title?.GetRenderValue(feature.properties).Subs(feature.properties).txt + name: layer.title?.GetRenderValue(feature.properties).Subs(feature.properties).txt, + focus: true } } ] diff --git a/src/UI/Image/photoSphereViewerWrapper.ts b/src/UI/Image/photoSphereViewerWrapper.ts index 684b73c45e..ad71fb39fb 100644 --- a/src/UI/Image/photoSphereViewerWrapper.ts +++ b/src/UI/Image/photoSphereViewerWrapper.ts @@ -60,6 +60,9 @@ export class PhotoSphereViewerWrapper { yaw: (yaw - northOffs) % 360, text: f.properties.name }) + if (f.properties.focus) { + this.viewer.setYaw(yaw - northOffs) + } } } From 68087384253d2216e914f1534ac919f89c4938cd Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Sun, 30 Mar 2025 13:51:35 +0200 Subject: [PATCH 07/90] Feature: Clickable links in AllTagsPanel --- package-lock.json | 12 +++++ package.json | 1 + .../{ => AllTagsPanel}/AllTagsPanel.svelte | 20 ++++---- src/UI/Popup/AllTagsPanel/TagLink.svelte | 46 +++++++++++++++++++ .../SettingsVisualisations.ts | 2 +- src/UI/SpecialVisualizations.ts | 2 +- src/UI/Studio/EditLayer.svelte | 2 +- 7 files changed, 73 insertions(+), 12 deletions(-) rename src/UI/Popup/{ => AllTagsPanel}/AllTagsPanel.svelte (86%) create mode 100644 src/UI/Popup/AllTagsPanel/TagLink.svelte diff --git a/package-lock.json b/package-lock.json index 5a58d8d009..ffaf6cd84d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -82,6 +82,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", @@ -26392,6 +26393,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", @@ -48535,6 +48542,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 6f9397d5d0..a88a9112d9 100644 --- a/package.json +++ b/package.json @@ -244,6 +244,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/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/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" From a30f25f42a5d349505777d54bb1191b2ca6066b3 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 30 Mar 2025 15:18:20 +0200 Subject: [PATCH 08/90] Feature(360): fix css, fix CSP --- public/css/pannellum.css | 2 ++ scripts/fixPannellum.sh | 1 + src/Logic/Web/NearbyImagesSearch.ts | 8 +++++++- src/UI/Image/ImagePreview.svelte | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 public/css/pannellum.css diff --git a/public/css/pannellum.css b/public/css/pannellum.css new file mode 100644 index 0000000000..592b034f6c --- /dev/null +++ b/public/css/pannellum.css @@ -0,0 +1,2 @@ +/* Pannellum 2.5.6, https://github.com/mpetroff/pannellum */ +.pnlm-container{margin:0;padding:0;overflow:hidden;position:relative;cursor:default;width:100%;height:100%;font-family:Helvetica,"Nimbus Sans L","Liberation Sans",Arial,sans-serif;background:#f4f4f4 url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2267%22%20height%3D%22100%22%20viewBox%3D%220%200%2067%20100%22%3E%0A%3Cpath%20stroke%3D%22%23ccc%22%20fill%3D%22none%22%20d%3D%22M33.5%2C50%2C0%2C63%2C33.5%2C75%2C67%2C63%2C33.5%2C50m-33.5-50%2C67%2C25m-0.5%2C0%2C0%2C75m-66.5-75%2C67-25m-33.5%2C75%2C0%2C25m0-100%2C0%2C50%22%2F%3E%0A%3C%2Fsvg%3E%0A') repeat;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none;outline:0;line-height:1.4;contain:content}.pnlm-container *{box-sizing:content-box}.pnlm-ui{position:absolute;width:100%;height:100%;z-index:1}.pnlm-grab{cursor:grab;cursor:url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2226%22%20width%3D%2226%22%3E%0A%3Cpath%20stroke%3D%22%23000%22%20stroke-width%3D%221px%22%20fill%3D%22%23fff%22%20d%3D%22m15.3%2020.5s6.38-6.73%204.64-8.24-3.47%201.01-3.47%201.01%203.61-5.72%201.41-6.49c-2.2-0.769-3.33%204.36-3.33%204.36s0.873-5.76-1.06-5.76-1.58%205.39-1.58%205.39-0.574-4.59-2.18-4.12c-1.61%200.468-0.572%205.51-0.572%205.51s-1.58-4.89-2.93-3.79c-1.35%201.11%200.258%205.25%200.572%206.62%200.836%202.43%202.03%202.94%202.17%205.55%22%2F%3E%0A%3C%2Fsvg%3E%0A') 12 8,default}.pnlm-grabbing{cursor:grabbing;cursor:url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2226%22%20width%3D%2226%22%3E%0A%3Cpath%20stroke%3D%22%23000%22%20stroke-width%3D%221px%22%20fill%3D%22%23fff%22%20d%3D%22m15.3%2020.5s5.07-5.29%203.77-6.74c-1.31-1.45-2.53%200.14-2.53%200.14s2.74-3.29%200.535-4.06c-2.2-0.769-2.52%201.3-2.52%201.3s0.81-2.13-1.12-2.13-1.52%201.77-1.52%201.77-0.261-1.59-1.87-1.12c-1.61%200.468-0.874%202.17-0.874%202.17s-0.651-1.55-2-0.445c-1.35%201.11-0.68%202.25-0.365%203.62%200.836%202.43%202.03%202.94%202.17%205.55%22%2F%3E%0A%3C%2Fsvg%3E%0A') 12 8,default}.pnlm-sprite{background-image:url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2226%22%20height%3D%22208%22%3E%0A%3Ccircle%20fill-opacity%3D%22.78%22%20cy%3D%22117%22%20cx%3D%2213%22%20r%3D%2211%22%20fill%3D%22%23fff%22%2F%3E%0A%3Ccircle%20fill-opacity%3D%22.78%22%20cy%3D%22143%22%20cx%3D%2213%22%20r%3D%2211%22%20fill%3D%22%23fff%22%2F%3E%0A%3Ccircle%20cy%3D%22169%22%20cx%3D%2213%22%20r%3D%227%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cy%3D%22195%22%20cx%3D%2213%22%20r%3D%227%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%2213%22%20cy%3D%22195%22%20r%3D%222.5%22%2F%3E%0A%3Cpath%20d%3D%22m5%2083v6h2v-4h4v-2zm10%200v2h4v4h2v-6zm-5%205v6h6v-6zm-5%205v6h6v-2h-4v-4zm14%200v4h-4v2h6v-6z%22%2F%3E%0A%3Cpath%20d%3D%22m13%20110a7%207%200%200%200%20-7%207%207%207%200%200%200%207%207%207%207%200%200%200%207%20-7%207%207%200%200%200%20-7%20-7zm-1%203h2v2h-2zm0%203h2v5h-2z%22%2F%3E%0A%3Cpath%20d%3D%22m5%2057v6h2v-4h4v-2zm10%200v2h4v4h2v-6zm-10%2010v6h6v-2h-4v-4zm14%200v4h-4v2h6v-6z%22%2F%3E%0A%3Cpath%20d%3D%22m17%2038v2h-8v-2z%22%2F%3E%0A%3Cpath%20d%3D%22m12%209v3h-3v2h3v3h2v-3h3v-2h-3v-3z%22%2F%3E%0A%3Cpath%20d%3D%22m13%20136-6.125%206.125h4.375v7.875h3.5v-7.875h4.375z%22%2F%3E%0A%3Cpath%20d%3D%22m10.428%20173.33v-5.77l5-2.89v5.77zm1-1.73%203-1.73-3.001-1.74z%22%2F%3E%0A%3C%2Fsvg%3E%0A')}.pnlm-container:-moz-full-screen{height:100%!important;width:100%!important;position:static!important}.pnlm-container:-webkit-full-screen{height:100%!important;width:100%!important;position:static!important}.pnlm-container:-ms-fullscreen{height:100%!important;width:100%!important;position:static!important}.pnlm-container:fullscreen{height:100%!important;width:100%!important;position:static!important}.pnlm-render-container{cursor:inherit;position:absolute;height:100%;width:100%}.pnlm-controls{margin-top:4px;background-color:#fff;border:1px solid #999;border-color:rgba(0,0,0,0.4);border-radius:3px;cursor:pointer;z-index:2;-webkit-transform:translateZ(9999px);transform:translateZ(9999px)}.pnlm-control:hover{background-color:#f8f8f8}.pnlm-controls-container{position:absolute;top:0;left:4px;z-index:1}.pnlm-zoom-controls{width:26px;height:52px}.pnlm-zoom-in{width:100%;height:50%;position:absolute;top:0;border-radius:3px 3px 0 0}.pnlm-zoom-out{width:100%;height:50%;position:absolute;bottom:0;background-position:0 -26px;border-top:1px solid #ddd;border-top-color:rgba(0,0,0,0.10);border-radius:0 0 3px 3px}.pnlm-fullscreen-toggle-button,.pnlm-orientation-button,.pnlm-hot-spot-debug-indicator{width:26px;height:26px}.pnlm-hot-spot-debug-indicator{position:absolute;top:50%;left:50%;width:26px;height:26px;margin:-13px 0 0 -13px;background-color:rgba(255,255,255,0.5);border-radius:13px;display:none}.pnlm-orientation-button-inactive{background-position:0 -156px}.pnlm-orientation-button-active{background-position:0 -182px}.pnlm-fullscreen-toggle-button-inactive{background-position:0 -52px}.pnlm-fullscreen-toggle-button-active{background-position:0 -78px}.pnlm-panorama-info{position:absolute;bottom:4px;background-color:rgba(0,0,0,0.7);border-radius:0 3px 3px 0;padding-right:10px;color:#fff;text-align:left;display:none;z-index:2;-webkit-transform:translateZ(9999px);transform:translateZ(9999px)}.pnlm-title-box{position:relative;font-size:20px;display:table;padding-left:5px;margin-bottom:3px}.pnlm-author-box{position:relative;font-size:12px;display:table;padding-left:5px}.pnlm-load-box{position:absolute;top:50%;left:50%;width:200px;height:150px;margin:-75px 0 0 -100px;background-color:rgba(0,0,0,0.7);border-radius:3px;text-align:center;font-size:20px;display:none;color:#fff}.pnlm-load-box p{margin:20px 0}.pnlm-lbox{position:absolute;top:50%;left:50%;width:20px;height:20px;margin:-10px 0 0 -10px;display:none}.pnlm-loading{animation-duration:1.5s;-webkit-animation-duration:1.5s;animation-name:pnlm-mv;-webkit-animation-name:pnlm-mv;animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;animation-timing-function:linear;-webkit-animation-timing-function:linear;height:10px;width:10px;background-color:#fff;position:relative}@keyframes pnlm-mv{from{left:0;top:0}25%{left:10px;top:0}50%{left:10px;top:10px}75%{left:0;top:10px}to{left:0;top:0}}@-webkit-keyframes pnlm-mv{from{left:0;top:0}25%{left:10px;top:0}50%{left:10px;top:10px}75%{left:0;top:10px}to{left:0;top:0}}.pnlm-load-button{position:absolute;top:50%;left:50%;width:200px;height:100px;margin:-50px 0 0 -100px;background-color:rgba(0,0,0,.7);border-radius:3px;text-align:center;font-size:20px;display:table;color:#fff;cursor:pointer}.pnlm-load-button:hover{background-color:rgba(0,0,0,.8)}.pnlm-load-button p{display:table-cell;vertical-align:middle}.pnlm-info-box{font-size:15px;position:absolute;top:50%;left:50%;width:200px;height:150px;margin:-75px 0 0 -100px;background-color:#000;border-radius:3px;display:table;text-align:center;color:#fff;table-layout:fixed}.pnlm-info-box a,.pnlm-author-box a{color:#fff;word-wrap:break-word;overflow-wrap:break-word}.pnlm-info-box p{display:table-cell;vertical-align:middle;padding:0 5px 0 5px}.pnlm-error-msg{display:none}.pnlm-about-msg{font-size:11px;line-height:11px;color:#fff;padding:5px 8px 5px 8px;background:rgba(0,0,0,0.7);border-radius:3px;position:absolute;top:50px;left:50px;display:none;opacity:0;-moz-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;z-index:1}.pnlm-about-msg a:link,.pnlm-about-msg a:visited{color:#fff}.pnlm-about-msg a:hover,.pnlm-about-msg a:active{color:#eee}.pnlm-hotspot-base{position:absolute;visibility:hidden;cursor:default;vertical-align:middle;top:0;z-index:1}.pnlm-hotspot{height:26px;width:26px;border-radius:13px}.pnlm-hotspot:hover{background-color:rgba(255,255,255,0.2)}.pnlm-hotspot.pnlm-info{background-position:0 -104px}.pnlm-hotspot.pnlm-scene{background-position:0 -130px}div.pnlm-tooltip span{visibility:hidden;position:absolute;border-radius:3px;background-color:rgba(0,0,0,0.7);color:#fff;text-align:center;max-width:200px;padding:5px 10px;margin-left:-220px;cursor:default}div.pnlm-tooltip:hover span{visibility:visible}div.pnlm-tooltip:hover span:after{content:'';position:absolute;width:0;height:0;border-width:10px;border-style:solid;border-color:rgba(0,0,0,0.7) transparent transparent transparent;bottom:-20px;left:-10px;margin:0 50%}.pnlm-compass{position:absolute;width:50px;height:50px;right:4px;bottom:4px;border-radius:25px;background-image:url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2250%22%20width%3D%2250%22%3E%0A%3Cpath%20d%3D%22m24.5078%206-3.2578%2018h7.5l-3.25781-18h-0.984376zm-3.2578%2020%203.2578%2018h0.9844l3.2578-18h-7.5zm1.19531%200.9941h5.10938l-2.5547%2014.1075-2.5547-14.1075z%22%2F%3E%0A%3C%2Fsvg%3E%0A');cursor:default;display:none}.pnlm-world{position:absolute;left:50%;top:50%}.pnlm-face{position:absolute;-webkit-transform-origin:0 0;transform-origin:0 0}.pnlm-dragfix,.pnlm-preview-img{position:absolute;height:100%;width:100%}.pnlm-preview-img{background-size:cover;background-position:center}.pnlm-lbar{width:150px;margin:0 auto;border:#fff 1px solid;height:6px}.pnlm-lbar-fill{background:#fff;height:100%;width:0}.pnlm-lmsg{font-size:12px}.pnlm-fade-img{position:absolute;top:0;left:0}.pnlm-pointer{cursor:pointer} \ No newline at end of file diff --git a/scripts/fixPannellum.sh b/scripts/fixPannellum.sh index 4cc4f4632e..664f141321 100755 --- a/scripts/fixPannellum.sh +++ b/scripts/fixPannellum.sh @@ -6,3 +6,4 @@ # So, we patch it up... echo "Fixing pannellum..." sed -i 's/^window./if(typeof window !== "undefined")\n&/' "./node_modules/pannellum/build/pannellum.js" +cp ./node_modules/pannellum/build/pannellum.css ./public/css/ diff --git a/src/Logic/Web/NearbyImagesSearch.ts b/src/Logic/Web/NearbyImagesSearch.ts index 8d74af5290..5d424ebd54 100644 --- a/src/Logic/Web/NearbyImagesSearch.ts +++ b/src/Logic/Web/NearbyImagesSearch.ts @@ -166,6 +166,7 @@ class ImagesFromPanoramaxFetcher implements ImageFetcher { private readonly _radius: number private readonly _panoramax: Panoramax name: string = "panoramax" + public static readonly apiUrls: ReadonlyArray = ["https://panoramax.openstreetmap.fr", "https://api.panoramax.xyz", "https://panoramax.mapcomplete.org"] constructor(url?: string, radius: number = 100) { this._radius = radius @@ -216,6 +217,7 @@ class MapillaryFetcher implements ImageFetcher { private readonly start_captured_at?: Date private readonly end_captured_at?: Date + static apiUrls: string[] = ["*.fbcdn.net", "https://graph.mapillary.com"] constructor(options?: { panoramas?: undefined | "only" | "no" @@ -295,7 +297,11 @@ type P4CService = (typeof P4CImageFetcher.services)[number] export class CombinedFetcher { private readonly sources: ReadonlyArray - public static apiUrls = [...P4CImageFetcher.apiUrls, Imgur.apiUrl, ...Imgur.supportingUrls] + public static apiUrls = [...P4CImageFetcher.apiUrls, + Imgur.apiUrl, ...Imgur.supportingUrls, + ...MapillaryFetcher.apiUrls, + ...ImagesFromPanoramaxFetcher.apiUrls + ] constructor(radius: number, maxage: Date, indexedFeatures: IndexedFeatureSource) { this.sources = [ diff --git a/src/UI/Image/ImagePreview.svelte b/src/UI/Image/ImagePreview.svelte index f19a76fdba..165d3da31c 100644 --- a/src/UI/Image/ImagePreview.svelte +++ b/src/UI/Image/ImagePreview.svelte @@ -58,7 +58,7 @@ - + {#if image.isSpherical}
From 4bc987a4830727c28b7cffb3e16b9f2dc2f55fcb Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Sun, 30 Mar 2025 19:01:56 +0200 Subject: [PATCH 09/90] Fix: change condition to and --- assets/layers/wayside_shrine/wayside_shrine.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 From 558b19f8d7f0de4a949d9d33208f7a08e74febdc Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 30 Mar 2025 19:38:36 +0200 Subject: [PATCH 10/90] Feature(360): attempt to fix CSP --- scripts/generateLayouts.ts | 2 +- src/Logic/ImageProviders/ImageProvider.ts | 24 +++++ src/UI/Image/ImagePreview.svelte | 2 +- src/UI/Image/NearbyImages.svelte | 34 ++++-- src/UI/Image/photoSphereViewerWrapper.ts | 125 ++++++++++++++-------- 5 files changed, 132 insertions(+), 55 deletions(-) diff --git a/scripts/generateLayouts.ts b/scripts/generateLayouts.ts index 79a7469aa4..39e55419d2 100644 --- a/scripts/generateLayouts.ts +++ b/scripts/generateLayouts.ts @@ -426,7 +426,7 @@ class GenerateLayouts extends Script { const csp: Record = { "default-src": "'self'", "child-src": "'self' blob: ", - "img-src": "* data:", // maplibre depends on 'data:' to load + "img-src": "* data: blob:", // maplibre depends on 'data:' to load "report-to": "https://report.mapcomplete.org/csp", "worker-src": "'self' blob:", // Vite somehow loads the worker via a 'blob' "style-src": "'self' 'unsafe-inline'", // unsafe-inline is needed to change the default background pin colours diff --git a/src/Logic/ImageProviders/ImageProvider.ts b/src/Logic/ImageProviders/ImageProvider.ts index 3bb2a9bf08..6cb152772d 100644 --- a/src/Logic/ImageProviders/ImageProvider.ts +++ b/src/Logic/ImageProviders/ImageProvider.ts @@ -33,6 +33,30 @@ export interface PanoramaView { pitchOffset?: number } +/** + * The property of "nearbyFeatures" in ImagePreview.svelte. + * These properties declare how they are rendered + */ +export interface HotspotProperties { + /** + * The popup text when hovering + */ + name: string + + /** + * If true: the panorama view will automatically turn towards this object + */ + focus: boolean + /** + * The pitch degrees to display this. + * If "auto": will determine the pitch automatically based on distance + */ + pitch: number | "auto" + + gotoPanorama: Feature + +} + export default abstract class ImageProvider { public abstract readonly defaultKeyPrefixes: string[] diff --git a/src/UI/Image/ImagePreview.svelte b/src/UI/Image/ImagePreview.svelte index 165d3da31c..a96a199820 100644 --- a/src/UI/Image/ImagePreview.svelte +++ b/src/UI/Image/ImagePreview.svelte @@ -6,7 +6,7 @@ import type { ProvidedImage } from "../../Logic/ImageProviders/ImageProvider" import { UIEventSource } from "../../Logic/UIEventSource" import Zoomcontrol from "../Zoomcontrol" - import { getContext, onDestroy } from "svelte" + import { onDestroy } from "svelte" import type { PanoramaView } from "./photoSphereViewerWrapper" import { PhotoSphereViewerWrapper } from "./photoSphereViewerWrapper" diff --git a/src/UI/Image/NearbyImages.svelte b/src/UI/Image/NearbyImages.svelte index 6b31f6a4bd..f291bcbe4a 100644 --- a/src/UI/Image/NearbyImages.svelte +++ b/src/UI/Image/NearbyImages.svelte @@ -25,6 +25,7 @@ import { BBox } from "../../Logic/BBox" import PanoramaxLink from "../BigComponents/PanoramaxLink.svelte" import { GeoOperations } from "../../Logic/GeoOperations" + import type { PanoramaView } from "../../Logic/ImageProviders/ImageProvider" export let tags: UIEventSource export let state: SpecialVisualizationState @@ -55,14 +56,16 @@ let asFeatures = result.map((p4cs) => p4cs.map( (p4c) => - >{ + >{ type: "Feature", geometry: { type: "Point", coordinates: [p4c.coordinates.lng, p4c.coordinates.lat] }, - properties: { + properties: { id: p4c.pictureUrl, + url: p4c.pictureUrl, + northOffset: p4c.direction, rotation: p4c.direction, spherical: p4c.details.isSpherical ? "yes" : "no" } @@ -145,15 +148,24 @@ highlighted.set(feature.properties.id) } }) - let nearbyFeatures: Feature[] = [{ - type: "Feature", - geometry: { type: "Point", coordinates: GeoOperations.centerpointCoordinates(feature) }, - properties: { - name: layer.title?.GetRenderValue(feature.properties).Subs(feature.properties).txt, - focus: true - } - } - ] + let nearbyFeatures: Store = asFeatures.map(nearbyPoints => { + return [{ + type: "Feature", + geometry: { type: "Point", coordinates: GeoOperations.centerpointCoordinates(feature) }, + properties: { + name: layer.title?.GetRenderValue(feature.properties).Subs(feature.properties).txt, + focus: true + } + }, ...nearbyPoints.filter(p => p.properties.spherical === "yes").map(f => ({ + ...f, properties: { + name: "Nearby panorama", + pitch: "auto", + type: "scene", + gotoPanorama: f + } + })) + ] + }) onDestroy( tags.addCallbackAndRunD((tags) => { diff --git a/src/UI/Image/photoSphereViewerWrapper.ts b/src/UI/Image/photoSphereViewerWrapper.ts index ad71fb39fb..02c25fae9f 100644 --- a/src/UI/Image/photoSphereViewerWrapper.ts +++ b/src/UI/Image/photoSphereViewerWrapper.ts @@ -1,65 +1,106 @@ import "pannellum" -import { Feature, Point } from "geojson" +import { Feature, Geometry, Point } from "geojson" import { GeoOperations } from "../../Logic/GeoOperations" -import { PanoramaView } from "../../Logic/ImageProviders/ImageProvider" +import { HotspotProperties, PanoramaView } from "../../Logic/ImageProviders/ImageProvider" export class PhotoSphereViewerWrapper { - private readonly imageInfo: Feature + private imageInfo: Feature private readonly viewer: Pannellum.Viewer + private nearbyFeatures: Feature[] = [] - - constructor(container: HTMLElement, imageInfo: Feature, nearbyFeatures?: Feature[]) { + constructor(container: HTMLElement, imageInfo: Feature, nearbyFeatures?: Feature[]) { this.imageInfo = imageInfo - this.viewer = pannellum.viewer(container, { - type: "equirectangular", - hfov: 110, - panorama: imageInfo.properties.url, - autoLoad: true, - hotSpots: [], - compass: true, - showControls: false, - northOffset: imageInfo.properties.northOffset, - horizonPitch: imageInfo.properties.pitchOffset - }) - - /* for (let i = 0; i < 360; i += 45) { - - viewer.addHotSpot({ - type: "info", - yaw: i, - text: "YAW " + i - }) - } - - console.log("North offset:", imageInfo.properties.northOffset) - viewer.addHotSpot({ - type: "info", - yaw: -northOffs, - text: "Supposedely north " - })*/ + this.viewer = pannellum.viewer(container, + { + default: { + firstScene: imageInfo.properties.url, + sceneFadeDuration: 250 + }, + scenes: { + [imageInfo.properties.url]: + { + type: "equirectangular", + hfov: 110, + panorama: imageInfo.properties.url, + autoLoad: true, + hotSpots: [], + sceneFadeDuration: 250, + compass: true, + showControls: false, + northOffset: imageInfo.properties.northOffset, + horizonPitch: imageInfo.properties.pitchOffset + } + } + } + ) this.setNearbyFeatures(nearbyFeatures) } - public setNearbyFeatures(nearbyFeatures: Feature[]) { + public calculatePitch(feature: Feature): number { + const coors = this.imageInfo.geometry.coordinates + const distance = GeoOperations.distanceBetween( + <[number, number]>coors, GeoOperations.centerpointCoordinates(feature) + ) + + // In: -pi/2 up to pi/2 + const alpha = Math.atan(distance / 4) // in radians + const degrees = alpha * 360 / (2 * Math.PI) + return -degrees + } + + private setPanorama(imageInfo: Feature) { + if (this.viewer?.getScene() === imageInfo?.properties?.url) { + // Already the current scene + return + } + this.clearHotspots() + this.imageInfo = imageInfo + this.viewer.addScene(imageInfo.properties.url, { + panorama: imageInfo.properties.url, + northOffset: imageInfo.properties.northOffset, + type: "equirectangular" + }) + + this.viewer.loadScene(imageInfo.properties.url, 0, imageInfo.properties.northOffset) + this.setNearbyFeatures(this.nearbyFeatures) + } + + private clearHotspots() { + const hotspots = this.viewer.getConfig()["scenes"][this.imageInfo.properties.url].hotSpots ?? [] + for (const hotspot of hotspots) { + this.viewer.removeHotSpot(hotspot?.id, this.imageInfo.properties.url) + } + } + + public setNearbyFeatures(nearbyFeatures: Feature[]) { const imageInfo = this.imageInfo const northOffs = imageInfo.properties.northOffset - - const hotspots = this.viewer.getConfig().hotSpots ?? [] - for (const hotspot of hotspots) { - this.viewer.removeHotSpot(hotspot.id) - } - // this.viewer.removeHotSpot() + this.nearbyFeatures = nearbyFeatures + this.clearHotspots() for (const f of nearbyFeatures ?? []) { + if (f.properties.gotoPanorama?.properties?.url === this.imageInfo.properties.url) { + continue // This is the current panorama, no need to show it + } const yaw = GeoOperations.bearing(imageInfo, GeoOperations.centerpoint(f)) + let pitch = 0 + if (f.properties.pitch === "auto") { + pitch = this.calculatePitch(f) + } else if (!isNaN(f.properties.pitch)) { + pitch = f.properties.pitch + } this.viewer.addHotSpot({ - type: "info", + type: f.properties.gotoPanorama !== undefined ? "scene" : "info", yaw: (yaw - northOffs) % 360, - text: f.properties.name - }) + pitch, + text: f.properties.name, + clickHandlerFunc: () => { + this.setPanorama(f.properties.gotoPanorama) + } + }, this.imageInfo.properties.url) if (f.properties.focus) { this.viewer.setYaw(yaw - northOffs) } From 94412c996bb627a9d7af94506dba16e6ac6989af Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 30 Mar 2025 19:40:32 +0200 Subject: [PATCH 11/90] Scripts: attempt to have proper icon propagation in develop --- scripts/prepare-build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/prepare-build.sh b/scripts/prepare-build.sh index 0e0fc6c581..d5fdd54311 100755 --- a/scripts/prepare-build.sh +++ b/scripts/prepare-build.sh @@ -20,8 +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 From 48ead3aeec26463573e6df3a046d7f59716f6b30 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Sun, 30 Mar 2025 20:02:59 +0200 Subject: [PATCH 12/90] Theme(pets): add pet shops (#2363) --- assets/themes/pets/pets.json | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) 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 From b60027e1cd13ee45462d7d43e8e281447524b6b4 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Sun, 30 Mar 2025 20:14:06 +0200 Subject: [PATCH 13/90] Chore: reset translations --- langs/themes/ca.json | 2 +- langs/themes/cs.json | 4 ++-- langs/themes/da.json | 2 +- langs/themes/de.json | 4 ++-- langs/themes/en.json | 12 +++++++++++- langs/themes/es.json | 2 +- langs/themes/fr.json | 2 +- langs/themes/it.json | 2 +- langs/themes/ko.json | 2 +- langs/themes/nb_NO.json | 2 +- langs/themes/nl.json | 12 +++++++++++- langs/themes/pa_PK.json | 2 +- langs/themes/pl.json | 2 +- langs/themes/uk.json | 4 ++-- langs/themes/zh_Hant.json | 2 +- 15 files changed, 38 insertions(+), 18 deletions(-) diff --git a/langs/themes/ca.json b/langs/themes/ca.json index 158149060e..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" } diff --git a/langs/themes/cs.json b/langs/themes/cs.json index b05f5e2998..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" } diff --git a/langs/themes/da.json b/langs/themes/da.json index 070670df3d..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" } diff --git a/langs/themes/de.json b/langs/themes/de.json index 4bfaf03090..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" } diff --git a/langs/themes/en.json b/langs/themes/en.json index 218528132f..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" } diff --git a/langs/themes/es.json b/langs/themes/es.json index cb93421d9d..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" } diff --git a/langs/themes/fr.json b/langs/themes/fr.json index e0314c7e03..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" } diff --git a/langs/themes/it.json b/langs/themes/it.json index 4cf88737aa..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" } diff --git a/langs/themes/ko.json b/langs/themes/ko.json index 6c33842fc5..7302f5ada3 100644 --- a/langs/themes/ko.json +++ b/langs/themes/ko.json @@ -994,7 +994,7 @@ "name": "반려견 친화적 식당" } }, - "6": { + "7": { "override": { "name": "반려견 친화적 상점" } diff --git a/langs/themes/nb_NO.json b/langs/themes/nb_NO.json index caab9bbb7f..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" } diff --git a/langs/themes/nl.json b/langs/themes/nl.json index bc4b0c69cb..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" } diff --git a/langs/themes/pa_PK.json b/langs/themes/pa_PK.json index 4ef9e6aee8..27775f49c4 100644 --- a/langs/themes/pa_PK.json +++ b/langs/themes/pa_PK.json @@ -131,7 +131,7 @@ }, "pets": { "layers": { - "6": { + "7": { "override": { "name": "کُتیاں دی اِجازت دیاں دکاناں" } diff --git a/langs/themes/pl.json b/langs/themes/pl.json index 6c0397395b..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" } 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 4c03faa2fa..63b761424f 100644 --- a/langs/themes/zh_Hant.json +++ b/langs/themes/zh_Hant.json @@ -678,7 +678,7 @@ "name": "寵物友善餐廳" } }, - "6": { + "7": { "override": { "name": "寵物友善商家" } From 16700a2af664c3af10adfb2018edc872204696b6 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Sun, 30 Mar 2025 20:15:15 +0200 Subject: [PATCH 14/90] Theme(street_lighting): disable utility_pole by default --- assets/themes/street_lighting/street_lighting.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assets/themes/street_lighting/street_lighting.json b/assets/themes/street_lighting/street_lighting.json index f4405d8b5e..f114f83212 100644 --- a/assets/themes/street_lighting/street_lighting.json +++ b/assets/themes/street_lighting/street_lighting.json @@ -55,7 +55,8 @@ "condition": "highway=street_lamp" } } - ] + ], + "shownByDefault": false } }, { From 9165963ed9a06a7f1a0c6f2d68ac33918f2a63f6 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Sun, 30 Mar 2025 20:58:47 +0200 Subject: [PATCH 15/90] Theme(ATM): Include indoor question --- assets/layers/atm/atm.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) 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 From 2fdec3769a3f632c3e27f43ae83ac9bc827260c5 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 30 Mar 2025 23:41:01 +0200 Subject: [PATCH 16/90] Scripts: actually stop the build if the layer contains an error --- scripts/Script.ts | 2 +- scripts/generateLayerOverview.ts | 11 +++++------ scripts/prepare-build.sh | 1 - 3 files changed, 6 insertions(+), 8 deletions(-) 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 d5fdd54311..88bb11ee78 100755 --- a/scripts/prepare-build.sh +++ b/scripts/prepare-build.sh @@ -22,7 +22,6 @@ npm run generate && # includes a single "refresh:layeroverview". Resetting the f npm run generate:mapcomplete-changes-theme && 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 From b4057c4b8ffe3992f765daa5debba5f930027175 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 31 Mar 2025 01:22:51 +0200 Subject: [PATCH 17/90] Scripts: remove previous dist-file if still exists --- .forgejo/workflows/deploy_hosted.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.forgejo/workflows/deploy_hosted.yml b/.forgejo/workflows/deploy_hosted.yml index 80347594c0..ca936cf1fc 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}/* From 8ec0b4f9165f68087a343e7c24e247c878537ebd Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 31 Mar 2025 01:32:20 +0200 Subject: [PATCH 18/90] Scripts: add date to builds --- .forgejo/workflows/deploy_hosted.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy_hosted.yml b/.forgejo/workflows/deploy_hosted.yml index ca936cf1fc..2664762d60 100644 --- a/.forgejo/workflows/deploy_hosted.yml +++ b/.forgejo/workflows/deploy_hosted.yml @@ -73,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: | From 32cd5c29fd6f3b7fe1825c3b5b52bdf493a045bb Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 31 Mar 2025 01:38:15 +0200 Subject: [PATCH 19/90] Status: add translate service --- src/UI/Status/StatusGUI.svelte | 10 ++++++++++ 1 file changed, 10 insertions(+) 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") From 4f75c81af64cff2951aa90146cc745e577f01103 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 31 Mar 2025 02:18:59 +0200 Subject: [PATCH 20/90] Themes(wayside_shrine): disable blurring, as many pictures will depict a maria statue (which we don't want blurred) --- assets/layers/wayside_shrine/wayside_shrine.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/layers/wayside_shrine/wayside_shrine.json b/assets/layers/wayside_shrine/wayside_shrine.json index af9a5fc90b..d8d7c5a680 100644 --- a/assets/layers/wayside_shrine/wayside_shrine.json +++ b/assets/layers/wayside_shrine/wayside_shrine.json @@ -135,7 +135,7 @@ } ], "tagRenderings": [ - "images", + "images_no_blur", { "question": { "en": "What's the name of this {title()}?" @@ -497,4 +497,4 @@ }, "credits": "Bastian Greshake Tzovaras", "credits:uid": 20617622 -} \ No newline at end of file +} From da286f501c8ad403ae5d0f242c7628b5503870bc Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 31 Mar 2025 02:43:05 +0200 Subject: [PATCH 21/90] Script: fix deploy script --- .forgejo/workflows/deploy_hosted.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy_hosted.yml b/.forgejo/workflows/deploy_hosted.yml index 2664762d60..a1708f7e5a 100644 --- a/.forgejo/workflows/deploy_hosted.yml +++ b/.forgejo/workflows/deploy_hosted.yml @@ -73,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/ && date --iso > /root/staging/${BRANCH}/date.txt && 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/public/${BRANCH}/date.txt && rm ${BRANCH}.zip" - name: Comment on the PR run: | From 69b4461a20d0ca2c71ccbd4f73621e73dd6ff42c Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Tue, 1 Apr 2025 02:07:51 +0200 Subject: [PATCH 22/90] Fix: rescale some theme images --- assets/layers/aerialway/chair_lift.svg | 26 +++++++----- assets/layers/scouting_group/scouting.svg | 40 +++++++++--------- assets/layers/wayside_shrine/shrine.svg | 50 ++++++++++++++++++----- 3 files changed, 75 insertions(+), 41 deletions(-) diff --git a/assets/layers/aerialway/chair_lift.svg b/assets/layers/aerialway/chair_lift.svg index e97e20f577..39f9f38ee5 100644 --- a/assets/layers/aerialway/chair_lift.svg +++ b/assets/layers/aerialway/chair_lift.svg @@ -5,9 +5,9 @@ version="1.1" x="0px" y="0px" - width="372.74799" - height="348.6937" - viewBox="-0.031 -0.031 372.74798 348.69369" + width="600" + height="600" + viewBox="-0.031 -0.031 599.99999 599.99999" enable-background="new -0.031 -0.031 576 567" xml:space="preserve" id="svg2" @@ -25,15 +25,20 @@ inkscape:pageopacity="0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" - inkscape:zoom="1.328125" - inkscape:cx="184.84706" - inkscape:cy="178.07059" + inkscape:zoom="0.51239286" + inkscape:cx="185.40461" + inkscape:cy="184.4288" inkscape:window-width="1920" - inkscape:window-height="995" + inkscape:window-height="1005" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" - inkscape:current-layer="svg2" /> + inkscape:current-layer="svg2" + showguides="true"> @@ -41,6 +46,7 @@ + d="m 599.969,287.27298 -0.40242,-8.45075 -14.08458,-0.40242 c -1.31188,26.43073 -15.23227,47.25016 -36.05492,62.05426 L 373.2539,440.407 l -13.12361,-9.06886 -2.01208,-4.02417 0.40241,-4.829 24.54742,-120.72499 -1.20725,-6.43867 -1.20725,-4.42658 -4.02417,-4.02417 -2.4145,-2.01208 -2.4145,-2.01208 -2.4145,-0.80484 -3.62175,-0.80483 -6.84108,0.40242 -78.06883,4.30586 v -48.81475 l 30.85248,26.66895 8.04833,4.829 6.97469,-0.53602 5.90264,-1.07364 54.99587,-77.53281 1.87848,-6.70749 0.26882,-6.16985 -5.36663,-8.04833 -2.33402,-0.60845 -4.45233,-7.84874 -80.11955,45.44733 c -5.01089,-5.44389 -10.77672,-11.72964 -16.64878,-18.13773 v -0.24466 l -1.58713,-1.70625 h -0.1996 c -9.07691,-9.91072 -18.22947,-19.92606 -25.04158,-27.38526 v -22.27778 c 17.53248,-3.00847 30.85248,-17.81901 30.85248,-35.64929 0,-20.001716 -16.75663,-36.217497 -37.42475,-36.217497 -20.66812,0 -37.42475,16.215781 -37.42475,36.217497 0,12.689 6.74933,23.84721 16.95784,30.31485 h -0.0563 v 22.42749 l -23.34017,19.15664 -2.4145,5.90264 -0.83541,7.51232 h -0.64065 v 75.5658 l -21.32808,12.09825 v -6.0121 0 -207.471539 l 47.8586,-25.886658 -0.35412,-0.655134 C 242.12724,26.020876 256.42752,18.817618 274.41554,16.848996 251.9623,10.976932 238.93366,8.6767187 218.77259,19.971749 L 218.7581,19.944385 -0.031,138.28546 v 17.85443 L 159.5932,69.800588 V 283.77839 l -65.127113,36.94346 -12.685783,-22.36632 -9.79965,5.55979 12.685782,22.36471 -18.810563,10.67048 5.558178,9.80126 18.810564,-10.67048 11.808515,20.81943 9.80126,-5.55818 -11.81012,-20.82104 59.56732,-33.78851 v 10.52722 c -0.1658,1.90102 -0.26721,3.82135 -0.26721,5.76744 0,1.9654 0.0982,3.90505 0.26721,5.82377 v 1.28773 h 0.12555 c 3.40123,31.54303 29.12692,56.06791 60.37216,56.06791 3.80847,0 7.53163,-0.37344 11.14533,-1.07204 h 77.51993 v -15.02463 h -48.19664 c 0.19477,-0.18028 0.39598,-0.35251 0.58753,-0.53602 h -33.03197 c -2.13763,0.35091 -4.32356,0.53602 -6.54973,0.53602 -21.82386,0 -39.90846,-17.46166 -43.19218,-40.28351 v -14.93449 c 0,-0.003 0,-0.006 0,-0.008 v -18.80412 l 21.32808,-12.09826 v 40.65535 h 0.30745 c 0.41529,16.0693 13.1059,28.974 28.73415,28.974 0.47807,0 0.95132,-0.0193 1.42295,-0.0419 l -0.0145,0.0419 102.21383,-7.2435 1.60967,-0.80483 2.01208,1.20725 -24.94983,105.03074 16.69707,24.4283 -164.56265,93.34618 7.75537,13.67411 390.96387,-221.77181 -0.30584,-0.54085 c 22.10716,-14.8878 37.02394,-36.25935 38.38572,-63.66392 z M 356.54234,185.01086 324.04478,222.21509 c 0,0 -3.48653,2.4145 -4.29137,2.68331 -0.80483,0.26881 -5.63383,-2.14569 -6.43866,-2.4145 -0.1658,-0.0547 -3.21934,-3.30465 -7.96785,-8.43143 z" + id="path2" + style="stroke-width:1.60967" /> diff --git a/assets/layers/scouting_group/scouting.svg b/assets/layers/scouting_group/scouting.svg index f9740cb7fa..688a4172ec 100644 --- a/assets/layers/scouting_group/scouting.svg +++ b/assets/layers/scouting_group/scouting.svg @@ -6,14 +6,14 @@ id="Layer_2" x="0px" y="0px" - width="200" - height="200" - viewBox="0 0 232.50928 236.52539" + width="600" + height="600" + viewBox="0 0 697.52784 709.57617" enable-background="new 0 0 232.50928 236.52539" xml:space="preserve" sodipodi:version="0.32" inkscape:version="1.3.2 (1:1.3.2+202311252150+091e20ef0f)" - sodipodi:docname="WikiProject_Scouting_fleur-de-lis_outline.svg" + sodipodi:docname="scouting.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" @@ -25,10 +25,10 @@ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"> @@ -53,9 +53,9 @@ pagecolor="#ffffff" id="base" showgrid="false" - inkscape:zoom="1.5041679" - inkscape:cx="103.04701" - inkscape:cy="144.59822" + inkscape:zoom="0.39406657" + inkscape:cx="62.172236" + inkscape:cy="351.46346" inkscape:window-x="0" inkscape:window-y="0" inkscape:current-layer="Layer_2" @@ -80,20 +80,20 @@ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + style="fill:#ffffff;stroke:#000000;stroke-width:7.17701;stroke-linecap:round;stroke-linejoin:round" /> diff --git a/assets/layers/wayside_shrine/shrine.svg b/assets/layers/wayside_shrine/shrine.svg index 1d13b2ef28..bc20f7589e 100644 --- a/assets/layers/wayside_shrine/shrine.svg +++ b/assets/layers/wayside_shrine/shrine.svg @@ -1,15 +1,44 @@ + width="600" + height="600" + viewBox="0 0 600 600" + sodipodi:docname="shrine.svg" + inkscape:version="1.3.2 (1:1.3.2+202311252150+091e20ef0f)" + 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" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + + + @@ -18,7 +47,6 @@ image/svg+xml - @@ -26,6 +54,6 @@ id="defs113" /> + d="M 300,0 214.28572,128.57143 V 514.28571 H 385.71429 V 128.57143 Z m 0,171.34487 a 42.857142,42.857142 0 0 1 42.85714,42.85714 42.857142,42.857142 0 0 0 0,0.0837 V 342.85714 H 257.14286 V 214.28571 a 42.857142,42.857142 0 0 0 0,-0.0836 A 42.857142,42.857142 0 0 1 300,171.34496 Z M 171.42857,557.14284 V 600 h 257.14285 v -42.85716 z" + style="opacity:1;fill:#555555;fill-opacity:1;stroke:none;stroke-width:9.27884;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill" /> From 20808ee7725a72aded0a042a7aabad52493b43e1 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Tue, 1 Apr 2025 02:08:02 +0200 Subject: [PATCH 23/90] Themes(public_bookcase): allow to snap to wall --- assets/layers/public_bookcase/public_bookcase.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/assets/layers/public_bookcase/public_bookcase.json b/assets/layers/public_bookcase/public_bookcase.json index 031e664f0d..747c8eefa4 100644 --- a/assets/layers/public_bookcase/public_bookcase.json +++ b/assets/layers/public_bookcase/public_bookcase.json @@ -108,6 +108,17 @@ "tags": [ "amenity=public_bookcase" ] + }, + { + "title": { + "en": "a bookcase on a wall" + }, + "tags": [ + "amenity=public_bookcase" + ], + "snapToLayer": [ + "walls_and_buildings" + ] } ], "tagRenderings": [ From b71c2750258e4e143f1ff6b6e557ea519620a341 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Tue, 1 Apr 2025 03:06:08 +0200 Subject: [PATCH 24/90] Themes(wayside_shrine): add mother mary as rendering and common option --- .../layers/wayside_shrine/license_info.json | 10 ++++ assets/layers/wayside_shrine/mary.svg | 43 ++++++++++++++ assets/layers/wayside_shrine/mary.svg.license | 2 + .../layers/wayside_shrine/wayside_shrine.json | 59 +++++++++++++++++++ 4 files changed, 114 insertions(+) create mode 100644 assets/layers/wayside_shrine/mary.svg create mode 100644 assets/layers/wayside_shrine/mary.svg.license diff --git a/assets/layers/wayside_shrine/license_info.json b/assets/layers/wayside_shrine/license_info.json index 336493a0b3..ecb8555a5c 100644 --- a/assets/layers/wayside_shrine/license_info.json +++ b/assets/layers/wayside_shrine/license_info.json @@ -9,6 +9,16 @@ "https://panoramax.mapcomplete.org" ] }, + { + "path": "mary.svg", + "license": "CC-BY-SA-4.0", + "authors": [ + "pietervdvn" + ], + "sources": [ + "https://chatgpt.com" + ] + }, { "path": "shrine.svg", "license": "CC0-1.0", diff --git a/assets/layers/wayside_shrine/mary.svg b/assets/layers/wayside_shrine/mary.svg new file mode 100644 index 0000000000..7b86370ba8 --- /dev/null +++ b/assets/layers/wayside_shrine/mary.svg @@ -0,0 +1,43 @@ + + + + diff --git a/assets/layers/wayside_shrine/mary.svg.license b/assets/layers/wayside_shrine/mary.svg.license new file mode 100644 index 0000000000..bd0efa586c --- /dev/null +++ b/assets/layers/wayside_shrine/mary.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: pietervdvn +SPDX-License-Identifier: CC-BY-SA-4.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 d8d7c5a680..deba03531c 100644 --- a/assets/layers/wayside_shrine/wayside_shrine.json +++ b/assets/layers/wayside_shrine/wayside_shrine.json @@ -51,6 +51,10 @@ "if": "historic=wayside_cross", "then": "./assets/layers/wayside_shrine/wayside_cross.svg" }, + { + "if": "subject:wikidata=Q345", + "then": "./assets/layers/wayside_shrine/mary.svg" + }, { "if": "historic=wayside_shrine", "then": "./assets/layers/wayside_shrine/shrine.svg" @@ -132,6 +136,20 @@ "description": { "en": "A wayside cross is a christian cross that is placed by a road or pathway. This cross is mounted on a wall" } + }, + { + "title": { + "en": "a mother mary shrine on the first floor" + }, + "tags": [ + "historic=wayside_shrine", + "level=1", + "religion=christian", + "subject:wikidata=Q345" + ], + "snapToLayer": [ + "walls_and_buildings" + ] } ], "tagRenderings": [ @@ -480,6 +498,47 @@ ] } }, + { + "id": "subject:wikidata", + "condition": "religion=christian", + "question": { + "en": "Who is depicted?" + }, + "multiAnswer": true, + "mappings": [ + { + "if": "subject:wikidata=Q345", + "then": { + "en": "Mother mary is depicted" + } + }, + { + "if": "subject:wikidata=Q942467", + "then": { + "en": "Jesus Christ as a child is depicted" + } + }, + { + "if": "subject:wikidata=Q302", + "then": { + "en": "Jesus Christ (as an adult) is depicted" + } + }, + { + "if": "subject:wikidata=Q164294", + "then": { + "en": "Saint Anne (mother of Mary) is depicted" + } + } + ], + "render": { + "*": "{wikipedia(subject:wikidata)}" + }, + "freeform": { + "key": "subject:wikidata", + "type": "wikidata" + } + }, "level" ], "deletion": { From ec04afe4d1ca7508389ce8b08b445dc02042cf23 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Tue, 1 Apr 2025 03:06:37 +0200 Subject: [PATCH 25/90] Chore: fix linting errors --- src/Logic/UIEventSource.ts | 77 +++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 30 deletions(-) diff --git a/src/Logic/UIEventSource.ts b/src/Logic/UIEventSource.ts index 4b892bb714..0626e1a7bf 100644 --- a/src/Logic/UIEventSource.ts +++ b/src/Logic/UIEventSource.ts @@ -1,5 +1,6 @@ import { Utils } from "../Utils" import { Readable, Subscriber, Unsubscriber, Updater, Writable } from "svelte/store" + /** * Various static utils */ @@ -104,6 +105,24 @@ export class Stores { }) return newStore } + + public static fromArray(sources: ReadonlyArray>): UIEventSource { + const src = new UIEventSource(sources.map(s => s.data)) + + for (let i = 0; i < sources.length; i++) { + sources[i].addCallback(content => { + src.data[i] = content + src.ping() + }) + } + src.addCallbackD(contents => { + for (let i = 0; i < contents.length; i++) { + sources[i].setData(contents[i]) + } + }) + + return src + } } export abstract class Store implements Readable { @@ -129,16 +148,16 @@ export abstract class Store implements Readable { } abstract map(f: (t: T) => J): Store - abstract map(f: (t: T) => J, extraStoresToWatch: Store[]): Store + abstract map(f: (t: T) => J, extraStoresToWatch: Store[]): Store abstract map( f: (t: T) => J, - extraStoresToWatch: Store[], + extraStoresToWatch: Store[], callbackDestroyFunction: (f: () => void) => void ): Store public mapD( f: (t: Exclude) => J, - extraStoresToWatch?: Store[], + extraStoresToWatch?: Store[], callbackDestroyFunction?: (f: () => void) => void ): Store { return this.map( @@ -241,7 +260,7 @@ export abstract class Store implements Readable { * src.setData(0) * lastValue // => "def" */ - public bind(f: (t: T) => Store, extraSources: Store[] = []): Store { + public bind(f: (t: T) => Store, extraSources: Store[] = []): Store { const mapped = this.map(f, extraSources) const sink = new UIEventSource(undefined) const seenEventSources = new Set>() @@ -275,7 +294,7 @@ export abstract class Store implements Readable { public bindD( f: (t: Exclude) => Store, - extraSources: Store[] = [] + extraSources: Store[] = [] ): Store { return this.bind((t) => { if (t === null) { @@ -295,10 +314,9 @@ export abstract class Store implements Readable { const newSource = new UIEventSource(this.data) - const self = this this.addCallback((latestData) => { window.setTimeout(() => { - if (self.data == latestData) { + if (this.data == latestData) { // compare by reference. // Note that 'latestData' and 'self.data' are both from the same UIEVentSource, but both are dereferenced at a different time newSource.setData(latestData) @@ -316,14 +334,13 @@ export abstract class Store implements Readable { * @constructor */ public AsPromise(condition?: (t: T) => boolean): Promise { - const self = this condition = condition ?? ((t) => t !== undefined) return new Promise((resolve) => { - const data = self.data + const data = this.data if (condition(data)) { resolve(data) } else { - self.addCallbackD((data) => { + this.addCallbackD((data) => { if (condition(data)) { resolve(data) return true // return true to unregister as we only need to be called once @@ -338,7 +355,7 @@ export abstract class Store implements Readable { /** * Same as 'addCallbackAndRun', added to be compatible with Svelte */ - public subscribe(run: Subscriber & ((value: T) => void), _?): Unsubscriber { + public subscribe(run: Subscriber & ((value: T) => void)): Unsubscriber { // We don't need to do anything with 'invalidate', see // https://github.com/sveltejs/svelte/issues/3859 @@ -451,7 +468,7 @@ class ListenerTracker { public ping(data: T): number { this.pingCount++ let toDelete = undefined - let startTime = new Date().getTime() / 1000 + const startTime = new Date().getTime() / 1000 for (const callback of this._callbacks) { try { if (callback(data) === true) { @@ -467,7 +484,7 @@ class ListenerTracker { console.error("Got an error while running a callback:", e) } } - let endTime = new Date().getTime() / 1000 + const endTime = new Date().getTime() / 1000 if (endTime - startTime > 500) { console.trace( "Warning: a ping took more then 500ms; this is probably a performance issue" @@ -495,13 +512,13 @@ class ListenerTracker { * The mapped store is a helper type which does the mapping of a function. */ class MappedStore extends Store { - private static readonly pass: () => {} + private static readonly pass: () => void private readonly _upstream: Store private readonly _upstreamCallbackHandler: ListenerTracker | undefined private _upstreamPingCount: number = -1 private _unregisterFromUpstream: () => void private readonly _f: (t: TIn) => T - private readonly _extraStores: Store[] | undefined + private readonly _extraStores: Store[] | undefined private _unregisterFromExtraStores: (() => void)[] | undefined private _callbacks: ListenerTracker = new ListenerTracker() private _callbacksAreRegistered = false @@ -509,7 +526,7 @@ class MappedStore extends Store { constructor( upstream: Store, f: (t: TIn) => T, - extraStores: Store[], + extraStores: Store[], upstreamListenerHandler: ListenerTracker | undefined, initialState: T, onDestroy?: (f: () => void) => void @@ -551,10 +568,10 @@ class MappedStore extends Store { map( f: (t: T) => J, - extraStores: Store[] = undefined, + extraStores: Store[] = undefined, ondestroyCallback?: (f: () => void) => void ): Store { - let stores: Store[] = undefined + let stores: Store[] = undefined if (extraStores?.length > 0 || this._extraStores?.length > 0) { stores = [] } @@ -578,7 +595,7 @@ class MappedStore extends Store { ) } - addCallback(callback: (data: T) => any | boolean | void): () => void { + addCallback(callback: (data: T) => unknown | boolean | void): () => void { if (!this._callbacksAreRegistered) { // This is the first callback that is added // We register this 'map' to the upstream object and all the streams @@ -593,7 +610,7 @@ class MappedStore extends Store { } } - addCallbackAndRun(callback: (data: T) => any | boolean | void): () => void { + addCallbackAndRun(callback: (data: T) => unknown | boolean | void): () => void { const unregister = this.addCallback(callback) const doRemove = callback(this.data) if (doRemove === true) { @@ -603,7 +620,7 @@ class MappedStore extends Store { return unregister } - addCallbackAndRunD(callback: (data: T) => any | boolean | void): () => void { + addCallbackAndRunD(callback: (data: T) => unknown | boolean | void): () => void { return this.addCallbackAndRun((data) => { if (data !== undefined) { return callback(data) @@ -611,7 +628,7 @@ class MappedStore extends Store { }) } - addCallbackD(callback: (data: T) => any | boolean | void): () => void { + addCallbackD(callback: (data: T) => unknown | boolean | void): () => void { return this.addCallback((data) => { if (data !== undefined) { return callback(data) @@ -626,9 +643,9 @@ class MappedStore extends Store { } private registerCallbacksToUpstream() { - this._unregisterFromUpstream = this._upstream.addCallback((_) => this.update()) + this._unregisterFromUpstream = this._upstream.addCallback(() => this.update()) this._unregisterFromExtraStores = this._extraStores?.map((store) => - store?.addCallback((_) => this.update()) + store?.addCallback(() => this.update()) ) this._callbacksAreRegistered = true } @@ -827,11 +844,11 @@ export class UIEventSource extends Store implements Writable { * If the result of the callback is 'true', the callback is considered finished and will be removed again * @param callback */ - public addCallback(callback: (latestData: T) => boolean | void | any): () => void { + public addCallback(callback: (latestData: T) => boolean | void | unknown): () => void { return this._callbacks.addCallback(callback) } - public addCallbackAndRun(callback: (latestData: T) => boolean | void | any): () => void { + public addCallbackAndRun(callback: (latestData: T) => boolean | void | unknown): () => void { const doDeleteCallback = callback(this.data) if (doDeleteCallback !== true) { return this.addCallback(callback) @@ -896,7 +913,7 @@ export class UIEventSource extends Store implements Writable { */ public map( f: (t: T) => J, - extraSources: Store[] = [], + extraSources: Store[] = [], onDestroy?: (f: () => void) => void ): Store { return new MappedStore(this, f, extraSources, this._callbacks, f(this.data), onDestroy) @@ -908,7 +925,7 @@ export class UIEventSource extends Store implements Writable { */ public mapD( f: (t: Exclude) => J, - extraSources: Store[] = [], + extraSources: Store[] = [], callbackDestroyFunction?: (f: () => void) => void ): Store { return new MappedStore( @@ -926,7 +943,7 @@ export class UIEventSource extends Store implements Writable { this._callbacks, this.data === undefined || this.data === null ? this.data - : f(this.data), + : f(>this.data), callbackDestroyFunction ) } @@ -945,7 +962,7 @@ export class UIEventSource extends Store implements Writable { */ public sync( f: (t: T) => J, - extraSources: Store[], + extraSources: Store[], g: (j: J, t: T) => T, allowUnregister = false ): UIEventSource { From 2f92fd0da1f0fc34936db22354d48f7f97892b0e Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Tue, 1 Apr 2025 03:07:00 +0200 Subject: [PATCH 26/90] Fix: don't save special items (such as "add new point") into history anymore --- src/Models/ThemeViewState/WithSelectedElementState.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Models/ThemeViewState/WithSelectedElementState.ts b/src/Models/ThemeViewState/WithSelectedElementState.ts index bb30f0d54b..a09a849d50 100644 --- a/src/Models/ThemeViewState/WithSelectedElementState.ts +++ b/src/Models/ThemeViewState/WithSelectedElementState.ts @@ -40,6 +40,9 @@ export class WithSelectedElementState extends UserMapFeatureswitchState { const [osm_type, osm_id] = selected.properties.id.split("/") const [lon, lat] = GeoOperations.centerpointCoordinates(selected) const layer = this.theme.getMatchingLayer(selected.properties) + if (!layer.isNormal()) { + return + } const nameOptions = [ selected?.properties?.name, From f9e204186cacbeafeff2b29a3b448d052dfcc87d Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Tue, 1 Apr 2025 13:33:46 +0200 Subject: [PATCH 27/90] Themes(general): use internet=wlan instead of internet=wifi in the case of both terminal and wifi connection --- assets/layers/questions/questions.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json index 876cc8dd90..c12842a1a4 100644 --- a/assets/layers/questions/questions.json +++ b/assets/layers/questions/questions.json @@ -2290,8 +2290,8 @@ } }, { - "if": "internet_access=terminal;wifi", - "alsoShowIf": "internet_access=wifi;terminal", + "if": "internet_access=terminal;wlan", + "alsoShowIf": "internet_access=wlan;terminal", "then": { "en": "This place offers both wireless internet and internet access via a terminal or computer", "de": "Dieser Ort bietet sowohl drahtloses Internet als auch Internetzugang über ein Terminal oder einen Computer", From 7c57047d30991d2cb927a0f5053870c6fe76f43d Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Tue, 1 Apr 2025 14:10:13 +0200 Subject: [PATCH 28/90] Fix: change inner workings of how history is kept, should improve performance --- src/Logic/Osm/OsmPreferences.ts | 55 +----------- src/Logic/State/UserRelatedState.ts | 134 ++++++++++++++++++++-------- src/Logic/UIEventSource.ts | 4 +- 3 files changed, 102 insertions(+), 91 deletions(-) diff --git a/src/Logic/Osm/OsmPreferences.ts b/src/Logic/Osm/OsmPreferences.ts index 194a174052..c320a26401 100644 --- a/src/Logic/Osm/OsmPreferences.ts +++ b/src/Logic/Osm/OsmPreferences.ts @@ -80,17 +80,10 @@ export class OsmPreferences { private async loadBulkPreferences() { const prefs = await this.getPreferencesDictDirectly() this.seenKeys = Object.keys(prefs) - const legacy = OsmPreferences.getLegacyCombinedItems(prefs) const merged = OsmPreferences.mergeDict(prefs) - if (Object.keys(legacy).length > 0) { - await this.removeLegacy(legacy) - } for (const key in merged) { this.initPreference(key, prefs[key], true) } - for (const key in legacy) { - this.initPreference(key, legacy[key], true) - } this._allPreferences.ping() } @@ -124,6 +117,7 @@ export class OsmPreferences { key, localStorage.data ?? defaultValue ) // cached + if (this.localStorageInited.has(key)) { return pref } @@ -140,15 +134,6 @@ export class OsmPreferences { this.removeAllWithPrefix("") } - public async removeLegacy(legacyDict: Record) { - for (const k in legacyDict) { - const v = legacyDict[k] - console.log("Upgrading legacy preference", k) - await this.removeAllWithPrefix(k) - this.osmConnection.getPreference(k).set(v) - } - } - /** * * OsmPreferences.mergeDict({abc: "123", def: "123", "def:0": "456", "def:1":"789"}) // => {abc: "123", def: "123456789"} @@ -160,7 +145,6 @@ export class OsmPreferences { const normalKeys = allKeys.filter((k) => !k.match(/[a-z-_0-9A-Z]*:[0-9]+/)) for (const normalKey of normalKeys) { if (normalKey.match(/-combined-[0-9]*$/) || normalKey.match(/-combined-length$/)) { - // Ignore legacy keys continue } const partKeys = OsmPreferences.keysStartingWith(allKeys, normalKey) @@ -171,42 +155,7 @@ export class OsmPreferences { } /** - * Gets all items which have a 'combined'-string, the legacy long preferences - * - * const input = { - * "extra-noncombined-key":"xyz", - * "mapcomplete-unofficial-theme-httpsrawgithubusercontentcomosm-catalanwikidataimgmainwikidataimgjson-combined-0": - * "{\"id\":\"https://raw.githubusercontent.com/osm-catalan/wikidataimg/main/wikidataimg.json\",\"icon\":\"https://upload.wikimedia.org/wikipedia/commons/5/50/Yes_Check_Circle.svg\",\"title\":{\"ca\":\"wikidataimg\",\"_context\":\"themes:wikidataimg.title\"},\"shortDescription\"", - * "mapcomplete-unofficial-theme-httpsrawgithubusercontentcomosm-catalanwikidataimgmainwikidataimgjson-combined-1": - * ":{\"ca\":\"Afegeix imatges d'articles de wikimedia\",\"_context\":\"themes:wikidataimg\"}}", - * } - * const merged = OsmPreferences.getLegacyCombinedItems(input) - * const data = merged["mapcomplete-unofficial-theme-httpsrawgithubusercontentcomosm-catalanwikidataimgmainwikidataimgjson"] - * JSON.parse(data) // => {"id": "https://raw.githubusercontent.com/osm-catalan/wikidataimg/main/wikidataimg.json", "icon": "https://upload.wikimedia.org/wikipedia/commons/5/50/Yes_Check_Circle.svg","title": { "ca": "wikidataimg", "_context": "themes:wikidataimg.title" }, "shortDescription": {"ca": "Afegeix imatges d'articles de wikimedia","_context": "themes:wikidataimg"}} - * merged["extra-noncombined-key"] // => undefined - */ - public static getLegacyCombinedItems(dict: Record): Record { - const merged: Record = {} - const keys = Object.keys(dict) - const toCheck = Utils.NoNullInplace( - Utils.Dedup(keys.map((k) => k.match(/(.*)-combined-[0-9]+$/)?.[1])) - ) - for (const key of toCheck) { - let i = 0 - let str = "" - let v: string - do { - v = dict[key + "-combined-" + i] - str += v ?? "" - i++ - } while (v !== undefined) - merged[key] = str - } - return merged - } - - /** - * Bulk-downloads all preferences + * Bulk-downloads all preferences, creates a simple record from all * @private */ private async getPreferencesDictDirectly(): Promise> { diff --git a/src/Logic/State/UserRelatedState.ts b/src/Logic/State/UserRelatedState.ts index 8c9996efca..dce95bc0b8 100644 --- a/src/Logic/State/UserRelatedState.ts +++ b/src/Logic/State/UserRelatedState.ts @@ -21,10 +21,49 @@ import Showdown from "showdown" import { LocalStorageSource } from "../Web/LocalStorageSource" import { GeocodeResult } from "../Search/GeocodingProvider" -export class OptionallySyncedHistory { +class RoundRobinStore { + private readonly _store: UIEventSource + private readonly _index: UIEventSource + private readonly _value: UIEventSource + public readonly value: Store + + constructor(store: UIEventSource, index: UIEventSource) { + this._store = store + this._index = index + this._value = new UIEventSource([]) + this.value = this._value + this._store.addCallbackD(() => this.set()) + this.set() + } + + private set() { + const v = this._store.data + const i = this._index.data + const newList = Utils.NoNull(v.slice(i + 1, v.length).concat(v.slice(0, i + 1))) + this._value.set(newList) + } + + /** + * Add a value to the underlying store + * @param t + */ + public add(t: T) { + const i = this._index.data + this._index.set((i + 1) % this._store.data.length) + this._store.data[i] = t + console.trace(">>> Setting", i, this._store.data, t, "new index:", this._index.data) + this._store.ping() + + } + + +} + +export class OptionallySyncedHistory { public readonly syncPreference: UIEventSource<"sync" | "local" | "no"> public readonly value: Store - private readonly synced: UIEventSource + private readonly syncedBackingStore: UIEventSource + private readonly syncedOrdered: RoundRobinStore private readonly local: UIEventSource private readonly thisSession: UIEventSource private readonly _maxHistory: number @@ -41,10 +80,14 @@ export class OptionallySyncedHistory { this._maxHistory = maxHistory this._isSame = isSame this.syncPreference = osmconnection.getPreference("preference-" + key + "-history", "sync") - const synced = (this.synced = UIEventSource.asObject( - osmconnection.getPreference(key + "-history"), - [] - )) + + this.syncedBackingStore = Stores.fromArray( + Utils.TimesT(maxHistory, (i) => + UIEventSource.asObject(osmconnection.getPreference(key + "-history-" + i), undefined) + )) + this.syncedOrdered = new RoundRobinStore(this.syncedBackingStore, + UIEventSource.asInt(osmconnection.getPreference(key + "-history-round-robin", "0")) + ) const local = (this.local = LocalStorageSource.getParsed(key + "-history", [])) const thisSession = (this.thisSession = new UIEventSource( [], @@ -52,7 +95,7 @@ export class OptionallySyncedHistory { )) this.syncPreference.addCallback((syncmode) => { if (syncmode === "sync") { - const list = [...thisSession.data, ...synced.data].slice(0, maxHistory) + const list = [...thisSession.data, ...this.syncedOrdered.value.data].slice(0, maxHistory) if (this._isSame) { for (let i = 0; i < list.length; i++) { for (let j = i + 1; j < list.length; j++) { @@ -62,12 +105,12 @@ export class OptionallySyncedHistory { } } } - synced.set(list) + this.syncedBackingStore.set(list) } else if (syncmode === "local") { - local.set(synced.data?.slice(0, maxHistory)) - synced.set([]) + local.set(this.syncedOrdered.value.data?.slice(0, maxHistory)) + this.syncedBackingStore.set([]) } else { - synced.set([]) + this.syncedBackingStore.set([]) local.set([]) } }) @@ -75,10 +118,10 @@ export class OptionallySyncedHistory { this.value = this.syncPreference.bind((syncPref) => this.getAppropriateStore(syncPref)) } - private getAppropriateStore(syncPref?: string) { + private getAppropriateStore(syncPref?: string): Store { syncPref ??= this.syncPreference.data if (syncPref === "sync") { - return this.synced + return this.syncedOrdered.value } if (syncPref === "local") { return this.local @@ -87,12 +130,29 @@ export class OptionallySyncedHistory { } public add(t: T) { - const store = this.getAppropriateStore() - let oldList = store.data ?? [] if (this._isSame) { - oldList = oldList.filter((x) => !this._isSame(t, x)) + const alreadyNoted = this.getAppropriateStore().data.some(item => this._isSame(item, t)) + if (alreadyNoted) { + return + } + } + + if (this.syncPreference.data === "local") { + const ls = this.local.data + ls.unshift(t) + if (ls.length >= this._maxHistory) { + ls.splice(this._maxHistory, 1) + } + this.local.ping() + } else if (this.syncPreference.data === "sync") { + this.osmconnection.isLoggedIn.addCallbackAndRun(loggedIn => { + // Wait until we are logged in and the settings are downloaded before adding the preference + if (loggedIn) { + this.syncedOrdered.add(t) + return true + } + }) } - store.set([t, ...oldList].slice(0, this._maxHistory)) } /** @@ -113,7 +173,8 @@ export class OptionallySyncedHistory { } clear() { - this.getAppropriateStore().set([]) + this.syncedBackingStore.set([]) + this.local.set([]) } } @@ -229,6 +290,7 @@ export default class UserRelatedState { 10, (a, b) => a === b ) + this.recentlyVisitedThemes.value.addCallbackAndRunD(th => console.log(">>> themes", th)) this.recentlyVisitedSearch = new OptionallySyncedHistory( "places", this.osmConnection, @@ -298,10 +360,10 @@ export default class UserRelatedState { try { return JSON.parse(str) } catch (e) { - console.warn( + e.warn( "Removing theme " + - id + - " as it could not be parsed from the preferences; the content is:", + id + + " as it could not be parsed from the preferences; the content is:", str ) pref.setData(null) @@ -331,7 +393,7 @@ export default class UserRelatedState { icon: layout.icon, title: layout.title.translations, shortDescription: layout.shortDescription.translations, - definition: layout["definition"], + definition: layout["definition"] }) ) } @@ -386,13 +448,13 @@ export default class UserRelatedState { id: "home", "user:home": "yes", _lon: homeLonLat[0], - _lat: homeLonLat[1], + _lat: homeLonLat[1] }, geometry: { type: "Point", - coordinates: homeLonLat, - }, - }, + coordinates: homeLonLat + } + } ] }) return new StaticFeatureSource(feature) @@ -414,7 +476,7 @@ export default class UserRelatedState { _applicationOpened: new Date().toISOString(), _supports_sharing: typeof window === "undefined" ? "no" : window.navigator.share ? "yes" : "no", - _iframe: Utils.isIframe ? "yes" : "no", + _iframe: Utils.isIframe ? "yes" : "no" }) if (!Utils.runningFromConsole) { amendedPrefs.data["_host"] = window.location.host @@ -462,18 +524,18 @@ export default class UserRelatedState { const zenLinks: { link: string; id: string }[] = Utils.NoNull([ hasMissingTheme ? { - id: "theme:" + layout.id, - link: LinkToWeblate.hrefToWeblateZen( - language, - "themes", - layout.id - ), - } + id: "theme:" + layout.id, + link: LinkToWeblate.hrefToWeblateZen( + language, + "themes", + layout.id + ) + } : undefined, ...missingLayers.map((id) => ({ id: "layer:" + id, - link: LinkToWeblate.hrefToWeblateZen(language, "layers", id), - })), + link: LinkToWeblate.hrefToWeblateZen(language, "layers", id) + })) ]) const untranslated_count = untranslated.length amendedPrefs.data["_translation_total"] = "" + total diff --git a/src/Logic/UIEventSource.ts b/src/Logic/UIEventSource.ts index 0626e1a7bf..965dccd17b 100644 --- a/src/Logic/UIEventSource.ts +++ b/src/Logic/UIEventSource.ts @@ -807,7 +807,7 @@ export class UIEventSource extends Store implements Writable { ) } - static asObject( + static asObject( stringUIEventSource: UIEventSource, defaultV: T ): UIEventSource { @@ -819,7 +819,7 @@ export class UIEventSource extends Store implements Writable { try { return JSON.parse(str) } catch (e) { - console.error("Could not parse value", str, "due to", e) + console.error("Could not parse value", str, "due to", e, "; the underlying data store has tag", stringUIEventSource.tag) return defaultV } }, From 33405b7995bbc1ae2f04fd6b62fa589d66bdcdbb Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 3 Apr 2025 00:36:39 +0200 Subject: [PATCH 29/90] Fix tests --- .../Conversion/PrepareTheme.spec.ts | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/test/Models/ThemeConfig/Conversion/PrepareTheme.spec.ts b/test/Models/ThemeConfig/Conversion/PrepareTheme.spec.ts index bad4a4cc8b..508965a992 100644 --- a/test/Models/ThemeConfig/Conversion/PrepareTheme.spec.ts +++ b/test/Models/ThemeConfig/Conversion/PrepareTheme.spec.ts @@ -10,9 +10,12 @@ import { Tag } from "../../../../src/Logic/Tags/Tag" import { DesugaringContext } from "../../../../src/Models/ThemeConfig/Conversion/Conversion" import { And } from "../../../../src/Logic/Tags/And" import { describe, expect, it } from "vitest" -import { QuestionableTagRenderingConfigJson } from "../../../../src/Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson" +import { + QuestionableTagRenderingConfigJson +} from "../../../../src/Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson" import Constants from "../../../../src/Models/Constants" import { ConversionContext } from "../../../../src/Models/ThemeConfig/Conversion/ConversionContext" +import { MinimalTagRenderingConfigJson } from "../../../../src/Models/ThemeConfig/Json/TagRenderingConfigJson" const themeConfigJson: ThemeConfigJson = { description: "Descr", @@ -46,6 +49,14 @@ function constructSharedLayers(): Map { title: null, source: "special", }) + sharedLayers.set("walls_and_buildings", { + id: "walls_and_buildings", + pointRendering: null, + tagRenderings: null, + lineRendering: null, + title: null, + source: "special" + }) for (const defaultLayer of Constants.added_by_default) { sharedLayers.set(defaultLayer, { id: defaultLayer, @@ -70,7 +81,7 @@ describe("PrepareTheme", () => { publicLayers: new Set(), tagRenderingOrder: [], }) - let themeConfigJsonPrepared = prepareStep.convertStrict(theme, ConversionContext.test()) + const themeConfigJsonPrepared = prepareStep.convertStrict(theme, ConversionContext.test()) const themeConfig = new ThemeConfig(themeConfigJsonPrepared) const layerUnderTest = ( themeConfig.layers.find((l) => l.id === "public_bookcase") @@ -83,7 +94,7 @@ describe("PrepareTheme", () => { it("should apply override", () => { const sharedLayers = constructSharedLayers() sharedLayers.set("public_bookcase", bookcaseLayer) - let themeConfigJsonPrepared = new PrepareTheme({ + const themeConfigJsonPrepared = new PrepareTheme({ tagRenderings: new Map(), sharedLayers, publicLayers: new Set(), @@ -99,7 +110,7 @@ describe("PrepareTheme", () => { it("should apply override", () => { const sharedLayers = constructSharedLayers() sharedLayers.set("public_bookcase", bookcaseLayer) - let themeConfigJsonPrepared = new PrepareTheme({ + const themeConfigJsonPrepared = new PrepareTheme({ tagRenderings: new Map(), sharedLayers, publicLayers: new Set(), @@ -135,7 +146,7 @@ describe("PrepareTheme", () => { iconBadges: [ { if: "_favourite=yes", - then: { + then: { id: "circlewhiteheartred", render: "circle:white;heart:red", }, From 6e4879fb0d0d6e73495db723bb6b5540f6203669 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 3 Apr 2025 00:37:31 +0200 Subject: [PATCH 30/90] Chore: normalize regexes --- assets/layers/campsite/campsite.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/layers/campsite/campsite.json b/assets/layers/campsite/campsite.json index 4ade74743a..bbdfbaf452 100644 --- a/assets/layers/campsite/campsite.json +++ b/assets/layers/campsite/campsite.json @@ -191,7 +191,7 @@ "icon": "./assets/layers/questions/cash.svg", "condition": { "and": [ - "charge!~^(.*;|)[^;\/]*\/day(|[^\/].*)$", + "charge!~^(.*;|)[^;/]*/day(|[^/].*)$", "fee!=no" ] }, @@ -218,7 +218,7 @@ "icon": "./assets/layers/questions/cash.svg", "condition": { "and": [ - "charge!~.*\/person\/day.*", + "charge!~.*/person/day.*", "fee!=no" ] }, From 4b3e1fad4fb3a0463142e45e715e9ef1176b58ae Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 3 Apr 2025 02:12:59 +0200 Subject: [PATCH 31/90] Chore: improve types, add checks --- src/Logic/BBox.ts | 6 ++++++ src/Logic/GeoOperations.ts | 11 ++++++----- src/Models/TileRange.ts | 10 +++++----- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/Logic/BBox.ts b/src/Logic/BBox.ts index 7faebcdff6..ecf4b319a8 100644 --- a/src/Logic/BBox.ts +++ b/src/Logic/BBox.ts @@ -37,6 +37,7 @@ export class BBox { this.minLon = Math.min(coors[0], coors[2]) this.maxLat = Math.max(coors[1], coors[3]) this.minLat = Math.min(coors[1], coors[3]) + this.check() return } this.maxLat = -90 @@ -325,6 +326,11 @@ export class BBox { console.trace("BBox with NaN detected:", this) throw "BBOX has NAN" } + if (this.minLat < -90 || this.maxLat > 90) { + const msg = "Invalid BBOX detected: latitude is out of range. Did you swap lat & lon somewhere? min:" + this.minLat + "; max:" + this.maxLat + console.trace(msg) + throw msg + } } public overlapsWithFeature(f: Feature) { diff --git a/src/Logic/GeoOperations.ts b/src/Logic/GeoOperations.ts index cb719760f2..15a2277c05 100644 --- a/src/Logic/GeoOperations.ts +++ b/src/Logic/GeoOperations.ts @@ -10,15 +10,16 @@ import { MultiPolygon, Point, Polygon, - Position, + Position } from "geojson" import { Tiles } from "../Models/TileRange" import { Utils } from "../Utils" -;("use strict") + +("use strict") export class GeoOperations { - private static readonly _earthRadius = 6378137 - private static readonly _originShift = (2 * Math.PI * GeoOperations._earthRadius) / 2 + private static readonly _earthRadius: number = 6378137 + private static readonly _originShift: number = (2 * Math.PI * GeoOperations._earthRadius) / 2 private static readonly directions = ["N", "NE", "E", "SE", "S", "SW", "W", "NW"] as const private static readonly directionsRelative = [ "straight", @@ -480,7 +481,7 @@ export class GeoOperations { const lon = lonLat[0] const lat = lonLat[1] const x = (180 * lon) / GeoOperations._originShift - let y = (180 * lat) / GeoOperations._originShiftcons + let y = (180 * lat) / GeoOperations._originShift y = (180 / Math.PI) * (2 * Math.atan(Math.exp((y * Math.PI) / 180)) - Math.PI / 2) return [x, y] } diff --git a/src/Models/TileRange.ts b/src/Models/TileRange.ts index 90c8059970..f1ec7e351f 100644 --- a/src/Models/TileRange.ts +++ b/src/Models/TileRange.ts @@ -86,7 +86,7 @@ export class Tiles { static asGeojson(zIndex: number, x?: number, y?: number): Feature { let z = zIndex if (x === undefined) { - ;[z, x, y] = Tiles.tile_from_index(zIndex) + [z, x, y] = Tiles.tile_from_index(zIndex) } const bounds = Tiles.tile_bounds_lon_lat(z, x, y) return new BBox(bounds).asGeoJson() @@ -154,17 +154,17 @@ export class Tiles { return (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n))) } - private static lon2tile(lon, zoom) { + private static lon2tile(lon: number, zoom: number): number { return Math.floor(((lon + 180) / 360) * Math.pow(2, zoom)) } - private static lat2tile(lat, zoom) { + private static lat2tile(lat: number, zoom: number): number { return Math.floor( ((1 - - Math.log(Math.tan((lat * Math.PI) / 180) + 1 / Math.cos((lat * Math.PI) / 180)) / + Math.log(Math.tan((lat * Math.PI) / 180) + 1 / Math.cos((lat * Math.PI) / 180)) / Math.PI) / 2) * - Math.pow(2, zoom) + Math.pow(2, zoom) ) } } From 38737c32a2451c4c5bbfab7cbc07a5477054ad32 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 3 Apr 2025 02:13:32 +0200 Subject: [PATCH 32/90] Scripts: drop broken centerPoint-generation in data script --- .forgejo/workflows/daily_data_maintenance.yml | 1 + scripts/GenerateSeries.ts | 93 +------------------ 2 files changed, 5 insertions(+), 89 deletions(-) diff --git a/.forgejo/workflows/daily_data_maintenance.yml b/.forgejo/workflows/daily_data_maintenance.yml index 19b2b72f1a..e39f5872ac 100644 --- a/.forgejo/workflows/daily_data_maintenance.yml +++ b/.forgejo/workflows/daily_data_maintenance.yml @@ -1,4 +1,5 @@ on: + workflow_dispatch: schedule: - cron: "0 2 * * *" diff --git a/scripts/GenerateSeries.ts b/scripts/GenerateSeries.ts index af6bc06bb8..e0058160d3 100644 --- a/scripts/GenerateSeries.ts +++ b/scripts/GenerateSeries.ts @@ -2,10 +2,7 @@ import { existsSync, readdirSync, readFileSync, unlinkSync, writeFileSync } from import ScriptUtils from "./ScriptUtils" import { Utils } from "../src/Utils" import Script from "./Script" -import { GeoOperations } from "../src/Logic/GeoOperations" import { Feature, Polygon } from "geojson" -import { Tiles } from "../src/Models/TileRange" -import { BBox } from "../src/Logic/BBox" class StatsDownloader { private readonly urlTemplate = @@ -205,13 +202,6 @@ class GenerateSeries extends Script { const targetDir = args[0] ?? "../../git/MapComplete-data" await this.downloadStatistics(targetDir + "/changeset-metadata") - this.generateCenterPoints( - targetDir + "/changeset-metadata", - targetDir + "/mapcomplete-changes/", - { - zoomlevel: 8, - } - ) } private async downloadStatistics(targetDir: string) { @@ -229,94 +219,19 @@ class GenerateSeries extends Script { day = Number(process.argv[4]) } - do { + let downloaded = false + while (!downloaded) { try { await new StatsDownloader(targetDir).DownloadStats(year, month, day) - break + downloaded = true } catch (e) { console.log(e) } - } while (true) - + } const allFiles = readdirSync(targetDir).filter((p) => p.endsWith(".json")) writeFileSync(targetDir + "/file-overview.json", JSON.stringify(allFiles)) } - private generateCenterPoints( - sourceDir: string, - targetDir: string, - options: { - zoomlevel: number - } - ) { - const allPaths = readdirSync(sourceDir).filter( - (p) => p.startsWith("stats.") && p.endsWith(".json") - ) - let allFeatures: ChangeSetData[] = allPaths.flatMap( - (path) => JSON.parse(readFileSync(sourceDir + "/" + path, "utf-8")).features - ) - allFeatures = allFeatures.filter( - (f) => - f?.properties !== undefined && - (f.properties.editor === null || - f.properties.editor.toLowerCase().startsWith("mapcomplete")) - ) - - allFeatures = allFeatures.filter( - (f) => f.geometry !== null && f.properties.metadata?.theme !== "EMPTY CS" - ) - allFeatures = allFeatures.filter( - (f) => - f?.properties !== undefined && - (f.properties.editor === null || - f.properties.editor.toLowerCase().startsWith("mapcomplete")) - ) - - allFeatures = allFeatures.filter( - (f) => f.properties.metadata?.theme !== "EMPTY CS" && f.geometry.coordinates.length > 0 - ) - const centerpointsAll = allFeatures.map((f) => { - const centerpoint = GeoOperations.centerpoint(f) - const c = centerpoint.geometry.coordinates - // OsmCha doesn't adhere to the Geojson standard and uses `lat` `lon` as coordinates instead of `lon`, `lat` - centerpoint.geometry.coordinates = [c[1], c[0]] - return centerpoint - }) - const centerpoints = centerpointsAll.filter((p) => { - const bbox = BBox.get(p) - if (bbox.minLat === -90 && bbox.maxLat === -90) { - // Due to some bug somewhere, those invalid bboxes might appear if the latitude is < 90 - // This crashes the 'spreadIntoBBoxes - // As workaround, we simply ignore them for now - return false - } - return true - }) - console.log("Found", centerpoints.length, " changesets in total") - - const perBbox = GeoOperations.spreadIntoBboxes(centerpoints, options.zoomlevel) - - for (const [tileNumber, features] of perBbox) { - const [z, x, y] = Tiles.tile_from_index(tileNumber) - const path = `${targetDir}/tile_${z}_${x}_${y}.geojson` - features.forEach((f) => { - delete f.bbox - }) - writeFileSync( - path, - JSON.stringify( - { - type: "FeatureCollection", - features: features, - }, - null, - " " - ) - ) - - ScriptUtils.erasableLog("Written ", path, "which has ", features.length, "features") - } - } } new GenerateSeries().run() From 3ba7e57ec116663d7e06af4238988349703b2f4c Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 3 Apr 2025 02:29:10 +0200 Subject: [PATCH 33/90] chore(release): 0.50.6 --- CHANGELOG.md | 28 ++++++++++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e476d26e1..2adad6a268 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,34 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [0.50.6](https://github.com/pietervdvn/mapcomplete/compare/v0.50.5...v0.50.6) (2025-04-03) + + +### Bug Fixes + +* change condition to and ([4bc987a](https://github.com/pietervdvn/mapcomplete/commits/4bc987a4830727c28b7cffb3e16b9f2dc2f55fcb)) +* change inner workings of how history is kept, should improve performance ([7c57047](https://github.com/pietervdvn/mapcomplete/commits/7c57047d30991d2cb927a0f5053870c6fe76f43d)) +* don't save special items (such as "add new point") into history anymore ([2f92fd0](https://github.com/pietervdvn/mapcomplete/commits/2f92fd0da1f0fc34936db22354d48f7f97892b0e)) +* fix broken delete button ([b2a937f](https://github.com/pietervdvn/mapcomplete/commits/b2a937f4d89a8fd9bc169defc0b9a0925be80269)) +* rescale some theme images ([69b4461](https://github.com/pietervdvn/mapcomplete/commits/69b4461a20d0ca2c71ccbd4f73621e73dd6ff42c)) + + +### Theme improvements + +* **elevator:** add handrail question ([4bd4d90](https://github.com/pietervdvn/mapcomplete/commits/4bd4d90867c77c8355cbc5f52bf3e249dfc50155)) +* **general:** use internet=wlan instead of internet=wifi in the case of both terminal and wifi connection ([f9e2041](https://github.com/pietervdvn/mapcomplete/commits/f9e204186cacbeafeff2b29a3b448d052dfcc87d)) +* **guideposts:** Add mappings for empty ref, name and elevation ([455f540](https://github.com/pietervdvn/mapcomplete/commits/455f540cbdd28062578129e66945f0693328b290)) +* **guideposts:** Add question for name, ref and elevation ([#2326](https://github.com/pietervdvn/MapComplete/issues/2326)) ([4a23fb8](https://github.com/pietervdvn/mapcomplete/commits/4a23fb87a16e00bef7566c70200b38637b92d76b)) +* **guideposts:** Clean tags when changing ([c465f75](https://github.com/pietervdvn/mapcomplete/commits/c465f756d610566375f28a123fc2f8cc8e6f95cc)) +* **kerbs and crossings:** Remove crossing type, add tactile_paving=partial, invalid values ([5c72467](https://github.com/pietervdvn/mapcomplete/commits/5c7246766eb4d5dcbc3ad42b75ed6a93358baf07)) +* **postboxes:** Drop old tagging, add returns_only as option ([cf1ae2f](https://github.com/pietervdvn/mapcomplete/commits/cf1ae2f354a63bbec87325cbebe249f92158891a)) +* **public_bookcase:** allow to snap to wall ([20808ee](https://github.com/pietervdvn/mapcomplete/commits/20808ee7725a72aded0a042a7aabad52493b43e1)) +* **wayside_shrine:** add mother mary as rendering and common option ([b71c275](https://github.com/pietervdvn/mapcomplete/commits/b71c2750258e4e143f1ff6b6e557ea519620a341)) +* **wayside_shrine:** disable blurring, as many pictures will depict a maria statue (which we don't want blurred) ([4f75c81](https://github.com/pietervdvn/mapcomplete/commits/4f75c81af64cff2951aa90146cc745e577f01103)) +* **wayside_srhine:** add inscription question ([290e737](https://github.com/pietervdvn/mapcomplete/commits/290e737e0b330b3732b8282b158d8c17dcb9b8a5)) +* winter_service theme, split off all_streets from street_lighting ([748eccb](https://github.com/pietervdvn/mapcomplete/commits/748eccba5903c55c17e5995b747065a3d6835036)) +* **winter_service:** add colour to serviced_streets, also show winter_service=limited ([d2ed839](https://github.com/pietervdvn/mapcomplete/commits/d2ed83972fe4f19572729e0169594b88f691bcb8)) + ### [0.50.5](https://github.com/pietervdvn/mapcomplete/compare/v0.50.4...v0.50.5) (2025-03-17) diff --git a/package-lock.json b/package-lock.json index ffaf6cd84d..47b48e4167 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mapcomplete", - "version": "0.50.5", + "version": "0.50.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mapcomplete", - "version": "0.50.5", + "version": "0.50.6", "license": "GPL-3.0-or-later", "dependencies": { "@capacitor/android": "^6.1.2", diff --git a/package.json b/package.json index a88a9112d9..12c1684f12 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mapcomplete", - "version": "0.50.5", + "version": "0.50.6", "repository": "https://github.com/pietervdvn/MapComplete", "description": "A small website to edit OSM easily", "bugs": "https://github.com/pietervdvn/MapComplete/issues", From e92dae92b75f200fdecbb9318f6f9078f5d68e72 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Fri, 4 Apr 2025 01:51:58 +0200 Subject: [PATCH 34/90] UI: fix small issues to OpeningHours picker, cleanup obsolete file --- public/css/openinghourstable.css | 6 +- .../Helpers/OpeningHours/OHTable.svelte | 1 - .../Helpers/OpeningHoursInput.svelte | 1 + src/UI/OpeningHours/OpeningHours.ts | 13 +++- src/UI/OpeningHours/OpeningHoursRange.ts | 71 ------------------- .../OpeningHours/OpeningHoursVisualization.ts | 1 - 6 files changed, 16 insertions(+), 77 deletions(-) delete mode 100644 src/UI/OpeningHours/OpeningHoursRange.ts diff --git a/public/css/openinghourstable.css b/public/css/openinghourstable.css index 731da535e0..b94848465b 100644 --- a/public/css/openinghourstable.css +++ b/public/css/openinghourstable.css @@ -44,16 +44,16 @@ } .oh-timecell.oh-timecell-5:not(.oh-timecell-half), .oh-timecell.oh-timecell-6:not(.oh-timecell-half) { - background: repeating-linear-gradient(-65deg, var(--background-color) 0 4.8px, var(--subtle-detail-color) 7px) + background: repeating-linear-gradient(-65deg, var(--background-color) 0 4.8px, var(--low-interaction-background) 7px) } .oh-timecell-selected.oh-timecell-5:not(.oh-timecell-half), .oh-timecell-selected.oh-timecell-6:not(.oh-timecell-half) { - background: repeating-linear-gradient(-65deg, var(--catch-detail-color) 0 4.8px, var(--subtle-detail-color) 7px) + background: repeating-linear-gradient(-65deg, var(--catch-detail-color) 0 4.8px, var(--low-interaction-background) 7px) } .oh-timecell-half { border-bottom: 1px solid #ddd; - background: var(--subtle-detail-color); + background: var(--low-interaction-background); } diff --git a/src/UI/InputElement/Helpers/OpeningHours/OHTable.svelte b/src/UI/InputElement/Helpers/OpeningHours/OHTable.svelte index 919119bd4a..5671b32b26 100644 --- a/src/UI/InputElement/Helpers/OpeningHours/OHTable.svelte +++ b/src/UI/InputElement/Helpers/OpeningHours/OHTable.svelte @@ -164,7 +164,6 @@ /** * Determines 'top' and 'height-attributes, returns a CSS-string' - * @param oh */ function rangeStyle(oh: OpeningHour, totalHeight: number): string { const top = ((oh.startHour + oh.startMinutes / 60) * totalHeight) / 24 diff --git a/src/UI/InputElement/Helpers/OpeningHoursInput.svelte b/src/UI/InputElement/Helpers/OpeningHoursInput.svelte index cb164ec8da..39f0dd7d71 100644 --- a/src/UI/InputElement/Helpers/OpeningHoursInput.svelte +++ b/src/UI/InputElement/Helpers/OpeningHoursInput.svelte @@ -41,4 +41,5 @@ + diff --git a/src/UI/OpeningHours/OpeningHours.ts b/src/UI/OpeningHours/OpeningHours.ts index 4053b6674d..527c793fda 100644 --- a/src/UI/OpeningHours/OpeningHours.ts +++ b/src/UI/OpeningHours/OpeningHours.ts @@ -859,12 +859,23 @@ This list will be sorted return ranges } + /** + * + * const oh = {weekday: 0, startHour: 18, startMinutes: 0, endHour: 20, endMinutes: 30} + * OH.isSame(oh, oh) // => true + * const ohEndMidnights = {...oh, endMinutes: 0, endHour: 24} + * OH.isSame(oh, ohEndMidnights) // => false + * OH.isSame(ohEndMidnights, ohEndMidnights) // => true + * const ohEndMidnightsAlt = {...ohEndMidnights, endMinutes: 0, endHour: 0} + * OH.isSame(ohEndMidnightsAlt, ohEndMidnights) // => true + * + */ public static isSame(a: OpeningHour, b: OpeningHour) { return ( a.weekday === b.weekday && a.startHour === b.startHour && a.startMinutes === b.startMinutes && - a.endHour === b.endHour && + a.endHour % 24 === b.endHour % 24 && a.endMinutes === b.endMinutes ) } diff --git a/src/UI/OpeningHours/OpeningHoursRange.ts b/src/UI/OpeningHours/OpeningHoursRange.ts deleted file mode 100644 index c26af273ad..0000000000 --- a/src/UI/OpeningHours/OpeningHoursRange.ts +++ /dev/null @@ -1,71 +0,0 @@ -/** - * A single opening hours range, shown on top of the OH-picker table - */ -import { Utils } from "../../Utils" -import Combine from "../Base/Combine" -import { OH, OpeningHour } from "./OpeningHours" -import BaseUIElement from "../BaseUIElement" -import { FixedUiElement } from "../Base/FixedUiElement" -import SvelteUIElement from "../Base/SvelteUIElement" -import Delete_icon from "../../assets/svg/Delete_icon.svelte" - -export default class OpeningHoursRange extends BaseUIElement { - private _oh: OpeningHour - - private readonly _onDelete: () => void - - constructor(oh: OpeningHour, onDelete: () => void) { - super() - this._oh = oh - this._onDelete = onDelete - this.SetClass("oh-timerange") - } - - InnerConstructElement(): HTMLElement { - const height = this.getHeight() - const oh = this._oh - const startTime = new FixedUiElement( - Utils.TwoDigits(oh.startHour) + ":" + Utils.TwoDigits(oh.startMinutes) - ) - const endTime = new FixedUiElement( - Utils.TwoDigits(oh.endHour) + ":" + Utils.TwoDigits(oh.endMinutes) - ) - - const deleteRange = new SvelteUIElement(Delete_icon) - .SetClass("rounded-full w-6 h-6 block bg-black pointer-events-auto ") - .onClick(() => { - this._onDelete() - }) - - let content: BaseUIElement - if (height > 3) { - content = new Combine([startTime, deleteRange, endTime]).SetClass( - "flex flex-col h-full justify-between" - ) - } else { - content = new Combine([deleteRange]) - .SetClass("flex flex-col h-full") - .SetStyle("flex-content: center; overflow-x: unset;") - } - - const el = new Combine([content]).ConstructElement() - - el.style.top = `${(100 * OH.startTime(oh)) / 24}%` - el.style.height = `${(100 * this.getHeight()) / 24}%` - return el - } - - /** - * Gets the relative height, in number of hours to display - * Range: ]0 - 24] - */ - private getHeight(): number { - const oh = this._oh - - let endhour = oh.endHour - if (oh.endHour == 0 && oh.endMinutes == 0) { - endhour = 24 - } - return endhour - oh.startHour + (oh.endMinutes - oh.startMinutes) / 60 - } -} diff --git a/src/UI/OpeningHours/OpeningHoursVisualization.ts b/src/UI/OpeningHours/OpeningHoursVisualization.ts index b938e2e34d..40d59f86f5 100644 --- a/src/UI/OpeningHours/OpeningHoursVisualization.ts +++ b/src/UI/OpeningHours/OpeningHoursVisualization.ts @@ -8,7 +8,6 @@ import Toggle from "../Input/Toggle" import { VariableUiElement } from "../Base/VariableUIElement" import Table from "../Base/Table" import { Translation } from "../i18n/Translation" -import { OsmConnection } from "../../Logic/Osm/OsmConnection" import Loading from "../Base/Loading" import opening_hours from "opening_hours" import Locale from "../i18n/Locale" From b507f799ed92f1ced070ba72092f837114dc4d70 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Fri, 4 Apr 2025 01:53:28 +0200 Subject: [PATCH 35/90] UI(specialVis): only 'leftover-questions' now hides tagRenderings with 'hidden'-label by default, rename variables for imageCarousel and use ';'-separated values --- .../ThemeConfig/Conversion/PrepareLayer.ts | 19 ++++--------------- src/UI/Popup/GroupedView.svelte | 5 +++-- .../ImageVisualisations.ts | 7 ++++--- .../UISpecialVisualisations.ts | 5 +---- 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/Models/ThemeConfig/Conversion/PrepareLayer.ts b/src/Models/ThemeConfig/Conversion/PrepareLayer.ts index cbaf06c28c..4e37b063cf 100644 --- a/src/Models/ThemeConfig/Conversion/PrepareLayer.ts +++ b/src/Models/ThemeConfig/Conversion/PrepareLayer.ts @@ -1,18 +1,6 @@ -import { - Concat, - DesugaringContext, - DesugaringStep, - Each, - FirstOf, - Fuse, - On, - SetDefault, -} from "./Conversion" +import { Concat, DesugaringContext, DesugaringStep, Each, FirstOf, Fuse, On, SetDefault } from "./Conversion" import { LayerConfigJson } from "../Json/LayerConfigJson" -import { - MinimalTagRenderingConfigJson, - TagRenderingConfigJson, -} from "../Json/TagRenderingConfigJson" +import { MinimalTagRenderingConfigJson, TagRenderingConfigJson } from "../Json/TagRenderingConfigJson" import { Utils } from "../../../Utils" import RewritableConfigJson from "../Json/RewritableConfigJson" import SpecialVisualizations from "../../../UI/SpecialVisualizations" @@ -262,6 +250,7 @@ export class AddQuestionBox extends DesugaringStep { /* At this point, we know which question labels are not yet handled and which already are handled, and we * know there is no previous catch-all questions */ + seen.add("hidden") const question: QuestionableTagRenderingConfigJson = { id: "leftover-questions", render: { @@ -879,7 +868,7 @@ export class AddRatingBadge extends DesugaringStep { const funcs = new Set(specialVis.map((rs) => rs.func.funcName)) if (funcs.has("list_reviews")) { - ;(<(string | TagRenderingConfigJson)[]>json.titleIcons).push("icons.rating") + (<(string | TagRenderingConfigJson)[]>json.titleIcons).push("icons.rating") } return json } diff --git a/src/UI/Popup/GroupedView.svelte b/src/UI/Popup/GroupedView.svelte index d77018af23..038b97c223 100644 --- a/src/UI/Popup/GroupedView.svelte +++ b/src/UI/Popup/GroupedView.svelte @@ -5,7 +5,6 @@ import type { OsmTags } from "../../Models/OsmFeature" import LayerConfig from "../../Models/ThemeConfig/LayerConfig" import AccordionSingle from "../Flowbite/AccordionSingle.svelte" - import SelectedElementView from "../BigComponents/SelectedElementView.svelte" import TagRenderingAnswer from "./TagRendering/TagRenderingAnswer.svelte" import TagRenderingEditableDynamic from "./TagRendering/TagRenderingEditableDynamic.svelte" import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig" @@ -38,6 +37,8 @@ {#each trgs as config (config.id)} - + {#if config.IsKnown($tags) && (config.condition === undefined || config.condition.matchesProperties($tags))} + + {/if} {/each} diff --git a/src/UI/SpecialVisualisations/ImageVisualisations.ts b/src/UI/SpecialVisualisations/ImageVisualisations.ts index 3897331ddd..64bf8e1773 100644 --- a/src/UI/SpecialVisualisations/ImageVisualisations.ts +++ b/src/UI/SpecialVisualisations/ImageVisualisations.ts @@ -65,7 +65,7 @@ export class ImageVisualisations { args: [ { name: "image_key", - defaultValue: AllImageProviders.defaultKeys.join(","), + defaultValue: AllImageProviders.defaultKeys.join(";"), doc: "The keys given to the images, e.g. if image is given, the first picture URL will be added as image, the second as image:0, the third as image:1, etc... Multiple values are allowed if ';'-separated ", }, ], @@ -73,7 +73,7 @@ export class ImageVisualisations { constr: (state, tags, args) => { let imagePrefixes: string[] = undefined if (args.length > 0) { - imagePrefixes = [].concat(...args.map((a) => a.split(","))) + imagePrefixes = [].concat(...args.map((a) => a.split(";"))) } const images = AllImageProviders.loadImagesFor(tags, imagePrefixes) const estimated = tags.mapD((tags) => @@ -89,8 +89,9 @@ export class ImageVisualisations { needsUrls: [Imgur.apiUrl, ...Imgur.supportingUrls], args: [ { - name: "image-key", + name: "image_key", doc: "Image tag to add the URL to (or image-tag:0, image-tag:1 when multiple images are added)", + defaultValue: "panoramax", required: false, }, { diff --git a/src/UI/SpecialVisualisations/UISpecialVisualisations.ts b/src/UI/SpecialVisualisations/UISpecialVisualisations.ts index 1c6c2da116..57c5ebdff2 100644 --- a/src/UI/SpecialVisualisations/UISpecialVisualisations.ts +++ b/src/UI/SpecialVisualisations/UISpecialVisualisations.ts @@ -29,7 +29,7 @@ class QuestionViz implements SpecialVisualizationSvelte { }, { name: "blacklisted-labels", - doc: "One or more ';'-separated labels of questions which should _not_ be included. Default: 'hidden'", + doc: "One or more ';'-separated labels of questions which should _not_ be included. Note that the questionbox which is added by default will blacklist 'hidden'" }, ] svelteBased = true @@ -50,9 +50,6 @@ class QuestionViz implements SpecialVisualizationSvelte { ?.split(";") ?.map((s) => s.trim()) ?.filter((s) => s !== "") - if (blacklist.length === 0) { - blacklist.push("hidden") - } return new SvelteUIElement(Questionbox, { layer, tags, From 43e882d38eb472a599c652fff7247d76b3eed03e Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Fri, 4 Apr 2025 02:08:28 +0200 Subject: [PATCH 36/90] UI(specialVis): rename variables for imageCarousel and use ';'-separated values, use 'special'-syntax --- assets/layers/etymology/etymology.json | 35 ++++++++++++++++++-------- assets/layers/food/food.json | 2 +- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/assets/layers/etymology/etymology.json b/assets/layers/etymology/etymology.json index f5c91424e2..bbd65047ce 100644 --- a/assets/layers/etymology/etymology.json +++ b/assets/layers/etymology/etymology.json @@ -337,17 +337,32 @@ }, "questions", { - "id": "street-name-sign-image", + "id": "streetsign-image-carousel", "render": { - "en": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}", - "nl": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Voeg afbeelding van straatnaambordje toe)}", - "de": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Bild eines Straßenschildes hinzufügen)}", - "fr": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Ajouter une photo de la plaque de rue)}", - "ca": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Afegeix una imatge de la placa amb el nom del carrer)}", - "cs": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}", - "da": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Tilføj foto af gadenavneskilt)}", - "es": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Agregar imagen de un letrero de nombre de calle)}", - "uk": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Додати зображення таблички з назвою вулиці)}" + "special": { + "type": "image_carousel", + "image_key": "image:streetsign;panoramax:streetsign" + } + } + }, + { + "id": "streetsign-upload", + "render": { + "special": { + "type": "image_upload", + "image_key": "image:streetsign", + "label": { + "en": "Add image of a street name sign", + "nl": "Voeg afbeelding van straatnaambordje toe", + "de": "Bild eines Straßenschildes hinzufügen", + "fr": "Ajouter une photo de la plaque de rue", + "ca": "Afegeix una imatge de la placa amb el nom del carrer", + "cs": "Add image of a street name sign", + "da": "Tilføj foto af gadenavneskilt", + "es": "Agregar imagen de un letrero de nombre de calle", + "uk": "Додати зображення таблички з назвою вулиці" + } + } } }, { diff --git a/assets/layers/food/food.json b/assets/layers/food/food.json index 1905cc3c77..c259f6edbb 100644 --- a/assets/layers/food/food.json +++ b/assets/layers/food/food.json @@ -627,7 +627,7 @@ "render": { "special": { "type": "image_upload", - "image-key": "image:menu", + "image_key": "image:menu", "label": { "en": "Add an image from the menu", "nl": "Voeg een foto van het menu toe", From a4128e446e6f18eaaecbf5a728fe7a6108b48a29 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Fri, 4 Apr 2025 02:25:03 +0200 Subject: [PATCH 37/90] Chore: fix lint errors --- src/Logic/Osm/Changes.ts | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/Logic/Osm/Changes.ts b/src/Logic/Osm/Changes.ts index 0d1573a266..5dddbacad4 100644 --- a/src/Logic/Osm/Changes.ts +++ b/src/Logic/Osm/Changes.ts @@ -368,22 +368,25 @@ export class Changes { states.set(id, "created") let osmObj: OsmObject = undefined switch (change.type) { - case "node": + case "node": { const n = new OsmNode(change.id) n.lat = change.changes["lat"] n.lon = change.changes["lon"] osmObj = n break - case "way": + } + case "way": { const w = new OsmWay(change.id) w.nodes = change.changes["nodes"] osmObj = w break - case "relation": + } + case "relation": { const r = new OsmRelation(change.id) r.members = change.changes["members"] osmObj = r break + } default: throw "Got an invalid change.type: " + change.type } @@ -424,10 +427,8 @@ export class Changes { if (change.changes !== undefined) { switch (change.type) { - case "node": - // @ts-ignore + case "node": { const nlat = Utils.Round7(change.changes.lat) - // @ts-ignore const nlon = Utils.Round7(change.changes.lon) const n = obj if (n.lat !== nlat || n.lon !== nlon) { @@ -436,7 +437,8 @@ export class Changes { changed = true } break - case "way": + } + case "way": { const nnodes = change.changes["nodes"] const w = obj if (!Utils.Identical(nnodes, w.nodes)) { @@ -444,7 +446,8 @@ export class Changes { changed = true } break - case "relation": + } + case "relation": { const nmembers: { type: "node" | "way" | "relation" ref: number @@ -460,6 +463,7 @@ export class Changes { changed = true } break + } } } @@ -600,6 +604,7 @@ export class Changes { e + ")" // this._reportError(msg) // We don't report this yet, might be a temporary fluke + console.log(msg) const osmObj = await downloader.DownloadObjectAsync(id, 0) return { id, osmObj } } @@ -811,10 +816,9 @@ export class Changes { } private async flushChangesAsync(): Promise { - const self = this try { // At last, we build the changeset and upload - const pending = self.pendingChanges.data + const pending = this.pendingChanges.data const pendingPerTheme = new Map() for (const changeDescription of pending) { @@ -840,7 +844,7 @@ export class Changes { openChangeset.data ) - const refused = await self.flushSelectChanges(pendingChanges, openChangeset) + const refused = await this.flushSelectChanges(pendingChanges, openChangeset) if (!refused) { this.errors.setData([]) } @@ -873,9 +877,9 @@ export class Changes { ) this.errors.data.push(e) this.errors.ping() - self.pendingChanges.setData([]) + this.pendingChanges.setData([]) } finally { - self.isUploading.setData(false) + this.isUploading.setData(false) } } } From 32e2176ecd8a84df119175b46a1d2c154ca63fc0 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Fri, 4 Apr 2025 02:25:41 +0200 Subject: [PATCH 38/90] UX: attempt to decrease dissappearing keyboard (#2365) --- .../FeatureSource/Sources/ChangeGeometryApplicator.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Logic/FeatureSource/Sources/ChangeGeometryApplicator.ts b/src/Logic/FeatureSource/Sources/ChangeGeometryApplicator.ts index 871c865578..41ffe47d9e 100644 --- a/src/Logic/FeatureSource/Sources/ChangeGeometryApplicator.ts +++ b/src/Logic/FeatureSource/Sources/ChangeGeometryApplicator.ts @@ -2,7 +2,7 @@ * Applies geometry changes from 'Changes' onto every feature of a featureSource */ import { Changes } from "../../Osm/Changes" -import { UIEventSource } from "../../UIEventSource" +import { Stores, UIEventSource } from "../../UIEventSource" import { FeatureSource, IndexedFeatureSource } from "../FeatureSource" import { ChangeDescription, ChangeDescriptionTools } from "../../Osm/Actions/ChangeDescription" import { Feature } from "geojson" @@ -19,10 +19,9 @@ export default class ChangeGeometryApplicator implements FeatureSource { this.features = new UIEventSource(undefined) - const self = this - source.features.addCallbackAndRunD((_) => self.update()) + source.features.addCallbackAndRunD(() => this.update()) - changes.allChanges.addCallbackAndRunD((_) => self.update()) + Stores.ListStabilized(changes.allChanges).addCallbackAndRunD(() => this.update()) } private update() { @@ -65,7 +64,7 @@ export default class ChangeGeometryApplicator implements FeatureSource { // Allright! We have a feature to rewrite! const copy = { - ...feature, + ...feature } // We only apply the last change as that one'll have the latest geometry const change = changesForFeature[changesForFeature.length - 1] From 17fd654f39a1b6cb8bd5dcc2026f273fffbe1d9e Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Fri, 4 Apr 2025 12:35:32 +0200 Subject: [PATCH 39/90] Themes(memorials): add possibility to snap to walls_and_buildings --- assets/layers/memorial/memorial.json | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/assets/layers/memorial/memorial.json b/assets/layers/memorial/memorial.json index 7c32809d21..5b74180f8a 100644 --- a/assets/layers/memorial/memorial.json +++ b/assets/layers/memorial/memorial.json @@ -94,11 +94,28 @@ "fr": "Un mémorial est un élément physique disposé en mémoire d'une personne ou d'un évènement.", "es": "Un monumento es un objeto físico que recuerda a una persona o un evento.", "ca": "Un monument és un objecte físic que recorda una persona o esdeveniment.", - "cs": "Památník je fyzický objekt, který připomíná osobu nebo událost." + "cs": "Památník je fyzický objekt, který připomíná osobu nebo událost.", + "nl": "Een fysiek object dat een persoon of gebeurtenis herdenkt" }, "tags": [ "historic=memorial" ] + }, + { + "title": { + "en": "a memorial on a wall", + "nl": "een gedenkteken dat aan een muur hangt" + }, + "description": { + "en": "A memorial is a physical object which remembers a person or event and is attached to a wall.", + "nl": "Een fysiek object dat een persoon of gebeurtenis herdenkt en dat ophangt aan een muur." + }, + "tags": [ + "historic=memorial" + ], + "snapToLayer": [ + "walls_and_buildings" + ] } ], "tagRenderings": [ From 602bf2300dae9918e7e3a0ee51ef99b125d251a7 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sat, 5 Apr 2025 02:18:45 +0200 Subject: [PATCH 40/90] Chore: regen docs --- Docs/BuiltinIndex.md | 12 +- Docs/BuiltinQuestions.md | 4 +- Docs/ELI-overview.md | 2 +- Docs/Layers/address.md | 2 +- Docs/Layers/advertising.md | 2 +- Docs/Layers/advertising_wall_paintings.md | 2 +- Docs/Layers/aerialway.md | 2 +- Docs/Layers/all_streets.md | 24 +- Docs/Layers/all_vending_machine.md | 2 +- Docs/Layers/ambulancestation.md | 2 +- Docs/Layers/animal_shelter.md | 2 +- Docs/Layers/artwork.md | 8 +- Docs/Layers/artwork_on_wall.md | 8 +- Docs/Layers/assembly_point.md | 2 +- Docs/Layers/assisted_repair.md | 2 +- Docs/Layers/atm.md | 11 +- Docs/Layers/bank.md | 2 +- Docs/Layers/banks_with_atm.md | 2 +- Docs/Layers/barrier.md | 2 +- Docs/Layers/bbq.md | 2 +- Docs/Layers/beehive.md | 2 +- Docs/Layers/bench.md | 2 +- Docs/Layers/bench_at_pt.md | 2 +- .../bicycle_assisted_repair_workshop.md | 2 +- Docs/Layers/bicycle_counter.md | 2 +- Docs/Layers/bicycle_library.md | 2 +- Docs/Layers/bicycle_rental.md | 2 +- Docs/Layers/bicycle_rental_non_docking.md | 2 +- Docs/Layers/bike_cafe.md | 2 +- Docs/Layers/bike_cleaning.md | 2 +- Docs/Layers/bike_parking.md | 2 +- Docs/Layers/bike_repair_station.md | 2 +- Docs/Layers/bike_shop.md | 4 +- Docs/Layers/bike_themed_object.md | 2 +- Docs/Layers/binocular.md | 2 +- Docs/Layers/birdhide.md | 2 +- Docs/Layers/brothel.md | 2 +- Docs/Layers/building.md | 2 +- Docs/Layers/buildings_with_architecture.md | 2 +- Docs/Layers/cafe_pub.md | 6 +- Docs/Layers/campsite.md | 33 +- Docs/Layers/car_rental.md | 2 +- Docs/Layers/childcare.md | 2 +- Docs/Layers/cinema.md | 2 +- Docs/Layers/climbing_area.md | 2 +- Docs/Layers/climbing_club.md | 2 +- Docs/Layers/climbing_gym.md | 6 +- Docs/Layers/climbing_opportunity.md | 2 +- Docs/Layers/climbing_route.md | 2 +- Docs/Layers/clock.md | 2 +- Docs/Layers/crab_address.md | 2 +- Docs/Layers/crossings.md | 22 +- Docs/Layers/crossings_no_traffic_lights.md | 22 +- .../cultural_places_without_etymology.md | 12 +- Docs/Layers/cycle_highways.md | 2 +- Docs/Layers/cyclestreets.md | 2 +- Docs/Layers/cycleways_and_roads.md | 2 +- Docs/Layers/cyclist_waiting_aid.md | 2 +- Docs/Layers/defibrillator.md | 2 +- Docs/Layers/dentist.md | 2 +- Docs/Layers/direction.md | 2 +- Docs/Layers/disaster_response.md | 2 +- Docs/Layers/doctors.md | 2 +- Docs/Layers/dog_toilet.md | 2 +- Docs/Layers/dogpark.md | 2 +- Docs/Layers/drinking_water.md | 2 +- Docs/Layers/dumpstations.md | 2 +- ...ducation_institutions_without_etymology.md | 12 +- Docs/Layers/elevator.md | 11 +- Docs/Layers/elongated_coin.md | 2 +- Docs/Layers/entrance.md | 2 +- Docs/Layers/etymology.md | 12 +- Docs/Layers/extinguisher.md | 2 +- Docs/Layers/facadegardens.md | 2 +- Docs/Layers/fire_station.md | 2 +- Docs/Layers/firepit.md | 2 +- Docs/Layers/fitness_centre.md | 2 +- Docs/Layers/fitness_station.md | 2 +- Docs/Layers/fixme.md | 2 +- Docs/Layers/food.md | 6 +- Docs/Layers/food_courts.md | 2 +- Docs/Layers/food_dog_friendly.md | 6 +- Docs/Layers/food_glutenfree.md | 6 +- Docs/Layers/food_lactosefree.md | 6 +- Docs/Layers/friture.md | 6 +- Docs/Layers/ghost_bike.md | 2 +- Docs/Layers/ghostsign.md | 2 +- Docs/Layers/governments.md | 2 +- Docs/Layers/grave.md | 2 +- Docs/Layers/group_campsite.md | 33 +- Docs/Layers/group_hostel.md | 6 +- Docs/Layers/guidepost.md | 34 +- Docs/Layers/hackerspace.md | 4 +- ...lth_and_social_places_without_etymology.md | 12 +- Docs/Layers/hospital.md | 2 +- Docs/Layers/hostel.md | 6 +- Docs/Layers/hydrant.md | 9 +- Docs/Layers/ice_cream.md | 2 +- Docs/Layers/icecream_glutenfree.md | 2 +- Docs/Layers/icecream_lactosefree.md | 2 +- Docs/Layers/indoors.md | 71 +- Docs/Layers/information_board.md | 2 +- Docs/Layers/insect_hotel.md | 2 +- Docs/Layers/item_with_image.md | 2 +- Docs/Layers/kerbs.md | 2 +- Docs/Layers/lighthouse.md | 2 +- Docs/Layers/lit_streets.md | 2 +- Docs/Layers/love_hotel.md | 2 +- Docs/Layers/map.md | 2 +- Docs/Layers/maproulette.md | 2 +- Docs/Layers/maproulette_challenge.md | 2 +- Docs/Layers/maxspeed.md | 2 +- Docs/Layers/medical_shops.md | 6 +- Docs/Layers/memorial.md | 4 +- Docs/Layers/mountain_rescue.md | 2 +- Docs/Layers/nature_reserve.md | 2 +- Docs/Layers/not_cyclestreets.md | 2 +- Docs/Layers/note.md | 2 +- Docs/Layers/observation_tower.md | 2 +- Docs/Layers/onwheels_entrance_data.md | 2 +- Docs/Layers/osm_community_index.md | 2 +- Docs/Layers/outdoor_seating.md | 6 +- Docs/Layers/parcel_lockers.md | 16 +- Docs/Layers/parking.md | 2 +- Docs/Layers/parking_spaces.md | 2 +- Docs/Layers/parking_spaces_disabled.md | 2 +- Docs/Layers/parking_ticket_machine.md | 2 +- .../parks_and_forests_without_etymology.md | 12 +- Docs/Layers/parks_without_etymology.md | 12 +- Docs/Layers/pet_shops.md | 932 +++++++++++++++ Docs/Layers/pharmacy.md | 2 +- Docs/Layers/physiotherapist.md | 2 +- Docs/Layers/picnic_table.md | 2 +- Docs/Layers/playground_equipment.md | 2 +- Docs/Layers/police.md | 2 +- Docs/Layers/post_offices_with_atm.md | 2 +- Docs/Layers/postboxes.md | 2 +- Docs/Layers/postoffices.md | 2 +- Docs/Layers/pt_shelter.md | 2 +- Docs/Layers/public_bookcase.md | 4 +- Docs/Layers/railway_platforms.md | 2 +- Docs/Layers/rainbow_crossing_high_zoom.md | 2 +- Docs/Layers/rainbow_crossings.md | 2 +- Docs/Layers/reception_desk.md | 2 +- Docs/Layers/recycling.md | 2 +- Docs/Layers/route_marker.md | 2 +- Docs/Layers/school.md | 2 +- Docs/Layers/shelter.md | 2 +- Docs/Layers/shop_dog_friendly.md | 6 +- Docs/Layers/shops.md | 6 +- Docs/Layers/shops_glutenfree.md | 6 +- Docs/Layers/shops_lactosefree.md | 6 +- Docs/Layers/shops_second_hand.md | 6 +- .../Layers/shops_with_climbing_shoe_repair.md | 6 +- Docs/Layers/shower.md | 2 +- Docs/Layers/ski_piste.md | 2 +- Docs/Layers/slow_roads.md | 2 +- Docs/Layers/souvenir_coin.md | 2 +- Docs/Layers/souvenir_note.md | 2 +- Docs/Layers/speed_camera.md | 2 +- Docs/Layers/speed_display.md | 2 +- Docs/Layers/sport_places_without_etymology.md | 12 +- Docs/Layers/sport_shops.md | 6 +- Docs/Layers/sports_centre.md | 2 +- Docs/Layers/stairs.md | 2 +- Docs/Layers/street_lamps.md | 34 +- Docs/Layers/streets_without_etymology.md | 12 +- Docs/Layers/stripclub.md | 2 +- Docs/Layers/surveillance_camera.md | 2 +- Docs/Layers/tactile_map.md | 2 +- Docs/Layers/tactile_model.md | 2 +- Docs/Layers/tertiary_education.md | 2 +- Docs/Layers/ticket_machine.md | 2 +- Docs/Layers/ticket_validator.md | 2 +- Docs/Layers/toekomstige_fietsstraat.md | 2 +- Docs/Layers/toilet.md | 156 ++- Docs/Layers/toilet_at_amenity.md | 2 +- Docs/Layers/tool_library.md | 2 +- Docs/Layers/tourism_accomodation.md | 6 +- .../toursistic_places_without_etymology.md | 12 +- Docs/Layers/trail.md | 2 +- Docs/Layers/transit_routes.md | 2 +- Docs/Layers/transit_stops.md | 2 +- Docs/Layers/tree_node.md | 2 +- Docs/Layers/trolley_bay.md | 2 +- Docs/Layers/utility_pole.md | 71 ++ Docs/Layers/vending_machine.md | 2 +- Docs/Layers/vending_machine_bicycle.md | 2 +- Docs/Layers/veterinary.md | 2 +- Docs/Layers/viewpoint.md | 2 +- Docs/Layers/village_green.md | 2 +- Docs/Layers/visitor_information_centre.md | 2 +- Docs/Layers/walls_and_buildings.md | 4 + Docs/Layers/waste_basket.md | 2 +- Docs/Layers/waste_basket_dogs.md | 2 +- Docs/Layers/waste_disposal.md | 2 +- Docs/Layers/wayside_shrine.md | 55 +- Docs/Layers/windturbine.md | 2 +- Docs/SpecialRenderings.md | 10 +- Docs/TagInfo/mapcomplete_artwork.json | 4 +- Docs/TagInfo/mapcomplete_atm.json | 14 + Docs/TagInfo/mapcomplete_cafes_and_pubs.json | 4 +- .../TagInfo/mapcomplete_circular_economy.json | 4 +- Docs/TagInfo/mapcomplete_climbing.json | 139 ++- Docs/TagInfo/mapcomplete_cyclofix.json | 4 +- .../mapcomplete_disaster_response.json | 6 + Docs/TagInfo/mapcomplete_etymology.json | 10 +- Docs/TagInfo/mapcomplete_food.json | 4 +- Docs/TagInfo/mapcomplete_fritures.json | 4 +- Docs/TagInfo/mapcomplete_ghostsigns.json | 4 +- Docs/TagInfo/mapcomplete_glutenfree.json | 4 +- Docs/TagInfo/mapcomplete_hackerspaces.json | 4 +- Docs/TagInfo/mapcomplete_hailhydrant.json | 6 + Docs/TagInfo/mapcomplete_healthcare.json | 4 +- Docs/TagInfo/mapcomplete_hotels.json | 4 +- Docs/TagInfo/mapcomplete_indoors.json | 59 +- Docs/TagInfo/mapcomplete_lactosefree.json | 4 +- Docs/TagInfo/mapcomplete_memorials.json | 4 +- Docs/TagInfo/mapcomplete_nature.json | 135 ++- Docs/TagInfo/mapcomplete_onwheels.json | 139 ++- Docs/TagInfo/mapcomplete_pets.json | 1065 +++++++++-------- Docs/TagInfo/mapcomplete_playgrounds.json | 135 ++- Docs/TagInfo/mapcomplete_postboxes.json | 4 +- Docs/TagInfo/mapcomplete_scouting.json | 30 +- Docs/TagInfo/mapcomplete_shops.json | 4 +- Docs/TagInfo/mapcomplete_ski.json | 139 ++- Docs/TagInfo/mapcomplete_sports.json | 4 +- Docs/TagInfo/mapcomplete_street_lighting.json | 103 +- Docs/TagInfo/mapcomplete_toilets.json | 135 ++- Docs/TagInfo/mapcomplete_wayside_shrines.json | 50 +- Docs/Themes/architecture.md | 2 +- Docs/Themes/atm.md | 4 +- Docs/Themes/bag.md | 8 +- Docs/Themes/bookcases.md | 1 + Docs/Themes/buurtnatuur.md | 6 +- Docs/Themes/circular_economy.md | 7 +- Docs/Themes/climbing.md | 6 +- Docs/Themes/cycle_highways.md | 4 +- Docs/Themes/cyclenodes.md | 38 +- Docs/Themes/cyclestreets.md | 4 +- Docs/Themes/cyclofix.md | 6 +- Docs/Themes/etymology.md | 96 +- Docs/Themes/facadegardens.md | 2 +- Docs/Themes/fritures.md | 6 +- Docs/Themes/ghostsigns.md | 10 +- Docs/Themes/glutenfree.md | 14 +- Docs/Themes/grb.md | 8 +- Docs/Themes/healthcare.md | 6 +- Docs/Themes/kerbs_and_crossings.md | 22 +- Docs/Themes/lactosefree.md | 14 +- Docs/Themes/mapcomplete-changes.md | 2 +- Docs/Themes/onwheels.md | 4 +- Docs/Themes/openlovemap.md | 10 +- Docs/Themes/personal.md | 2 + Docs/Themes/pets.md | 955 ++++++++++++++- Docs/Themes/postal_codes.md | 6 +- Docs/Themes/rainbow_crossings.md | 2 +- Docs/Themes/scouting.md | 45 +- Docs/Themes/speelplekken.md | 2 +- Docs/Themes/sports.md | 6 +- Docs/Themes/stations.md | 2 +- Docs/Themes/street_lighting.md | 69 +- Docs/Themes/street_lighting_assen.md | 2 +- Docs/Themes/toerisme_vlaanderen.md | 2 +- Docs/Themes/transit.md | 2 +- Docs/Themes/uk_addresses.md | 2 +- Docs/Themes/velopark.md | 2 +- Docs/Themes/vending_machine.md | 2 +- Docs/Themes/walkingnodes.md | 38 +- Docs/Themes/waste_assen.md | 4 +- Docs/Themes/wayside_shrines.md | 2 +- Docs/Themes/width.md | 2 +- Docs/Themes/winter_service.md | 81 ++ Docs/URL_Parameters.md | 13 +- Docs/wikiIndex.txt | 2 +- 275 files changed, 4426 insertions(+), 1434 deletions(-) create mode 100644 Docs/Layers/pet_shops.md create mode 100644 Docs/Layers/utility_pole.md create mode 100644 Docs/Themes/winter_service.md diff --git a/Docs/BuiltinIndex.md b/Docs/BuiltinIndex.md index 9f431a055f..55900d4be7 100644 --- a/Docs/BuiltinIndex.md +++ b/Docs/BuiltinIndex.md @@ -8,6 +8,7 @@ - advertising - aerialway + - all_streets - ambulancestation - animal_shelter - assembly_point @@ -132,7 +133,6 @@ - village_green - waste_basket - waste_disposal - - wayside_shrine - windturbine ### luminous_or_lit @@ -287,6 +287,7 @@ - artwork - ghost_bike - memorial + - wayside_shrine ### wikipedia @@ -368,6 +369,11 @@ - toilet - vending_machine + ### indoor + + - atm + - clock + ### artwork.*artwork-question - bench @@ -596,10 +602,6 @@ - climbing_gym - ### indoor - - - clock - ### all_tags - cycle_highways diff --git a/Docs/BuiltinQuestions.md b/Docs/BuiltinQuestions.md index fa81e08c32..dbf15ebdd0 100644 --- a/Docs/BuiltinQuestions.md +++ b/Docs/BuiltinQuestions.md @@ -99,7 +99,7 @@ This is a special layer - data is not sourced from OpenStreetMap | [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1) | | [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [outside](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Doutside) | | [hearing_loop](https://wiki.openstreetmap.org/wiki/Key:hearing_loop) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:hearing_loop%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:hearing_loop%3Dno) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [survey:date](https://wiki.openstreetmap.org/wiki/Key:survey:date) | [date](../SpecialInputElements.md#date) | [](https://wiki.openstreetmap.org/wiki/Tag:survey:date%3D) | @@ -406,7 +406,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` diff --git a/Docs/ELI-overview.md b/Docs/ELI-overview.md index 1670c852e2..63fe7f7e66 100644 --- a/Docs/ELI-overview.md +++ b/Docs/ELI-overview.md @@ -102,7 +102,7 @@ This table gives a summary of ids, names and other metainformation. [See the onl | Aargau-AGIS-2020 | Kanton Aargau 20cm (AGIS 2020) | photo | | AGIS OF2020 | | Aargau-AGIS-2021 | Kanton Aargau 20cm (AGIS 2021) | photo | | AGIS OF2021 | | Aargau-AGIS-2022 | Kanton Aargau 20cm (AGIS 2022) | photo | | AGIS OF2022 | -| Aargau-AGIS-2023 | Kanton Aargau 20cm (AGIS 2023) | photo | ⭐ | AGIS OF2023 | +| Aargau-AGIS-2023 | Kanton Aargau 20cm (AGIS 2023) | photo | | AGIS OF2023 | | Aargau-AGIS-2014 | Kanton Aargau 25cm (AGIS 2014) | photo | | AGIS OF2014 | | Aargau-AGIS-2016 | Kanton Aargau 25cm (AGIS 2016) | photo | | AGIS OF2016 | | Aargau-AGIS-2017 | Kanton Aargau 25cm (AGIS 2017) | photo | | AGIS OF2017 | diff --git a/Docs/Layers/address.md b/Docs/Layers/address.md index b6246c4710..2a5ac50180 100644 --- a/Docs/Layers/address.md +++ b/Docs/Layers/address.md @@ -107,7 +107,7 @@ The question is `What should be fixed here? Please explain` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/advertising.md b/Docs/Layers/advertising.md index 6590584273..dbe7562189 100644 --- a/Docs/Layers/advertising.md +++ b/Docs/Layers/advertising.md @@ -170,7 +170,7 @@ The question is `Is this sign for a business that no longer exists or no longer ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/advertising_wall_paintings.md b/Docs/Layers/advertising_wall_paintings.md index 32c076abab..a53196fedc 100644 --- a/Docs/Layers/advertising_wall_paintings.md +++ b/Docs/Layers/advertising_wall_paintings.md @@ -141,7 +141,7 @@ The question is `Is this sign for a business that no longer exists or no longer ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/aerialway.md b/Docs/Layers/aerialway.md index 2fe2938b10..a51a10c3be 100644 --- a/Docs/Layers/aerialway.md +++ b/Docs/Layers/aerialway.md @@ -103,7 +103,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/all_streets.md b/Docs/Layers/all_streets.md index af1c14ac95..daa632e94b 100644 --- a/Docs/Layers/all_streets.md +++ b/Docs/Layers/all_streets.md @@ -2,6 +2,8 @@ # all_streets +Layer with (almost) all streets + - This layer is shown at zoomlevel **18** and higher - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` @@ -11,14 +13,15 @@ 2. [Basic tags for this layer](#basic-tags-for-this-layer) 3. [Supported attributes](#supported-attributes) - [images](#images) - - [lit](#lit) - [leftover-questions](#leftover-questions) - [split_button](#split_button) - [lod](#lod) ## Themes using this layer + - [personal](https://mapcomplete.org/personal) - [street_lighting](https://mapcomplete.org/street_lighting) + - [winter_service](https://mapcomplete.org/winter_service) ## Basic tags for this layer @@ -32,30 +35,15 @@ Elements must match **all** of the following expressions: ## Supported attributes -**Warning:**,this quick overview is incomplete, - -| attribute | type | values which are supported by this layer | ------|-----|----- | -| [lit](https://wiki.openstreetmap.org/wiki/Key:lit) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:lit%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:lit%3Dno) [24/7](https://wiki.openstreetmap.org/wiki/Tag:lit%3D24/7) | - ### images This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images _This tagrendering has no question and is thus read-only_ *{image_carousel()}{image_upload()}* -### lit - -The question is `Is this street lit?` - - - *This street is lit* is shown if with lit=yes - - *This street is not lit* is shown if with lit=no - - *This street is lit at night* is shown if with lit=sunset-sunrise. _This option cannot be chosen as answer_ - - *This street is lit 24/7* is shown if with lit=24/7 - ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### split_button @@ -71,4 +59,4 @@ This tagrendering has labels `added_by_default` -This document is autogenerated from [assets/themes/street_lighting/street_lighting.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/themes/street_lighting/street_lighting.json) +This document is autogenerated from [assets/layers/all_streets/all_streets.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/layers/all_streets/all_streets.json) diff --git a/Docs/Layers/all_vending_machine.md b/Docs/Layers/all_vending_machine.md index 84b54371d3..1e7271142a 100644 --- a/Docs/Layers/all_vending_machine.md +++ b/Docs/Layers/all_vending_machine.md @@ -272,7 +272,7 @@ The question is `Is this vending machine still operational?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/ambulancestation.md b/Docs/Layers/ambulancestation.md index 80c35833dc..c35e374b1d 100644 --- a/Docs/Layers/ambulancestation.md +++ b/Docs/Layers/ambulancestation.md @@ -90,7 +90,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/animal_shelter.md b/Docs/Layers/animal_shelter.md index 08055adf87..ef6335c5c3 100644 --- a/Docs/Layers/animal_shelter.md +++ b/Docs/Layers/animal_shelter.md @@ -136,7 +136,7 @@ The question is `Which animals are accepted here?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/artwork.md b/Docs/Layers/artwork.md index bc8de6b84c..e958948658 100644 --- a/Docs/Layers/artwork.md +++ b/Docs/Layers/artwork.md @@ -338,8 +338,8 @@ The question is `Does this artwork also double as wayside shrine?` ### shrine_name -The question is `What's the name of this shrine?` -*The name of this shrine is {name}* is shown if `name` is set +The question is `What's the name of this {title()}?` +*The name of this {title()} is {name}* is shown if `name` is set - *This shrine does not have a name* is shown if with noname=yes @@ -370,7 +370,7 @@ This tagrendering has labels ### denomination_christian -The question is `What's the Christian denomination of the shrine?` +The question is `What's the Christian denomination of this {title()}?` *The religious denomination is {denomination}* is shown if `denomination` is set - *The religious subdenomination is Catholic* is shown if with denomination=catholic @@ -427,7 +427,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/artwork_on_wall.md b/Docs/Layers/artwork_on_wall.md index c6a7953cfc..1449c66579 100644 --- a/Docs/Layers/artwork_on_wall.md +++ b/Docs/Layers/artwork_on_wall.md @@ -340,8 +340,8 @@ The question is `Does this artwork also double as wayside shrine?` ### shrine_name -The question is `What's the name of this shrine?` -*The name of this shrine is {name}* is shown if `name` is set +The question is `What's the name of this {title()}?` +*The name of this {title()} is {name}* is shown if `name` is set - *This shrine does not have a name* is shown if with noname=yes @@ -372,7 +372,7 @@ This tagrendering has labels ### denomination_christian -The question is `What's the Christian denomination of the shrine?` +The question is `What's the Christian denomination of this {title()}?` *The religious denomination is {denomination}* is shown if `denomination` is set - *The religious subdenomination is Catholic* is shown if with denomination=catholic @@ -429,7 +429,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/assembly_point.md b/Docs/Layers/assembly_point.md index baccf8c816..92e4238b09 100644 --- a/Docs/Layers/assembly_point.md +++ b/Docs/Layers/assembly_point.md @@ -73,7 +73,7 @@ The question is `For which disaster type is this assembly point meant?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/assisted_repair.md b/Docs/Layers/assisted_repair.md index 7e01ff1858..59ea2b240c 100644 --- a/Docs/Layers/assisted_repair.md +++ b/Docs/Layers/assisted_repair.md @@ -139,7 +139,7 @@ The question is `What type of items are repaired here?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/atm.md b/Docs/Layers/atm.md index 560b7bb904..91a9635742 100644 --- a/Docs/Layers/atm.md +++ b/Docs/Layers/atm.md @@ -18,6 +18,7 @@ ATMs to withdraw money - [operator](#operator) - [opening_hours_24_7](#opening_hours_24_7) - [Opening hours](#opening-hours) + - [indoor](#indoor) - [cash_out](#cash_out) - [cash_in](#cash_in) - [cash_out-denominations-notes](#cash_out-denominations-notes) @@ -56,6 +57,7 @@ Elements must match the expression ** [brand](https://wiki.openstreetmap.org/wiki/Key:brand) | [nsi](../SpecialInputElements.md#nsi) | | | [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | | | [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7) | +| [indoor](https://wiki.openstreetmap.org/wiki/Key:indoor) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:indoor%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:indoor%3Dno) | | [cash_out](https://wiki.openstreetmap.org/wiki/Key:cash_out) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:cash_out%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:cash_out%3Dno) | | [cash_in](https://wiki.openstreetmap.org/wiki/Key:cash_in) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:cash_in%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:cash_in%3Dno) | | [cash_out:notes:denominations](https://wiki.openstreetmap.org/wiki/Key:cash_out:notes:denominations) | Multiple choice | [5 EUR](https://wiki.openstreetmap.org/wiki/Tag:cash_out:notes:denominations%3D5 EUR) [10 EUR](https://wiki.openstreetmap.org/wiki/Tag:cash_out:notes:denominations%3D10 EUR) [20 EUR](https://wiki.openstreetmap.org/wiki/Tag:cash_out:notes:denominations%3D20 EUR) [50 EUR](https://wiki.openstreetmap.org/wiki/Tag:cash_out:notes:denominations%3D50 EUR) [100 EUR](https://wiki.openstreetmap.org/wiki/Tag:cash_out:notes:denominations%3D100 EUR) [200 EUR](https://wiki.openstreetmap.org/wiki/Tag:cash_out:notes:denominations%3D200 EUR) [500 EUR](https://wiki.openstreetmap.org/wiki/Tag:cash_out:notes:denominations%3D500 EUR) | @@ -91,6 +93,13 @@ The question is `What are the opening hours of {title()}?` - *24/7 opened (including holidays)* is shown if with opening_hours=24/7 - *Marked as closed for an unspecified time* is shown if with opening_hours=closed. _This option cannot be chosen as answer_ +### indoor + +The question is `Is this ATM located indoors?` + + - *This ATM is located indoors* is shown if with indoor=yes + - *This ATM is located outdoors* is shown if with indoor=no + ### cash_out The question is `Can you withdraw cash from this ATM?` @@ -136,7 +145,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bank.md b/Docs/Layers/bank.md index 75e3a91d9d..b78f249a4e 100644 --- a/Docs/Layers/bank.md +++ b/Docs/Layers/bank.md @@ -54,7 +54,7 @@ The question is `Does this bank have an ATM?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/banks_with_atm.md b/Docs/Layers/banks_with_atm.md index ed385d1993..17595010b9 100644 --- a/Docs/Layers/banks_with_atm.md +++ b/Docs/Layers/banks_with_atm.md @@ -58,7 +58,7 @@ The question is `Does this bank have an ATM?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/barrier.md b/Docs/Layers/barrier.md index c40b875e69..ac1fa20b1e 100644 --- a/Docs/Layers/barrier.md +++ b/Docs/Layers/barrier.md @@ -139,7 +139,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bbq.md b/Docs/Layers/bbq.md index 1c3b9f1e8a..4acdfc61bc 100644 --- a/Docs/Layers/bbq.md +++ b/Docs/Layers/bbq.md @@ -85,7 +85,7 @@ The question is `How is this barbecue fuelled?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/beehive.md b/Docs/Layers/beehive.md index d1add578f0..88c92729e3 100644 --- a/Docs/Layers/beehive.md +++ b/Docs/Layers/beehive.md @@ -59,7 +59,7 @@ The question is `How many beehives are there?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bench.md b/Docs/Layers/bench.md index 1c2ba916fe..3456f2e244 100644 --- a/Docs/Layers/bench.md +++ b/Docs/Layers/bench.md @@ -256,7 +256,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bench_at_pt.md b/Docs/Layers/bench_at_pt.md index 324c39eae5..4d3162a65d 100644 --- a/Docs/Layers/bench_at_pt.md +++ b/Docs/Layers/bench_at_pt.md @@ -62,7 +62,7 @@ The question is `What kind of bench is this?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### delete-button diff --git a/Docs/Layers/bicycle_assisted_repair_workshop.md b/Docs/Layers/bicycle_assisted_repair_workshop.md index 34be772c42..f00bb6c6e8 100644 --- a/Docs/Layers/bicycle_assisted_repair_workshop.md +++ b/Docs/Layers/bicycle_assisted_repair_workshop.md @@ -136,7 +136,7 @@ The question is `What type of items are repaired here?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bicycle_counter.md b/Docs/Layers/bicycle_counter.md index 82c6674859..84bcda0593 100644 --- a/Docs/Layers/bicycle_counter.md +++ b/Docs/Layers/bicycle_counter.md @@ -103,7 +103,7 @@ The question is `Is there a website for this bicycle counter?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bicycle_library.md b/Docs/Layers/bicycle_library.md index 3fc96aec70..8c93e82103 100644 --- a/Docs/Layers/bicycle_library.md +++ b/Docs/Layers/bicycle_library.md @@ -134,7 +134,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bicycle_rental.md b/Docs/Layers/bicycle_rental.md index a1821cd7c7..c5cffa94c3 100644 --- a/Docs/Layers/bicycle_rental.md +++ b/Docs/Layers/bicycle_rental.md @@ -243,7 +243,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bicycle_rental_non_docking.md b/Docs/Layers/bicycle_rental_non_docking.md index 9132682d23..e609c471b3 100644 --- a/Docs/Layers/bicycle_rental_non_docking.md +++ b/Docs/Layers/bicycle_rental_non_docking.md @@ -231,7 +231,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bike_cafe.md b/Docs/Layers/bike_cafe.md index 77bff7d607..83f8bacc2c 100644 --- a/Docs/Layers/bike_cafe.md +++ b/Docs/Layers/bike_cafe.md @@ -135,7 +135,7 @@ The question is `When it this bike café opened?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bike_cleaning.md b/Docs/Layers/bike_cleaning.md index 46f28bb5fc..92edd0fc34 100644 --- a/Docs/Layers/bike_cleaning.md +++ b/Docs/Layers/bike_cleaning.md @@ -100,7 +100,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bike_parking.md b/Docs/Layers/bike_parking.md index b9ea2f3b98..d0de7db932 100644 --- a/Docs/Layers/bike_parking.md +++ b/Docs/Layers/bike_parking.md @@ -207,7 +207,7 @@ The question is `What is the maximum allowed parking duration?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bike_repair_station.md b/Docs/Layers/bike_repair_station.md index c1a6e1f6d6..646b8410b1 100644 --- a/Docs/Layers/bike_repair_station.md +++ b/Docs/Layers/bike_repair_station.md @@ -224,7 +224,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/bike_shop.md b/Docs/Layers/bike_shop.md index 3e2814d652..5e9227c2b5 100644 --- a/Docs/Layers/bike_shop.md +++ b/Docs/Layers/bike_shop.md @@ -115,7 +115,7 @@ Elements must match **any** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -610,7 +610,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` diff --git a/Docs/Layers/bike_themed_object.md b/Docs/Layers/bike_themed_object.md index 530b7579a6..0cf9f8ec85 100644 --- a/Docs/Layers/bike_themed_object.md +++ b/Docs/Layers/bike_themed_object.md @@ -106,7 +106,7 @@ The question is `What are the opening hours of {title()}?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/binocular.md b/Docs/Layers/binocular.md index b80b752e20..773418410c 100644 --- a/Docs/Layers/binocular.md +++ b/Docs/Layers/binocular.md @@ -67,7 +67,7 @@ The question is `When looking through this binocular, in what direction does one ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/birdhide.md b/Docs/Layers/birdhide.md index 3669aa24ed..dcda04a881 100644 --- a/Docs/Layers/birdhide.md +++ b/Docs/Layers/birdhide.md @@ -84,7 +84,7 @@ The question is `Who operates this birdhide?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/brothel.md b/Docs/Layers/brothel.md index 7ea59c6f71..878c7e3664 100644 --- a/Docs/Layers/brothel.md +++ b/Docs/Layers/brothel.md @@ -110,7 +110,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/building.md b/Docs/Layers/building.md index 7d64af52ad..01346aba36 100644 --- a/Docs/Layers/building.md +++ b/Docs/Layers/building.md @@ -144,7 +144,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/buildings_with_architecture.md b/Docs/Layers/buildings_with_architecture.md index 39495c3ce6..1aaef1cabf 100644 --- a/Docs/Layers/buildings_with_architecture.md +++ b/Docs/Layers/buildings_with_architecture.md @@ -148,7 +148,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/cafe_pub.md b/Docs/Layers/cafe_pub.md index 6dc85c16d3..37ede23d3a 100644 --- a/Docs/Layers/cafe_pub.md +++ b/Docs/Layers/cafe_pub.md @@ -83,7 +83,7 @@ Elements must match **any** of the following expressions: | [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [outside](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Doutside) | | [service:electricity](https://wiki.openstreetmap.org/wiki/Key:service:electricity) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dlimited) [ask](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dask) [no](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dno) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | @@ -229,7 +229,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -265,7 +265,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/campsite.md b/Docs/Layers/campsite.md index d666cf0a26..068bbb7e44 100644 --- a/Docs/Layers/campsite.md +++ b/Docs/Layers/campsite.md @@ -18,8 +18,10 @@ Campsites - [phone](#phone) - [email](#email) - [website](#website) - - [fee](#fee) - [capacity_persons](#capacity_persons) + - [fee](#fee) + - [charge_person_day](#charge_person_day) + - [charge_day](#charge_day) - [caravansites-toilets](#caravansites-toilets) - [toilets-wheelchair](#toilets-wheelchair) - [questions](#questions) @@ -56,8 +58,10 @@ Elements must match the expression ** [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | | | [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | | | [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | | -| [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [currency](../SpecialInputElements.md#currency) | [](https://wiki.openstreetmap.org/wiki/Tag:charge%3D) | | [capacity:persons](https://wiki.openstreetmap.org/wiki/Key:capacity:persons) | [pnat](../SpecialInputElements.md#pnat) | | +| [fee](https://wiki.openstreetmap.org/wiki/Key:fee) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes) | +| [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [currency](../SpecialInputElements.md#currency) | | +| [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [currency](../SpecialInputElements.md#currency) | | | [toilets](https://wiki.openstreetmap.org/wiki/Key:toilets) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dno) | | [toilets:wheelchair](https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Ddesignated) | | [contact:mastodon](https://wiki.openstreetmap.org/wiki/Key:contact:mastodon) | [fediverse](../SpecialInputElements.md#fediverse) | | @@ -110,19 +114,28 @@ The question is `What is the website of {title()}?` This tagrendering has labels `contact` -### fee - -The question is `Is a fee charged here?` -*A fee of {charge} should be paid for here* is shown if `charge` is set - - - *The campsite is free of charge* is shown if with fee=no - - *A fee is charged here.* is shown if with fee=yes & charge= - ### capacity_persons The question is `How many people can stay here?` *{capacity:persons} people can stay here* is shown if `capacity:persons` is set +### fee + +The question is `Is there a fee?` + + - *The campsite is free of charge* is shown if with fee=no + - *There is a fee.* is shown if with fee=yes + +### charge_person_day + +The question is `What is the charge per person per day?` +*Charge per person per day: {charge}* is shown if `charge` is set + +### charge_day + +The question is `What is the charge per day?` +*Charge per day: {charge}* is shown if `charge` is set + ### caravansites-toilets The question is `Does this place have toilets?` diff --git a/Docs/Layers/car_rental.md b/Docs/Layers/car_rental.md index 2220f0bf72..3e74ffb819 100644 --- a/Docs/Layers/car_rental.md +++ b/Docs/Layers/car_rental.md @@ -105,7 +105,7 @@ The question is `What are the opening hours of {title()}?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/childcare.md b/Docs/Layers/childcare.md index 6dec7474d8..9d215151ff 100644 --- a/Docs/Layers/childcare.md +++ b/Docs/Layers/childcare.md @@ -108,7 +108,7 @@ The question is `How much kids (at most) can be enrolled here?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/cinema.md b/Docs/Layers/cinema.md index c815e2c434..742a001225 100644 --- a/Docs/Layers/cinema.md +++ b/Docs/Layers/cinema.md @@ -103,7 +103,7 @@ The question is `What type of cinema is this?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/climbing_area.md b/Docs/Layers/climbing_area.md index 3296d404d2..ef3c2a7a54 100644 --- a/Docs/Layers/climbing_area.md +++ b/Docs/Layers/climbing_area.md @@ -150,7 +150,7 @@ The question is `Is bouldering possible here?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/climbing_club.md b/Docs/Layers/climbing_club.md index d842c71d0c..c2eadd51c7 100644 --- a/Docs/Layers/climbing_club.md +++ b/Docs/Layers/climbing_club.md @@ -102,7 +102,7 @@ The question is `What are the opening hours of {title()}?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/climbing_gym.md b/Docs/Layers/climbing_gym.md index 3a52baa649..57028ae066 100644 --- a/Docs/Layers/climbing_gym.md +++ b/Docs/Layers/climbing_gym.md @@ -91,7 +91,7 @@ Elements must match **all** of the following expressions: | [climbing:bolts:max](https://wiki.openstreetmap.org/wiki/Key:climbing:bolts:max) | [pnat](../SpecialInputElements.md#pnat) | | | [climbing:speed](https://wiki.openstreetmap.org/wiki/Key:climbing:speed) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:climbing:speed%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:climbing:speed%3Dno) | | [shower](https://wiki.openstreetmap.org/wiki/Key:shower) | Multiple choice | [hot](https://wiki.openstreetmap.org/wiki/Tag:shower%3Dhot) [cold](https://wiki.openstreetmap.org/wiki/Tag:shower%3Dcold) [yes](https://wiki.openstreetmap.org/wiki/Tag:shower%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:shower%3Dno) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | @@ -301,7 +301,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -332,7 +332,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/climbing_opportunity.md b/Docs/Layers/climbing_opportunity.md index 0d5b757ac5..df3e75081e 100644 --- a/Docs/Layers/climbing_opportunity.md +++ b/Docs/Layers/climbing_opportunity.md @@ -52,7 +52,7 @@ The question is `Is climbing possible here?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/climbing_route.md b/Docs/Layers/climbing_route.md index dd427c398d..c828df0b37 100644 --- a/Docs/Layers/climbing_route.md +++ b/Docs/Layers/climbing_route.md @@ -97,7 +97,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/clock.md b/Docs/Layers/clock.md index c84c8941f8..b2dcc37aaa 100644 --- a/Docs/Layers/clock.md +++ b/Docs/Layers/clock.md @@ -149,7 +149,7 @@ The question is `How many faces does this clock have?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/crab_address.md b/Docs/Layers/crab_address.md index 868109c56e..62b72b59ad 100644 --- a/Docs/Layers/crab_address.md +++ b/Docs/Layers/crab_address.md @@ -40,7 +40,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/crossings.md b/Docs/Layers/crossings.md index f6c8e11435..408272e34f 100644 --- a/Docs/Layers/crossings.md +++ b/Docs/Layers/crossings.md @@ -15,7 +15,7 @@ Crossings for pedestrians and cyclists 3. [Basic tags for this layer](#basic-tags-for-this-layer) 4. [Supported attributes](#supported-attributes) - [images](#images) - - [crossing-type](#crossing-type) + - [signals](#signals) - [markings](#markings) - [crossing-bicycle-allowed](#crossing-bicycle-allowed) - [crossing-has-island](#crossing-has-island) @@ -60,11 +60,11 @@ Elements must match **any** of the following expressions: | attribute | type | values which are supported by this layer | -----|-----|----- | -| [crossing](https://wiki.openstreetmap.org/wiki/Key:crossing) | Multiple choice | [uncontrolled](https://wiki.openstreetmap.org/wiki/Tag:crossing%3Duncontrolled) [traffic_signals](https://wiki.openstreetmap.org/wiki/Tag:crossing%3Dtraffic_signals) | +| [crossing:signals](https://wiki.openstreetmap.org/wiki/Key:crossing:signals) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:crossing:signals%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:crossing:signals%3Dyes) | | [crossing:markings](https://wiki.openstreetmap.org/wiki/Key:crossing:markings) | [string](../SpecialInputElements.md#string) | [no](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dno) [zebra](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dzebra) [lines](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dlines) [ladder](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dladder) [dashes](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Ddashes) [dots](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Ddots) [surface](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dsurface) [ladder:skewed](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dladder:skewed) [zebra:paired](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dzebra:paired) [zebra:bicolour](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dzebra:bicolour) [zebra:double](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dzebra:double) [pictograms](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dpictograms) [ladder:paired](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dladder:paired) [lines:paired](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dlines:paired) | | [bicycle](https://wiki.openstreetmap.org/wiki/Key:bicycle) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:bicycle%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:bicycle%3Dno) | | [crossing:island](https://wiki.openstreetmap.org/wiki/Key:crossing:island) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:crossing:island%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:crossing:island%3Dno) | -| [tactile_paving](https://wiki.openstreetmap.org/wiki/Key:tactile_paving) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dno) | +| [tactile_paving](https://wiki.openstreetmap.org/wiki/Key:tactile_paving) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dno) [partial](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dpartial) | | [button_operated](https://wiki.openstreetmap.org/wiki/Key:button_operated) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:button_operated%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:button_operated%3Dno) | | [traffic_signals:sound](https://wiki.openstreetmap.org/wiki/Key:traffic_signals:sound) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dno) [locate](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dlocate) [walk](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dwalk) | | [traffic_signals:vibration](https://wiki.openstreetmap.org/wiki/Key:traffic_signals:vibration) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:vibration%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:vibration%3Dno) | @@ -78,14 +78,13 @@ This block shows the known images which are linked with the `image`-keys, but al _This tagrendering has no question and is thus read-only_ *{image_carousel()}{image_upload()}* -### crossing-type +### signals -The question is `What kind of crossing is this?` +The question is `Are there traffic signals at this crossing?` - - *Crossing, without traffic lights* is shown if with crossing=uncontrolled - - *Crossing with traffic signals* is shown if with crossing=traffic_signals - - *Zebra crossing* is shown if with crossing=zebra. _This option cannot be chosen as answer_ - - *Crossing without crossing markings* is shown if with crossing=unmarked. _This option cannot be chosen as answer_ + - *There are no traffic signals at this crossing* is shown if with crossing:signals=no + - *There are traffic signals at this crossing* is shown if with crossing:signals=yes + - *There are traffic signals at this crossing* is shown if with crossing=traffic_signals. _This option cannot be chosen as answer_ This tagrendering is only visible in the popup if the following condition is met: highway=crossing @@ -110,6 +109,8 @@ The question is `What kind of markings does this crossing have?` - *This crossing has lines on either side of the crossing, along with bars connecting them, with an interruption in every bar* is shown if with crossing:markings=ladder:paired - *This crossing has double lines on either side of the crossing* is shown if with crossing:markings=lines:paired +This tagrendering is only visible in the popup if the following condition is met: highway=crossing + ### crossing-bicycle-allowed The question is `Is this crossing also for bicycles?` @@ -135,6 +136,7 @@ The question is `Does this crossing have tactile paving?` - *This crossing has tactile paving* is shown if with tactile_paving=yes - *This crossing does not have tactile paving* is shown if with tactile_paving=no - *This crossing has tactile paving, but is not correct* is shown if with tactile_paving=incorrect. _This option cannot be chosen as answer_ + - *This crrosing has tactile paving, but only on one side* is shown if with tactile_paving=partial This tagrendering is only visible in the popup if the following condition is met: highway=crossing @@ -208,7 +210,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/crossings_no_traffic_lights.md b/Docs/Layers/crossings_no_traffic_lights.md index 3c1557871c..e021b70524 100644 --- a/Docs/Layers/crossings_no_traffic_lights.md +++ b/Docs/Layers/crossings_no_traffic_lights.md @@ -16,7 +16,7 @@ Crossings for pedestrians and cyclists 3. [Basic tags for this layer](#basic-tags-for-this-layer) 4. [Supported attributes](#supported-attributes) - [images](#images) - - [crossing-type](#crossing-type) + - [signals](#signals) - [markings](#markings) - [crossing-bicycle-allowed](#crossing-bicycle-allowed) - [crossing-has-island](#crossing-has-island) @@ -55,11 +55,11 @@ Elements must match the expression ** [crossing](https://wiki.openstreetmap.org/wiki/Key:crossing) | Multiple choice | [uncontrolled](https://wiki.openstreetmap.org/wiki/Tag:crossing%3Duncontrolled) [traffic_signals](https://wiki.openstreetmap.org/wiki/Tag:crossing%3Dtraffic_signals) | +| [crossing:signals](https://wiki.openstreetmap.org/wiki/Key:crossing:signals) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:crossing:signals%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:crossing:signals%3Dyes) | | [crossing:markings](https://wiki.openstreetmap.org/wiki/Key:crossing:markings) | [string](../SpecialInputElements.md#string) | [no](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dno) [zebra](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dzebra) [lines](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dlines) [ladder](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dladder) [dashes](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Ddashes) [dots](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Ddots) [surface](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dsurface) [ladder:skewed](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dladder:skewed) [zebra:paired](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dzebra:paired) [zebra:bicolour](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dzebra:bicolour) [zebra:double](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dzebra:double) [pictograms](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dpictograms) [ladder:paired](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dladder:paired) [lines:paired](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dlines:paired) | | [bicycle](https://wiki.openstreetmap.org/wiki/Key:bicycle) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:bicycle%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:bicycle%3Dno) | | [crossing:island](https://wiki.openstreetmap.org/wiki/Key:crossing:island) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:crossing:island%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:crossing:island%3Dno) | -| [tactile_paving](https://wiki.openstreetmap.org/wiki/Key:tactile_paving) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dno) | +| [tactile_paving](https://wiki.openstreetmap.org/wiki/Key:tactile_paving) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dno) [partial](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dpartial) | | [button_operated](https://wiki.openstreetmap.org/wiki/Key:button_operated) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:button_operated%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:button_operated%3Dno) | | [traffic_signals:sound](https://wiki.openstreetmap.org/wiki/Key:traffic_signals:sound) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dno) [locate](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dlocate) [walk](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dwalk) | | [traffic_signals:vibration](https://wiki.openstreetmap.org/wiki/Key:traffic_signals:vibration) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:vibration%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:vibration%3Dno) | @@ -73,14 +73,13 @@ This block shows the known images which are linked with the `image`-keys, but al _This tagrendering has no question and is thus read-only_ *{image_carousel()}{image_upload()}* -### crossing-type +### signals -The question is `What kind of crossing is this?` +The question is `Are there traffic signals at this crossing?` - - *Crossing, without traffic lights* is shown if with crossing=uncontrolled - - *Crossing with traffic signals* is shown if with crossing=traffic_signals - - *Zebra crossing* is shown if with crossing=zebra. _This option cannot be chosen as answer_ - - *Crossing without crossing markings* is shown if with crossing=unmarked. _This option cannot be chosen as answer_ + - *There are no traffic signals at this crossing* is shown if with crossing:signals=no + - *There are traffic signals at this crossing* is shown if with crossing:signals=yes + - *There are traffic signals at this crossing* is shown if with crossing=traffic_signals. _This option cannot be chosen as answer_ This tagrendering is only visible in the popup if the following condition is met: highway=crossing @@ -105,6 +104,8 @@ The question is `What kind of markings does this crossing have?` - *This crossing has lines on either side of the crossing, along with bars connecting them, with an interruption in every bar* is shown if with crossing:markings=ladder:paired - *This crossing has double lines on either side of the crossing* is shown if with crossing:markings=lines:paired +This tagrendering is only visible in the popup if the following condition is met: highway=crossing + ### crossing-bicycle-allowed The question is `Is this crossing also for bicycles?` @@ -130,6 +131,7 @@ The question is `Does this crossing have tactile paving?` - *This crossing has tactile paving* is shown if with tactile_paving=yes - *This crossing does not have tactile paving* is shown if with tactile_paving=no - *This crossing has tactile paving, but is not correct* is shown if with tactile_paving=incorrect. _This option cannot be chosen as answer_ + - *This crrosing has tactile paving, but only on one side* is shown if with tactile_paving=partial This tagrendering is only visible in the popup if the following condition is met: highway=crossing @@ -203,7 +205,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/cultural_places_without_etymology.md b/Docs/Layers/cultural_places_without_etymology.md index 14af8bbbc7..cc25f8a923 100644 --- a/Docs/Layers/cultural_places_without_etymology.md +++ b/Docs/Layers/cultural_places_without_etymology.md @@ -19,7 +19,8 @@ All objects which have an etymology known - [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) - [simple etymology](#simple-etymology) - [questions](#questions) - - [street-name-sign-image](#street-name-sign-image) + - [streetsign-image-carousel](#streetsign-image-carousel) + - [streetsign-upload](#streetsign-upload) - [minimap](#minimap) - [etymology_multi_apply](#etymology_multi_apply) - [wikipedia](#wikipedia) @@ -76,10 +77,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap diff --git a/Docs/Layers/cycle_highways.md b/Docs/Layers/cycle_highways.md index 2bb44300f6..c817852914 100644 --- a/Docs/Layers/cycle_highways.md +++ b/Docs/Layers/cycle_highways.md @@ -85,7 +85,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/cyclestreets.md b/Docs/Layers/cyclestreets.md index 10b6ff872c..26a5fff045 100644 --- a/Docs/Layers/cyclestreets.md +++ b/Docs/Layers/cyclestreets.md @@ -81,7 +81,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### split_button diff --git a/Docs/Layers/cycleways_and_roads.md b/Docs/Layers/cycleways_and_roads.md index c799488c41..cd43a01a23 100644 --- a/Docs/Layers/cycleways_and_roads.md +++ b/Docs/Layers/cycleways_and_roads.md @@ -313,7 +313,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### split_button diff --git a/Docs/Layers/cyclist_waiting_aid.md b/Docs/Layers/cyclist_waiting_aid.md index 5bcf0ffc85..996edf3687 100644 --- a/Docs/Layers/cyclist_waiting_aid.md +++ b/Docs/Layers/cyclist_waiting_aid.md @@ -80,7 +80,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### delete-button diff --git a/Docs/Layers/defibrillator.md b/Docs/Layers/defibrillator.md index 1072f681e2..bac1bc7253 100644 --- a/Docs/Layers/defibrillator.md +++ b/Docs/Layers/defibrillator.md @@ -178,7 +178,7 @@ The question is `Is there something wrong with how this is mapped, that you were ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/dentist.md b/Docs/Layers/dentist.md index c11815511c..089165da8f 100644 --- a/Docs/Layers/dentist.md +++ b/Docs/Layers/dentist.md @@ -164,7 +164,7 @@ The question is `What is the name of this dentist?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/direction.md b/Docs/Layers/direction.md index 9c799e9222..02e7569bcc 100644 --- a/Docs/Layers/direction.md +++ b/Docs/Layers/direction.md @@ -30,7 +30,7 @@ Elements must match **any** of the following expressions: ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/disaster_response.md b/Docs/Layers/disaster_response.md index c500aa0b92..61efea532a 100644 --- a/Docs/Layers/disaster_response.md +++ b/Docs/Layers/disaster_response.md @@ -68,7 +68,7 @@ The question is `What is the name of this organization?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/doctors.md b/Docs/Layers/doctors.md index 70a586523e..f79aff661d 100644 --- a/Docs/Layers/doctors.md +++ b/Docs/Layers/doctors.md @@ -180,7 +180,7 @@ The question is `What is this doctor specialized in?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/dog_toilet.md b/Docs/Layers/dog_toilet.md index cf0978daba..c86fa0c0ec 100644 --- a/Docs/Layers/dog_toilet.md +++ b/Docs/Layers/dog_toilet.md @@ -54,7 +54,7 @@ The question is `Is this dog toilet fenced?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/dogpark.md b/Docs/Layers/dogpark.md index 8eeced1c04..3c69ea7a5a 100644 --- a/Docs/Layers/dogpark.md +++ b/Docs/Layers/dogpark.md @@ -113,7 +113,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/drinking_water.md b/Docs/Layers/drinking_water.md index 625806cc8c..865191570e 100644 --- a/Docs/Layers/drinking_water.md +++ b/Docs/Layers/drinking_water.md @@ -221,7 +221,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/dumpstations.md b/Docs/Layers/dumpstations.md index e17a8a1cac..03bd5d284e 100644 --- a/Docs/Layers/dumpstations.md +++ b/Docs/Layers/dumpstations.md @@ -115,7 +115,7 @@ The question is `What network is this place a part of? (skip if none)` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/education_institutions_without_etymology.md b/Docs/Layers/education_institutions_without_etymology.md index b9cec96d05..6578c3504b 100644 --- a/Docs/Layers/education_institutions_without_etymology.md +++ b/Docs/Layers/education_institutions_without_etymology.md @@ -19,7 +19,8 @@ All objects which have an etymology known - [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) - [simple etymology](#simple-etymology) - [questions](#questions) - - [street-name-sign-image](#street-name-sign-image) + - [streetsign-image-carousel](#streetsign-image-carousel) + - [streetsign-upload](#streetsign-upload) - [minimap](#minimap) - [etymology_multi_apply](#etymology_multi_apply) - [wikipedia](#wikipedia) @@ -76,10 +77,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap diff --git a/Docs/Layers/elevator.md b/Docs/Layers/elevator.md index 5d21c6063b..f7d523ecf1 100644 --- a/Docs/Layers/elevator.md +++ b/Docs/Layers/elevator.md @@ -20,6 +20,7 @@ This layer show elevators and asks for operational status and elevator dimension - [elevator-width](#elevator-width) - [elevator-depth](#elevator-depth) - [elevator-diameter](#elevator-diameter) + - [handrail](#handrail) - [induction-loop](#induction-loop) - [tactile_writing_available](#tactile_writing_available) - [tactile_writing_language](#tactile_writing_language) @@ -62,6 +63,7 @@ Elements must match the expression ** [width](https://wiki.openstreetmap.org/wiki/Key:width) | [pfloat](../SpecialInputElements.md#pfloat) | | | [length](https://wiki.openstreetmap.org/wiki/Key:length) | [pfloat](../SpecialInputElements.md#pfloat) | | | [diameter](https://wiki.openstreetmap.org/wiki/Key:diameter) | [pfloat](../SpecialInputElements.md#pfloat) | | +| [handrail](https://wiki.openstreetmap.org/wiki/Key:handrail) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:handrail%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:handrail%3Dno) | | [hearing_loop](https://wiki.openstreetmap.org/wiki/Key:hearing_loop) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:hearing_loop%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:hearing_loop%3Dno) | | [tactile_writing:braille](https://wiki.openstreetmap.org/wiki/Key:tactile_writing:braille) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_writing:braille%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_writing:braille%3Dno) | | [speech_output](https://wiki.openstreetmap.org/wiki/Key:speech_output) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:speech_output%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:speech_output%3Dno) | @@ -120,6 +122,13 @@ The question is `What is the diameter of this elevator?` This tagrendering is only visible in the popup if the following condition is met: shape=circular +### handrail + +The question is `Is there a handrail in the cabin?` + + - *This elevator has a handrail in the cabin* is shown if with handrail=yes + - *This elevator does not have a handrail* is shown if with handrail=no + ### induction-loop An accessibility feature: induction loops are for hard-hearing persons which have an FM-receiver. The question is `Does this place have an audio induction loop for people with reduced hearing?` @@ -158,7 +167,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/elongated_coin.md b/Docs/Layers/elongated_coin.md index 5e7cf8e459..94cb110a3c 100644 --- a/Docs/Layers/elongated_coin.md +++ b/Docs/Layers/elongated_coin.md @@ -208,7 +208,7 @@ The question is `When was this object last checked?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/entrance.md b/Docs/Layers/entrance.md index ff9b13fb6f..e586fc1c53 100644 --- a/Docs/Layers/entrance.md +++ b/Docs/Layers/entrance.md @@ -157,7 +157,7 @@ The question is `Does this door have a reference number?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/etymology.md b/Docs/Layers/etymology.md index 7ead902ede..1c59205dc4 100644 --- a/Docs/Layers/etymology.md +++ b/Docs/Layers/etymology.md @@ -17,7 +17,8 @@ All objects which have an etymology known - [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) - [simple etymology](#simple-etymology) - [questions](#questions) - - [street-name-sign-image](#street-name-sign-image) + - [streetsign-image-carousel](#streetsign-image-carousel) + - [streetsign-upload](#streetsign-upload) - [minimap](#minimap) - [etymology_multi_apply](#etymology_multi_apply) - [wikipedia](#wikipedia) @@ -75,10 +76,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap diff --git a/Docs/Layers/extinguisher.md b/Docs/Layers/extinguisher.md index 5e43120a13..84ee03f612 100644 --- a/Docs/Layers/extinguisher.md +++ b/Docs/Layers/extinguisher.md @@ -60,7 +60,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/facadegardens.md b/Docs/Layers/facadegardens.md index 345fc26953..808049ee81 100644 --- a/Docs/Layers/facadegardens.md +++ b/Docs/Layers/facadegardens.md @@ -113,7 +113,7 @@ The question is `Extra describing info about the garden (if needed and not yet d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/fire_station.md b/Docs/Layers/fire_station.md index 50386bb925..dca85756ba 100644 --- a/Docs/Layers/fire_station.md +++ b/Docs/Layers/fire_station.md @@ -92,7 +92,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/firepit.md b/Docs/Layers/firepit.md index 5bfeeff885..2b9cd3313e 100644 --- a/Docs/Layers/firepit.md +++ b/Docs/Layers/firepit.md @@ -74,7 +74,7 @@ The question is `Is the firepit available all around the year?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/fitness_centre.md b/Docs/Layers/fitness_centre.md index c8386ebcd8..90b1abd206 100644 --- a/Docs/Layers/fitness_centre.md +++ b/Docs/Layers/fitness_centre.md @@ -149,7 +149,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/fitness_station.md b/Docs/Layers/fitness_station.md index d24d18c7f2..80d9013193 100644 --- a/Docs/Layers/fitness_station.md +++ b/Docs/Layers/fitness_station.md @@ -109,7 +109,7 @@ The question is `What are the opening hours of {title()}?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/fixme.md b/Docs/Layers/fixme.md index 882f0d774f..fc104939a1 100644 --- a/Docs/Layers/fixme.md +++ b/Docs/Layers/fixme.md @@ -61,7 +61,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/food.md b/Docs/Layers/food.md index e986ad0ecf..98e1b38278 100644 --- a/Docs/Layers/food.md +++ b/Docs/Layers/food.md @@ -125,7 +125,7 @@ Elements must match **any** of the following expressions: | [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [outside](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Doutside) | | [service:electricity](https://wiki.openstreetmap.org/wiki/Key:service:electricity) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dlimited) [ask](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dask) [no](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dno) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | @@ -478,7 +478,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -509,7 +509,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/food_courts.md b/Docs/Layers/food_courts.md index 633c97b02a..15b3db07b2 100644 --- a/Docs/Layers/food_courts.md +++ b/Docs/Layers/food_courts.md @@ -112,7 +112,7 @@ The question is `Is smoking allowed at {title()}?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/food_dog_friendly.md b/Docs/Layers/food_dog_friendly.md index a08e2905e5..a05ecade27 100644 --- a/Docs/Layers/food_dog_friendly.md +++ b/Docs/Layers/food_dog_friendly.md @@ -110,7 +110,7 @@ Elements must match **all** of the following expressions: | [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [outside](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Doutside) | | [service:electricity](https://wiki.openstreetmap.org/wiki/Key:service:electricity) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dlimited) [ask](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dask) [no](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dno) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | @@ -463,7 +463,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -494,7 +494,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/food_glutenfree.md b/Docs/Layers/food_glutenfree.md index dcea792935..f3a773d068 100644 --- a/Docs/Layers/food_glutenfree.md +++ b/Docs/Layers/food_glutenfree.md @@ -111,7 +111,7 @@ Elements must match **all** of the following expressions: | [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [outside](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Doutside) | | [service:electricity](https://wiki.openstreetmap.org/wiki/Key:service:electricity) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dlimited) [ask](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dask) [no](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dno) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | @@ -464,7 +464,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -495,7 +495,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/food_lactosefree.md b/Docs/Layers/food_lactosefree.md index 59a318c69c..09f8946da7 100644 --- a/Docs/Layers/food_lactosefree.md +++ b/Docs/Layers/food_lactosefree.md @@ -111,7 +111,7 @@ Elements must match **all** of the following expressions: | [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [outside](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Doutside) | | [service:electricity](https://wiki.openstreetmap.org/wiki/Key:service:electricity) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dlimited) [ask](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dask) [no](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dno) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | @@ -464,7 +464,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -495,7 +495,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/friture.md b/Docs/Layers/friture.md index a542b52aff..4f1a071e53 100644 --- a/Docs/Layers/friture.md +++ b/Docs/Layers/friture.md @@ -110,7 +110,7 @@ Elements must match **all** of the following expressions: | [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [outside](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Doutside) | | [service:electricity](https://wiki.openstreetmap.org/wiki/Key:service:electricity) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dlimited) [ask](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dask) [no](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dno) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | @@ -463,7 +463,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -494,7 +494,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/ghost_bike.md b/Docs/Layers/ghost_bike.md index 6c1b7e4ad1..ae93d32cb6 100644 --- a/Docs/Layers/ghost_bike.md +++ b/Docs/Layers/ghost_bike.md @@ -97,7 +97,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/ghostsign.md b/Docs/Layers/ghostsign.md index 9e497b3e59..dc9f9cf2bd 100644 --- a/Docs/Layers/ghostsign.md +++ b/Docs/Layers/ghostsign.md @@ -97,7 +97,7 @@ The question is `For what business was this sign made?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/governments.md b/Docs/Layers/governments.md index 15c8273b54..c9027aadbb 100644 --- a/Docs/Layers/governments.md +++ b/Docs/Layers/governments.md @@ -93,7 +93,7 @@ The question is `What is the name of this Governmental Office?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/grave.md b/Docs/Layers/grave.md index 49036f123d..3b47823b21 100644 --- a/Docs/Layers/grave.md +++ b/Docs/Layers/grave.md @@ -64,7 +64,7 @@ The question is `What is the name of the person buried here?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/group_campsite.md b/Docs/Layers/group_campsite.md index 76d9cc5cc2..6206b2dee0 100644 --- a/Docs/Layers/group_campsite.md +++ b/Docs/Layers/group_campsite.md @@ -19,8 +19,10 @@ Campsites - [phone](#phone) - [email](#email) - [website](#website) - - [fee](#fee) - [capacity_persons](#capacity_persons) + - [fee](#fee) + - [charge_person_day](#charge_person_day) + - [charge_day](#charge_day) - [caravansites-toilets](#caravansites-toilets) - [toilets-wheelchair](#toilets-wheelchair) - [questions](#questions) @@ -52,8 +54,10 @@ Elements must match **any** of the following expressions: | [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | | | [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | | | [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | | -| [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [currency](../SpecialInputElements.md#currency) | [](https://wiki.openstreetmap.org/wiki/Tag:charge%3D) | | [capacity:persons](https://wiki.openstreetmap.org/wiki/Key:capacity:persons) | [pnat](../SpecialInputElements.md#pnat) | | +| [fee](https://wiki.openstreetmap.org/wiki/Key:fee) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes) | +| [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [currency](../SpecialInputElements.md#currency) | | +| [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [currency](../SpecialInputElements.md#currency) | | | [toilets](https://wiki.openstreetmap.org/wiki/Key:toilets) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dno) | | [toilets:wheelchair](https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Ddesignated) | | [contact:mastodon](https://wiki.openstreetmap.org/wiki/Key:contact:mastodon) | [fediverse](../SpecialInputElements.md#fediverse) | | @@ -106,19 +110,28 @@ The question is `What is the website of {title()}?` This tagrendering has labels `contact` -### fee - -The question is `Is a fee charged here?` -*A fee of {charge} should be paid for here* is shown if `charge` is set - - - *The campsite is free of charge* is shown if with fee=no - - *A fee is charged here.* is shown if with fee=yes & charge= - ### capacity_persons The question is `How many people can stay here?` *{capacity:persons} people can stay here* is shown if `capacity:persons` is set +### fee + +The question is `Is there a fee?` + + - *The campsite is free of charge* is shown if with fee=no + - *There is a fee.* is shown if with fee=yes + +### charge_person_day + +The question is `What is the charge per person per day?` +*Charge per person per day: {charge}* is shown if `charge` is set + +### charge_day + +The question is `What is the charge per day?` +*Charge per day: {charge}* is shown if `charge` is set + ### caravansites-toilets The question is `Does this place have toilets?` diff --git a/Docs/Layers/group_hostel.md b/Docs/Layers/group_hostel.md index 1a55bd4d3f..fabac4cabd 100644 --- a/Docs/Layers/group_hostel.md +++ b/Docs/Layers/group_hostel.md @@ -70,7 +70,7 @@ Elements must match **all** of the following expressions: | [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | | | [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) | | [toilets:wheelchair](https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Ddesignated) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | @@ -168,7 +168,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -209,7 +209,7 @@ The question is `Are dogs allowed in this business?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/guidepost.md b/Docs/Layers/guidepost.md index 7f1a90ceed..6f8cc3f224 100644 --- a/Docs/Layers/guidepost.md +++ b/Docs/Layers/guidepost.md @@ -14,6 +14,9 @@ Guideposts (also known as fingerposts or finger posts) are often found along off 4. [Supported attributes](#supported-attributes) - [images](#images) - [type](#type) + - [name](#name) + - [ref](#ref) + - [ele](#ele) - [leftover-questions](#leftover-questions) - [move-button](#move-button) - [delete-button](#delete-button) @@ -41,6 +44,14 @@ Elements must match the expression ** [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [ref](https://wiki.openstreetmap.org/wiki/Key:ref) | [string](../SpecialInputElements.md#string) | | +| [ele](https://wiki.openstreetmap.org/wiki/Key:ele) | [float](../SpecialInputElements.md#float) | | + ### images This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images _This tagrendering has no question and is thus read-only_ @@ -56,10 +67,31 @@ The question is `What kind of routes are shown on this guidepost?` - *This guidepost shows horse riding routes* is shown if with horse=yes. Unselecting this answer will add horse= - *This guidepost shows ski routes* is shown if with ski=yes. Unselecting this answer will add ski= +### name + +The question is `What is the name noted on this guidepost?` +*Name noted on the guidepost: {name}* is shown if `name` is set + + - *There is no name noted on this guidepost* is shown if with noname=yes + +### ref + +The question is `What is the reference number of this guidepost?` +*Reference number of the guidepost: {ref}* is shown if `ref` is set + + - *There is no reference number noted on this guidepost* is shown if with noref=yes + +### ele + +The question is `What is the elevation noted on this guidepost?` +*Elevation noted on the guidepost: {ele} m* is shown if `ele` is set + + - *There is no elevation noted on this guidepost* is shown if with noele=yes + ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/hackerspace.md b/Docs/Layers/hackerspace.md index 01cfbe1334..ef1d7caf7e 100644 --- a/Docs/Layers/hackerspace.md +++ b/Docs/Layers/hackerspace.md @@ -89,7 +89,7 @@ Elements must match the expression ** [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) | | [drink:club-mate](https://wiki.openstreetmap.org/wiki/Key:drink:club-mate) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drink:club-mate%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drink:club-mate%3Dno) | | [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) | [date](../SpecialInputElements.md#date) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | @@ -285,7 +285,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` diff --git a/Docs/Layers/health_and_social_places_without_etymology.md b/Docs/Layers/health_and_social_places_without_etymology.md index eca0ea3d44..71a71b6b4c 100644 --- a/Docs/Layers/health_and_social_places_without_etymology.md +++ b/Docs/Layers/health_and_social_places_without_etymology.md @@ -19,7 +19,8 @@ All objects which have an etymology known - [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) - [simple etymology](#simple-etymology) - [questions](#questions) - - [street-name-sign-image](#street-name-sign-image) + - [streetsign-image-carousel](#streetsign-image-carousel) + - [streetsign-upload](#streetsign-upload) - [minimap](#minimap) - [etymology_multi_apply](#etymology_multi_apply) - [wikipedia](#wikipedia) @@ -76,10 +77,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap diff --git a/Docs/Layers/hospital.md b/Docs/Layers/hospital.md index 34803bdb79..201ec669f8 100644 --- a/Docs/Layers/hospital.md +++ b/Docs/Layers/hospital.md @@ -161,7 +161,7 @@ The question is `When are visitors allowed to visit?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/hostel.md b/Docs/Layers/hostel.md index 9941baf325..b05cf869cb 100644 --- a/Docs/Layers/hostel.md +++ b/Docs/Layers/hostel.md @@ -66,7 +66,7 @@ Elements must match the expression ** [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | | | [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) | | [toilets:wheelchair](https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Ddesignated) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | @@ -164,7 +164,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -205,7 +205,7 @@ The question is `Are dogs allowed in this business?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/hydrant.md b/Docs/Layers/hydrant.md index 65d1e706b6..3101ddd182 100644 --- a/Docs/Layers/hydrant.md +++ b/Docs/Layers/hydrant.md @@ -19,6 +19,7 @@ Map layer to show fire hydrants. - [hydrant-number-of-couplings](#hydrant-number-of-couplings) - [hydrant-couplings](#hydrant-couplings) - [hydrant-couplings-diameters](#hydrant-couplings-diameters) + - [ref](#ref) - [images](#images) - [leftover-questions](#leftover-questions) - [move-button](#move-button) @@ -55,6 +56,7 @@ Elements must match the expression ** [couplings](https://wiki.openstreetmap.org/wiki/Key:couplings) | [int](../SpecialInputElements.md#int) | | | [couplings:type](https://wiki.openstreetmap.org/wiki/Key:couplings:type) | [string](../SpecialInputElements.md#string) | [Storz](https://wiki.openstreetmap.org/wiki/Tag:couplings:type%3DStorz) [UNI](https://wiki.openstreetmap.org/wiki/Tag:couplings:type%3DUNI) [Barcelona](https://wiki.openstreetmap.org/wiki/Tag:couplings:type%3DBarcelona) | | [couplings:diameters](https://wiki.openstreetmap.org/wiki/Key:couplings:diameters) | [string](../SpecialInputElements.md#string) | | +| [ref](https://wiki.openstreetmap.org/wiki/Key:ref) | [string](../SpecialInputElements.md#string) | | ### hydrant-color @@ -106,6 +108,11 @@ The question is `What kind of couplings does this hydrant have?` The question is `What diameter are the couplings of this hydrant?` *Coupling diameters: {couplings:diameters}* is shown if `couplings:diameters` is set +### ref + +The question is `What is the reference number of this hydrant?` +*Reference number: {ref}* is shown if `ref` is set + ### images This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images _This tagrendering has no question and is thus read-only_ @@ -114,7 +121,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/ice_cream.md b/Docs/Layers/ice_cream.md index a938a85839..11e884890c 100644 --- a/Docs/Layers/ice_cream.md +++ b/Docs/Layers/ice_cream.md @@ -190,7 +190,7 @@ The question is `Is this place accessible with a wheelchair?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/icecream_glutenfree.md b/Docs/Layers/icecream_glutenfree.md index 5ec7607d4b..270299f766 100644 --- a/Docs/Layers/icecream_glutenfree.md +++ b/Docs/Layers/icecream_glutenfree.md @@ -184,7 +184,7 @@ The question is `Is this place accessible with a wheelchair?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/icecream_lactosefree.md b/Docs/Layers/icecream_lactosefree.md index 767e550960..28568fc386 100644 --- a/Docs/Layers/icecream_lactosefree.md +++ b/Docs/Layers/icecream_lactosefree.md @@ -184,7 +184,7 @@ The question is `Is this place accessible with a wheelchair?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/indoors.md b/Docs/Layers/indoors.md index 3486a6475a..17dbf51094 100644 --- a/Docs/Layers/indoors.md +++ b/Docs/Layers/indoors.md @@ -27,13 +27,14 @@ Basic indoor mapping: shows room outlines - [payment-options-split](#payment-options-split) - [opening_hours_24_7](#opening_hours_24_7) - [Opening hours](#opening-hours) - - [toilets-wheelchair](#toilets-wheelchair) - - [wheelchair-door-width](#wheelchair-door-width) - [toilets-type](#toilets-type) - [toilets-changing-table](#toilets-changing-table) - [toilet-changing_table:location](#toilet-changing_tablelocation) - [toilet-has-paper](#toilet-has-paper) - [toilet-handwashing](#toilet-handwashing) + - [toilets-wheelchair](#toilets-wheelchair) + - [wheelchair-access](#wheelchair-access) + - [wheelchair-door-width](#wheelchair-door-width) - [leftover-questions](#leftover-questions) - [move-button](#move-button) - [lod](#lod) @@ -75,13 +76,14 @@ Elements must match **any** of the following expressions: | [fee](https://wiki.openstreetmap.org/wiki/Key:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno) | | [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [string](../SpecialInputElements.md#string) | | | [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7) | -| [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) | -| [door:width](https://wiki.openstreetmap.org/wiki/Key:door:width) | [pfloat](../SpecialInputElements.md#pfloat) | | | [toilets:position](https://wiki.openstreetmap.org/wiki/Key:toilets:position) | Multiple choice | [seated](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Dseated) [urinal](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Durinal) [squat](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Dsquat) [seated;urinal](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Dseated;urinal) | | [changing_table](https://wiki.openstreetmap.org/wiki/Key:changing_table) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:changing_table%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:changing_table%3Dno) | | [changing_table:location](https://wiki.openstreetmap.org/wiki/Key:changing_table:location) | [string](../SpecialInputElements.md#string) | [female_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dfemale_toilet) [male_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dmale_toilet) [wheelchair_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dwheelchair_toilet) [dedicated_room](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Ddedicated_room) | | [toilets:paper_supplied](https://wiki.openstreetmap.org/wiki/Key:toilets:paper_supplied) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:paper_supplied%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:paper_supplied%3Dno) | | [toilets:handwashing](https://wiki.openstreetmap.org/wiki/Key:toilets:handwashing) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dno) | +| [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) | +| [toilets:wheelchair:access](https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair:access) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair:access%3Dyes) [key](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair:access%3Dkey) | +| [door:width](https://wiki.openstreetmap.org/wiki/Key:door:width) | [pfloat](../SpecialInputElements.md#pfloat) | | ### images This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images @@ -231,27 +233,6 @@ This tagrendering is only visible in the popup if the following condition is met This tagrendering has labels `relevant-questions` -### toilets-wheelchair - -The question is `Is there a dedicated toilet for wheelchair users?` - - - *There is a dedicated toilet for wheelchair users* is shown if with wheelchair=yes - - *No wheelchair access* is shown if with wheelchair=no - - *There is only a dedicated toilet for wheelchair users* is shown if with wheelchair=designated - -This tagrendering is only visible in the popup if the following condition is met: amenity=toilets -This tagrendering has labels -`relevant-questions` - -### wheelchair-door-width - -The question is `What is the width of the door to the wheelchair accessible toilet?` -*The door to the wheelchair-accessible toilet is {canonical(door:width)} wide* is shown if `door:width` is set - -This tagrendering is only visible in the popup if the following condition is met: amenity=toilets & (wheelchair=yes | wheelchair=designated) -This tagrendering has labels -`relevant-questions` - ### toilets-type The question is `Which kind of toilets are these?` @@ -312,10 +293,48 @@ This tagrendering is only visible in the popup if the following condition is met This tagrendering has labels `relevant-questions` +### toilets-wheelchair + +The question is `Is there a dedicated toilet for wheelchair users?` + + - *There is a dedicated toilet for wheelchair users* is shown if with wheelchair=yes + - *No wheelchair access* is shown if with wheelchair=no + - *There is only a dedicated toilet for wheelchair users* is shown if with wheelchair=designated + +This tagrendering is only visible in the popup if the following condition is met: amenity=toilets +This tagrendering has labels +`relevant-questions` +`wheelchair` +`hidden` + +### wheelchair-access + +The question is `Is the wheelchair-accessible toilet locked?` + + - *The wheelchair accessible toilets are freely accessible* is shown if with toilets:wheelchair:access=yes + - *One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key* is shown if with toilets:wheelchair:access=key + +This tagrendering is only visible in the popup if the following condition is met: amenity=toilets & wheelchair=yes & (access=yes | access=public | access=customers) +This tagrendering has labels +`hidden` +`wheelchair` +`relevant-questions` + +### wheelchair-door-width + +The question is `What is the width of the door to the wheelchair accessible toilet?` +*The door to the wheelchair-accessible toilet is {canonical(door:width)} wide* is shown if `door:width` is set + +This tagrendering is only visible in the popup if the following condition is met: amenity=toilets & (wheelchair=yes | wheelchair=designated) +This tagrendering has labels +`relevant-questions` +`wheelchair` +`hidden` + ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/information_board.md b/Docs/Layers/information_board.md index 60bb154460..24bdc04f53 100644 --- a/Docs/Layers/information_board.md +++ b/Docs/Layers/information_board.md @@ -46,7 +46,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/insect_hotel.md b/Docs/Layers/insect_hotel.md index dbcee1671b..a89e8b6b30 100644 --- a/Docs/Layers/insect_hotel.md +++ b/Docs/Layers/insect_hotel.md @@ -46,7 +46,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/item_with_image.md b/Docs/Layers/item_with_image.md index 82d21d1600..593467859f 100644 --- a/Docs/Layers/item_with_image.md +++ b/Docs/Layers/item_with_image.md @@ -61,7 +61,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/kerbs.md b/Docs/Layers/kerbs.md index 1a26a546df..7f8088018f 100644 --- a/Docs/Layers/kerbs.md +++ b/Docs/Layers/kerbs.md @@ -105,7 +105,7 @@ The question is `What is the height of this kerb?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/lighthouse.md b/Docs/Layers/lighthouse.md index a52c075dbf..312fd1fc1a 100644 --- a/Docs/Layers/lighthouse.md +++ b/Docs/Layers/lighthouse.md @@ -64,7 +64,7 @@ The question is `What is the height of this lighthouse, in metres?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/lit_streets.md b/Docs/Layers/lit_streets.md index 5b046124f2..33d2f02a3f 100644 --- a/Docs/Layers/lit_streets.md +++ b/Docs/Layers/lit_streets.md @@ -56,7 +56,7 @@ The question is `Is this street lit?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### split_button diff --git a/Docs/Layers/love_hotel.md b/Docs/Layers/love_hotel.md index 5ea463108f..a6186e667a 100644 --- a/Docs/Layers/love_hotel.md +++ b/Docs/Layers/love_hotel.md @@ -100,7 +100,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/map.md b/Docs/Layers/map.md index 6b441beecd..04cd2536c1 100644 --- a/Docs/Layers/map.md +++ b/Docs/Layers/map.md @@ -106,7 +106,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/maproulette.md b/Docs/Layers/maproulette.md index a4c51efb43..3225d22a0f 100644 --- a/Docs/Layers/maproulette.md +++ b/Docs/Layers/maproulette.md @@ -79,7 +79,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/maproulette_challenge.md b/Docs/Layers/maproulette_challenge.md index 13eb80eb1e..e6e60ccc30 100644 --- a/Docs/Layers/maproulette_challenge.md +++ b/Docs/Layers/maproulette_challenge.md @@ -58,7 +58,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/maxspeed.md b/Docs/Layers/maxspeed.md index f90eb424a1..54e595fe07 100644 --- a/Docs/Layers/maxspeed.md +++ b/Docs/Layers/maxspeed.md @@ -49,7 +49,7 @@ The question is `What is the legal maximum speed one is allowed to drive on this ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### split_button diff --git a/Docs/Layers/medical_shops.md b/Docs/Layers/medical_shops.md index 276aab736a..2e03ef0d6d 100644 --- a/Docs/Layers/medical_shops.md +++ b/Docs/Layers/medical_shops.md @@ -117,7 +117,7 @@ Elements must match **all** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -612,7 +612,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -707,7 +707,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/memorial.md b/Docs/Layers/memorial.md index 8dc4cfca47..fcf3637e93 100644 --- a/Docs/Layers/memorial.md +++ b/Docs/Layers/memorial.md @@ -5,6 +5,7 @@ Layer showing memorial plaques, based upon a unofficial theme. Can be expanded to have multiple types of memorials later on - This layer is shown at zoomlevel **9** and higher + - This layer will automatically load [walls_and_buildings](./walls_and_buildings.md) into the layout as it depends on it: preset `a memorial on a wall` snaps to this layer (memorial.presets[1]) ## Table of contents @@ -46,6 +47,7 @@ Layer showing memorial plaques, based upon a unofficial theme. Can be expanded t The following options to create new points are included: - **a memorial** which has the following tags:historic=memorial + - **a memorial on a wall** which has the following tags:historic=memorial (snaps to layers `walls_and_buildings`) ## Basic tags for this layer @@ -245,7 +247,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/mountain_rescue.md b/Docs/Layers/mountain_rescue.md index 750a28d3cd..d4e74b62f7 100644 --- a/Docs/Layers/mountain_rescue.md +++ b/Docs/Layers/mountain_rescue.md @@ -45,7 +45,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/nature_reserve.md b/Docs/Layers/nature_reserve.md index 42da4459dd..8c95dc3bdb 100644 --- a/Docs/Layers/nature_reserve.md +++ b/Docs/Layers/nature_reserve.md @@ -162,7 +162,7 @@ The question is `What is the corresponding Wikidata entity?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/not_cyclestreets.md b/Docs/Layers/not_cyclestreets.md index cf563c6dec..46feb3a614 100644 --- a/Docs/Layers/not_cyclestreets.md +++ b/Docs/Layers/not_cyclestreets.md @@ -81,7 +81,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### split_button diff --git a/Docs/Layers/note.md b/Docs/Layers/note.md index b9f9b0bcd9..4ef75c717f 100644 --- a/Docs/Layers/note.md +++ b/Docs/Layers/note.md @@ -75,7 +75,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/observation_tower.md b/Docs/Layers/observation_tower.md index e668d25926..aac6396348 100644 --- a/Docs/Layers/observation_tower.md +++ b/Docs/Layers/observation_tower.md @@ -153,7 +153,7 @@ The question is `What is the corresponding Wikidata entity?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/onwheels_entrance_data.md b/Docs/Layers/onwheels_entrance_data.md index 5142157ef8..241a8c3edf 100644 --- a/Docs/Layers/onwheels_entrance_data.md +++ b/Docs/Layers/onwheels_entrance_data.md @@ -47,7 +47,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/osm_community_index.md b/Docs/Layers/osm_community_index.md index 36b5ae0b2b..4a63044a73 100644 --- a/Docs/Layers/osm_community_index.md +++ b/Docs/Layers/osm_community_index.md @@ -52,7 +52,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/outdoor_seating.md b/Docs/Layers/outdoor_seating.md index 14c37d92d3..48f988dc19 100644 --- a/Docs/Layers/outdoor_seating.md +++ b/Docs/Layers/outdoor_seating.md @@ -51,7 +51,7 @@ Elements must match the expression ** [seasonal](https://wiki.openstreetmap.org/wiki/Key:seasonal) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:seasonal%3Dno) [spring](https://wiki.openstreetmap.org/wiki/Tag:seasonal%3Dspring) [summer](https://wiki.openstreetmap.org/wiki/Tag:seasonal%3Dsummer) [autumn](https://wiki.openstreetmap.org/wiki/Tag:seasonal%3Dautumn) [winter](https://wiki.openstreetmap.org/wiki/Tag:seasonal%3Dwinter) [dry_season](https://wiki.openstreetmap.org/wiki/Tag:seasonal%3Ddry_season) | | [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7) | | [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) | @@ -110,7 +110,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -172,7 +172,7 @@ The question is `Is smoking allowed at {title()}?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/parcel_lockers.md b/Docs/Layers/parcel_lockers.md index d2eda6d275..e965db52e7 100644 --- a/Docs/Layers/parcel_lockers.md +++ b/Docs/Layers/parcel_lockers.md @@ -39,12 +39,9 @@ The following options to create new points are included: ## Basic tags for this layer -Elements must match **any** of the following expressions: +Elements must match the expression **amenity=parcel_locker** - - amenity=parcel_locker - - vending=parcel_pickup;parcel_mail_in & amenity=vending_machine - -[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22amenity%22%3D%22parcel_locker%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22vending%22%3D%22parcel_pickup%3Bparcel_mail_in%22%5D%5B%22amenity%22%3D%22vending_machine%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22amenity%22%3D%22parcel_locker%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) ## Supported attributes @@ -56,7 +53,7 @@ Elements must match **any** of the following expressions: | [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | | | [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7) | | [ref](https://wiki.openstreetmap.org/wiki/Key:ref) | [string](../SpecialInputElements.md#string) | | -| [parcel_mail_in](https://wiki.openstreetmap.org/wiki/Key:parcel_mail_in) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:parcel_mail_in%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:parcel_mail_in%3Dno) | +| [parcel_mail_in](https://wiki.openstreetmap.org/wiki/Key:parcel_mail_in) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:parcel_mail_in%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:parcel_mail_in%3Dno) [returns_only](https://wiki.openstreetmap.org/wiki/Tag:parcel_mail_in%3Dreturns_only) | | [parcel_pickup](https://wiki.openstreetmap.org/wiki/Key:parcel_pickup) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:parcel_pickup%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:parcel_pickup%3Dno) | ### images @@ -93,8 +90,7 @@ The question is `Can you send packages from this parcel locker?` - *You can send packages from this parcel locker* is shown if with parcel_mail_in=yes - *You can't send packages from this parcel locker* is shown if with parcel_mail_in=no - -This tagrendering is only visible in the popup if the following condition is met: amenity=parcel_locker + - *You can send packages from this parcel locker, but only for returns* is shown if with parcel_mail_in=returns_only ### pickup @@ -103,12 +99,10 @@ The question is `Can you pick up packages from this parcel locker?` - *You can pick up packages from this parcel locker* is shown if with parcel_pickup=yes - *You can't pick up packages from this parcel locker* is shown if with parcel_pickup=no -This tagrendering is only visible in the popup if the following condition is met: amenity=parcel_locker - ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/parking.md b/Docs/Layers/parking.md index 08b43a1d48..14dc8ad2e9 100644 --- a/Docs/Layers/parking.md +++ b/Docs/Layers/parking.md @@ -122,7 +122,7 @@ The question is `What is the maximum amount of time one is allowed to stay here? ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/parking_spaces.md b/Docs/Layers/parking_spaces.md index 5b2f93c69d..76c151962d 100644 --- a/Docs/Layers/parking_spaces.md +++ b/Docs/Layers/parking_spaces.md @@ -72,7 +72,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/parking_spaces_disabled.md b/Docs/Layers/parking_spaces_disabled.md index cec7730a1d..f48b25cb07 100644 --- a/Docs/Layers/parking_spaces_disabled.md +++ b/Docs/Layers/parking_spaces_disabled.md @@ -46,7 +46,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/parking_ticket_machine.md b/Docs/Layers/parking_ticket_machine.md index 19ad2d8369..8430eb1785 100644 --- a/Docs/Layers/parking_ticket_machine.md +++ b/Docs/Layers/parking_ticket_machine.md @@ -122,7 +122,7 @@ The question is `What is the reference number of this parking ticket machine?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/parks_and_forests_without_etymology.md b/Docs/Layers/parks_and_forests_without_etymology.md index 69975ee8c4..4dcbf13038 100644 --- a/Docs/Layers/parks_and_forests_without_etymology.md +++ b/Docs/Layers/parks_and_forests_without_etymology.md @@ -19,7 +19,8 @@ All objects which have an etymology known - [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) - [simple etymology](#simple-etymology) - [questions](#questions) - - [street-name-sign-image](#street-name-sign-image) + - [streetsign-image-carousel](#streetsign-image-carousel) + - [streetsign-upload](#streetsign-upload) - [minimap](#minimap) - [etymology_multi_apply](#etymology_multi_apply) - [wikipedia](#wikipedia) @@ -76,10 +77,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap diff --git a/Docs/Layers/parks_without_etymology.md b/Docs/Layers/parks_without_etymology.md index 52bf0f9eae..5ddb36e7fd 100644 --- a/Docs/Layers/parks_without_etymology.md +++ b/Docs/Layers/parks_without_etymology.md @@ -19,7 +19,8 @@ All objects which have an etymology known - [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) - [simple etymology](#simple-etymology) - [questions](#questions) - - [street-name-sign-image](#street-name-sign-image) + - [streetsign-image-carousel](#streetsign-image-carousel) + - [streetsign-upload](#streetsign-upload) - [minimap](#minimap) - [etymology_multi_apply](#etymology_multi_apply) - [wikipedia](#wikipedia) @@ -76,10 +77,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap diff --git a/Docs/Layers/pet_shops.md b/Docs/Layers/pet_shops.md new file mode 100644 index 0000000000..82fbfa38b8 --- /dev/null +++ b/Docs/Layers/pet_shops.md @@ -0,0 +1,932 @@ +[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources) + +# pet_shops + +This layer is based on [shops](../Layers/shops.md) + +A shop + + - This layer is shown at zoomlevel **15** and higher + +## Table of contents + +1. [Themes using this layer](#themes-using-this-layer) +2. [Presets](#presets) +3. [Basic tags for this layer](#basic-tags-for-this-layer) +4. [Supported attributes](#supported-attributes) + - [images](#images) + - [reviews](#reviews) + - [shops-name](#shops-name) + - [shop_types](#shop_types) + - [brand](#brand) + - [second_hand](#second_hand) + - [opening_hours](#opening_hours) + - [Opening hours](#opening-hours) + - [website](#website) + - [email](#email) + - [phone](#phone) + - [payment-options](#payment-options) + - [repeated](#repeated) + - [single_level](#single_level) + - [copyshop-print-sizes](#copyshop-print-sizes) + - [copyshop-binding](#copyshop-binding) + - [optometrist_service](#optometrist_service) + - [key_cutter](#key_cutter) + - [sells_new_bikes](#sells_new_bikes) + - [bike_second_hand](#bike_second_hand) + - [repairs_bikes](#repairs_bikes) + - [bicycle_rental](#bicycle_rental) + - [bicycle-types](#bicycle-types) + - [rental-capacity-city_bike](#rental-capacity-city_bike) + - [rental-capacity-ebike](#rental-capacity-ebike) + - [rental-capacity-kid_bike](#rental-capacity-kid_bike) + - [rental-capacity-bmx](#rental-capacity-bmx) + - [rental-capacity-mtb](#rental-capacity-mtb) + - [rental-capacity-bicycle_pannier](#rental-capacity-bicycle_pannier) + - [rental-capacity-tandem_bicycle](#rental-capacity-tandem_bicycle) + - [bike_pump_service](#bike_pump_service) + - [bike_repair_tools](#bike_repair_tools) + - [bike_wash](#bike_wash) + - [bike_cleaning-service_bicycle_cleaning_charge](#bike_cleaning-service_bicycle_cleaning_charge) + - [internet](#internet) + - [internet-fee](#internet-fee) + - [internet-ssid](#internet-ssid) + - [organic](#organic) + - [sugar_free](#sugar_free) + - [gluten_free](#gluten_free) + - [lactose_free](#lactose_free) + - [dog-access](#dog-access) + - [description](#description) + - [leftover-questions](#leftover-questions) + - [move-button](#move-button) + - [delete-button](#delete-button) + - [lod](#lod) +5. [Filters](#filters) + +## Themes using this layer + + - [pets](https://mapcomplete.org/pets) + +## Presets + +The following options to create new points are included: + + - **a pet shop** which has the following tags:shop=pet + +## Basic tags for this layer + +Elements must match the expression **shop=pet** + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22shop%22%3D%22pet%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + +## Supported attributes + +**Warning:**,this quick overview is incomplete, + +| attribute | type | values which are supported by this layer | +-----|-----|----- | +| [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | [string](../SpecialInputElements.md#string) | [bicycle_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle_rental) [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [honey](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhoney) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [nuts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnuts) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pasta](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpasta) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [rice](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drice) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) | +| [brand](https://wiki.openstreetmap.org/wiki/Key:brand) | [string](../SpecialInputElements.md#string) | | +| [second_hand](https://wiki.openstreetmap.org/wiki/Key:second_hand) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:second_hand%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:second_hand%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:second_hand%3Dno) | +| [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | | +| [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | | +| [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | | +| [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | | +| [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1) | +| [service:binding](https://wiki.openstreetmap.org/wiki/Key:service:binding) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:binding%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:binding%3Dno) | +| [healthcare](https://wiki.openstreetmap.org/wiki/Key:healthcare) | Multiple choice | [optometrist](https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist) [audiologist](https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist) | +| [service:bicycle:retail](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:retail) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:retail%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:retail%3Dno) | +| [service:bicycle:second_hand](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:second_hand) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Dno) [only](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Donly) | +| [service:bicycle:repair](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:repair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Donly_sold) [brand](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dbrand) | +| [service:bicycle:rental](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dno) | +| [rental](https://wiki.openstreetmap.org/wiki/Key:rental) | [string](../SpecialInputElements.md#string) | [city_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcity_bike) [ebike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Debike) [bmx](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbmx) [mtb](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dmtb) [kid_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dkid_bike) [tandem](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dtandem) [racebike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dracebike) [bike_helmet](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbike_helmet) [cargo_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcargo_bike) | +| [capacity:city_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:city_bike) | [pnat](../SpecialInputElements.md#pnat) | | +| [capacity:ebike](https://wiki.openstreetmap.org/wiki/Key:capacity:ebike) | [pnat](../SpecialInputElements.md#pnat) | | +| [capacity:kid_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:kid_bike) | [pnat](../SpecialInputElements.md#pnat) | | +| [capacity:bmx](https://wiki.openstreetmap.org/wiki/Key:capacity:bmx) | [pnat](../SpecialInputElements.md#pnat) | | +| [capacity:mtb](https://wiki.openstreetmap.org/wiki/Key:capacity:mtb) | [pnat](../SpecialInputElements.md#pnat) | | +| [capacity:bicycle_pannier](https://wiki.openstreetmap.org/wiki/Key:capacity:bicycle_pannier) | [pnat](../SpecialInputElements.md#pnat) | | +| [capacity:tandem_bicycle](https://wiki.openstreetmap.org/wiki/Key:capacity:tandem_bicycle) | [pnat](../SpecialInputElements.md#pnat) | | +| [service:bicycle:pump](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:pump) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dno) [separate](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dseparate) | +| [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | +| [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | +| [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | +| [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | +| [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | +| [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | +| [diet:sugar_free](https://wiki.openstreetmap.org/wiki/Key:diet:sugar_free) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Dno) | +| [diet:gluten_free](https://wiki.openstreetmap.org/wiki/Key:diet:gluten_free) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Dno) | +| [diet:lactose_free](https://wiki.openstreetmap.org/wiki/Key:diet:lactose_free) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Dno) | +| [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | +| [description](https://wiki.openstreetmap.org/wiki/Key:description) | [text](../SpecialInputElements.md#text) | | + +### images +This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images +_This tagrendering has no question and is thus read-only_ +*{image_carousel()}{image_upload()}* + +### reviews +Shows the reviews module (including the possibility to leave a review) +_This tagrendering has no question and is thus read-only_ +*{create_review()}{list_reviews()}* + +### shops-name + +The question is `What is the name of this shop?` +*This shop is called {name}* is shown if `name` is set + +### shop_types + +The question is `What kind of shop is this?` +*This is a {shop}* is shown if `shop` is set + + - *Bicycle rental shop* is shown if with shop=bicycle_rental + - *Farm Supply Shop* is shown if with shop=agrarian + - *Liquor Store* is shown if with shop=alcohol + - *Anime / Manga Shop* is shown if with shop=anime + - *Antique Shop* is shown if with shop=antiques + - *Appliance Store* is shown if with shop=appliance + - *Art Store* is shown if with shop=art + - *Baby Goods Store* is shown if with shop=baby_goods + - *Bag/Luggage Store* is shown if with shop=bag + - *Bakery* is shown if with shop=bakery + - *Bathroom Furnishing Store* is shown if with shop=bathroom_furnishing + - *Beauty Shop* is shown if with shop=beauty + - *Bedding/Mattress Store* is shown if with shop=bed + - *Beverage Store* is shown if with shop=beverages + - *Bicycle Shop* is shown if with shop=bicycle + - *Boat Store* is shown if with shop=boat + - *Bookmaker* is shown if with shop=bookmaker + - *Bookstore* is shown if with shop=books + - *Brewing Supply Store* is shown if with shop=brewing_supplies + - *Butcher* is shown if with shop=butcher + - *Camera Equipment Store* is shown if with shop=camera + - *Candle Shop* is shown if with shop=candles + - *Cannabis Shop* is shown if with shop=cannabis + - *Car Dealership* is shown if with shop=car + - *Car Parts Store* is shown if with shop=car_parts + - *Car Repair Shop* is shown if with shop=car_repair + - *RV Dealership* is shown if with shop=caravan + - *Carpet Store* is shown if with shop=carpet + - *Catalog Shop* is shown if with shop=catalogue + - *Charity Store* is shown if with shop=charity + - *Cheese Store* is shown if with shop=cheese + - *Drugstore* is shown if with shop=chemist + - *Chocolate Store* is shown if with shop=chocolate + - *Clothing Store* is shown if with shop=clothes + - *Coffee Store* is shown if with shop=coffee + - *Collectibles Shop* is shown if with shop=collector + - *Computer Store* is shown if with shop=computer + - *Candy Store* is shown if with shop=confectionery + - *Convenience Store* is shown if with shop=convenience + - *Copy Store* is shown if with shop=copyshop + - *Cosmetics Store* is shown if with shop=cosmetics + - *Rural Supplies Store* is shown if with shop=country_store + - *Arts & Crafts Store* is shown if with shop=craft + - *Curtain Store* is shown if with shop=curtain + - *Dairy Store* is shown if with shop=dairy + - *Delicatessen* is shown if with shop=deli + - *Department Store* is shown if with shop=department_store + - *DIY Store* is shown if with shop=doityourself + - *Door Shop* is shown if with shop=doors + - *Dry Cleaner* is shown if with shop=dry_cleaning + - *E-Cigarette Shop* is shown if with shop=e-cigarette + - *Electrical Equipment Store* is shown if with shop=electrical + - *Electronics Store* is shown if with shop=electronics + - *Erotic Store* is shown if with shop=erotic + - *Fabric Store* is shown if with shop=fabric + - *Produce Stand* is shown if with shop=farm + - *Fashion Accessories Store* is shown if with shop=fashion_accessories + - *Fireplace Store* is shown if with shop=fireplace + - *Fishing Shop* is shown if with shop=fishing + - *Flooring Supply Shop* is shown if with shop=flooring + - *Florist* is shown if with shop=florist + - *Framing Shop* is shown if with shop=frame + - *Frozen Food Store* is shown if with shop=frozen_food + - *Fuel Shop* is shown if with shop=fuel + - *Funeral Home* is shown if with shop=funeral_directors + - *Furniture Store* is shown if with shop=furniture + - *Tabletop Game Store* is shown if with shop=games + - *Garden Center* is shown if with shop=garden_centre + - *Bottled Gas Shop* is shown if with shop=gas + - *General Store* is shown if with shop=general + - *Gift Shop* is shown if with shop=gift + - *Greengrocer* is shown if with shop=greengrocer + - *Hairdresser* is shown if with shop=hairdresser + - *Hairdresser Supply Store* is shown if with shop=hairdresser_supply + - *Hardware Store* is shown if with shop=hardware + - *Health Food Store* is shown if with shop=health_food + - *Hearing Aids Store* is shown if with shop=hearing_aids + - *Herbalist* is shown if with shop=herbalist + - *Hifi Store* is shown if with shop=hifi + - *Honey Store* is shown if with shop=honey + - *Household Linen Shop* is shown if with shop=household_linen + - *Houseware Store* is shown if with shop=houseware + - *Hunting Shop* is shown if with shop=hunting + - *Interior Decoration Store* is shown if with shop=interior_decoration + - *Jewelry Store* is shown if with shop=jewelry + - *Kiosk* is shown if with shop=kiosk + - *Kitchen Design Store* is shown if with shop=kitchen + - *Laundry* is shown if with shop=laundry + - *Leather Store* is shown if with shop=leather + - *Lighting Store* is shown if with shop=lighting + - *Locksmith* is shown if with shop=locksmith + - *Lottery Shop* is shown if with shop=lottery + - *Mall* is shown if with shop=mall + - *Massage Shop* is shown if with shop=massage + - *Medical Supply Store* is shown if with shop=medical_supply + - *Military Surplus Store* is shown if with shop=military_surplus + - *Mobile Phone Store* is shown if with shop=mobile_phone + - *Model Shop* is shown if with shop=model + - *Money Lender* is shown if with shop=money_lender + - *Motorcycle Dealership* is shown if with shop=motorcycle + - *Motorcycle Repair Shop* is shown if with shop=motorcycle_repair + - *Music Store* is shown if with shop=music + - *Musical Instrument Store* is shown if with shop=musical_instrument + - *Newsstand* is shown if with shop=newsagent + - *Nutrition Supplements Store* is shown if with shop=nutrition_supplements + - *Nuts Shop* is shown if with shop=nuts + - *Optician* is shown if with shop=optician + - *Outdoors Store* is shown if with shop=outdoor + - *Online Retailer Outpost* is shown if with shop=outpost + - *Paint Store* is shown if with shop=paint + - *Party Supply Store* is shown if with shop=party + - *Pasta Store* is shown if with shop=pasta + - *Pastry Shop* is shown if with shop=pastry + - *Pawnshop* is shown if with shop=pawnbroker + - *Perfume Store* is shown if with shop=perfumery + - *Pet Store* is shown if with shop=pet + - *Pet Groomer* is shown if with shop=pet_grooming + - *Photography Store* is shown if with shop=photo + - *Pottery Store* is shown if with shop=pottery + - *Printer Ink Store* is shown if with shop=printer_ink + - *Psychic* is shown if with shop=psychic + - *Fireworks Store* is shown if with shop=pyrotechnics + - *Radio/Electronic Component Store* is shown if with shop=radiotechnics + - *Religious Store* is shown if with shop=religion + - *Rental Shop* is shown if with shop=rental + - *Repair Shop* is shown if with shop=repair + - *Rice Store* is shown if with shop=rice + - *Scuba Diving Shop* is shown if with shop=scuba_diving + - *Seafood Shop* is shown if with shop=seafood + - *Thrift Store* is shown if with shop=second_hand + - *Sewing Supply Shop* is shown if with shop=sewing + - *Shoe Repair Shop* is shown if with shop=shoe_repair + - *Shoe Store* is shown if with shop=shoes + - *Spice Shop* is shown if with shop=spices + - *Sporting Goods Store* is shown if with shop=sports + - *Stationery Store* is shown if with shop=stationery + - *Storage Rental* is shown if with shop=storage_rental + - *Supermarket* is shown if with shop=supermarket + - *Pool Supply Store* is shown if with shop=swimming_pool + - *Tailor* is shown if with shop=tailor + - *Tattoo Parlor* is shown if with shop=tattoo + - *Tea Store* is shown if with shop=tea + - *Telecom Retail Store* is shown if with shop=telecommunication + - *Ticket Seller* is shown if with shop=ticket + - *Tile Shop* is shown if with shop=tiles + - *Tobacco Shop* is shown if with shop=tobacco + - *Tool Rental* is shown if with shop=tool_hire + - *Toy Store* is shown if with shop=toys + - *Trade Shop* is shown if with shop=trade + - *Travel Agency* is shown if with shop=travel_agency + - *Trophy Shop* is shown if with shop=trophy + - *Tire Store* is shown if with shop=tyres + - *Vacuum Cleaner Store* is shown if with shop=vacuum_cleaner + - *Discount Store* is shown if with shop=variety_store + - *Video Store* is shown if with shop=video + - *Video Game Store* is shown if with shop=video_games + - *Watches Shop* is shown if with shop=watches + - *Drinking Water Shop* is shown if with shop=water + - *Watersport/Swim Shop* is shown if with shop=water_sports + - *Weapon Shop* is shown if with shop=weapons + - *Wholesale Store* is shown if with shop=wholesale + - *Wig Shop* is shown if with shop=wigs + - *Window Blind Store* is shown if with shop=window_blind + - *Wine Shop* is shown if with shop=wine + - *This shop is no longer used. It is vacant* is shown if with disused:shop= + +This tagrendering has labels +`description` + +### brand + +The question is `What is the brand of this shop?` +*Part of {brand}* is shown if `brand` is set + + - *This shop does not have a specific brand, it is not part of a bigger chain* is shown if with not:brand=yes + +### second_hand + +The question is `Does this shop sell second-hand items?` + + - *This shop sells second-hand items only* is shown if with second_hand=only + - *This shop sells second-hand items along with new items* is shown if with second_hand=yes + - *This shop only sells brand-new items* is shown if with second_hand=no + +This tagrendering is only visible in the popup if the following condition is met: shop=clothes | shop=books | shop=charity | shop=furniture | shop=mobile_phone | shop=computer | shop=toys + +### opening_hours + +The question is `What are the opening hours of {title()}?` +*

Opening hours

{opening_hours_table(opening_hours)}* is shown if `opening_hours` is set + + - *Marked as closed for an unspecified time* is shown if with opening_hours=closed. _This option cannot be chosen as answer_ + +### website + +The question is `What is the website of {title()}?` +*{website}* is shown if `website` is set + + - *{contact:website}* is shown if with contact:website~.+. _This option cannot be chosen as answer_ + +This tagrendering has labels +`contact` + +### email + +The question is `What is the email address of {title()}?` +*{email}* is shown if `email` is set + + - *{contact:email}* is shown if with contact:email~.+. _This option cannot be chosen as answer_ + - *{operator:email}* is shown if with operator:email~.+. _This option cannot be chosen as answer_ + +This tagrendering has labels +`contact` + +### phone + +The question is `What is the phone number of {title()}?` +*{link(&LBRACEphone&RBRACE,tel:&LBRACEphone&RBRACE,,,,)}* is shown if `phone` is set + + - *{link(&LBRACEcontact:phone&RBRACE,tel:&LBRACEcontact:phone&RBRACE,,,,)}* is shown if with contact:phone~.+. _This option cannot be chosen as answer_ + +This tagrendering has labels +`contact` + +### payment-options + +The question is `Which methods of payment are accepted here?` + + - *Cash is accepted here* is shown if with payment:cash=yes. Unselecting this answer will add payment:cash=no + - *Payment cards are accepted here* is shown if with payment:cards=yes. Unselecting this answer will add payment:cards=no + - *Payment by QR-code is possible here* is shown if with payment:qr_code=yes. Unselecting this answer will add payment:qr_code=no + +### repeated + +_This tagrendering has no question and is thus read-only_ +*Multiple, identical objects can be found on floors {repeat_on}.* + +This tagrendering is only visible in the popup if the following condition is met: repeat_on~.+ +This tagrendering has labels +`level` + +### single_level + +The question is `On what level is this feature located?` +*Located on the {level}th floor* is shown if `level` is set + + - *Located underground* is shown if with location=underground. _This option cannot be chosen as answer_ + - *Located on the ground floor* is shown if with level=0 + - *Located on the ground floor* is shown if with level=. _This option cannot be chosen as answer_ + - *Located on the first floor* is shown if with level=1 + - *Located on the first basement level* is shown if with level=-1 + +This tagrendering has labels +`level` + +### copyshop-print-sizes + +The question is `What paper formats does this shop offer?` + + - *This shop can print on papers of size A4* is shown if with service:print:A4=yes. Unselecting this answer will add service:print:A4=no + - *This shop can print on papers of size A3* is shown if with service:print:A3=yes. Unselecting this answer will add service:print:A3=no + - *This shop can print on papers of size A2* is shown if with service:print:A2=yes. Unselecting this answer will add service:print:A2=no + - *This shop can print on papers of size A1* is shown if with service:print:A1=yes. Unselecting this answer will add service:print:A1=no + - *This shop can print on papers of size A0* is shown if with service:print:A0=yes. Unselecting this answer will add service:print:A0=no + +This tagrendering is only visible in the popup if the following condition is met: service:print=yes | shop~^(.*copyshop.*)$ | shop~^(.*stationery.*)$ + +### copyshop-binding + +The question is `Does this shop offer a binding service?` + + - *This shop binds papers into a booklet* is shown if with service:binding=yes + - *This shop does bind books* is shown if with service:binding=no + +This tagrendering is only visible in the popup if the following condition is met: service:print=yes | shop~^(.*copyshop.*)$ | shop~^(.*stationery.*)$ + +### optometrist_service + +The question is `Are medical services available here?` + + - *This shop offers eye exams by certified optometrists* is shown if with healthcare=optometrist. Unselecting this answer will add not:healthcare=optometrist + - *This shop offers hearing tests by a certified audiologist* is shown if with healthcare=audiologist. Unselecting this answer will add not:healthcare=audiologist + +This tagrendering is only visible in the popup if the following condition is met: shop=optician | shop=hearing_aid | shop=medical_supply + +### key_cutter + +The question is `Does this shop offer key cutting?` + + - *This shop is also specialized in key cutting* is shown if with craft=key_cutter + - *This shop offers key cutting as a service* is shown if with service:key_cutting=yes + - *This shops does not offer key cutting as a service* is shown if with craft= & service:key_cutting=no + +This tagrendering is only visible in the popup if the following condition is met: craft=key_cutting | shop=shoe_repair | shop=diy | shop=doityourself | shop=home_improvement | shop=hardware | shop=locksmith | shop=repair | service:key_cutting~.+ + +### sells_new_bikes + +The question is `Does this shop sell bikes?` + + - *This shop sells new bikes* is shown if with service:bicycle:retail=yes + - *This shop doesn't sell new bikes* is shown if with service:bicycle:retail=no + +This tagrendering is only visible in the popup if the following condition is met: shop=outdoor | shop=sport | shop=sports | shop=diy | shop=doityourself | service:bicycle:retail~.+ + +### bike_second_hand + +The question is `Does this shop sell second-hand bikes?` + + - *This shop sells second-hand bikes* is shown if with service:bicycle:second_hand=yes + - *This shop doesn't sell second-hand bikes* is shown if with service:bicycle:second_hand=no + - *This shop only sells second-hand bikes* is shown if with service:bicycle:second_hand=only + +This tagrendering is only visible in the popup if the following condition is met: shop=bicycle | shop=charity | shop=second_hand | shop=bicycle_repair | service:bicycle:second_hand~.+ + +### repairs_bikes + +The question is `Does this shop repair bikes?` + + - *This shop repairs bikes* is shown if with service:bicycle:repair=yes + - *This shop doesn't repair bikes* is shown if with service:bicycle:repair=no + - *This shop only repairs bikes bought here* is shown if with service:bicycle:repair=only_sold + - *This shop only repairs bikes of a certain brand* is shown if with service:bicycle:repair=brand + +This tagrendering is only visible in the popup if the following condition is met: service:bicycle:retail=yes | service:bicycle:second_hand=yes | service:bicycle:second_hand=only | shop=sport | shop=sports | shop=outdoor | shop=bicycle | service:bicycle:repair~.+ + +### bicycle_rental + +The question is `Does this shop rent out bikes?` + + - *This shop rents out bikes* is shown if with service:bicycle:rental=yes + - *This shop doesn't rent out bikes* is shown if with service:bicycle:rental=no + +This tagrendering is only visible in the popup if the following condition is met: shop=bicycle | shop=sport | shop=sports | shop=bicycle_repair | shop=outdoor | shop=rental | service:bicycle:rental~.+ + +### bicycle-types + +The question is `What kind of bicycles and accessories are rented here?` +*{rental} is rented here* is shown if `rental` is set + + - *Normal city bikes can be rented here* is shown if with rental=city_bike + - *Electrical bikes can be rented here* is shown if with rental=ebike + - *BMX bikes can be rented here* is shown if with rental=bmx + - *Mountainbikes can be rented here* is shown if with rental=mtb + - *Bikes for children can be rented here* is shown if with rental=kid_bike + - *Tandem bicycles can be rented here* is shown if with rental=tandem + - *Race bicycles can be rented here* is shown if with rental=racebike + - *Bike helmets can be rented here* is shown if with rental=bike_helmet + - *Cargo bikes can be rented here* is shown if with rental=cargo_bike + +This tagrendering is only visible in the popup if the following condition is met: service:bicycle:rental=yes | bicycle_rental~.+ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-city_bike + +The question is `How many city bikes can be rented here?` +*{capacity:city_bike} city bikes can be rented here* is shown if `capacity:city_bike` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*city_bike.*)$ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-ebike + +The question is `How many electrical bikes can be rented here?` +*{capacity:ebike} electrical bikes can be rented here* is shown if `capacity:ebike` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*ebike.*)$ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-kid_bike + +The question is `How many bikes for children can be rented here?` +*{capacity:kid_bike} bikes for children can be rented here* is shown if `capacity:kid_bike` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*kid_bike.*)$ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-bmx + +The question is `How many BMX bikes can be rented here?` +*{capacity:bmx} BMX bikes can be rented here* is shown if `capacity:bmx` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*bmx.*)$ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-mtb + +The question is `How many mountainbikes can be rented here?` +*{capacity:mtb} mountainbikes can be rented here* is shown if `capacity:mtb` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*mtb.*)$ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-bicycle_pannier + +The question is `How many bicycle panniers can be rented here?` +*{capacity:bicycle_pannier} bicycle panniers can be rented here* is shown if `capacity:bicycle_pannier` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*bicycle_pannier.*)$ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-tandem_bicycle + +The question is `How many tandem can be rented here?` +*{capacity:tandem_bicycle} tandem can be rented here* is shown if `capacity:tandem_bicycle` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*tandem_bicycle.*)$ +This tagrendering has labels +`bicycle_rental` + +### bike_pump_service + +The question is `Does this shop offer a bike pump for use by anyone?` + + - *This shop offers a bike pump for anyone* is shown if with service:bicycle:pump=yes + - *This shop doesn't offer a bike pump for anyone* is shown if with service:bicycle:pump=no + - *There is bicycle pump, it is shown as a separate point* is shown if with service:bicycle:pump=separate + +This tagrendering is only visible in the popup if the following condition is met: service:bicycle:retail=yes | shop=bicycle | shop=bicycle_repair | ^(service:bicycle:.+)$~~^(yes)$ | service:bicycle:pump~.+ + +### bike_repair_tools + +The question is `Are there tools here to repair your own bike?` + + - *This shop offers tools for DIY bicycle repair* is shown if with service:bicycle:diy=yes + - *This shop doesn't offer tools for DIY bicycle repair* is shown if with service:bicycle:diy=no + - *Tools for DIY bicycle repair are only available if you bought/hire the bike in the shop* is shown if with service:bicycle:diy=only_sold + +This tagrendering is only visible in the popup if the following condition is met: shop=bicycle | shop=bicycle_repair | service:bicycle:diy~.+ | service:bicycle:repair~^(yes|only)$ + +### bike_wash + +The question is `Are bicycles washed here?` + + - *This shop cleans bicycles* is shown if with service:bicycle:cleaning=yes + - *This shop has an installation where one can clean bicycles themselves* is shown if with service:bicycle:cleaning=diy + - *This shop doesn't offer bicycle cleaning* is shown if with service:bicycle:cleaning=no + +This tagrendering is only visible in the popup if the following condition is met: shop=bicycle | shop=bicycle_repair | ^(service:bicycle:.*)$~~^(yes|only)$ | service:bicycle:cleaning~.+ + +### bike_cleaning-service_bicycle_cleaning_charge + +The question is `How much does it cost to use the cleaning service?` +*Using the cleaning service costs {service:bicycle:cleaning:charge}* is shown if `service:bicycle:cleaning:charge` is set + + - *The cleaning service is free to use* is shown if with service:bicycle:cleaning:fee=no + - *Free to use* is shown if with service:bicycle:cleaning:fee=yes & service:bicycle:cleaning:charge=. _This option cannot be chosen as answer_ + +This tagrendering is only visible in the popup if the following condition is met: amenity!=bicycle_wash & service:bicycle:cleaning!=no & service:bicycle:cleaning~.+ + +### internet + +The question is `Does this place offer internet access?` + + - *This place offers wireless internet access* is shown if with internet_access=wlan + - *This place does not offer internet access* is shown if with internet_access=no + - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ + - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal + - *This place offers wired internet access* is shown if with internet_access=wired + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan + +This tagrendering has labels +`internet-all` + +### internet-fee + +The question is `Is there a fee for internet access?` + + - *There is a fee for the internet access at this place* is shown if with internet_access:fee=yes + - *Internet access is free at this place* is shown if with internet_access:fee=no + - *Internet access is free at this place, for customers only* is shown if with internet_access:fee=customers + +This tagrendering is only visible in the popup if the following condition is met: internet_access!=no & internet_access~.+ +This tagrendering has labels +`internet-all` + +### internet-ssid + +The question is `What is the network name for the wireless internet access?` +*The network name is {internet_access:ssid}* is shown if `internet_access:ssid` is set + + - *Telekom* is shown if with internet_access:ssid=Telekom + +This tagrendering is only visible in the popup if the following condition is met: internet_access~^(.*wlan.*)$ +This tagrendering has labels +`internet-all` + +### organic + +The question is `Does this shop offer organic products?` + + - *This shop offers organic products* is shown if with organic=yes + - *This shop only offers organic products* is shown if with organic=only + - *This shop does not offer organic products* is shown if with organic=no + +This tagrendering is only visible in the popup if the following condition is met: shop=supermarket | shop=convenience | shop=farm | shop=greengrocer | shop=health_food | shop=clothes | shop=shoes | shop=butcher | shop=cosmetics | shop=deli | shop=bakery | shop=alcohol | shop=seafood | shop=beverages | shop=florist + +### sugar_free + +The question is `Does this shop have a sugar free offering?` + + - *This shop only sells sugar free products* is shown if with diet:sugar_free=only + - *This shop has a big sugar free offering* is shown if with diet:sugar_free=yes + - *This shop has a limited sugar free offering* is shown if with diet:sugar_free=limited + - *This shop has no sugar free offering* is shown if with diet:sugar_free=no + +This tagrendering is only visible in the popup if the following condition is met: shop=supermarket | shop=convenience | shop=farm | shop=greengrocer | shop=health_food | shop=deli | shop=bakery | shop=beverages | shop=beverages | shop=pastry | shop=chocolate | shop=frozen_food | shop=ice_cream +This tagrendering has labels +`diets` + +### gluten_free + +The question is `Does this shop have a gluten free offering?` + + - *This shop only sells gluten free products* is shown if with diet:gluten_free=only + - *This shop has a big gluten free offering* is shown if with diet:gluten_free=yes + - *This shop has a limited gluten free offering* is shown if with diet:gluten_free=limited + - *This shop has no gluten free offering* is shown if with diet:gluten_free=no + +This tagrendering is only visible in the popup if the following condition is met: shop=supermarket | shop=convenience | shop=farm | shop=greengrocer | shop=health_food | shop=deli | shop=bakery | shop=beverages | shop=beverages | shop=pastry | shop=chocolate | shop=frozen_food | shop=ice_cream +This tagrendering has labels +`diets` + +### lactose_free + +The question is `Does {title()} have a lactose-free offering?` + + - *Only sells lactose free products* is shown if with diet:lactose_free=only + - *Big lactose free offering* is shown if with diet:lactose_free=yes + - *Limited lactose free offering* is shown if with diet:lactose_free=limited + - *No lactose free offering* is shown if with diet:lactose_free=no + +This tagrendering is only visible in the popup if the following condition is met: shop=supermarket | shop=convenience | shop=farm | shop=greengrocer | shop=health_food | shop=deli | shop=bakery | shop=beverages | shop=beverages | shop=pastry | shop=chocolate | shop=frozen_food | shop=ice_cream +This tagrendering has labels +`diets` + +### dog-access + +The question is `Are dogs allowed in this business?` + + - *Dogs are allowed* is shown if with dog=yes + - *Dogs are not allowed* is shown if with dog=no + - *Dogs are allowed, but they have to be leashed* is shown if with dog=leashed + - *Dogs are allowed and can run around freely* is shown if with dog=unleashed + - *Dogs are allowed only outside* is shown if with dog=outside + +### description + +The question is `Is there still some relevant info that the previous questions did not cover? Feel free to add it here.` +*{description}* is shown if `description` is set + +### leftover-questions + +_This tagrendering has no question and is thus read-only_ +*{questions( ,hidden)}* + +### move-button + +_This tagrendering has no question and is thus read-only_ +*{move_button()}* + +### delete-button + +_This tagrendering has no question and is thus read-only_ +*{delete_button()}* + +### lod + +_This tagrendering has no question and is thus read-only_ +*{linked_data_from_website()}* + +This tagrendering has labels +`added_by_default` + +## Filters + +| id | question | osmTags | +-----|-----|----- | +| shop_types.0 | *What kind of shop is this?* (default) | | +| shop_types.1 | Bicycle rental shop | shop=bicycle_rental | ((shop=rental & amenity=bicycle_rental)) | +| shop_types.2 | Farm Supply Shop | shop=agrarian | +| shop_types.3 | Liquor Store | shop=alcohol | +| shop_types.4 | Anime / Manga Shop | shop=anime | +| shop_types.5 | Antique Shop | shop=antiques | +| shop_types.6 | Appliance Store | shop=appliance | +| shop_types.7 | Art Store | shop=art | +| shop_types.8 | Baby Goods Store | shop=baby_goods | +| shop_types.9 | Bag/Luggage Store | shop=bag | +| shop_types.10 | Bakery | shop=bakery | +| shop_types.11 | Bathroom Furnishing Store | shop=bathroom_furnishing | +| shop_types.12 | Beauty Shop | shop=beauty | +| shop_types.13 | Bedding/Mattress Store | shop=bed | +| shop_types.14 | Beverage Store | shop=beverages | +| shop_types.15 | Bicycle Shop | shop=bicycle | +| shop_types.16 | Boat Store | shop=boat | +| shop_types.17 | Bookmaker | shop=bookmaker | +| shop_types.18 | Bookstore | shop=books | +| shop_types.19 | Brewing Supply Store | shop=brewing_supplies | +| shop_types.20 | Butcher | shop=butcher | +| shop_types.21 | Camera Equipment Store | shop=camera | +| shop_types.22 | Candle Shop | shop=candles | +| shop_types.23 | Cannabis Shop | shop=cannabis | +| shop_types.24 | Car Dealership | shop=car | +| shop_types.25 | Car Parts Store | shop=car_parts | +| shop_types.26 | Car Repair Shop | shop=car_repair | +| shop_types.27 | RV Dealership | shop=caravan | +| shop_types.28 | Carpet Store | shop=carpet | +| shop_types.29 | Catalog Shop | shop=catalogue | +| shop_types.30 | Charity Store | shop=charity | +| shop_types.31 | Cheese Store | shop=cheese | +| shop_types.32 | Drugstore | shop=chemist | +| shop_types.33 | Chocolate Store | shop=chocolate | +| shop_types.34 | Clothing Store | shop=clothes | +| shop_types.35 | Coffee Store | shop=coffee | +| shop_types.36 | Collectibles Shop | shop=collector | +| shop_types.37 | Computer Store | shop=computer | +| shop_types.38 | Candy Store | shop=confectionery | +| shop_types.39 | Convenience Store | shop=convenience | +| shop_types.40 | Copy Store | shop=copyshop | +| shop_types.41 | Cosmetics Store | shop=cosmetics | +| shop_types.42 | Rural Supplies Store | shop=country_store | +| shop_types.43 | Arts & Crafts Store | shop=craft | +| shop_types.44 | Curtain Store | shop=curtain | +| shop_types.45 | Dairy Store | shop=dairy | +| shop_types.46 | Delicatessen | shop=deli | +| shop_types.47 | Department Store | shop=department_store | +| shop_types.48 | DIY Store | shop=doityourself | +| shop_types.49 | Door Shop | shop=doors | +| shop_types.50 | Dry Cleaner | shop=dry_cleaning | +| shop_types.51 | E-Cigarette Shop | shop=e-cigarette | +| shop_types.52 | Electrical Equipment Store | shop=electrical | +| shop_types.53 | Electronics Store | shop=electronics | +| shop_types.54 | Erotic Store | shop=erotic | +| shop_types.55 | Fabric Store | shop=fabric | +| shop_types.56 | Produce Stand | shop=farm | +| shop_types.57 | Fashion Accessories Store | shop=fashion_accessories | +| shop_types.58 | Fireplace Store | shop=fireplace | +| shop_types.59 | Fishing Shop | shop=fishing | +| shop_types.60 | Flooring Supply Shop | shop=flooring | +| shop_types.61 | Florist | shop=florist | +| shop_types.62 | Framing Shop | shop=frame | +| shop_types.63 | Frozen Food Store | shop=frozen_food | +| shop_types.64 | Fuel Shop | shop=fuel | +| shop_types.65 | Funeral Home | shop=funeral_directors | +| shop_types.66 | Furniture Store | shop=furniture | +| shop_types.67 | Tabletop Game Store | shop=games | +| shop_types.68 | Garden Center | shop=garden_centre | +| shop_types.69 | Bottled Gas Shop | shop=gas | +| shop_types.70 | General Store | shop=general | +| shop_types.71 | Gift Shop | shop=gift | +| shop_types.72 | Greengrocer | shop=greengrocer | +| shop_types.73 | Hairdresser | shop=hairdresser | +| shop_types.74 | Hairdresser Supply Store | shop=hairdresser_supply | +| shop_types.75 | Hardware Store | shop=hardware | +| shop_types.76 | Health Food Store | shop=health_food | +| shop_types.77 | Hearing Aids Store | shop=hearing_aids | +| shop_types.78 | Herbalist | shop=herbalist | +| shop_types.79 | Hifi Store | shop=hifi | +| shop_types.80 | Honey Store | shop=honey | +| shop_types.81 | Household Linen Shop | shop=household_linen | +| shop_types.82 | Houseware Store | shop=houseware | +| shop_types.83 | Hunting Shop | shop=hunting | +| shop_types.84 | Interior Decoration Store | shop=interior_decoration | +| shop_types.85 | Jewelry Store | shop=jewelry | +| shop_types.86 | Kiosk | shop=kiosk | +| shop_types.87 | Kitchen Design Store | shop=kitchen | +| shop_types.88 | Laundry | shop=laundry | +| shop_types.89 | Leather Store | shop=leather | +| shop_types.90 | Lighting Store | shop=lighting | +| shop_types.91 | Locksmith | shop=locksmith | +| shop_types.92 | Lottery Shop | shop=lottery | +| shop_types.93 | Mall | shop=mall | +| shop_types.94 | Massage Shop | shop=massage | +| shop_types.95 | Medical Supply Store | shop=medical_supply | +| shop_types.96 | Military Surplus Store | shop=military_surplus | +| shop_types.97 | Mobile Phone Store | shop=mobile_phone | +| shop_types.98 | Model Shop | shop=model | +| shop_types.99 | Money Lender | shop=money_lender | +| shop_types.100 | Motorcycle Dealership | shop=motorcycle | +| shop_types.101 | Motorcycle Repair Shop | shop=motorcycle_repair | +| shop_types.102 | Music Store | shop=music | +| shop_types.103 | Musical Instrument Store | shop=musical_instrument | +| shop_types.104 | Newsstand | shop=newsagent | +| shop_types.105 | Nutrition Supplements Store | shop=nutrition_supplements | +| shop_types.106 | Nuts Shop | shop=nuts | +| shop_types.107 | Optician | shop=optician | +| shop_types.108 | Outdoors Store | shop=outdoor | +| shop_types.109 | Online Retailer Outpost | shop=outpost | +| shop_types.110 | Paint Store | shop=paint | +| shop_types.111 | Party Supply Store | shop=party | +| shop_types.112 | Pasta Store | shop=pasta | +| shop_types.113 | Pastry Shop | shop=pastry | +| shop_types.114 | Pawnshop | shop=pawnbroker | +| shop_types.115 | Perfume Store | shop=perfumery | +| shop_types.116 | Pet Store | shop=pet | +| shop_types.117 | Pet Groomer | shop=pet_grooming | +| shop_types.118 | Photography Store | shop=photo | +| shop_types.119 | Pottery Store | shop=pottery | +| shop_types.120 | Printer Ink Store | shop=printer_ink | +| shop_types.121 | Psychic | shop=psychic | +| shop_types.122 | Fireworks Store | shop=pyrotechnics | +| shop_types.123 | Radio/Electronic Component Store | shop=radiotechnics | +| shop_types.124 | Religious Store | shop=religion | +| shop_types.125 | Rental Shop | shop=rental | +| shop_types.126 | Repair Shop | shop=repair | +| shop_types.127 | Rice Store | shop=rice | +| shop_types.128 | Scuba Diving Shop | shop=scuba_diving | +| shop_types.129 | Seafood Shop | shop=seafood | +| shop_types.130 | Thrift Store | shop=second_hand | +| shop_types.131 | Sewing Supply Shop | shop=sewing | +| shop_types.132 | Shoe Repair Shop | shop=shoe_repair | +| shop_types.133 | Shoe Store | shop=shoes | +| shop_types.134 | Spice Shop | shop=spices | +| shop_types.135 | Sporting Goods Store | shop=sports | +| shop_types.136 | Stationery Store | shop=stationery | +| shop_types.137 | Storage Rental | shop=storage_rental | +| shop_types.138 | Supermarket | shop=supermarket | +| shop_types.139 | Pool Supply Store | shop=swimming_pool | +| shop_types.140 | Tailor | shop=tailor | +| shop_types.141 | Tattoo Parlor | shop=tattoo | +| shop_types.142 | Tea Store | shop=tea | +| shop_types.143 | Telecom Retail Store | shop=telecommunication | +| shop_types.144 | Ticket Seller | shop=ticket | +| shop_types.145 | Tile Shop | shop=tiles | +| shop_types.146 | Tobacco Shop | shop=tobacco | +| shop_types.147 | Tool Rental | shop=tool_hire | +| shop_types.148 | Toy Store | shop=toys | +| shop_types.149 | Trade Shop | shop=trade | +| shop_types.150 | Travel Agency | shop=travel_agency | +| shop_types.151 | Trophy Shop | shop=trophy | +| shop_types.152 | Tire Store | shop=tyres | +| shop_types.153 | Vacuum Cleaner Store | shop=vacuum_cleaner | +| shop_types.154 | Discount Store | shop=variety_store | +| shop_types.155 | Video Store | shop=video | +| shop_types.156 | Video Game Store | shop=video_games | +| shop_types.157 | Watches Shop | shop=watches | +| shop_types.158 | Drinking Water Shop | shop=water | +| shop_types.159 | Watersport/Swim Shop | shop=water_sports | +| shop_types.160 | Weapon Shop | shop=weapons | +| shop_types.161 | Wholesale Store | shop=wholesale | +| shop_types.162 | Wig Shop | shop=wigs | +| shop_types.163 | Window Blind Store | shop=window_blind | +| shop_types.164 | Wine Shop | shop=wine | +| shop_types.165 | This shop is no longer used. It is vacant | disused:shop= | (shop=disused | shop=vacant | disused:shop~^(.+)$ | abandoned:shop~^(.+)$) | + +| id | question | osmTags | +-----|-----|----- | +| open_now.0 | Now open | _isOpen=yes | + +| id | question | osmTags | +-----|-----|----- | +| accepts_cash.0 | Accepts cash | payment:cash=yes | + +| id | question | osmTags | +-----|-----|----- | +| accepts_cards.0 | Accepts payment cards | payment:cards=yes | + +| id | question | osmTags | +-----|-----|----- | +| has_internet.0 | Offers internet | internet_access=wlan | internet_access=yes | internet_access=wired | + +| id | question | osmTags | +-----|-----|----- | +| sugar_free.0 | Has a sugar-free offering | diet:sugar_free=yes | diet:sugar_free=only | diet:sugar_free=limited | + +| id | question | osmTags | +-----|-----|----- | +| gluten_free.0 | Has a gluten free offering | diet:gluten_free=yes | diet:gluten_free=only | diet:gluten_free=limited | + +| id | question | osmTags | +-----|-----|----- | +| lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited | + +| id | question | osmTags | +-----|-----|----- | +| dogs.0 | *No preference towards dogs* (default) | | +| dogs.1 | Dogs allowed | dog=unleashed | dog=yes | +| dogs.2 | No dogs allowed | dog=no | + + + +This document is autogenerated from [assets/themes/pets/pets.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/themes/pets/pets.json) diff --git a/Docs/Layers/pharmacy.md b/Docs/Layers/pharmacy.md index fbe218493e..c5708f620c 100644 --- a/Docs/Layers/pharmacy.md +++ b/Docs/Layers/pharmacy.md @@ -188,7 +188,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/physiotherapist.md b/Docs/Layers/physiotherapist.md index 131fa09f57..b3c8d1e2e1 100644 --- a/Docs/Layers/physiotherapist.md +++ b/Docs/Layers/physiotherapist.md @@ -166,7 +166,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/picnic_table.md b/Docs/Layers/picnic_table.md index 9df52e7df2..f03329f030 100644 --- a/Docs/Layers/picnic_table.md +++ b/Docs/Layers/picnic_table.md @@ -91,7 +91,7 @@ The question is `What material is this picnic table made of?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/playground_equipment.md b/Docs/Layers/playground_equipment.md index 142b76e7a3..0e14971c27 100644 --- a/Docs/Layers/playground_equipment.md +++ b/Docs/Layers/playground_equipment.md @@ -91,7 +91,7 @@ The question is `Is this device accessible by wheelchair?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/police.md b/Docs/Layers/police.md index 722e59d8ee..9af3c2a896 100644 --- a/Docs/Layers/police.md +++ b/Docs/Layers/police.md @@ -136,7 +136,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/post_offices_with_atm.md b/Docs/Layers/post_offices_with_atm.md index 1684224792..63aa4af080 100644 --- a/Docs/Layers/post_offices_with_atm.md +++ b/Docs/Layers/post_offices_with_atm.md @@ -190,7 +190,7 @@ The question is `Does this post office have an ATM?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/postboxes.md b/Docs/Layers/postboxes.md index ec8a09911d..29a9e4eb1e 100644 --- a/Docs/Layers/postboxes.md +++ b/Docs/Layers/postboxes.md @@ -65,7 +65,7 @@ The question is `Who operates this postbox?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/postoffices.md b/Docs/Layers/postoffices.md index 8477249016..d3ca2d9475 100644 --- a/Docs/Layers/postoffices.md +++ b/Docs/Layers/postoffices.md @@ -197,7 +197,7 @@ The question is `Does this post office have an ATM?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/pt_shelter.md b/Docs/Layers/pt_shelter.md index 5c16a3c08d..500b21eada 100644 --- a/Docs/Layers/pt_shelter.md +++ b/Docs/Layers/pt_shelter.md @@ -41,7 +41,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/public_bookcase.md b/Docs/Layers/public_bookcase.md index a1687a52ee..bd4c61d2c2 100644 --- a/Docs/Layers/public_bookcase.md +++ b/Docs/Layers/public_bookcase.md @@ -5,6 +5,7 @@ A streetside cabinet with books, accessible to anyone - This layer is shown at zoomlevel **10** and higher + - This layer will automatically load [walls_and_buildings](./walls_and_buildings.md) into the layout as it depends on it: preset `a bookcase on a wall` snaps to this layer (public_bookcase.presets[1]) ## Table of contents @@ -40,6 +41,7 @@ A streetside cabinet with books, accessible to anyone The following options to create new points are included: - **a bookcase** which has the following tags:amenity=public_bookcase + - **a bookcase on a wall** which has the following tags:amenity=public_bookcase (snaps to layers `walls_and_buildings`) ## Basic tags for this layer @@ -140,7 +142,7 @@ The question is `Is there a website with more information about this public book ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/railway_platforms.md b/Docs/Layers/railway_platforms.md index 325a8b504b..6cec61dc72 100644 --- a/Docs/Layers/railway_platforms.md +++ b/Docs/Layers/railway_platforms.md @@ -67,7 +67,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/rainbow_crossing_high_zoom.md b/Docs/Layers/rainbow_crossing_high_zoom.md index 3aa27b838e..3dba39f381 100644 --- a/Docs/Layers/rainbow_crossing_high_zoom.md +++ b/Docs/Layers/rainbow_crossing_high_zoom.md @@ -48,7 +48,7 @@ The question is `Does this crossing has rainbow paintings?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/rainbow_crossings.md b/Docs/Layers/rainbow_crossings.md index eb0815618a..c586c8c163 100644 --- a/Docs/Layers/rainbow_crossings.md +++ b/Docs/Layers/rainbow_crossings.md @@ -58,7 +58,7 @@ The question is `Does this crossing has rainbow paintings?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/reception_desk.md b/Docs/Layers/reception_desk.md index 7fe671d913..875fb7a9dd 100644 --- a/Docs/Layers/reception_desk.md +++ b/Docs/Layers/reception_desk.md @@ -91,7 +91,7 @@ The question is `Does this place have an audio induction loop for people with re ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/recycling.md b/Docs/Layers/recycling.md index 478cc3d9a2..d2c2f8287e 100644 --- a/Docs/Layers/recycling.md +++ b/Docs/Layers/recycling.md @@ -197,7 +197,7 @@ The question is `When was this object last surveyed?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/route_marker.md b/Docs/Layers/route_marker.md index daeba9eca6..447e8e397c 100644 --- a/Docs/Layers/route_marker.md +++ b/Docs/Layers/route_marker.md @@ -56,7 +56,7 @@ The question is `For what kind of route is this marker?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/school.md b/Docs/Layers/school.md index c4fc26c1fe..64f88fab99 100644 --- a/Docs/Layers/school.md +++ b/Docs/Layers/school.md @@ -295,7 +295,7 @@ The question is `What is the corresponding Wikidata entity?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/shelter.md b/Docs/Layers/shelter.md index b1ec4c1700..2b8cfaffda 100644 --- a/Docs/Layers/shelter.md +++ b/Docs/Layers/shelter.md @@ -59,7 +59,7 @@ The question is `What kind of shelter is this?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/shop_dog_friendly.md b/Docs/Layers/shop_dog_friendly.md index 22ea8792b7..45173cbdb3 100644 --- a/Docs/Layers/shop_dog_friendly.md +++ b/Docs/Layers/shop_dog_friendly.md @@ -109,7 +109,7 @@ Elements must match **all** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -604,7 +604,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -699,7 +699,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/shops.md b/Docs/Layers/shops.md index b957e5b5ec..808a285fa9 100644 --- a/Docs/Layers/shops.md +++ b/Docs/Layers/shops.md @@ -125,7 +125,7 @@ Elements must match **all** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -620,7 +620,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -715,7 +715,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/shops_glutenfree.md b/Docs/Layers/shops_glutenfree.md index 4712c71944..8517b02089 100644 --- a/Docs/Layers/shops_glutenfree.md +++ b/Docs/Layers/shops_glutenfree.md @@ -111,7 +111,7 @@ Elements must match **all** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -617,7 +617,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -699,7 +699,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/shops_lactosefree.md b/Docs/Layers/shops_lactosefree.md index 72001dfed5..8aa5621022 100644 --- a/Docs/Layers/shops_lactosefree.md +++ b/Docs/Layers/shops_lactosefree.md @@ -111,7 +111,7 @@ Elements must match **all** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -617,7 +617,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -699,7 +699,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/shops_second_hand.md b/Docs/Layers/shops_second_hand.md index 39774e9993..6d585bae40 100644 --- a/Docs/Layers/shops_second_hand.md +++ b/Docs/Layers/shops_second_hand.md @@ -108,7 +108,7 @@ Elements must match **any** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -603,7 +603,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -698,7 +698,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/shops_with_climbing_shoe_repair.md b/Docs/Layers/shops_with_climbing_shoe_repair.md index c509b44ae2..75628f6397 100644 --- a/Docs/Layers/shops_with_climbing_shoe_repair.md +++ b/Docs/Layers/shops_with_climbing_shoe_repair.md @@ -110,7 +110,7 @@ Elements must match **all** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -612,7 +612,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -707,7 +707,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/shower.md b/Docs/Layers/shower.md index eefd53481e..5540540228 100644 --- a/Docs/Layers/shower.md +++ b/Docs/Layers/shower.md @@ -140,7 +140,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/ski_piste.md b/Docs/Layers/ski_piste.md index 31be37edd4..5812b49a2b 100644 --- a/Docs/Layers/ski_piste.md +++ b/Docs/Layers/ski_piste.md @@ -64,7 +64,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/slow_roads.md b/Docs/Layers/slow_roads.md index a24a3e16c6..a3cfe6616e 100644 --- a/Docs/Layers/slow_roads.md +++ b/Docs/Layers/slow_roads.md @@ -82,7 +82,7 @@ The question is `Is this road lit at night?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/souvenir_coin.md b/Docs/Layers/souvenir_coin.md index ac05515009..1a59d1df9c 100644 --- a/Docs/Layers/souvenir_coin.md +++ b/Docs/Layers/souvenir_coin.md @@ -179,7 +179,7 @@ The question is `When was this object last checked?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/souvenir_note.md b/Docs/Layers/souvenir_note.md index ad84f461cc..999ad3987b 100644 --- a/Docs/Layers/souvenir_note.md +++ b/Docs/Layers/souvenir_note.md @@ -180,7 +180,7 @@ The question is `When was this object last checked?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/speed_camera.md b/Docs/Layers/speed_camera.md index b103ae1417..f2dbb97803 100644 --- a/Docs/Layers/speed_camera.md +++ b/Docs/Layers/speed_camera.md @@ -72,7 +72,7 @@ The question is `In which geographical direction does this camera film?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/speed_display.md b/Docs/Layers/speed_display.md index 2975ac9165..f0167ce0d9 100644 --- a/Docs/Layers/speed_display.md +++ b/Docs/Layers/speed_display.md @@ -57,7 +57,7 @@ The question is `What is the text on this speed display?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/sport_places_without_etymology.md b/Docs/Layers/sport_places_without_etymology.md index 8ed8e78809..6b9139ceec 100644 --- a/Docs/Layers/sport_places_without_etymology.md +++ b/Docs/Layers/sport_places_without_etymology.md @@ -19,7 +19,8 @@ All objects which have an etymology known - [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) - [simple etymology](#simple-etymology) - [questions](#questions) - - [street-name-sign-image](#street-name-sign-image) + - [streetsign-image-carousel](#streetsign-image-carousel) + - [streetsign-upload](#streetsign-upload) - [minimap](#minimap) - [etymology_multi_apply](#etymology_multi_apply) - [wikipedia](#wikipedia) @@ -76,10 +77,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap diff --git a/Docs/Layers/sport_shops.md b/Docs/Layers/sport_shops.md index c197973abe..431b0e754d 100644 --- a/Docs/Layers/sport_shops.md +++ b/Docs/Layers/sport_shops.md @@ -112,7 +112,7 @@ Elements must match the expression ** [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -607,7 +607,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -702,7 +702,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/sports_centre.md b/Docs/Layers/sports_centre.md index ae3d5be29c..a311e15364 100644 --- a/Docs/Layers/sports_centre.md +++ b/Docs/Layers/sports_centre.md @@ -244,7 +244,7 @@ The question is `What sports are played at this venue?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/stairs.md b/Docs/Layers/stairs.md index d378ef54a6..a632038627 100644 --- a/Docs/Layers/stairs.md +++ b/Docs/Layers/stairs.md @@ -117,7 +117,7 @@ The question is `What is the incline of these stairs?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/street_lamps.md b/Docs/Layers/street_lamps.md index 5406ada004..fe147318ab 100644 --- a/Docs/Layers/street_lamps.md +++ b/Docs/Layers/street_lamps.md @@ -13,6 +13,7 @@ A layer showing street lights 3. [Basic tags for this layer](#basic-tags-for-this-layer) 4. [Supported attributes](#supported-attributes) - [images](#images) + - [utility_pole](#utility_pole) - [ref](#ref) - [support](#support) - [lamp_mount](#lamp_mount) @@ -50,6 +51,7 @@ Elements must match the expression ** [man_made](https://wiki.openstreetmap.org/wiki/Key:man_made) | Multiple choice | [utility_pole](https://wiki.openstreetmap.org/wiki/Tag:man_made%3Dutility_pole) [](https://wiki.openstreetmap.org/wiki/Tag:man_made%3D) | | [ref](https://wiki.openstreetmap.org/wiki/Key:ref) | [string](../SpecialInputElements.md#string) | | | [support](https://wiki.openstreetmap.org/wiki/Key:support) | Multiple choice | [catenary](https://wiki.openstreetmap.org/wiki/Tag:support%3Dcatenary) [ceiling](https://wiki.openstreetmap.org/wiki/Tag:support%3Dceiling) [ground](https://wiki.openstreetmap.org/wiki/Tag:support%3Dground) [pedestal](https://wiki.openstreetmap.org/wiki/Tag:support%3Dpedestal) [pole](https://wiki.openstreetmap.org/wiki/Tag:support%3Dpole) [wall](https://wiki.openstreetmap.org/wiki/Tag:support%3Dwall) [wall_mount](https://wiki.openstreetmap.org/wiki/Tag:support%3Dwall_mount) | | [lamp_mount](https://wiki.openstreetmap.org/wiki/Key:lamp_mount) | Multiple choice | [straight_mast](https://wiki.openstreetmap.org/wiki/Tag:lamp_mount%3Dstraight_mast) [bent_mast](https://wiki.openstreetmap.org/wiki/Tag:lamp_mount%3Dbent_mast) | @@ -64,11 +66,21 @@ This block shows the known images which are linked with the `image`-keys, but al _This tagrendering has no question and is thus read-only_ *{image_carousel()}{image_upload()}* +### utility_pole + +The question is `Is this lamp mounted on a utility pole?` + + - *This lamp is mounted on a utility pole* is shown if with man_made=utility_pole + - *This lamp is not mounted on a utility pole* is shown if with man_made= + ### ref The question is `What is the reference number of this street lamp?` *This street lamp has the reference number {ref}* is shown if `ref` is set +This tagrendering has labels +`street_lamp_question` + ### support The question is `How is this street lamp mounted?` @@ -81,6 +93,9 @@ The question is `How is this street lamp mounted?` - *This lamp is mounted directly to the wall* is shown if with support=wall - *This lamp is mounted to the wall using a metal bar* is shown if with support=wall_mount +This tagrendering has labels +`street_lamp_question` + ### lamp_mount The question is `How is this lamp mounted to the pole?` @@ -88,7 +103,9 @@ The question is `How is this lamp mounted to the pole?` - *This lamp sits atop of a straight mast* is shown if with lamp_mount=straight_mast - *This lamp sits at the end of a bent mast* is shown if with lamp_mount=bent_mast -This tagrendering is only visible in the popup if the following condition is met: support=pole +This tagrendering is only visible in the popup if the following condition is met: support=pole & man_made!=utility_pole +This tagrendering has labels +`street_lamp_question` ### method @@ -107,6 +124,9 @@ The question is `What kind of lighting does this lamp use?` - *This lamp uses high pressure sodium lamps (orange with white)* is shown if with light:method=high_pressure_sodium - *This lamp is lit using gas* is shown if with light:method=gas +This tagrendering has labels +`street_lamp_question` + ### colour The question is `What colour light does this lamp emit?` @@ -116,6 +136,9 @@ The question is `What colour light does this lamp emit?` - *This lamp emits green light* is shown if with light:colour=green - *This lamp emits orange light* is shown if with light:colour=orange +This tagrendering has labels +`street_lamp_question` + ### count The question is `How many fixtures does this light have?` @@ -125,6 +148,8 @@ The question is `How many fixtures does this light have?` - *This lamp has 2 fixtures* is shown if with light:count=2 This tagrendering is only visible in the popup if the following condition is met: support=pole +This tagrendering has labels +`street_lamp_question` ### lit @@ -135,17 +160,22 @@ The question is `When is this lamp lit?` - *This lamp is lit based on motion* is shown if with light:lit=motion - *This lamp is lit based on demand (e.g. with a pushbutton)* is shown if with light:lit=demand +This tagrendering has labels +`street_lamp_question` + ### direction The question is `Where does this lamp point to?` *This lamp points towards {light:direction}* is shown if `light:direction` is set This tagrendering is only visible in the popup if the following condition is met: light:count=1 +This tagrendering has labels +`street_lamp_question` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/streets_without_etymology.md b/Docs/Layers/streets_without_etymology.md index 388129285b..9ebe1729b4 100644 --- a/Docs/Layers/streets_without_etymology.md +++ b/Docs/Layers/streets_without_etymology.md @@ -19,7 +19,8 @@ All objects which have an etymology known - [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) - [simple etymology](#simple-etymology) - [questions](#questions) - - [street-name-sign-image](#street-name-sign-image) + - [streetsign-image-carousel](#streetsign-image-carousel) + - [streetsign-upload](#streetsign-upload) - [minimap](#minimap) - [etymology_multi_apply](#etymology_multi_apply) - [wikipedia](#wikipedia) @@ -77,10 +78,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap diff --git a/Docs/Layers/stripclub.md b/Docs/Layers/stripclub.md index 1526bef8b3..85d1040c2b 100644 --- a/Docs/Layers/stripclub.md +++ b/Docs/Layers/stripclub.md @@ -109,7 +109,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/surveillance_camera.md b/Docs/Layers/surveillance_camera.md index 8b76171db0..7e8fb695aa 100644 --- a/Docs/Layers/surveillance_camera.md +++ b/Docs/Layers/surveillance_camera.md @@ -150,7 +150,7 @@ The question is `How is this camera placed?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/tactile_map.md b/Docs/Layers/tactile_map.md index 92152b48dc..c037465f1f 100644 --- a/Docs/Layers/tactile_map.md +++ b/Docs/Layers/tactile_map.md @@ -104,7 +104,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/tactile_model.md b/Docs/Layers/tactile_model.md index eba3579c8e..0b997cc6f9 100644 --- a/Docs/Layers/tactile_model.md +++ b/Docs/Layers/tactile_model.md @@ -111,7 +111,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/tertiary_education.md b/Docs/Layers/tertiary_education.md index 6670c6aa41..bc45c68065 100644 --- a/Docs/Layers/tertiary_education.md +++ b/Docs/Layers/tertiary_education.md @@ -123,7 +123,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/ticket_machine.md b/Docs/Layers/ticket_machine.md index f45f64be60..7bccb95990 100644 --- a/Docs/Layers/ticket_machine.md +++ b/Docs/Layers/ticket_machine.md @@ -149,7 +149,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/ticket_validator.md b/Docs/Layers/ticket_validator.md index f3c4ae7410..e1ccf7b8f5 100644 --- a/Docs/Layers/ticket_validator.md +++ b/Docs/Layers/ticket_validator.md @@ -107,7 +107,7 @@ The question is `Which methods of payment are accepted here?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/toekomstige_fietsstraat.md b/Docs/Layers/toekomstige_fietsstraat.md index 411b6f742a..2ad79bb440 100644 --- a/Docs/Layers/toekomstige_fietsstraat.md +++ b/Docs/Layers/toekomstige_fietsstraat.md @@ -80,7 +80,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### split_button diff --git a/Docs/Layers/toilet.md b/Docs/Layers/toilet.md index 2c0e8229fc..f999aeddb3 100644 --- a/Docs/Layers/toilet.md +++ b/Docs/Layers/toilet.md @@ -22,8 +22,6 @@ A layer showing (public) toilets - [payment-options-split](#payment-options-split) - [opening_hours_24_7](#opening_hours_24_7) - [Opening hours](#opening-hours) - - [toilets-wheelchair](#toilets-wheelchair) - - [wheelchair-door-width](#wheelchair-door-width) - [toilets-type](#toilets-type) - [gender_segregated](#gender_segregated) - [menstrual_products](#menstrual_products) @@ -35,6 +33,14 @@ A layer showing (public) toilets - [toilet-handwashing](#toilet-handwashing) - [toilet-drying](#toilet-drying) - [description](#description) + - [wheelchair-group](#wheelchair-group) + - [wheelchair-picture-carousel](#wheelchair-picture-carousel) + - [wheelchair-picture](#wheelchair-picture) + - [toilets-wheelchair](#toilets-wheelchair) + - [wheelchair-title](#wheelchair-title) + - [wheelchair-access](#wheelchair-access) + - [wheelchair-door-width](#wheelchair-door-width) + - [questions-wheelchair](#questions-wheelchair) - [leftover-questions](#leftover-questions) - [move-button](#move-button) - [delete-button](#delete-button) @@ -78,8 +84,6 @@ Elements must match the expression ** [fee](https://wiki.openstreetmap.org/wiki/Key:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno) | | [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [string](../SpecialInputElements.md#string) | | | [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7) | -| [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) | -| [door:width](https://wiki.openstreetmap.org/wiki/Key:door:width) | [pfloat](../SpecialInputElements.md#pfloat) | | | [toilets:position](https://wiki.openstreetmap.org/wiki/Key:toilets:position) | Multiple choice | [seated](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Dseated) [urinal](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Durinal) [squat](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Dsquat) [seated;urinal](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Dseated;urinal) | | [gender_segregated](https://wiki.openstreetmap.org/wiki/Key:gender_segregated) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:gender_segregated%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:gender_segregated%3Dno) | | [toilets:menstrual_products](https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dno) | @@ -91,6 +95,10 @@ Elements must match the expression ** [toilets:handwashing](https://wiki.openstreetmap.org/wiki/Key:toilets:handwashing) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dno) | | [toilets:hands_drying](https://wiki.openstreetmap.org/wiki/Key:toilets:hands_drying) | Multiple choice | [electric_hand_dryer](https://wiki.openstreetmap.org/wiki/Tag:toilets:hands_drying%3Delectric_hand_dryer) [paper_towel](https://wiki.openstreetmap.org/wiki/Tag:toilets:hands_drying%3Dpaper_towel) [towel_cabinet](https://wiki.openstreetmap.org/wiki/Tag:toilets:hands_drying%3Dtowel_cabinet) [towel](https://wiki.openstreetmap.org/wiki/Tag:toilets:hands_drying%3Dtowel) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:hands_drying%3Dno) | | [description](https://wiki.openstreetmap.org/wiki/Key:description) | [text](../SpecialInputElements.md#text) | | +| [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) | +| [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) | +| [toilets:wheelchair:access](https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair:access) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair:access%3Dyes) [key](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair:access%3Dkey) | +| [door:width](https://wiki.openstreetmap.org/wiki/Key:door:width) | [pfloat](../SpecialInputElements.md#pfloat) | | ### images This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images @@ -184,26 +192,7 @@ The question is `When are these toilets opened?` This tagrendering has labels `relevant-questions` - -### toilets-wheelchair - -The question is `Is there a dedicated toilet for wheelchair users?` - - - *There is a dedicated toilet for wheelchair users* is shown if with wheelchair=yes - - *No wheelchair access* is shown if with wheelchair=no - - *There is only a dedicated toilet for wheelchair users* is shown if with wheelchair=designated - -This tagrendering has labels -`relevant-questions` - -### wheelchair-door-width - -The question is `What is the width of the door to the wheelchair accessible toilet?` -*The door to the wheelchair-accessible toilet is {canonical(door:width)} wide* is shown if `door:width` is set - -This tagrendering is only visible in the popup if the following condition is met: wheelchair=yes | wheelchair=designated -This tagrendering has labels -`relevant-questions` +`no-prefix` ### toilets-type @@ -216,6 +205,7 @@ The question is `Which kind of toilets are these?` This tagrendering has labels `relevant-questions` +`prefixed` ### gender_segregated @@ -224,6 +214,10 @@ The question is `Are these toilets gender-segregated?` - *There is a separate, signposted area for men and women* is shown if with gender_segregated=yes - *There is no separate, signposted area for men and women* is shown if with gender_segregated=no +This tagrendering has labels +`relevant-questions` +`no-prefix` + ### menstrual_products The question is `Are free, menstrual products distributed here?` @@ -232,6 +226,10 @@ The question is `Are free, menstrual products distributed here?` - *Free menstrual products are available to some visitors of these toilets* is shown if with toilets:menstrual_products=limited - *No free menstrual products are available here* is shown if with toilets:menstrual_products=no +This tagrendering has labels +`relevant-questions` +`prefixed` + ### menstrual_products_location The question is `Where are the free menstrual products located?` @@ -242,6 +240,9 @@ The question is `Where are the free menstrual products located?` - *The free, menstrual products are located in the toilet for wheelchair users* is shown if with toilets:menstrual_products:location=wheelchair_toilet This tagrendering is only visible in the popup if the following condition is met: toilets:menstrual_products=limited | toilets:menstrual_products:location~.+ +This tagrendering has labels +`relevant-questions` +`prefixed` ### toilets-changing-table @@ -252,6 +253,7 @@ The question is `Is a changing table (to change diapers) available?` This tagrendering has labels `relevant-questions` +`no-prefix` ### toilet-changing_table:location @@ -266,6 +268,7 @@ The question is `Where is the changing table located?` This tagrendering is only visible in the popup if the following condition is met: changing_table=yes This tagrendering has labels `relevant-questions` +`no-prefix` ### toilet-supervised @@ -275,6 +278,10 @@ The question is `Is this toilets supervised by a person?` - *There is a person supervising these toilets, but they are present only during certain times of the opening hours* is shown if with supervised=interval - *These toilets are not supervised* is shown if with supervised=no +This tagrendering has labels +`relevant-questions` +`no-prefix` + ### toilet-has-paper The question is `Does one have to bring their own toilet paper to this toilet?` @@ -294,6 +301,7 @@ The question is `Do these toilets have a sink to wash your hands?` This tagrendering has labels `relevant-questions` +`prefixed` ### toilet-drying @@ -306,16 +314,114 @@ The question is `Do these toilets have a device to dry your hands?` - *There are no hand drying facilities available.* is shown if with toilets:hands_drying=no This tagrendering is only visible in the popup if the following condition is met: toilets:handwashing=yes +This tagrendering has labels +`relevant-questions` +`prefixed` ### description The question is `Is there still some relevant info that the previous questions did not cover? Feel free to add it here.` *{description}* is shown if `description` is set +### wheelchair-group + +_This tagrendering has no question and is thus read-only_ +*{group(wheelchair-title,wheelchair)}* + +This tagrendering has labels +`relevant-questions` +`prefixed` + +### wheelchair-picture-carousel + +_This tagrendering has no question and is thus read-only_ +*{image_carousel(toilets:wheelchair:panoramax;toilets:wheelchair:image;toilets:wheelchair:mapillary)}* + +This tagrendering is only visible in the popup if the following condition is met: wheelchair=yes +This tagrendering has labels +`wheelchair` +`hidden` +`relevant-questions` +`prefixed` + +### wheelchair-picture + +_This tagrendering has no question and is thus read-only_ +*{image_upload(toilets:wheelchair:panoramax,Add a picture of the wheelchair accessible toilet,)}* + +This tagrendering is only visible in the popup if the following condition is met: wheelchair=yes +This tagrendering has labels +`wheelchair` +`hidden` +`relevant-questions` +`prefixed` + +### toilets-wheelchair + +The question is `Is there a dedicated toilet for wheelchair users?` + + - *There is a dedicated toilet for wheelchair users* is shown if with wheelchair=yes + - *No wheelchair access* is shown if with wheelchair=no + - *There is only a dedicated toilet for wheelchair users* is shown if with wheelchair=designated + +This tagrendering has labels +`relevant-questions` +`wheelchair` +`hidden` +`no-prefix` + +### wheelchair-title + +_This tagrendering has no question and is thus read-only_ +*Wheelchair accessible toilet* + + - *No wheelchair accessible toilet* is shown if with wheelchair=no + +This tagrendering has labels +`hidden` +`relevant-questions` +`no-prefix` + +### wheelchair-access + +The question is `Is the wheelchair-accessible toilet locked?` + + - *The wheelchair accessible toilets are freely accessible* is shown if with toilets:wheelchair:access=yes + - *One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key* is shown if with toilets:wheelchair:access=key + +This tagrendering is only visible in the popup if the following condition is met: wheelchair=yes & (access=yes | access=public | access=customers) +This tagrendering has labels +`hidden` +`wheelchair` +`relevant-questions` +`prefixed` + +### wheelchair-door-width + +The question is `What is the width of the door to the wheelchair accessible toilet?` +*The door to the wheelchair-accessible toilet is {canonical(door:width)} wide* is shown if `door:width` is set + +This tagrendering is only visible in the popup if the following condition is met: wheelchair=yes | wheelchair=designated +This tagrendering has labels +`relevant-questions` +`wheelchair` +`hidden` +`prefixed` + +### questions-wheelchair + +_This tagrendering has no question and is thus read-only_ +*{questions(wheelchair,)}* + +This tagrendering has labels +`wheelchair` +`hidden` +`relevant-questions` + ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,wheelchair;hidden)}* ### move-button diff --git a/Docs/Layers/toilet_at_amenity.md b/Docs/Layers/toilet_at_amenity.md index 623563319c..66b725c394 100644 --- a/Docs/Layers/toilet_at_amenity.md +++ b/Docs/Layers/toilet_at_amenity.md @@ -228,7 +228,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### delete-button diff --git a/Docs/Layers/tool_library.md b/Docs/Layers/tool_library.md index 9964463c39..cb369ad83c 100644 --- a/Docs/Layers/tool_library.md +++ b/Docs/Layers/tool_library.md @@ -137,7 +137,7 @@ The question is `Is a fee asked to borrow tools?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/tourism_accomodation.md b/Docs/Layers/tourism_accomodation.md index 114f1e38a6..bfd761ee1a 100644 --- a/Docs/Layers/tourism_accomodation.md +++ b/Docs/Layers/tourism_accomodation.md @@ -81,7 +81,7 @@ Elements must match **any** of the following expressions: | [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | | | [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) | | [toilets:wheelchair](https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Ddesignated) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | @@ -179,7 +179,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -220,7 +220,7 @@ The question is `Are dogs allowed in this business?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/toursistic_places_without_etymology.md b/Docs/Layers/toursistic_places_without_etymology.md index 252af1aa9e..d2ffc58ecf 100644 --- a/Docs/Layers/toursistic_places_without_etymology.md +++ b/Docs/Layers/toursistic_places_without_etymology.md @@ -19,7 +19,8 @@ All objects which have an etymology known - [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) - [simple etymology](#simple-etymology) - [questions](#questions) - - [street-name-sign-image](#street-name-sign-image) + - [streetsign-image-carousel](#streetsign-image-carousel) + - [streetsign-upload](#streetsign-upload) - [minimap](#minimap) - [etymology_multi_apply](#etymology_multi_apply) - [wikipedia](#wikipedia) @@ -76,10 +77,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap diff --git a/Docs/Layers/trail.md b/Docs/Layers/trail.md index da74e69a9e..07e79a32a5 100644 --- a/Docs/Layers/trail.md +++ b/Docs/Layers/trail.md @@ -95,7 +95,7 @@ The question is `Is this trail accessible with a pushchair?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/transit_routes.md b/Docs/Layers/transit_routes.md index 2d7ee9ba09..6fd5ef3de7 100644 --- a/Docs/Layers/transit_routes.md +++ b/Docs/Layers/transit_routes.md @@ -88,7 +88,7 @@ The question is `What company operates this bus line?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/transit_stops.md b/Docs/Layers/transit_stops.md index 95711c1376..31e8155e2e 100644 --- a/Docs/Layers/transit_stops.md +++ b/Docs/Layers/transit_stops.md @@ -133,7 +133,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Layers/tree_node.md b/Docs/Layers/tree_node.md index 3eb8042209..de8c1a25e1 100644 --- a/Docs/Layers/tree_node.md +++ b/Docs/Layers/tree_node.md @@ -165,7 +165,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/trolley_bay.md b/Docs/Layers/trolley_bay.md index 96c76c6e8f..368c4e83c7 100644 --- a/Docs/Layers/trolley_bay.md +++ b/Docs/Layers/trolley_bay.md @@ -91,7 +91,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/utility_pole.md b/Docs/Layers/utility_pole.md new file mode 100644 index 0000000000..cfb14ef487 --- /dev/null +++ b/Docs/Layers/utility_pole.md @@ -0,0 +1,71 @@ +[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources) + +# utility_pole + +Layer showing various types of utility poles. + + - This layer is shown at zoomlevel **18** and higher + +## Table of contents + +1. [Themes using this layer](#themes-using-this-layer) +2. [Presets](#presets) +3. [Basic tags for this layer](#basic-tags-for-this-layer) +4. [Supported attributes](#supported-attributes) + - [street_lamp](#street_lamp) + - [leftover-questions](#leftover-questions) + - [move-button](#move-button) + - [lod](#lod) + +## Themes using this layer + + - [personal](https://mapcomplete.org/personal) + - [street_lighting](https://mapcomplete.org/street_lighting) + +## Presets + +The following options to create new points are included: + + - **a utility pole** which has the following tags:man_made=utility_pole + +## Basic tags for this layer + +Elements must match the expression **man_made=utility_pole** + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22man_made%22%3D%22utility_pole%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + +## Supported attributes + +**Warning:**,this quick overview is incomplete, + +| attribute | type | values which are supported by this layer | +-----|-----|----- | +| [highway](https://wiki.openstreetmap.org/wiki/Key:highway) | Multiple choice | [street_lamp](https://wiki.openstreetmap.org/wiki/Tag:highway%3Dstreet_lamp) [](https://wiki.openstreetmap.org/wiki/Tag:highway%3D) | + +### street_lamp + +The question is `Does this utility pole have a street lamp mounted on it?` + + - *This utility pole has a street lamp mounted on it.* is shown if with highway=street_lamp + - *This utility pole does not have a street lamp mounted on it.* is shown if with highway= + +### leftover-questions + +_This tagrendering has no question and is thus read-only_ +*{questions( ,hidden)}* + +### move-button + +_This tagrendering has no question and is thus read-only_ +*{move_button()}* + +### lod + +_This tagrendering has no question and is thus read-only_ +*{linked_data_from_website()}* + +This tagrendering has labels +`added_by_default` + + +This document is autogenerated from [assets/layers/utility_pole/utility_pole.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/layers/utility_pole/utility_pole.json) diff --git a/Docs/Layers/vending_machine.md b/Docs/Layers/vending_machine.md index 7e1a349361..eba23b3a40 100644 --- a/Docs/Layers/vending_machine.md +++ b/Docs/Layers/vending_machine.md @@ -279,7 +279,7 @@ The question is `Is this vending machine still operational?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/vending_machine_bicycle.md b/Docs/Layers/vending_machine_bicycle.md index d7bd3b22de..651ad2ada7 100644 --- a/Docs/Layers/vending_machine_bicycle.md +++ b/Docs/Layers/vending_machine_bicycle.md @@ -272,7 +272,7 @@ The question is `Is this vending machine still operational?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/veterinary.md b/Docs/Layers/veterinary.md index 318babbd55..3ab493b4bc 100644 --- a/Docs/Layers/veterinary.md +++ b/Docs/Layers/veterinary.md @@ -91,7 +91,7 @@ The question is `What is the name of this veterinarian?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/viewpoint.md b/Docs/Layers/viewpoint.md index e415593258..e7c9b5e0a5 100644 --- a/Docs/Layers/viewpoint.md +++ b/Docs/Layers/viewpoint.md @@ -57,7 +57,7 @@ The question is `Do you want to add a description?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/village_green.md b/Docs/Layers/village_green.md index f92af58670..513a4de115 100644 --- a/Docs/Layers/village_green.md +++ b/Docs/Layers/village_green.md @@ -48,7 +48,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/visitor_information_centre.md b/Docs/Layers/visitor_information_centre.md index a6c999417d..483d17d9e2 100644 --- a/Docs/Layers/visitor_information_centre.md +++ b/Docs/Layers/visitor_information_centre.md @@ -30,7 +30,7 @@ Elements must match **any** of the following expressions: ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/walls_and_buildings.md b/Docs/Layers/walls_and_buildings.md index 3fcc5496c7..8874a41edd 100644 --- a/Docs/Layers/walls_and_buildings.md +++ b/Docs/Layers/walls_and_buildings.md @@ -15,7 +15,9 @@ Special builtin layer providing all walls and buildings. This layer is useful in - This layer is needed as dependency for layer [defibrillator](#defibrillator) - This layer is needed as dependency for layer [entrance](#entrance) - This layer is needed as dependency for layer [ghostsign](#ghostsign) + - This layer is needed as dependency for layer [memorial](#memorial) - This layer is needed as dependency for layer [postboxes](#postboxes) + - This layer is needed as dependency for layer [public_bookcase](#public_bookcase) - This layer is needed as dependency for layer [surveillance_camera](#surveillance_camera) - This layer is needed as dependency for layer [wayside_shrine](#wayside_shrine) - This layer is needed as dependency for layer [facadegardens](#facadegardens) @@ -34,6 +36,8 @@ Special builtin layer providing all walls and buildings. This layer is useful in - [advertising](https://mapcomplete.org/advertising) - [aed](https://mapcomplete.org/aed) - [artwork](https://mapcomplete.org/artwork) + - [bookcases](https://mapcomplete.org/bookcases) + - [circular_economy](https://mapcomplete.org/circular_economy) - [clock](https://mapcomplete.org/clock) - [disaster_response](https://mapcomplete.org/disaster_response) - [facadegardens](https://mapcomplete.org/facadegardens) diff --git a/Docs/Layers/waste_basket.md b/Docs/Layers/waste_basket.md index 1edbd7d12b..45f4bd0b01 100644 --- a/Docs/Layers/waste_basket.md +++ b/Docs/Layers/waste_basket.md @@ -82,7 +82,7 @@ The question is `Does this waste basket have a dispenser for dog excrement bags? ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/waste_basket_dogs.md b/Docs/Layers/waste_basket_dogs.md index fbd7bb6b47..2e4cd28562 100644 --- a/Docs/Layers/waste_basket_dogs.md +++ b/Docs/Layers/waste_basket_dogs.md @@ -73,7 +73,7 @@ The question is `Does this waste basket have a dispenser for dog excrement bags? ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/waste_disposal.md b/Docs/Layers/waste_disposal.md index 75c4cdea08..af87777bcd 100644 --- a/Docs/Layers/waste_disposal.md +++ b/Docs/Layers/waste_disposal.md @@ -82,7 +82,7 @@ The question is `Where is this container located?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/wayside_shrine.md b/Docs/Layers/wayside_shrine.md index 8fa9117819..4e4d77bb38 100644 --- a/Docs/Layers/wayside_shrine.md +++ b/Docs/Layers/wayside_shrine.md @@ -2,10 +2,12 @@ # wayside_shrine -Shrines are religious places that are dedicated to specific deities, saints and other figures of religious importance. Typically, the contain religious depictions and people frequently leave offerings at those places. Wayside shrines are small shrines that can be found next to a road or pathway and are frequented by travellers passing by. +Shrines are religious places that are dedicated to specific deities, saints and other figures of religious importance. Typically, the contain religious depictions and people frequently leave offerings at those places. Wayside shrines are small shrines that can be found next to a road or pathway and are frequented by travellers passing by. Wayside crosses can be seen as a sub-type of a wayside shrine, typically in the form of a Christian cross at the side of the road, typically without votive offerings. - This layer is shown at zoomlevel **12** and higher - This layer will automatically load [walls_and_buildings](./walls_and_buildings.md) into the layout as it depends on it: preset `a wayside shrine mounted on a wall` snaps to this layer (wayside_shrine.presets[1]) + - This layer will automatically load [walls_and_buildings](./walls_and_buildings.md) into the layout as it depends on it: preset `a wayside cross mounted on a wall` snaps to this layer (wayside_shrine.presets[3]) + - This layer will automatically load [walls_and_buildings](./walls_and_buildings.md) into the layout as it depends on it: preset `a mother mary shrine on the first floor` snaps to this layer (wayside_shrine.presets[4]) ## Table of contents @@ -13,13 +15,15 @@ Shrines are religious places that are dedicated to specific deities, saints and 2. [Presets](#presets) 3. [Basic tags for this layer](#basic-tags-for-this-layer) 4. [Supported attributes](#supported-attributes) - - [images](#images) + - [images_no_blur](#images_no_blur) - [shrine_name](#shrine_name) + - [inscription](#inscription) - [religion](#religion) - [denomination_christian](#denomination_christian) - [denomination_muslim](#denomination_muslim) - [denomination_jewish](#denomination_jewish) - [denomination_other](#denomination_other) + - [subject:wikidata](#subjectwikidata) - [repeated](#repeated) - [single_level](#single_level) - [leftover-questions](#leftover-questions) @@ -38,12 +42,18 @@ The following options to create new points are included: - **a wayside shrine** which has the following tags:historic=wayside_shrine - **a wayside shrine mounted on a wall** which has the following tags:historic=wayside_shrine (snaps to layers `walls_and_buildings`) + - **a wayside cross** which has the following tags:historic=wayside_cross & religion=christian + - **a wayside cross mounted on a wall** which has the following tags:religion=christian & historic=wayside_cross (snaps to layers `walls_and_buildings`) + - **a mother mary shrine on the first floor** which has the following tags:historic=wayside_shrine & level=1 & religion=christian & subject:wikidata=Q345 (snaps to layers `walls_and_buildings`) ## Basic tags for this layer -Elements must match the expression **historic=wayside_shrine** +Elements must match **any** of the following expressions: -[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22historic%22%3D%22wayside_shrine%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + - historic=wayside_shrine + - historic=wayside_cross + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22historic%22%3D%22wayside_shrine%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22historic%22%3D%22wayside_cross%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) ## Supported attributes @@ -52,28 +62,39 @@ Elements must match the expression ** [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [inscription](https://wiki.openstreetmap.org/wiki/Key:inscription) | [string](../SpecialInputElements.md#string) | [Ave Maria](https://wiki.openstreetmap.org/wiki/Tag:inscription%3DAve Maria) [I.N.R.I](https://wiki.openstreetmap.org/wiki/Tag:inscription%3DI.N.R.I) | | [religion](https://wiki.openstreetmap.org/wiki/Key:religion) | [string](../SpecialInputElements.md#string) | [christian](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dchristian) [buddhist](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dbuddhist) [hindu](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dhindu) [jain](https://wiki.openstreetmap.org/wiki/Tag:religion%3Djain) [jewish](https://wiki.openstreetmap.org/wiki/Tag:religion%3Djewish) [muslim](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dmuslim) [pagan](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dpagan) [shinto](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dshinto) [sikh](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dsikh) [taoist](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dtaoist) [zoroastrian](https://wiki.openstreetmap.org/wiki/Tag:religion%3Dzoroastrian) | | [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [catholic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dcatholic) [roman_catholic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Droman_catholic) [orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dorthodox) [greek_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dgreek_orthodox) [russian_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Drussian_orthodox) [serbian_orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dserbian_orthodox) [protestant](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dprotestant) [anglican](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Danglican) [adventist](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dadventist) [evangelical](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Devangelical) | | [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [shia](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dshia) [sunni](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dsunni) [sufi](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dsufi) | | [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | [conservative](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dconservative) [orthodox](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dorthodox) [hasidic](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dhasidic) [reform](https://wiki.openstreetmap.org/wiki/Tag:denomination%3Dreform) | | [denomination](https://wiki.openstreetmap.org/wiki/Key:denomination) | [string](../SpecialInputElements.md#string) | | +| [subject:wikidata](https://wiki.openstreetmap.org/wiki/Key:subject:wikidata) | [wikidata](../SpecialInputElements.md#wikidata) | [Q345](https://wiki.openstreetmap.org/wiki/Tag:subject:wikidata%3DQ345) [Q942467](https://wiki.openstreetmap.org/wiki/Tag:subject:wikidata%3DQ942467) [Q302](https://wiki.openstreetmap.org/wiki/Tag:subject:wikidata%3DQ302) [Q164294](https://wiki.openstreetmap.org/wiki/Tag:subject:wikidata%3DQ164294) | | [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1) | -### images -This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images +### images_no_blur +Same as `images`, but uploaded request to disable blurring to the panoramax server _This tagrendering has no question and is thus read-only_ -*{image_carousel()}{image_upload()}* +*{image_carousel()}{image_upload(,,,true)}* ### shrine_name -The question is `What's the name of this shrine?` -*The name of this shrine is {name}* is shown if `name` is set +The question is `What's the name of this {title()}?` +*The name of this {title()} is {name}* is shown if `name` is set - *This shrine does not have a name* is shown if with noname=yes This tagrendering has labels `shrine_questions` +### inscription + +The question is `Is there an inscription?` +*The inscription is {inscription}* is shown if `inscription` is set + + - *No inscription* is shown if with not:inscription=yes + - *The inscription is Ave Maria* is shown if with inscription=Ave Maria + - *The inscription is I.N.R.I.* is shown if with inscription=I.N.R.I + ### religion The question is `To which religion is this shrine dedicated?` @@ -96,7 +117,7 @@ This tagrendering has labels ### denomination_christian -The question is `What's the Christian denomination of the shrine?` +The question is `What's the Christian denomination of this {title()}?` *The religious denomination is {denomination}* is shown if `denomination` is set - *The religious subdenomination is Catholic* is shown if with denomination=catholic @@ -150,6 +171,18 @@ This tagrendering is only visible in the popup if the following condition is met This tagrendering has labels `shrine_questions` +### subject:wikidata + +The question is `Who is depicted?` +*{wikipedia(subject:wikidata)}* is shown if `subject:wikidata` is set + + - *Mother mary is depicted* is shown if with subject:wikidata=Q345 + - *Jesus Christ as a child is depicted* is shown if with subject:wikidata=Q942467 + - *Jesus Christ (as an adult) is depicted* is shown if with subject:wikidata=Q302 + - *Saint Anne (mother of Mary) is depicted* is shown if with subject:wikidata=Q164294 + +This tagrendering is only visible in the popup if the following condition is met: religion=christian + ### repeated _This tagrendering has no question and is thus read-only_ @@ -176,7 +209,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Layers/windturbine.md b/Docs/Layers/windturbine.md index d2ebaafdf9..cc2a984dc7 100644 --- a/Docs/Layers/windturbine.md +++ b/Docs/Layers/windturbine.md @@ -90,7 +90,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/SpecialRenderings.md b/Docs/SpecialRenderings.md index 7de46df1d7..cbf02f0735 100644 --- a/Docs/SpecialRenderings.md +++ b/Docs/SpecialRenderings.md @@ -466,11 +466,11 @@ Creates an image carousel for the given sources. An attempt will be made to gues | name | default | description | -----|-----|----- | -| image_key | image,mapillary,image,wikidata,wikimedia_commons,image,panoramax,image | The keys given to the images, e.g. if image is given, the first picture URL will be added as image, the second as image:0, the third as image:1, etc... Multiple values are allowed if ';'-separated | +| image_key | image;mapillary,image;wikidata;wikimedia_commons,image;panoramax;image | The keys given to the images, e.g. if image is given, the first picture URL will be added as image, the second as image:0, the third as image:1, etc... Multiple values are allowed if ';'-separated | #### Example usage of image_carousel -`{image_carousel(image,mapillary,image,wikidata,wikimedia_commons,image,panoramax,image)}` +`{image_carousel(image;mapillary,image;wikidata;wikimedia_commons,image;panoramax;image)}` ### image_upload @@ -478,13 +478,13 @@ Creates a button where a user can upload an image to IMGUR | name | default | description | -----|-----|----- | -| image-key | _undefined_ | Image tag to add the URL to (or image-tag:0, image-tag:1 when multiple images are added) | +| image_key | panoramax | Image tag to add the URL to (or image-tag:0, image-tag:1 when multiple images are added) | | label | _undefined_ | The text to show on the button | | disable_blur | _undefined_ | If set to 'true' or 'yes', then face blurring will be disabled. To be used sparingly | #### Example usage of image_upload -`{image_upload(,,)}` +`{image_upload(panoramax,,)}` ## notes @@ -1077,7 +1077,7 @@ The special element which shows the questions which are unkown. Added by default | name | default | description | -----|-----|----- | | labels | _undefined_ | One or more ';'-separated labels. If these are given, only questions with these labels will be given. Use `unlabeled` for all questions that don't have an explicit label. If none given, all questions will be shown | -| blacklisted-labels | _undefined_ | One or more ';'-separated labels of questions which should _not_ be included. Default: 'hidden' | +| blacklisted-labels | _undefined_ | One or more ';'-separated labels of questions which should _not_ be included. Note that the questionbox which is added by default will blacklist 'hidden' | #### Example usage of questions diff --git a/Docs/TagInfo/mapcomplete_artwork.json b/Docs/TagInfo/mapcomplete_artwork.json index 586ca1b338..79b9b60169 100644 --- a/Docs/TagInfo/mapcomplete_artwork.json +++ b/Docs/TagInfo/mapcomplete_artwork.json @@ -579,7 +579,7 @@ }, { "key": "name", - "description": "Values of `name` are shown with \"The name of this shrine is {name}\" and can be updated. The question is \"What's the name of this shrine?\" by layer Artworks", + "description": "Values of `name` are shown with \"The name of this {title()} is {name}\" and can be updated. The question is \"What's the name of this {title()}?\" by layer Artworks", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/artwork.md#shrine_name", "icon_url": "./assets/themes/artwork/artwork.svg" }, @@ -675,7 +675,7 @@ }, { "key": "denomination", - "description": "Values of `denomination` are shown with \"The religious denomination is {denomination}\" and can be updated. The question is \"What's the Christian denomination of the shrine?\" by layer Artworks", + "description": "Values of `denomination` are shown with \"The religious denomination is {denomination}\" and can be updated. The question is \"What's the Christian denomination of this {title()}?\" by layer Artworks", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/artwork.md#denomination_christian", "icon_url": "./assets/themes/artwork/artwork.svg" }, diff --git a/Docs/TagInfo/mapcomplete_atm.json b/Docs/TagInfo/mapcomplete_atm.json index 149030a292..edbaa999b1 100644 --- a/Docs/TagInfo/mapcomplete_atm.json +++ b/Docs/TagInfo/mapcomplete_atm.json @@ -85,6 +85,20 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/atm.md#opening_hours_24_7", "icon_url": "./assets/layers/atm/atm.svg" }, + { + "key": "indoor", + "value": "yes", + "description": "indoor=yes is displayed as \"This ATM is located indoors\" by layer ATMs", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/atm.md#indoor", + "icon_url": "./assets/layers/atm/atm.svg" + }, + { + "key": "indoor", + "value": "no", + "description": "indoor=no is displayed as \"This ATM is located outdoors\" by layer ATMs", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/atm.md#indoor", + "icon_url": "./assets/layers/atm/atm.svg" + }, { "key": "cash_out", "description": "cash_out= is displayed as \"You can withdraw cash from this ATM\" by layer ATMs", diff --git a/Docs/TagInfo/mapcomplete_cafes_and_pubs.json b/Docs/TagInfo/mapcomplete_cafes_and_pubs.json index ebeb156429..68d779a8b4 100644 --- a/Docs/TagInfo/mapcomplete_cafes_and_pubs.json +++ b/Docs/TagInfo/mapcomplete_cafes_and_pubs.json @@ -408,8 +408,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Cafés and pubs, Outdoor Seating", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Cafés and pubs, Outdoor Seating", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/cafe_pub.md#internet", "icon_url": "./assets/layers/cafe_pub/pub.svg" }, diff --git a/Docs/TagInfo/mapcomplete_circular_economy.json b/Docs/TagInfo/mapcomplete_circular_economy.json index a729098ed0..ea54a0132a 100644 --- a/Docs/TagInfo/mapcomplete_circular_economy.json +++ b/Docs/TagInfo/mapcomplete_circular_economy.json @@ -2376,8 +2376,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Second hand shops", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Second hand shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shops_second_hand.md#internet", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, diff --git a/Docs/TagInfo/mapcomplete_climbing.json b/Docs/TagInfo/mapcomplete_climbing.json index 0774b37270..1d9633d156 100644 --- a/Docs/TagInfo/mapcomplete_climbing.json +++ b/Docs/TagInfo/mapcomplete_climbing.json @@ -656,8 +656,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Climbing gyms, Shop", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Climbing gyms, Shop", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/climbing_gym.md#internet", "icon_url": "./assets/themes/climbing/climbing_gym.svg" }, @@ -2750,33 +2750,6 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#opening_hours_24_7", "icon_url": "./assets/layers/questions/open24_7.svg" }, - { - "key": "wheelchair", - "value": "yes", - "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "wheelchair", - "value": "no", - "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "wheelchair", - "value": "designated", - "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "door:width", - "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_door_width", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, { "key": "toilets:position", "value": "seated", @@ -2999,6 +2972,114 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilet_drying", "icon_url": "./assets/layers/toilet/toilets.svg" }, + { + "key": "image", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "panoramax", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "mapillary", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikidata", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikipedia", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "image", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "panoramax", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "mapillary", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikidata", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikipedia", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "yes", + "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "designated", + "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair accessible toilet\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_title", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "toilets:wheelchair:access", + "value": "yes", + "description": "toilets:wheelchair:access=yes is displayed as \"The wheelchair accessible toilets are freely accessible\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_access", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "toilets:wheelchair:access", + "value": "key", + "description": "toilets:wheelchair:access=key is displayed as \"One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_access", + "icon_url": "key" + }, + { + "key": "door:width", + "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_door_width", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, { "key": "amenity", "value": "drinking_water", diff --git a/Docs/TagInfo/mapcomplete_cyclofix.json b/Docs/TagInfo/mapcomplete_cyclofix.json index bbb3c3aa21..6097c66ccf 100644 --- a/Docs/TagInfo/mapcomplete_cyclofix.json +++ b/Docs/TagInfo/mapcomplete_cyclofix.json @@ -2018,8 +2018,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Bike repair/shop", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Bike repair/shop", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/bike_shop.md#internet", "icon_url": "./assets/layers/bike_shop/repair_shop.svg" }, diff --git a/Docs/TagInfo/mapcomplete_disaster_response.json b/Docs/TagInfo/mapcomplete_disaster_response.json index cfb6df8467..053640e6db 100644 --- a/Docs/TagInfo/mapcomplete_disaster_response.json +++ b/Docs/TagInfo/mapcomplete_disaster_response.json @@ -718,6 +718,12 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/hydrant.md#hydrant_couplings_diameters", "icon_url": "./assets/themes/hailhydrant/hydrant.svg" }, + { + "key": "ref", + "description": "Values of `ref` are shown with \"Reference number: {ref}\" and can be updated. The question is \"What is the reference number of this hydrant?\" by layer Map of hydrants", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/hydrant.md#ref", + "icon_url": "./assets/themes/hailhydrant/hydrant.svg" + }, { "key": "amenity", "value": "doctors", diff --git a/Docs/TagInfo/mapcomplete_etymology.json b/Docs/TagInfo/mapcomplete_etymology.json index 9a59531095..940e3fa304 100644 --- a/Docs/TagInfo/mapcomplete_etymology.json +++ b/Docs/TagInfo/mapcomplete_etymology.json @@ -30,31 +30,31 @@ }, { "key": "image", - "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary by layers Has etymology, Streets without etymology information, Parks and forests without etymology information, Education institutions without etymology information, Cultural places without etymology information, Touristic places without etymology information, Health and social places without etymology information, Sport places without etymology information, Parks without etymology information", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary by layers Has etymology, Has etymology, Streets without etymology information, Streets without etymology information, Parks and forests without etymology information, Parks and forests without etymology information, Education institutions without etymology information, Education institutions without etymology information, Cultural places without etymology information, Cultural places without etymology information, Touristic places without etymology information, Touristic places without etymology information, Health and social places without etymology information, Health and social places without etymology information, Sport places without etymology information, Sport places without etymology information, Parks without etymology information, Parks without etymology information", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/etymology.md#images", "icon_url": "pin" }, { "key": "panoramax", - "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary by layers Has etymology, Streets without etymology information, Parks and forests without etymology information, Education institutions without etymology information, Cultural places without etymology information, Touristic places without etymology information, Health and social places without etymology information, Sport places without etymology information, Parks without etymology information", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary by layers Has etymology, Has etymology, Streets without etymology information, Streets without etymology information, Parks and forests without etymology information, Parks and forests without etymology information, Education institutions without etymology information, Education institutions without etymology information, Cultural places without etymology information, Cultural places without etymology information, Touristic places without etymology information, Touristic places without etymology information, Health and social places without etymology information, Health and social places without etymology information, Sport places without etymology information, Sport places without etymology information, Parks without etymology information, Parks without etymology information", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/etymology.md#images", "icon_url": "pin" }, { "key": "mapillary", - "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary by layers Has etymology, Streets without etymology information, Parks and forests without etymology information, Education institutions without etymology information, Cultural places without etymology information, Touristic places without etymology information, Health and social places without etymology information, Sport places without etymology information, Parks without etymology information", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary by layers Has etymology, Has etymology, Streets without etymology information, Streets without etymology information, Parks and forests without etymology information, Parks and forests without etymology information, Education institutions without etymology information, Education institutions without etymology information, Cultural places without etymology information, Cultural places without etymology information, Touristic places without etymology information, Touristic places without etymology information, Health and social places without etymology information, Health and social places without etymology information, Sport places without etymology information, Sport places without etymology information, Parks without etymology information, Parks without etymology information", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/etymology.md#images", "icon_url": "pin" }, { "key": "wikidata", - "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary by layers Has etymology, Streets without etymology information, Parks and forests without etymology information, Education institutions without etymology information, Cultural places without etymology information, Touristic places without etymology information, Health and social places without etymology information, Sport places without etymology information, Parks without etymology information", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary by layers Has etymology, Has etymology, Streets without etymology information, Streets without etymology information, Parks and forests without etymology information, Parks and forests without etymology information, Education institutions without etymology information, Education institutions without etymology information, Cultural places without etymology information, Cultural places without etymology information, Touristic places without etymology information, Touristic places without etymology information, Health and social places without etymology information, Health and social places without etymology information, Sport places without etymology information, Sport places without etymology information, Parks without etymology information, Parks without etymology information", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/etymology.md#images", "icon_url": "pin" }, { "key": "wikipedia", - "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary by layers Has etymology, Streets without etymology information, Parks and forests without etymology information, Education institutions without etymology information, Cultural places without etymology information, Touristic places without etymology information, Health and social places without etymology information, Sport places without etymology information, Parks without etymology information", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary by layers Has etymology, Has etymology, Streets without etymology information, Streets without etymology information, Parks and forests without etymology information, Parks and forests without etymology information, Education institutions without etymology information, Education institutions without etymology information, Cultural places without etymology information, Cultural places without etymology information, Touristic places without etymology information, Touristic places without etymology information, Health and social places without etymology information, Health and social places without etymology information, Sport places without etymology information, Sport places without etymology information, Parks without etymology information, Parks without etymology information", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/etymology.md#images", "icon_url": "pin" }, diff --git a/Docs/TagInfo/mapcomplete_food.json b/Docs/TagInfo/mapcomplete_food.json index 1e465c7e6b..96359a7cf4 100644 --- a/Docs/TagInfo/mapcomplete_food.json +++ b/Docs/TagInfo/mapcomplete_food.json @@ -938,8 +938,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Restaurants and fast food, Outdoor Seating", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Restaurants and fast food, Outdoor Seating", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food.md#internet", "icon_url": "./assets/layers/food/restaurant.svg" }, diff --git a/Docs/TagInfo/mapcomplete_fritures.json b/Docs/TagInfo/mapcomplete_fritures.json index 8c6d7d20ed..1e540615f3 100644 --- a/Docs/TagInfo/mapcomplete_fritures.json +++ b/Docs/TagInfo/mapcomplete_fritures.json @@ -944,8 +944,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Fries shop", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Fries shop", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/friture.md#internet", "icon_url": "./assets/layers/food/restaurant.svg" }, diff --git a/Docs/TagInfo/mapcomplete_ghostsigns.json b/Docs/TagInfo/mapcomplete_ghostsigns.json index 6c5235b6eb..e63c537102 100644 --- a/Docs/TagInfo/mapcomplete_ghostsigns.json +++ b/Docs/TagInfo/mapcomplete_ghostsigns.json @@ -948,7 +948,7 @@ }, { "key": "name", - "description": "Values of `name` are shown with \"The name of this shrine is {name}\" and can be updated. The question is \"What's the name of this shrine?\" by layer Artworks", + "description": "Values of `name` are shown with \"The name of this {title()} is {name}\" and can be updated. The question is \"What's the name of this {title()}?\" by layer Artworks", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/artwork_on_wall.md#shrine_name", "icon_url": "./assets/themes/artwork/artwork.svg" }, @@ -1044,7 +1044,7 @@ }, { "key": "denomination", - "description": "Values of `denomination` are shown with \"The religious denomination is {denomination}\" and can be updated. The question is \"What's the Christian denomination of the shrine?\" by layer Artworks", + "description": "Values of `denomination` are shown with \"The religious denomination is {denomination}\" and can be updated. The question is \"What's the Christian denomination of this {title()}?\" by layer Artworks", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/artwork_on_wall.md#denomination_christian", "icon_url": "./assets/themes/artwork/artwork.svg" }, diff --git a/Docs/TagInfo/mapcomplete_glutenfree.json b/Docs/TagInfo/mapcomplete_glutenfree.json index 6792d4d116..7e5d9290bb 100644 --- a/Docs/TagInfo/mapcomplete_glutenfree.json +++ b/Docs/TagInfo/mapcomplete_glutenfree.json @@ -944,8 +944,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Restaurants and fast food, Shop", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Restaurants and fast food, Shop", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_glutenfree.md#internet", "icon_url": "./assets/layers/food/restaurant.svg" }, diff --git a/Docs/TagInfo/mapcomplete_hackerspaces.json b/Docs/TagInfo/mapcomplete_hackerspaces.json index 451ca8728f..df20b5d1c0 100644 --- a/Docs/TagInfo/mapcomplete_hackerspaces.json +++ b/Docs/TagInfo/mapcomplete_hackerspaces.json @@ -461,8 +461,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Hackerspace", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Hackerspace", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/hackerspace.md#internet", "icon_url": "./assets/themes/hackerspaces/glider.svg" }, diff --git a/Docs/TagInfo/mapcomplete_hailhydrant.json b/Docs/TagInfo/mapcomplete_hailhydrant.json index 61872299af..ee680df93a 100644 --- a/Docs/TagInfo/mapcomplete_hailhydrant.json +++ b/Docs/TagInfo/mapcomplete_hailhydrant.json @@ -155,6 +155,12 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/hydrant.md#hydrant_couplings_diameters", "icon_url": "./assets/themes/hailhydrant/hydrant.svg" }, + { + "key": "ref", + "description": "Values of `ref` are shown with \"Reference number: {ref}\" and can be updated. The question is \"What is the reference number of this hydrant?\" by layer Map of hydrants", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/hydrant.md#ref", + "icon_url": "./assets/themes/hailhydrant/hydrant.svg" + }, { "key": "image", "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary by layers Map of hydrants, Map of fire extinguishers, Map of fire stations, Map of ambulance stations", diff --git a/Docs/TagInfo/mapcomplete_healthcare.json b/Docs/TagInfo/mapcomplete_healthcare.json index e4d70343fa..29d96f71bb 100644 --- a/Docs/TagInfo/mapcomplete_healthcare.json +++ b/Docs/TagInfo/mapcomplete_healthcare.json @@ -1995,8 +1995,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Shop", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Shop", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/medical_shops.md#internet", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, diff --git a/Docs/TagInfo/mapcomplete_hotels.json b/Docs/TagInfo/mapcomplete_hotels.json index 10e57a14a4..892159f606 100644 --- a/Docs/TagInfo/mapcomplete_hotels.json +++ b/Docs/TagInfo/mapcomplete_hotels.json @@ -256,8 +256,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Tourism accomodation", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Tourism accomodation", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/tourism_accomodation.md#internet", "icon_url": "./assets/layers/tourism_accomodation/hostel.svg" }, diff --git a/Docs/TagInfo/mapcomplete_indoors.json b/Docs/TagInfo/mapcomplete_indoors.json index 8ba1d6e0c2..503710ca97 100644 --- a/Docs/TagInfo/mapcomplete_indoors.json +++ b/Docs/TagInfo/mapcomplete_indoors.json @@ -414,29 +414,6 @@ "description": "opening_hours=closed is displayed as \"Marked as closed for an unspecified time\" by layer Indoors", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/indoors.md#opening_hours_24_7" }, - { - "key": "wheelchair", - "value": "yes", - "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Indoors", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/indoors.md#toilets_wheelchair" - }, - { - "key": "wheelchair", - "value": "no", - "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Indoors", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/indoors.md#toilets_wheelchair" - }, - { - "key": "wheelchair", - "value": "designated", - "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Indoors", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/indoors.md#toilets_wheelchair" - }, - { - "key": "door:width", - "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Indoors", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/indoors.md#wheelchair_door_width" - }, { "key": "toilets:position", "value": "seated", @@ -527,6 +504,42 @@ "description": "toilets:handwashing=no is displayed as \"These toilets don't have a sink to wash your hands\" by layer Indoors", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/indoors.md#toilet_handwashing" }, + { + "key": "wheelchair", + "value": "yes", + "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Indoors", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/indoors.md#toilets_wheelchair" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Indoors", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/indoors.md#toilets_wheelchair" + }, + { + "key": "wheelchair", + "value": "designated", + "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Indoors", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/indoors.md#toilets_wheelchair" + }, + { + "key": "toilets:wheelchair:access", + "value": "yes", + "description": "toilets:wheelchair:access=yes is displayed as \"The wheelchair accessible toilets are freely accessible\" by layer Indoors", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/indoors.md#wheelchair_access" + }, + { + "key": "toilets:wheelchair:access", + "value": "key", + "description": "toilets:wheelchair:access=key is displayed as \"One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key\" by layer Indoors", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/indoors.md#wheelchair_access", + "icon_url": "key" + }, + { + "key": "door:width", + "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Indoors", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/indoors.md#wheelchair_door_width" + }, { "key": "highway", "value": "footway", diff --git a/Docs/TagInfo/mapcomplete_lactosefree.json b/Docs/TagInfo/mapcomplete_lactosefree.json index 9b83c946e3..b289b10efe 100644 --- a/Docs/TagInfo/mapcomplete_lactosefree.json +++ b/Docs/TagInfo/mapcomplete_lactosefree.json @@ -944,8 +944,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Restaurants and fast food, Shop", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Restaurants and fast food, Shop", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_lactosefree.md#internet", "icon_url": "./assets/layers/food/restaurant.svg" }, diff --git a/Docs/TagInfo/mapcomplete_memorials.json b/Docs/TagInfo/mapcomplete_memorials.json index 69a9fc5ad7..9c006f2ba4 100644 --- a/Docs/TagInfo/mapcomplete_memorials.json +++ b/Docs/TagInfo/mapcomplete_memorials.json @@ -700,7 +700,7 @@ }, { "key": "name", - "description": "Values of `name` are shown with \"The name of this shrine is {name}\" and can be updated. The question is \"What's the name of this shrine?\" by layer Artworks", + "description": "Values of `name` are shown with \"The name of this {title()} is {name}\" and can be updated. The question is \"What's the name of this {title()}?\" by layer Artworks", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/artwork.md#shrine_name", "icon_url": "./assets/themes/artwork/artwork.svg" }, @@ -796,7 +796,7 @@ }, { "key": "denomination", - "description": "Values of `denomination` are shown with \"The religious denomination is {denomination}\" and can be updated. The question is \"What's the Christian denomination of the shrine?\" by layer Artworks", + "description": "Values of `denomination` are shown with \"The religious denomination is {denomination}\" and can be updated. The question is \"What's the Christian denomination of this {title()}?\" by layer Artworks", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/artwork.md#denomination_christian", "icon_url": "./assets/themes/artwork/artwork.svg" }, diff --git a/Docs/TagInfo/mapcomplete_nature.json b/Docs/TagInfo/mapcomplete_nature.json index ed74c20a6c..40b9a4599b 100644 --- a/Docs/TagInfo/mapcomplete_nature.json +++ b/Docs/TagInfo/mapcomplete_nature.json @@ -1310,33 +1310,6 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#opening_hours_24_7", "icon_url": "./assets/layers/toilet/toilets.svg" }, - { - "key": "wheelchair", - "value": "yes", - "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "wheelchair", - "value": "no", - "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "wheelchair", - "value": "designated", - "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "door:width", - "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_door_width", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, { "key": "toilets:position", "value": "seated", @@ -1565,6 +1538,114 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#description", "icon_url": "./assets/layers/toilet/toilets.svg" }, + { + "key": "image", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "panoramax", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "mapillary", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikidata", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikipedia", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "image", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "panoramax", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "mapillary", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikidata", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikipedia", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "yes", + "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "designated", + "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair accessible toilet\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_title", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "toilets:wheelchair:access", + "value": "yes", + "description": "toilets:wheelchair:access=yes is displayed as \"The wheelchair accessible toilets are freely accessible\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_access", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "toilets:wheelchair:access", + "value": "key", + "description": "toilets:wheelchair:access=key is displayed as \"One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_access", + "icon_url": "key" + }, + { + "key": "door:width", + "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_door_width", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, { "key": "information", "value": "guidepost", diff --git a/Docs/TagInfo/mapcomplete_onwheels.json b/Docs/TagInfo/mapcomplete_onwheels.json index 2c96a7edb9..04834da003 100644 --- a/Docs/TagInfo/mapcomplete_onwheels.json +++ b/Docs/TagInfo/mapcomplete_onwheels.json @@ -408,8 +408,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Cafés and pubs, Restaurants and fast food, Shop, Tourism accomodation", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Cafés and pubs, Restaurants and fast food, Shop, Tourism accomodation", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/cafe_pub.md#internet", "icon_url": "./assets/themes/onwheels/cafe.svg" }, @@ -3296,33 +3296,6 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#opening_hours_24_7", "icon_url": "./assets/layers/questions/open24_7.svg" }, - { - "key": "wheelchair", - "value": "yes", - "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/themes/onwheels/toilet.svg" - }, - { - "key": "wheelchair", - "value": "no", - "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/themes/onwheels/toilet.svg" - }, - { - "key": "wheelchair", - "value": "designated", - "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/themes/onwheels/toilet.svg" - }, - { - "key": "door:width", - "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_door_width", - "icon_url": "./assets/themes/onwheels/toilet.svg" - }, { "key": "toilets:position", "value": "seated", @@ -3545,6 +3518,114 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilet_drying", "icon_url": "./assets/themes/onwheels/toilet.svg" }, + { + "key": "image", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "panoramax", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "mapillary", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "wikidata", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "wikipedia", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "image", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "panoramax", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "mapillary", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "wikidata", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "wikipedia", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "wheelchair", + "value": "yes", + "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "wheelchair", + "value": "designated", + "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair accessible toilet\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_title", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "toilets:wheelchair:access", + "value": "yes", + "description": "toilets:wheelchair:access=yes is displayed as \"The wheelchair accessible toilets are freely accessible\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_access", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, + { + "key": "toilets:wheelchair:access", + "value": "key", + "description": "toilets:wheelchair:access=key is displayed as \"One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_access", + "icon_url": "key" + }, + { + "key": "door:width", + "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_door_width", + "icon_url": "./assets/themes/onwheels/toilet.svg" + }, { "key": "amenity", "value": "pharmacy", diff --git a/Docs/TagInfo/mapcomplete_pets.json b/Docs/TagInfo/mapcomplete_pets.json index 6c73d36709..c70c958a5c 100644 --- a/Docs/TagInfo/mapcomplete_pets.json +++ b/Docs/TagInfo/mapcomplete_pets.json @@ -33,37 +33,37 @@ }, { "key": "id", - "description": "id~.+ is displayed as \"You just created this element! Thanks for sharing this info with the world and helping people worldwide.\" by layers dog parks, veterinary, Animal shelters, Dog toilets, Dog friendly eateries, Dog-friendly shops, Waste baskets with excrement bag dispensers", + "description": "id~.+ is displayed as \"You just created this element! Thanks for sharing this info with the world and helping people worldwide.\" by layers dog parks, veterinary, Animal shelters, Dog toilets, Dog friendly eateries, Pet stores, Dog-friendly shops, Waste baskets with excrement bag dispensers", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/dogpark.md#just_created", "icon_url": "./assets/svg/party.svg" }, { "key": "image", - "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary by layers dog parks, Animal shelters, Dog toilets, Dog friendly eateries, Dog friendly eateries, Dog-friendly shops, Waste baskets with excrement bag dispensers", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary by layers dog parks, Animal shelters, Dog toilets, Dog friendly eateries, Dog friendly eateries, Pet stores, Dog-friendly shops, Waste baskets with excrement bag dispensers", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/dogpark.md#images", "icon_url": "./assets/layers/dogpark/dog-park.svg" }, { "key": "panoramax", - "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary by layers dog parks, Animal shelters, Dog toilets, Dog friendly eateries, Dog friendly eateries, Dog-friendly shops, Waste baskets with excrement bag dispensers", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary by layers dog parks, Animal shelters, Dog toilets, Dog friendly eateries, Dog friendly eateries, Pet stores, Dog-friendly shops, Waste baskets with excrement bag dispensers", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/dogpark.md#images", "icon_url": "./assets/layers/dogpark/dog-park.svg" }, { "key": "mapillary", - "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary by layers dog parks, Animal shelters, Dog toilets, Dog friendly eateries, Dog friendly eateries, Dog-friendly shops, Waste baskets with excrement bag dispensers", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary by layers dog parks, Animal shelters, Dog toilets, Dog friendly eateries, Dog friendly eateries, Pet stores, Dog-friendly shops, Waste baskets with excrement bag dispensers", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/dogpark.md#images", "icon_url": "./assets/layers/dogpark/dog-park.svg" }, { "key": "wikidata", - "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary by layers dog parks, Animal shelters, Dog toilets, Dog friendly eateries, Dog friendly eateries, Dog-friendly shops, Waste baskets with excrement bag dispensers", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary by layers dog parks, Animal shelters, Dog toilets, Dog friendly eateries, Dog friendly eateries, Pet stores, Dog-friendly shops, Waste baskets with excrement bag dispensers", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/dogpark.md#images", "icon_url": "./assets/layers/dogpark/dog-park.svg" }, { "key": "wikipedia", - "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary by layers dog parks, Animal shelters, Dog toilets, Dog friendly eateries, Dog friendly eateries, Dog-friendly shops, Waste baskets with excrement bag dispensers", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary by layers dog parks, Animal shelters, Dog toilets, Dog friendly eateries, Dog friendly eateries, Pet stores, Dog-friendly shops, Waste baskets with excrement bag dispensers", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/dogpark.md#images", "icon_url": "./assets/layers/dogpark/dog-park.svg" }, @@ -75,7 +75,7 @@ }, { "key": "opening_hours", - "description": "Values of `opening_hours` are shown with \"

Opening hours

{opening_hours_table(opening_hours)}\" and can be updated. The question is \"What are the opening hours of {title()}?\" by layers dog parks, veterinary, Animal shelters, Dog friendly eateries, Dog-friendly shops", + "description": "Values of `opening_hours` are shown with \"

Opening hours

{opening_hours_table(opening_hours)}\" and can be updated. The question is \"What are the opening hours of {title()}?\" by layers dog parks, veterinary, Animal shelters, Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/dogpark.md#opening_hours_24_7", "icon_url": "./assets/layers/dogpark/dog-park.svg" }, @@ -89,19 +89,19 @@ { "key": "opening_hours", "value": "closed", - "description": "opening_hours=closed is displayed as \"Marked as closed for an unspecified time\" by layers dog parks, veterinary, Animal shelters, Dog friendly eateries, Dog-friendly shops", + "description": "opening_hours=closed is displayed as \"Marked as closed for an unspecified time\" by layers dog parks, veterinary, Animal shelters, Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/dogpark.md#opening_hours_24_7", "icon_url": "./assets/layers/dogpark/dog-park.svg" }, { "key": "website", - "description": "Values of `website` are shown with \"{website}\" and can be updated. The question is \"What is the website of {title()}?\" by layers dog parks, veterinary, Animal shelters, Dog friendly eateries, Dog-friendly shops", + "description": "Values of `website` are shown with \"{website}\" and can be updated. The question is \"What is the website of {title()}?\" by layers dog parks, veterinary, Animal shelters, Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/dogpark.md#website", "icon_url": "./assets/layers/icons/website.svg" }, { "key": "contact:website", - "description": "contact:website~.+ is displayed as \"{contact:website}\" by layers dog parks, veterinary, Animal shelters, Dog friendly eateries, Dog-friendly shops", + "description": "contact:website~.+ is displayed as \"{contact:website}\" by layers dog parks, veterinary, Animal shelters, Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/dogpark.md#website", "icon_url": "./assets/layers/icons/website.svg" }, @@ -142,13 +142,13 @@ }, { "key": "phone", - "description": "Values of `phone` are shown with \"{link(&LBRACEphone&RBRACE,tel:&LBRACEphone&RBRACE,,,,)}\" and can be updated. The question is \"What is the phone number of {title()}?\" by layers veterinary, Animal shelters, Dog friendly eateries, Dog-friendly shops", + "description": "Values of `phone` are shown with \"{link(&LBRACEphone&RBRACE,tel:&LBRACEphone&RBRACE,,,,)}\" and can be updated. The question is \"What is the phone number of {title()}?\" by layers veterinary, Animal shelters, Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/veterinary.md#phone", "icon_url": "./assets/layers/questions/phone.svg" }, { "key": "contact:phone", - "description": "contact:phone~.+ is displayed as \"{link(&LBRACEcontact:phone&RBRACE,tel:&LBRACEcontact:phone&RBRACE,,,,)}\" by layers veterinary, Animal shelters, Dog friendly eateries, Dog-friendly shops", + "description": "contact:phone~.+ is displayed as \"{link(&LBRACEcontact:phone&RBRACE,tel:&LBRACEcontact:phone&RBRACE,,,,)}\" by layers veterinary, Animal shelters, Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/veterinary.md#phone", "icon_url": "./assets/layers/questions/phone.svg" }, @@ -173,19 +173,19 @@ }, { "key": "email", - "description": "Values of `email` are shown with \"{email}\" and can be updated. The question is \"What is the email address of {title()}?\" by layers Animal shelters, Dog friendly eateries, Dog-friendly shops", + "description": "Values of `email` are shown with \"{email}\" and can be updated. The question is \"What is the email address of {title()}?\" by layers Animal shelters, Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/animal_shelter.md#email", "icon_url": "./assets/svg/envelope.svg" }, { "key": "contact:email", - "description": "contact:email~.+ is displayed as \"{contact:email}\" by layers Animal shelters, Dog friendly eateries, Dog-friendly shops", + "description": "contact:email~.+ is displayed as \"{contact:email}\" by layers Animal shelters, Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/animal_shelter.md#email", "icon_url": "./assets/svg/envelope.svg" }, { "key": "operator:email", - "description": "operator:email~.+ is displayed as \"{operator:email}\" by layers Animal shelters, Dog friendly eateries, Dog-friendly shops", + "description": "operator:email~.+ is displayed as \"{operator:email}\" by layers Animal shelters, Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/animal_shelter.md#email", "icon_url": "./assets/svg/envelope.svg" }, @@ -350,61 +350,61 @@ { "key": "payment:cash", "value": "yes", - "description": "payment:cash=yes is displayed as \"Cash is accepted here\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "payment:cash=yes is displayed as \"Cash is accepted here\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#payment_options", "icon_url": "./assets/layers/questions/cash.svg" }, { "key": "payment:cards", "value": "yes", - "description": "payment:cards=yes is displayed as \"Payment cards are accepted here\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "payment:cards=yes is displayed as \"Payment cards are accepted here\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#payment_options", "icon_url": "./assets/layers/questions/payment_card.svg" }, { "key": "payment:qr_code", "value": "yes", - "description": "payment:qr_code=yes is displayed as \"Payment by QR-code is possible here\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "payment:qr_code=yes is displayed as \"Payment by QR-code is possible here\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#payment_options", "icon_url": "./assets/layers/questions/qrcode.svg" }, { "key": "level", - "description": "Values of `level` are shown with \"Located on the {level}th floor\" and can be updated. The question is \"On what level is this feature located?\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "Values of `level` are shown with \"Located on the {level}th floor\" and can be updated. The question is \"On what level is this feature located?\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#single_level", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "location", "value": "underground", - "description": "location=underground is displayed as \"Located underground\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "location=underground is displayed as \"Located underground\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#single_level", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "level", "value": "0", - "description": "level=0 is displayed as \"Located on the ground floor\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "level=0 is displayed as \"Located on the ground floor\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#single_level", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "level", - "description": "level= is displayed as \"Located on the ground floor\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "level= is displayed as \"Located on the ground floor\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#single_level", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "level", "value": "1", - "description": "level=1 is displayed as \"Located on the first floor\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "level=1 is displayed as \"Located on the first floor\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#single_level", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "level", "value": "-1", - "description": "level=-1 is displayed as \"Located on the first basement level\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "level=-1 is displayed as \"Located on the first basement level\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#single_level", "icon_url": "./assets/layers/food/restaurant.svg" }, @@ -934,84 +934,84 @@ { "key": "diet:sugar_free", "value": "only", - "description": "diet:sugar_free=only is displayed as \"This shop only sells sugar free products\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "diet:sugar_free=only is displayed as \"This shop only sells sugar free products\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#sugar_free", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "diet:sugar_free", "value": "yes", - "description": "diet:sugar_free=yes is displayed as \"This shop has a big sugar free offering\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "diet:sugar_free=yes is displayed as \"This shop has a big sugar free offering\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#sugar_free", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "diet:sugar_free", "value": "limited", - "description": "diet:sugar_free=limited is displayed as \"This shop has a limited sugar free offering\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "diet:sugar_free=limited is displayed as \"This shop has a limited sugar free offering\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#sugar_free", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "diet:sugar_free", "value": "no", - "description": "diet:sugar_free=no is displayed as \"This shop has no sugar free offering\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "diet:sugar_free=no is displayed as \"This shop has no sugar free offering\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#sugar_free", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "diet:gluten_free", "value": "only", - "description": "diet:gluten_free=only is displayed as \"This shop only sells gluten free products\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "diet:gluten_free=only is displayed as \"This shop only sells gluten free products\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#gluten_free", "icon_url": "./assets/layers/questions/glutenfree.svg" }, { "key": "diet:gluten_free", "value": "yes", - "description": "diet:gluten_free=yes is displayed as \"This shop has a big gluten free offering\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "diet:gluten_free=yes is displayed as \"This shop has a big gluten free offering\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#gluten_free", "icon_url": "./assets/layers/questions/glutenfree.svg" }, { "key": "diet:gluten_free", "value": "limited", - "description": "diet:gluten_free=limited is displayed as \"This shop has a limited gluten free offering\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "diet:gluten_free=limited is displayed as \"This shop has a limited gluten free offering\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#gluten_free", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "diet:gluten_free", "value": "no", - "description": "diet:gluten_free=no is displayed as \"This shop has no gluten free offering\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "diet:gluten_free=no is displayed as \"This shop has no gluten free offering\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#gluten_free", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "diet:lactose_free", "value": "only", - "description": "diet:lactose_free=only is displayed as \"Only sells lactose free products\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "diet:lactose_free=only is displayed as \"Only sells lactose free products\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#lactose_free", "icon_url": "./assets/layers/questions/lactose_free.svg" }, { "key": "diet:lactose_free", "value": "yes", - "description": "diet:lactose_free=yes is displayed as \"Big lactose free offering\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "diet:lactose_free=yes is displayed as \"Big lactose free offering\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#lactose_free", "icon_url": "./assets/layers/questions/lactose_free.svg" }, { "key": "diet:lactose_free", "value": "limited", - "description": "diet:lactose_free=limited is displayed as \"Limited lactose free offering\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "diet:lactose_free=limited is displayed as \"Limited lactose free offering\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#lactose_free", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "diet:lactose_free", "value": "no", - "description": "diet:lactose_free=no is displayed as \"No lactose free offering\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "diet:lactose_free=no is displayed as \"No lactose free offering\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#lactose_free", "icon_url": "./assets/layers/food/restaurant.svg" }, @@ -1081,1726 +1081,1733 @@ { "key": "dog", "value": "yes", - "description": "dog=yes is displayed as \"Dogs are allowed\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "dog=yes is displayed as \"Dogs are allowed\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#dog_access", "icon_url": "./assets/layers/questions/dogs_allowed.svg" }, { "key": "dog", "value": "no", - "description": "dog=no is displayed as \"Dogs are not allowed\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "dog=no is displayed as \"Dogs are not allowed\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#dog_access", "icon_url": "./assets/layers/questions/no_dogs.svg" }, { "key": "dog", "value": "leashed", - "description": "dog=leashed is displayed as \"Dogs are allowed, but they have to be leashed\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "dog=leashed is displayed as \"Dogs are allowed, but they have to be leashed\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#dog_access", "icon_url": "./assets/layers/questions/dogs_leashed.svg" }, { "key": "dog", "value": "unleashed", - "description": "dog=unleashed is displayed as \"Dogs are allowed and can run around freely\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "dog=unleashed is displayed as \"Dogs are allowed and can run around freely\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#dog_access", "icon_url": "./assets/layers/questions/dogs_allowed.svg" }, { "key": "dog", "value": "outside", - "description": "dog=outside is displayed as \"Dogs are allowed only outside\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "dog=outside is displayed as \"Dogs are allowed only outside\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#dog_access", "icon_url": "./assets/layers/questions/dogs_outside.svg" }, { "key": "internet_access", "value": "wlan", - "description": "internet_access=wlan is displayed as \"This place offers wireless internet access\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "internet_access=wlan is displayed as \"This place offers wireless internet access\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#internet", "icon_url": "wifi" }, { "key": "internet_access", "value": "no", - "description": "internet_access=no is displayed as \"This place does not offer internet access\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "internet_access=no is displayed as \"This place does not offer internet access\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#internet", "icon_url": "wifi;cross_bottom_right:red" }, { "key": "internet_access", "value": "yes", - "description": "internet_access=yes is displayed as \"This place offers internet access\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "internet_access=yes is displayed as \"This place offers internet access\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#internet", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "internet_access", "value": "terminal", - "description": "internet_access=terminal is displayed as \"This place offers internet access via a terminal or computer\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "internet_access=terminal is displayed as \"This place offers internet access via a terminal or computer\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#internet", "icon_url": "computer" }, { "key": "internet_access", "value": "wired", - "description": "internet_access=wired is displayed as \"This place offers wired internet access\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "internet_access=wired is displayed as \"This place offers wired internet access\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#internet", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Dog friendly eateries, Dog-friendly shops", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#internet", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "internet_access:fee", "value": "yes", - "description": "internet_access:fee=yes is displayed as \"There is a fee for the internet access at this place\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "internet_access:fee=yes is displayed as \"There is a fee for the internet access at this place\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#internet_fee", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "internet_access:fee", "value": "no", - "description": "internet_access:fee=no is displayed as \"Internet access is free at this place\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "internet_access:fee=no is displayed as \"Internet access is free at this place\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#internet_fee", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "internet_access:fee", "value": "customers", - "description": "internet_access:fee=customers is displayed as \"Internet access is free at this place, for customers only\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "internet_access:fee=customers is displayed as \"Internet access is free at this place, for customers only\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#internet_fee", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "internet_access:ssid", - "description": "Values of `internet_access:ssid` are shown with \"The network name is {internet_access:ssid}\" and can be updated. The question is \"What is the network name for the wireless internet access?\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "Values of `internet_access:ssid` are shown with \"The network name is {internet_access:ssid}\" and can be updated. The question is \"What is the network name for the wireless internet access?\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#internet_ssid", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "internet_access:ssid", "value": "Telekom", - "description": "internet_access:ssid=Telekom is displayed as \"Telekom\" by layers Dog friendly eateries, Dog-friendly shops", + "description": "internet_access:ssid=Telekom is displayed as \"Telekom\" by layers Dog friendly eateries, Pet stores, Dog-friendly shops", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food_dog_friendly.md#internet_ssid", "icon_url": "./assets/layers/food/restaurant.svg" }, { "key": "shop", - "description": "Features with this tag are displayed by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md", - "icon_url": "./assets/layers/id_presets/maki-shop.svg" - }, - { - "key": "craft", - "value": "shoe_repair", - "description": "Features with this tag are displayed by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md", - "icon_url": "./assets/layers/id_presets/maki-shop.svg" - }, - { - "key": "craft", - "value": "key_cutter", - "description": "Features with this tag are displayed by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md", + "value": "pet", + "description": "Features with this tag are displayed by layer Pet stores", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "name", - "description": "Values of `name` are shown with \"This shop is called {name}\" and can be updated. The question is \"What is the name of this shop?\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shops_name", + "description": "Values of `name` are shown with \"This shop is called {name}\" and can be updated. The question is \"What is the name of this shop?\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shops_name", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", - "description": "Values of `shop` are shown with \"This is a {shop}\" and can be updated. The question is \"What kind of shop is this?\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "Values of `shop` are shown with \"This is a {shop}\" and can be updated. The question is \"What kind of shop is this?\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "bicycle_rental", - "description": "shop=bicycle_rental is displayed as \"Bicycle rental shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=bicycle_rental is displayed as \"Bicycle rental shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/bicycle_rental.svg" }, { "key": "shop", "value": "agrarian", - "description": "shop=agrarian is displayed as \"Farm Supply Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=agrarian is displayed as \"Farm Supply Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-tractor.svg" }, { "key": "shop", "value": "alcohol", - "description": "shop=alcohol is displayed as \"Liquor Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=alcohol is displayed as \"Liquor Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-wine-bottle.svg" }, { "key": "shop", "value": "anime", - "description": "shop=anime is displayed as \"Anime / Manga Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=anime is displayed as \"Anime / Manga Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-dragon.svg" }, { "key": "shop", "value": "antiques", - "description": "shop=antiques is displayed as \"Antique Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=antiques is displayed as \"Antique Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-furniture.svg" }, { "key": "shop", "value": "appliance", - "description": "shop=appliance is displayed as \"Appliance Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=appliance is displayed as \"Appliance Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-laundry.svg" }, { "key": "shop", "value": "art", - "description": "shop=art is displayed as \"Art Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=art is displayed as \"Art Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "baby_goods", - "description": "shop=baby_goods is displayed as \"Baby Goods Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=baby_goods is displayed as \"Baby Goods Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-baby-carriage.svg" }, { "key": "shop", "value": "bag", - "description": "shop=bag is displayed as \"Bag/Luggage Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=bag is displayed as \"Bag/Luggage Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-suitcase-rolling.svg" }, { "key": "shop", "value": "bakery", - "description": "shop=bakery is displayed as \"Bakery\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=bakery is displayed as \"Bakery\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-bakery.svg" }, { "key": "shop", "value": "bathroom_furnishing", - "description": "shop=bathroom_furnishing is displayed as \"Bathroom Furnishing Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=bathroom_furnishing is displayed as \"Bathroom Furnishing Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-bath.svg" }, { "key": "shop", "value": "beauty", - "description": "shop=beauty is displayed as \"Beauty Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=beauty is displayed as \"Beauty Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-lipstick.svg" }, { "key": "shop", "value": "bed", - "description": "shop=bed is displayed as \"Bedding/Mattress Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=bed is displayed as \"Bedding/Mattress Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-lodging.svg" }, { "key": "shop", "value": "beverages", - "description": "shop=beverages is displayed as \"Beverage Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=beverages is displayed as \"Beverage Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-bottles.svg" }, { "key": "shop", "value": "bicycle", - "description": "shop=bicycle is displayed as \"Bicycle Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=bicycle is displayed as \"Bicycle Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-bicycle.svg" }, { "key": "shop", "value": "boat", - "description": "shop=boat is displayed as \"Boat Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=boat is displayed as \"Boat Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-boat.svg" }, { "key": "shop", "value": "bookmaker", - "description": "shop=bookmaker is displayed as \"Bookmaker\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=bookmaker is displayed as \"Bookmaker\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-money_hand.svg" }, { "key": "shop", "value": "books", - "description": "shop=books is displayed as \"Bookstore\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=books is displayed as \"Bookstore\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-book.svg" }, { "key": "shop", "value": "brewing_supplies", - "description": "shop=brewing_supplies is displayed as \"Brewing Supply Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=brewing_supplies is displayed as \"Brewing Supply Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-storage_fermenter.svg" }, { "key": "shop", "value": "butcher", - "description": "shop=butcher is displayed as \"Butcher\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=butcher is displayed as \"Butcher\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-cleaver.svg" }, { "key": "shop", "value": "camera", - "description": "shop=camera is displayed as \"Camera Equipment Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=camera is displayed as \"Camera Equipment Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-camera-retro.svg" }, { "key": "shop", "value": "candles", - "description": "shop=candles is displayed as \"Candle Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=candles is displayed as \"Candle Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "cannabis", - "description": "shop=cannabis is displayed as \"Cannabis Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=cannabis is displayed as \"Cannabis Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-cannabis.svg" }, { "key": "shop", "value": "car", - "description": "shop=car is displayed as \"Car Dealership\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=car is displayed as \"Car Dealership\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "car_parts", - "description": "shop=car_parts is displayed as \"Car Parts Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=car_parts is displayed as \"Car Parts Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-car-battery.svg" }, { "key": "shop", "value": "car_repair", - "description": "shop=car_repair is displayed as \"Car Repair Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=car_repair is displayed as \"Car Repair Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-car-repair.svg" }, { "key": "shop", "value": "caravan", - "description": "shop=caravan is displayed as \"RV Dealership\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=caravan is displayed as \"RV Dealership\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-camper_trailer.svg" }, { "key": "shop", "value": "carpet", - "description": "shop=carpet is displayed as \"Carpet Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=carpet is displayed as \"Carpet Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-tape.svg" }, { "key": "shop", "value": "catalogue", - "description": "shop=catalogue is displayed as \"Catalog Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=catalogue is displayed as \"Catalog Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "charity", - "description": "shop=charity is displayed as \"Charity Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=charity is displayed as \"Charity Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "cheese", - "description": "shop=cheese is displayed as \"Cheese Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=cheese is displayed as \"Cheese Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-cheese.svg" }, { "key": "shop", "value": "chemist", - "description": "shop=chemist is displayed as \"Drugstore\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=chemist is displayed as \"Drugstore\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "chocolate", - "description": "shop=chocolate is displayed as \"Chocolate Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=chocolate is displayed as \"Chocolate Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-confectionery.svg" }, { "key": "shop", "value": "clothes", - "description": "shop=clothes is displayed as \"Clothing Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=clothes is displayed as \"Clothing Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-clothing-store.svg" }, { "key": "shop", "value": "coffee", - "description": "shop=coffee is displayed as \"Coffee Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=coffee is displayed as \"Coffee Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-coffee.svg" }, { "key": "shop", "value": "collector", - "description": "shop=collector is displayed as \"Collectibles Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=collector is displayed as \"Collectibles Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "computer", - "description": "shop=computer is displayed as \"Computer Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=computer is displayed as \"Computer Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-laptop.svg" }, { "key": "shop", "value": "confectionery", - "description": "shop=confectionery is displayed as \"Candy Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=confectionery is displayed as \"Candy Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-confectionery.svg" }, { "key": "shop", "value": "convenience", - "description": "shop=convenience is displayed as \"Convenience Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=convenience is displayed as \"Convenience Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "copyshop", - "description": "shop=copyshop is displayed as \"Copy Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=copyshop is displayed as \"Copy Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-print.svg" }, { "key": "shop", "value": "cosmetics", - "description": "shop=cosmetics is displayed as \"Cosmetics Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=cosmetics is displayed as \"Cosmetics Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-lipstick.svg" }, { "key": "shop", "value": "country_store", - "description": "shop=country_store is displayed as \"Rural Supplies Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=country_store is displayed as \"Rural Supplies Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-hat-cowboy-side.svg" }, { "key": "shop", "value": "craft", - "description": "shop=craft is displayed as \"Arts & Crafts Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=craft is displayed as \"Arts & Crafts Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "curtain", - "description": "shop=curtain is displayed as \"Curtain Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=curtain is displayed as \"Curtain Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-curtains.svg" }, { "key": "shop", "value": "dairy", - "description": "shop=dairy is displayed as \"Dairy Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=dairy is displayed as \"Dairy Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-cheese.svg" }, { "key": "shop", "value": "deli", - "description": "shop=deli is displayed as \"Delicatessen\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=deli is displayed as \"Delicatessen\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-jar.svg" }, { "key": "shop", "value": "department_store", - "description": "shop=department_store is displayed as \"Department Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=department_store is displayed as \"Department Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "doityourself", - "description": "shop=doityourself is displayed as \"DIY Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=doityourself is displayed as \"DIY Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-tools.svg" }, { "key": "shop", "value": "doors", - "description": "shop=doors is displayed as \"Door Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=doors is displayed as \"Door Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-door-open.svg" }, { "key": "shop", "value": "dry_cleaning", - "description": "shop=dry_cleaning is displayed as \"Dry Cleaner\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=dry_cleaning is displayed as \"Dry Cleaner\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-clothes_hanger.svg" }, { "key": "shop", "value": "e-cigarette", - "description": "shop=e-cigarette is displayed as \"E-Cigarette Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=e-cigarette is displayed as \"E-Cigarette Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "electrical", - "description": "shop=electrical is displayed as \"Electrical Equipment Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=electrical is displayed as \"Electrical Equipment Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-power.svg" }, { "key": "shop", "value": "electronics", - "description": "shop=electronics is displayed as \"Electronics Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=electronics is displayed as \"Electronics Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-plug.svg" }, { "key": "shop", "value": "erotic", - "description": "shop=erotic is displayed as \"Erotic Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=erotic is displayed as \"Erotic Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "fabric", - "description": "shop=fabric is displayed as \"Fabric Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=fabric is displayed as \"Fabric Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-tape.svg" }, { "key": "shop", "value": "farm", - "description": "shop=farm is displayed as \"Produce Stand\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=farm is displayed as \"Produce Stand\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "fashion_accessories", - "description": "shop=fashion_accessories is displayed as \"Fashion Accessories Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=fashion_accessories is displayed as \"Fashion Accessories Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-fashion_accessories.svg" }, { "key": "shop", "value": "fireplace", - "description": "shop=fireplace is displayed as \"Fireplace Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=fireplace is displayed as \"Fireplace Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-fireplace.svg" }, { "key": "shop", "value": "fishing", - "description": "shop=fishing is displayed as \"Fishing Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=fishing is displayed as \"Fishing Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-ice_fishing.svg" }, { "key": "shop", "value": "flooring", - "description": "shop=flooring is displayed as \"Flooring Supply Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=flooring is displayed as \"Flooring Supply Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-tools.svg" }, { "key": "shop", "value": "florist", - "description": "shop=florist is displayed as \"Florist\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=florist is displayed as \"Florist\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-florist.svg" }, { "key": "shop", "value": "frame", - "description": "shop=frame is displayed as \"Framing Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=frame is displayed as \"Framing Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-vector-square.svg" }, { "key": "shop", "value": "frozen_food", - "description": "shop=frozen_food is displayed as \"Frozen Food Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=frozen_food is displayed as \"Frozen Food Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "fuel", - "description": "shop=fuel is displayed as \"Fuel Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=fuel is displayed as \"Fuel Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-propane_tank.svg" }, { "key": "shop", "value": "funeral_directors", - "description": "shop=funeral_directors is displayed as \"Funeral Home\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=funeral_directors is displayed as \"Funeral Home\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-cemetery.svg" }, { "key": "shop", "value": "furniture", - "description": "shop=furniture is displayed as \"Furniture Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=furniture is displayed as \"Furniture Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-couch.svg" }, { "key": "shop", "value": "games", - "description": "shop=games is displayed as \"Tabletop Game Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=games is displayed as \"Tabletop Game Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-dice.svg" }, { "key": "shop", "value": "garden_centre", - "description": "shop=garden_centre is displayed as \"Garden Center\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=garden_centre is displayed as \"Garden Center\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-garden-centre.svg" }, { "key": "shop", "value": "gas", - "description": "shop=gas is displayed as \"Bottled Gas Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=gas is displayed as \"Bottled Gas Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-propane_tank.svg" }, { "key": "shop", "value": "general", - "description": "shop=general is displayed as \"General Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=general is displayed as \"General Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "gift", - "description": "shop=gift is displayed as \"Gift Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=gift is displayed as \"Gift Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-gift.svg" }, { "key": "shop", "value": "greengrocer", - "description": "shop=greengrocer is displayed as \"Greengrocer\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=greengrocer is displayed as \"Greengrocer\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-carrot.svg" }, { "key": "shop", "value": "hairdresser", - "description": "shop=hairdresser is displayed as \"Hairdresser\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=hairdresser is displayed as \"Hairdresser\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-beauty_salon.svg" }, { "key": "shop", "value": "hairdresser_supply", - "description": "shop=hairdresser_supply is displayed as \"Hairdresser Supply Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=hairdresser_supply is displayed as \"Hairdresser Supply Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-hair_care.svg" }, { "key": "shop", "value": "hardware", - "description": "shop=hardware is displayed as \"Hardware Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=hardware is displayed as \"Hardware Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-tools.svg" }, { "key": "shop", "value": "health_food", - "description": "shop=health_food is displayed as \"Health Food Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=health_food is displayed as \"Health Food Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "hearing_aids", - "description": "shop=hearing_aids is displayed as \"Hearing Aids Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=hearing_aids is displayed as \"Hearing Aids Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-hearing_aid.svg" }, { "key": "shop", "value": "herbalist", - "description": "shop=herbalist is displayed as \"Herbalist\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=herbalist is displayed as \"Herbalist\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-leaf.svg" }, { "key": "shop", "value": "hifi", - "description": "shop=hifi is displayed as \"Hifi Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=hifi is displayed as \"Hifi Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-speaker.svg" }, { "key": "shop", "value": "honey", - "description": "shop=honey is displayed as \"Honey Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=honey is displayed as \"Honey Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "household_linen", - "description": "shop=household_linen is displayed as \"Household Linen Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=household_linen is displayed as \"Household Linen Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-cloth.svg" }, { "key": "shop", "value": "houseware", - "description": "shop=houseware is displayed as \"Houseware Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=houseware is displayed as \"Houseware Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-blender.svg" }, { "key": "shop", "value": "hunting", - "description": "shop=hunting is displayed as \"Hunting Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=hunting is displayed as \"Hunting Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-bow_and_arrow.svg" }, { "key": "shop", "value": "interior_decoration", - "description": "shop=interior_decoration is displayed as \"Interior Decoration Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=interior_decoration is displayed as \"Interior Decoration Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "jewelry", - "description": "shop=jewelry is displayed as \"Jewelry Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=jewelry is displayed as \"Jewelry Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-jewelry-store.svg" }, { "key": "shop", "value": "kiosk", - "description": "shop=kiosk is displayed as \"Kiosk\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=kiosk is displayed as \"Kiosk\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-store.svg" }, { "key": "shop", "value": "kitchen", - "description": "shop=kitchen is displayed as \"Kitchen Design Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=kitchen is displayed as \"Kitchen Design Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-kitchen_sink.svg" }, { "key": "shop", "value": "laundry", - "description": "shop=laundry is displayed as \"Laundry\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=laundry is displayed as \"Laundry\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-laundry.svg" }, { "key": "shop", "value": "leather", - "description": "shop=leather is displayed as \"Leather Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=leather is displayed as \"Leather Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-handbag.svg" }, { "key": "shop", "value": "lighting", - "description": "shop=lighting is displayed as \"Lighting Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=lighting is displayed as \"Lighting Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-desk_lamp.svg" }, { "key": "shop", "value": "locksmith", - "description": "shop=locksmith is displayed as \"Locksmith\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=locksmith is displayed as \"Locksmith\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-key.svg" }, { "key": "shop", "value": "lottery", - "description": "shop=lottery is displayed as \"Lottery Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=lottery is displayed as \"Lottery Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "mall", - "description": "shop=mall is displayed as \"Mall\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=mall is displayed as \"Mall\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "massage", - "description": "shop=massage is displayed as \"Massage Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=massage is displayed as \"Massage Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-spa.svg" }, { "key": "shop", "value": "medical_supply", - "description": "shop=medical_supply is displayed as \"Medical Supply Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=medical_supply is displayed as \"Medical Supply Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-crutch.svg" }, { "key": "shop", "value": "military_surplus", - "description": "shop=military_surplus is displayed as \"Military Surplus Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=military_surplus is displayed as \"Military Surplus Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-military.svg" }, { "key": "shop", "value": "mobile_phone", - "description": "shop=mobile_phone is displayed as \"Mobile Phone Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=mobile_phone is displayed as \"Mobile Phone Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "model", - "description": "shop=model is displayed as \"Model Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=model is displayed as \"Model Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "money_lender", - "description": "shop=money_lender is displayed as \"Money Lender\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=money_lender is displayed as \"Money Lender\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-money_hand.svg" }, { "key": "shop", "value": "motorcycle", - "description": "shop=motorcycle is displayed as \"Motorcycle Dealership\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=motorcycle is displayed as \"Motorcycle Dealership\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-motorcycle.svg" }, { "key": "shop", "value": "motorcycle_repair", - "description": "shop=motorcycle_repair is displayed as \"Motorcycle Repair Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=motorcycle_repair is displayed as \"Motorcycle Repair Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-motorcycle_repair.svg" }, { "key": "shop", "value": "music", - "description": "shop=music is displayed as \"Music Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=music is displayed as \"Music Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-compact-disc.svg" }, { "key": "shop", "value": "musical_instrument", - "description": "shop=musical_instrument is displayed as \"Musical Instrument Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=musical_instrument is displayed as \"Musical Instrument Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-guitar.svg" }, { "key": "shop", "value": "newsagent", - "description": "shop=newsagent is displayed as \"Newsstand\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=newsagent is displayed as \"Newsstand\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-newspaper.svg" }, { "key": "shop", "value": "nutrition_supplements", - "description": "shop=nutrition_supplements is displayed as \"Nutrition Supplements Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=nutrition_supplements is displayed as \"Nutrition Supplements Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-pills.svg" }, { "key": "shop", "value": "nuts", - "description": "shop=nuts is displayed as \"Nuts Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=nuts is displayed as \"Nuts Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "optician", - "description": "shop=optician is displayed as \"Optician\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=optician is displayed as \"Optician\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-optician.svg" }, { "key": "shop", "value": "outdoor", - "description": "shop=outdoor is displayed as \"Outdoors Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=outdoor is displayed as \"Outdoors Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-compass.svg" }, { "key": "shop", "value": "outpost", - "description": "shop=outpost is displayed as \"Online Retailer Outpost\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=outpost is displayed as \"Online Retailer Outpost\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "paint", - "description": "shop=paint is displayed as \"Paint Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=paint is displayed as \"Paint Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-paint-roller.svg" }, { "key": "shop", "value": "party", - "description": "shop=party is displayed as \"Party Supply Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=party is displayed as \"Party Supply Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-balloon.svg" }, { "key": "shop", "value": "pasta", - "description": "shop=pasta is displayed as \"Pasta Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=pasta is displayed as \"Pasta Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-plate-wheat.svg" }, { "key": "shop", "value": "pastry", - "description": "shop=pastry is displayed as \"Pastry Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=pastry is displayed as \"Pastry Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-bakery.svg" }, { "key": "shop", "value": "pawnbroker", - "description": "shop=pawnbroker is displayed as \"Pawnshop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=pawnbroker is displayed as \"Pawnshop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-money_hand.svg" }, { "key": "shop", "value": "perfumery", - "description": "shop=perfumery is displayed as \"Perfume Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=perfumery is displayed as \"Perfume Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-perfume.svg" }, { "key": "shop", "value": "pet", - "description": "shop=pet is displayed as \"Pet Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=pet is displayed as \"Pet Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-cat.svg" }, { "key": "shop", "value": "pet_grooming", - "description": "shop=pet_grooming is displayed as \"Pet Groomer\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=pet_grooming is displayed as \"Pet Groomer\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-pet_grooming.svg" }, { "key": "shop", "value": "photo", - "description": "shop=photo is displayed as \"Photography Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=photo is displayed as \"Photography Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-camera-retro.svg" }, { "key": "shop", "value": "pottery", - "description": "shop=pottery is displayed as \"Pottery Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=pottery is displayed as \"Pottery Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-vase.svg" }, { "key": "shop", "value": "printer_ink", - "description": "shop=printer_ink is displayed as \"Printer Ink Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=printer_ink is displayed as \"Printer Ink Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-print.svg" }, { "key": "shop", "value": "psychic", - "description": "shop=psychic is displayed as \"Psychic\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=psychic is displayed as \"Psychic\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-psychic.svg" }, { "key": "shop", "value": "pyrotechnics", - "description": "shop=pyrotechnics is displayed as \"Fireworks Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=pyrotechnics is displayed as \"Fireworks Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-rocket_firework.svg" }, { "key": "shop", "value": "radiotechnics", - "description": "shop=radiotechnics is displayed as \"Radio/Electronic Component Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=radiotechnics is displayed as \"Radio/Electronic Component Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-microchip.svg" }, { "key": "shop", "value": "religion", - "description": "shop=religion is displayed as \"Religious Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=religion is displayed as \"Religious Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "rental", - "description": "shop=rental is displayed as \"Rental Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=rental is displayed as \"Rental Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-dolly.svg" }, { "key": "shop", "value": "repair", - "description": "shop=repair is displayed as \"Repair Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=repair is displayed as \"Repair Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "rice", - "description": "shop=rice is displayed as \"Rice Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=rice is displayed as \"Rice Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-bowl-rice.svg" }, { "key": "shop", "value": "scuba_diving", - "description": "shop=scuba_diving is displayed as \"Scuba Diving Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=scuba_diving is displayed as \"Scuba Diving Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-scuba_diving.svg" }, { "key": "shop", "value": "seafood", - "description": "shop=seafood is displayed as \"Seafood Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=seafood is displayed as \"Seafood Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-fish_cleaning.svg" }, { "key": "shop", "value": "second_hand", - "description": "shop=second_hand is displayed as \"Thrift Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=second_hand is displayed as \"Thrift Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "sewing", - "description": "shop=sewing is displayed as \"Sewing Supply Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=sewing is displayed as \"Sewing Supply Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-needle_and_spool.svg" }, { "key": "shop", "value": "shoe_repair", - "description": "shop=shoe_repair is displayed as \"Shoe Repair Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=shoe_repair is displayed as \"Shoe Repair Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-hammer_shoe.svg" }, { "key": "shop", "value": "shoes", - "description": "shop=shoes is displayed as \"Shoe Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=shoes is displayed as \"Shoe Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shoe.svg" }, { "key": "shop", "value": "spices", - "description": "shop=spices is displayed as \"Spice Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=spices is displayed as \"Spice Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-spice_bottle.svg" }, { "key": "shop", "value": "sports", - "description": "shop=sports is displayed as \"Sporting Goods Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=sports is displayed as \"Sporting Goods Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-futbol.svg" }, { "key": "shop", "value": "stationery", - "description": "shop=stationery is displayed as \"Stationery Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=stationery is displayed as \"Stationery Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-paperclip.svg" }, { "key": "shop", "value": "storage_rental", - "description": "shop=storage_rental is displayed as \"Storage Rental\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=storage_rental is displayed as \"Storage Rental\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-storage_rental.svg" }, { "key": "shop", "value": "supermarket", - "description": "shop=supermarket is displayed as \"Supermarket\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=supermarket is displayed as \"Supermarket\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-grocery.svg" }, { "key": "shop", "value": "swimming_pool", - "description": "shop=swimming_pool is displayed as \"Pool Supply Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=swimming_pool is displayed as \"Pool Supply Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "tailor", - "description": "shop=tailor is displayed as \"Tailor\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=tailor is displayed as \"Tailor\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-needle_and_spool.svg" }, { "key": "shop", "value": "tattoo", - "description": "shop=tattoo is displayed as \"Tattoo Parlor\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=tattoo is displayed as \"Tattoo Parlor\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-tattoo_machine.svg" }, { "key": "shop", "value": "tea", - "description": "shop=tea is displayed as \"Tea Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=tea is displayed as \"Tea Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-teahouse.svg" }, { "key": "shop", "value": "telecommunication", - "description": "shop=telecommunication is displayed as \"Telecom Retail Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=telecommunication is displayed as \"Telecom Retail Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-telephone.svg" }, { "key": "shop", "value": "ticket", - "description": "shop=ticket is displayed as \"Ticket Seller\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=ticket is displayed as \"Ticket Seller\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "tiles", - "description": "shop=tiles is displayed as \"Tile Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=tiles is displayed as \"Tile Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-tiling.svg" }, { "key": "shop", "value": "tobacco", - "description": "shop=tobacco is displayed as \"Tobacco Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=tobacco is displayed as \"Tobacco Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-pipe.svg" }, { "key": "shop", "value": "tool_hire", - "description": "shop=tool_hire is displayed as \"Tool Rental\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=tool_hire is displayed as \"Tool Rental\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-tools.svg" }, { "key": "shop", "value": "toys", - "description": "shop=toys is displayed as \"Toy Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=toys is displayed as \"Toy Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-rocket.svg" }, { "key": "shop", "value": "trade", - "description": "shop=trade is displayed as \"Trade Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=trade is displayed as \"Trade Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-tools.svg" }, { "key": "shop", "value": "travel_agency", - "description": "shop=travel_agency is displayed as \"Travel Agency\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=travel_agency is displayed as \"Travel Agency\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-suitcase.svg" }, { "key": "shop", "value": "trophy", - "description": "shop=trophy is displayed as \"Trophy Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=trophy is displayed as \"Trophy Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/fas-trophy.svg" }, { "key": "shop", "value": "tyres", - "description": "shop=tyres is displayed as \"Tire Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=tyres is displayed as \"Tire Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-tire.svg" }, { "key": "shop", "value": "vacuum_cleaner", - "description": "shop=vacuum_cleaner is displayed as \"Vacuum Cleaner Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=vacuum_cleaner is displayed as \"Vacuum Cleaner Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-vacuum.svg" }, { "key": "shop", "value": "variety_store", - "description": "shop=variety_store is displayed as \"Discount Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=variety_store is displayed as \"Discount Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "video", - "description": "shop=video is displayed as \"Video Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=video is displayed as \"Video Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-movie_rental.svg" }, { "key": "shop", "value": "video_games", - "description": "shop=video_games is displayed as \"Video Game Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=video_games is displayed as \"Video Game Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-gaming.svg" }, { "key": "shop", "value": "watches", - "description": "shop=watches is displayed as \"Watches Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=watches is displayed as \"Watches Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-watch.svg" }, { "key": "shop", "value": "water", - "description": "shop=water is displayed as \"Drinking Water Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=water is displayed as \"Drinking Water Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-water_bottle.svg" }, { "key": "shop", "value": "water_sports", - "description": "shop=water_sports is displayed as \"Watersport/Swim Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=water_sports is displayed as \"Watersport/Swim Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "weapons", - "description": "shop=weapons is displayed as \"Weapon Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=weapons is displayed as \"Weapon Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-dagger.svg" }, { "key": "shop", "value": "wholesale", - "description": "shop=wholesale is displayed as \"Wholesale Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=wholesale is displayed as \"Wholesale Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-warehouse.svg" }, { "key": "shop", "value": "wigs", - "description": "shop=wigs is displayed as \"Wig Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=wigs is displayed as \"Wig Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "shop", "value": "window_blind", - "description": "shop=window_blind is displayed as \"Window Blind Store\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=window_blind is displayed as \"Window Blind Store\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/temaki-window.svg" }, { "key": "shop", "value": "wine", - "description": "shop=wine is displayed as \"Wine Shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "shop=wine is displayed as \"Wine Shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/id_presets/maki-alcohol-shop.svg" }, { "key": "disused:shop", - "description": "disused:shop= is displayed as \"This shop is no longer used. It is vacant\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#shop_types", + "description": "disused:shop= is displayed as \"This shop is no longer used. It is vacant\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#shop_types", "icon_url": "./assets/layers/shops/shop-disused.svg" }, { "key": "brand", - "description": "Values of `brand` are shown with \"Part of {brand}\" and can be updated. The question is \"What is the brand of this shop?\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#brand", + "description": "Values of `brand` are shown with \"Part of {brand}\" and can be updated. The question is \"What is the brand of this shop?\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#brand", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "not:brand", "value": "yes", - "description": "not:brand=yes is displayed as \"This shop does not have a specific brand, it is not part of a bigger chain\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#brand", + "description": "not:brand=yes is displayed as \"This shop does not have a specific brand, it is not part of a bigger chain\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#brand", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "second_hand", "value": "only", - "description": "second_hand=only is displayed as \"This shop sells second-hand items only\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#second_hand", + "description": "second_hand=only is displayed as \"This shop sells second-hand items only\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#second_hand", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "second_hand", "value": "yes", - "description": "second_hand=yes is displayed as \"This shop sells second-hand items along with new items\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#second_hand", + "description": "second_hand=yes is displayed as \"This shop sells second-hand items along with new items\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#second_hand", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "second_hand", "value": "no", - "description": "second_hand=no is displayed as \"This shop only sells brand-new items\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#second_hand", + "description": "second_hand=no is displayed as \"This shop only sells brand-new items\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#second_hand", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:print:A4", "value": "yes", - "description": "service:print:A4=yes is displayed as \"This shop can print on papers of size A4\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#copyshop_print_sizes", + "description": "service:print:A4=yes is displayed as \"This shop can print on papers of size A4\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#copyshop_print_sizes", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:print:A3", "value": "yes", - "description": "service:print:A3=yes is displayed as \"This shop can print on papers of size A3\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#copyshop_print_sizes", + "description": "service:print:A3=yes is displayed as \"This shop can print on papers of size A3\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#copyshop_print_sizes", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:print:A2", "value": "yes", - "description": "service:print:A2=yes is displayed as \"This shop can print on papers of size A2\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#copyshop_print_sizes", + "description": "service:print:A2=yes is displayed as \"This shop can print on papers of size A2\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#copyshop_print_sizes", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:print:A1", "value": "yes", - "description": "service:print:A1=yes is displayed as \"This shop can print on papers of size A1\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#copyshop_print_sizes", + "description": "service:print:A1=yes is displayed as \"This shop can print on papers of size A1\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#copyshop_print_sizes", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:print:A0", "value": "yes", - "description": "service:print:A0=yes is displayed as \"This shop can print on papers of size A0\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#copyshop_print_sizes", + "description": "service:print:A0=yes is displayed as \"This shop can print on papers of size A0\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#copyshop_print_sizes", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:binding", "value": "yes", - "description": "service:binding=yes is displayed as \"This shop binds papers into a booklet\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#copyshop_binding", + "description": "service:binding=yes is displayed as \"This shop binds papers into a booklet\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#copyshop_binding", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:binding", "value": "no", - "description": "service:binding=no is displayed as \"This shop does bind books\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#copyshop_binding", + "description": "service:binding=no is displayed as \"This shop does bind books\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#copyshop_binding", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "healthcare", "value": "optometrist", - "description": "healthcare=optometrist is displayed as \"This shop offers eye exams by certified optometrists\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#optometrist_service", + "description": "healthcare=optometrist is displayed as \"This shop offers eye exams by certified optometrists\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#optometrist_service", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "healthcare", "value": "audiologist", - "description": "healthcare=audiologist is displayed as \"This shop offers hearing tests by a certified audiologist\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#optometrist_service", + "description": "healthcare=audiologist is displayed as \"This shop offers hearing tests by a certified audiologist\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#optometrist_service", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "craft", "value": "key_cutter", - "description": "craft=key_cutter is displayed as \"This shop is also specialized in key cutting\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#key_cutter", + "description": "craft=key_cutter is displayed as \"This shop is also specialized in key cutting\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#key_cutter", "icon_url": "./assets/layers/id_presets/fas-key.svg" }, { "key": "service:key_cutting", "value": "yes", - "description": "service:key_cutting=yes is displayed as \"This shop offers key cutting as a service\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#key_cutter", + "description": "service:key_cutting=yes is displayed as \"This shop offers key cutting as a service\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#key_cutter", "icon_url": "./assets/layers/id_presets/fas-key.svg" }, { "key": "craft", - "description": "craft= & service:key_cutting=no is displayed as \"This shops does not offer key cutting as a service\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#key_cutter", + "description": "craft= & service:key_cutting=no is displayed as \"This shops does not offer key cutting as a service\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#key_cutter", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:key_cutting", "value": "no", - "description": "craft= & service:key_cutting=no is displayed as \"This shops does not offer key cutting as a service\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#key_cutter", + "description": "craft= & service:key_cutting=no is displayed as \"This shops does not offer key cutting as a service\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#key_cutter", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:retail", "value": "yes", - "description": "service:bicycle:retail=yes is displayed as \"This shop sells new bikes\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#sells_new_bikes", + "description": "service:bicycle:retail=yes is displayed as \"This shop sells new bikes\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#sells_new_bikes", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:retail", "value": "no", - "description": "service:bicycle:retail=no is displayed as \"This shop doesn't sell new bikes\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#sells_new_bikes", + "description": "service:bicycle:retail=no is displayed as \"This shop doesn't sell new bikes\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#sells_new_bikes", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:second_hand", "value": "yes", - "description": "service:bicycle:second_hand=yes is displayed as \"This shop sells second-hand bikes\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_second_hand", + "description": "service:bicycle:second_hand=yes is displayed as \"This shop sells second-hand bikes\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_second_hand", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:second_hand", "value": "no", - "description": "service:bicycle:second_hand=no is displayed as \"This shop doesn't sell second-hand bikes\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_second_hand", + "description": "service:bicycle:second_hand=no is displayed as \"This shop doesn't sell second-hand bikes\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_second_hand", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:second_hand", "value": "only", - "description": "service:bicycle:second_hand=only is displayed as \"This shop only sells second-hand bikes\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_second_hand", + "description": "service:bicycle:second_hand=only is displayed as \"This shop only sells second-hand bikes\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_second_hand", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:repair", "value": "yes", - "description": "service:bicycle:repair=yes is displayed as \"This shop repairs bikes\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#repairs_bikes", + "description": "service:bicycle:repair=yes is displayed as \"This shop repairs bikes\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#repairs_bikes", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:repair", "value": "no", - "description": "service:bicycle:repair=no is displayed as \"This shop doesn't repair bikes\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#repairs_bikes", + "description": "service:bicycle:repair=no is displayed as \"This shop doesn't repair bikes\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#repairs_bikes", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:repair", "value": "only_sold", - "description": "service:bicycle:repair=only_sold is displayed as \"This shop only repairs bikes bought here\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#repairs_bikes", + "description": "service:bicycle:repair=only_sold is displayed as \"This shop only repairs bikes bought here\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#repairs_bikes", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:repair", "value": "brand", - "description": "service:bicycle:repair=brand is displayed as \"This shop only repairs bikes of a certain brand\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#repairs_bikes", + "description": "service:bicycle:repair=brand is displayed as \"This shop only repairs bikes of a certain brand\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#repairs_bikes", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:rental", "value": "yes", - "description": "service:bicycle:rental=yes is displayed as \"This shop rents out bikes\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bicycle_rental", + "description": "service:bicycle:rental=yes is displayed as \"This shop rents out bikes\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bicycle_rental", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:rental", "value": "no", - "description": "service:bicycle:rental=no is displayed as \"This shop doesn't rent out bikes\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bicycle_rental", + "description": "service:bicycle:rental=no is displayed as \"This shop doesn't rent out bikes\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bicycle_rental", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "rental", - "description": "Values of `rental` are shown with \"{rental} is rented here\" and can be updated. The question is \"What kind of bicycles and accessories are rented here?\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bicycle_types", + "description": "Values of `rental` are shown with \"{rental} is rented here\" and can be updated. The question is \"What kind of bicycles and accessories are rented here?\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bicycle_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "rental", "value": "city_bike", - "description": "rental=city_bike is displayed as \"Normal city bikes can be rented here\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bicycle_types", + "description": "rental=city_bike is displayed as \"Normal city bikes can be rented here\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bicycle_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "rental", "value": "ebike", - "description": "rental=ebike is displayed as \"Electrical bikes can be rented here\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bicycle_types", + "description": "rental=ebike is displayed as \"Electrical bikes can be rented here\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bicycle_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "rental", "value": "bmx", - "description": "rental=bmx is displayed as \"BMX bikes can be rented here\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bicycle_types", + "description": "rental=bmx is displayed as \"BMX bikes can be rented here\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bicycle_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "rental", "value": "mtb", - "description": "rental=mtb is displayed as \"Mountainbikes can be rented here\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bicycle_types", + "description": "rental=mtb is displayed as \"Mountainbikes can be rented here\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bicycle_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "rental", "value": "kid_bike", - "description": "rental=kid_bike is displayed as \"Bikes for children can be rented here\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bicycle_types", + "description": "rental=kid_bike is displayed as \"Bikes for children can be rented here\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bicycle_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "rental", "value": "tandem", - "description": "rental=tandem is displayed as \"Tandem bicycles can be rented here\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bicycle_types", + "description": "rental=tandem is displayed as \"Tandem bicycles can be rented here\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bicycle_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "rental", "value": "racebike", - "description": "rental=racebike is displayed as \"Race bicycles can be rented here\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bicycle_types", + "description": "rental=racebike is displayed as \"Race bicycles can be rented here\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bicycle_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "rental", "value": "bike_helmet", - "description": "rental=bike_helmet is displayed as \"Bike helmets can be rented here\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bicycle_types", + "description": "rental=bike_helmet is displayed as \"Bike helmets can be rented here\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bicycle_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "rental", "value": "cargo_bike", - "description": "rental=cargo_bike is displayed as \"Cargo bikes can be rented here\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bicycle_types", + "description": "rental=cargo_bike is displayed as \"Cargo bikes can be rented here\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bicycle_types", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "capacity:city_bike", - "description": "Values of `capacity:city_bike` are shown with \"{capacity:city_bike} city bikes can be rented here\" and can be updated. The question is \"How many city bikes can be rented here?\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#rental_capacity_city_bike", + "description": "Values of `capacity:city_bike` are shown with \"{capacity:city_bike} city bikes can be rented here\" and can be updated. The question is \"How many city bikes can be rented here?\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#rental_capacity_city_bike", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "capacity:ebike", - "description": "Values of `capacity:ebike` are shown with \"{capacity:ebike} electrical bikes can be rented here\" and can be updated. The question is \"How many electrical bikes can be rented here?\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#rental_capacity_ebike", + "description": "Values of `capacity:ebike` are shown with \"{capacity:ebike} electrical bikes can be rented here\" and can be updated. The question is \"How many electrical bikes can be rented here?\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#rental_capacity_ebike", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "capacity:kid_bike", - "description": "Values of `capacity:kid_bike` are shown with \"{capacity:kid_bike} bikes for children can be rented here\" and can be updated. The question is \"How many bikes for children can be rented here?\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#rental_capacity_kid_bike", + "description": "Values of `capacity:kid_bike` are shown with \"{capacity:kid_bike} bikes for children can be rented here\" and can be updated. The question is \"How many bikes for children can be rented here?\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#rental_capacity_kid_bike", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "capacity:bmx", - "description": "Values of `capacity:bmx` are shown with \"{capacity:bmx} BMX bikes can be rented here\" and can be updated. The question is \"How many BMX bikes can be rented here?\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#rental_capacity_bmx", + "description": "Values of `capacity:bmx` are shown with \"{capacity:bmx} BMX bikes can be rented here\" and can be updated. The question is \"How many BMX bikes can be rented here?\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#rental_capacity_bmx", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "capacity:mtb", - "description": "Values of `capacity:mtb` are shown with \"{capacity:mtb} mountainbikes can be rented here\" and can be updated. The question is \"How many mountainbikes can be rented here?\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#rental_capacity_mtb", + "description": "Values of `capacity:mtb` are shown with \"{capacity:mtb} mountainbikes can be rented here\" and can be updated. The question is \"How many mountainbikes can be rented here?\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#rental_capacity_mtb", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "capacity:bicycle_pannier", - "description": "Values of `capacity:bicycle_pannier` are shown with \"{capacity:bicycle_pannier} bicycle panniers can be rented here\" and can be updated. The question is \"How many bicycle panniers can be rented here?\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#rental_capacity_bicycle_pannier", + "description": "Values of `capacity:bicycle_pannier` are shown with \"{capacity:bicycle_pannier} bicycle panniers can be rented here\" and can be updated. The question is \"How many bicycle panniers can be rented here?\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#rental_capacity_bicycle_pannier", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "capacity:tandem_bicycle", - "description": "Values of `capacity:tandem_bicycle` are shown with \"{capacity:tandem_bicycle} tandem can be rented here\" and can be updated. The question is \"How many tandem can be rented here?\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#rental_capacity_tandem_bicycle", + "description": "Values of `capacity:tandem_bicycle` are shown with \"{capacity:tandem_bicycle} tandem can be rented here\" and can be updated. The question is \"How many tandem can be rented here?\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#rental_capacity_tandem_bicycle", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:pump", "value": "yes", - "description": "service:bicycle:pump=yes is displayed as \"This shop offers a bike pump for anyone\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_pump_service", + "description": "service:bicycle:pump=yes is displayed as \"This shop offers a bike pump for anyone\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_pump_service", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:pump", "value": "no", - "description": "service:bicycle:pump=no is displayed as \"This shop doesn't offer a bike pump for anyone\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_pump_service", + "description": "service:bicycle:pump=no is displayed as \"This shop doesn't offer a bike pump for anyone\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_pump_service", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:pump", "value": "separate", - "description": "service:bicycle:pump=separate is displayed as \"There is bicycle pump, it is shown as a separate point\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_pump_service", + "description": "service:bicycle:pump=separate is displayed as \"There is bicycle pump, it is shown as a separate point\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_pump_service", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:diy", "value": "yes", - "description": "service:bicycle:diy=yes is displayed as \"This shop offers tools for DIY bicycle repair\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_repair_tools", + "description": "service:bicycle:diy=yes is displayed as \"This shop offers tools for DIY bicycle repair\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_repair_tools", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:diy", "value": "no", - "description": "service:bicycle:diy=no is displayed as \"This shop doesn't offer tools for DIY bicycle repair\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_repair_tools", + "description": "service:bicycle:diy=no is displayed as \"This shop doesn't offer tools for DIY bicycle repair\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_repair_tools", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:diy", "value": "only_sold", - "description": "service:bicycle:diy=only_sold is displayed as \"Tools for DIY bicycle repair are only available if you bought/hire the bike in the shop\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_repair_tools", + "description": "service:bicycle:diy=only_sold is displayed as \"Tools for DIY bicycle repair are only available if you bought/hire the bike in the shop\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_repair_tools", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:cleaning", "value": "yes", - "description": "service:bicycle:cleaning=yes is displayed as \"This shop cleans bicycles\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_wash", + "description": "service:bicycle:cleaning=yes is displayed as \"This shop cleans bicycles\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_wash", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:cleaning", "value": "diy", - "description": "service:bicycle:cleaning=diy is displayed as \"This shop has an installation where one can clean bicycles themselves\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_wash", + "description": "service:bicycle:cleaning=diy is displayed as \"This shop has an installation where one can clean bicycles themselves\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_wash", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:cleaning", "value": "no", - "description": "service:bicycle:cleaning=no is displayed as \"This shop doesn't offer bicycle cleaning\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_wash", + "description": "service:bicycle:cleaning=no is displayed as \"This shop doesn't offer bicycle cleaning\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_wash", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:cleaning:charge", - "description": "Values of `service:bicycle:cleaning:charge` are shown with \"Using the cleaning service costs {service:bicycle:cleaning:charge}\" and can be updated. The question is \"How much does it cost to use the cleaning service?\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_cleaning_service_bicycle_cleaning_charge", + "description": "Values of `service:bicycle:cleaning:charge` are shown with \"Using the cleaning service costs {service:bicycle:cleaning:charge}\" and can be updated. The question is \"How much does it cost to use the cleaning service?\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_cleaning_service_bicycle_cleaning_charge", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:cleaning:fee", "value": "no", - "description": "service:bicycle:cleaning:fee=no is displayed as \"The cleaning service is free to use\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_cleaning_service_bicycle_cleaning_charge", + "description": "service:bicycle:cleaning:fee=no is displayed as \"The cleaning service is free to use\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_cleaning_service_bicycle_cleaning_charge", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:cleaning:fee", "value": "yes", - "description": "service:bicycle:cleaning:fee=yes & service:bicycle:cleaning:charge= is displayed as \"Free to use\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_cleaning_service_bicycle_cleaning_charge", + "description": "service:bicycle:cleaning:fee=yes & service:bicycle:cleaning:charge= is displayed as \"Free to use\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_cleaning_service_bicycle_cleaning_charge", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "service:bicycle:cleaning:charge", - "description": "service:bicycle:cleaning:fee=yes & service:bicycle:cleaning:charge= is displayed as \"Free to use\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#bike_cleaning_service_bicycle_cleaning_charge", + "description": "service:bicycle:cleaning:fee=yes & service:bicycle:cleaning:charge= is displayed as \"Free to use\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#bike_cleaning_service_bicycle_cleaning_charge", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "organic", "value": "yes", - "description": "organic=yes is displayed as \"This shop offers organic products\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#organic", + "description": "organic=yes is displayed as \"This shop offers organic products\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#organic", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "organic", "value": "only", - "description": "organic=only is displayed as \"This shop only offers organic products\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#organic", + "description": "organic=only is displayed as \"This shop only offers organic products\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#organic", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "organic", "value": "no", - "description": "organic=no is displayed as \"This shop does not offer organic products\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#organic", + "description": "organic=no is displayed as \"This shop does not offer organic products\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#organic", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { "key": "description", - "description": "Values of `description` are shown with \"{description}\" and can be updated. The question is \"Is there still some relevant info that the previous questions did not cover? Feel free to add it here.\" by layer Dog-friendly shops", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md#description", + "description": "Values of `description` are shown with \"{description}\" and can be updated. The question is \"Is there still some relevant info that the previous questions did not cover? Feel free to add it here.\" by layers Pet stores, Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/pet_shops.md#description", + "icon_url": "./assets/layers/id_presets/maki-shop.svg" + }, + { + "key": "shop", + "description": "Features with this tag are displayed by layer Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md", + "icon_url": "./assets/layers/id_presets/maki-shop.svg" + }, + { + "key": "craft", + "value": "shoe_repair", + "description": "Features with this tag are displayed by layer Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md", + "icon_url": "./assets/layers/id_presets/maki-shop.svg" + }, + { + "key": "craft", + "value": "key_cutter", + "description": "Features with this tag are displayed by layer Dog-friendly shops", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shop_dog_friendly.md", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, { diff --git a/Docs/TagInfo/mapcomplete_playgrounds.json b/Docs/TagInfo/mapcomplete_playgrounds.json index 43e5905ab7..53cc1c3519 100644 --- a/Docs/TagInfo/mapcomplete_playgrounds.json +++ b/Docs/TagInfo/mapcomplete_playgrounds.json @@ -1177,33 +1177,6 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#opening_hours_24_7", "icon_url": "./assets/layers/toilet/toilets.svg" }, - { - "key": "wheelchair", - "value": "yes", - "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "wheelchair", - "value": "no", - "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "wheelchair", - "value": "designated", - "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "door:width", - "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_door_width", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, { "key": "toilets:position", "value": "seated", @@ -1432,6 +1405,114 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#description", "icon_url": "./assets/layers/toilet/toilets.svg" }, + { + "key": "image", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "panoramax", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "mapillary", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikidata", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikipedia", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "image", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "panoramax", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "mapillary", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikidata", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikipedia", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "yes", + "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "designated", + "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair accessible toilet\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_title", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "toilets:wheelchair:access", + "value": "yes", + "description": "toilets:wheelchair:access=yes is displayed as \"The wheelchair accessible toilets are freely accessible\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_access", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "toilets:wheelchair:access", + "value": "key", + "description": "toilets:wheelchair:access=key is displayed as \"One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_access", + "icon_url": "key" + }, + { + "key": "door:width", + "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_door_width", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, { "key": "amenity", "value": "bbq", diff --git a/Docs/TagInfo/mapcomplete_postboxes.json b/Docs/TagInfo/mapcomplete_postboxes.json index 43d3e98ae3..8ab524ed6b 100644 --- a/Docs/TagInfo/mapcomplete_postboxes.json +++ b/Docs/TagInfo/mapcomplete_postboxes.json @@ -2088,8 +2088,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Shop", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Shop", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shops.md#internet", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, diff --git a/Docs/TagInfo/mapcomplete_scouting.json b/Docs/TagInfo/mapcomplete_scouting.json index 224eba15d5..2df33020d5 100644 --- a/Docs/TagInfo/mapcomplete_scouting.json +++ b/Docs/TagInfo/mapcomplete_scouting.json @@ -182,9 +182,9 @@ "icon_url": "./assets/layers/campsite/campsite.svg" }, { - "key": "charge", - "description": "Values of `charge` are shown with \"A fee of {charge} should be paid for here\" and can be updated. The question is \"Is a fee charged here?\" by layer Group Campsites", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/group_campsite.md#fee", + "key": "capacity:persons", + "description": "Values of `capacity:persons` are shown with \"{capacity:persons} people can stay here\" and can be updated. The question is \"How many people can stay here?\" by layer Group Campsites", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/group_campsite.md#capacity_persons", "icon_url": "./assets/layers/campsite/campsite.svg" }, { @@ -192,26 +192,26 @@ "value": "no", "description": "fee=no is displayed as \"The campsite is free of charge\" by layer Group Campsites", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/group_campsite.md#fee", - "icon_url": "./assets/layers/campsite/campsite.svg" + "icon_url": "./assets/layers/questions/cash.svg" }, { "key": "fee", "value": "yes", - "description": "fee=yes & charge= is displayed as \"A fee is charged here.\" by layer Group Campsites", + "description": "fee=yes is displayed as \"There is a fee.\" by layer Group Campsites", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/group_campsite.md#fee", - "icon_url": "./assets/layers/campsite/campsite.svg" + "icon_url": "./assets/layers/questions/cash.svg" }, { "key": "charge", - "description": "fee=yes & charge= is displayed as \"A fee is charged here.\" by layer Group Campsites", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/group_campsite.md#fee", - "icon_url": "./assets/layers/campsite/campsite.svg" + "description": "Values of `charge` are shown with \"Charge per person per day: {charge}\" and can be updated. The question is \"What is the charge per person per day?\" by layer Group Campsites", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/group_campsite.md#charge_person_day", + "icon_url": "./assets/layers/questions/cash.svg" }, { - "key": "capacity:persons", - "description": "Values of `capacity:persons` are shown with \"{capacity:persons} people can stay here\" and can be updated. The question is \"How many people can stay here?\" by layer Group Campsites", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/group_campsite.md#capacity_persons", - "icon_url": "./assets/layers/campsite/campsite.svg" + "key": "charge", + "description": "Values of `charge` are shown with \"Charge per day: {charge}\" and can be updated. The question is \"What is the charge per day?\" by layer Group Campsites", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/group_campsite.md#charge_day", + "icon_url": "./assets/layers/questions/cash.svg" }, { "key": "toilets", @@ -353,8 +353,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Hostels for groups and scouts", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Hostels for groups and scouts", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/group_hostel.md#internet", "icon_url": "./assets/layers/tourism_accomodation/hostel.svg" }, diff --git a/Docs/TagInfo/mapcomplete_shops.json b/Docs/TagInfo/mapcomplete_shops.json index 62fcad40c4..87458a8fbf 100644 --- a/Docs/TagInfo/mapcomplete_shops.json +++ b/Docs/TagInfo/mapcomplete_shops.json @@ -1786,8 +1786,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Shop", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Shop", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/shops.md#internet", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, diff --git a/Docs/TagInfo/mapcomplete_ski.json b/Docs/TagInfo/mapcomplete_ski.json index 554d8c18ee..14140f7fea 100644 --- a/Docs/TagInfo/mapcomplete_ski.json +++ b/Docs/TagInfo/mapcomplete_ski.json @@ -620,33 +620,6 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#opening_hours_24_7", "icon_url": "./assets/layers/questions/open24_7.svg" }, - { - "key": "wheelchair", - "value": "yes", - "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "wheelchair", - "value": "no", - "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "wheelchair", - "value": "designated", - "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "door:width", - "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_door_width", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, { "key": "toilets:position", "value": "seated", @@ -875,6 +848,114 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#description", "icon_url": "./assets/layers/toilet/toilets.svg" }, + { + "key": "image", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "panoramax", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "mapillary", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikidata", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikipedia", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "image", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "panoramax", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "mapillary", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikidata", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikipedia", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "yes", + "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "designated", + "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair accessible toilet\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_title", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "toilets:wheelchair:access", + "value": "yes", + "description": "toilets:wheelchair:access=yes is displayed as \"The wheelchair accessible toilets are freely accessible\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_access", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "toilets:wheelchair:access", + "value": "key", + "description": "toilets:wheelchair:access=key is displayed as \"One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_access", + "icon_url": "key" + }, + { + "key": "door:width", + "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_door_width", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, { "key": "amenity", "value": "drinking_water", @@ -1998,8 +2079,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Restaurants and fast food", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Restaurants and fast food", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/food.md#internet", "icon_url": "./assets/layers/food/restaurant.svg" }, diff --git a/Docs/TagInfo/mapcomplete_sports.json b/Docs/TagInfo/mapcomplete_sports.json index a934811a3c..dd1775ea9d 100644 --- a/Docs/TagInfo/mapcomplete_sports.json +++ b/Docs/TagInfo/mapcomplete_sports.json @@ -3183,8 +3183,8 @@ }, { "key": "internet_access", - "value": "terminal;wifi", - "description": "internet_access=terminal;wifi is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Shop", + "value": "terminal;wlan", + "description": "internet_access=terminal;wlan is displayed as \"This place offers both wireless internet and internet access via a terminal or computer\" by layer Shop", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/sport_shops.md#internet", "icon_url": "./assets/layers/id_presets/maki-shop.svg" }, diff --git a/Docs/TagInfo/mapcomplete_street_lighting.json b/Docs/TagInfo/mapcomplete_street_lighting.json index e97a00dc49..953925a539 100644 --- a/Docs/TagInfo/mapcomplete_street_lighting.json +++ b/Docs/TagInfo/mapcomplete_street_lighting.json @@ -19,7 +19,7 @@ }, { "key": "id", - "description": "id~.+ is displayed as \"You just created this element! Thanks for sharing this info with the world and helping people worldwide.\" by layers Street Lamps, Lit streets, All streets", + "description": "id~.+ is displayed as \"You just created this element! Thanks for sharing this info with the world and helping people worldwide.\" by layers Street Lamps, Utility Poles, Lit streets, All streets", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#just_created", "icon_url": "./assets/svg/party.svg" }, @@ -53,240 +53,273 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#images", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, + { + "key": "man_made", + "value": "utility_pole", + "description": "man_made=utility_pole is displayed as \"This lamp is mounted on a utility pole\" by layer Street Lamps", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#utility_pole", + "icon_url": "./assets/layers/street_lamps/street_lamp.svg" + }, + { + "key": "man_made", + "description": "man_made= is displayed as \"This lamp is not mounted on a utility pole\" by layer Street Lamps", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#utility_pole", + "icon_url": "./assets/layers/street_lamps/street_lamp.svg" + }, { "key": "ref", - "description": "Values of `ref` are shown with \"This street lamp has the reference number {ref}\" and can be updated. The question is \"What is the reference number of this street lamp?\" by layer Street Lamps", + "description": "Values of `ref` are shown with \"This street lamp has the reference number {ref}\" and can be updated. The question is \"What is the reference number of this street lamp?\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#ref", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "support", "value": "catenary", - "description": "support=catenary is displayed as \"This lamp is suspended using cables\" by layer Street Lamps", + "description": "support=catenary is displayed as \"This lamp is suspended using cables\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#support", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "support", "value": "ceiling", - "description": "support=ceiling is displayed as \"This lamp is mounted on a ceiling\" by layer Street Lamps", + "description": "support=ceiling is displayed as \"This lamp is mounted on a ceiling\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#support", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "support", "value": "ground", - "description": "support=ground is displayed as \"This lamp is mounted in the ground\" by layer Street Lamps", + "description": "support=ground is displayed as \"This lamp is mounted in the ground\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#support", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "support", "value": "pedestal", - "description": "support=pedestal is displayed as \"This lamp is mounted on a short pole (mostly < 1.5m)\" by layer Street Lamps", + "description": "support=pedestal is displayed as \"This lamp is mounted on a short pole (mostly < 1.5m)\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#support", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "support", "value": "pole", - "description": "support=pole is displayed as \"This lamp is mounted on a pole\" by layer Street Lamps", + "description": "support=pole is displayed as \"This lamp is mounted on a pole\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#support", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "support", "value": "wall", - "description": "support=wall is displayed as \"This lamp is mounted directly to the wall\" by layer Street Lamps", + "description": "support=wall is displayed as \"This lamp is mounted directly to the wall\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#support", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "support", "value": "wall_mount", - "description": "support=wall_mount is displayed as \"This lamp is mounted to the wall using a metal bar\" by layer Street Lamps", + "description": "support=wall_mount is displayed as \"This lamp is mounted to the wall using a metal bar\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#support", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "lamp_mount", "value": "straight_mast", - "description": "lamp_mount=straight_mast is displayed as \"This lamp sits atop of a straight mast\" by layer Street Lamps", + "description": "lamp_mount=straight_mast is displayed as \"This lamp sits atop of a straight mast\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#lamp_mount", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "lamp_mount", "value": "bent_mast", - "description": "lamp_mount=bent_mast is displayed as \"This lamp sits at the end of a bent mast\" by layer Street Lamps", + "description": "lamp_mount=bent_mast is displayed as \"This lamp sits at the end of a bent mast\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#lamp_mount", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:method", "value": "electric", - "description": "light:method=electric is displayed as \"This lamp is lit electrically\" by layer Street Lamps", + "description": "light:method=electric is displayed as \"This lamp is lit electrically\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#method", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:method", "value": "LED", - "description": "light:method=LED is displayed as \"This lamp uses LEDs\" by layer Street Lamps", + "description": "light:method=LED is displayed as \"This lamp uses LEDs\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#method", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:method", "value": "incandescent", - "description": "light:method=incandescent is displayed as \"This lamp uses incandescent lighting\" by layer Street Lamps", + "description": "light:method=incandescent is displayed as \"This lamp uses incandescent lighting\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#method", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:method", "value": "halogen", - "description": "light:method=halogen is displayed as \"This lamp uses halogen lighting\" by layer Street Lamps", + "description": "light:method=halogen is displayed as \"This lamp uses halogen lighting\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#method", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:method", "value": "discharge", - "description": "light:method=discharge is displayed as \"This lamp uses discharge lamps (unknown type)\" by layer Street Lamps", + "description": "light:method=discharge is displayed as \"This lamp uses discharge lamps (unknown type)\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#method", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:method", "value": "mercury", - "description": "light:method=mercury is displayed as \"This lamp uses a mercury-vapour lamp (lightly blueish)\" by layer Street Lamps", + "description": "light:method=mercury is displayed as \"This lamp uses a mercury-vapour lamp (lightly blueish)\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#method", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:method", "value": "metal-halide", - "description": "light:method=metal-halide is displayed as \"This lamp uses metal-halide lamps (bright white)\" by layer Street Lamps", + "description": "light:method=metal-halide is displayed as \"This lamp uses metal-halide lamps (bright white)\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#method", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:method", "value": "fluorescent", - "description": "light:method=fluorescent is displayed as \"This lamp uses fluorescent lighting\" by layer Street Lamps", + "description": "light:method=fluorescent is displayed as \"This lamp uses fluorescent lighting\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#method", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:method", "value": "sodium", - "description": "light:method=sodium is displayed as \"This lamp uses sodium lamps (unknown type)\" by layer Street Lamps", + "description": "light:method=sodium is displayed as \"This lamp uses sodium lamps (unknown type)\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#method", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:method", "value": "low_pressure_sodium", - "description": "light:method=low_pressure_sodium is displayed as \"This lamp uses low pressure sodium lamps (monochrome orange)\" by layer Street Lamps", + "description": "light:method=low_pressure_sodium is displayed as \"This lamp uses low pressure sodium lamps (monochrome orange)\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#method", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:method", "value": "high_pressure_sodium", - "description": "light:method=high_pressure_sodium is displayed as \"This lamp uses high pressure sodium lamps (orange with white)\" by layer Street Lamps", + "description": "light:method=high_pressure_sodium is displayed as \"This lamp uses high pressure sodium lamps (orange with white)\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#method", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:method", "value": "gas", - "description": "light:method=gas is displayed as \"This lamp is lit using gas\" by layer Street Lamps", + "description": "light:method=gas is displayed as \"This lamp is lit using gas\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#method", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:colour", - "description": "Values of `light:colour` are shown with \"This lamp emits {light:colour} light\" and can be updated. The question is \"What colour light does this lamp emit?\" by layer Street Lamps", + "description": "Values of `light:colour` are shown with \"This lamp emits {light:colour} light\" and can be updated. The question is \"What colour light does this lamp emit?\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#colour", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:colour", "value": "white", - "description": "light:colour=white is displayed as \"This lamp emits white light\" by layer Street Lamps", + "description": "light:colour=white is displayed as \"This lamp emits white light\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#colour", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:colour", "value": "green", - "description": "light:colour=green is displayed as \"This lamp emits green light\" by layer Street Lamps", + "description": "light:colour=green is displayed as \"This lamp emits green light\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#colour", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:colour", "value": "orange", - "description": "light:colour=orange is displayed as \"This lamp emits orange light\" by layer Street Lamps", + "description": "light:colour=orange is displayed as \"This lamp emits orange light\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#colour", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:count", - "description": "Values of `light:count` are shown with \"This lamp has {light:count} fixtures\" and can be updated. The question is \"How many fixtures does this light have?\" by layer Street Lamps", + "description": "Values of `light:count` are shown with \"This lamp has {light:count} fixtures\" and can be updated. The question is \"How many fixtures does this light have?\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#count", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:count", "value": "1", - "description": "light:count=1 is displayed as \"This lamp has 1 fixture\" by layer Street Lamps", + "description": "light:count=1 is displayed as \"This lamp has 1 fixture\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#count", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:count", "value": "2", - "description": "light:count=2 is displayed as \"This lamp has 2 fixtures\" by layer Street Lamps", + "description": "light:count=2 is displayed as \"This lamp has 2 fixtures\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#count", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:lit", "value": "dusk-dawn", - "description": "light:lit=dusk-dawn is displayed as \"This lamp is lit at night\" by layer Street Lamps", + "description": "light:lit=dusk-dawn is displayed as \"This lamp is lit at night\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#lit", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:lit", "value": "24/7", - "description": "light:lit=24/7 is displayed as \"This lamp is lit 24/7\" by layer Street Lamps", + "description": "light:lit=24/7 is displayed as \"This lamp is lit 24/7\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#lit", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:lit", "value": "motion", - "description": "light:lit=motion is displayed as \"This lamp is lit based on motion\" by layer Street Lamps", + "description": "light:lit=motion is displayed as \"This lamp is lit based on motion\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#lit", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:lit", "value": "demand", - "description": "light:lit=demand is displayed as \"This lamp is lit based on demand (e.g. with a pushbutton)\" by layer Street Lamps", + "description": "light:lit=demand is displayed as \"This lamp is lit based on demand (e.g. with a pushbutton)\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#lit", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, { "key": "light:direction", - "description": "Values of `light:direction` are shown with \"This lamp points towards {light:direction}\" and can be updated. The question is \"Where does this lamp point to?\" by layer Street Lamps", + "description": "Values of `light:direction` are shown with \"This lamp points towards {light:direction}\" and can be updated. The question is \"Where does this lamp point to?\" by layers Street Lamps, Utility Poles", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/street_lamps.md#direction", "icon_url": "./assets/layers/street_lamps/street_lamp.svg" }, + { + "key": "man_made", + "value": "utility_pole", + "description": "Features with this tag are displayed by layer Utility Poles", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/utility_pole.md", + "icon_url": "./assets/layers/utility_pole/utility_pole.svg" + }, + { + "key": "highway", + "value": "street_lamp", + "description": "highway=street_lamp is displayed as \"This utility pole has a street lamp mounted on it.\" by layer Utility Poles", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/utility_pole.md#street_lamp", + "icon_url": "./assets/layers/utility_pole/utility_pole.svg" + }, + { + "key": "highway", + "description": "highway= is displayed as \"This utility pole does not have a street lamp mounted on it.\" by layer Utility Poles", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/utility_pole.md#street_lamp", + "icon_url": "./assets/layers/utility_pole/utility_pole.svg" + }, { "key": "highway", "description": "Features with this tag are displayed by layers Lit streets, All streets", diff --git a/Docs/TagInfo/mapcomplete_toilets.json b/Docs/TagInfo/mapcomplete_toilets.json index 66b86b228b..9d8c942477 100644 --- a/Docs/TagInfo/mapcomplete_toilets.json +++ b/Docs/TagInfo/mapcomplete_toilets.json @@ -223,33 +223,6 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#opening_hours_24_7", "icon_url": "./assets/layers/toilet/toilets.svg" }, - { - "key": "wheelchair", - "value": "yes", - "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "wheelchair", - "value": "no", - "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "wheelchair", - "value": "designated", - "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, - { - "key": "door:width", - "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Toilets", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_door_width", - "icon_url": "./assets/layers/toilet/toilets.svg" - }, { "key": "toilets:position", "value": "seated", @@ -478,6 +451,114 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#description", "icon_url": "./assets/layers/toilet/toilets.svg" }, + { + "key": "image", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "panoramax", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "mapillary", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikidata", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikipedia", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "image", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "panoramax", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "mapillary", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikidata", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wikipedia", + "description": "Images are displayed based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary (This is only shown if wheelchair=yes) by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#images", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "yes", + "description": "wheelchair=yes is displayed as \"There is a dedicated toilet for wheelchair users\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair access\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "designated", + "description": "wheelchair=designated is displayed as \"There is only a dedicated toilet for wheelchair users\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#toilets_wheelchair", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "wheelchair", + "value": "no", + "description": "wheelchair=no is displayed as \"No wheelchair accessible toilet\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_title", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "toilets:wheelchair:access", + "value": "yes", + "description": "toilets:wheelchair:access=yes is displayed as \"The wheelchair accessible toilets are freely accessible\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_access", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, + { + "key": "toilets:wheelchair:access", + "value": "key", + "description": "toilets:wheelchair:access=key is displayed as \"One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_access", + "icon_url": "key" + }, + { + "key": "door:width", + "description": "Values of `door:width` are shown with \"The door to the wheelchair-accessible toilet is {canonical(door:width)} wide\" and can be updated. The question is \"What is the width of the door to the wheelchair accessible toilet?\" by layer Toilets", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/toilet.md#wheelchair_door_width", + "icon_url": "./assets/layers/toilet/toilets.svg" + }, { "key": "toilets", "value": "yes", diff --git a/Docs/TagInfo/mapcomplete_wayside_shrines.json b/Docs/TagInfo/mapcomplete_wayside_shrines.json index 3d5744a17b..d1dc67e25e 100644 --- a/Docs/TagInfo/mapcomplete_wayside_shrines.json +++ b/Docs/TagInfo/mapcomplete_wayside_shrines.json @@ -62,7 +62,7 @@ }, { "key": "name", - "description": "Values of `name` are shown with \"The name of this {title()} is {name}\" and can be updated. The question is \"What's the name of this {title()}?\" by layer Wayside Shrines and Crosses", + "description": "Values of `name` are shown with \"The name of this {title()} is {name}\" and can be updated. The question is \"What's the name of this {title()}?\" by layers Wayside Shrines and Crosses, Artworks", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/wayside_shrine.md#shrine_name", "icon_url": "./assets/layers/wayside_shrine/shrine.svg" }, @@ -185,7 +185,7 @@ }, { "key": "denomination", - "description": "Values of `denomination` are shown with \"The religious denomination is {denomination}\" and can be updated. The question is \"What's the Christian denomination of this {title()}?\" by layer Wayside Shrines and Crosses", + "description": "Values of `denomination` are shown with \"The religious denomination is {denomination}\" and can be updated. The question is \"What's the Christian denomination of this {title()}?\" by layers Wayside Shrines and Crosses, Artworks", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/wayside_shrine.md#denomination_christian", "icon_url": "./assets/layers/wayside_shrine/shrine.svg" }, @@ -319,6 +319,40 @@ "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/wayside_shrine.md#denomination_other", "icon_url": "./assets/layers/wayside_shrine/shrine.svg" }, + { + "key": "subject:wikidata", + "description": "Values of `subject:wikidata` are shown with \"{wikipedia(subject:wikidata)}\" and can be updated. The question is \"Who is depicted?\" by layer Wayside Shrines and Crosses", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/wayside_shrine.md#subject_wikidata", + "icon_url": "./assets/layers/wayside_shrine/shrine.svg" + }, + { + "key": "subject:wikidata", + "value": "Q345", + "description": "subject:wikidata=Q345 is displayed as \"Mother mary is depicted\" by layer Wayside Shrines and Crosses", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/wayside_shrine.md#subject_wikidata", + "icon_url": "./assets/layers/wayside_shrine/shrine.svg" + }, + { + "key": "subject:wikidata", + "value": "Q942467", + "description": "subject:wikidata=Q942467 is displayed as \"Jesus Christ as a child is depicted\" by layer Wayside Shrines and Crosses", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/wayside_shrine.md#subject_wikidata", + "icon_url": "./assets/layers/wayside_shrine/shrine.svg" + }, + { + "key": "subject:wikidata", + "value": "Q302", + "description": "subject:wikidata=Q302 is displayed as \"Jesus Christ (as an adult) is depicted\" by layer Wayside Shrines and Crosses", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/wayside_shrine.md#subject_wikidata", + "icon_url": "./assets/layers/wayside_shrine/shrine.svg" + }, + { + "key": "subject:wikidata", + "value": "Q164294", + "description": "subject:wikidata=Q164294 is displayed as \"Saint Anne (mother of Mary) is depicted\" by layer Wayside Shrines and Crosses", + "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/wayside_shrine.md#subject_wikidata", + "icon_url": "./assets/layers/wayside_shrine/shrine.svg" + }, { "key": "level", "description": "Values of `level` are shown with \"Located on the {level}th floor\" and can be updated. The question is \"On what level is this feature located?\" by layer Wayside Shrines and Crosses", @@ -889,18 +923,6 @@ "description": "historic= is displayed as \"This artwork does not act as a wayside shrine\" by layer Artworks", "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/artwork.md#doubles_as_wayside_shrine", "icon_url": "./assets/themes/artwork/artwork.svg" - }, - { - "key": "name", - "description": "Values of `name` are shown with \"The name of this shrine is {name}\" and can be updated. The question is \"What's the name of this shrine?\" by layer Artworks", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/artwork.md#shrine_name", - "icon_url": "./assets/themes/artwork/artwork.svg" - }, - { - "key": "denomination", - "description": "Values of `denomination` are shown with \"The religious denomination is {denomination}\" and can be updated. The question is \"What's the Christian denomination of the shrine?\" by layer Artworks", - "doc_url": "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Layers/artwork.md#denomination_christian", - "icon_url": "./assets/themes/artwork/artwork.svg" } ] } \ No newline at end of file diff --git a/Docs/Themes/architecture.md b/Docs/Themes/architecture.md index 1db572970d..4bf3c5846e 100644 --- a/Docs/Themes/architecture.md +++ b/Docs/Themes/architecture.md @@ -169,7 +169,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/atm.md b/Docs/Themes/atm.md index 4d9344ca8f..31ca479631 100644 --- a/Docs/Themes/atm.md +++ b/Docs/Themes/atm.md @@ -120,7 +120,7 @@ The question is `Does this bank have an ATM?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button @@ -309,7 +309,7 @@ The question is `Does this post office have an ATM?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/bag.md b/Docs/Themes/bag.md index 01bb55ea27..dc0e954cb8 100644 --- a/Docs/Themes/bag.md +++ b/Docs/Themes/bag.md @@ -108,7 +108,7 @@ The question is `What kind of building is this?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -150,7 +150,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* # bag_pand @@ -228,7 +228,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -273,7 +273,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Themes/bookcases.md b/Docs/Themes/bookcases.md index d0463229f7..5d37f96fd5 100644 --- a/Docs/Themes/bookcases.md +++ b/Docs/Themes/bookcases.md @@ -9,6 +9,7 @@ The theme introduction reads: This theme contains the following layers: - [public_bookcase](../Layers/public_bookcase.md) + - [walls_and_buildings](../Layers/walls_and_buildings.md) Available languages: diff --git a/Docs/Themes/buurtnatuur.md b/Docs/Themes/buurtnatuur.md index be2f1a4075..30252807b3 100644 --- a/Docs/Themes/buurtnatuur.md +++ b/Docs/Themes/buurtnatuur.md @@ -155,7 +155,7 @@ The question is `Wat is de naam van dit gebied?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -256,7 +256,7 @@ The question is `Wat is de naam van dit gebied?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -358,7 +358,7 @@ The question is `Wat is de naam van dit gebied?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Themes/circular_economy.md b/Docs/Themes/circular_economy.md index 52c155de19..6a90614fb7 100644 --- a/Docs/Themes/circular_economy.md +++ b/Docs/Themes/circular_economy.md @@ -15,6 +15,7 @@ This theme contains the following layers: - [assisted_repair](../Layers/assisted_repair.md) - [shops_second_hand (defined in this theme)](#shops_second_hand) - [shops](../Layers/shops.md) + - [walls_and_buildings](../Layers/walls_and_buildings.md) Available languages: @@ -141,7 +142,7 @@ Elements must match **any** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -636,7 +637,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -731,7 +732,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/climbing.md b/Docs/Themes/climbing.md index 05da65078c..2f785b1899 100644 --- a/Docs/Themes/climbing.md +++ b/Docs/Themes/climbing.md @@ -151,7 +151,7 @@ Elements must match **all** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -653,7 +653,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -748,7 +748,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/cycle_highways.md b/Docs/Themes/cycle_highways.md index 592348fb8b..ad40519e16 100644 --- a/Docs/Themes/cycle_highways.md +++ b/Docs/Themes/cycle_highways.md @@ -134,7 +134,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -250,7 +250,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Themes/cyclenodes.md b/Docs/Themes/cyclenodes.md index 32a598f346..9d0e1d3554 100644 --- a/Docs/Themes/cyclenodes.md +++ b/Docs/Themes/cyclenodes.md @@ -55,6 +55,9 @@ Available languages: - [Basic tags for this layer](#basic-tags-for-this-layer) - [Supported attributes](#supported-attributes) + [images](#images) + + [name](#name) + + [ref](#ref) + + [ele](#ele) + [leftover-questions](#leftover-questions) + [move-button](#move-button) + [delete-button](#delete-button) @@ -102,7 +105,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -169,7 +172,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -205,15 +208,44 @@ Elements must match **all** of the following expressions: ## Supported attributes +**Warning:**,this quick overview is incomplete, + +| attribute | type | values which are supported by this layer | +-----|-----|----- | +| [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [ref](https://wiki.openstreetmap.org/wiki/Key:ref) | [string](../SpecialInputElements.md#string) | | +| [ele](https://wiki.openstreetmap.org/wiki/Key:ele) | [float](../SpecialInputElements.md#float) | | + ### images This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images _This tagrendering has no question and is thus read-only_ *{image_carousel()}{image_upload()}* +### name + +The question is `What is the name noted on this guidepost?` +*Name noted on the guidepost: {name}* is shown if `name` is set + + - *There is no name noted on this guidepost* is shown if with noname=yes + +### ref + +The question is `What is the reference number of this guidepost?` +*Reference number of the guidepost: {ref}* is shown if `ref` is set + + - *There is no reference number noted on this guidepost* is shown if with noref=yes + +### ele + +The question is `What is the elevation noted on this guidepost?` +*Elevation noted on the guidepost: {ele} m* is shown if `ele` is set + + - *There is no elevation noted on this guidepost* is shown if with noele=yes + ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/cyclestreets.md b/Docs/Themes/cyclestreets.md index e60fd791df..e23329f37d 100644 --- a/Docs/Themes/cyclestreets.md +++ b/Docs/Themes/cyclestreets.md @@ -126,7 +126,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### split_button @@ -206,7 +206,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### split_button diff --git a/Docs/Themes/cyclofix.md b/Docs/Themes/cyclofix.md index 3f43b6675a..b5d655497f 100644 --- a/Docs/Themes/cyclofix.md +++ b/Docs/Themes/cyclofix.md @@ -354,7 +354,7 @@ The question is `What type of items are repaired here?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button @@ -580,7 +580,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button @@ -2163,7 +2163,7 @@ The question is `Is this vending machine still operational?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/etymology.md b/Docs/Themes/etymology.md index dee0dde2b2..7a50f020f9 100644 --- a/Docs/Themes/etymology.md +++ b/Docs/Themes/etymology.md @@ -50,7 +50,8 @@ Available languages: + [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) + [simple etymology](#simple-etymology) + [questions](#questions) - + [street-name-sign-image](#street-name-sign-image) + + [streetsign-image-carousel](#streetsign-image-carousel) + + [streetsign-upload](#streetsign-upload) + [minimap](#minimap) + [etymology_multi_apply](#etymology_multi_apply) + [wikipedia](#wikipedia) @@ -64,7 +65,8 @@ Available languages: + [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) + [simple etymology](#simple-etymology) + [questions](#questions) - + [street-name-sign-image](#street-name-sign-image) + + [streetsign-image-carousel](#streetsign-image-carousel) + + [streetsign-upload](#streetsign-upload) + [minimap](#minimap) + [etymology_multi_apply](#etymology_multi_apply) + [wikipedia](#wikipedia) @@ -78,7 +80,8 @@ Available languages: + [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) + [simple etymology](#simple-etymology) + [questions](#questions) - + [street-name-sign-image](#street-name-sign-image) + + [streetsign-image-carousel](#streetsign-image-carousel) + + [streetsign-upload](#streetsign-upload) + [minimap](#minimap) + [etymology_multi_apply](#etymology_multi_apply) + [wikipedia](#wikipedia) @@ -92,7 +95,8 @@ Available languages: + [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) + [simple etymology](#simple-etymology) + [questions](#questions) - + [street-name-sign-image](#street-name-sign-image) + + [streetsign-image-carousel](#streetsign-image-carousel) + + [streetsign-upload](#streetsign-upload) + [minimap](#minimap) + [etymology_multi_apply](#etymology_multi_apply) + [wikipedia](#wikipedia) @@ -106,7 +110,8 @@ Available languages: + [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) + [simple etymology](#simple-etymology) + [questions](#questions) - + [street-name-sign-image](#street-name-sign-image) + + [streetsign-image-carousel](#streetsign-image-carousel) + + [streetsign-upload](#streetsign-upload) + [minimap](#minimap) + [etymology_multi_apply](#etymology_multi_apply) + [wikipedia](#wikipedia) @@ -120,7 +125,8 @@ Available languages: + [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) + [simple etymology](#simple-etymology) + [questions](#questions) - + [street-name-sign-image](#street-name-sign-image) + + [streetsign-image-carousel](#streetsign-image-carousel) + + [streetsign-upload](#streetsign-upload) + [minimap](#minimap) + [etymology_multi_apply](#etymology_multi_apply) + [wikipedia](#wikipedia) @@ -134,7 +140,8 @@ Available languages: + [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) + [simple etymology](#simple-etymology) + [questions](#questions) - + [street-name-sign-image](#street-name-sign-image) + + [streetsign-image-carousel](#streetsign-image-carousel) + + [streetsign-upload](#streetsign-upload) + [minimap](#minimap) + [etymology_multi_apply](#etymology_multi_apply) + [wikipedia](#wikipedia) @@ -148,7 +155,8 @@ Available languages: + [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) + [simple etymology](#simple-etymology) + [questions](#questions) - + [street-name-sign-image](#street-name-sign-image) + + [streetsign-image-carousel](#streetsign-image-carousel) + + [streetsign-upload](#streetsign-upload) + [minimap](#minimap) + [etymology_multi_apply](#etymology_multi_apply) + [wikipedia](#wikipedia) @@ -214,10 +222,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap @@ -300,10 +313,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap @@ -386,10 +404,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap @@ -472,10 +495,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap @@ -558,10 +586,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap @@ -644,10 +677,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap @@ -730,10 +768,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap @@ -816,10 +859,15 @@ Show the questions block at this location _This tagrendering has no question and is thus read-only_ *{questions()}* -### street-name-sign-image +### streetsign-image-carousel _This tagrendering has no question and is thus read-only_ -*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* +*{image_carousel(image:streetsign;panoramax:streetsign)}* + +### streetsign-upload + +_This tagrendering has no question and is thus read-only_ +*{image_upload(image:streetsign,Add image of a street name sign,)}* ### minimap diff --git a/Docs/Themes/facadegardens.md b/Docs/Themes/facadegardens.md index 3d06ff664c..f8286e693a 100644 --- a/Docs/Themes/facadegardens.md +++ b/Docs/Themes/facadegardens.md @@ -144,7 +144,7 @@ The question is `Extra describing info about the garden (if needed and not yet d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/fritures.md b/Docs/Themes/fritures.md index 44749777d6..af8f3f7d47 100644 --- a/Docs/Themes/fritures.md +++ b/Docs/Themes/fritures.md @@ -139,7 +139,7 @@ Elements must match **all** of the following expressions: | [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [outside](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Doutside) | | [service:electricity](https://wiki.openstreetmap.org/wiki/Key:service:electricity) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dlimited) [ask](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dask) [no](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dno) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | @@ -492,7 +492,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -523,7 +523,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/ghostsigns.md b/Docs/Themes/ghostsigns.md index 7a31649d4f..3ab609eba5 100644 --- a/Docs/Themes/ghostsigns.md +++ b/Docs/Themes/ghostsigns.md @@ -202,7 +202,7 @@ The question is `Is this sign for a business that no longer exists or no longer ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button @@ -520,8 +520,8 @@ The question is `Does this artwork also double as wayside shrine?` ### shrine_name -The question is `What's the name of this shrine?` -*The name of this shrine is {name}* is shown if `name` is set +The question is `What's the name of this {title()}?` +*The name of this {title()} is {name}* is shown if `name` is set - *This shrine does not have a name* is shown if with noname=yes @@ -552,7 +552,7 @@ This tagrendering has labels ### denomination_christian -The question is `What's the Christian denomination of the shrine?` +The question is `What's the Christian denomination of this {title()}?` *The religious denomination is {denomination}* is shown if `denomination` is set - *The religious subdenomination is Catholic* is shown if with denomination=catholic @@ -609,7 +609,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/glutenfree.md b/Docs/Themes/glutenfree.md index c018cdbba4..488bdae045 100644 --- a/Docs/Themes/glutenfree.md +++ b/Docs/Themes/glutenfree.md @@ -216,7 +216,7 @@ Elements must match **all** of the following expressions: | [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [outside](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Doutside) | | [service:electricity](https://wiki.openstreetmap.org/wiki/Key:service:electricity) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dlimited) [ask](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dask) [no](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dno) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | @@ -569,7 +569,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -600,7 +600,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button @@ -871,7 +871,7 @@ The question is `Is this place accessible with a wheelchair?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button @@ -967,7 +967,7 @@ Elements must match **all** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -1473,7 +1473,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -1555,7 +1555,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/grb.md b/Docs/Themes/grb.md index 22af4114ad..c03cd52c4c 100644 --- a/Docs/Themes/grb.md +++ b/Docs/Themes/grb.md @@ -158,7 +158,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -272,7 +272,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -301,7 +301,7 @@ Elements must match the expression ** [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -652,7 +652,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -747,7 +747,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/kerbs_and_crossings.md b/Docs/Themes/kerbs_and_crossings.md index 6191de4c2c..9e49c4c0eb 100644 --- a/Docs/Themes/kerbs_and_crossings.md +++ b/Docs/Themes/kerbs_and_crossings.md @@ -39,7 +39,7 @@ Available languages: - [Basic tags for this layer](#basic-tags-for-this-layer) - [Supported attributes](#supported-attributes) + [images](#images) - + [crossing-type](#crossing-type) + + [signals](#signals) + [markings](#markings) + [crossing-bicycle-allowed](#crossing-bicycle-allowed) + [crossing-has-island](#crossing-has-island) @@ -86,11 +86,11 @@ Elements must match the expression ** [crossing](https://wiki.openstreetmap.org/wiki/Key:crossing) | Multiple choice | [uncontrolled](https://wiki.openstreetmap.org/wiki/Tag:crossing%3Duncontrolled) [traffic_signals](https://wiki.openstreetmap.org/wiki/Tag:crossing%3Dtraffic_signals) | +| [crossing:signals](https://wiki.openstreetmap.org/wiki/Key:crossing:signals) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:crossing:signals%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:crossing:signals%3Dyes) | | [crossing:markings](https://wiki.openstreetmap.org/wiki/Key:crossing:markings) | [string](../SpecialInputElements.md#string) | [no](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dno) [zebra](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dzebra) [lines](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dlines) [ladder](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dladder) [dashes](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Ddashes) [dots](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Ddots) [surface](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dsurface) [ladder:skewed](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dladder:skewed) [zebra:paired](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dzebra:paired) [zebra:bicolour](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dzebra:bicolour) [zebra:double](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dzebra:double) [pictograms](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dpictograms) [ladder:paired](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dladder:paired) [lines:paired](https://wiki.openstreetmap.org/wiki/Tag:crossing:markings%3Dlines:paired) | | [bicycle](https://wiki.openstreetmap.org/wiki/Key:bicycle) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:bicycle%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:bicycle%3Dno) | | [crossing:island](https://wiki.openstreetmap.org/wiki/Key:crossing:island) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:crossing:island%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:crossing:island%3Dno) | -| [tactile_paving](https://wiki.openstreetmap.org/wiki/Key:tactile_paving) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dno) | +| [tactile_paving](https://wiki.openstreetmap.org/wiki/Key:tactile_paving) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dno) [partial](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dpartial) | | [button_operated](https://wiki.openstreetmap.org/wiki/Key:button_operated) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:button_operated%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:button_operated%3Dno) | | [traffic_signals:sound](https://wiki.openstreetmap.org/wiki/Key:traffic_signals:sound) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dno) [locate](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dlocate) [walk](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dwalk) | | [traffic_signals:vibration](https://wiki.openstreetmap.org/wiki/Key:traffic_signals:vibration) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:vibration%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:vibration%3Dno) | @@ -104,14 +104,13 @@ This block shows the known images which are linked with the `image`-keys, but al _This tagrendering has no question and is thus read-only_ *{image_carousel()}{image_upload()}* -### crossing-type +### signals -The question is `What kind of crossing is this?` +The question is `Are there traffic signals at this crossing?` - - *Crossing, without traffic lights* is shown if with crossing=uncontrolled - - *Crossing with traffic signals* is shown if with crossing=traffic_signals - - *Zebra crossing* is shown if with crossing=zebra. _This option cannot be chosen as answer_ - - *Crossing without crossing markings* is shown if with crossing=unmarked. _This option cannot be chosen as answer_ + - *There are no traffic signals at this crossing* is shown if with crossing:signals=no + - *There are traffic signals at this crossing* is shown if with crossing:signals=yes + - *There are traffic signals at this crossing* is shown if with crossing=traffic_signals. _This option cannot be chosen as answer_ This tagrendering is only visible in the popup if the following condition is met: highway=crossing @@ -136,6 +135,8 @@ The question is `What kind of markings does this crossing have?` - *This crossing has lines on either side of the crossing, along with bars connecting them, with an interruption in every bar* is shown if with crossing:markings=ladder:paired - *This crossing has double lines on either side of the crossing* is shown if with crossing:markings=lines:paired +This tagrendering is only visible in the popup if the following condition is met: highway=crossing + ### crossing-bicycle-allowed The question is `Is this crossing also for bicycles?` @@ -161,6 +162,7 @@ The question is `Does this crossing have tactile paving?` - *This crossing has tactile paving* is shown if with tactile_paving=yes - *This crossing does not have tactile paving* is shown if with tactile_paving=no - *This crossing has tactile paving, but is not correct* is shown if with tactile_paving=incorrect. _This option cannot be chosen as answer_ + - *This crrosing has tactile paving, but only on one side* is shown if with tactile_paving=partial This tagrendering is only visible in the popup if the following condition is met: highway=crossing @@ -234,7 +236,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/lactosefree.md b/Docs/Themes/lactosefree.md index 23cc84c507..a5b26ba6f4 100644 --- a/Docs/Themes/lactosefree.md +++ b/Docs/Themes/lactosefree.md @@ -212,7 +212,7 @@ Elements must match **all** of the following expressions: | [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [outside](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Doutside) | | [service:electricity](https://wiki.openstreetmap.org/wiki/Key:service:electricity) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dlimited) [ask](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dask) [no](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dno) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | @@ -565,7 +565,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -596,7 +596,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button @@ -867,7 +867,7 @@ The question is `Is this place accessible with a wheelchair?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button @@ -963,7 +963,7 @@ Elements must match **all** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -1469,7 +1469,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -1551,7 +1551,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/mapcomplete-changes.md b/Docs/Themes/mapcomplete-changes.md index 567764376d..89d6423f78 100644 --- a/Docs/Themes/mapcomplete-changes.md +++ b/Docs/Themes/mapcomplete-changes.md @@ -116,7 +116,7 @@ The question is `What version of MapComplete was used to make this change?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Themes/onwheels.md b/Docs/Themes/onwheels.md index 5a5914e178..0826d1b968 100644 --- a/Docs/Themes/onwheels.md +++ b/Docs/Themes/onwheels.md @@ -102,7 +102,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -142,7 +142,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/openlovemap.md b/Docs/Themes/openlovemap.md index a6f68a1a28..fb0ed8f871 100644 --- a/Docs/Themes/openlovemap.md +++ b/Docs/Themes/openlovemap.md @@ -191,7 +191,7 @@ Elements must match the expression ** [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -687,7 +687,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -799,7 +799,7 @@ The question is `Does {title()} have a private video booth?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button @@ -1287,7 +1287,7 @@ The question is `Does {title()} have a private video booth?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button @@ -1424,7 +1424,7 @@ The question is `Does {title()} have a private video booth?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/personal.md b/Docs/Themes/personal.md index 072df8b90b..287f7cde1b 100644 --- a/Docs/Themes/personal.md +++ b/Docs/Themes/personal.md @@ -10,6 +10,7 @@ This theme contains the following layers: - [advertising](../Layers/advertising.md) - [aerialway](../Layers/aerialway.md) + - [all_streets](../Layers/all_streets.md) - [ambulancestation](../Layers/ambulancestation.md) - [animal_shelter](../Layers/animal_shelter.md) - [artwork](../Layers/artwork.md) @@ -140,6 +141,7 @@ This theme contains the following layers: - [transit_stops](../Layers/transit_stops.md) - [tree_node](../Layers/tree_node.md) - [trolley_bay](../Layers/trolley_bay.md) + - [utility_pole](../Layers/utility_pole.md) - [vending_machine](../Layers/vending_machine.md) - [veterinary](../Layers/veterinary.md) - [viewpoint](../Layers/viewpoint.md) diff --git a/Docs/Themes/pets.md b/Docs/Themes/pets.md index 42ab12c252..9af35bf7ce 100644 --- a/Docs/Themes/pets.md +++ b/Docs/Themes/pets.md @@ -14,6 +14,7 @@ This theme contains the following layers: - [dog_toilet](../Layers/dog_toilet.md) - [food_dog_friendly (defined in this theme)](#food_dog_friendly) - [food](../Layers/food.md) + - [pet_shops (defined in this theme)](#pet_shops) - [shop_dog_friendly (defined in this theme)](#shop_dog_friendly) - [shops](../Layers/shops.md) - [waste_basket_dogs (defined in this theme)](#waste_basket_dogs) @@ -91,7 +92,8 @@ Available languages: + [delete-button](#delete-button) + [lod](#lod) - [Filters](#filters) -3. [shop_dog_friendly](#shop_dog_friendly) +3. [pet_shops](#pet_shops) + - [Presets](#presets) - [Basic tags for this layer](#basic-tags-for-this-layer) - [Supported attributes](#supported-attributes) + [images](#images) @@ -142,7 +144,58 @@ Available languages: + [delete-button](#delete-button) + [lod](#lod) - [Filters](#filters) -4. [waste_basket_dogs](#waste_basket_dogs) +4. [shop_dog_friendly](#shop_dog_friendly) + - [Basic tags for this layer](#basic-tags-for-this-layer) + - [Supported attributes](#supported-attributes) + + [images](#images) + + [reviews](#reviews) + + [shops-name](#shops-name) + + [shop_types](#shop_types) + + [brand](#brand) + + [second_hand](#second_hand) + + [opening_hours](#opening_hours) + + [Opening hours](#opening-hours) + + [website](#website) + + [email](#email) + + [phone](#phone) + + [payment-options](#payment-options) + + [repeated](#repeated) + + [single_level](#single_level) + + [copyshop-print-sizes](#copyshop-print-sizes) + + [copyshop-binding](#copyshop-binding) + + [optometrist_service](#optometrist_service) + + [key_cutter](#key_cutter) + + [sells_new_bikes](#sells_new_bikes) + + [bike_second_hand](#bike_second_hand) + + [repairs_bikes](#repairs_bikes) + + [bicycle_rental](#bicycle_rental) + + [bicycle-types](#bicycle-types) + + [rental-capacity-city_bike](#rental-capacity-city_bike) + + [rental-capacity-ebike](#rental-capacity-ebike) + + [rental-capacity-kid_bike](#rental-capacity-kid_bike) + + [rental-capacity-bmx](#rental-capacity-bmx) + + [rental-capacity-mtb](#rental-capacity-mtb) + + [rental-capacity-bicycle_pannier](#rental-capacity-bicycle_pannier) + + [rental-capacity-tandem_bicycle](#rental-capacity-tandem_bicycle) + + [bike_pump_service](#bike_pump_service) + + [bike_repair_tools](#bike_repair_tools) + + [bike_wash](#bike_wash) + + [bike_cleaning-service_bicycle_cleaning_charge](#bike_cleaning-service_bicycle_cleaning_charge) + + [internet](#internet) + + [internet-fee](#internet-fee) + + [internet-ssid](#internet-ssid) + + [organic](#organic) + + [sugar_free](#sugar_free) + + [gluten_free](#gluten_free) + + [lactose_free](#lactose_free) + + [dog-access](#dog-access) + + [description](#description) + + [leftover-questions](#leftover-questions) + + [move-button](#move-button) + + [delete-button](#delete-button) + + [lod](#lod) + - [Filters](#filters) +5. [waste_basket_dogs](#waste_basket_dogs) - [Basic tags for this layer](#basic-tags-for-this-layer) - [Supported attributes](#supported-attributes) + [images](#images) @@ -210,7 +263,7 @@ Elements must match **all** of the following expressions: | [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [outside](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Doutside) | | [service:electricity](https://wiki.openstreetmap.org/wiki/Key:service:electricity) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dlimited) [ask](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dask) [no](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dno) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | @@ -563,7 +616,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -594,7 +647,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button @@ -707,7 +760,7 @@ This tagrendering has labels -----|-----|----- | | has_internet.0 | Offers internet | internet_access=wlan | internet_access=yes | internet_access=wired | -# shop_dog_friendly +# pet_shops This layer is based on [shops](../Layers/shops.md) @@ -717,15 +770,17 @@ A shop No themes use this layer +## Presets + +The following options to create new points are included: + + - **a pet shop** which has the following tags:shop=pet + ## Basic tags for this layer -Elements must match **all** of the following expressions: +Elements must match the expression **shop=pet** -0. craft=shoe_repair | craft=key_cutter | shop~.+ -1. dog=leashed | dog=yes -2. shop!=mall - -[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22craft%22%3D%22shoe_repair%22%5D%5B%22dog%22%3D%22leashed%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22craft%22%3D%22shoe_repair%22%5D%5B%22dog%22%3D%22yes%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22craft%22%3D%22key_cutter%22%5D%5B%22dog%22%3D%22leashed%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22craft%22%3D%22key_cutter%22%5D%5B%22dog%22%3D%22yes%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%5D%5B%22dog%22%3D%22leashed%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%5D%5B%22dog%22%3D%22yes%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22shop%22%3D%22pet%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) ## Supported attributes @@ -760,7 +815,7 @@ Elements must match **all** of the following expressions: | [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -1255,7 +1310,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -1350,7 +1405,875 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* + +### move-button + +_This tagrendering has no question and is thus read-only_ +*{move_button()}* + +### delete-button + +_This tagrendering has no question and is thus read-only_ +*{delete_button()}* + +### lod + +_This tagrendering has no question and is thus read-only_ +*{linked_data_from_website()}* + +This tagrendering has labels +`added_by_default` + +## Filters + +| id | question | osmTags | +-----|-----|----- | +| shop_types.0 | *What kind of shop is this?* (default) | | +| shop_types.1 | Bicycle rental shop | shop=bicycle_rental | ((shop=rental & amenity=bicycle_rental)) | +| shop_types.2 | Farm Supply Shop | shop=agrarian | +| shop_types.3 | Liquor Store | shop=alcohol | +| shop_types.4 | Anime / Manga Shop | shop=anime | +| shop_types.5 | Antique Shop | shop=antiques | +| shop_types.6 | Appliance Store | shop=appliance | +| shop_types.7 | Art Store | shop=art | +| shop_types.8 | Baby Goods Store | shop=baby_goods | +| shop_types.9 | Bag/Luggage Store | shop=bag | +| shop_types.10 | Bakery | shop=bakery | +| shop_types.11 | Bathroom Furnishing Store | shop=bathroom_furnishing | +| shop_types.12 | Beauty Shop | shop=beauty | +| shop_types.13 | Bedding/Mattress Store | shop=bed | +| shop_types.14 | Beverage Store | shop=beverages | +| shop_types.15 | Bicycle Shop | shop=bicycle | +| shop_types.16 | Boat Store | shop=boat | +| shop_types.17 | Bookmaker | shop=bookmaker | +| shop_types.18 | Bookstore | shop=books | +| shop_types.19 | Brewing Supply Store | shop=brewing_supplies | +| shop_types.20 | Butcher | shop=butcher | +| shop_types.21 | Camera Equipment Store | shop=camera | +| shop_types.22 | Candle Shop | shop=candles | +| shop_types.23 | Cannabis Shop | shop=cannabis | +| shop_types.24 | Car Dealership | shop=car | +| shop_types.25 | Car Parts Store | shop=car_parts | +| shop_types.26 | Car Repair Shop | shop=car_repair | +| shop_types.27 | RV Dealership | shop=caravan | +| shop_types.28 | Carpet Store | shop=carpet | +| shop_types.29 | Catalog Shop | shop=catalogue | +| shop_types.30 | Charity Store | shop=charity | +| shop_types.31 | Cheese Store | shop=cheese | +| shop_types.32 | Drugstore | shop=chemist | +| shop_types.33 | Chocolate Store | shop=chocolate | +| shop_types.34 | Clothing Store | shop=clothes | +| shop_types.35 | Coffee Store | shop=coffee | +| shop_types.36 | Collectibles Shop | shop=collector | +| shop_types.37 | Computer Store | shop=computer | +| shop_types.38 | Candy Store | shop=confectionery | +| shop_types.39 | Convenience Store | shop=convenience | +| shop_types.40 | Copy Store | shop=copyshop | +| shop_types.41 | Cosmetics Store | shop=cosmetics | +| shop_types.42 | Rural Supplies Store | shop=country_store | +| shop_types.43 | Arts & Crafts Store | shop=craft | +| shop_types.44 | Curtain Store | shop=curtain | +| shop_types.45 | Dairy Store | shop=dairy | +| shop_types.46 | Delicatessen | shop=deli | +| shop_types.47 | Department Store | shop=department_store | +| shop_types.48 | DIY Store | shop=doityourself | +| shop_types.49 | Door Shop | shop=doors | +| shop_types.50 | Dry Cleaner | shop=dry_cleaning | +| shop_types.51 | E-Cigarette Shop | shop=e-cigarette | +| shop_types.52 | Electrical Equipment Store | shop=electrical | +| shop_types.53 | Electronics Store | shop=electronics | +| shop_types.54 | Erotic Store | shop=erotic | +| shop_types.55 | Fabric Store | shop=fabric | +| shop_types.56 | Produce Stand | shop=farm | +| shop_types.57 | Fashion Accessories Store | shop=fashion_accessories | +| shop_types.58 | Fireplace Store | shop=fireplace | +| shop_types.59 | Fishing Shop | shop=fishing | +| shop_types.60 | Flooring Supply Shop | shop=flooring | +| shop_types.61 | Florist | shop=florist | +| shop_types.62 | Framing Shop | shop=frame | +| shop_types.63 | Frozen Food Store | shop=frozen_food | +| shop_types.64 | Fuel Shop | shop=fuel | +| shop_types.65 | Funeral Home | shop=funeral_directors | +| shop_types.66 | Furniture Store | shop=furniture | +| shop_types.67 | Tabletop Game Store | shop=games | +| shop_types.68 | Garden Center | shop=garden_centre | +| shop_types.69 | Bottled Gas Shop | shop=gas | +| shop_types.70 | General Store | shop=general | +| shop_types.71 | Gift Shop | shop=gift | +| shop_types.72 | Greengrocer | shop=greengrocer | +| shop_types.73 | Hairdresser | shop=hairdresser | +| shop_types.74 | Hairdresser Supply Store | shop=hairdresser_supply | +| shop_types.75 | Hardware Store | shop=hardware | +| shop_types.76 | Health Food Store | shop=health_food | +| shop_types.77 | Hearing Aids Store | shop=hearing_aids | +| shop_types.78 | Herbalist | shop=herbalist | +| shop_types.79 | Hifi Store | shop=hifi | +| shop_types.80 | Honey Store | shop=honey | +| shop_types.81 | Household Linen Shop | shop=household_linen | +| shop_types.82 | Houseware Store | shop=houseware | +| shop_types.83 | Hunting Shop | shop=hunting | +| shop_types.84 | Interior Decoration Store | shop=interior_decoration | +| shop_types.85 | Jewelry Store | shop=jewelry | +| shop_types.86 | Kiosk | shop=kiosk | +| shop_types.87 | Kitchen Design Store | shop=kitchen | +| shop_types.88 | Laundry | shop=laundry | +| shop_types.89 | Leather Store | shop=leather | +| shop_types.90 | Lighting Store | shop=lighting | +| shop_types.91 | Locksmith | shop=locksmith | +| shop_types.92 | Lottery Shop | shop=lottery | +| shop_types.93 | Mall | shop=mall | +| shop_types.94 | Massage Shop | shop=massage | +| shop_types.95 | Medical Supply Store | shop=medical_supply | +| shop_types.96 | Military Surplus Store | shop=military_surplus | +| shop_types.97 | Mobile Phone Store | shop=mobile_phone | +| shop_types.98 | Model Shop | shop=model | +| shop_types.99 | Money Lender | shop=money_lender | +| shop_types.100 | Motorcycle Dealership | shop=motorcycle | +| shop_types.101 | Motorcycle Repair Shop | shop=motorcycle_repair | +| shop_types.102 | Music Store | shop=music | +| shop_types.103 | Musical Instrument Store | shop=musical_instrument | +| shop_types.104 | Newsstand | shop=newsagent | +| shop_types.105 | Nutrition Supplements Store | shop=nutrition_supplements | +| shop_types.106 | Nuts Shop | shop=nuts | +| shop_types.107 | Optician | shop=optician | +| shop_types.108 | Outdoors Store | shop=outdoor | +| shop_types.109 | Online Retailer Outpost | shop=outpost | +| shop_types.110 | Paint Store | shop=paint | +| shop_types.111 | Party Supply Store | shop=party | +| shop_types.112 | Pasta Store | shop=pasta | +| shop_types.113 | Pastry Shop | shop=pastry | +| shop_types.114 | Pawnshop | shop=pawnbroker | +| shop_types.115 | Perfume Store | shop=perfumery | +| shop_types.116 | Pet Store | shop=pet | +| shop_types.117 | Pet Groomer | shop=pet_grooming | +| shop_types.118 | Photography Store | shop=photo | +| shop_types.119 | Pottery Store | shop=pottery | +| shop_types.120 | Printer Ink Store | shop=printer_ink | +| shop_types.121 | Psychic | shop=psychic | +| shop_types.122 | Fireworks Store | shop=pyrotechnics | +| shop_types.123 | Radio/Electronic Component Store | shop=radiotechnics | +| shop_types.124 | Religious Store | shop=religion | +| shop_types.125 | Rental Shop | shop=rental | +| shop_types.126 | Repair Shop | shop=repair | +| shop_types.127 | Rice Store | shop=rice | +| shop_types.128 | Scuba Diving Shop | shop=scuba_diving | +| shop_types.129 | Seafood Shop | shop=seafood | +| shop_types.130 | Thrift Store | shop=second_hand | +| shop_types.131 | Sewing Supply Shop | shop=sewing | +| shop_types.132 | Shoe Repair Shop | shop=shoe_repair | +| shop_types.133 | Shoe Store | shop=shoes | +| shop_types.134 | Spice Shop | shop=spices | +| shop_types.135 | Sporting Goods Store | shop=sports | +| shop_types.136 | Stationery Store | shop=stationery | +| shop_types.137 | Storage Rental | shop=storage_rental | +| shop_types.138 | Supermarket | shop=supermarket | +| shop_types.139 | Pool Supply Store | shop=swimming_pool | +| shop_types.140 | Tailor | shop=tailor | +| shop_types.141 | Tattoo Parlor | shop=tattoo | +| shop_types.142 | Tea Store | shop=tea | +| shop_types.143 | Telecom Retail Store | shop=telecommunication | +| shop_types.144 | Ticket Seller | shop=ticket | +| shop_types.145 | Tile Shop | shop=tiles | +| shop_types.146 | Tobacco Shop | shop=tobacco | +| shop_types.147 | Tool Rental | shop=tool_hire | +| shop_types.148 | Toy Store | shop=toys | +| shop_types.149 | Trade Shop | shop=trade | +| shop_types.150 | Travel Agency | shop=travel_agency | +| shop_types.151 | Trophy Shop | shop=trophy | +| shop_types.152 | Tire Store | shop=tyres | +| shop_types.153 | Vacuum Cleaner Store | shop=vacuum_cleaner | +| shop_types.154 | Discount Store | shop=variety_store | +| shop_types.155 | Video Store | shop=video | +| shop_types.156 | Video Game Store | shop=video_games | +| shop_types.157 | Watches Shop | shop=watches | +| shop_types.158 | Drinking Water Shop | shop=water | +| shop_types.159 | Watersport/Swim Shop | shop=water_sports | +| shop_types.160 | Weapon Shop | shop=weapons | +| shop_types.161 | Wholesale Store | shop=wholesale | +| shop_types.162 | Wig Shop | shop=wigs | +| shop_types.163 | Window Blind Store | shop=window_blind | +| shop_types.164 | Wine Shop | shop=wine | +| shop_types.165 | This shop is no longer used. It is vacant | disused:shop= | (shop=disused | shop=vacant | disused:shop~^(.+)$ | abandoned:shop~^(.+)$) | + +| id | question | osmTags | +-----|-----|----- | +| open_now.0 | Now open | _isOpen=yes | + +| id | question | osmTags | +-----|-----|----- | +| accepts_cash.0 | Accepts cash | payment:cash=yes | + +| id | question | osmTags | +-----|-----|----- | +| accepts_cards.0 | Accepts payment cards | payment:cards=yes | + +| id | question | osmTags | +-----|-----|----- | +| has_internet.0 | Offers internet | internet_access=wlan | internet_access=yes | internet_access=wired | + +| id | question | osmTags | +-----|-----|----- | +| sugar_free.0 | Has a sugar-free offering | diet:sugar_free=yes | diet:sugar_free=only | diet:sugar_free=limited | + +| id | question | osmTags | +-----|-----|----- | +| gluten_free.0 | Has a gluten free offering | diet:gluten_free=yes | diet:gluten_free=only | diet:gluten_free=limited | + +| id | question | osmTags | +-----|-----|----- | +| lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited | + +| id | question | osmTags | +-----|-----|----- | +| dogs.0 | *No preference towards dogs* (default) | | +| dogs.1 | Dogs allowed | dog=unleashed | dog=yes | +| dogs.2 | No dogs allowed | dog=no | + +# shop_dog_friendly + +This layer is based on [shops](../Layers/shops.md) + +A shop + + - This layer is shown at zoomlevel **15** and higher + +No themes use this layer + +## Basic tags for this layer + +Elements must match **all** of the following expressions: + +0. craft=shoe_repair | craft=key_cutter | shop~.+ +1. dog=leashed | dog=yes +2. shop!=mall + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22craft%22%3D%22shoe_repair%22%5D%5B%22dog%22%3D%22leashed%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22craft%22%3D%22shoe_repair%22%5D%5B%22dog%22%3D%22yes%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22craft%22%3D%22key_cutter%22%5D%5B%22dog%22%3D%22leashed%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22craft%22%3D%22key_cutter%22%5D%5B%22dog%22%3D%22yes%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%5D%5B%22dog%22%3D%22leashed%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%5D%5B%22dog%22%3D%22yes%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + +## Supported attributes + +**Warning:**,this quick overview is incomplete, + +| attribute | type | values which are supported by this layer | +-----|-----|----- | +| [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | [string](../SpecialInputElements.md#string) | [bicycle_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle_rental) [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [honey](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhoney) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [nuts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnuts) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pasta](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpasta) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [rice](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drice) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) | +| [brand](https://wiki.openstreetmap.org/wiki/Key:brand) | [string](../SpecialInputElements.md#string) | | +| [second_hand](https://wiki.openstreetmap.org/wiki/Key:second_hand) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:second_hand%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:second_hand%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:second_hand%3Dno) | +| [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | | +| [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | | +| [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | | +| [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | | +| [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1) | +| [service:binding](https://wiki.openstreetmap.org/wiki/Key:service:binding) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:binding%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:binding%3Dno) | +| [healthcare](https://wiki.openstreetmap.org/wiki/Key:healthcare) | Multiple choice | [optometrist](https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist) [audiologist](https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist) | +| [service:bicycle:retail](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:retail) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:retail%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:retail%3Dno) | +| [service:bicycle:second_hand](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:second_hand) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Dno) [only](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Donly) | +| [service:bicycle:repair](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:repair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Donly_sold) [brand](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dbrand) | +| [service:bicycle:rental](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dno) | +| [rental](https://wiki.openstreetmap.org/wiki/Key:rental) | [string](../SpecialInputElements.md#string) | [city_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcity_bike) [ebike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Debike) [bmx](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbmx) [mtb](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dmtb) [kid_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dkid_bike) [tandem](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dtandem) [racebike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dracebike) [bike_helmet](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbike_helmet) [cargo_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcargo_bike) | +| [capacity:city_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:city_bike) | [pnat](../SpecialInputElements.md#pnat) | | +| [capacity:ebike](https://wiki.openstreetmap.org/wiki/Key:capacity:ebike) | [pnat](../SpecialInputElements.md#pnat) | | +| [capacity:kid_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:kid_bike) | [pnat](../SpecialInputElements.md#pnat) | | +| [capacity:bmx](https://wiki.openstreetmap.org/wiki/Key:capacity:bmx) | [pnat](../SpecialInputElements.md#pnat) | | +| [capacity:mtb](https://wiki.openstreetmap.org/wiki/Key:capacity:mtb) | [pnat](../SpecialInputElements.md#pnat) | | +| [capacity:bicycle_pannier](https://wiki.openstreetmap.org/wiki/Key:capacity:bicycle_pannier) | [pnat](../SpecialInputElements.md#pnat) | | +| [capacity:tandem_bicycle](https://wiki.openstreetmap.org/wiki/Key:capacity:tandem_bicycle) | [pnat](../SpecialInputElements.md#pnat) | | +| [service:bicycle:pump](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:pump) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dno) [separate](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dseparate) | +| [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | +| [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | +| [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | +| [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | +| [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | +| [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | +| [diet:sugar_free](https://wiki.openstreetmap.org/wiki/Key:diet:sugar_free) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Dno) | +| [diet:gluten_free](https://wiki.openstreetmap.org/wiki/Key:diet:gluten_free) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Dno) | +| [diet:lactose_free](https://wiki.openstreetmap.org/wiki/Key:diet:lactose_free) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Dno) | +| [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | +| [description](https://wiki.openstreetmap.org/wiki/Key:description) | [text](../SpecialInputElements.md#text) | | + +### images +This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images +_This tagrendering has no question and is thus read-only_ +*{image_carousel()}{image_upload()}* + +### reviews +Shows the reviews module (including the possibility to leave a review) +_This tagrendering has no question and is thus read-only_ +*{create_review()}{list_reviews()}* + +### shops-name + +The question is `What is the name of this shop?` +*This shop is called {name}* is shown if `name` is set + +### shop_types + +The question is `What kind of shop is this?` +*This is a {shop}* is shown if `shop` is set + + - *Bicycle rental shop* is shown if with shop=bicycle_rental + - *Farm Supply Shop* is shown if with shop=agrarian + - *Liquor Store* is shown if with shop=alcohol + - *Anime / Manga Shop* is shown if with shop=anime + - *Antique Shop* is shown if with shop=antiques + - *Appliance Store* is shown if with shop=appliance + - *Art Store* is shown if with shop=art + - *Baby Goods Store* is shown if with shop=baby_goods + - *Bag/Luggage Store* is shown if with shop=bag + - *Bakery* is shown if with shop=bakery + - *Bathroom Furnishing Store* is shown if with shop=bathroom_furnishing + - *Beauty Shop* is shown if with shop=beauty + - *Bedding/Mattress Store* is shown if with shop=bed + - *Beverage Store* is shown if with shop=beverages + - *Bicycle Shop* is shown if with shop=bicycle + - *Boat Store* is shown if with shop=boat + - *Bookmaker* is shown if with shop=bookmaker + - *Bookstore* is shown if with shop=books + - *Brewing Supply Store* is shown if with shop=brewing_supplies + - *Butcher* is shown if with shop=butcher + - *Camera Equipment Store* is shown if with shop=camera + - *Candle Shop* is shown if with shop=candles + - *Cannabis Shop* is shown if with shop=cannabis + - *Car Dealership* is shown if with shop=car + - *Car Parts Store* is shown if with shop=car_parts + - *Car Repair Shop* is shown if with shop=car_repair + - *RV Dealership* is shown if with shop=caravan + - *Carpet Store* is shown if with shop=carpet + - *Catalog Shop* is shown if with shop=catalogue + - *Charity Store* is shown if with shop=charity + - *Cheese Store* is shown if with shop=cheese + - *Drugstore* is shown if with shop=chemist + - *Chocolate Store* is shown if with shop=chocolate + - *Clothing Store* is shown if with shop=clothes + - *Coffee Store* is shown if with shop=coffee + - *Collectibles Shop* is shown if with shop=collector + - *Computer Store* is shown if with shop=computer + - *Candy Store* is shown if with shop=confectionery + - *Convenience Store* is shown if with shop=convenience + - *Copy Store* is shown if with shop=copyshop + - *Cosmetics Store* is shown if with shop=cosmetics + - *Rural Supplies Store* is shown if with shop=country_store + - *Arts & Crafts Store* is shown if with shop=craft + - *Curtain Store* is shown if with shop=curtain + - *Dairy Store* is shown if with shop=dairy + - *Delicatessen* is shown if with shop=deli + - *Department Store* is shown if with shop=department_store + - *DIY Store* is shown if with shop=doityourself + - *Door Shop* is shown if with shop=doors + - *Dry Cleaner* is shown if with shop=dry_cleaning + - *E-Cigarette Shop* is shown if with shop=e-cigarette + - *Electrical Equipment Store* is shown if with shop=electrical + - *Electronics Store* is shown if with shop=electronics + - *Erotic Store* is shown if with shop=erotic + - *Fabric Store* is shown if with shop=fabric + - *Produce Stand* is shown if with shop=farm + - *Fashion Accessories Store* is shown if with shop=fashion_accessories + - *Fireplace Store* is shown if with shop=fireplace + - *Fishing Shop* is shown if with shop=fishing + - *Flooring Supply Shop* is shown if with shop=flooring + - *Florist* is shown if with shop=florist + - *Framing Shop* is shown if with shop=frame + - *Frozen Food Store* is shown if with shop=frozen_food + - *Fuel Shop* is shown if with shop=fuel + - *Funeral Home* is shown if with shop=funeral_directors + - *Furniture Store* is shown if with shop=furniture + - *Tabletop Game Store* is shown if with shop=games + - *Garden Center* is shown if with shop=garden_centre + - *Bottled Gas Shop* is shown if with shop=gas + - *General Store* is shown if with shop=general + - *Gift Shop* is shown if with shop=gift + - *Greengrocer* is shown if with shop=greengrocer + - *Hairdresser* is shown if with shop=hairdresser + - *Hairdresser Supply Store* is shown if with shop=hairdresser_supply + - *Hardware Store* is shown if with shop=hardware + - *Health Food Store* is shown if with shop=health_food + - *Hearing Aids Store* is shown if with shop=hearing_aids + - *Herbalist* is shown if with shop=herbalist + - *Hifi Store* is shown if with shop=hifi + - *Honey Store* is shown if with shop=honey + - *Household Linen Shop* is shown if with shop=household_linen + - *Houseware Store* is shown if with shop=houseware + - *Hunting Shop* is shown if with shop=hunting + - *Interior Decoration Store* is shown if with shop=interior_decoration + - *Jewelry Store* is shown if with shop=jewelry + - *Kiosk* is shown if with shop=kiosk + - *Kitchen Design Store* is shown if with shop=kitchen + - *Laundry* is shown if with shop=laundry + - *Leather Store* is shown if with shop=leather + - *Lighting Store* is shown if with shop=lighting + - *Locksmith* is shown if with shop=locksmith + - *Lottery Shop* is shown if with shop=lottery + - *Mall* is shown if with shop=mall + - *Massage Shop* is shown if with shop=massage + - *Medical Supply Store* is shown if with shop=medical_supply + - *Military Surplus Store* is shown if with shop=military_surplus + - *Mobile Phone Store* is shown if with shop=mobile_phone + - *Model Shop* is shown if with shop=model + - *Money Lender* is shown if with shop=money_lender + - *Motorcycle Dealership* is shown if with shop=motorcycle + - *Motorcycle Repair Shop* is shown if with shop=motorcycle_repair + - *Music Store* is shown if with shop=music + - *Musical Instrument Store* is shown if with shop=musical_instrument + - *Newsstand* is shown if with shop=newsagent + - *Nutrition Supplements Store* is shown if with shop=nutrition_supplements + - *Nuts Shop* is shown if with shop=nuts + - *Optician* is shown if with shop=optician + - *Outdoors Store* is shown if with shop=outdoor + - *Online Retailer Outpost* is shown if with shop=outpost + - *Paint Store* is shown if with shop=paint + - *Party Supply Store* is shown if with shop=party + - *Pasta Store* is shown if with shop=pasta + - *Pastry Shop* is shown if with shop=pastry + - *Pawnshop* is shown if with shop=pawnbroker + - *Perfume Store* is shown if with shop=perfumery + - *Pet Store* is shown if with shop=pet + - *Pet Groomer* is shown if with shop=pet_grooming + - *Photography Store* is shown if with shop=photo + - *Pottery Store* is shown if with shop=pottery + - *Printer Ink Store* is shown if with shop=printer_ink + - *Psychic* is shown if with shop=psychic + - *Fireworks Store* is shown if with shop=pyrotechnics + - *Radio/Electronic Component Store* is shown if with shop=radiotechnics + - *Religious Store* is shown if with shop=religion + - *Rental Shop* is shown if with shop=rental + - *Repair Shop* is shown if with shop=repair + - *Rice Store* is shown if with shop=rice + - *Scuba Diving Shop* is shown if with shop=scuba_diving + - *Seafood Shop* is shown if with shop=seafood + - *Thrift Store* is shown if with shop=second_hand + - *Sewing Supply Shop* is shown if with shop=sewing + - *Shoe Repair Shop* is shown if with shop=shoe_repair + - *Shoe Store* is shown if with shop=shoes + - *Spice Shop* is shown if with shop=spices + - *Sporting Goods Store* is shown if with shop=sports + - *Stationery Store* is shown if with shop=stationery + - *Storage Rental* is shown if with shop=storage_rental + - *Supermarket* is shown if with shop=supermarket + - *Pool Supply Store* is shown if with shop=swimming_pool + - *Tailor* is shown if with shop=tailor + - *Tattoo Parlor* is shown if with shop=tattoo + - *Tea Store* is shown if with shop=tea + - *Telecom Retail Store* is shown if with shop=telecommunication + - *Ticket Seller* is shown if with shop=ticket + - *Tile Shop* is shown if with shop=tiles + - *Tobacco Shop* is shown if with shop=tobacco + - *Tool Rental* is shown if with shop=tool_hire + - *Toy Store* is shown if with shop=toys + - *Trade Shop* is shown if with shop=trade + - *Travel Agency* is shown if with shop=travel_agency + - *Trophy Shop* is shown if with shop=trophy + - *Tire Store* is shown if with shop=tyres + - *Vacuum Cleaner Store* is shown if with shop=vacuum_cleaner + - *Discount Store* is shown if with shop=variety_store + - *Video Store* is shown if with shop=video + - *Video Game Store* is shown if with shop=video_games + - *Watches Shop* is shown if with shop=watches + - *Drinking Water Shop* is shown if with shop=water + - *Watersport/Swim Shop* is shown if with shop=water_sports + - *Weapon Shop* is shown if with shop=weapons + - *Wholesale Store* is shown if with shop=wholesale + - *Wig Shop* is shown if with shop=wigs + - *Window Blind Store* is shown if with shop=window_blind + - *Wine Shop* is shown if with shop=wine + - *This shop is no longer used. It is vacant* is shown if with disused:shop= + +This tagrendering has labels +`description` + +### brand + +The question is `What is the brand of this shop?` +*Part of {brand}* is shown if `brand` is set + + - *This shop does not have a specific brand, it is not part of a bigger chain* is shown if with not:brand=yes + +### second_hand + +The question is `Does this shop sell second-hand items?` + + - *This shop sells second-hand items only* is shown if with second_hand=only + - *This shop sells second-hand items along with new items* is shown if with second_hand=yes + - *This shop only sells brand-new items* is shown if with second_hand=no + +This tagrendering is only visible in the popup if the following condition is met: shop=clothes | shop=books | shop=charity | shop=furniture | shop=mobile_phone | shop=computer | shop=toys + +### opening_hours + +The question is `What are the opening hours of {title()}?` +*

Opening hours

{opening_hours_table(opening_hours)}* is shown if `opening_hours` is set + + - *Marked as closed for an unspecified time* is shown if with opening_hours=closed. _This option cannot be chosen as answer_ + +### website + +The question is `What is the website of {title()}?` +*{website}* is shown if `website` is set + + - *{contact:website}* is shown if with contact:website~.+. _This option cannot be chosen as answer_ + +This tagrendering has labels +`contact` + +### email + +The question is `What is the email address of {title()}?` +*{email}* is shown if `email` is set + + - *{contact:email}* is shown if with contact:email~.+. _This option cannot be chosen as answer_ + - *{operator:email}* is shown if with operator:email~.+. _This option cannot be chosen as answer_ + +This tagrendering has labels +`contact` + +### phone + +The question is `What is the phone number of {title()}?` +*{link(&LBRACEphone&RBRACE,tel:&LBRACEphone&RBRACE,,,,)}* is shown if `phone` is set + + - *{link(&LBRACEcontact:phone&RBRACE,tel:&LBRACEcontact:phone&RBRACE,,,,)}* is shown if with contact:phone~.+. _This option cannot be chosen as answer_ + +This tagrendering has labels +`contact` + +### payment-options + +The question is `Which methods of payment are accepted here?` + + - *Cash is accepted here* is shown if with payment:cash=yes. Unselecting this answer will add payment:cash=no + - *Payment cards are accepted here* is shown if with payment:cards=yes. Unselecting this answer will add payment:cards=no + - *Payment by QR-code is possible here* is shown if with payment:qr_code=yes. Unselecting this answer will add payment:qr_code=no + +### repeated + +_This tagrendering has no question and is thus read-only_ +*Multiple, identical objects can be found on floors {repeat_on}.* + +This tagrendering is only visible in the popup if the following condition is met: repeat_on~.+ +This tagrendering has labels +`level` + +### single_level + +The question is `On what level is this feature located?` +*Located on the {level}th floor* is shown if `level` is set + + - *Located underground* is shown if with location=underground. _This option cannot be chosen as answer_ + - *Located on the ground floor* is shown if with level=0 + - *Located on the ground floor* is shown if with level=. _This option cannot be chosen as answer_ + - *Located on the first floor* is shown if with level=1 + - *Located on the first basement level* is shown if with level=-1 + +This tagrendering has labels +`level` + +### copyshop-print-sizes + +The question is `What paper formats does this shop offer?` + + - *This shop can print on papers of size A4* is shown if with service:print:A4=yes. Unselecting this answer will add service:print:A4=no + - *This shop can print on papers of size A3* is shown if with service:print:A3=yes. Unselecting this answer will add service:print:A3=no + - *This shop can print on papers of size A2* is shown if with service:print:A2=yes. Unselecting this answer will add service:print:A2=no + - *This shop can print on papers of size A1* is shown if with service:print:A1=yes. Unselecting this answer will add service:print:A1=no + - *This shop can print on papers of size A0* is shown if with service:print:A0=yes. Unselecting this answer will add service:print:A0=no + +This tagrendering is only visible in the popup if the following condition is met: service:print=yes | shop~^(.*copyshop.*)$ | shop~^(.*stationery.*)$ + +### copyshop-binding + +The question is `Does this shop offer a binding service?` + + - *This shop binds papers into a booklet* is shown if with service:binding=yes + - *This shop does bind books* is shown if with service:binding=no + +This tagrendering is only visible in the popup if the following condition is met: service:print=yes | shop~^(.*copyshop.*)$ | shop~^(.*stationery.*)$ + +### optometrist_service + +The question is `Are medical services available here?` + + - *This shop offers eye exams by certified optometrists* is shown if with healthcare=optometrist. Unselecting this answer will add not:healthcare=optometrist + - *This shop offers hearing tests by a certified audiologist* is shown if with healthcare=audiologist. Unselecting this answer will add not:healthcare=audiologist + +This tagrendering is only visible in the popup if the following condition is met: shop=optician | shop=hearing_aid | shop=medical_supply + +### key_cutter + +The question is `Does this shop offer key cutting?` + + - *This shop is also specialized in key cutting* is shown if with craft=key_cutter + - *This shop offers key cutting as a service* is shown if with service:key_cutting=yes + - *This shops does not offer key cutting as a service* is shown if with craft= & service:key_cutting=no + +This tagrendering is only visible in the popup if the following condition is met: craft=key_cutting | shop=shoe_repair | shop=diy | shop=doityourself | shop=home_improvement | shop=hardware | shop=locksmith | shop=repair | service:key_cutting~.+ + +### sells_new_bikes + +The question is `Does this shop sell bikes?` + + - *This shop sells new bikes* is shown if with service:bicycle:retail=yes + - *This shop doesn't sell new bikes* is shown if with service:bicycle:retail=no + +This tagrendering is only visible in the popup if the following condition is met: shop=outdoor | shop=sport | shop=sports | shop=diy | shop=doityourself | service:bicycle:retail~.+ + +### bike_second_hand + +The question is `Does this shop sell second-hand bikes?` + + - *This shop sells second-hand bikes* is shown if with service:bicycle:second_hand=yes + - *This shop doesn't sell second-hand bikes* is shown if with service:bicycle:second_hand=no + - *This shop only sells second-hand bikes* is shown if with service:bicycle:second_hand=only + +This tagrendering is only visible in the popup if the following condition is met: shop=bicycle | shop=charity | shop=second_hand | shop=bicycle_repair | service:bicycle:second_hand~.+ + +### repairs_bikes + +The question is `Does this shop repair bikes?` + + - *This shop repairs bikes* is shown if with service:bicycle:repair=yes + - *This shop doesn't repair bikes* is shown if with service:bicycle:repair=no + - *This shop only repairs bikes bought here* is shown if with service:bicycle:repair=only_sold + - *This shop only repairs bikes of a certain brand* is shown if with service:bicycle:repair=brand + +This tagrendering is only visible in the popup if the following condition is met: service:bicycle:retail=yes | service:bicycle:second_hand=yes | service:bicycle:second_hand=only | shop=sport | shop=sports | shop=outdoor | shop=bicycle | service:bicycle:repair~.+ + +### bicycle_rental + +The question is `Does this shop rent out bikes?` + + - *This shop rents out bikes* is shown if with service:bicycle:rental=yes + - *This shop doesn't rent out bikes* is shown if with service:bicycle:rental=no + +This tagrendering is only visible in the popup if the following condition is met: shop=bicycle | shop=sport | shop=sports | shop=bicycle_repair | shop=outdoor | shop=rental | service:bicycle:rental~.+ + +### bicycle-types + +The question is `What kind of bicycles and accessories are rented here?` +*{rental} is rented here* is shown if `rental` is set + + - *Normal city bikes can be rented here* is shown if with rental=city_bike + - *Electrical bikes can be rented here* is shown if with rental=ebike + - *BMX bikes can be rented here* is shown if with rental=bmx + - *Mountainbikes can be rented here* is shown if with rental=mtb + - *Bikes for children can be rented here* is shown if with rental=kid_bike + - *Tandem bicycles can be rented here* is shown if with rental=tandem + - *Race bicycles can be rented here* is shown if with rental=racebike + - *Bike helmets can be rented here* is shown if with rental=bike_helmet + - *Cargo bikes can be rented here* is shown if with rental=cargo_bike + +This tagrendering is only visible in the popup if the following condition is met: service:bicycle:rental=yes | bicycle_rental~.+ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-city_bike + +The question is `How many city bikes can be rented here?` +*{capacity:city_bike} city bikes can be rented here* is shown if `capacity:city_bike` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*city_bike.*)$ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-ebike + +The question is `How many electrical bikes can be rented here?` +*{capacity:ebike} electrical bikes can be rented here* is shown if `capacity:ebike` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*ebike.*)$ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-kid_bike + +The question is `How many bikes for children can be rented here?` +*{capacity:kid_bike} bikes for children can be rented here* is shown if `capacity:kid_bike` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*kid_bike.*)$ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-bmx + +The question is `How many BMX bikes can be rented here?` +*{capacity:bmx} BMX bikes can be rented here* is shown if `capacity:bmx` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*bmx.*)$ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-mtb + +The question is `How many mountainbikes can be rented here?` +*{capacity:mtb} mountainbikes can be rented here* is shown if `capacity:mtb` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*mtb.*)$ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-bicycle_pannier + +The question is `How many bicycle panniers can be rented here?` +*{capacity:bicycle_pannier} bicycle panniers can be rented here* is shown if `capacity:bicycle_pannier` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*bicycle_pannier.*)$ +This tagrendering has labels +`bicycle_rental` + +### rental-capacity-tandem_bicycle + +The question is `How many tandem can be rented here?` +*{capacity:tandem_bicycle} tandem can be rented here* is shown if `capacity:tandem_bicycle` is set + +This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*tandem_bicycle.*)$ +This tagrendering has labels +`bicycle_rental` + +### bike_pump_service + +The question is `Does this shop offer a bike pump for use by anyone?` + + - *This shop offers a bike pump for anyone* is shown if with service:bicycle:pump=yes + - *This shop doesn't offer a bike pump for anyone* is shown if with service:bicycle:pump=no + - *There is bicycle pump, it is shown as a separate point* is shown if with service:bicycle:pump=separate + +This tagrendering is only visible in the popup if the following condition is met: service:bicycle:retail=yes | shop=bicycle | shop=bicycle_repair | ^(service:bicycle:.+)$~~^(yes)$ | service:bicycle:pump~.+ + +### bike_repair_tools + +The question is `Are there tools here to repair your own bike?` + + - *This shop offers tools for DIY bicycle repair* is shown if with service:bicycle:diy=yes + - *This shop doesn't offer tools for DIY bicycle repair* is shown if with service:bicycle:diy=no + - *Tools for DIY bicycle repair are only available if you bought/hire the bike in the shop* is shown if with service:bicycle:diy=only_sold + +This tagrendering is only visible in the popup if the following condition is met: shop=bicycle | shop=bicycle_repair | service:bicycle:diy~.+ | service:bicycle:repair~^(yes|only)$ + +### bike_wash + +The question is `Are bicycles washed here?` + + - *This shop cleans bicycles* is shown if with service:bicycle:cleaning=yes + - *This shop has an installation where one can clean bicycles themselves* is shown if with service:bicycle:cleaning=diy + - *This shop doesn't offer bicycle cleaning* is shown if with service:bicycle:cleaning=no + +This tagrendering is only visible in the popup if the following condition is met: shop=bicycle | shop=bicycle_repair | ^(service:bicycle:.*)$~~^(yes|only)$ | service:bicycle:cleaning~.+ + +### bike_cleaning-service_bicycle_cleaning_charge + +The question is `How much does it cost to use the cleaning service?` +*Using the cleaning service costs {service:bicycle:cleaning:charge}* is shown if `service:bicycle:cleaning:charge` is set + + - *The cleaning service is free to use* is shown if with service:bicycle:cleaning:fee=no + - *Free to use* is shown if with service:bicycle:cleaning:fee=yes & service:bicycle:cleaning:charge=. _This option cannot be chosen as answer_ + +This tagrendering is only visible in the popup if the following condition is met: amenity!=bicycle_wash & service:bicycle:cleaning!=no & service:bicycle:cleaning~.+ + +### internet + +The question is `Does this place offer internet access?` + + - *This place offers wireless internet access* is shown if with internet_access=wlan + - *This place does not offer internet access* is shown if with internet_access=no + - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ + - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal + - *This place offers wired internet access* is shown if with internet_access=wired + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan + +This tagrendering has labels +`internet-all` + +### internet-fee + +The question is `Is there a fee for internet access?` + + - *There is a fee for the internet access at this place* is shown if with internet_access:fee=yes + - *Internet access is free at this place* is shown if with internet_access:fee=no + - *Internet access is free at this place, for customers only* is shown if with internet_access:fee=customers + +This tagrendering is only visible in the popup if the following condition is met: internet_access!=no & internet_access~.+ +This tagrendering has labels +`internet-all` + +### internet-ssid + +The question is `What is the network name for the wireless internet access?` +*The network name is {internet_access:ssid}* is shown if `internet_access:ssid` is set + + - *Telekom* is shown if with internet_access:ssid=Telekom + +This tagrendering is only visible in the popup if the following condition is met: internet_access~^(.*wlan.*)$ +This tagrendering has labels +`internet-all` + +### organic + +The question is `Does this shop offer organic products?` + + - *This shop offers organic products* is shown if with organic=yes + - *This shop only offers organic products* is shown if with organic=only + - *This shop does not offer organic products* is shown if with organic=no + +This tagrendering is only visible in the popup if the following condition is met: shop=supermarket | shop=convenience | shop=farm | shop=greengrocer | shop=health_food | shop=clothes | shop=shoes | shop=butcher | shop=cosmetics | shop=deli | shop=bakery | shop=alcohol | shop=seafood | shop=beverages | shop=florist + +### sugar_free + +The question is `Does this shop have a sugar free offering?` + + - *This shop only sells sugar free products* is shown if with diet:sugar_free=only + - *This shop has a big sugar free offering* is shown if with diet:sugar_free=yes + - *This shop has a limited sugar free offering* is shown if with diet:sugar_free=limited + - *This shop has no sugar free offering* is shown if with diet:sugar_free=no + +This tagrendering is only visible in the popup if the following condition is met: shop=supermarket | shop=convenience | shop=farm | shop=greengrocer | shop=health_food | shop=deli | shop=bakery | shop=beverages | shop=beverages | shop=pastry | shop=chocolate | shop=frozen_food | shop=ice_cream +This tagrendering has labels +`diets` + +### gluten_free + +The question is `Does this shop have a gluten free offering?` + + - *This shop only sells gluten free products* is shown if with diet:gluten_free=only + - *This shop has a big gluten free offering* is shown if with diet:gluten_free=yes + - *This shop has a limited gluten free offering* is shown if with diet:gluten_free=limited + - *This shop has no gluten free offering* is shown if with diet:gluten_free=no + +This tagrendering is only visible in the popup if the following condition is met: shop=supermarket | shop=convenience | shop=farm | shop=greengrocer | shop=health_food | shop=deli | shop=bakery | shop=beverages | shop=beverages | shop=pastry | shop=chocolate | shop=frozen_food | shop=ice_cream +This tagrendering has labels +`diets` + +### lactose_free + +The question is `Does {title()} have a lactose-free offering?` + + - *Only sells lactose free products* is shown if with diet:lactose_free=only + - *Big lactose free offering* is shown if with diet:lactose_free=yes + - *Limited lactose free offering* is shown if with diet:lactose_free=limited + - *No lactose free offering* is shown if with diet:lactose_free=no + +This tagrendering is only visible in the popup if the following condition is met: shop=supermarket | shop=convenience | shop=farm | shop=greengrocer | shop=health_food | shop=deli | shop=bakery | shop=beverages | shop=beverages | shop=pastry | shop=chocolate | shop=frozen_food | shop=ice_cream +This tagrendering has labels +`diets` + +### dog-access + +The question is `Are dogs allowed in this business?` + + - *Dogs are allowed* is shown if with dog=yes + - *Dogs are not allowed* is shown if with dog=no + - *Dogs are allowed, but they have to be leashed* is shown if with dog=leashed + - *Dogs are allowed and can run around freely* is shown if with dog=unleashed + - *Dogs are allowed only outside* is shown if with dog=outside + +### description + +The question is `Is there still some relevant info that the previous questions did not cover? Feel free to add it here.` +*{description}* is shown if `description` is set + +### leftover-questions + +_This tagrendering has no question and is thus read-only_ +*{questions( ,hidden)}* ### move-button @@ -1641,7 +2564,7 @@ The question is `Does this waste basket have a dispenser for dog excrement bags? ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/postal_codes.md b/Docs/Themes/postal_codes.md index 64de4573e3..a402d65da9 100644 --- a/Docs/Themes/postal_codes.md +++ b/Docs/Themes/postal_codes.md @@ -79,7 +79,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -118,7 +118,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* # town_hall @@ -140,7 +140,7 @@ Elements must match **any** of the following expressions: ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Themes/rainbow_crossings.md b/Docs/Themes/rainbow_crossings.md index 57cd678aae..537edf3090 100644 --- a/Docs/Themes/rainbow_crossings.md +++ b/Docs/Themes/rainbow_crossings.md @@ -79,7 +79,7 @@ The question is `Does this crossing has rainbow paintings?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/scouting.md b/Docs/Themes/scouting.md index f9707dfaf1..1e7d0b7369 100644 --- a/Docs/Themes/scouting.md +++ b/Docs/Themes/scouting.md @@ -34,8 +34,10 @@ Available languages: + [phone](#phone) + [email](#email) + [website](#website) - + [fee](#fee) + [capacity_persons](#capacity_persons) + + [fee](#fee) + + [charge_person_day](#charge_person_day) + + [charge_day](#charge_day) + [caravansites-toilets](#caravansites-toilets) + [toilets-wheelchair](#toilets-wheelchair) + [questions](#questions) @@ -123,8 +125,10 @@ Elements must match **any** of the following expressions: | [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | | | [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | | | [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | | -| [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [currency](../SpecialInputElements.md#currency) | [](https://wiki.openstreetmap.org/wiki/Tag:charge%3D) | | [capacity:persons](https://wiki.openstreetmap.org/wiki/Key:capacity:persons) | [pnat](../SpecialInputElements.md#pnat) | | +| [fee](https://wiki.openstreetmap.org/wiki/Key:fee) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes) | +| [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [currency](../SpecialInputElements.md#currency) | | +| [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [currency](../SpecialInputElements.md#currency) | | | [toilets](https://wiki.openstreetmap.org/wiki/Key:toilets) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dno) | | [toilets:wheelchair](https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Ddesignated) | | [contact:mastodon](https://wiki.openstreetmap.org/wiki/Key:contact:mastodon) | [fediverse](../SpecialInputElements.md#fediverse) | | @@ -177,19 +181,28 @@ The question is `What is the website of {title()}?` This tagrendering has labels `contact` -### fee - -The question is `Is a fee charged here?` -*A fee of {charge} should be paid for here* is shown if `charge` is set - - - *The campsite is free of charge* is shown if with fee=no - - *A fee is charged here.* is shown if with fee=yes & charge= - ### capacity_persons The question is `How many people can stay here?` *{capacity:persons} people can stay here* is shown if `capacity:persons` is set +### fee + +The question is `Is there a fee?` + + - *The campsite is free of charge* is shown if with fee=no + - *There is a fee.* is shown if with fee=yes + +### charge_person_day + +The question is `What is the charge per person per day?` +*Charge per person per day: {charge}* is shown if `charge` is set + +### charge_day + +The question is `What is the charge per day?` +*Charge per day: {charge}* is shown if `charge` is set + ### caravansites-toilets The question is `Does this place have toilets?` @@ -288,7 +301,7 @@ Elements must match **all** of the following expressions: | [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | | | [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) | | [toilets:wheelchair](https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Ddesignated) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | @@ -386,7 +399,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -427,7 +440,7 @@ The question is `Are dogs allowed in this business?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button @@ -496,7 +509,7 @@ Elements must match the expression ** [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | | | [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) | | [toilets:wheelchair](https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Ddesignated) | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) | @@ -594,7 +607,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -635,7 +648,7 @@ The question is `Are dogs allowed in this business?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/speelplekken.md b/Docs/Themes/speelplekken.md index 53c3824336..28100135f6 100644 --- a/Docs/Themes/speelplekken.md +++ b/Docs/Themes/speelplekken.md @@ -82,7 +82,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Themes/sports.md b/Docs/Themes/sports.md index 5ef262f5d8..bcfc175091 100644 --- a/Docs/Themes/sports.md +++ b/Docs/Themes/sports.md @@ -147,7 +147,7 @@ Elements must match the expression ** [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) | | [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) | | [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | | -| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | +| [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wlan) | | [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) | | [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) | | [organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) | @@ -642,7 +642,7 @@ The question is `Does this place offer internet access?` - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_ - *This place offers internet access via a terminal or computer* is shown if with internet_access=terminal - *This place offers wired internet access* is shown if with internet_access=wired - - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi + - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wlan This tagrendering has labels `internet-all` @@ -737,7 +737,7 @@ The question is `Is there still some relevant info that the previous questions d ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/stations.md b/Docs/Themes/stations.md index 6e3632d702..527afbbbd5 100644 --- a/Docs/Themes/stations.md +++ b/Docs/Themes/stations.md @@ -163,7 +163,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/street_lighting.md b/Docs/Themes/street_lighting.md index f5e377f9dd..8ea2c2e825 100644 --- a/Docs/Themes/street_lighting.md +++ b/Docs/Themes/street_lighting.md @@ -9,8 +9,9 @@ The theme introduction reads: This theme contains the following layers: - [street_lamps](../Layers/street_lamps.md) + - [utility_pole](../Layers/utility_pole.md) - [lit_streets (defined in this theme)](#lit_streets) - - [all_streets (defined in this theme)](#all_streets) + - [all_streets](../Layers/all_streets.md) Available languages: @@ -44,14 +45,6 @@ Available languages: + [leftover-questions](#leftover-questions) + [split_button](#split_button) + [lod](#lod) -3. [all_streets](#all_streets) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) - + [images](#images) - + [lit](#lit) - + [leftover-questions](#leftover-questions) - + [split_button](#split_button) - + [lod](#lod) # Layers defined in this theme configuration file These layers can not be reused in different themes. @@ -98,63 +91,7 @@ The question is `Is this street lit?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* - -### split_button - -_This tagrendering has no question and is thus read-only_ -*{split_button()}* - -### lod - -_This tagrendering has no question and is thus read-only_ -*{linked_data_from_website()}* - -This tagrendering has labels -`added_by_default` -# all_streets - - - This layer is shown at zoomlevel **18** and higher - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - -No themes use this layer - -## Basic tags for this layer - -Elements must match **all** of the following expressions: - -0. highway~.+ -1. highway!=platform -2. service!=driveway - -[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22highway%22%5D%5B%22highway%22!%3D%22platform%22%5D%5B%22service%22!%3D%22driveway%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) - -## Supported attributes - -**Warning:**,this quick overview is incomplete, - -| attribute | type | values which are supported by this layer | ------|-----|----- | -| [lit](https://wiki.openstreetmap.org/wiki/Key:lit) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:lit%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:lit%3Dno) [24/7](https://wiki.openstreetmap.org/wiki/Tag:lit%3D24/7) | - -### images -This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images -_This tagrendering has no question and is thus read-only_ -*{image_carousel()}{image_upload()}* - -### lit - -The question is `Is this street lit?` - - - *This street is lit* is shown if with lit=yes - - *This street is not lit* is shown if with lit=no - - *This street is lit at night* is shown if with lit=sunset-sunrise. _This option cannot be chosen as answer_ - - *This street is lit 24/7* is shown if with lit=24/7 - -### leftover-questions - -_This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### split_button diff --git a/Docs/Themes/street_lighting_assen.md b/Docs/Themes/street_lighting_assen.md index b960bead98..f175899046 100644 --- a/Docs/Themes/street_lighting_assen.md +++ b/Docs/Themes/street_lighting_assen.md @@ -56,7 +56,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Themes/toerisme_vlaanderen.md b/Docs/Themes/toerisme_vlaanderen.md index 4f7038850d..63863c4474 100644 --- a/Docs/Themes/toerisme_vlaanderen.md +++ b/Docs/Themes/toerisme_vlaanderen.md @@ -1696,7 +1696,7 @@ This tagrendering has labels ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/transit.md b/Docs/Themes/transit.md index 7fabc11107..921aad2a9a 100644 --- a/Docs/Themes/transit.md +++ b/Docs/Themes/transit.md @@ -76,7 +76,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/uk_addresses.md b/Docs/Themes/uk_addresses.md index 37fc9e223c..d72209f3ae 100644 --- a/Docs/Themes/uk_addresses.md +++ b/Docs/Themes/uk_addresses.md @@ -130,7 +130,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Themes/velopark.md b/Docs/Themes/velopark.md index 157c8452ce..cd4af84a20 100644 --- a/Docs/Themes/velopark.md +++ b/Docs/Themes/velopark.md @@ -233,7 +233,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Themes/vending_machine.md b/Docs/Themes/vending_machine.md index 83f0ffd566..19eba202dd 100644 --- a/Docs/Themes/vending_machine.md +++ b/Docs/Themes/vending_machine.md @@ -306,7 +306,7 @@ The question is `Is this vending machine still operational?` ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/walkingnodes.md b/Docs/Themes/walkingnodes.md index a9be465f1d..e24494fa9f 100644 --- a/Docs/Themes/walkingnodes.md +++ b/Docs/Themes/walkingnodes.md @@ -49,6 +49,9 @@ Available languages: - [Basic tags for this layer](#basic-tags-for-this-layer) - [Supported attributes](#supported-attributes) + [images](#images) + + [name](#name) + + [ref](#ref) + + [ele](#ele) + [leftover-questions](#leftover-questions) + [move-button](#move-button) + [delete-button](#delete-button) @@ -96,7 +99,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -163,7 +166,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -199,15 +202,44 @@ Elements must match **all** of the following expressions: ## Supported attributes +**Warning:**,this quick overview is incomplete, + +| attribute | type | values which are supported by this layer | +-----|-----|----- | +| [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [ref](https://wiki.openstreetmap.org/wiki/Key:ref) | [string](../SpecialInputElements.md#string) | | +| [ele](https://wiki.openstreetmap.org/wiki/Key:ele) | [float](../SpecialInputElements.md#float) | | + ### images This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images _This tagrendering has no question and is thus read-only_ *{image_carousel()}{image_upload()}* +### name + +The question is `What is the name noted on this guidepost?` +*Name noted on the guidepost: {name}* is shown if `name` is set + + - *There is no name noted on this guidepost* is shown if with noname=yes + +### ref + +The question is `What is the reference number of this guidepost?` +*Reference number of the guidepost: {ref}* is shown if `ref` is set + + - *There is no reference number noted on this guidepost* is shown if with noref=yes + +### ele + +The question is `What is the elevation noted on this guidepost?` +*Elevation noted on the guidepost: {ele} m* is shown if `ele` is set + + - *There is no elevation noted on this guidepost* is shown if with noele=yes + ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### move-button diff --git a/Docs/Themes/waste_assen.md b/Docs/Themes/waste_assen.md index 123df75b16..ff36608134 100644 --- a/Docs/Themes/waste_assen.md +++ b/Docs/Themes/waste_assen.md @@ -66,7 +66,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod @@ -104,7 +104,7 @@ _This tagrendering has no question and is thus read-only_ ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Themes/wayside_shrines.md b/Docs/Themes/wayside_shrines.md index 4ff97c7651..7b1a4bfae2 100644 --- a/Docs/Themes/wayside_shrines.md +++ b/Docs/Themes/wayside_shrines.md @@ -4,7 +4,7 @@ _This document details some technical information about this MapComplete theme, mostly about the attributes used in the theme. Various links point toward more information about the attributes, e.g. to the OpenStreetMap-wiki, to TagInfo or tools creating statistics_ The theme introduction reads: -> This map shows shrines found on the side of roads and paths, and allows adding new ones +> This map shows shrines and crosses found on the side of roads and paths, and allows adding new ones This theme contains the following layers: diff --git a/Docs/Themes/width.md b/Docs/Themes/width.md index 4a9ff73e15..8871d3114b 100644 --- a/Docs/Themes/width.md +++ b/Docs/Themes/width.md @@ -120,7 +120,7 @@ This tagrendering is only visible in the popup if the following condition is met ### leftover-questions _This tagrendering has no question and is thus read-only_ -*{questions( ,)}* +*{questions( ,hidden)}* ### lod diff --git a/Docs/Themes/winter_service.md b/Docs/Themes/winter_service.md new file mode 100644 index 0000000000..0c46dc8140 --- /dev/null +++ b/Docs/Themes/winter_service.md @@ -0,0 +1,81 @@ +[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources) + +## Winter Service ( [winter_service](https://mapcomplete.org/winter_service) ) +_This document details some technical information about this MapComplete theme, mostly about the attributes used in the theme. Various links point toward more information about the attributes, e.g. to the OpenStreetMap-wiki, to TagInfo or tools creating statistics_ +The theme introduction reads: + +> A map showing roads and whether they're cleared in winter + +This theme contains the following layers: + + - [serviced_streets (defined in this theme)](#serviced_streets) + - [all_streets](../Layers/all_streets.md) + +Available languages: + + - en + +# Table of contents + + - [Winter Service ( winter_service )](#winter-service-(-winter_service-)) +1. [Layers defined in this theme configuration file](#layers-defined-in-this-theme-configuration-file) +2. [serviced_streets](#serviced_streets) + - [Basic tags for this layer](#basic-tags-for-this-layer) + - [Supported attributes](#supported-attributes) + + [winter_service](#winter_service) + + [leftover-questions](#leftover-questions) + + [lod](#lod) + +# Layers defined in this theme configuration file +These layers can not be reused in different themes. +# serviced_streets + +Streets that have some form of winter service + + - This layer is shown at zoomlevel **16** and higher + - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` + +No themes use this layer + +## Basic tags for this layer + +Elements must match **all** of the following expressions: + +0. winter_service=yes | winter_service=limited +1. highway~.+ +2. highway!=platform +3. service!=driveway + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22winter_service%22%3D%22yes%22%5D%5B%22highway%22%5D%5B%22highway%22!%3D%22platform%22%5D%5B%22service%22!%3D%22driveway%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22winter_service%22%3D%22limited%22%5D%5B%22highway%22%5D%5B%22highway%22!%3D%22platform%22%5D%5B%22service%22!%3D%22driveway%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + +## Supported attributes + +**Warning:**,this quick overview is incomplete, + +| attribute | type | values which are supported by this layer | +-----|-----|----- | +| [winter_service](https://wiki.openstreetmap.org/wiki/Key:winter_service) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:winter_service%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:winter_service%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:winter_service%3Dno) | + +### winter_service + +The question is `Is this road serviced (e.g. cleared of snow) in winter?` + + - *This road is serviced in winter* is shown if with winter_service=yes + - *This road is serviced in winter, but only to a limited extent. This is often signposted as well.* is shown if with winter_service=limited + - *This road is not serviced in winter* is shown if with winter_service=no + +### leftover-questions + +_This tagrendering has no question and is thus read-only_ +*{questions( ,hidden)}* + +### lod + +_This tagrendering has no question and is thus read-only_ +*{linked_data_from_website()}* + +This tagrendering has labels +`added_by_default` + + +This document is autogenerated from [assets/themes/winter_service/winter_service.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/themes/winter_service/winter_service.json) diff --git a/Docs/URL_Parameters.md b/Docs/URL_Parameters.md index 134b7fd3d2..3dd0b98abb 100644 --- a/Docs/URL_Parameters.md +++ b/Docs/URL_Parameters.md @@ -44,8 +44,9 @@ This document gives an overview of which URL-parameters can be used to influence 33. [filter-public_bookcase-adult-books](#filter-public_bookcase-adult-books) 34. [filter-public_bookcase-inside](#filter-public_bookcase-inside) 35. [filter-public_bookcase-has_image](#filter-public_bookcase-has_image) -36. [mode](#mode) -37. [layer-](#layer-) +36. [layer-walls_and_buildings](#layer-walls_and_buildings) +37. [mode](#mode) +38. [layer-](#layer-) ## What is a URL parameter? @@ -406,6 +407,14 @@ This documentation is defined in the source code at [FilterConfig.ts](/src/Model The default value is _0_ +## layer-walls_and_buildings + +Whether or not layer walls_and_buildings is shown + +This documentation is defined in the source code at [FilteredLayer.ts](/src/Models/FilteredLayer.ts#L110) + +The default value is _false_ + ## mode The mode the application starts in, e.g. 'map', 'dashboard' or 'statistics' diff --git a/Docs/wikiIndex.txt b/Docs/wikiIndex.txt index 4c425f8961..0dc4730065 100644 --- a/Docs/wikiIndex.txt +++ b/Docs/wikiIndex.txt @@ -655,7 +655,7 @@ The position of a signpost can be used by a hiker/biker/rider/s… |name= [https://mapcomplete.org/wayside_shrines wayside_shrines] |region= Worldwide |lang= {{#language:en|en}} -|descr= A MapComplete theme: This map shows shrines found on the side of roads and paths, and allows adding new ones +|descr= A MapComplete theme: This map shows shrines and crosses found on the side of roads and paths, and allows adding new ones |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png |genre= POI, editor, wayside_shrines From 1e84c2cc4d547f92740cf0d53510fa2da776d822 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sat, 5 Apr 2025 03:41:27 +0200 Subject: [PATCH 41/90] Chore: cleanup obsolete logs --- src/Logic/State/UserRelatedState.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Logic/State/UserRelatedState.ts b/src/Logic/State/UserRelatedState.ts index dce95bc0b8..13f623e0ab 100644 --- a/src/Logic/State/UserRelatedState.ts +++ b/src/Logic/State/UserRelatedState.ts @@ -51,7 +51,6 @@ class RoundRobinStore { const i = this._index.data this._index.set((i + 1) % this._store.data.length) this._store.data[i] = t - console.trace(">>> Setting", i, this._store.data, t, "new index:", this._index.data) this._store.ping() } @@ -290,7 +289,6 @@ export default class UserRelatedState { 10, (a, b) => a === b ) - this.recentlyVisitedThemes.value.addCallbackAndRunD(th => console.log(">>> themes", th)) this.recentlyVisitedSearch = new OptionallySyncedHistory( "places", this.osmConnection, From 089017b1367bf790da993472920000ee73922069 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sat, 5 Apr 2025 04:01:19 +0200 Subject: [PATCH 42/90] Themes(toilets): improve tagging of wheelchair accessible toilets, various fixes to make this possible --- assets/layers/toilet/toilet.json | 448 +++++++++++++----- .../toilet_at_amenity/toilet_at_amenity.json | 53 +-- .../mapcomplete-changes.json | 9 +- langs/layers/ca.json | 8 +- langs/layers/cs.json | 8 +- langs/layers/da.json | 8 +- langs/layers/de.json | 8 +- langs/layers/en.json | 116 ++++- langs/layers/es.json | 8 +- langs/layers/fr.json | 8 +- langs/layers/nl.json | 60 ++- langs/layers/uk.json | 8 +- public/css/index-tailwind-output.css | 5 - .../Actors/FeaturePropertiesStore.ts | 2 +- src/Logic/State/UserSettingsMetaTagging.ts | 48 +- src/UI/Popup/GroupedView.svelte | 23 +- src/UI/Popup/TagRendering/Questionbox.svelte | 2 +- .../TagRendering/TagRenderingAnswer.svelte | 3 +- .../UISpecialVisualisations.ts | 15 +- 19 files changed, 617 insertions(+), 223 deletions(-) diff --git a/assets/layers/toilet/toilet.json b/assets/layers/toilet/toilet.json index ff4ff196b3..3364dbf004 100644 --- a/assets/layers/toilet/toilet.json +++ b/assets/layers/toilet/toilet.json @@ -121,7 +121,9 @@ "if": { "or": [ "wheelchair=yes", - "wheelchair=designated" + "wheelchair=designated", + "toilets:wheelchair=yes", + "toilets:wheelchair=designated" ] }, "then": "./assets/layers/toilet/wheelchair.svg" @@ -453,7 +455,8 @@ ] }, "=labels": [ - "relevant-questions" + "relevant-questions", + "no-prefix" ], "question": { "en": "When are these toilets opened?", @@ -467,110 +470,11 @@ } } }, - { - "id": "toilets-wheelchair", - "labels": [ - "relevant-questions" - ], - "question": { - "en": "Is there a dedicated toilet for wheelchair users?", - "de": "Können Rollstuhlfahrer die Toilette benutzen?", - "fr": "Y a-t-il des toilettes réservées aux personnes en fauteuil roulant ?", - "nl": "Is er een rolstoeltoegankelijke toilet voorzien?", - "it": "C'è un WC riservato alle persone in sedia a rotelle?", - "da": "Er der et særligt toilet til kørestolsbrugere?", - "ca": "Hi ha un lavabo específic per a usuaris amb cadira de rodes?", - "cs": "Je zde vyhrazená toaleta pro vozíčkáře?", - "es": "¿Hay un baño dedicado para usuarios de sillas de ruedas?" - }, - "mappings": [ - { - "then": { - "en": "There is a dedicated toilet for wheelchair users", - "de": "Rollstuhlfahrer können die Toilette benutzen", - "fr": "Il y a des toilettes réservées pour les personnes à mobilité réduite", - "nl": "Er is een toilet voor rolstoelgebruikers", - "it": "C'è un WC riservato alle persone in sedia a rotelle", - "es": "Hay un baño dedicado para usuarios de sillas de ruedas", - "da": "Der er et særligt toilet til kørestolsbrugere", - "ca": "Hi ha un lavabo dedicat per a usuaris amb cadira de rodes", - "cs": "K dispozici je speciální toaleta pro vozíčkáře" - }, - "if": "wheelchair=yes" - }, - { - "if": "wheelchair=no", - "then": { - "en": "No wheelchair access", - "de": "Rollstuhlfahrer können die Toilette nicht benutzen", - "fr": "Non accessible aux personnes à mobilité réduite", - "nl": "Niet toegankelijk voor rolstoelgebruikers", - "it": "Non accessibile in sedia a rotelle", - "ru": "Недоступно пользователям кресел-колясок", - "es": "Sin acceso para sillas de ruedas", - "da": "Ingen kørestolsadgang", - "ca": "Sense accés per a cadires de rodes", - "cs": "Žádný bezbariérový přístup" - } - }, - { - "if": "wheelchair=designated", - "then": { - "en": "There is only a dedicated toilet for wheelchair users", - "nl": "Er is alleen een toilet voor rolstoelgebruikers", - "de": "Es gibt nur eine barrierefreie Toilette für Rollstuhlfahrer", - "da": "Der er kun et særligt toilet til kørestolsbrugere", - "ca": "És només un lavabo per a usuaris amb cadira de rodes", - "cs": "K dispozici je pouze vyhrazená toaleta pro vozíčkáře", - "es": "Solo hay un baño dedicado para usuarios de sillas de ruedas" - } - } - ] - }, - { - "id": "wheelchair-door-width", - "condition": { - "and": [ - { - "or": [ - "wheelchair=yes", - "wheelchair=designated" - ] - } - ] - }, - "labels": [ - "relevant-questions" - ], - "question": { - "en": "What is the width of the door to the wheelchair accessible toilet?", - "nl": "Hoe breed is de deur van de rolstoeltoegankelijke toilet?", - "fr": "Quelle est la largeur de la porte des toilettes accessibles aux fauteuils roulants ?", - "de": "Wie breit ist die Tür zur rollstuhlgerechten Toilette?", - "da": "Hvad er bredden på døren til det kørestolsvenlige toilet?", - "ca": "Quina és l'amplada de la porta per al lavabo accéssible?", - "cs": "Jaká je šířka dveří na bezbariérovou toaletu?", - "es": "¿Cuál es el ancho de la puerta del baño accesible para sillas de ruedas?" - }, - "render": { - "en": "The door to the wheelchair-accessible toilet is {canonical(door:width)} wide", - "nl": "De deur naar de rolstoeltoegankelijke toilet is {canonical(door:width)} wide", - "fr": "La porte des toilettes accessibles aux fauteuils roulants a une large de {canonical(door:width)}", - "de": "Die Tür zur rollstuhlgerechten Toilette ist {canonical(door:width)} breit", - "da": "Døren til det kørestolsvenlige toilet er {canonical(door:width)} bred", - "ca": "La porta del vàter accessible amb cadira de rodes té {canonical(door:width)} d'ample", - "cs": "Dveře na bezbariérovou toaletu mají šířku {canonical(door:width)}", - "es": "La puerta del baño accesible para sillas de ruedas tiene {canonical(door:width)} de ancho" - }, - "freeform": { - "key": "door:width", - "type": "pfloat" - } - }, { "id": "toilets-type", "labels": [ - "relevant-questions" + "relevant-questions", + "prefixed" ], "question": { "en": "Which kind of toilets are these?", @@ -643,8 +547,16 @@ ] }, { - "condition": "toilets:position!=urinal", + "condition": { + "and": [ + "toilets:position!=urinal" + ] + }, "id": "gender_segregated", + "labels": [ + "relevant-questions", + "no-prefix" + ], "question": { "en": "Are these toilets gender-segregated?", "nl": "Zijn deze toiletten gescheiden op basis van geslacht?", @@ -688,6 +600,10 @@ }, { "id": "menstrual_products", + "labels": [ + "relevant-questions", + "prefixed" + ], "question": { "en": "Are free, menstrual products distributed here?", "nl": "Zijn er gratis menstruatieproducten beschikbaar?", @@ -747,6 +663,10 @@ }, { "id": "menstrual_products_location", + "labels": [ + "relevant-questions", + "prefixed" + ], "question": { "en": "Where are the free menstrual products located?", "nl": "Waar bevinden de gratis menstruatieproducten zich?", @@ -756,9 +676,13 @@ "ca": "On estan ubicats els productes menstruals gratuïts?" }, "condition": { - "or": [ - "toilets:menstrual_products=limited", - "toilets:menstrual_products:location~*" + "and": [ + { + "or": [ + "toilets:menstrual_products=limited", + "toilets:menstrual_products:location~*" + ] + } ] }, "render": { @@ -812,7 +736,8 @@ { "id": "toilets-changing-table", "labels": [ - "relevant-questions" + "relevant-questions", + "no-prefix" ], "question": { "en": "Is a changing table (to change diapers) available?", @@ -859,7 +784,12 @@ }, { "labels": [ - "relevant-questions" + "relevant-questions", + "no-prefix" + ], + "labels": [ + "relevant-questions", + "no-prefix" ], "question": { "en": "Where is the changing table located?", @@ -955,6 +885,10 @@ }, { "id": "toilet-supervised", + "labels": [ + "relevant-questions", + "no-prefix" + ], "question": { "en": "Is this toilets supervised by a person?", "nl": "Is er toezicht op deze toilet?" @@ -999,6 +933,10 @@ }, { "id": "toilet-has-paper", + "labels": [ + "relevant-questions", + "prefixed" + ], "labels": [ "relevant-questions" ], @@ -1051,6 +989,10 @@ "labels": [ "relevant-questions" ], + "labels": [ + "relevant-questions", + "prefixed" + ], "id": "toilet-handwashing", "question": { "en": "Do these toilets have a sink to wash your hands?", @@ -1093,6 +1035,10 @@ }, { "id": "toilet-drying", + "labels": [ + "relevant-questions", + "prefixed" + ], "question": { "en": "Do these toilets have a device to dry your hands?", "nl": "Hebben deze toiletten een apparaat om je handen te drogen?" @@ -1135,9 +1081,285 @@ } } ], - "condition": "toilets:handwashing=yes" + "condition": { + "and": [ + "toilets:handwashing=yes" + ] + } }, - "description" + "description", + { + "id": "wheelchair-group", + "labels": [ + "relevant-questions", + "prefixed" + ], + "render": { + "special": { + "type": "group", + "header": "wheelchair-title", + "labels": "wheelchair" + } + } + }, + { + "id": "toilets-wheelchair", + "labels": [ + "relevant-questions", + "wheelchair", + "hidden", + "no-prefix" + ], + "question": { + "en": "Is there a dedicated toilet for wheelchair users?", + "de": "Können Rollstuhlfahrer die Toilette benutzen?", + "fr": "Y a-t-il des toilettes réservées aux personnes en fauteuil roulant ?", + "nl": "Is er een rolstoeltoegankelijke toilet voorzien?", + "it": "C'è un WC riservato alle persone in sedia a rotelle?", + "da": "Er der et særligt toilet til kørestolsbrugere?", + "ca": "Hi ha un lavabo específic per a usuaris amb cadira de rodes?", + "cs": "Je zde vyhrazená toaleta pro vozíčkáře?", + "es": "¿Hay un baño dedicado para usuarios de sillas de ruedas?" + }, + "mappings": [ + { + "then": { + "en": "There is a dedicated toilet for wheelchair users", + "de": "Rollstuhlfahrer können die Toilette benutzen", + "fr": "Il y a des toilettes réservées pour les personnes à mobilité réduite", + "nl": "Er is een toilet voor rolstoelgebruikers", + "it": "C'è un WC riservato alle persone in sedia a rotelle", + "es": "Hay un baño dedicado para usuarios de sillas de ruedas", + "da": "Der er et særligt toilet til kørestolsbrugere", + "ca": "Hi ha un lavabo dedicat per a usuaris amb cadira de rodes", + "cs": "K dispozici je speciální toaleta pro vozíčkáře" + }, + "if": "wheelchair=yes" + }, + { + "if": "wheelchair=no", + "then": { + "en": "No wheelchair access", + "de": "Rollstuhlfahrer können die Toilette nicht benutzen", + "fr": "Non accessible aux personnes à mobilité réduite", + "nl": "Niet toegankelijk voor rolstoelgebruikers", + "it": "Non accessibile in sedia a rotelle", + "ru": "Недоступно пользователям кресел-колясок", + "es": "Sin acceso para sillas de ruedas", + "da": "Ingen kørestolsadgang", + "ca": "Sense accés per a cadires de rodes", + "cs": "Žádný bezbariérový přístup" + } + }, + { + "if": "wheelchair=designated", + "then": { + "en": "There is only a dedicated toilet for wheelchair users", + "nl": "Er is alleen een toilet voor rolstoelgebruikers", + "de": "Es gibt nur eine barrierefreie Toilette für Rollstuhlfahrer", + "da": "Der er kun et særligt toilet til kørestolsbrugere", + "ca": "És només un lavabo per a usuaris amb cadira de rodes", + "cs": "K dispozici je pouze vyhrazená toaleta pro vozíčkáře", + "es": "Solo hay un baño dedicado para usuarios de sillas de ruedas" + } + } + ] + }, + { + "id": "wheelchair-picture-carousel", + "condition": { + "and": [ + { + "or": [ + "wheelchair=yes", + "wheelchair=designated", + "toilets:wheelchair=yes", + "toilets:wheelchair=designated" + ] + } + ] + }, + "labels": [ + "wheelchair", + "hidden", + "relevant-questions", + "prefixed" + ], + "render": { + "special": { + "type": "image_carousel", + "image_key": "toilets:wheelchair:panoramax;toilets:wheelchair:image;toilets:wheelchair:mapillary" + } + } + }, + { + "id": "wheelchair-picture", + "condition": { + "and": [ + { + "or": [ + "wheelchair=yes", + "wheelchair=designated", + "toilets:wheelchair=yes", + "toilets:wheelchair=designated" + ] + } + ] + }, + "labels": [ + "wheelchair", + "hidden", + "relevant-questions", + "prefixed" + ], + "render": { + "special": { + "type": "image_upload", + "image_key": "toilets:wheelchair:panoramax", + "label": { + "en": "Add a picture of the wheelchair accessible toilet", + "nl": "Voeg een foto van de rolstoeltoegankelijke toilet toe" + } + } + } + }, + { + "id": "wheelchair-title", + "labels": [ + "hidden", + "relevant-questions", + "prefixed" + ], + "render": { + "en": "Wheelchair accessible toilet", + "nl": "Rolstoeltoegankelijke toilet" + }, + "icon": "./assets/layers/toilet/wheelchair.svg", + "mappings": [ + { + "if": { + "or": [ + "wheelchair=no", + "toilets:wheelchair=no" + ] + }, + "then": { + "en": "No wheelchair accessible toilet", + "nl": "Geen rolstoeltoegankelijke toilet" + } + } + ] + }, + { + "id": "wheelchair-access", + "question": { + "en": "Is the wheelchair-accessible toilet locked?", + "nl": "Is de rolstoeltoegankelijke toilet op slot?" + }, + "condition": { + "and": [ + { + "or": [ + "wheelchair=yes", + "wheelchair=designated", + "toilets:wheelchair=yes", + "toilets:wheelchair=designated" + ] + }, + { + "or": [ + "access=yes", + "access=public", + "access=customers" + ] + } + ] + }, + "labels": [ + "hidden", + "wheelchair", + "relevant-questions", + "prefixed" + ], + "mappings": [ + { + "if": "toilets:wheelchair:access=yes", + "alsoShowIf": "toilets:wheelchair:access=", + "then": { + "en": "The wheelchair accessible toilets are freely accessible", + "nl": "De rolstoeltoegankelijke toilet is vrij toegankelijk" + } + }, + { + "if": "toilets:wheelchair:access=key", + "icon": "key", + "then": { + "en": "One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key", + "nl": "Men moet toestemming vragen om de rolstoeltoegankelijke toilet te gebruiken, bv. door een sleutel te vragen" + } + } + ] + }, + { + "id": "wheelchair-door-width", + "condition": { + "and": [ + { + "or": [ + "wheelchair=yes", + "wheelchair=designated", + "toilets:wheelchair=yes", + "toilets:wheelchair=designated" + ] + } + ] + }, + "labels": [ + "relevant-questions", + "wheelchair", + "hidden", + "prefixed" + ], + "question": { + "en": "What is the width of the door to the wheelchair accessible toilet?", + "nl": "Hoe breed is de deur van de rolstoeltoegankelijke toilet?", + "fr": "Quelle est la largeur de la porte des toilettes accessibles aux fauteuils roulants ?", + "de": "Wie breit ist die Tür zur rollstuhlgerechten Toilette?", + "da": "Hvad er bredden på døren til det kørestolsvenlige toilet?", + "ca": "Quina és l'amplada de la porta per al lavabo accéssible?", + "cs": "Jaká je šířka dveří na bezbariérovou toaletu?", + "es": "¿Cuál es el ancho de la puerta del baño accesible para sillas de ruedas?" + }, + "render": { + "en": "The door to the wheelchair-accessible toilet is {canonical(door:width)} wide", + "nl": "De deur naar de rolstoeltoegankelijke toilet is {canonical(door:width)} wide", + "fr": "La porte des toilettes accessibles aux fauteuils roulants a une large de {canonical(door:width)}", + "de": "Die Tür zur rollstuhlgerechten Toilette ist {canonical(door:width)} breit", + "da": "Døren til det kørestolsvenlige toilet er {canonical(door:width)} bred", + "ca": "La porta del vàter accessible amb cadira de rodes té {canonical(door:width)} d'ample", + "cs": "Dveře na bezbariérovou toaletu mají šířku {canonical(door:width)}", + "es": "La puerta del baño accesible para sillas de ruedas tiene {canonical(door:width)} de ancho" + }, + "freeform": { + "key": "door:width", + "type": "pfloat" + } + }, + { + "id": "questions-wheelchair", + "labels": [ + "wheelchair", + "hidden", + "relevant-questions" + ], + "render": { + "special": { + "type": "questions", + "show_all": "yes", + "labels": "wheelchair" + } + } + } ], "filter": [ { @@ -1159,7 +1381,9 @@ "osmTags": { "or": [ "wheelchair=yes", - "wheelchair=designated" + "wheelchair=designated", + "toilets:wheelchair=yes", + "toilets:wheelchair=designated" ] } } diff --git a/assets/layers/toilet_at_amenity/toilet_at_amenity.json b/assets/layers/toilet_at_amenity/toilet_at_amenity.json index 63e9d1d992..3656a0eac2 100644 --- a/assets/layers/toilet_at_amenity/toilet_at_amenity.json +++ b/assets/layers/toilet_at_amenity/toilet_at_amenity.json @@ -349,6 +349,10 @@ }, { "id": "toilets-wheelchair", + "labels": [ + "wheelchair", + "hidden" + ], "question": { "en": "Is there a dedicated toilet for wheelchair users?", "de": "Können Rollstuhlfahrer die Toilette benutzen?", @@ -406,48 +410,21 @@ } ] }, + "toilet.prefixed", { - "id": "wheelchair-door-width", - "condition": { - "or": [ - "toilets:wheelchair=yes", - "toilets:wheelchair=designated" - ] - }, - "question": { - "en": "What is the width of the door to the wheelchair accessible toilet?", - "nl": "Hoe breed is de deur van de rolstoeltoegankelijke toilet?", - "fr": "Quelle est la largeur de la porte des toilettes accessibles aux fauteuils roulants ?", - "de": "Wie breit ist die Tür zur rollstuhlgerechten Toilette?", - "da": "Hvad er bredden på døren til det kørestolsvenlige toilet?", - "ca": "Quina és l'amplada de la porta del lavabo accessible per a cadira de rodes?", - "cs": "Jaká je šířka dveří na bezbariérovou toaletu?", - "sl": "Koliko so široka vrata v stranišče za invalide na vozičku?", - "es": "¿Cuál es el ancho de la puerta del baño accesible para sillas de ruedas?" - }, + "id": "questions-wheelchair", + "labels": [ + "wheelchair", + "hidden" + ], "render": { - "en": "The door to the wheelchair-accessible toilet is {canonical(toilets:door:width)} wide", - "nl": "De deur naar de rolstoeltoegankelijke toilet is {canonical(toilets:door:width)} wide", - "fr": "La porte des toilettes accessibles aux fauteuils roulants a une large de {canonical(toilets:door:width)}", - "de": "Die Tür zur rollstuhlgerechten Toilette ist {canonical(toilets:door:width)} breit", - "da": "Døren til det kørestolsvenlige toilet er {canonical(toilets:door:width)} bred", - "ca": "La porta del vàter accessible amb cadira de rodes és {canonical(toilets:door:width)} d'ample", - "cs": "Dveře na toaletu pro vozíčkáře jsou {canonical(toilets:door:width)} široké", - "sl": "Vrata v stranišče za invalide na vozičku so široka {canonical(toilets:door:width)}", - "es": "La puerta del baño accesible para sillas de ruedas tiene {canonical(toilets:door:width)} de ancho" - }, - "freeform": { - "key": "toilets:door:width", - "type": "pfloat" + "special": { + "type": "questions", + "labels": "wheelchair", + "show_all": "yes" + } } }, - "toilet.toilets-type", - "toilet.toilets-changing-table", - "toilet.toilet-changing_table:location", - "toilet.toilet-handwashing", - "toilet.toilet-has-paper", - "toilet.menstrual_products", - "toilet.menstrual_products_location", { "builtin": "description", "override": { diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index 335c9ba802..5b843b26b9 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -858,21 +858,24 @@ { "question": { "en": "All platforms", - "cs": "Všechny platformy" + "cs": "Všechny platformy", + "de": "Alle Plattformen" }, "quesiton": "All platforms" }, { "question": { "en": "Made with Android", - "cs": "Vytvořeno s Androidem" + "cs": "Vytvořeno s Androidem", + "de": "Mit Android erstellt" }, "osmTags": "android=yes" }, { "question": { "en": "Made on the web", - "cs": "Vytvořeno na webu" + "cs": "Vytvořeno na webu", + "de": "Im Internet erstellt" }, "osmTags": "android=" } diff --git a/langs/layers/ca.json b/langs/layers/ca.json index 82e2bfb2d2..859f50b577 100644 --- a/langs/layers/ca.json +++ b/langs/layers/ca.json @@ -5242,8 +5242,12 @@ "questionHint": "Això podria estar escrit al cartell del nom del carrer", "render": "Anomenat en honor a {name:etymology}" }, - "street-name-sign-image": { - "render": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Afegeix una imatge de la placa amb el nom del carrer)}" + "streetsign-upload": { + "render": { + "special": { + "label": "Afegeix una imatge de la placa amb el nom del carrer" + } + } }, "wikipedia": { "render": "Existeix un article de la Viquipèdia sobre aquest carrer:
{wikipedia():max-height:25rem}" diff --git a/langs/layers/cs.json b/langs/layers/cs.json index 5f2374ac0f..d9db3aed68 100644 --- a/langs/layers/cs.json +++ b/langs/layers/cs.json @@ -5057,8 +5057,12 @@ "questionHint": "To může být napsáno na ceduli s názvem ulice", "render": "Pojmenováno po {name:etymology}" }, - "street-name-sign-image": { - "render": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}" + "streetsign-upload": { + "render": { + "special": { + "label": "Add image of a street name sign" + } + } }, "wikipedia": { "render": "Článek na Wikipedii o této ulici existuje:
{wikipedia():max-height:25rem}" diff --git a/langs/layers/da.json b/langs/layers/da.json index 4e678fa6b4..7e43b9a687 100644 --- a/langs/layers/da.json +++ b/langs/layers/da.json @@ -1589,8 +1589,12 @@ "question": "Hvad er dette objekt opkaldt efter?", "render": "Opkaldt efter {name:etymology}" }, - "street-name-sign-image": { - "render": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Tilføj foto af gadenavneskilt)}" + "streetsign-upload": { + "render": { + "special": { + "label": "Tilføj foto af gadenavneskilt" + } + } }, "wikipedia": { "render": "Der findes en Wikipedia-artikel om denne gade:
{wikipedia():max-height:25rem}" diff --git a/langs/layers/de.json b/langs/layers/de.json index 63239fdfbe..a2b6074285 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -5220,8 +5220,12 @@ "questionHint": "Das könnte auf einem Straßenschild stehen", "render": "Benannt nach {name:etymology}" }, - "street-name-sign-image": { - "render": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Bild eines Straßenschildes hinzufügen)}" + "streetsign-upload": { + "render": { + "special": { + "label": "Bild eines Straßenschildes hinzufügen" + } + } }, "wikipedia": { "render": "Zu dieser Straße existiert ein Wikipedia-Artikel:
{wikipedia():max-height:25rem}" diff --git a/langs/layers/en.json b/langs/layers/en.json index 6f9771553c..0371dbd366 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -759,6 +759,19 @@ }, "question": "What notes can you withdraw here?" }, + "indoor": { + "override": { + "mappings": { + "0": { + "then": "This ATM is located indoors" + }, + "1": { + "then": "This ATM is located outdoors" + } + }, + "question": "Is this ATM located indoors?" + } + }, "name": { "render": "The name of this ATM is {name}" }, @@ -5382,8 +5395,12 @@ "questionHint": "This might be written on the street name sign", "render": "Named after {name:etymology}" }, - "street-name-sign-image": { - "render": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}" + "streetsign-upload": { + "render": { + "special": { + "label": "Add image of a street name sign" + } + } }, "wikipedia": { "render": "A Wikipedia article about this street exists:
{wikipedia():max-height:25rem}" @@ -6731,6 +6748,14 @@ }, "question": "What type of hydrant is it?", "render": " Hydrant type: {fire_hydrant:type}" + }, + "ref": { + "freeform": { + "placeholder": "Reference number of the hydrant" + }, + "question": "What is the reference number of this hydrant?", + "questionHint": "This can usually be found on the hydrant or on a nearby sign.", + "render": "Reference number: {ref}" } }, "title": { @@ -7419,6 +7444,10 @@ "0": { "description": "A memorial is a physical object which remembers a person or event.", "title": "a memorial" + }, + "1": { + "description": "A memorial is a physical object which remembers a person or event and is attached to a wall.", + "title": "a memorial on a wall" } }, "tagRenderings": { @@ -8856,6 +8885,9 @@ "presets": { "0": { "title": "a bookcase" + }, + "1": { + "title": "a bookcase on a wall" } }, "tagRenderings": { @@ -11658,6 +11690,17 @@ } }, "question": "How is this street lamp mounted?" + }, + "utility_pole": { + "mappings": { + "0": { + "then": "This lamp is mounted on a utility pole" + }, + "1": { + "then": "This lamp is not mounted on a utility pole" + } + }, + "question": "Is this lamp mounted on a utility pole?" } }, "title": { @@ -12324,9 +12367,35 @@ }, "question": "Is there a dedicated toilet for wheelchair users?" }, + "wheelchair-access": { + "mappings": { + "0": { + "then": "The wheelchair accessible toilets are freely accessible" + }, + "1": { + "then": "One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key" + } + }, + "question": "Is the wheelchair-accessible toilet locked?" + }, "wheelchair-door-width": { "question": "What is the width of the door to the wheelchair accessible toilet?", "render": "The door to the wheelchair-accessible toilet is {canonical(door:width)} wide" + }, + "wheelchair-picture": { + "render": { + "special": { + "label": "Add a picture of the wheelchair accessible toilet" + } + } + }, + "wheelchair-title": { + "mappings": { + "0": { + "then": "No wheelchair accessible toilet" + } + }, + "render": "Wheelchair accessible toilet" } }, "title": { @@ -13509,6 +13578,29 @@ "render": "Settings" } }, + "utility_pole": { + "description": "Layer showing various types of utility poles.", + "name": "Utility Poles", + "presets": { + "0": { + "title": "a utility pole" + } + }, + "tagRenderings": { + "street_lamp": { + "mappings": { + "0": { + "then": "This utility pole has a street lamp mounted on it." + }, + "1": { + "then": "This utility pole does not have a street lamp mounted on it." + } + }, + "question": "Does this utility pole have a street lamp mounted on it?" + } + }, + "title": "Utility Pole" + }, "vending_machine": { "description": "Layer showing vending machines", "filter": { @@ -14031,6 +14123,9 @@ "3": { "description": "A wayside cross is a christian cross that is placed by a road or pathway. This cross is mounted on a wall", "title": "a wayside cross mounted on a wall" + }, + "4": { + "title": "a mother mary shrine on the first floor" } }, "tagRenderings": { @@ -14169,6 +14264,23 @@ }, "question": "What's the name of this {title()}?", "render": "The name of this {title()} is {name}" + }, + "subject:wikidata": { + "mappings": { + "0": { + "then": "Mother mary is depicted" + }, + "1": { + "then": "Jesus Christ as a child is depicted" + }, + "2": { + "then": "Jesus Christ (as an adult) is depicted" + }, + "3": { + "then": "Saint Anne (mother of Mary) is depicted" + } + }, + "question": "Who is depicted?" } }, "title": { diff --git a/langs/layers/es.json b/langs/layers/es.json index 8507b389ed..7dccd28cd9 100644 --- a/langs/layers/es.json +++ b/langs/layers/es.json @@ -4912,8 +4912,12 @@ "questionHint": "Esto podría estar escrito en el letrero del nombre de la calle", "render": "Nombrado en honor a {name:etymology}" }, - "street-name-sign-image": { - "render": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Agregar imagen de un letrero de nombre de calle)}" + "streetsign-upload": { + "render": { + "special": { + "label": "Agregar imagen de un letrero de nombre de calle" + } + } }, "wikipedia": { "render": "Existe un artículo de Wikipedia sobre esta calle:
{wikipedia():max-height:25rem}" diff --git a/langs/layers/fr.json b/langs/layers/fr.json index 125dfd1a0e..c1000a3811 100644 --- a/langs/layers/fr.json +++ b/langs/layers/fr.json @@ -3476,8 +3476,12 @@ "questionHint": "Cela peut être indiqué sur le panneau de la rue", "render": "Nommé en référence à {name:etymology}" }, - "street-name-sign-image": { - "render": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Ajouter une photo de la plaque de rue)}" + "streetsign-upload": { + "render": { + "special": { + "label": "Ajouter une photo de la plaque de rue" + } + } }, "wikipedia": { "render": "Un article Wikipédia à propos de cette rue existe :
{wikipedia():max-height:25rem}" diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 27d6bb491b..2b090bec3c 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -735,6 +735,19 @@ }, "question": "Welke bankbiljetten kan je hier afhalen?" }, + "indoor": { + "override": { + "mappings": { + "0": { + "then": "Deze geldautomaat bevindt zich binnen" + }, + "1": { + "then": "Deze geldautomaat bevindt zich buiten" + } + }, + "question": "Bevindt deze geldautomaat zich binnen?" + } + }, "name": { "render": "De naam van deze geldautomaat is {name}" }, @@ -5041,8 +5054,12 @@ "questionHint": "Dit staat mogelijks vermeld op het straatnaambordje", "render": "Vernoemd naar {name:etymology}" }, - "street-name-sign-image": { - "render": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Voeg afbeelding van straatnaambordje toe)}" + "streetsign-upload": { + "render": { + "special": { + "label": "Voeg afbeelding van straatnaambordje toe" + } + } }, "wikipedia": { "render": "Een Wikipedia artikel over deze straat bestaat:
{wikipedia():max-height:25rem}" @@ -5971,6 +5988,14 @@ }, "question": "Wat voor soort brandkraan is dit?", "render": " Het type brandkraan is {fire_hydrant:type}" + }, + "ref": { + "freeform": { + "placeholder": "Referentienummer van de brandkraan" + }, + "question": "Wat is het referentienummer van deze brandkraan?", + "questionHint": "Dit nummer is meestal te vinden op de brandkraan of op een nabijgelegen bord.", + "render": "Referentienummer: {ref}" } }, "title": { @@ -6469,7 +6494,12 @@ "name": "Gedenktekens", "presets": { "0": { + "description": "Een fysiek object dat een persoon of gebeurtenis herdenkt", "title": "een gedenkteken" + }, + "1": { + "description": "Een fysiek object dat een persoon of gebeurtenis herdenkt en dat ophangt aan een muur.", + "title": "een gedenkteken dat aan een muur hangt" } }, "tagRenderings": { @@ -9902,9 +9932,35 @@ }, "question": "Is er een rolstoeltoegankelijke toilet voorzien?" }, + "wheelchair-access": { + "mappings": { + "0": { + "then": "De rolstoeltoegankelijke toilet is vrij toegankelijk" + }, + "1": { + "then": "Men moet toestemming vragen om de rolstoeltoegankelijke toilet te gebruiken, bv. door een sleutel te vragen" + } + }, + "question": "Is de rolstoeltoegankelijke toilet op slot?" + }, "wheelchair-door-width": { "question": "Hoe breed is de deur van de rolstoeltoegankelijke toilet?", "render": "De deur naar de rolstoeltoegankelijke toilet is {canonical(door:width)} wide" + }, + "wheelchair-picture": { + "render": { + "special": { + "label": "Voeg een foto van de rolstoeltoegankelijke toilet toe" + } + } + }, + "wheelchair-title": { + "mappings": { + "0": { + "then": "Geen rolstoeltoegankelijke toilet" + } + }, + "render": "Rolstoeltoegankelijke toilet" } }, "title": { diff --git a/langs/layers/uk.json b/langs/layers/uk.json index 91dff7ef74..6f0b2784c2 100644 --- a/langs/layers/uk.json +++ b/langs/layers/uk.json @@ -1280,8 +1280,12 @@ "etymology_multi_apply": { "render": "{multi_apply(_same_name_ids, name:etymology:wikidata;name:etymology, Автоматичне застосування даних до всіх сегментів з однаковою назвою, true)}" }, - "street-name-sign-image": { - "render": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Додати зображення таблички з назвою вулиці)}" + "streetsign-upload": { + "render": { + "special": { + "label": "Додати зображення таблички з назвою вулиці" + } + } }, "wikipedia-etymology": { "question": "На честь якого елемента Вікіданих названо цей об'єкт?" diff --git a/public/css/index-tailwind-output.css b/public/css/index-tailwind-output.css index a7b75b0641..62aec36737 100644 --- a/public/css/index-tailwind-output.css +++ b/public/css/index-tailwind-output.css @@ -3354,11 +3354,6 @@ input[type="range"].range-lg::-moz-range-thumb { background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)) !important; } -.bg-black { - --tw-bg-opacity: 1; - background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); -} - .bg-blue-100 { --tw-bg-opacity: 1; background-color: rgb(225 239 254 / var(--tw-bg-opacity, 1)); diff --git a/src/Logic/FeatureSource/Actors/FeaturePropertiesStore.ts b/src/Logic/FeatureSource/Actors/FeaturePropertiesStore.ts index 6c8e5f292e..e99398f230 100644 --- a/src/Logic/FeatureSource/Actors/FeaturePropertiesStore.ts +++ b/src/Logic/FeatureSource/Actors/FeaturePropertiesStore.ts @@ -53,7 +53,7 @@ export default class FeaturePropertiesStore { public getStore(id: string): UIEventSource> { const store = this._elements.get(id) if (store === undefined) { - console.error("PANIC: no store for", id) + console.warn("PANIC: no properties store for", id) } return store } diff --git a/src/Logic/State/UserSettingsMetaTagging.ts b/src/Logic/State/UserSettingsMetaTagging.ts index 6e568c5c32..33a5ae85b5 100644 --- a/src/Logic/State/UserSettingsMetaTagging.ts +++ b/src/Logic/State/UserSettingsMetaTagging.ts @@ -1,42 +1,14 @@ import { Utils } from "../../Utils" /** This code is autogenerated - do not edit. Edit ./assets/layers/usersettings/usersettings.json instead */ export class ThemeMetaTagging { - public static readonly themeName = "usersettings" + public static readonly themeName = "usersettings" - public metaTaggging_for_usersettings(feat: { properties: Record }) { - Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_md", () => - feat.properties._description - .match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/) - ?.at(1) - ) - Utils.AddLazyProperty( - feat.properties, - "_d", - () => feat.properties._description?.replace(/</g, "<")?.replace(/>/g, ">") ?? "" - ) - Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_a", () => - ((feat) => { - const e = document.createElement("div") - e.innerHTML = feat.properties._d - return Array.from(e.getElementsByTagName("a")).filter( - (a) => a.href.match(/mastodon|en.osm.town/) !== null - )[0]?.href - })(feat) - ) - Utils.AddLazyProperty(feat.properties, "_mastodon_link", () => - ((feat) => { - const e = document.createElement("div") - e.innerHTML = feat.properties._d - return Array.from(e.getElementsByTagName("a")).filter( - (a) => a.getAttribute("rel")?.indexOf("me") >= 0 - )[0]?.href - })(feat) - ) - Utils.AddLazyProperty( - feat.properties, - "_mastodon_candidate", - () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a - ) - feat.properties["__current_backgroun"] = "initial_value" - } -} + public metaTaggging_for_usersettings(feat: {properties: Record}) { + Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_md', () => feat.properties._description.match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)?.at(1) ) + Utils.AddLazyProperty(feat.properties, '_d', () => feat.properties._description?.replace(/</g,'<')?.replace(/>/g,'>') ?? '' ) + Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_a', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.href.match(/mastodon|en.osm.town/) !== null)[0]?.href }) (feat) ) + Utils.AddLazyProperty(feat.properties, '_mastodon_link', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.getAttribute("rel")?.indexOf('me') >= 0)[0]?.href})(feat) ) + Utils.AddLazyProperty(feat.properties, '_mastodon_candidate', () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a ) + feat.properties['__current_backgroun'] = 'initial_value' + } +} \ No newline at end of file diff --git a/src/UI/Popup/GroupedView.svelte b/src/UI/Popup/GroupedView.svelte index 038b97c223..9e40e4ca8e 100644 --- a/src/UI/Popup/GroupedView.svelte +++ b/src/UI/Popup/GroupedView.svelte @@ -17,7 +17,10 @@ export let layer: LayerConfig let headerTr = layer.tagRenderings.find((tr) => tr.id === header) - let trgs: TagRenderingConfig[] = [] + if (headerTr === undefined) { + console.error("Header tagRendering with ID", header, "was not found") + } + let tagRenderings: TagRenderingConfig[] = [] let seenIds = new Set() for (const label of labels) { for (const tr of layer.tagRenderings) { @@ -25,20 +28,30 @@ continue } if (label === tr.id || tr.labels.some((l) => l === label)) { - trgs.push(tr) + tagRenderings.push(tr) seenIds.add(tr.id) } } } - +{#if tagRenderings.length > 0} +
+ +
- + {#if headerTr} + + {:else} + {header} + {/if}
- {#each trgs as config (config.id)} + {#each tagRenderings as config (config.id)} {#if config.IsKnown($tags) && (config.condition === undefined || config.condition.matchesProperties($tags))} {/if} {/each}
+
+ +{/if} diff --git a/src/UI/Popup/TagRendering/Questionbox.svelte b/src/UI/Popup/TagRendering/Questionbox.svelte index 646c1167dc..53c787274a 100644 --- a/src/UI/Popup/TagRendering/Questionbox.svelte +++ b/src/UI/Popup/TagRendering/Questionbox.svelte @@ -31,7 +31,7 @@ */ export let notForLabels: string[] | undefined = undefined const _notForLabels = new Set(notForLabels) - let showAllQuestionsAtOnce: Store = + export let showAllQuestionsAtOnce: Store = state.userRelatedState?.showAllQuestionsAtOnce ?? new ImmutableStore(false) function allowed(labels: string[]) { diff --git a/src/UI/Popup/TagRendering/TagRenderingAnswer.svelte b/src/UI/Popup/TagRendering/TagRenderingAnswer.svelte index 5b31e2a206..9b8a5666b7 100644 --- a/src/UI/Popup/TagRendering/TagRenderingAnswer.svelte +++ b/src/UI/Popup/TagRendering/TagRenderingAnswer.svelte @@ -22,7 +22,8 @@ export let id: string = undefined if (config === undefined) { - throw "Config is undefined in tagRenderingAnswer" + console.error("TagRenderingAnswer: Config is undefined") + throw ("Config is undefined in tagRenderingAnswer") } let trs: Store<{ then: Translation; icon?: string; iconClass?: string }[]> = tags.mapD((tags) => Utils.NoNull(config?.GetRenderValues(tags)) diff --git a/src/UI/SpecialVisualisations/UISpecialVisualisations.ts b/src/UI/SpecialVisualisations/UISpecialVisualisations.ts index 57c5ebdff2..09cb1caf1d 100644 --- a/src/UI/SpecialVisualisations/UISpecialVisualisations.ts +++ b/src/UI/SpecialVisualisations/UISpecialVisualisations.ts @@ -1,6 +1,6 @@ import { SpecialVisualizationState, SpecialVisualizationSvelte } from "../SpecialVisualization" import SvelteUIElement from "../Base/SvelteUIElement" -import { UIEventSource } from "../../Logic/UIEventSource" +import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource" import { Feature } from "geojson" import LayerConfig from "../../Models/ThemeConfig/LayerConfig" import Questionbox from "../Popup/TagRendering/Questionbox.svelte" @@ -31,6 +31,11 @@ class QuestionViz implements SpecialVisualizationSvelte { name: "blacklisted-labels", doc: "One or more ';'-separated labels of questions which should _not_ be included. Note that the questionbox which is added by default will blacklist 'hidden'" }, + { + name: "show_all", + default: "user-preference", + doc: "Either `no`, `yes` or `user-preference`. Indicates if all questions should be shown at once" + } ] svelteBased = true group: "default" @@ -50,6 +55,13 @@ class QuestionViz implements SpecialVisualizationSvelte { ?.split(";") ?.map((s) => s.trim()) ?.filter((s) => s !== "") + const showAll = args[2] + let showAllQuestionsAtOnce: Store = state.userRelatedState?.showAllQuestionsAtOnce + if (showAll === "yes") { + showAllQuestionsAtOnce = new ImmutableStore(true) + } else if (showAll === "no") { + showAllQuestionsAtOnce = new ImmutableStore(false) + } return new SvelteUIElement(Questionbox, { layer, tags, @@ -57,6 +69,7 @@ class QuestionViz implements SpecialVisualizationSvelte { state, onlyForLabels: labels, notForLabels: blacklist, + showAllQuestionsAtOnce }) } } From e56e8fe112c99ca42c57c15550e9b0bf59b9142e Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sat, 5 Apr 2025 04:01:46 +0200 Subject: [PATCH 43/90] chore(release): 0.50.7 --- CHANGELOG.md | 8 ++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2adad6a268..aa6e9b3432 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [0.50.7](https://github.com/pietervdvn/mapcomplete/compare/v0.50.6...v0.50.7) (2025-04-05) + + +### Theme improvements + +* **memorials:** add possibility to snap to walls_and_buildings ([17fd654](https://github.com/pietervdvn/mapcomplete/commits/17fd654f39a1b6cb8bd5dcc2026f273fffbe1d9e)) +* **toilets:** improve tagging of wheelchair accessible toilets, various fixes to make this possible ([089017b](https://github.com/pietervdvn/mapcomplete/commits/089017b1367bf790da993472920000ee73922069)) + ### [0.50.6](https://github.com/pietervdvn/mapcomplete/compare/v0.50.5...v0.50.6) (2025-04-03) diff --git a/package-lock.json b/package-lock.json index 47b48e4167..e6257cc6e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mapcomplete", - "version": "0.50.6", + "version": "0.50.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mapcomplete", - "version": "0.50.6", + "version": "0.50.7", "license": "GPL-3.0-or-later", "dependencies": { "@capacitor/android": "^6.1.2", diff --git a/package.json b/package.json index 12c1684f12..6ee0a7277f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mapcomplete", - "version": "0.50.6", + "version": "0.50.7", "repository": "https://github.com/pietervdvn/MapComplete", "description": "A small website to edit OSM easily", "bugs": "https://github.com/pietervdvn/MapComplete/issues", From 1493c00edf41914a5d87abfcb615cb812507ad33 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sat, 5 Apr 2025 22:36:25 +0200 Subject: [PATCH 44/90] Fix: fix #2372 --- src/Logic/ImageProviders/ImageUploadManager.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Logic/ImageProviders/ImageUploadManager.ts b/src/Logic/ImageProviders/ImageUploadManager.ts index fafa909076..a58a3500fb 100644 --- a/src/Logic/ImageProviders/ImageUploadManager.ts +++ b/src/Logic/ImageProviders/ImageUploadManager.ts @@ -190,7 +190,7 @@ export class ImageUploadManager { } } try { - ;({ key, value, absoluteUrl } = await this._uploader.uploadImage( + ({ key, value, absoluteUrl } = await this._uploader.uploadImage( blob, location, author, @@ -200,7 +200,7 @@ export class ImageUploadManager { this.increaseCountFor(this._uploadRetried, featureId) console.error("Could not upload image, trying again:", e) try { - ;({ key, value, absoluteUrl } = await this._uploader.uploadImage( + ({ key, value, absoluteUrl } = await this._uploader.uploadImage( blob, location, author, @@ -222,9 +222,9 @@ export class ImageUploadManager { return undefined } } - console.log("Uploading image done, creating action for", featureId) + console.log("Uploading image done, creating action for", featureId, " targetkey is", targetKey, "key is", key) key = targetKey ?? key - if (targetKey) { + if (targetKey && targetKey.indexOf(key) < 0) { // This is a non-standard key, so we use the image link directly value = absoluteUrl } From c4f0e18b9e61278c34e3ac953fdf9393600f7a89 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 6 Apr 2025 00:18:25 +0200 Subject: [PATCH 45/90] Scripts: add script to fix panoramax-hashes; see #2372 --- scripts/repairPanoramax.ts | 117 +++++++++++++++++++++++++++++++++++++ src/Logic/Osm/Changes.ts | 36 ++++++++++-- src/Logic/Osm/Overpass.ts | 10 ++-- 3 files changed, 153 insertions(+), 10 deletions(-) create mode 100644 scripts/repairPanoramax.ts diff --git a/scripts/repairPanoramax.ts b/scripts/repairPanoramax.ts new file mode 100644 index 0000000000..11ed49a815 --- /dev/null +++ b/scripts/repairPanoramax.ts @@ -0,0 +1,117 @@ +import Script from "./Script" +import { Overpass } from "../src/Logic/Osm/Overpass" +import { Or } from "../src/Logic/Tags/Or" +import { RegexTag } from "../src/Logic/Tags/RegexTag" +import { Utils } from "../src/Utils" +import Constants from "../src/Models/Constants" +import { ImmutableStore } from "../src/Logic/UIEventSource" +import { BBox } from "../src/Logic/BBox" +import ChangeTagAction from "../src/Logic/Osm/Actions/ChangeTagAction" +import { Tag } from "../src/Logic/Tags/Tag" +import { Panoramax } from "panoramax-js/dist" +import { Changes } from "../src/Logic/Osm/Changes" +import OsmChangeAction from "../src/Logic/Osm/Actions/OsmChangeAction" +import { writeFileSync } from "fs" +import { Feature } from "geojson" + +class RepairPanoramax extends Script { + + private static readonly europe: Feature = { + "type": "Feature", + "properties": {}, + "geometry": { + "coordinates": [ + [ + [ + -20.091159690050006, + 25.773375277790038 + ], + [ + 46.12276429398841, + 25.773375277790038 + ], + [ + 46.12276429398841, + 65.41389761819318 + ], + [ + -20.091159690050006, + 65.41389761819318 + ], + [ + -20.091159690050006, + 25.773375277790038 + ] + ] + ], + "type": "Polygon" + } + } + + constructor() { + super("See https://source.mapcomplete.org/MapComplete/MapComplete/issues/2372\n" + + "We accidentally added the full image URL instead of the hash due to a bug. This scripts rewrites all") + } + + async main(args: string[]): Promise { + const keys = ["panoramax", ...Utils.TimesT(10, i => "panoramax:" + i)] + const overpass = new Overpass( + new Or( + keys.map(k => new RegexTag(k, /^https:\/\/panoramax.mapcomplete.org\/.*/)) + ), + [], + Constants.defaultOverpassUrls[0], + new ImmutableStore(500) + ) + + const [wrongFeatures] = await overpass.queryGeoJson(BBox.global) + const allChanges: OsmChangeAction[] = [] + for (const f of wrongFeatures.features) { + for (const key of keys) { + const v = f.properties[key] + if (!v) { + continue + } + const pre = "https://panoramax.mapcomplete.org/api/pictures/" + const pre1 = "https://panoramax.mapcomplete.org/permanent/" + let correct: string + if (v.startsWith(pre)) { + correct = v.substring(pre.length) + correct = correct.substring(0, correct.indexOf("/")) + } else if (v.startsWith(pre1)) { + const stripped = v.substring(pre1.length) + correct = stripped.replace(/\//g, "").replace(/\.jpg$/, "") + correct = correct.substring(0, 8) + "-" + correct.substring(8) + } else if (Panoramax.isId(v)) { + // This is a valid ID that came on an object also having an _invalid_ id + // We can safely skip this + continue + } else { + throw "Unknown url " + v + } + console.log(key, correct, " old: ", v) + if (!Panoramax.isId(correct)) { + throw "Constructed an invalid id:" + correct + } + const change = new ChangeTagAction( + f.properties.id, + new Tag(key, correct), + f.properties, + { + theme: "fix", + changeType: "fix" + } + ) + allChanges.push(change) + } + } + + const xml = await Changes.createChangesetXMLForJosm(allChanges) + console.log(xml) + const path = "repairPanoramax.osc" + writeFileSync(path, xml) + console.log("Written XML to", path) + } +} + +new RepairPanoramax().run() diff --git a/src/Logic/Osm/Changes.ts b/src/Logic/Osm/Changes.ts index 5dddbacad4..84aac5c334 100644 --- a/src/Logic/Osm/Changes.ts +++ b/src/Logic/Osm/Changes.ts @@ -95,8 +95,34 @@ export class Changes { }) } + public static async createChangesetXMLForJosm(actions: OsmChangeAction[], osmConnection?: OsmConnection): Promise { + osmConnection ??= new OsmConnection() + const changes = new Changes({ + osmConnection + }) + const descriptions: ChangeDescription[] = [] + for (const action of actions) { + descriptions.push(...await action.Perform(changes)) + } + const downloader = new OsmObjectDownloader(osmConnection.Backend(), undefined) + const downloaded: OsmObject[] = [] + for (const action of actions) { + const osmObj = await downloader.DownloadObjectAsync(action.mainObjectId) + if (osmObj === "deleted") { + continue + } + downloaded.push(osmObj) + } + return Changes.buildChangesetXML("", changes.CreateChangesetObjects(descriptions, downloaded)) + } + + /** + * Creates a changeset + * @param csId either the ID-number of the changeset, or an empty string (e.g. when uploading with JOSM) + * @param allChanges use 'new Changes() + */ static buildChangesetXML( - csId: string, + csId: number | string, allChanges: { modifiedObjects: OsmObject[] newObjects: OsmObject[] @@ -111,20 +137,20 @@ export class Changes { if (newElements.length > 0) { changes += "\n\n" + - newElements.map((e) => e.ChangesetXML(csId)).join("\n") + + newElements.map((e) => e.ChangesetXML("" + csId)).join("\n") + "" } if (changedElements.length > 0) { changes += "\n\n" + - changedElements.map((e) => e.ChangesetXML(csId)).join("\n") + + changedElements.map((e) => e.ChangesetXML("" + csId)).join("\n") + "\n" } if (deletedElements.length > 0) { changes += "\n\n" + - deletedElements.map((e) => e.ChangesetXML(csId)).join("\n") + + deletedElements.map((e) => e.ChangesetXML("" + csId)).join("\n") + "\n" } @@ -722,7 +748,7 @@ export class Changes { deletedObjects: OsmObject[] } = this.CreateChangesetObjects(toUpload, objects) - return Changes.buildChangesetXML("" + csId, changes) + return Changes.buildChangesetXML(csId, changes) }, metatags, openChangeset diff --git a/src/Logic/Osm/Overpass.ts b/src/Logic/Osm/Overpass.ts index e76948f52c..d35b344447 100644 --- a/src/Logic/Osm/Overpass.ts +++ b/src/Logic/Osm/Overpass.ts @@ -3,10 +3,10 @@ import { Utils } from "../../Utils" import { ImmutableStore, Store } from "../UIEventSource" import { BBox } from "../BBox" import osmtogeojson from "osmtogeojson" -import { FeatureCollection } from "@turf/turf" -import { Geometry } from "geojson" +import { FeatureCollection, Geometry } from "geojson" import { OsmTags } from "../../Models/OsmFeature" -;("use strict") + +("use strict") /** * Interfaces overpass to get all the latest data */ @@ -64,14 +64,14 @@ export class Overpass { elements: [] remark osm3s: { timestamp_osm_base: string } - }>(this.buildUrl(query)) + }>(this.buildUrl(query), {}) if (json.elements.length === 0 && json.remark !== undefined) { console.warn("Timeout or other runtime error while querying overpass", json.remark) throw `Runtime error (timeout or similar)${json.remark}` } if (json.elements.length === 0) { - console.warn("No features for", json) + console.warn("No features for", this.buildUrl(query)) } const geojson = >osmtogeojson(json) From 722f7e86cc33c2bc63577d20aed2c7fa7c86ef51 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 6 Apr 2025 00:30:59 +0200 Subject: [PATCH 46/90] Feature: show quota in debug panel --- .../SettingsVisualisations.ts | 18 ++++++++++++++---- src/Utils.ts | 10 ++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/UI/SpecialVisualisations/SettingsVisualisations.ts b/src/UI/SpecialVisualisations/SettingsVisualisations.ts index d22cf68882..758799cb46 100644 --- a/src/UI/SpecialVisualisations/SettingsVisualisations.ts +++ b/src/UI/SpecialVisualisations/SettingsVisualisations.ts @@ -7,12 +7,13 @@ import LoginButton from "../Base/LoginButton.svelte" import ThemeViewState from "../../Models/ThemeViewState" import OrientationDebugPanel from "../Debug/OrientationDebugPanel.svelte" import AllTagsPanel from "../Popup/AllTagsPanel/AllTagsPanel.svelte" -import { ImmutableStore, UIEventSource } from "../../Logic/UIEventSource" +import { UIEventSource } from "../../Logic/UIEventSource" import ClearCaches from "../Popup/ClearCaches.svelte" import Locale from "../i18n/Locale" import LanguageUtils from "../../Utils/LanguageUtils" import LanguagePicker from "../InputElement/LanguagePicker.svelte" import PendingChangesIndicator from "../BigComponents/PendingChangesIndicator.svelte" +import { Utils } from "../../Utils" export class SettingsVisualisations { public static initList(): SpecialVisualizationSvelte[] { @@ -79,14 +80,23 @@ export class SettingsVisualisations { group: "settings", docs: "Shows the current state of storage", args: [], - constr(state: SpecialVisualizationState): SvelteUIElement { + constr: function(state: SpecialVisualizationState): SvelteUIElement { const data = {} for (const key in localStorage) { data[key] = localStorage[key] } - const tags = new ImmutableStore(data) + const tags = new UIEventSource(data) + + navigator.storage.estimate().then(estimate => { + data["__usage:current:bytes"] = estimate.usage + data["__usage:current:human"] = Utils.toHumanByteSize(estimate.usage) + data["__usage:quota:bytes"] = estimate.quota + data["__usage:quota:human"] = Utils.toHumanByteSize(estimate.quota) + tags.ping() + + }) return new SvelteUIElement(AllTagsPanel, { state, tags }) - }, + } }, { funcName: "clear_caches", diff --git a/src/Utils.ts b/src/Utils.ts index 770c620585..ef7033373d 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -1150,6 +1150,16 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be return hours + ":" + Utils.TwoDigits(minutes) + ":" + Utils.TwoDigits(seconds) } + public static toHumanByteSize(bytes: number): string { + const scale = ["b", "KB", "MB", "GB", "TB"] as const + let i = 0 + while (bytes > 1000) { + bytes = bytes / 1000 + i++ + } + return Math.round(bytes) + scale[i] + } + public static HomepageLink(): string { if (typeof window === "undefined") { return "https://mapcomplete.org" From e50962e1ced0d75131300ba8aa165029f4306d40 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 6 Apr 2025 15:26:08 +0200 Subject: [PATCH 47/90] Themes(toilet): don't show some items if wheelchair=designated, fix #2371 --- assets/layers/toilet/toilet.json | 38 +++++++++++++++----------------- langs/layers/ca.json | 4 ---- langs/layers/cs.json | 4 ---- langs/layers/da.json | 4 ---- langs/layers/de.json | 4 ---- langs/layers/en.json | 7 +++--- langs/layers/es.json | 4 ---- langs/layers/fr.json | 4 ---- langs/layers/nl.json | 7 +++--- langs/layers/sl.json | 4 ---- 10 files changed, 24 insertions(+), 56 deletions(-) diff --git a/assets/layers/toilet/toilet.json b/assets/layers/toilet/toilet.json index 3364dbf004..054f41d2d5 100644 --- a/assets/layers/toilet/toilet.json +++ b/assets/layers/toilet/toilet.json @@ -783,10 +783,6 @@ ] }, { - "labels": [ - "relevant-questions", - "no-prefix" - ], "labels": [ "relevant-questions", "no-prefix" @@ -933,10 +929,6 @@ }, { "id": "toilet-has-paper", - "labels": [ - "relevant-questions", - "prefixed" - ], "labels": [ "relevant-questions" ], @@ -986,9 +978,6 @@ } }, { - "labels": [ - "relevant-questions" - ], "labels": [ "relevant-questions", "prefixed" @@ -1170,11 +1159,10 @@ "condition": { "and": [ { + "#": "NOT on designated", "or": [ "wheelchair=yes", - "wheelchair=designated", - "toilets:wheelchair=yes", - "toilets:wheelchair=designated" + "toilets:wheelchair=yes" ] } ] @@ -1197,11 +1185,10 @@ "condition": { "and": [ { + "#": "NOT on designated", "or": [ "wheelchair=yes", - "wheelchair=designated", - "toilets:wheelchair=yes", - "toilets:wheelchair=designated" + "toilets:wheelchair=yes" ] } ] @@ -1236,6 +1223,18 @@ }, "icon": "./assets/layers/toilet/wheelchair.svg", "mappings": [ + { + "if": { + "or": [ + "wheelchair:designated", + "toilets:wheelchair=designated" + ] + }, + "then": { + "en": "No wheelchair accessible toilet", + "nl": "Geen rolstoeltoegankelijke toilet" + } + }, { "if": { "or": [ @@ -1259,11 +1258,10 @@ "condition": { "and": [ { + "#": "NOT on designated", "or": [ "wheelchair=yes", - "wheelchair=designated", - "toilets:wheelchair=yes", - "toilets:wheelchair=designated" + "toilets:wheelchair=yes" ] }, { diff --git a/langs/layers/ca.json b/langs/layers/ca.json index 859f50b577..397f30f9e4 100644 --- a/langs/layers/ca.json +++ b/langs/layers/ca.json @@ -12184,10 +12184,6 @@ } }, "question": "Hi ha un lavabo específic per a usuaris amb cadira de rodes?" - }, - "wheelchair-door-width": { - "question": "Quina és l'amplada de la porta del lavabo accessible per a cadira de rodes?", - "render": "La porta del vàter accessible amb cadira de rodes és {canonical(toilets:door:width)} d'ample" } }, "title": { diff --git a/langs/layers/cs.json b/langs/layers/cs.json index d9db3aed68..4f0ebe9cb0 100644 --- a/langs/layers/cs.json +++ b/langs/layers/cs.json @@ -10844,10 +10844,6 @@ } }, "question": "Existuje vyhrazená toaleta pro vozíčkáře?" - }, - "wheelchair-door-width": { - "question": "Jaká je šířka dveří na bezbariérovou toaletu?", - "render": "Dveře na toaletu pro vozíčkáře jsou {canonical(toilets:door:width)} široké" } }, "title": { diff --git a/langs/layers/da.json b/langs/layers/da.json index 7e43b9a687..ff92eddadf 100644 --- a/langs/layers/da.json +++ b/langs/layers/da.json @@ -2378,10 +2378,6 @@ } }, "question": "Er der et særligt toilet til kørestolsbrugere?" - }, - "wheelchair-door-width": { - "question": "Hvad er bredden på døren til det kørestolsvenlige toilet?", - "render": "Døren til det kørestolsvenlige toilet er {canonical(toilets:door:width)} bred" } } }, diff --git a/langs/layers/de.json b/langs/layers/de.json index a2b6074285..da90aaf6d6 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -12125,10 +12125,6 @@ } }, "question": "Können Rollstuhlfahrer die Toilette benutzen?" - }, - "wheelchair-door-width": { - "question": "Wie breit ist die Tür zur rollstuhlgerechten Toilette?", - "render": "Die Tür zur rollstuhlgerechten Toilette ist {canonical(toilets:door:width)} breit" } }, "title": { diff --git a/langs/layers/en.json b/langs/layers/en.json index 0371dbd366..8f33809e10 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -12393,6 +12393,9 @@ "mappings": { "0": { "then": "No wheelchair accessible toilet" + }, + "1": { + "then": "No wheelchair accessible toilet" } }, "render": "Wheelchair accessible toilet" @@ -12476,10 +12479,6 @@ } }, "question": "Is there a dedicated toilet for wheelchair users?" - }, - "wheelchair-door-width": { - "question": "What is the width of the door to the wheelchair accessible toilet?", - "render": "The door to the wheelchair-accessible toilet is {canonical(toilets:door:width)} wide" } }, "title": { diff --git a/langs/layers/es.json b/langs/layers/es.json index 7dccd28cd9..dba026357b 100644 --- a/langs/layers/es.json +++ b/langs/layers/es.json @@ -11043,10 +11043,6 @@ } }, "question": "¿Hay un baño dedicado para usuarios de sillas de ruedas?" - }, - "wheelchair-door-width": { - "question": "¿Cuál es el ancho de la puerta del baño accesible para sillas de ruedas?", - "render": "La puerta del baño accesible para sillas de ruedas tiene {canonical(toilets:door:width)} de ancho" } }, "title": { diff --git a/langs/layers/fr.json b/langs/layers/fr.json index c1000a3811..fae2dae4cc 100644 --- a/langs/layers/fr.json +++ b/langs/layers/fr.json @@ -6794,10 +6794,6 @@ } }, "question": "Y a-t-il des toilettes réservées aux personnes en fauteuil roulant ?" - }, - "wheelchair-door-width": { - "question": "Quelle est la largeur de la porte des toilettes accessibles aux fauteuils roulants ?", - "render": "La porte des toilettes accessibles aux fauteuils roulants a une large de {canonical(toilets:door:width)}" } } }, diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 2b090bec3c..092bbb6181 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -9958,6 +9958,9 @@ "mappings": { "0": { "then": "Geen rolstoeltoegankelijke toilet" + }, + "1": { + "then": "Geen rolstoeltoegankelijke toilet" } }, "render": "Rolstoeltoegankelijke toilet" @@ -10036,10 +10039,6 @@ } }, "question": "Is er een rolstoeltoegankelijke toilet voorzien?" - }, - "wheelchair-door-width": { - "question": "Hoe breed is de deur van de rolstoeltoegankelijke toilet?", - "render": "De deur naar de rolstoeltoegankelijke toilet is {canonical(toilets:door:width)} wide" } }, "title": { diff --git a/langs/layers/sl.json b/langs/layers/sl.json index 7a86fc5766..3e497d7be8 100644 --- a/langs/layers/sl.json +++ b/langs/layers/sl.json @@ -489,10 +489,6 @@ } }, "question": "Ali je tu stranišče namenjeno invalidom na vozičku?" - }, - "wheelchair-door-width": { - "question": "Koliko so široka vrata v stranišče za invalide na vozičku?", - "render": "Vrata v stranišče za invalide na vozičku so široka {canonical(toilets:door:width)}" } }, "title": { From 7380841205578a98a01d929bf2fbe8a122269fc5 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 6 Apr 2025 15:30:06 +0200 Subject: [PATCH 48/90] Feature: add status widgets and links for panoramax --- src/UI/Status/StatusGUI.svelte | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/UI/Status/StatusGUI.svelte b/src/UI/Status/StatusGUI.svelte index 9bf90cb92a..26bbd8afad 100644 --- a/src/UI/Status/StatusGUI.svelte +++ b/src/UI/Status/StatusGUI.svelte @@ -450,6 +450,15 @@ {/each} +

Panoramax & OSM.fr Blurring service

+Panoramax.MapComplete.org status page + + See more statistics for the blurring service + + + {#if _state === "failed"} + + {/if} + {:else if _state === "success"} +
+ +
+ {/if} + + + + + + + + +
+ +
+ +
+ +
+ confirmDelete.set(false)}> + + + +
+
+
+
+ diff --git a/src/UI/Image/FailedImagesView.svelte b/src/UI/Image/FailedImagesView.svelte new file mode 100644 index 0000000000..1a6d5a55c7 --- /dev/null +++ b/src/UI/Image/FailedImagesView.svelte @@ -0,0 +1,41 @@ + + +
+ {#if $failed.length === 0} + + {:else} +
+ +
+ + {#if $isUploading} + + {:else} + + {/if} +
+ {#each $failed as failedImage (failedImage.date + failedImage.featureId)} + + {/each} +
+ {/if} +
diff --git a/src/UI/Image/UploadImage.svelte b/src/UI/Image/UploadImage.svelte index 8e6a8c2848..30d85ca03c 100644 --- a/src/UI/Image/UploadImage.svelte +++ b/src/UI/Image/UploadImage.svelte @@ -58,7 +58,9 @@ "image", noBlur, feature, - ignoreGps + { + ignoreGps + } ) if (!uploadResult) { return From dc1e582664c7bed0b5649615f3c778cdc009c424 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 6 Apr 2025 17:12:24 +0200 Subject: [PATCH 50/90] Themes: fix toilet theme --- assets/layers/toilet/toilet.json | 6 +++--- langs/layers/en.json | 2 +- langs/layers/nl.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/assets/layers/toilet/toilet.json b/assets/layers/toilet/toilet.json index 054f41d2d5..457846c30d 100644 --- a/assets/layers/toilet/toilet.json +++ b/assets/layers/toilet/toilet.json @@ -1226,13 +1226,13 @@ { "if": { "or": [ - "wheelchair:designated", + "wheelchair=designated", "toilets:wheelchair=designated" ] }, "then": { - "en": "No wheelchair accessible toilet", - "nl": "Geen rolstoeltoegankelijke toilet" + "en": "Wheelchair accessibility features", + "nl": "Rolstoeltoegankelijkheid" } }, { diff --git a/langs/layers/en.json b/langs/layers/en.json index 8f33809e10..2d7de409b1 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -12392,7 +12392,7 @@ "wheelchair-title": { "mappings": { "0": { - "then": "No wheelchair accessible toilet" + "then": "Wheelchair accessibility features" }, "1": { "then": "No wheelchair accessible toilet" diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 092bbb6181..94f988eca6 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -9957,7 +9957,7 @@ "wheelchair-title": { "mappings": { "0": { - "then": "Geen rolstoeltoegankelijke toilet" + "then": "Rolstoeltoegankelijkheid" }, "1": { "then": "Geen rolstoeltoegankelijke toilet" From c1d3f35d30e4a91a3fe93638f6027ca6e4a9de01 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 6 Apr 2025 19:17:19 +0200 Subject: [PATCH 51/90] Feature: stabilize saved history, add code to cleanup old preferences, make loading preferences faster (which prevents a 'hang') when just logged in --- src/Logic/Actors/GeoLocationHandler.ts | 29 ++-- src/Logic/Actors/PendingChangesUploader.ts | 3 +- src/Logic/Osm/Changes.ts | 85 +++++----- src/Logic/Osm/ChangesetHandler.ts | 31 ++-- src/Logic/Osm/OsmConnection.ts | 30 +++- src/Logic/Osm/OsmPreferences.ts | 145 +++++++++++++----- src/Logic/State/GeoLocationState.ts | 5 +- src/Logic/State/UserRelatedState.ts | 59 ++++--- src/Logic/Web/IdbLocalStorage.ts | 4 +- .../UserMapFeatureswitchState.ts | 4 +- 10 files changed, 249 insertions(+), 146 deletions(-) diff --git a/src/Logic/Actors/GeoLocationHandler.ts b/src/Logic/Actors/GeoLocationHandler.ts index ec04f10636..8edc07afc1 100644 --- a/src/Logic/Actors/GeoLocationHandler.ts +++ b/src/Logic/Actors/GeoLocationHandler.ts @@ -1,19 +1,18 @@ import { QueryParameters } from "../Web/QueryParameters" import { BBox } from "../BBox" import Constants from "../../Models/Constants" -import { GeoLocationState } from "../State/GeoLocationState" +import { GeoLocationPointProperties, GeoLocationState } from "../State/GeoLocationState" import { Store, UIEventSource } from "../UIEventSource" import { Feature, LineString, Point } from "geojson" import { FeatureSource, WritableFeatureSource } from "../FeatureSource/FeatureSource" import { LocalStorageSource } from "../Web/LocalStorageSource" import { GeoOperations } from "../GeoOperations" import { OsmTags } from "../../Models/OsmFeature" -import StaticFeatureSource, { - WritableStaticFeatureSource, -} from "../FeatureSource/Sources/StaticFeatureSource" +import StaticFeatureSource, { WritableStaticFeatureSource } from "../FeatureSource/Sources/StaticFeatureSource" import { MapProperties } from "../../Models/MapProperties" import { Orientation } from "../../Sensors/Orientation" -;("use strict") + +("use strict") /** * The geolocation-handler takes a map-location and a geolocation state. * It'll move the map as appropriate given the state of the geolocation-API @@ -25,12 +24,12 @@ export default class GeoLocationHandler { /** * The location as delivered by the GPS, wrapped as FeatureSource */ - public currentUserLocation: FeatureSource + public currentUserLocation: FeatureSource> /** * All previously visited points (as 'Point'-objects), with their metadata */ - public historicalUserLocations: WritableFeatureSource> + public historicalUserLocations: WritableFeatureSource> /** * A featureSource containing a single linestring which has the GPS-history of the user. @@ -151,27 +150,29 @@ export default class GeoLocationHandler { } private CopyGeolocationIntoMapstate() { - const features: UIEventSource = new UIEventSource([]) + const features: UIEventSource[]> = new UIEventSource[]>([]) this.currentUserLocation = new StaticFeatureSource(features) let i = 0 this.geolocationState.currentGPSLocation.addCallbackAndRunD((location) => { - const properties = { + const properties: GeoLocationPointProperties = { id: "gps-" + i, "user:location": "yes", date: new Date().toISOString(), // GeolocationObject behaves really weird when indexing, so copying it one by one is the most stable accuracy: location.accuracy, speed: location.speed, + latitude: location.latitude, + longitude: location.longitude, altitude: location.altitude, altitudeAccuracy: location.altitudeAccuracy, heading: location.heading, alpha: Orientation.singleton.gotMeasurement.data - ? "" + Orientation.singleton.alpha.data + ? ("" + Orientation.singleton.alpha.data) : undefined, } i++ - const feature = { + const feature = >{ type: "Feature", properties, geometry: { @@ -184,7 +185,7 @@ export default class GeoLocationHandler { } private initUserLocationTrail() { - const features = LocalStorageSource.getParsed[]>("gps_location_history", []) + const features = LocalStorageSource.getParsed[]>("gps_location_history", []) const now = new Date().getTime() features.data = features.data.filter((ff) => { if (ff.properties === undefined) { @@ -197,7 +198,7 @@ export default class GeoLocationHandler { ) }) features.ping() - this.currentUserLocation?.features?.addCallbackAndRunD(([location]: [Feature]) => { + this.currentUserLocation?.features?.addCallbackAndRunD(([location]: [Feature]) => { if (location === undefined) { return } @@ -231,7 +232,7 @@ export default class GeoLocationHandler { features.ping() }) - this.historicalUserLocations = new WritableStaticFeatureSource>(features) + this.historicalUserLocations = new WritableStaticFeatureSource>(features) const asLine = features.map((allPoints) => { if (allPoints === undefined || allPoints.length < 2) { diff --git a/src/Logic/Actors/PendingChangesUploader.ts b/src/Logic/Actors/PendingChangesUploader.ts index b3265c3f24..9068cf6572 100644 --- a/src/Logic/Actors/PendingChangesUploader.ts +++ b/src/Logic/Actors/PendingChangesUploader.ts @@ -27,8 +27,7 @@ export default class PendingChangesUploader { } document.addEventListener("mouseout", (e) => { - // @ts-ignore - if (!e.toElement && !e.relatedTarget) { + if (!e["toElement"] && !e.relatedTarget) { changes.flushChanges("Flushing changes due to focus lost") } }) diff --git a/src/Logic/Osm/Changes.ts b/src/Logic/Osm/Changes.ts index 84aac5c334..c3772f0cbf 100644 --- a/src/Logic/Osm/Changes.ts +++ b/src/Logic/Osm/Changes.ts @@ -17,6 +17,7 @@ import ChangeTagAction from "./Actions/ChangeTagAction" import DeleteAction from "./Actions/DeleteAction" import MarkdownUtils from "../../Utils/MarkdownUtils" import FeaturePropertiesStore from "../FeatureSource/Actors/FeaturePropertiesStore" +import { Feature, Point } from "geojson" /** * Handles all changes made to OSM. @@ -37,7 +38,7 @@ export class Changes { public readonly backend: string public readonly isUploading = new UIEventSource(false) public readonly errors = new UIEventSource([], "upload-errors") - private readonly historicalUserLocations?: FeatureSource + private readonly historicalUserLocations?: FeatureSource> private _nextId: number = 0 // Newly assigned ID's are negative private readonly previouslyCreated: OsmObject[] = [] private readonly _leftRightSensitive: boolean @@ -53,7 +54,7 @@ export class Changes { osmConnection: OsmConnection reportError?: (error: string) => void featureProperties?: FeaturePropertiesStore - historicalUserLocations?: FeatureSource + historicalUserLocations?: FeatureSource> allElements?: IndexedFeatureSource }, leftRightSensitive: boolean = false @@ -66,7 +67,7 @@ export class Changes { if (isNaN(this._nextId) && state.reportError !== undefined) { state.reportError( "Got a NaN as nextID. Pending changes IDs are:" + - this.pendingChanges.data?.map((pch) => pch?.id).join(".") + this.pendingChanges.data?.map((pch) => pch?.id).join(".") ) this._nextId = -100 } @@ -90,8 +91,8 @@ export class Changes { return new Changes({ osmConnection: new OsmConnection(), featureSwitches: { - featureSwitchIsTesting: new ImmutableStore(true), - }, + featureSwitchIsTesting: new ImmutableStore(true) + } }) } @@ -178,50 +179,50 @@ export class Changes { [ { key: "comment", - docs: "The changeset comment. Will be a fixed string, mentioning the theme", + docs: "The changeset comment. Will be a fixed string, mentioning the theme" }, { key: "theme", - docs: "The name of the theme that was used to create this change. ", + docs: "The name of the theme that was used to create this change. " }, { key: "source", value: "survey", - docs: "The contributor had their geolocation enabled while making changes", + docs: "The contributor had their geolocation enabled while making changes" }, { key: "change_within_{distance}", - docs: "If the contributor enabled their geolocation, this will hint how far away they were from the objects they edited. This gives an indication of proximity and if they truly surveyed or were armchair-mapping", + docs: "If the contributor enabled their geolocation, this will hint how far away they were from the objects they edited. This gives an indication of proximity and if they truly surveyed or were armchair-mapping" }, { key: "change_over_{distance}", - docs: "If the contributor enabled their geolocation, this will hint how far away they were from the objects they edited. If they were over 5000m away, the might have been armchair-mapping", + docs: "If the contributor enabled their geolocation, this will hint how far away they were from the objects they edited. If they were over 5000m away, the might have been armchair-mapping" }, { key: "created_by", value: "MapComplete ", - docs: "The piece of software used to create this changeset; will always start with MapComplete, followed by the version number", + docs: "The piece of software used to create this changeset; will always start with MapComplete, followed by the version number" }, { key: "locale", value: "en|nl|de|...", - docs: "The code of the language that the contributor used MapComplete in. Hints what language the user speaks.", + docs: "The code of the language that the contributor used MapComplete in. Hints what language the user speaks." }, { key: "host", value: "https://mapcomplete.org/", - docs: "The URL that the contributor used to make changes. One can see the used instance with this", + docs: "The URL that the contributor used to make changes. One can see the used instance with this" }, { key: "imagery", - docs: "The identifier of the used background layer, this will probably be an identifier from the [editor layer index](https://github.com/osmlab/editor-layer-index)", - }, + docs: "The identifier of the used background layer, this will probably be an identifier from the [editor layer index](https://github.com/osmlab/editor-layer-index)" + } ], "default" ), ...addSource(ChangeTagAction.metatags, "ChangeTag"), ...addSource(ChangeLocationAction.metatags, "ChangeLocation"), - ...addSource(DeleteAction.metatags, "DeleteAction"), + ...addSource(DeleteAction.metatags, "DeleteAction") // TODO /* ...DeleteAction.metatags, @@ -243,11 +244,11 @@ export class Changes { docs, specialMotivation ? "This might give a reason per modified node or way" - : "", + : "" ].join("\n"), - source, + source ]) - ), + ) ].join("\n\n") } @@ -266,7 +267,7 @@ export class Changes { this._changesetHandler._remappings.has("node/" + this._nextId) || this._changesetHandler._remappings.has("way/" + this._nextId) || this._changesetHandler._remappings.has("relation/" + this._nextId) - ) + ) return this._nextId } @@ -333,6 +334,7 @@ export class Changes { this.previouslyCreated ) } + public static createChangesetObjectsStatic( changes: ChangeDescription[], downloadedOsmObjects: OsmObject[], @@ -502,7 +504,7 @@ export class Changes { const result = { newObjects: [], modifiedObjects: [], - deletedObjects: [], + deletedObjects: [] } objects.forEach((v, id) => { @@ -559,9 +561,7 @@ export class Changes { const recentLocationPoints = locations .filter((feat) => feat.geometry.type === "Point") .filter((feat) => { - const visitTime = new Date( - ((feat.properties)).date - ) + const visitTime = new Date(feat.properties.date) // In seconds const diff = (now.getTime() - visitTime.getTime()) / 1000 return diff < Constants.nearbyVisitTime @@ -665,7 +665,7 @@ export class Changes { } else { this._reportError( `Got an orphaned change. The 'creation'-change description for ${c.type}/${c.id} got lost. Permanently dropping this change:` + - JSON.stringify(c) + JSON.stringify(c) ) } return @@ -676,10 +676,10 @@ export class Changes { } else { console.log( "Refusing change about " + - c.type + - "/" + - c.id + - " as not in the objects. No internet?" + c.type + + "/" + + c.id + + " as not in the objects. No internet?" ) refused.push(c) } @@ -694,7 +694,7 @@ export class Changes { */ private async flushSelectChanges( pending: ChangeDescription[], - openChangeset: UIEventSource + openChangeset: UIEventSource<{ id: number, opened: number }> ): Promise { const neededIds = Changes.GetNeededIds(pending) /* Download the latest version of the OSM-objects @@ -775,14 +775,14 @@ export class Changes { ([key, count]) => ({ key: key, value: count, - aggregate: true, + aggregate: true }) ) const motivations = pending .filter((descr) => descr.meta.specialMotivation !== undefined) .map((descr) => ({ key: descr.meta.changeType + ":" + descr.type + "/" + descr.id, - value: descr.meta.specialMotivation, + value: descr.meta.specialMotivation })) const distances = Utils.NoNull(pending.map((descr) => descr.meta.distanceToObject)) @@ -813,7 +813,7 @@ export class Changes { return { key, value: count, - aggregate: true, + aggregate: true } }) ) @@ -828,19 +828,20 @@ export class Changes { const metatags: ChangesetTag[] = [ { key: "comment", - value: comment, + value: comment }, { key: "theme", - value: theme, + value: theme }, ...perType, ...motivations, - ...perBinMessage, + ...perBinMessage ] return metatags } + private async flushChangesAsync(): Promise { try { // At last, we build the changeset and upload @@ -858,16 +859,12 @@ export class Changes { const refusedChanges: ChangeDescription[][] = await Promise.all( Array.from(pendingPerTheme, async ([theme, pendingChanges]) => { try { - const openChangeset = UIEventSource.asInt( - this.state.osmConnection.GetPreference( - "current-open-changeset-" + theme - ) - ) + const openChangeset = this.state.osmConnection.getCurrentChangesetFor(theme) console.log( "Using current-open-changeset-" + - theme + - " from the preferences, got " + - openChangeset.data + theme + + " from the preferences, got " + + openChangeset.data ) const refused = await this.flushSelectChanges(pendingChanges, openChangeset) diff --git a/src/Logic/Osm/ChangesetHandler.ts b/src/Logic/Osm/ChangesetHandler.ts index 5f364c5ce7..ac1f386e24 100644 --- a/src/Logic/Osm/ChangesetHandler.ts +++ b/src/Logic/Osm/ChangesetHandler.ts @@ -113,11 +113,11 @@ export class ChangesetHandler { private async UploadWithNew( generateChangeXML: (csid: number, remappings: Map) => string, - openChangeset: UIEventSource, + openChangeset: UIEventSource<{ id: number, opened: number }>, extraMetaTags: ChangesetTag[] ) { const csId = await this.OpenChangeset(extraMetaTags) - openChangeset.setData(csId) + openChangeset.setData({ id: csId, opened: new Date().getTime() }) const changeset = generateChangeXML(csId, this._remappings) console.log( "Opened a new changeset (openChangeset.data is undefined):", @@ -145,7 +145,7 @@ export class ChangesetHandler { public async UploadChangeset( generateChangeXML: (csid: number, remappings: Map) => string, extraMetaTags: ChangesetTag[], - openChangeset: UIEventSource + openChangeset: UIEventSource<{ id: number, opened: number }> ): Promise { if ( !extraMetaTags.some((tag) => tag.key === "comment") || @@ -169,18 +169,21 @@ export class ChangesetHandler { } console.log("Trying to reuse changeset", openChangeset.data) - if (openChangeset.data) { + const now = new Date() + const changesetIsUsable = openChangeset.data !== undefined && + (now.getTime() - openChangeset.data.opened < 24 * 60 * 60 * 1000) + if (changesetIsUsable) { try { const csId = openChangeset.data - const oldChangesetMeta = await this.GetChangesetMeta(csId) + const oldChangesetMeta = await this.GetChangesetMeta(csId.id) console.log("Got metadata:", oldChangesetMeta, "isopen", oldChangesetMeta?.open) if (oldChangesetMeta.open) { // We can hopefully reuse the changeset try { const rewritings = await this.UploadChange( - csId, - generateChangeXML(csId, this._remappings) + csId.id, + generateChangeXML(csId.id, this._remappings) ) const rewrittenTags = this.RewriteTagsOf( @@ -188,7 +191,7 @@ export class ChangesetHandler { rewritings, oldChangesetMeta ) - await this.UpdateTags(csId, rewrittenTags) + await this.UpdateTags(csId.id, rewrittenTags) return // We are done! } catch (e) { this._reportError(e, "While reusing a changeset " + openChangeset.data) @@ -236,9 +239,9 @@ export class ChangesetHandler { /** * Given an existing changeset with metadata and extraMetaTags to add, will fuse them to a new set of metatags * Does not yet send data - * @param extraMetaTags: new changeset tags to add/fuse with this changeset - * @param rewriteIds: the mapping of ids - * @param oldChangesetMeta: the metadata-object of the already existing changeset + * @param extraMetaTags new changeset tags to add/fuse with this changeset + * @param rewriteIds the mapping of ids + * @param oldChangesetMeta the metadata-object of the already existing changeset * * @public for testing purposes */ @@ -250,7 +253,7 @@ export class ChangesetHandler { id: number uid: number // User ID changes_count: number - tags: any + tags: Record } ): ChangesetTag[] { // Note: extraMetaTags is where all the tags are collected into @@ -300,11 +303,11 @@ export class ChangesetHandler { /** * Updates the id in the AllElements store, returns the new ID - * @param node: the XML-element, e.g. + * @param node the XML-element, e.g. * @param type * @private */ - private static parseIdRewrite(node: any, type: string): [string, string] { + private static parseIdRewrite(node: any, type: "node" | "way" | "relation"): [string, string] { const oldId = parseInt(node.attributes.old_id.value) if (node.attributes.new_id === undefined) { return [type + "/" + oldId, undefined] diff --git a/src/Logic/Osm/OsmConnection.ts b/src/Logic/Osm/OsmConnection.ts index 15d010fae2..999d6fee2a 100644 --- a/src/Logic/Osm/OsmConnection.ts +++ b/src/Logic/Osm/OsmConnection.ts @@ -246,11 +246,13 @@ export class OsmConnection { } public getPreference( - key: string, - defaultValue: string = undefined, - prefix: string = "mapcomplete-" + key: string, options?: { + defaultValue?: string, + prefix?: "mapcomplete-" | string, + saveToLocalStorage?: true | boolean + } ): UIEventSource { - return >this.preferencesHandler.getPreference(key, defaultValue, prefix) + return >this.preferencesHandler.getPreference(key, options?.defaultValue, options?.prefix ?? "mapcomplete-") } public LogOut() { @@ -731,4 +733,24 @@ export class OsmConnection { return { api: "offline", gpx: "offline", database: "online" } } } + + public getCurrentChangesetFor(theme: string) { + return UIEventSource.asObject<{ id: number, opened: number }>( + this.GetPreference( + "current-changeset-" + theme + ), + undefined + ) + } + + /** + * Returns the names of the themes that have an open changeset + */ + public getAllOpenChangesetsPreferences(): Store { + const prefix = "current-changeset-" + return this.preferencesHandler.allPreferences.map(dict => + Object.keys(dict) + .filter(k => k.startsWith(prefix)) + .map(k => k.substring(prefix.length))) + } } diff --git a/src/Logic/Osm/OsmPreferences.ts b/src/Logic/Osm/OsmPreferences.ts index c320a26401..53c84f3312 100644 --- a/src/Logic/Osm/OsmPreferences.ts +++ b/src/Logic/Osm/OsmPreferences.ts @@ -14,6 +14,7 @@ export class OsmPreferences { private localStorageInited: Set = new Set() /** * Contains all the keys as returned by the OSM-preferences. + * This includes combined preferences, such as: pref, pref:0, pref:1 * Used to clean up old preferences */ private seenKeys: string[] = [] @@ -59,18 +60,18 @@ export class OsmPreferences { value: string = undefined, deferPing = false ): UIEventSource { - if (this.preferences[key] !== undefined) { + const cached = this.preferences[key] + if (cached !== undefined) { if (value !== undefined) { - this.preferences[key].set(value) + cached.set(value) } - return this.preferences[key] + return cached } const pref = (this.preferences[key] = new UIEventSource(value, "preference: " + key)) if (value) { this.setPreferencesAll(key, value, deferPing) } pref.addCallback((v) => { - console.log("Got an update:", key, "--->", v) this.uploadKvSplit(key, v) this.setPreferencesAll(key, v, deferPing) }) @@ -82,13 +83,16 @@ export class OsmPreferences { this.seenKeys = Object.keys(prefs) const merged = OsmPreferences.mergeDict(prefs) for (const key in merged) { - this.initPreference(key, prefs[key], true) + this.initPreference(key, merged[key], true) } this._allPreferences.ping() + if (this.osmConnection.isLoggedIn.data) { + await this.cleanup() + } } - public getPreference(key: string, defaultValue: string = undefined, prefix?: string) { - return this.getPreferenceSeedFromlocal(key, defaultValue, { prefix }) + public getPreference(key: string, defaultValue: string = undefined, prefix?: string, saveLocally = true) { + return this.getPreferenceSeedFromlocal(key, defaultValue, { prefix, saveToLocalStorage: saveLocally }) } /** @@ -139,23 +143,52 @@ export class OsmPreferences { * OsmPreferences.mergeDict({abc: "123", def: "123", "def:0": "456", "def:1":"789"}) // => {abc: "123", def: "123456789"} */ private static mergeDict(dict: Record): Record { - const newDict = {} - const allKeys: string[] = Object.keys(dict) - const normalKeys = allKeys.filter((k) => !k.match(/[a-z-_0-9A-Z]*:[0-9]+/)) - for (const normalKey of normalKeys) { - if (normalKey.match(/-combined-[0-9]*$/) || normalKey.match(/-combined-length$/)) { + const keyParts: Record> = {} + const endsWithNumber = /:[0-9]+$/ + for (const key of Object.keys(dict)) { + if (key.match(/-combined-[0-9]*$/) || key.match(/-combined-length$/)) { continue } - const partKeys = OsmPreferences.keysStartingWith(allKeys, normalKey) - const parts = partKeys.map((k) => dict[k]) - newDict[normalKey] = parts.join("") + const nr = key.match(endsWithNumber) + if (nr) { + const i = Number(nr[0].substring(1)) + const k = key.substring(0, key.length - nr[0].length) + let subparts = keyParts[k] + if (!subparts) { + subparts = {} + keyParts[k] = subparts + } + subparts[i] = dict[key] + } else { + let subparts = keyParts[key] + if (!subparts) { + subparts = keyParts[key] = {} + } + subparts[""] = dict[key] + } + } + + const newDict = {} + + for (const key in keyParts) { + const subparts = keyParts[key] + let i = 0 + let v = subparts[""] ?? "" + while (subparts[i]) { + v += subparts[i] + i++ + } + newDict[key] = v + } + return newDict } /** - * Bulk-downloads all preferences, creates a simple record from all + * Bulk-downloads all preferences, creates a simple record from all preferences. + * This should still be merged! * @private */ private async getPreferencesDictDirectly(): Promise> { @@ -166,7 +199,7 @@ export class OsmPreferences { this.auth.xhr( { method: "GET", - path: "/api/0.6/user/preferences", + path: "/api/0.6/user/preferences" }, (error, value: XMLDocument) => { if (error) { @@ -187,6 +220,9 @@ export class OsmPreferences { }) } + + private static readonly endsWithNumber = /:[0-9]+$/ + /** * Returns all keys matching `k:[number]` * Split separately for test @@ -198,7 +234,24 @@ export class OsmPreferences { * */ private static keysStartingWith(allKeys: string[], key: string): string[] { - const keys = allKeys.filter((k) => k === key || k.match(new RegExp(key + ":[0-9]+"))) + + const keys = allKeys.filter((k) => { + if (k === key) { + return true + } + if (!k.startsWith(key)) { + return false + } + const match = k.match(OsmPreferences.endsWithNumber) + if (!match) { + return false + } + const matchLength = match[0].length + if (key.length + matchLength !== k.length) { + return false + } + return true + }) keys.sort() return keys } @@ -247,7 +300,7 @@ export class OsmPreferences { { method: "DELETE", path: "/api/0.6/user/preferences/" + encodeURIComponent(k), - headers: { "Content-Type": "text/plain" }, + headers: { "Content-Type": "text/plain" } }, (error) => { if (error) { @@ -255,7 +308,6 @@ export class OsmPreferences { reject(error) return } - console.debug("Preference ", k, "removed!") resolve() } ) @@ -289,33 +341,50 @@ export class OsmPreferences { throw "Preference too long, at most 255 characters are supported" } - return new Promise((resolve, reject) => { - this.auth.xhr( - { - method: "PUT", - path: "/api/0.6/user/preferences/" + encodeURIComponent(k), - headers: { "Content-Type": "text/plain" }, - content: v, - }, - (error) => { - if (error) { - console.warn(`Could not set preference "${k}"'`, error) - reject(error) - return - } - resolve() - } - ) - }) + try { + + return this.osmConnection.interact("user/preferences/" + encodeURIComponent(k), + "PUT", { "Content-Type": "text/plain" }, v) + } catch (e) { + console.error("Could not upload preference due to", e) + } } async removeAllWithPrefix(prefix: string) { const keys = this.seenKeys + let somethingChanged = false for (const key of keys) { if (!key.startsWith(prefix)) { continue } + console.log("Cleaning up preference", key) await this.deleteKeyDirectly(key) + somethingChanged = true } + return somethingChanged + } + + private async cleanup() { + const prefixesToClean = ["mapcomplete-mapcomplete-", "mapcomplete-places-history", "unofficial-theme-", "mapcompleteplaces", "mapcompletethemes"] // TODO enable this one once the new system is in prod "mapcomplete-current-open-changeset-"] + let somethingChanged = false + for (const prefix of prefixesToClean) { + const hasChange = await this.removeAllWithPrefix(prefix) // Don't inline - short-circuiting + somethingChanged ||= hasChange + } + if (somethingChanged) { + this._allPreferences.ping() + } + + const themes = this.osmConnection.getAllOpenChangesetsPreferences() + const now = new Date() + + for (const theme of themes.data) { + const cs = this.osmConnection.getCurrentChangesetFor(theme) + if (now.getTime() - cs.data.opened > 24 * 60 * 60 * 1000) { + console.log("Clearing 'open changeset' for theme", theme, "; definitively expired by now") + cs.set(undefined) + } + } + } } diff --git a/src/Logic/State/GeoLocationState.ts b/src/Logic/State/GeoLocationState.ts index 21fa3aaca9..6a94347a49 100644 --- a/src/Logic/State/GeoLocationState.ts +++ b/src/Logic/State/GeoLocationState.ts @@ -8,9 +8,10 @@ import { AndroidPolyfill } from "../Web/AndroidPolyfill" export type GeolocationPermissionState = "prompt" | "requested" | "granted" | "denied" export interface GeoLocationPointProperties extends GeolocationCoordinates { - id: "gps" + id: "gps" | string "user:location": "yes" - date: string + date: string, + alpha?: string } /** diff --git a/src/Logic/State/UserRelatedState.ts b/src/Logic/State/UserRelatedState.ts index 13f623e0ab..eaa5d6ab41 100644 --- a/src/Logic/State/UserRelatedState.ts +++ b/src/Logic/State/UserRelatedState.ts @@ -26,10 +26,12 @@ class RoundRobinStore { private readonly _index: UIEventSource private readonly _value: UIEventSource public readonly value: Store + private readonly _maxCount: number - constructor(store: UIEventSource, index: UIEventSource) { + constructor(store: UIEventSource, index: UIEventSource, maxCount: number) { this._store = store this._index = index + this._maxCount = maxCount this._value = new UIEventSource([]) this.value = this._value this._store.addCallbackD(() => this.set()) @@ -40,6 +42,9 @@ class RoundRobinStore { const v = this._store.data const i = this._index.data const newList = Utils.NoNull(v.slice(i + 1, v.length).concat(v.slice(0, i + 1))) + if (newList.length === 0) { + this._index.set(0) + } this._value.set(newList) } @@ -49,7 +54,7 @@ class RoundRobinStore { */ public add(t: T) { const i = this._index.data - this._index.set((i + 1) % this._store.data.length) + this._index.set((i + 1) % this._maxCount) this._store.data[i] = t this._store.ping() @@ -78,15 +83,21 @@ export class OptionallySyncedHistory { this.osmconnection = osmconnection this._maxHistory = maxHistory this._isSame = isSame - this.syncPreference = osmconnection.getPreference("preference-" + key + "-history", "sync") + this.syncPreference = osmconnection.getPreference("preference-" + key + "-history", { + defaultValue: "sync" + }) this.syncedBackingStore = Stores.fromArray( - Utils.TimesT(maxHistory, (i) => - UIEventSource.asObject(osmconnection.getPreference(key + "-history-" + i), undefined) - )) - this.syncedOrdered = new RoundRobinStore(this.syncedBackingStore, - UIEventSource.asInt(osmconnection.getPreference(key + "-history-round-robin", "0")) - ) + Utils.TimesT(maxHistory, (i) => { + const pref = osmconnection.getPreference(key + "-hist-" + i + "-") + pref.addCallbackAndRun(v => console.trace(">>> pref", pref.tag, " is now ", v)) + return UIEventSource.asObject(pref, undefined) + })) + + const ringIndex = UIEventSource.asInt(osmconnection.getPreference(key + "-hist-round-robin", { + defaultValue: "0" + })) + this.syncedOrdered = new RoundRobinStore(this.syncedBackingStore, ringIndex, 10) const local = (this.local = LocalStorageSource.getParsed(key + "-history", [])) const thisSession = (this.thisSession = new UIEventSource( [], @@ -250,33 +261,33 @@ export default class UserRelatedState { this.osmConnection = osmConnection this.showAllQuestionsAtOnce = UIEventSource.asBoolean( - this.osmConnection.getPreference("show-all-questions", "false") + this.osmConnection.getPreference("show-all-questions", { defaultValue: "false" }) ) this.language = this.osmConnection.getPreference("language") this.showTags = this.osmConnection.getPreference("show_tags") this.showCrosshair = this.osmConnection.getPreference("show_crosshair") this.fixateNorth = this.osmConnection.getPreference("fixate-north") - this.morePrivacy = this.osmConnection.getPreference("more_privacy", "no") + this.morePrivacy = this.osmConnection.getPreference("more_privacy", { defaultValue: "no" }) this.a11y = this.osmConnection.getPreference("a11y") this.mangroveIdentity = new MangroveIdentity( - this.osmConnection.getPreference("identity", undefined, "mangrove"), - this.osmConnection.getPreference("identity-creation-date", undefined, "mangrove") - ) - this.preferredBackgroundLayer = this.osmConnection.getPreference( - "preferred-background-layer" + this.osmConnection.getPreference("identity", { defaultValue: undefined, prefix: "mangrove" }), + this.osmConnection.getPreference("identity-creation-date", { + defaultValue: undefined, + prefix: "mangrove" + }) ) + this.preferredBackgroundLayer = this.osmConnection.getPreference("preferred-background-layer") - this.addNewFeatureMode = this.osmConnection.getPreference( - "preferences-add-new-mode", - "button_click_right" + this.addNewFeatureMode = this.osmConnection.getPreference("preferences-add-new-mode", + { defaultValue: "button_click_right" } ) this.showScale = UIEventSource.asBoolean( - this.osmConnection.GetPreference("preference-show-scale", "false") + this.osmConnection.getPreference("preference-show-scale", { defaultValue: "false" }) ) - this.imageLicense = this.osmConnection.getPreference("pictures-license", "CC0") + this.imageLicense = this.osmConnection.getPreference("pictures-license", { defaultValue: "CC0" }) this.installedUserThemes = UserRelatedState.initInstalledUserThemes(osmConnection) this.translationMode = this.initTranslationMode() this.homeLocation = this.initHomeLocation() @@ -309,7 +320,7 @@ export default class UserRelatedState { private initTranslationMode(): UIEventSource<"false" | "true" | "mobile" | undefined | string> { const translationMode: UIEventSource = - this.osmConnection.getPreference("translation-mode", "false") + this.osmConnection.getPreference("translation-mode", { defaultValue: "false" }) translationMode.addCallbackAndRunD((mode) => { mode = mode.toLowerCase() if (mode === "true" || mode === "yes") { @@ -358,7 +369,7 @@ export default class UserRelatedState { try { return JSON.parse(str) } catch (e) { - e.warn( + console.warn( "Removing theme " + id + " as it could not be parsed from the preferences; the content is:", @@ -639,7 +650,7 @@ export default class UserRelatedState { public getThemeDisabled(themeId: string, layerId: string): UIEventSource { const flatSource = this.osmConnection.getPreference( "disabled-questions-" + themeId + "-" + layerId, - "[]" + { defaultValue: "[]" } ) return UIEventSource.asObject(flatSource, []) } diff --git a/src/Logic/Web/IdbLocalStorage.ts b/src/Logic/Web/IdbLocalStorage.ts index c28f4b165c..66062c2cd2 100644 --- a/src/Logic/Web/IdbLocalStorage.ts +++ b/src/Logic/Web/IdbLocalStorage.ts @@ -38,11 +38,11 @@ export class IdbLocalStorage { return src } - public static SetDirectly(key: string, value: any): Promise { + public static SetDirectly(key: string, value: T): Promise { return idb.set(key, value) } - static GetDirectly(key: string): Promise { + static GetDirectly(key: string): Promise { return idb.get(key) } diff --git a/src/Models/ThemeViewState/UserMapFeatureswitchState.ts b/src/Models/ThemeViewState/UserMapFeatureswitchState.ts index eae94c9753..c8e1c82a91 100644 --- a/src/Models/ThemeViewState/UserMapFeatureswitchState.ts +++ b/src/Models/ThemeViewState/UserMapFeatureswitchState.ts @@ -1,7 +1,7 @@ import ThemeConfig from "../ThemeConfig/ThemeConfig" import { Store, UIEventSource } from "../../Logic/UIEventSource" import { Map as MlMap } from "maplibre-gl" -import { GeoLocationState } from "../../Logic/State/GeoLocationState" +import { GeoLocationPointProperties, GeoLocationState } from "../../Logic/State/GeoLocationState" import InitialMapPositioning from "../../Logic/Actors/InitialMapPositioning" import { MapLibreAdaptor } from "../../UI/Map/MapLibreAdaptor" import { ExportableMap, MapProperties } from "../MapProperties" @@ -43,7 +43,7 @@ export class UserMapFeatureswitchState extends WithUserRelatedState { readonly geolocationState: GeoLocationState readonly geolocation: GeoLocationHandler readonly geolocationControl: GeolocationControlState - readonly historicalUserLocations: WritableFeatureSource> + readonly historicalUserLocations: WritableFeatureSource> readonly availableLayers: { store: Store } readonly currentView: FeatureSource> From 55c015ad849df6c219a17d1ac9048479e09dc2d3 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 7 Apr 2025 02:40:58 +0200 Subject: [PATCH 52/90] Themes(cyclofix): include toilets --- assets/themes/cyclofix/cyclofix.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/assets/themes/cyclofix/cyclofix.json b/assets/themes/cyclofix/cyclofix.json index 5c841484f5..c12eda12ce 100644 --- a/assets/themes/cyclofix/cyclofix.json +++ b/assets/themes/cyclofix/cyclofix.json @@ -158,7 +158,10 @@ } }, { - "builtin": "bicycle_library", + "builtin": [ + "bicycle_library", + "toilet" + ], "override": { "minzoom": 13 } From 3d3a72a70a2ae4a6b10d4478588f3a19fdd2ebb0 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 7 Apr 2025 02:53:21 +0200 Subject: [PATCH 53/90] Feature: image upload now uses the indexedDB-backed queue (formerly known as EmergencyBackup), rework (and simplify) counter logic (fix #2186; fix #1942; helps #2022) --- langs/en.json | 19 +- scripts/generateLayouts.ts | 2 +- .../ImageProviders/EmergencyImageBackup.ts | 112 ------ .../ImageProviders/ImageUploadManager.ts | 339 ++++++++++-------- src/Logic/ImageProviders/ImageUploadQueue.ts | 46 +++ src/Logic/ImageProviders/Panoramax.ts | 2 +- src/Logic/Osm/OsmObject.ts | 3 +- src/Logic/State/UserRelatedState.ts | 1 - src/Models/OsmFeature.ts | 2 + src/Models/ThemeViewState/WithImageState.ts | 6 +- src/UI/BigComponents/MenuDrawer.svelte | 10 +- src/UI/Image/FailedImage.svelte | 88 ----- src/UI/Image/FailedImagesView.svelte | 41 --- src/UI/Image/QueuedImage.svelte | 65 ++++ src/UI/Image/QueuedImagesView.svelte | 42 +++ src/UI/Image/UploadImage.svelte | 31 +- src/UI/Image/UploadingImageCounter.svelte | 91 +++-- src/UI/Popup/Notes/NoteCommentElement.ts | 2 +- src/UI/Search/ThemeResults.svelte | 3 +- 19 files changed, 402 insertions(+), 503 deletions(-) delete mode 100644 src/Logic/ImageProviders/EmergencyImageBackup.ts create mode 100644 src/Logic/ImageProviders/ImageUploadQueue.ts delete mode 100644 src/UI/Image/FailedImage.svelte delete mode 100644 src/UI/Image/FailedImagesView.svelte create mode 100644 src/UI/Image/QueuedImage.svelte create mode 100644 src/UI/Image/QueuedImagesView.svelte diff --git a/langs/en.json b/langs/en.json index 1b2195d265..60d0cc1d22 100644 --- a/langs/en.json +++ b/langs/en.json @@ -63,16 +63,6 @@ "overwrite": "Overwrite in OpenStreetMap", "title": "Structured data loaded from the external website" }, - "failedImages": { - "confirmDelete": "Permanently delete this image", - "confirmDeleteTitle": "Delete this image?", - "delete": "Delete this image", - "intro": "The following images failed to upload", - "menu": "Failed images ({count})", - "noFailedImages": "There are currently no failed images", - "retry": "Retry uploading this image", - "retryAll": "Retry uploading all images" - }, "favourite": { "reload": "Reload the data" }, @@ -612,6 +602,15 @@ }, "uploadFailed": "Could not upload your picture. Are you connected to the Internet, and allow third party API's? The Brave browser or the uMatrix plugin might block them." }, + "imageQueue": { + "confirmDelete": "Permanently delete this image", + "confirmDeleteTitle": "Delete this image?", + "delete": "Delete this image", + "intro": "The following images are queued for upload", + "menu": "Image upload queue ({count})", + "noFailedImages": "There are currently no images in the upload queue", + "retryAll": "Retry uploading all images" + }, "importInspector": { "title": "Inspect and manage import notes" }, diff --git a/scripts/generateLayouts.ts b/scripts/generateLayouts.ts index 79a7469aa4..d1f20ff419 100644 --- a/scripts/generateLayouts.ts +++ b/scripts/generateLayouts.ts @@ -426,7 +426,7 @@ class GenerateLayouts extends Script { const csp: Record = { "default-src": "'self'", "child-src": "'self' blob: ", - "img-src": "* data:", // maplibre depends on 'data:' to load + "img-src": "* data: blob:", // maplibre depends on 'data:' to load; 'blob:' is needed "report-to": "https://report.mapcomplete.org/csp", "worker-src": "'self' blob:", // Vite somehow loads the worker via a 'blob' "style-src": "'self' 'unsafe-inline'", // unsafe-inline is needed to change the default background pin colours diff --git a/src/Logic/ImageProviders/EmergencyImageBackup.ts b/src/Logic/ImageProviders/EmergencyImageBackup.ts deleted file mode 100644 index 329e1731cf..0000000000 --- a/src/Logic/ImageProviders/EmergencyImageBackup.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { IdbLocalStorage } from "../Web/IdbLocalStorage" -import { Store, UIEventSource } from "../UIEventSource" -import ThemeViewState from "../../Models/ThemeViewState" -import LinkImageAction from "../Osm/Actions/LinkImageAction" -import { WithImageState } from "../../Models/ThemeViewState/WithImageState" - -export interface FailedImageArgs { - readonly featureId: string, - readonly author: string, - readonly blob: File, - readonly targetKey: string | undefined, - readonly noblur: boolean, - readonly ignoreGps: boolean, - readonly lastGpsLocation: GeolocationCoordinates, - readonly layoutId: string - readonly date: number -} - -export default class EmergencyImageBackup { - - public static readonly singleton = new EmergencyImageBackup() - private readonly _failedImages: UIEventSource - - public readonly failedImages: Store - - private readonly _isUploading: UIEventSource = new UIEventSource(false) - public readonly isUploading: Store = this._isUploading - - private constructor() { - this._failedImages = IdbLocalStorage.Get("failed-images-backup", { defaultValue: [] }) - this.failedImages = this._failedImages - } - - public addFailedImage(args: FailedImageArgs) { - this._failedImages.data.push(args) - this._failedImages.ping() - } - - public delete(img: FailedImageArgs) { - const index = this._failedImages.data.indexOf(img) - if (index < 0) { - return - } - this._failedImages.data.splice(index, 1) - this._failedImages.ping() - } - - /** - * Retries uploading the given image - * Returns 'true' if the image got correctly uploaded and linked (or upload is no longer necessary, e.g. deleted iem) - * @param state - * @param i - */ - public async retryUploading(state: ThemeViewState, i: FailedImageArgs): Promise { - this._isUploading.set(true) - try { - - const feature = await state.osmObjectDownloader.DownloadObjectAsync(i.featureId) - if (feature === "deleted") { - return true - } - - const asGeojson = feature.asGeoJson() - const uploadResult = await state.imageUploadManager.uploadImageWithLicense( - i.featureId, - i.author, - i.blob, - i.targetKey, - i.noblur, - asGeojson, - { - ignoreGps: i.ignoreGps, - noBackup: true,// Don't save this _again_ - overwriteGps: i.lastGpsLocation - } - ) - if (!uploadResult) { - // Upload failed again - return false - } - state.featureProperties.trackFeature(asGeojson) - const properties = state.featureProperties.getStore(i.featureId) - // Upload successful, time to link this to the image - const action = new LinkImageAction( - i.featureId, - uploadResult.key, - uploadResult.value, - properties, - { - theme: i.layoutId, - changeType: "add-image" - } - ) - - await state.changes.applyAction(action) - await state.changes.flushChanges("delayed image upload link") - this.delete(i) - return true - } finally { - this._isUploading.set(false) - } - } - - public async retryAll(state: WithImageState) { - for (const img of [...this._failedImages.data]) { - await this.retryUploading(state, img) - /*this._isUploading.setData(true) - await Utils.waitFor(2000) - this._isUploading.set(false)*/ - } - } -} diff --git a/src/Logic/ImageProviders/ImageUploadManager.ts b/src/Logic/ImageProviders/ImageUploadManager.ts index 593bdf8a13..08971c1217 100644 --- a/src/Logic/ImageProviders/ImageUploadManager.ts +++ b/src/Logic/ImageProviders/ImageUploadManager.ts @@ -1,35 +1,53 @@ import { ImageUploader, UploadResult } from "./ImageUploader" import LinkImageAction from "../Osm/Actions/LinkImageAction" import FeaturePropertiesStore from "../FeatureSource/Actors/FeaturePropertiesStore" -import { OsmId, OsmTags } from "../../Models/OsmFeature" +import { NoteId, OsmId, OsmTags } from "../../Models/OsmFeature" import ThemeConfig from "../../Models/ThemeConfig/ThemeConfig" import { Store, UIEventSource } from "../UIEventSource" import { OsmConnection } from "../Osm/OsmConnection" import { Changes } from "../Osm/Changes" import Translations from "../../UI/i18n/Translations" import { Translation } from "../../UI/i18n/Translation" -import { IndexedFeatureSource } from "../FeatureSource/FeatureSource" -import { GeoOperations } from "../GeoOperations" import { Feature } from "geojson" -import EmergencyImageBackup from "./EmergencyImageBackup" +import ImageUploadQueue, { ImageUploadArguments } from "./ImageUploadQueue" +import { GeoOperations } from "../GeoOperations" +import NoteCommentElement from "../../UI/Popup/Notes/NoteCommentElement" +import OsmObjectDownloader from "../Osm/OsmObjectDownloader" /** * The ImageUploadManager has a */ export class ImageUploadManager { + private readonly _queue: ImageUploadQueue = ImageUploadQueue.singleton private readonly _uploader: ImageUploader private readonly _featureProperties: FeaturePropertiesStore private readonly _theme: ThemeConfig - private readonly _indexedFeatures: IndexedFeatureSource private readonly _gps: Store - private readonly _uploadStarted: Map> = new Map() - private readonly _uploadFinished: Map> = new Map() - private readonly _uploadFailed: Map> = new Map() - private readonly _uploadRetried: Map> = new Map() - private readonly _uploadRetriedSuccess: Map> = new Map() private readonly _osmConnection: OsmConnection private readonly _changes: Changes - public readonly isUploading: Store + + /** + * Keeps track of the _features_ for which an upload was successfull. Only used to give an indication. + * Every time an image is uploaded, the featureID is added to the list. Not persisted (and should not be) + */ + private readonly _successfull: UIEventSource = new UIEventSource([]) + public readonly successfull: Store = this._successfull + /** + * Keeps track of the _features_ for which an upload failed. Only used to give an indication to the user. + * Every time an image upload fails, the featureID is added to the list. Not persisted (and should not be) + */ + private readonly _fails: UIEventSource = new UIEventSource([]) + public readonly fails: Store = this._fails.map(args => args.map(a => a.featureId)) + /** + * FeatureIDs of queued items + */ + public readonly queued: Store = this._queue.imagesInQueue.map(queue => queue.map(q => q.featureId)) + public readonly queuedArgs = this._queue.imagesInQueue + /** + * The feature for which an upload is currently running + */ + public readonly _isUploading: UIEventSource = new UIEventSource(undefined) + public readonly isUploading: Store = this._isUploading private readonly _reportError: ( message: string | Error | XMLHttpRequest, extramessage?: string @@ -42,7 +60,6 @@ export class ImageUploadManager { osmConnection: OsmConnection, changes: Changes, gpsLocation: Store, - allFeatures: IndexedFeatureSource, reportError: ( message: string | Error | XMLHttpRequest, extramessage?: string @@ -53,41 +70,8 @@ export class ImageUploadManager { this._theme = layout this._osmConnection = osmConnection this._changes = changes - this._indexedFeatures = allFeatures this._gps = gpsLocation this._reportError = reportError - - const failed = this.getCounterFor(this._uploadFailed, "*") - const done = this.getCounterFor(this._uploadFinished, "*") - - this.isUploading = this.getCounterFor(this._uploadStarted, "*").map( - (startedCount) => { - return startedCount > failed.data + done.data - }, - [failed, done] - ) - } - - /** - * Gets various counters. - * Note that counters can only increase - * If a retry was a success, both 'retrySuccess' _and_ 'uploadFinished' will be increased - * @param featureId the id of the feature you want information for. '*' has a global counter - */ - public getCountsFor(featureId: string | "*"): { - retried: Store - uploadStarted: Store - retrySuccess: Store - failed: Store - uploadFinished: Store - } { - return { - uploadStarted: this.getCounterFor(this._uploadStarted, featureId), - uploadFinished: this.getCounterFor(this._uploadFinished, featureId), - retried: this.getCounterFor(this._uploadRetried, featureId), - failed: this.getCounterFor(this._uploadFailed, featureId), - retrySuccess: this.getCounterFor(this._uploadRetriedSuccess, featureId) - } } public canBeUploaded(file: File): true | { error: Translation } { @@ -108,110 +92,187 @@ export class ImageUploadManager { /** * Uploads the given image, applies the correct title and license for the known user. - * Will then add this image to the OSM-feature or the OSM-note + * Will then add this image to the OSM-feature or the OSM-note automatically, based on the ID of the feature. + * Note: the image will actually be added to the queue. If the image-upload fails, this will be attempted when visiting MC again * @param file a jpg file to upload * @param tagsStore The tags of the feature * @param targetKey Use this key to save the attribute under. Default: 'image' * @param noblur if true, then the api call will indicate that the image is already blurred. The server won't apply blurring in this case * @param feature the feature this image is about. Will be used as fallback to get the GPS-coordinates */ - public async uploadImageAndApply( + public uploadImageAndApply( file: File, tagsStore: UIEventSource, targetKey: string, noblur: boolean, - feature: Feature - ): Promise { + feature: Feature, + options: { + ignoreGPS: boolean | false + } + ): void { const canBeUploaded = this.canBeUploaded(file) if (canBeUploaded !== true) { throw canBeUploaded.error } - const tags = tagsStore.data + const tags: OsmTags = tagsStore.data + const featureId = tags.id - const featureId = tags.id - const author = this._osmConnection.userDetails.data.name + const author = this._osmConnection?.userDetails?.data?.name ?? "Anonymous" // Might be a note upload - const uploadResult = await this.uploadImageWithLicense( - featureId, - author, - file, - targetKey, - noblur, - feature - ) - if (!uploadResult) { - return + /** + * The location to upload the image with. + * Note that EXIF-data will always be trusted _more_ by the uploader + */ + let location: [number, number] = GeoOperations.centerpointCoordinates(feature) + if (this._gps.data && !options?.ignoreGPS) { + location = [this._gps.data.longitude, this._gps.data.latitude] } - const properties = this._featureProperties.getStore(featureId) - const action = new LinkImageAction( - featureId, - uploadResult.key, - uploadResult.value, - properties, - { - theme: tags?.data?.["_orig_theme"] ?? this._theme.id, - changeType: "add-image" - } - ) + const args: ImageUploadArguments = { + location, + date: new Date().getTime(), + layoutId: this._theme.id, + author, blob: file, featureId, noblur, targetKey + } + console.log("Args are", args) + + this._queue.add(args) + this.uploadQueue() - await this._changes.applyAction(action) } /** - * Uploads an image; returns undefined if the image upload failed. - * Errors are handled internally + * Attempts to upload all items in the queue + */ + private uploadingAll = false + + public async uploadQueue() { + if (this.uploadingAll) { + return + } + const queue = this._queue.imagesInQueue.data ?? [] + if (queue.length === 0) { + return + } + console.log("Checking image upload queue and uploading if needed") + this.uploadingAll = true + try { + for (const imageToUpload of queue) { + await this.handleQueueItem(imageToUpload) + } + } catch (e) { + console.error("Error while handling the queue:", e) + await this._reportError("Image Upload Manager: queue stopped working:", e) + } finally { + this.uploadingAll = false + } + } + + /** + * Handles a queue item: + * - starts upload + * - indicates that the upload is busy + * - Applies the action to the correct element + * - indicates failure + * @private + */ + private async handleQueueItem(args: ImageUploadArguments): Promise { + console.log("Handling queue item", args) + if (!args) { + return + } + this._isUploading.set(args.featureId) + + let result: UploadResult = undefined + let attempts = 2 + while (attempts > 0 && result === undefined) { + attempts-- + const doReport = attempts == 0 + result = await this.attemptSingleUpload(args, doReport) + if (!result) { + console.log("Upload attempt failed, attempts left:", attempts) + } + } + this._isUploading.set(undefined) + if (result === undefined) { + this._fails.data.push(args) + this._fails.ping() + return + } + this._fails.set(this._fails.data.filter(a => a !== args)) + let properties: UIEventSource> = this._featureProperties.getStore(args.featureId) + + if (args.featureId.startsWith("note/")) { + // This is an OSM-note + const url = result.absoluteUrl + await this._osmConnection.addCommentToNote(args.featureId, url) + const properties: UIEventSource> = this._featureProperties.getStore(args.featureId) + if (properties) { + // Properties will not be defined if the note isn't loaded, but that is no problem as the below code is only relevant if the note is shown + NoteCommentElement.addCommentTo(url, properties, { + osmConnection: this._osmConnection + }) + } + } else { + if (properties === undefined) { + const downloaded = await new OsmObjectDownloader(this._osmConnection.Backend(), this._changes).DownloadObjectAsync(args.featureId) + if (downloaded === "deleted") { + this._queue.delete(args) + return + } + properties = new UIEventSource(downloaded.tags) + } + const action = new LinkImageAction( + args.featureId, + result.key, + result.value, + properties, + { + theme: properties?.data?.["_orig_theme"] ?? this._theme.id, + changeType: "add-image" + } + ) + await this._changes.applyAction(action) + await this._changes.flushChanges("Image upload completed") + } + + this._queue.delete(args) + + } + + /** + * Attempts to upload the image (once). + * Returns 'undefined' if failed * @param featureId * @param author * @param blob * @param targetKey * @param noblur - * @param feature - * @param options + * @param lastGpsLocation + * @param ignoreGps + * @param layoutId + * @param date + * @param reportOnFail If set, reports an error to the mapcomplete server so that pietervdvn can fix it + * @private */ - public async uploadImageWithLicense( - featureId: string, - author: string, - blob: File, - targetKey: string | undefined, - noblur: boolean, - feature: Feature, - options?: { - ignoreGps?: boolean, - noBackup?: boolean, - overwriteGps?: GeolocationCoordinates - - } + private async attemptSingleUpload( + { + featureId, + author, + blob, + targetKey, + noblur, + location + }: ImageUploadArguments, + reportOnFail: boolean ): Promise { - this.increaseCountFor(this._uploadStarted, featureId) + let key: string let value: string let absoluteUrl: string - let location: [number, number] = undefined - if (options?.overwriteGps) { - location = [options.overwriteGps.longitude, options.overwriteGps.latitude] - } else if (this._gps.data && !options?.ignoreGps) { - location = [this._gps.data.longitude, this._gps.data.latitude] - } - { - feature ??= this._indexedFeatures.featuresById.data.get(featureId) - if (feature === undefined) { - throw "ImageUploadManager: no feature given and no feature found in the indexedFeature. Cannot upload this image" - } - const featureCenterpoint = GeoOperations.centerpointCoordinates(feature) - if ( - location === undefined || - location?.some((l) => l === undefined) || - GeoOperations.distanceBetween(location, featureCenterpoint) > 150 - ) { - /* GPS location is either unknown or very far away from the photographed location. - * Default to the centerpoint - */ - location = featureCenterpoint - } - } + try { ({ key, value, absoluteUrl } = await this._uploader.uploadImage( blob, @@ -220,27 +281,9 @@ export class ImageUploadManager { noblur )) } catch (e) { - this.increaseCountFor(this._uploadRetried, featureId) - console.error("Could not upload image, trying again:", e) - try { - ({ key, value, absoluteUrl } = await this._uploader.uploadImage( - blob, - location, - author, - noblur - )) - this.increaseCountFor(this._uploadRetriedSuccess, featureId) - } catch (e) { - console.error("Could again not upload image due to", e) - this.increaseCountFor(this._uploadFailed, featureId) - if (!options?.noBackup) { - EmergencyImageBackup.singleton.addFailedImage({ - blob, author, noblur, featureId, targetKey, ignoreGps: options?.ignoreGps, - layoutId: this._theme.id, - lastGpsLocation: this._gps.data, - date: new Date().getTime() - }) - } + console.error("Could again not upload image due to", e) + if (reportOnFail) { + await this._reportError( e, JSON.stringify({ @@ -250,37 +293,15 @@ export class ImageUploadManager { targetKey }) ) - return undefined } + return undefined } - console.log("Uploading image done, creating action for", featureId, " targetkey is", targetKey, "key is", key) key = targetKey ?? key if (targetKey && targetKey.indexOf(key) < 0) { // This is a non-standard key, so we use the image link directly value = absoluteUrl } - this.increaseCountFor(this._uploadFinished, featureId) return { key, absoluteUrl, value } } - private getCounterFor(collection: Map>, key: string | "*") { - if (this._featureProperties.aliases.has(key)) { - key = this._featureProperties.aliases.get(key) - } - if (!collection.has(key)) { - collection.set(key, new UIEventSource(0)) - } - return collection.get(key) - } - - private increaseCountFor(collection: Map>, key: string | "*") { - { - const counter = this.getCounterFor(collection, key) - counter.setData(counter.data + 1) - } - { - const global = this.getCounterFor(collection, "*") - global.setData(global.data + 1) - } - } } diff --git a/src/Logic/ImageProviders/ImageUploadQueue.ts b/src/Logic/ImageProviders/ImageUploadQueue.ts new file mode 100644 index 0000000000..de3aa8cf75 --- /dev/null +++ b/src/Logic/ImageProviders/ImageUploadQueue.ts @@ -0,0 +1,46 @@ +import { IdbLocalStorage } from "../Web/IdbLocalStorage" +import { Store, UIEventSource } from "../UIEventSource" + +export interface ImageUploadArguments { + readonly featureId: string, + readonly author: string, + readonly blob: File, + readonly targetKey: string | undefined, + readonly noblur: boolean, + readonly location: [number, number], + readonly layoutId: string + readonly date: number +} + +/** + * The 'imageUploadQueue' keeps track of all images that should still be uploaded. + * It is backed up in the indexedDB as to not drop images in case of connection problems + */ +export default class ImageUploadQueue { + + public static readonly singleton = new ImageUploadQueue() + private readonly _imagesInQueue: UIEventSource + + public readonly imagesInQueue: Store + + private constructor() { + this._imagesInQueue = IdbLocalStorage.Get("failed-images-backup", { defaultValue: [] }) + this.imagesInQueue = this._imagesInQueue + } + + public add(args: ImageUploadArguments) { + this._imagesInQueue.data.push(args) + console.log("Got args", args) + this._imagesInQueue.ping() + } + + public delete(img: ImageUploadArguments) { + const index = this._imagesInQueue.data.indexOf(img) + if (index < 0) { + return + } + this._imagesInQueue.data.splice(index, 1) + this._imagesInQueue.ping() + } + +} diff --git a/src/Logic/ImageProviders/Panoramax.ts b/src/Logic/ImageProviders/Panoramax.ts index 4f0204a1b0..c00b86871e 100644 --- a/src/Logic/ImageProviders/Panoramax.ts +++ b/src/Logic/ImageProviders/Panoramax.ts @@ -263,7 +263,7 @@ export class PanoramaxUploader implements ImageUploader { } console.log("Tags are", tags) } catch (e) { - console.error("Could not read EXIF-tags") + console.warn("Could not read EXIF-tags") } const p = this.panoramax diff --git a/src/Logic/Osm/OsmObject.ts b/src/Logic/Osm/OsmObject.ts index 1c69941810..6a7e4687a4 100644 --- a/src/Logic/Osm/OsmObject.ts +++ b/src/Logic/Osm/OsmObject.ts @@ -19,9 +19,8 @@ export abstract class OsmObject { public changed: boolean = false timestamp: Date - protected constructor(type: string, id: number) { + protected constructor(type: "node" | "way" | "relation", id: number) { this.id = id - // @ts-ignore this.type = type this.tags = { id: `${this.type}/${id}`, diff --git a/src/Logic/State/UserRelatedState.ts b/src/Logic/State/UserRelatedState.ts index eaa5d6ab41..f67bf23b3b 100644 --- a/src/Logic/State/UserRelatedState.ts +++ b/src/Logic/State/UserRelatedState.ts @@ -90,7 +90,6 @@ export class OptionallySyncedHistory { this.syncedBackingStore = Stores.fromArray( Utils.TimesT(maxHistory, (i) => { const pref = osmconnection.getPreference(key + "-hist-" + i + "-") - pref.addCallbackAndRun(v => console.trace(">>> pref", pref.tag, " is now ", v)) return UIEventSource.asObject(pref, undefined) })) diff --git a/src/Models/OsmFeature.ts b/src/Models/OsmFeature.ts index d8ff8928ee..e163a471c8 100644 --- a/src/Models/OsmFeature.ts +++ b/src/Models/OsmFeature.ts @@ -3,6 +3,8 @@ import { Feature, Geometry } from "geojson" export type RelationId = `relation/${number}` export type WayId = `way/${number}` export type NodeId = `node/${number}` +export type NoteId = `node/${number}` + export type OsmId = NodeId | WayId | RelationId export type OsmTags = Record & { id: string } diff --git a/src/Models/ThemeViewState/WithImageState.ts b/src/Models/ThemeViewState/WithImageState.ts index f9d0f1dcfc..0c7799f257 100644 --- a/src/Models/ThemeViewState/WithImageState.ts +++ b/src/Models/ThemeViewState/WithImageState.ts @@ -9,7 +9,6 @@ import ThemeViewStateHashActor from "../../Logic/Web/ThemeViewStateHashActor" import PendingChangesUploader from "../../Logic/Actors/PendingChangesUploader" import { WithGuiState } from "./WithGuiState" import { SpecialVisualizationState } from "../../UI/SpecialVisualization" -import EmergencyImageBackup from "../../Logic/ImageProviders/EmergencyImageBackup" export class WithImageState extends WithGuiState implements SpecialVisualizationState { readonly imageUploadManager: ImageUploadManager @@ -30,7 +29,6 @@ export class WithImageState extends WithGuiState implements SpecialVisualization this.osmConnection, this.changes, this.geolocation.geolocationState.currentGPSLocation, - this.indexedFeatures, this.reportError ) const longAgo = new Date() @@ -45,7 +43,7 @@ export class WithImageState extends WithGuiState implements SpecialVisualization }) this.osmConnection.userDetails.addCallbackAndRunD(() => { - EmergencyImageBackup.singleton.retryAll(this) + this.imageUploadManager.uploadQueue() }) } @@ -57,7 +55,7 @@ export class WithImageState extends WithGuiState implements SpecialVisualization featureSwitches: this.featureSwitches, selectedElement: this.selectedElement, indexedFeatures: this.indexedFeatures, - guistate: this.guistate, + guistate: this.guistate }) new PendingChangesUploader(this.changes, this.selectedElement, this.imageUploadManager) } diff --git a/src/UI/BigComponents/MenuDrawer.svelte b/src/UI/BigComponents/MenuDrawer.svelte index 6ba902f226..f73259aff7 100644 --- a/src/UI/BigComponents/MenuDrawer.svelte +++ b/src/UI/BigComponents/MenuDrawer.svelte @@ -61,9 +61,9 @@ import Hotkeys from "../Base/Hotkeys" import { ArrowTrendingUp } from "@babeard/svelte-heroicons/solid/ArrowTrendingUp" import ArrowTopRightOnSquare from "@babeard/svelte-heroicons/mini/ArrowTopRightOnSquare" - import FailedImagesView from "../Image/FailedImagesView.svelte" import { PhotoIcon } from "@babeard/svelte-heroicons/outline" - import EmergencyImageBackup from "../../Logic/ImageProviders/EmergencyImageBackup" + import ImageUploadQueue from "../../Logic/ImageProviders/ImageUploadQueue" + import QueuedImagesView from "../Image/QueuedImagesView.svelte" export let state: { favourites: FavouritesFeatureSource @@ -100,7 +100,7 @@ } }) let isAndroid = AndroidPolyfill.inAndroid - let nrOfFailedImages = EmergencyImageBackup.singleton.failedImages + let nrOfFailedImages = ImageUploadQueue.singleton.imagesInQueue let failedImagesOpen = pg.failedImages @@ -165,9 +165,9 @@ - + - + {/if} diff --git a/src/UI/Image/FailedImage.svelte b/src/UI/Image/FailedImage.svelte deleted file mode 100644 index 3e22320b89..0000000000 --- a/src/UI/Image/FailedImage.svelte +++ /dev/null @@ -1,88 +0,0 @@ - - -
- - - {failedImage.featureId} {failedImage.layoutId} - {#if $isUploading || _state === "retrying"} - - - - {:else if _state === "idle" || _state === "failed"} - - {#if _state === "failed"} - - {/if} - {:else if _state === "success"} -
- -
- {/if} - - - - - - - - -
- -
- -
- -
- confirmDelete.set(false)}> - - - -
-
-
-
-
diff --git a/src/UI/Image/FailedImagesView.svelte b/src/UI/Image/FailedImagesView.svelte deleted file mode 100644 index 1a6d5a55c7..0000000000 --- a/src/UI/Image/FailedImagesView.svelte +++ /dev/null @@ -1,41 +0,0 @@ - - -
- {#if $failed.length === 0} - - {:else} -
- -
- - {#if $isUploading} - - {:else} - - {/if} -
- {#each $failed as failedImage (failedImage.date + failedImage.featureId)} - - {/each} -
- {/if} -
diff --git a/src/UI/Image/QueuedImage.svelte b/src/UI/Image/QueuedImage.svelte new file mode 100644 index 0000000000..3a3fc4aa1e --- /dev/null +++ b/src/UI/Image/QueuedImage.svelte @@ -0,0 +1,65 @@ + + +
+ + + {imageArguments.featureId} {imageArguments.layoutId} + + + + + + + + +
+ +
+ +
+ +
+ confirmDelete.set(false)}> + + + +
+
+
+
+
diff --git a/src/UI/Image/QueuedImagesView.svelte b/src/UI/Image/QueuedImagesView.svelte new file mode 100644 index 0000000000..39228bfe31 --- /dev/null +++ b/src/UI/Image/QueuedImagesView.svelte @@ -0,0 +1,42 @@ + + +
+ {#if $queued.length === 0} + + {:else} +
+ +
+ + + + {#if $isUploading} + + {:else} + + {/if} +
+ {#each $queued as i (i.date + i.featureId)} + + {/each} +
+ {/if} +
diff --git a/src/UI/Image/UploadImage.svelte b/src/UI/Image/UploadImage.svelte index 30d85ca03c..fd2f0c5796 100644 --- a/src/UI/Image/UploadImage.svelte +++ b/src/UI/Image/UploadImage.svelte @@ -14,7 +14,6 @@ import LoginButton from "../Base/LoginButton.svelte" import { Translation } from "../i18n/Translation" import LayerConfig from "../../Models/ThemeConfig/LayerConfig" - import NoteCommentElement from "../Popup/Notes/NoteCommentElement" import type { Feature } from "geojson" import Camera from "@babeard/svelte-heroicons/mini/Camera" @@ -38,7 +37,7 @@ let errors = new UIEventSource([]) - async function handleFiles(files: FileList, ignoreGps: boolean = false) { + async function handleFiles(files: FileList, ignoreGPS: boolean = false) { const errs = [] for (let i = 0; i < files.length; i++) { const file = files.item(i) @@ -49,31 +48,7 @@ errs.push(canBeUploaded.error) continue } - - if (layer?.id === "note") { - const uploadResult = await state?.imageUploadManager.uploadImageWithLicense( - tags.data.id, - state.osmConnection.userDetails.data?.name ?? "Anonymous", - file, - "image", - noBlur, - feature, - { - ignoreGps - } - ) - if (!uploadResult) { - return - } - const url = uploadResult.absoluteUrl - await state.osmConnection.addCommentToNote(tags.data.id, url) - NoteCommentElement.addCommentTo(url, >tags, { - osmConnection: state.osmConnection, - }) - return - } - - await state?.imageUploadManager?.uploadImageAndApply(file, tags, targetKey, noBlur, feature) + await state?.imageUploadManager?.uploadImageAndApply(file, tags, targetKey, noBlur, feature, { ignoreGPS }) } catch (e) { console.error(e) state.reportError(e, "Could not upload image") @@ -100,7 +75,7 @@ {/each} = undefined - export let featureId = tags?.data?.id + export let featureId: OsmId | NoteId | "*" = tags?.data?.id ?? "*" if (featureId === undefined) { throw "No tags or featureID given" } export let showThankYou: boolean = true - const { uploadStarted, uploadFinished, retried, failed } = - state.imageUploadManager.getCountsFor(featureId) + + /* + Number of images uploaded succesfully + */ + function getCount(input: Store): Store { + if (featureId == "*") { + return input.map(inp => inp.length) + } + return input.map(success => success.filter(item => item === featureId).length) + } + + let successfull = getCount(state.imageUploadManager.successfull) + /* Number of failed uploads */ + let failed = getCount(state.imageUploadManager.fails) + + let pending = getCount(state.imageUploadManager.queued) const t = Translations.t.image const debugging = state.featureSwitches.featureSwitchIsDebugging let dismissed = 0 + failed.addCallbackAndRun(failed => { + dismissed = Math.min(failed, dismissed) + }) {#if $debugging}
- Started {$uploadStarted} Done {$uploadFinished} Retry {$retried} Err {$failed} + Pending {$pending} Done {$successfull} Err {$failed}
{/if} -{#if dismissed === $uploadStarted} - -{:else if $uploadStarted === 1} - {#if $uploadFinished === 1} - {#if showThankYou} - - {/if} - {:else if $failed === 1} - (dismissed = $failed)} /> - {:else if $retried === 1} -
- - - -
- {:else} -
- + +{#if $pending - $failed > 0} +
+ + {#if $pending - $failed === 1} - -
- {/if} -{:else if $uploadStarted > 1} - {#if $uploadFinished + $failed === $uploadStarted} - {#if $uploadFinished === 0} - - {:else if showThankYou} - - {/if} - {:else if $uploadFinished === 0} - - + {:else if $pending - $failed > 1} + + {/if} - {:else if $uploadFinished > 0} - - - - {/if} - {#if $failed > 0} - (dismissed = $failed)} /> +
+{/if} + +{#if $failed > dismissed} + (dismissed = $failed)} /> +{/if} + +{#if showThankYou} + {#if $successfull === 1} + + {:else if $successfull > 1} + {/if} {/if} diff --git a/src/UI/Popup/Notes/NoteCommentElement.ts b/src/UI/Popup/Notes/NoteCommentElement.ts index fa0773bff8..d8a69e6242 100644 --- a/src/UI/Popup/Notes/NoteCommentElement.ts +++ b/src/UI/Popup/Notes/NoteCommentElement.ts @@ -9,7 +9,7 @@ export default class NoteCommentElement { */ public static addCommentTo( txt: string, - tags: UIEventSource, + tags: UIEventSource>, state: { osmConnection: { userDetails: Store<{ name: string; uid: number }> } } ) { const comments: any[] = JSON.parse(tags.data["comments"]) diff --git a/src/UI/Search/ThemeResults.svelte b/src/UI/Search/ThemeResults.svelte index d8a3290634..623497268a 100644 --- a/src/UI/Search/ThemeResults.svelte +++ b/src/UI/Search/ThemeResults.svelte @@ -11,11 +11,12 @@ import { TrashIcon } from "@babeard/svelte-heroicons/mini" import { CogIcon } from "@rgossiaux/svelte-heroicons/solid" import Tr from "../Base/Tr.svelte" + import { Utils } from "../../Utils.ts" export let state: SpecialVisualizationState let searchTerm = state.searchState.searchTerm let recentThemes = state.userRelatedState.recentlyVisitedThemes.value.map((themes) => - themes.filter((th) => th !== state.theme.id).slice(0, 6) + Utils.Dedup(themes.filter((th) => th !== state.theme.id).slice(0, 6)) ) let themeResults = state.searchState.themeSuggestions From 7b7c747fd6c1775f246dc6f524b7da5025e8caff Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 7 Apr 2025 03:28:47 +0200 Subject: [PATCH 54/90] Themes(drinking_water): allow multiple types, fix #2368 --- assets/layers/drinking_water/drinking_water.json | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/assets/layers/drinking_water/drinking_water.json b/assets/layers/drinking_water/drinking_water.json index 300cb5ba76..2d8515454b 100644 --- a/assets/layers/drinking_water/drinking_water.json +++ b/assets/layers/drinking_water/drinking_water.json @@ -295,6 +295,7 @@ "uk": "Що це за тип пункту питної води?", "es": "¿Qué tipo de punto de agua potable es este?" }, + "multiAnswer": true, "mappings": [ { "if": "fountain=bubbler", @@ -306,10 +307,7 @@ "uk": "Це барботажний фонтан. Струмінь води, з якого можна пити, спрямовується вгору, зазвичай керується кнопкою.", "es": "Esta es una fuente de chorro. Un chorro de agua para beber se envía hacia arriba, típicamente controlado por un botón.", "ca": "Aquesta és una font de raig. Un raig d'aigua per beure s'envia cap amunt, normalment controlat per un botó d'empenta." - }, - "addExtraTags": [ - "man_made=" - ] + } }, { "if": "fountain=bottle_refill", @@ -323,12 +321,13 @@ "es": "Este es un punto de recarga de botellas donde el agua se envía hacia abajo, normalmente controlado por un botón o un sensor de movimiento. Beber directamente del flujo podría ser muy difícil o imposible." }, "addExtraTags": [ - "man_made=", "bottle=yes" ] }, { - "if": "man_made=water_tap", + "if": "fountain=water_tap", + "alsoShowIf": "man_made=water_tap", + "ifnot": "man_made=", "icon": "./assets/layers/drinking_water/tap.svg", "then": { "en": "This is a water tap. The water flows downward and the stream is controlled by a valve or push-button.", @@ -337,10 +336,7 @@ "ca": "Això és una aixeta d'aigua. L'aigua flueix cap avall i el corrent és controlat per una vàlvula o polsador.", "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." - }, - "addExtraTags": [ - "fountain=" - ] + } } ] }, From 5adf43a3358e212af3cdf278fdb17a1839a05331 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 7 Apr 2025 03:29:27 +0200 Subject: [PATCH 55/90] Themes(onwheels): statistics now don't show too much items, fix #2366 --- .../FeatureSource/Actors/GeoIndexedStore.ts | 18 ++---------------- src/UI/Statistics/LayerStatistics.svelte | 12 ++++++------ 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/src/Logic/FeatureSource/Actors/GeoIndexedStore.ts b/src/Logic/FeatureSource/Actors/GeoIndexedStore.ts index 15bc28fdf0..8e6c392f85 100644 --- a/src/Logic/FeatureSource/Actors/GeoIndexedStore.ts +++ b/src/Logic/FeatureSource/Actors/GeoIndexedStore.ts @@ -25,22 +25,8 @@ export default class GeoIndexedStore implements FeatureSource { */ public GetFeaturesWithin(bbox: BBox): Feature[] { const bboxFeature = bbox.asGeojsonCached() - return this.features.data.filter((f) => { - if (f.geometry.type === "Point") { - return bbox.contains(<[number, number]>f.geometry.coordinates) - } - if (f.geometry.type === "LineString") { - const intersection = GeoOperations.intersect( - BBox.get(f).asGeojsonCached(), - bboxFeature - ) - return intersection !== undefined - } - if (f.geometry.type === "Polygon" || f.geometry.type === "MultiPolygon") { - return GeoOperations.intersect(f, bboxFeature) !== undefined - } - return GeoOperations.intersect(f, bboxFeature) !== undefined - }) + return this.features.data.filter((f) => + GeoOperations.completelyWithin(f, bboxFeature)) } } diff --git a/src/UI/Statistics/LayerStatistics.svelte b/src/UI/Statistics/LayerStatistics.svelte index 6006f5ce9a..ea50f4b1da 100644 --- a/src/UI/Statistics/LayerStatistics.svelte +++ b/src/UI/Statistics/LayerStatistics.svelte @@ -11,12 +11,12 @@ import { AccordionItem } from "flowbite-svelte" import ThemeViewState from "../../Models/ThemeViewState" import DefaultIcon from "../Map/DefaultIcon.svelte" + import { Store } from "../../Logic/UIEventSource" export let layer: LayerConfig export let state: ThemeViewState let bbox = state.mapProperties.bounds - let elements: Feature[] = state.perLayer.get(layer.id).GetFeaturesWithin($bbox) - $: elements = state.perLayer.get(layer.id).GetFeaturesWithin($bbox) + let elements: Store = bbox.mapD(bbox => state.perLayer.get(layer.id).GetFeaturesWithin(bbox)) let trs = layer.tagRenderings.filter((tr) => tr.question) @@ -31,19 +31,19 @@ - ({elements.length} elements in view) + ({$elements.length} elements in view) - {#if elements === undefined} + {#if $elements === undefined} - {:else if elements.length === 0} + {:else if $elements.length === 0} No features in view {:else}
{#each trs as tr} - new TagRenderingChart(elements, tr, { + new TagRenderingChart($elements, tr, { chartclasses: "w-full self-center", includeTitle: true, }).SetClass(tr.multiAnswer ? "w-128" : "w-96")} From 6925b3d26e2569787040258e889c4c83ebfa790c Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 7 Apr 2025 03:52:28 +0200 Subject: [PATCH 56/90] Themes(benches): add some of the memorial-questions, fix #2369 --- assets/layers/bench/bench.json | 10 ++++++++++ assets/layers/memorial/memorial.json | 15 +++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/assets/layers/bench/bench.json b/assets/layers/bench/bench.json index 300ef7c5b4..4865d44b9a 100644 --- a/assets/layers/bench/bench.json +++ b/assets/layers/bench/bench.json @@ -1195,6 +1195,16 @@ ] } } + }, + { + "builtin": "memorial.*memorial-specific", + "override": { + "condition": { + "and": [ + "historic=memorial" + ] + } + } } ], "filter": [ diff --git a/assets/layers/memorial/memorial.json b/assets/layers/memorial/memorial.json index 5b74180f8a..3e92955bcd 100644 --- a/assets/layers/memorial/memorial.json +++ b/assets/layers/memorial/memorial.json @@ -406,12 +406,17 @@ }, { "id": "memorial-wikidata", + "labels": [ + "memorial-specific", + "memorial-questions" + ], "freeform": { "key": "wikidata", "type": "wikidata" }, "question": { "en": "What is the Wikipedia page about this memorial?", + "nl": "Wat is het Wikipedia-artikel over dit gedenkteken?", "de": "Was ist die Wikipedia-Seite über dieses Denkmal?", "fr": "Quelle est la page Wikipedia de ce mémorial ?", "es": "¿Cuál es la página de Wikipedia sobre este monumento?", @@ -420,6 +425,7 @@ }, "questionHint": { "en": "This is a about the memorial itself, not about the person or event that the memorial remembers. If this memorial does not have a Wikipedia page or Wikidata entity, skip this question.", + "nl": "Dit gaat over het gedenkteken zelf, niet over de persoon of de gebeurtenis die herdacht worden. Indien dit gedenkteken geen Wikipedia-artikel heeft, sla deze vraag dan over.", "de": "Hier geht es um das Denkmal selbst, nicht um die Person oder das Ereignis, an das die Denkmal erinnert. Wenn diese Gedenkstätte keine Wikipedia-Seite oder Wikidata-Entität hat, überspringe diese Frage.", "fr": "C'est la page Wikipédia du mémorial et non celle de la personne ou de l'évènement commémoré. Si le mémorial n'a pas de page Wikipédia ou d'entité Wikidata, passez cette question.", "es": "Se trata del propio monumento, no de la persona o el evento que recuerda el monumento. Si este monumento no tiene una página de Wikipedia o una entidad Wikidata, omite esta pregunta.", @@ -433,6 +439,7 @@ }, "before": { "en": "

Wikipedia page about the memorial

", + "nl": "

Wikipediapagina over het gedenkteken

", "de": "

Wikipedia-Seite über das Denkmal

", "fr": "

Page Wikipedia du mémorial

", "es": "

Página de Wikipedia sobre el monumento

", @@ -443,6 +450,10 @@ }, { "id": "subject-wikidata", + "labels": [ + "memorial-specific", + "memorial-questions" + ], "freeform": { "key": "subject:wikidata", "type": "wikidata", @@ -452,6 +463,7 @@ }, "question": { "en": "What is the Wikipedia page about the person or event that is remembered here?", + "nl": "Wat is het Wikipedia-artikel over de persoon of de gebeurtenis die herdacht wordt?", "de": "Was ist die Wikipedia-Seite über die Person oder Veranstaltung, die hier erinnert wird?", "fr": "Quelle est la page Wikipedia qui fait référence à cet évènement ou cette personne?", "es": "¿Cuál es la página de Wikipedia sobre la persona o el evento que se recuerda aquí?", @@ -460,6 +472,7 @@ }, "questionHint": { "en": "If the person or event does not have a Wikipedia page or Wikidata entity, skip this question.", + "nl": "Indien deze persoon of gebeurtenis geen Wikipedia-artikel heeft, sla deze vraag dan over", "de": "Wenn die Person oder das Ereignis keine Wikipedia-Seite oder Wikidata-Entität hat, überspringe diese Frage.", "fr": "Si la personne ou l'évènement n'a pas de page Wikipedia ou d'entité Wikidata, passez cette question.", "es": "Si la persona o el evento no tienen una página de Wikipedia o una entidad Wikidata, omite esta pregunta.", @@ -473,6 +486,7 @@ }, "before": { "en": "

Wikipedia page about the remembered event or person

", + "nl": "

Wikipedia-artikel over de herdachte gebeurtenis of persoon

", "de": "

Wikipedia-Seite über das erinnerte Ereignis oder die Person

", "fr": "

Page Wikipedia sur la personne ou l'évènement commémoré

", "es": "

Página de Wikipedia sobre el evento o la persona recordada

", @@ -484,6 +498,7 @@ { "question": { "en": "When was this memorial installed?", + "nl": "Wanneer werd dit gedenkteken geplaatst?", "de": "Wann wurde dieses Denkmal installiert?", "fr": "Quand ce mémorial a-t-il été installé ?", "es": "¿Cuándo se instaló este monumento?", From aa373ee698f274b874e47a2b873d1b68f41c5071 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 7 Apr 2025 04:11:16 +0200 Subject: [PATCH 57/90] Feature(imagequeue): (hopefully) handle some edge cases correctly --- .../Actors/FeaturePropertiesStore.ts | 5 ++--- src/Logic/ImageProviders/ImageUploadManager.ts | 3 ++- src/Logic/ImageProviders/ImageUploadQueue.ts | 15 ++++++++++++++- src/Logic/Osm/ChangesetHandler.ts | 4 +++- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/Logic/FeatureSource/Actors/FeaturePropertiesStore.ts b/src/Logic/FeatureSource/Actors/FeaturePropertiesStore.ts index e99398f230..47fd12b2de 100644 --- a/src/Logic/FeatureSource/Actors/FeaturePropertiesStore.ts +++ b/src/Logic/FeatureSource/Actors/FeaturePropertiesStore.ts @@ -1,6 +1,5 @@ import { FeatureSource } from "../FeatureSource" import { UIEventSource } from "../../UIEventSource" -import { OsmTags } from "../../../Models/OsmFeature" /** * Constructs a UIEventStore for the properties of every Feature, indexed by id @@ -58,7 +57,7 @@ export default class FeaturePropertiesStore { return store } - public trackFeature(feature: { properties: OsmTags }) { + public trackFeature(feature: { properties: Record }) { const id = feature.properties.id if (id === undefined) { console.trace("Error: feature without ID:", feature) @@ -67,7 +66,7 @@ export default class FeaturePropertiesStore { const source = this._elements.get(id) if (source === undefined) { - this._elements.set(id, new UIEventSource(feature.properties)) + this._elements.set(id, new UIEventSource>(feature.properties)) return } diff --git a/src/Logic/ImageProviders/ImageUploadManager.ts b/src/Logic/ImageProviders/ImageUploadManager.ts index 08971c1217..fffa82456a 100644 --- a/src/Logic/ImageProviders/ImageUploadManager.ts +++ b/src/Logic/ImageProviders/ImageUploadManager.ts @@ -222,7 +222,8 @@ export class ImageUploadManager { this._queue.delete(args) return } - properties = new UIEventSource(downloaded.tags) + this._featureProperties.trackFeature(downloaded.asGeoJson()) + properties = this._featureProperties.getStore(args.featureId) } const action = new LinkImageAction( args.featureId, diff --git a/src/Logic/ImageProviders/ImageUploadQueue.ts b/src/Logic/ImageProviders/ImageUploadQueue.ts index de3aa8cf75..5239f97eba 100644 --- a/src/Logic/ImageProviders/ImageUploadQueue.ts +++ b/src/Logic/ImageProviders/ImageUploadQueue.ts @@ -2,7 +2,7 @@ import { IdbLocalStorage } from "../Web/IdbLocalStorage" import { Store, UIEventSource } from "../UIEventSource" export interface ImageUploadArguments { - readonly featureId: string, + featureId: string, readonly author: string, readonly blob: File, readonly targetKey: string | undefined, @@ -43,4 +43,17 @@ export default class ImageUploadQueue { this._imagesInQueue.ping() } + applyRemapping(oldId: string, newId: string) { + + let hasChange = false + for (const img of this._imagesInQueue.data) { + if (img.featureId === oldId) { + img.featureId = newId + hasChange = true + } + } + if (hasChange) { + this._imagesInQueue.ping() + } + } } diff --git a/src/Logic/Osm/ChangesetHandler.ts b/src/Logic/Osm/ChangesetHandler.ts index ac1f386e24..da38c67fd4 100644 --- a/src/Logic/Osm/ChangesetHandler.ts +++ b/src/Logic/Osm/ChangesetHandler.ts @@ -7,6 +7,7 @@ import { Changes } from "./Changes" import { Utils } from "../../Utils" import FeaturePropertiesStore from "../FeatureSource/Actors/FeaturePropertiesStore" import { AndroidPolyfill } from "../Web/AndroidPolyfill" +import ImageUploadQueue from "../ImageProviders/ImageUploadQueue" export interface ChangesetTag { key: string @@ -358,7 +359,8 @@ export class ChangesetHandler { const [oldId, newId] = mapping this.allElements?.addAlias(oldId, newId) if (newId !== undefined) { - this._remappings.set(mapping[0], mapping[1]) + this._remappings.set(oldId, newId) + ImageUploadQueue.singleton.applyRemapping(oldId, newId) } } return new Map(mappings) From 0f177025e020a0fe13faf77a9a5f99b7284cb258 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Mon, 7 Apr 2025 17:43:33 +0200 Subject: [PATCH 58/90] Chore: clean up GH links, update settings (#2374) --- .versionrc.json | 77 +- CHANGELOG.md | 2066 +++++++++++++++++++++++------------------------ package.json | 6 +- 3 files changed, 1089 insertions(+), 1060 deletions(-) diff --git a/.versionrc.json b/.versionrc.json index 56c4e8220a..8d3e462cb1 100644 --- a/.versionrc.json +++ b/.versionrc.json @@ -1,25 +1,54 @@ { - "types": [ - {"type": "feat", "section": "Features"}, - {"type": "fix", "section": "Bug Fixes"}, - {"type": "themes", "section": "Theme improvements"}, - {"type": "UX", - "section": "User experience improvements" - }, - { - "type": "UI", - "section": "User interface improvements" - }, - {"type": "Search", - "section": "Search related features" - }, - {"type": "chore", "hidden": true}, - {"type": "docs", "hidden": true}, - {"type": "style", "hidden": true}, - {"type": "refactor", "hidden": true}, - {"type": "perf", "hidden": true}, - {"type": "test", "hidden": true} - ], - "commitUrlFormat": "https://github.com/pietervdvn/mapcomplete/commits/{{hash}}", - "compareUrlFormat": "https://github.com/pietervdvn/mapcomplete/compare/{{previousTag}}...{{currentTag}}" - } + "types": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "themes", + "section": "Theme improvements" + }, + { + "type": "UX", + "section": "User experience improvements" + }, + { + "type": "UI", + "section": "User interface improvements" + }, + { + "type": "Search", + "section": "Search related features" + }, + { + "type": "chore", + "hidden": true + }, + { + "type": "docs", + "hidden": true + }, + { + "type": "style", + "hidden": true + }, + { + "type": "refactor", + "hidden": true + }, + { + "type": "perf", + "hidden": true + }, + { + "type": "test", + "hidden": true + } + ], + "commitUrlFormat": "https://source.mapcomplete.org/MapComplete/MapComplete/commits/{{hash}}", + "compareUrlFormat": "https://source.mapcomplete.org/MapComplete/MapComplete/compare/{{previousTag}}...{{currentTag}}" +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index aa6e9b3432..0c3fd82b20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,1404 +2,1404 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. -### [0.50.7](https://github.com/pietervdvn/mapcomplete/compare/v0.50.6...v0.50.7) (2025-04-05) +### [0.50.7](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.50.6...v0.50.7) (2025-04-05) ### Theme improvements -* **memorials:** add possibility to snap to walls_and_buildings ([17fd654](https://github.com/pietervdvn/mapcomplete/commits/17fd654f39a1b6cb8bd5dcc2026f273fffbe1d9e)) -* **toilets:** improve tagging of wheelchair accessible toilets, various fixes to make this possible ([089017b](https://github.com/pietervdvn/mapcomplete/commits/089017b1367bf790da993472920000ee73922069)) +* **memorials:** add possibility to snap to walls_and_buildings ([17fd654](https://source.mapcomplete.org/MapComplete/MapComplete/commit/17fd654f39a1b6cb8bd5dcc2026f273fffbe1d9e)) +* **toilets:** improve tagging of wheelchair accessible toilets, various fixes to make this possible ([089017b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/089017b1367bf790da993472920000ee73922069)) -### [0.50.6](https://github.com/pietervdvn/mapcomplete/compare/v0.50.5...v0.50.6) (2025-04-03) +### [0.50.6](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.50.5...v0.50.6) (2025-04-03) ### Bug Fixes -* change condition to and ([4bc987a](https://github.com/pietervdvn/mapcomplete/commits/4bc987a4830727c28b7cffb3e16b9f2dc2f55fcb)) -* change inner workings of how history is kept, should improve performance ([7c57047](https://github.com/pietervdvn/mapcomplete/commits/7c57047d30991d2cb927a0f5053870c6fe76f43d)) -* don't save special items (such as "add new point") into history anymore ([2f92fd0](https://github.com/pietervdvn/mapcomplete/commits/2f92fd0da1f0fc34936db22354d48f7f97892b0e)) -* fix broken delete button ([b2a937f](https://github.com/pietervdvn/mapcomplete/commits/b2a937f4d89a8fd9bc169defc0b9a0925be80269)) -* rescale some theme images ([69b4461](https://github.com/pietervdvn/mapcomplete/commits/69b4461a20d0ca2c71ccbd4f73621e73dd6ff42c)) +* change condition to and ([4bc987a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4bc987a4830727c28b7cffb3e16b9f2dc2f55fcb)) +* change inner workings of how history is kept, should improve performance ([7c57047](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7c57047d30991d2cb927a0f5053870c6fe76f43d)) +* don't save special items (such as "add new point") into history anymore ([2f92fd0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2f92fd0da1f0fc34936db22354d48f7f97892b0e)) +* fix broken delete button ([b2a937f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b2a937f4d89a8fd9bc169defc0b9a0925be80269)) +* rescale some theme images ([69b4461](https://source.mapcomplete.org/MapComplete/MapComplete/commit/69b4461a20d0ca2c71ccbd4f73621e73dd6ff42c)) ### Theme improvements -* **elevator:** add handrail question ([4bd4d90](https://github.com/pietervdvn/mapcomplete/commits/4bd4d90867c77c8355cbc5f52bf3e249dfc50155)) -* **general:** use internet=wlan instead of internet=wifi in the case of both terminal and wifi connection ([f9e2041](https://github.com/pietervdvn/mapcomplete/commits/f9e204186cacbeafeff2b29a3b448d052dfcc87d)) -* **guideposts:** Add mappings for empty ref, name and elevation ([455f540](https://github.com/pietervdvn/mapcomplete/commits/455f540cbdd28062578129e66945f0693328b290)) -* **guideposts:** Add question for name, ref and elevation ([#2326](https://github.com/pietervdvn/MapComplete/issues/2326)) ([4a23fb8](https://github.com/pietervdvn/mapcomplete/commits/4a23fb87a16e00bef7566c70200b38637b92d76b)) -* **guideposts:** Clean tags when changing ([c465f75](https://github.com/pietervdvn/mapcomplete/commits/c465f756d610566375f28a123fc2f8cc8e6f95cc)) -* **kerbs and crossings:** Remove crossing type, add tactile_paving=partial, invalid values ([5c72467](https://github.com/pietervdvn/mapcomplete/commits/5c7246766eb4d5dcbc3ad42b75ed6a93358baf07)) -* **postboxes:** Drop old tagging, add returns_only as option ([cf1ae2f](https://github.com/pietervdvn/mapcomplete/commits/cf1ae2f354a63bbec87325cbebe249f92158891a)) -* **public_bookcase:** allow to snap to wall ([20808ee](https://github.com/pietervdvn/mapcomplete/commits/20808ee7725a72aded0a042a7aabad52493b43e1)) -* **wayside_shrine:** add mother mary as rendering and common option ([b71c275](https://github.com/pietervdvn/mapcomplete/commits/b71c2750258e4e143f1ff6b6e557ea519620a341)) -* **wayside_shrine:** disable blurring, as many pictures will depict a maria statue (which we don't want blurred) ([4f75c81](https://github.com/pietervdvn/mapcomplete/commits/4f75c81af64cff2951aa90146cc745e577f01103)) -* **wayside_srhine:** add inscription question ([290e737](https://github.com/pietervdvn/mapcomplete/commits/290e737e0b330b3732b8282b158d8c17dcb9b8a5)) -* winter_service theme, split off all_streets from street_lighting ([748eccb](https://github.com/pietervdvn/mapcomplete/commits/748eccba5903c55c17e5995b747065a3d6835036)) -* **winter_service:** add colour to serviced_streets, also show winter_service=limited ([d2ed839](https://github.com/pietervdvn/mapcomplete/commits/d2ed83972fe4f19572729e0169594b88f691bcb8)) +* **elevator:** add handrail question ([4bd4d90](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4bd4d90867c77c8355cbc5f52bf3e249dfc50155)) +* **general:** use internet=wlan instead of internet=wifi in the case of both terminal and wifi connection ([f9e2041](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f9e204186cacbeafeff2b29a3b448d052dfcc87d)) +* **guideposts:** Add mappings for empty ref, name and elevation ([455f540](https://source.mapcomplete.org/MapComplete/MapComplete/commit/455f540cbdd28062578129e66945f0693328b290)) +* **guideposts:** Add question for name, ref and elevation ([#2326](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2326)) ([4a23fb8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4a23fb87a16e00bef7566c70200b38637b92d76b)) +* **guideposts:** Clean tags when changing ([c465f75](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c465f756d610566375f28a123fc2f8cc8e6f95cc)) +* **kerbs and crossings:** Remove crossing type, add tactile_paving=partial, invalid values ([5c72467](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5c7246766eb4d5dcbc3ad42b75ed6a93358baf07)) +* **postboxes:** Drop old tagging, add returns_only as option ([cf1ae2f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cf1ae2f354a63bbec87325cbebe249f92158891a)) +* **public_bookcase:** allow to snap to wall ([20808ee](https://source.mapcomplete.org/MapComplete/MapComplete/commit/20808ee7725a72aded0a042a7aabad52493b43e1)) +* **wayside_shrine:** add mother mary as rendering and common option ([b71c275](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b71c2750258e4e143f1ff6b6e557ea519620a341)) +* **wayside_shrine:** disable blurring, as many pictures will depict a maria statue (which we don't want blurred) ([4f75c81](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4f75c81af64cff2951aa90146cc745e577f01103)) +* **wayside_srhine:** add inscription question ([290e737](https://source.mapcomplete.org/MapComplete/MapComplete/commit/290e737e0b330b3732b8282b158d8c17dcb9b8a5)) +* winter_service theme, split off all_streets from street_lighting ([748eccb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/748eccba5903c55c17e5995b747065a3d6835036)) +* **winter_service:** add colour to serviced_streets, also show winter_service=limited ([d2ed839](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d2ed83972fe4f19572729e0169594b88f691bcb8)) -### [0.50.5](https://github.com/pietervdvn/mapcomplete/compare/v0.50.4...v0.50.5) (2025-03-17) +### [0.50.5](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.50.4...v0.50.5) (2025-03-17) ### Bug Fixes -* fix postfixdistinguished-charge input ([70ad243](https://github.com/pietervdvn/mapcomplete/commits/70ad2431d0aa0ad25772cd5a72ec0e6ecf16a3e9)) -* merge translations ([c83eaf9](https://github.com/pietervdvn/mapcomplete/commits/c83eaf9b1618ceac668782223e45c16b64f9a937)) -* tests ([e24b465](https://github.com/pietervdvn/mapcomplete/commits/e24b465783fc933f908b3d01290dd5166abff746)) -* tests ([874f92d](https://github.com/pietervdvn/mapcomplete/commits/874f92d70fc54285e42be69d9350b3b943029fc3)) +* fix postfixdistinguished-charge input ([70ad243](https://source.mapcomplete.org/MapComplete/MapComplete/commit/70ad2431d0aa0ad25772cd5a72ec0e6ecf16a3e9)) +* merge translations ([c83eaf9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c83eaf9b1618ceac668782223e45c16b64f9a937)) +* tests ([e24b465](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e24b465783fc933f908b3d01290dd5166abff746)) +* tests ([874f92d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/874f92d70fc54285e42be69d9350b3b943029fc3)) ### Theme improvements -* **entrance:** add question about reference numbers ([1933b8a](https://github.com/pietervdvn/mapcomplete/commits/1933b8a7be28d78bddb83c13619766338c85afcf)) -* **toilets:** add condition to supervision question: only ask if a public toilet ([1dd7856](https://github.com/pietervdvn/mapcomplete/commits/1dd78563efe0d4d8513f621884e8d42fbaa18513)) -* **toilets:** add supervision, hand_drying questions ([40c6a58](https://github.com/pietervdvn/mapcomplete/commits/40c6a582c76baacf007fa6a7675b1564c4e31f46)) -* **wayside_shrine:** add level, do not count 'artwork' ([ac19702](https://github.com/pietervdvn/mapcomplete/commits/ac19702189c36df50f20f7063387ac506b3dbbf9)) +* **entrance:** add question about reference numbers ([1933b8a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1933b8a7be28d78bddb83c13619766338c85afcf)) +* **toilets:** add condition to supervision question: only ask if a public toilet ([1dd7856](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1dd78563efe0d4d8513f621884e8d42fbaa18513)) +* **toilets:** add supervision, hand_drying questions ([40c6a58](https://source.mapcomplete.org/MapComplete/MapComplete/commit/40c6a582c76baacf007fa6a7675b1564c4e31f46)) +* **wayside_shrine:** add level, do not count 'artwork' ([ac19702](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ac19702189c36df50f20f7063387ac506b3dbbf9)) -### [0.50.4](https://github.com/pietervdvn/mapcomplete/compare/v0.50.3...v0.50.4) (2025-03-13) +### [0.50.4](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.50.3...v0.50.4) (2025-03-13) ### Bug Fixes -* attempts to stabilize ([ae84207](https://github.com/pietervdvn/mapcomplete/commits/ae8420755571a7b65210dd020bc457c28356f93c)) -* fix [#2343](https://github.com/pietervdvn/MapComplete/issues/2343), properly fix "postfixDistinguished", also when marking as unknown ([2286ec9](https://github.com/pietervdvn/mapcomplete/commits/2286ec964f4834651ceeef0e3067faacc5b5837f)) -* fix partially [#2343](https://github.com/pietervdvn/MapComplete/issues/2343) ([c68bce2](https://github.com/pietervdvn/mapcomplete/commits/c68bce2421977e5fcb76181e38fbeb8f4f65c7f7)) -* unit rewriting metatagger now only uses units as defined in the layer itself ([0cf3d07](https://github.com/pietervdvn/mapcomplete/commits/0cf3d07100bd0e20d6bd5b9a2933e29472d540d0)) +* attempts to stabilize ([ae84207](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ae8420755571a7b65210dd020bc457c28356f93c)) +* fix [#2343](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2343), properly fix "postfixDistinguished", also when marking as unknown ([2286ec9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2286ec964f4834651ceeef0e3067faacc5b5837f)) +* fix partially [#2343](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2343) ([c68bce2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c68bce2421977e5fcb76181e38fbeb8f4f65c7f7)) +* unit rewriting metatagger now only uses units as defined in the layer itself ([0cf3d07](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0cf3d07100bd0e20d6bd5b9a2933e29472d540d0)) ### Theme improvements -* **onwheels:** move building magic back to onwheels theme, decrease minzoom for entrances ([98e8adf](https://github.com/pietervdvn/mapcomplete/commits/98e8adf41b3e296dcdf26ac9c6df21c1f5259f46)) -* **wayside_shrine,artwork:** add artwork as adjacent concept to shrines ([266e91e](https://github.com/pietervdvn/mapcomplete/commits/266e91e45db85d27d5271267a1db2175e2588c1d)) +* **onwheels:** move building magic back to onwheels theme, decrease minzoom for entrances ([98e8adf](https://source.mapcomplete.org/MapComplete/MapComplete/commit/98e8adf41b3e296dcdf26ac9c6df21c1f5259f46)) +* **wayside_shrine,artwork:** add artwork as adjacent concept to shrines ([266e91e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/266e91e45db85d27d5271267a1db2175e2588c1d)) * **wayside_shrine:** add preset to snap to a - wall ([e8951e2](https://github.com/pietervdvn/mapcomplete/commits/e8951e2b80ff2e4a9818452bc0c0f03f058e7cf2)) -* **wayside_shrines:** integrate wayside shrines ([1f7b156](https://github.com/pietervdvn/mapcomplete/commits/1f7b156a2c18200ece3c3ec9aa3d86f814d2590b)) -* **wayside_shrines:** small language fixes ([aaf46cd](https://github.com/pietervdvn/mapcomplete/commits/aaf46cd7b01a9f11720d5e47ac6ffcde15b29add)) + wall ([e8951e2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e8951e2b80ff2e4a9818452bc0c0f03f058e7cf2)) +* **wayside_shrines:** integrate wayside shrines ([1f7b156](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1f7b156a2c18200ece3c3ec9aa3d86f814d2590b)) +* **wayside_shrines:** small language fixes ([aaf46cd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/aaf46cd7b01a9f11720d5e47ac6ffcde15b29add)) -### [0.50.3](https://github.com/pietervdvn/mapcomplete/compare/v0.50.2...v0.50.3) (2025-03-07) +### [0.50.3](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.50.2...v0.50.3) (2025-03-07) ### Bug Fixes -* **reviews:** correctly handle fallbackname due to proper caching, add correct ratings-bar to toilets ([d152699](https://github.com/pietervdvn/mapcomplete/commits/d1526991ebd6e13ceb3f05b8f31ae8bb8b7827d2)) -* snapping now also works if the building it snaps to is a multipolygon/relation ([fc940c8](https://github.com/pietervdvn/mapcomplete/commits/fc940c8a7e9627c5c995acccbb8095f634ac6653)) +* **reviews:** correctly handle fallbackname due to proper caching, add correct ratings-bar to toilets ([d152699](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d1526991ebd6e13ceb3f05b8f31ae8bb8b7827d2)) +* snapping now also works if the building it snaps to is a multipolygon/relation ([fc940c8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fc940c8a7e9627c5c995acccbb8095f634ac6653)) ### Theme improvements -* fix ratings in toilet ([c3598c7](https://github.com/pietervdvn/mapcomplete/commits/c3598c7abf9af47d0a88a4a08b11bcc8e8cec65c)) +* fix ratings in toilet ([c3598c7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c3598c7abf9af47d0a88a4a08b11bcc8e8cec65c)) -### [0.50.2](https://github.com/pietervdvn/mapcomplete/compare/v0.50.1...v0.50.2) (2025-03-06) +### [0.50.2](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.50.1...v0.50.2) (2025-03-06) ### Bug Fixes -* add extra exif-tag ([09b6863](https://github.com/pietervdvn/mapcomplete/commits/09b68633d9f83989e90244d69fab574d5a1b45ce)) -* add support for 'alsoShowIf' in multiAnswers, fix https://github.com/pietervdvn/MapComplete/issues/2293 ([cddf319](https://github.com/pietervdvn/mapcomplete/commits/cddf319c9ebe39a16b4345de252aa2a9358a0bae)) -* only ask tactile paving color if present ([0828cef](https://github.com/pietervdvn/mapcomplete/commits/0828cefc6e41cc4488c6ad748abf8224f057a580)) -* statistics link ([89aa7d6](https://github.com/pietervdvn/mapcomplete/commits/89aa7d67343d10da8f3f6a7cd4add805d178b9f8)) -* **UI:** restore 'badge'-class in CSS ([a387d5d](https://github.com/pietervdvn/mapcomplete/commits/a387d5d77b722ac6412f542caf2b183e7c09cdef)) -* wikipedia icon links now uses the "link"-special rendering which properly escapes single quotes, fix [#2340](https://github.com/pietervdvn/MapComplete/issues/2340) ([bfd6874](https://github.com/pietervdvn/mapcomplete/commits/bfd68745169e5489e5622fa1b6dc4fe41019f15b)) +* add extra exif-tag ([09b6863](https://source.mapcomplete.org/MapComplete/MapComplete/commit/09b68633d9f83989e90244d69fab574d5a1b45ce)) +* add support for 'alsoShowIf' in multiAnswers, fix hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2293 ([cddf319](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cddf319c9ebe39a16b4345de252aa2a9358a0bae)) +* only ask tactile paving color if present ([0828cef](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0828cefc6e41cc4488c6ad748abf8224f057a580)) +* statistics link ([89aa7d6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/89aa7d67343d10da8f3f6a7cd4add805d178b9f8)) +* **UI:** restore 'badge'-class in CSS ([a387d5d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a387d5d77b722ac6412f542caf2b183e7c09cdef)) +* wikipedia icon links now uses the "link"-special rendering which properly escapes single quotes, fix [#2340](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2340) ([bfd6874](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bfd68745169e5489e5622fa1b6dc4fe41019f15b)) ### Theme improvements -* **education:** add "uniform"-question ([d63e765](https://github.com/pietervdvn/mapcomplete/commits/d63e7657ad780dd72460e856544ae05d9d42d01a)) -* **kerbs:** don't ask for colour of the tactile pavings if there are none ([2fede3a](https://github.com/pietervdvn/mapcomplete/commits/2fede3a631fef4a668abff75d2d197faf420aa10)) -* move width filter to entrance.json ([9a04ae7](https://github.com/pietervdvn/mapcomplete/commits/9a04ae75b5587172d9543027616f27e7423af698)) -* **picnictable:** allow multianswer for material; fix [#814](https://github.com/pietervdvn/MapComplete/issues/814) ([a42e1f8](https://github.com/pietervdvn/mapcomplete/commits/a42e1f816116396339aab6325aca6449a2581f0a)) -* **school:** add invalidValues for conflicting uniform values ([31312c2](https://github.com/pietervdvn/mapcomplete/commits/31312c2dc654f515b7cd676a9c5e2a242a52d0d6)) +* **education:** add "uniform"-question ([d63e765](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d63e7657ad780dd72460e856544ae05d9d42d01a)) +* **kerbs:** don't ask for colour of the tactile pavings if there are none ([2fede3a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2fede3a631fef4a668abff75d2d197faf420aa10)) +* move width filter to entrance.json ([9a04ae7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9a04ae75b5587172d9543027616f27e7423af698)) +* **picnictable:** allow multianswer for material; fix [#814](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/814) ([a42e1f8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a42e1f816116396339aab6325aca6449a2581f0a)) +* **school:** add invalidValues for conflicting uniform values ([31312c2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/31312c2dc654f515b7cd676a9c5e2a242a52d0d6)) -### [0.50.1](https://github.com/pietervdvn/mapcomplete/compare/v0.50.0...v0.50.1) (2025-02-24) +### [0.50.1](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.50.0...v0.50.1) (2025-02-24) -## [0.50.0](https://github.com/pietervdvn/mapcomplete/compare/v0.49.0...v0.50.0) (2025-02-24) +## [0.50.0](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.49.0...v0.50.0) (2025-02-24) ### Bug Fixes -* attempt to fix [#2312](https://github.com/pietervdvn/MapComplete/issues/2312) ([225b079](https://github.com/pietervdvn/mapcomplete/commits/225b07970d7a335085fa28316863a63584be595b)) -* attempt to fix [#2312](https://github.com/pietervdvn/MapComplete/issues/2312) ([a11f2d0](https://github.com/pietervdvn/mapcomplete/commits/a11f2d0cbcd52b2272decadbaa13b15296df74ab)) -* destroy the old core if needed ([44b094e](https://github.com/pietervdvn/mapcomplete/commits/44b094e84ba9b3bd0375441ead54a6230de71b42)) -* destroy the old core if needed ([1406fd5](https://github.com/pietervdvn/mapcomplete/commits/1406fd5f25daadaa85dd18997b79e462b21bbe96)) -* small fixes and crashes ([d17d07e](https://github.com/pietervdvn/mapcomplete/commits/d17d07ec52ce1d0907e5e0e3cfc7ba101111f2a1)) -* **UI:** restore 'badge'-class in CSS ([7ce2c4d](https://github.com/pietervdvn/mapcomplete/commits/7ce2c4d730faba642df807e924068220b5c08a08)) +* attempt to fix [#2312](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2312) ([225b079](https://source.mapcomplete.org/MapComplete/MapComplete/commit/225b07970d7a335085fa28316863a63584be595b)) +* attempt to fix [#2312](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2312) ([a11f2d0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a11f2d0cbcd52b2272decadbaa13b15296df74ab)) +* destroy the old core if needed ([44b094e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/44b094e84ba9b3bd0375441ead54a6230de71b42)) +* destroy the old core if needed ([1406fd5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1406fd5f25daadaa85dd18997b79e462b21bbe96)) +* small fixes and crashes ([d17d07e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d17d07ec52ce1d0907e5e0e3cfc7ba101111f2a1)) +* **UI:** restore 'badge'-class in CSS ([7ce2c4d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7ce2c4d730faba642df807e924068220b5c08a08)) ### Theme improvements -* **aed:** add iconBadges for opening hours and wheelchair access ([6a1e816](https://github.com/pietervdvn/mapcomplete/commits/6a1e816b2e387fdaf3d3cb9c472b89bc88eb57c5)) -* **aed:** add more filters ([4f0b1c1](https://github.com/pietervdvn/mapcomplete/commits/4f0b1c198e57b657faffeb0f7d3aa343869e17e2)) -* **aed:** change marker size and colour based on access and presence of opening hours ([5138610](https://github.com/pietervdvn/mapcomplete/commits/51386102841b7d0b4b5b4d03479872b7e4e749ff)) -* **aed:** correct license information for the defibrillator SVGs ([02e514f](https://github.com/pietervdvn/mapcomplete/commits/02e514f26006d3516ff7a8891f350a9219980be1)) -* **aed:** remove defibrillator=manual ([d3da075](https://github.com/pietervdvn/mapcomplete/commits/d3da075f4e942214c8b8a92c8c90a42dcc05b46d)) -* **aed:** un-differentiate icons, revise badges ([7c2ec46](https://github.com/pietervdvn/mapcomplete/commits/7c2ec46ca176182528749ff3868dc023c62ccedd)) -* **architecture:** add architecture theme ([33ec303](https://github.com/pietervdvn/mapcomplete/commits/33ec30339b9f0c809dfdc41233430ca1b73d8038)) -* **architecture:** add title ([e6112f2](https://github.com/pietervdvn/mapcomplete/commits/e6112f2d2759514a84d6f4e2042c400a9caa17b8)) -* **cyclofix:** don't handle bicycle repair stations in shops, even if they have service:bicycle-tags, fix https://source.mapcomplete.org/MapComplete/MapComplete/issues/2318 ([083d588](https://github.com/pietervdvn/mapcomplete/commits/083d588361766d3ac9f77e408df725a78b3f9b4f)) +* **aed:** add iconBadges for opening hours and wheelchair access ([6a1e816](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6a1e816b2e387fdaf3d3cb9c472b89bc88eb57c5)) +* **aed:** add more filters ([4f0b1c1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4f0b1c198e57b657faffeb0f7d3aa343869e17e2)) +* **aed:** change marker size and colour based on access and presence of opening hours ([5138610](https://source.mapcomplete.org/MapComplete/MapComplete/commit/51386102841b7d0b4b5b4d03479872b7e4e749ff)) +* **aed:** correct license information for the defibrillator SVGs ([02e514f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/02e514f26006d3516ff7a8891f350a9219980be1)) +* **aed:** remove defibrillator=manual ([d3da075](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d3da075f4e942214c8b8a92c8c90a42dcc05b46d)) +* **aed:** un-differentiate icons, revise badges ([7c2ec46](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7c2ec46ca176182528749ff3868dc023c62ccedd)) +* **architecture:** add architecture theme ([33ec303](https://source.mapcomplete.org/MapComplete/MapComplete/commit/33ec30339b9f0c809dfdc41233430ca1b73d8038)) +* **architecture:** add title ([e6112f2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e6112f2d2759514a84d6f4e2042c400a9caa17b8)) +* **cyclofix:** don't handle bicycle repair stations in shops, even if they have service:bicycle-tags, fix https://source.mapcomplete.org/MapComplete/MapComplete/issues/2318 ([083d588](https://source.mapcomplete.org/MapComplete/MapComplete/commit/083d588361766d3ac9f77e408df725a78b3f9b4f)) -## [0.49.0](https://github.com/pietervdvn/mapcomplete/compare/v0.48.8...v0.49.0) (2025-02-13) +## [0.49.0](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.48.8...v0.49.0) (2025-02-13) -### [0.48.8](https://github.com/pietervdvn/mapcomplete/compare/v0.48.7...v0.48.8) (2025-02-13) +### [0.48.8](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.48.7...v0.48.8) (2025-02-13) ### Bug Fixes -* translations ([252a2d8](https://github.com/pietervdvn/mapcomplete/commits/252a2d8398e89f13ebc8785758e8212bb42c5e44)) -* typo in theme ([6bf193f](https://github.com/pietervdvn/mapcomplete/commits/6bf193f86f61500db70cc0dbf499afd40966efa2)) +* translations ([252a2d8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/252a2d8398e89f13ebc8785758e8212bb42c5e44)) +* typo in theme ([6bf193f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6bf193f86f61500db70cc0dbf499afd40966efa2)) ### Theme improvements -* **maxspeed:** remove unneeded 'widenFactor', fix typo ([151fad5](https://github.com/pietervdvn/mapcomplete/commits/151fad57e1848ca1b633440693c73cf7ca2fdd8f)) +* **maxspeed:** remove unneeded 'widenFactor', fix typo ([151fad5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/151fad57e1848ca1b633440693c73cf7ca2fdd8f)) -### [0.48.7](https://github.com/pietervdvn/mapcomplete/compare/v0.48.6...v0.48.7) (2025-02-10) +### [0.48.7](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.48.6...v0.48.7) (2025-02-10) ### Bug Fixes -* attempt to fix build ([e61149b](https://github.com/pietervdvn/mapcomplete/commits/e61149b49fdd41a0d9572751d12674c32093ad16)) -* attempt to fix daily data maintenance ([191391e](https://github.com/pietervdvn/mapcomplete/commits/191391e1a7a83e1ec4de588e435dfd18fab68f83)) -* clean up minzoomVisible in some themes (gh[#2279](https://github.com/pietervdvn/MapComplete/issues/2279)) ([8f318b3](https://github.com/pietervdvn/mapcomplete/commits/8f318b3a1969d261bf45322eb24e3a22f55b029b)) -* deduplicate .gitignore and reorder ([b3207b8](https://github.com/pietervdvn/mapcomplete/commits/b3207b82cbde357dd7239fd6a500b593c8459a92)) -* don't use deprecated bbox format anymore ([a59e4ab](https://github.com/pietervdvn/mapcomplete/commits/a59e4ab2ab5083799534b928575fe91f18d5d4e9)) -* fix android polyfill loading ([a76617c](https://github.com/pietervdvn/mapcomplete/commits/a76617cc0ca47c3b417e7a2b20ed831cbd2a6d8c)) -* fix broken index page for anonymous users ([6260bc2](https://github.com/pietervdvn/mapcomplete/commits/6260bc2897d3ddd77ea6194bb530a9bffabbe76b)) -* fix build ([eeb5a43](https://github.com/pietervdvn/mapcomplete/commits/eeb5a433291f9a2d1d48425a93e7d19ad60fb4b9)) -* fix classes argument ([f6ed163](https://github.com/pietervdvn/mapcomplete/commits/f6ed16355401f20f0782fac9467c291bb4985cea)) -* fix https://github.com/pietervdvn/MapComplete/issues/2331 ([4e73d9b](https://github.com/pietervdvn/mapcomplete/commits/4e73d9b5f9221a2481980965d0fb4d97b03acfa3)) -* fix https://source.mapcomplete.org/MapComplete/MapComplete/issues/2307 ([52d4ade](https://github.com/pietervdvn/mapcomplete/commits/52d4adee84b23464c29064616410230c48fbb5e3)) -* fix inspector ([c367f8f](https://github.com/pietervdvn/mapcomplete/commits/c367f8f190765b73a95168c7651df87fe6230ac9)) -* fix inspector ([071d3a0](https://github.com/pietervdvn/mapcomplete/commits/071d3a0f89beb2efbd93da98d7e5590c975c416f)) -* fix link in attributed images, as reported by Luna ([aead4c4](https://github.com/pietervdvn/mapcomplete/commits/aead4c480990f4928c9ff5ffc02ed8c5c7a6af96)) -* fix missing param ([6fa4323](https://github.com/pietervdvn/mapcomplete/commits/6fa4323495978324f05a6e4a7f8fa93b42729de8)) -* fix some fallout from updating turf to 7.2.0, make 'bbox'-attribute in line with the actual spec ([1286932](https://github.com/pietervdvn/mapcomplete/commits/12869321fda64d5eb60de7862a765659d8b3d935)) -* fix special visualisations ([289ff9c](https://github.com/pietervdvn/mapcomplete/commits/289ff9cd04346f07567e2a893b037773f18cf1ed)) -* index page ([42c634a](https://github.com/pietervdvn/mapcomplete/commits/42c634a8b72e9a134043bc71bbd1857a17b9672d)) -* make popups dismissable again ([7dc0483](https://github.com/pietervdvn/mapcomplete/commits/7dc0483805181101777921521d1e3927a20289eb)) -* merge weblate ([ea91e28](https://github.com/pietervdvn/mapcomplete/commits/ea91e28bc1e48dabd8ddd253459e511f7100f862)) -* NSI now explicitly has extensions ([a052797](https://github.com/pietervdvn/mapcomplete/commits/a052797074705e5bbbfe1f783ac157aecaaf5fa5)) -* order of commands in npm run init ([231aea8](https://github.com/pietervdvn/mapcomplete/commits/231aea878df509330a7f6c9279132ffa7a15e9a1)) -* remove checked-in file that is covered by .gitignore ([fc79a8a](https://github.com/pietervdvn/mapcomplete/commits/fc79a8a9c506cce0d8f9c7a5a329d9005d6d4e32)) -* remove obsolete "SetClass"-calls which don't work anyway ([f476e61](https://github.com/pietervdvn/mapcomplete/commits/f476e61a8f13976eed5e850d2d34045e1aa237f4)) -* revert some dependencies to a lower number to fix the build, update turf to 7.2.0 ([c83b7c1](https://github.com/pietervdvn/mapcomplete/commits/c83b7c1d953b085abea1e2d580287c6982a815d9)) -* revive missing 'login' button ([d9c8785](https://github.com/pietervdvn/mapcomplete/commits/d9c8785d9b4ac437aa4442cc259d752478772c5d)) -* studio works again ([014282d](https://github.com/pietervdvn/mapcomplete/commits/014282db94939f2faba3f89492e7a6b6f10354bc)) -* tests ([a1730a3](https://github.com/pietervdvn/mapcomplete/commits/a1730a3ad71e3992d287c74cfba32995fafb81a2)) -* various small fixes ([648f00f](https://github.com/pietervdvn/mapcomplete/commits/648f00f9c927776bf928c6871f38acf464d2e93c)) +* attempt to fix build ([e61149b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e61149b49fdd41a0d9572751d12674c32093ad16)) +* attempt to fix daily data maintenance ([191391e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/191391e1a7a83e1ec4de588e435dfd18fab68f83)) +* clean up minzoomVisible in some themes (gh[#2279](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2279)) ([8f318b3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8f318b3a1969d261bf45322eb24e3a22f55b029b)) +* deduplicate .gitignore and reorder ([b3207b8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b3207b82cbde357dd7239fd6a500b593c8459a92)) +* don't use deprecated bbox format anymore ([a59e4ab](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a59e4ab2ab5083799534b928575fe91f18d5d4e9)) +* fix android polyfill loading ([a76617c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a76617cc0ca47c3b417e7a2b20ed831cbd2a6d8c)) +* fix broken index page for anonymous users ([6260bc2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6260bc2897d3ddd77ea6194bb530a9bffabbe76b)) +* fix build ([eeb5a43](https://source.mapcomplete.org/MapComplete/MapComplete/commit/eeb5a433291f9a2d1d48425a93e7d19ad60fb4b9)) +* fix classes argument ([f6ed163](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f6ed16355401f20f0782fac9467c291bb4985cea)) +* fix hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2331 ([4e73d9b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4e73d9b5f9221a2481980965d0fb4d97b03acfa3)) +* fix https://source.mapcomplete.org/MapComplete/MapComplete/issues/2307 ([52d4ade](https://source.mapcomplete.org/MapComplete/MapComplete/commit/52d4adee84b23464c29064616410230c48fbb5e3)) +* fix inspector ([c367f8f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c367f8f190765b73a95168c7651df87fe6230ac9)) +* fix inspector ([071d3a0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/071d3a0f89beb2efbd93da98d7e5590c975c416f)) +* fix link in attributed images, as reported by Luna ([aead4c4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/aead4c480990f4928c9ff5ffc02ed8c5c7a6af96)) +* fix missing param ([6fa4323](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6fa4323495978324f05a6e4a7f8fa93b42729de8)) +* fix some fallout from updating turf to 7.2.0, make 'bbox'-attribute in line with the actual spec ([1286932](https://source.mapcomplete.org/MapComplete/MapComplete/commit/12869321fda64d5eb60de7862a765659d8b3d935)) +* fix special visualisations ([289ff9c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/289ff9cd04346f07567e2a893b037773f18cf1ed)) +* index page ([42c634a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/42c634a8b72e9a134043bc71bbd1857a17b9672d)) +* make popups dismissable again ([7dc0483](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7dc0483805181101777921521d1e3927a20289eb)) +* merge weblate ([ea91e28](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ea91e28bc1e48dabd8ddd253459e511f7100f862)) +* NSI now explicitly has extensions ([a052797](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a052797074705e5bbbfe1f783ac157aecaaf5fa5)) +* order of commands in npm run init ([231aea8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/231aea878df509330a7f6c9279132ffa7a15e9a1)) +* remove checked-in file that is covered by .gitignore ([fc79a8a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fc79a8a9c506cce0d8f9c7a5a329d9005d6d4e32)) +* remove obsolete "SetClass"-calls which don't work anyway ([f476e61](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f476e61a8f13976eed5e850d2d34045e1aa237f4)) +* revert some dependencies to a lower number to fix the build, update turf to 7.2.0 ([c83b7c1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c83b7c1d953b085abea1e2d580287c6982a815d9)) +* revive missing 'login' button ([d9c8785](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d9c8785d9b4ac437aa4442cc259d752478772c5d)) +* studio works again ([014282d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/014282db94939f2faba3f89492e7a6b6f10354bc)) +* tests ([a1730a3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a1730a3ad71e3992d287c74cfba32995fafb81a2)) +* various small fixes ([648f00f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/648f00f9c927776bf928c6871f38acf464d2e93c)) ### Theme improvements -* **bicycle_parking:** add more nuance to ([d126808](https://github.com/pietervdvn/mapcomplete/commits/d12680839c6ee52c908b3dc928b8a1ab69c2211b)) -* **cycleways_and_roads:** use 'width' instead of 'width:carriageway', fix [#2318](https://github.com/pietervdvn/MapComplete/issues/2318) ([37c09f1](https://github.com/pietervdvn/mapcomplete/commits/37c09f12bee7df2e67f839947fae88ac1e16032a)) -* **school:** add school:orientation for special needs schools ([7aa0772](https://github.com/pietervdvn/mapcomplete/commits/7aa07724a3d69b36ba12836c3ab11c17b1ac13ec)) -* **school:** show wikipedia box ([b953ce5](https://github.com/pietervdvn/mapcomplete/commits/b953ce545795edd810b57cac31e5237e3669e778)) -* **scouting:** rephrase capacity filter ([6ca055c](https://github.com/pietervdvn/mapcomplete/commits/6ca055cf28564293cf7ae5d703cfee50a5df8502)) -* **shops:** add optometrist service ([6b0dc72](https://github.com/pietervdvn/mapcomplete/commits/6b0dc72ec639644a02252ca55cdfa2fffb76835f)) -* **shops:** change 'optomotetrist'-service into multiple other services ([c8b0751](https://github.com/pietervdvn/mapcomplete/commits/c8b07518ed0a4e8a08e7f792e06184318c097cb3)) -* **shops:** change 'optomotetrist'-service into multiple other services ([db7ae0c](https://github.com/pietervdvn/mapcomplete/commits/db7ae0c6e49231a052ec5f066883491b015cf15e)) +* **bicycle_parking:** add more nuance to ([d126808](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d12680839c6ee52c908b3dc928b8a1ab69c2211b)) +* **cycleways_and_roads:** use 'width' instead of 'width:carriageway', fix [#2318](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2318) ([37c09f1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/37c09f12bee7df2e67f839947fae88ac1e16032a)) +* **school:** add school:orientation for special needs schools ([7aa0772](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7aa07724a3d69b36ba12836c3ab11c17b1ac13ec)) +* **school:** show wikipedia box ([b953ce5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b953ce545795edd810b57cac31e5237e3669e778)) +* **scouting:** rephrase capacity filter ([6ca055c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6ca055cf28564293cf7ae5d703cfee50a5df8502)) +* **shops:** add optometrist service ([6b0dc72](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6b0dc72ec639644a02252ca55cdfa2fffb76835f)) +* **shops:** change 'optomotetrist'-service into multiple other services ([c8b0751](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c8b07518ed0a4e8a08e7f792e06184318c097cb3)) +* **shops:** change 'optomotetrist'-service into multiple other services ([db7ae0c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/db7ae0c6e49231a052ec5f066883491b015cf15e)) -### [0.48.6](https://github.com/pietervdvn/mapcomplete/compare/v0.48.5...v0.48.6) (2025-02-03) +### [0.48.6](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.48.5...v0.48.6) (2025-02-03) ### Bug Fixes -* actually don't show grey loading placeholder for wikidata/wikipedia, add tests ([87ab165](https://github.com/pietervdvn/mapcomplete/commits/87ab165e58472c4c88cf44c45f823706f1969c93)) -* don't check if someone is logged in for a taghint ([2f7e35a](https://github.com/pietervdvn/mapcomplete/commits/2f7e35a16e9896216d3fc4fce5d93d4272dc6219)) -* don't save big objects to the cache, see [#1919](https://github.com/pietervdvn/MapComplete/issues/1919) ([3cc7d05](https://github.com/pietervdvn/mapcomplete/commits/3cc7d05e03809616823cdf4f0143ae230e195638)) -* fix crash in movewizard ([a66c9f7](https://github.com/pietervdvn/mapcomplete/commits/a66c9f7cbe83bd80dfa41910eb8372eb0613bd25)) -* fix typo in campsite.json, translation sync ([a552606](https://github.com/pietervdvn/mapcomplete/commits/a552606c5204c57d3e222cb17b3cf6a246bd9400)) -* fix wikimedia attribution, fix [#2332](https://github.com/pietervdvn/MapComplete/issues/2332) ([6c0d54d](https://github.com/pietervdvn/mapcomplete/commits/6c0d54d7694292f3c7038ba336489d6de5231060)) -* GroupedView.svelte now shows the questions directly, so that non-answered questions show up ([3ca0d42](https://github.com/pietervdvn/mapcomplete/commits/3ca0d42eb6f35e66554f379db7820fb135d8c1d4)) -* whitelist data.Mapcomplete.org ([6444452](https://github.com/pietervdvn/mapcomplete/commits/644445248c19ecd051589b1e46feda65b3749e69)) +* actually don't show grey loading placeholder for wikidata/wikipedia, add tests ([87ab165](https://source.mapcomplete.org/MapComplete/MapComplete/commit/87ab165e58472c4c88cf44c45f823706f1969c93)) +* don't check if someone is logged in for a taghint ([2f7e35a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2f7e35a16e9896216d3fc4fce5d93d4272dc6219)) +* don't save big objects to the cache, see [#1919](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1919) ([3cc7d05](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3cc7d05e03809616823cdf4f0143ae230e195638)) +* fix crash in movewizard ([a66c9f7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a66c9f7cbe83bd80dfa41910eb8372eb0613bd25)) +* fix typo in campsite.json, translation sync ([a552606](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a552606c5204c57d3e222cb17b3cf6a246bd9400)) +* fix wikimedia attribution, fix [#2332](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2332) ([6c0d54d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6c0d54d7694292f3c7038ba336489d6de5231060)) +* GroupedView.svelte now shows the questions directly, so that non-answered questions show up ([3ca0d42](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3ca0d42eb6f35e66554f379db7820fb135d8c1d4)) +* whitelist data.Mapcomplete.org ([6444452](https://source.mapcomplete.org/MapComplete/MapComplete/commit/644445248c19ecd051589b1e46feda65b3749e69)) ### Theme improvements -* **address:** add simple address feature (useable as 'address.address') ([b6a5b96](https://github.com/pietervdvn/mapcomplete/commits/b6a5b963501ce636255bbecf41d020cc6394eaf3)) -* **education:** add minzoom ([57a7d36](https://github.com/pietervdvn/mapcomplete/commits/57a7d36617cdb67fae319ac70386248d440f279b)) -* **education:** move 'kindergarten' into 'school', add 'school:orientation' (only in Belgium), add more differentiated icons ([6d68ca7](https://github.com/pietervdvn/mapcomplete/commits/6d68ca7988bc6db0982ebae35efd90b5c829f435)) -* fix generation of automatic filters with multiAnswer, add test ([2ec369f](https://github.com/pietervdvn/mapcomplete/commits/2ec369f259db20ba8441748d21c17ea575a0c584)) -* **healthcare:** add address info to all layers, fix [#1202](https://github.com/pietervdvn/MapComplete/issues/1202) ([123c50a](https://github.com/pietervdvn/mapcomplete/commits/123c50a5c0f144f4622937be87ba427c87870bbb)) -* **school:** remove `school:for`, replace with school:special_needs ([f26f22a](https://github.com/pietervdvn/mapcomplete/commits/f26f22a95c3fbd6fbe89829c9c448d241dd55225)) -* **school:** small fixes to special need school tagging ([f3aa8e0](https://github.com/pietervdvn/mapcomplete/commits/f3aa8e015b07a6cf7cbc269aa9c07df205dd6ab4)) -* **shops:** fix stupid typos and bugs in healthcare service tagging ([541b8f8](https://github.com/pietervdvn/mapcomplete/commits/541b8f8960fa258223b9ea059301fd02aabb47be)) +* **address:** add simple address feature (useable as 'address.address') ([b6a5b96](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b6a5b963501ce636255bbecf41d020cc6394eaf3)) +* **education:** add minzoom ([57a7d36](https://source.mapcomplete.org/MapComplete/MapComplete/commit/57a7d36617cdb67fae319ac70386248d440f279b)) +* **education:** move 'kindergarten' into 'school', add 'school:orientation' (only in Belgium), add more differentiated icons ([6d68ca7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6d68ca7988bc6db0982ebae35efd90b5c829f435)) +* fix generation of automatic filters with multiAnswer, add test ([2ec369f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2ec369f259db20ba8441748d21c17ea575a0c584)) +* **healthcare:** add address info to all layers, fix [#1202](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1202) ([123c50a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/123c50a5c0f144f4622937be87ba427c87870bbb)) +* **school:** remove `school:for`, replace with school:special_needs ([f26f22a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f26f22a95c3fbd6fbe89829c9c448d241dd55225)) +* **school:** small fixes to special need school tagging ([f3aa8e0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f3aa8e015b07a6cf7cbc269aa9c07df205dd6ab4)) +* **shops:** fix stupid typos and bugs in healthcare service tagging ([541b8f8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/541b8f8960fa258223b9ea059301fd02aabb47be)) -### [0.48.5](https://github.com/pietervdvn/mapcomplete/compare/v0.48.4...v0.48.5) (2025-01-28) +### [0.48.5](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.48.4...v0.48.5) (2025-01-28) ### Bug Fixes -* remove NSI-renderings which actually don't have a logo, fix https://source.mapcomplete.org/MapComplete/MapComplete/issues/2300 ([3e3b4b9](https://github.com/pietervdvn/mapcomplete/commits/3e3b4b9420d91ee2ab44c45ef2106bd7bd256891)) +* remove NSI-renderings which actually don't have a logo, fix https://source.mapcomplete.org/MapComplete/MapComplete/issues/2300 ([3e3b4b9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3e3b4b9420d91ee2ab44c45ef2106bd7bd256891)) -### [0.48.4](https://github.com/pietervdvn/mapcomplete/compare/v0.48.3...v0.48.4) (2025-01-26) +### [0.48.4](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.48.3...v0.48.4) (2025-01-26) -### [0.48.3](https://github.com/pietervdvn/mapcomplete/compare/v0.48.0...v0.48.3) (2025-01-24) +### [0.48.3](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.48.0...v0.48.3) (2025-01-24) ### Bug Fixes -* actually parse theme file ([3f80930](https://github.com/pietervdvn/mapcomplete/commits/3f80930d48df10b403a5f59ce9159d0a7f97d922)) -* also show default layers when loading an official theme via theme.html ([b844a07](https://github.com/pietervdvn/mapcomplete/commits/b844a0700e32d52660bef09bc15d2439cf54e9c2)) -* correct usage of userdetails ([436b99a](https://github.com/pietervdvn/mapcomplete/commits/436b99a53a003f3bc700fdd50be3608146581eb1)) -* don't open login page upon first visit of MapComplete ([0910992](https://github.com/pietervdvn/mapcomplete/commits/09109925bc295130e669ccaec6768957220bd656)) -* fix crash ([a451fac](https://github.com/pietervdvn/mapcomplete/commits/a451fac8f2d6c5dabffccc2bc8411846e02876f6)) -* NSI now explicitly has extensions ([96c3944](https://github.com/pietervdvn/mapcomplete/commits/96c39447163617766e14c5517ff124194ad79a88)) -* restore "_loggedIn" metatag ([18c19e5](https://github.com/pietervdvn/mapcomplete/commits/18c19e55f3ed800110f4c45ee97a53d510bdeb9d)) -* **studio:** add check for incorrect suggestions, fix incorrect suggestion which breaks setting a 'marker' ([143dd70](https://github.com/pietervdvn/mapcomplete/commits/143dd70973d49882ee314d3b09505c1c18c96aa7)) -* tests ([392e96e](https://github.com/pietervdvn/mapcomplete/commits/392e96e4f5d184d8af64beae2f115a7a15c9f25d)) +* actually parse theme file ([3f80930](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3f80930d48df10b403a5f59ce9159d0a7f97d922)) +* also show default layers when loading an official theme via theme.html ([b844a07](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b844a0700e32d52660bef09bc15d2439cf54e9c2)) +* correct usage of userdetails ([436b99a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/436b99a53a003f3bc700fdd50be3608146581eb1)) +* don't open login page upon first visit of MapComplete ([0910992](https://source.mapcomplete.org/MapComplete/MapComplete/commit/09109925bc295130e669ccaec6768957220bd656)) +* fix crash ([a451fac](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a451fac8f2d6c5dabffccc2bc8411846e02876f6)) +* NSI now explicitly has extensions ([96c3944](https://source.mapcomplete.org/MapComplete/MapComplete/commit/96c39447163617766e14c5517ff124194ad79a88)) +* restore "_loggedIn" metatag ([18c19e5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/18c19e55f3ed800110f4c45ee97a53d510bdeb9d)) +* **studio:** add check for incorrect suggestions, fix incorrect suggestion which breaks setting a 'marker' ([143dd70](https://source.mapcomplete.org/MapComplete/MapComplete/commit/143dd70973d49882ee314d3b09505c1c18c96aa7)) +* tests ([392e96e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/392e96e4f5d184d8af64beae2f115a7a15c9f25d)) ### Theme improvements -* automatically remove filters that are useless because they would filter everything or nothing; fix some logic bugs and add tests ([50ef2ba](https://github.com/pietervdvn/mapcomplete/commits/50ef2ba63674d8e543649b85b0098658ac3f52ed)) -* **pets:** add dog toilets ([860fc99](https://github.com/pietervdvn/mapcomplete/commits/860fc9994bd529ceb1917757b8ac4fea6af5efaa)) -* **pets:** add waste baskets with doggy bag dispensers as layer ([1b3066c](https://github.com/pietervdvn/mapcomplete/commits/1b3066cc28a999b2fd74cc8d7acb0397d6415156)) -* **pets:** bring pets theme more in line (visually and logically) with the other themes ([cdc170b](https://github.com/pietervdvn/mapcomplete/commits/cdc170b128ae293d66f779192b6fda7867689a4e)) -* **shops:** add dog-access question ([244c976](https://github.com/pietervdvn/mapcomplete/commits/244c976af628e4c9fe2c3d98d09e4c40911284d1)) +* automatically remove filters that are useless because they would filter everything or nothing; fix some logic bugs and add tests ([50ef2ba](https://source.mapcomplete.org/MapComplete/MapComplete/commit/50ef2ba63674d8e543649b85b0098658ac3f52ed)) +* **pets:** add dog toilets ([860fc99](https://source.mapcomplete.org/MapComplete/MapComplete/commit/860fc9994bd529ceb1917757b8ac4fea6af5efaa)) +* **pets:** add waste baskets with doggy bag dispensers as layer ([1b3066c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1b3066cc28a999b2fd74cc8d7acb0397d6415156)) +* **pets:** bring pets theme more in line (visually and logically) with the other themes ([cdc170b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cdc170b128ae293d66f779192b6fda7867689a4e)) +* **shops:** add dog-access question ([244c976](https://source.mapcomplete.org/MapComplete/MapComplete/commit/244c976af628e4c9fe2c3d98d09e4c40911284d1)) -### [0.48.2](https://github.com/pietervdvn/mapcomplete/compare/v0.48.0...v0.48.2) (2025-01-19) +### [0.48.2](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.48.0...v0.48.2) (2025-01-19) ### Bug Fixes -* **studio:** add check for incorrect suggestions, fix incorrect suggestion which breaks setting a 'marker' ([89b4f02](https://github.com/pietervdvn/mapcomplete/commits/89b4f02aa630c378f752f4a1c35866c915481e7d)) +* **studio:** add check for incorrect suggestions, fix incorrect suggestion which breaks setting a 'marker' ([89b4f02](https://source.mapcomplete.org/MapComplete/MapComplete/commit/89b4f02aa630c378f752f4a1c35866c915481e7d)) ### Theme improvements -* **pets:** bring pets theme more in line (visually and logically) with the other themes ([cdc170b](https://github.com/pietervdvn/mapcomplete/commits/cdc170b128ae293d66f779192b6fda7867689a4e)) -* **shops:** add dog-access question ([244c976](https://github.com/pietervdvn/mapcomplete/commits/244c976af628e4c9fe2c3d98d09e4c40911284d1)) +* **pets:** bring pets theme more in line (visually and logically) with the other themes ([cdc170b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cdc170b128ae293d66f779192b6fda7867689a4e)) +* **shops:** add dog-access question ([244c976](https://source.mapcomplete.org/MapComplete/MapComplete/commit/244c976af628e4c9fe2c3d98d09e4c40911284d1)) -### [0.48.1](https://github.com/pietervdvn/mapcomplete/compare/v0.48.0...v0.48.1) (2025-01-18) +### [0.48.1](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.48.0...v0.48.1) (2025-01-18) ### Theme improvements -* **pets:** bring pets theme more in line (visually and logically) with the other themes ([9dd252d](https://github.com/pietervdvn/mapcomplete/commits/9dd252dc862b1f6fd7638076fb238f4849d93b5c)) -* **shops:** add dog-access question ([da25464](https://github.com/pietervdvn/mapcomplete/commits/da2546465f939f28db3b602fc3f88e05041176e2)) +* **pets:** bring pets theme more in line (visually and logically) with the other themes ([9dd252d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9dd252dc862b1f6fd7638076fb238f4849d93b5c)) +* **shops:** add dog-access question ([da25464](https://source.mapcomplete.org/MapComplete/MapComplete/commit/da2546465f939f28db3b602fc3f88e05041176e2)) -## [0.48.0](https://github.com/pietervdvn/mapcomplete/compare/v0.47.14...v0.48.0) (2025-01-17) +## [0.48.0](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.14...v0.48.0) (2025-01-17) ### Bug Fixes -* add missing data ([bd228a6](https://github.com/pietervdvn/mapcomplete/commits/bd228a6129e5e95feaf58cfbd438ca8011a69a3f)) -* Add question block ([0c5ab25](https://github.com/pietervdvn/mapcomplete/commits/0c5ab259e845f852e30202a196aacd225a70b928)) -* attempt to fix build ([6bc786d](https://github.com/pietervdvn/mapcomplete/commits/6bc786dc783d2b06af94ca1a034c18d3bf1e41f3)) -* build ([a278234](https://github.com/pietervdvn/mapcomplete/commits/a2782348a7a5a65a62056b566cb8ce5e83cf48c7)) -* don't crash if an initial hash is given from a non-matching layer ([551235a](https://github.com/pietervdvn/mapcomplete/commits/551235a185c2f54f561c82b79c34aaf1f171e217)) -* fix https://source.mapcomplete.org/MapComplete/MapComplete/issues/2293 ([b22015e](https://github.com/pietervdvn/mapcomplete/commits/b22015e2c829187b710f0ceddf3ff3754bb7f3c1)) +* add missing data ([bd228a6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bd228a6129e5e95feaf58cfbd438ca8011a69a3f)) +* Add question block ([0c5ab25](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0c5ab259e845f852e30202a196aacd225a70b928)) +* attempt to fix build ([6bc786d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6bc786dc783d2b06af94ca1a034c18d3bf1e41f3)) +* build ([a278234](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a2782348a7a5a65a62056b566cb8ce5e83cf48c7)) +* don't crash if an initial hash is given from a non-matching layer ([551235a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/551235a185c2f54f561c82b79c34aaf1f171e217)) +* fix https://source.mapcomplete.org/MapComplete/MapComplete/issues/2293 ([b22015e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b22015e2c829187b710f0ceddf3ff3754bb7f3c1)) ### Theme improvements -* **charging_station:** add charge_point layer ([67b3fb3](https://github.com/pietervdvn/mapcomplete/commits/67b3fb3740af55172dba647a5a198902ebd27328)) -* **charging_station:** Remove units for V and A (gh[#2320](https://github.com/pietervdvn/MapComplete/issues/2320)), fix stray A ([5a9c53e](https://github.com/pietervdvn/mapcomplete/commits/5a9c53e4d632dcae58c49c34cd9a5a8e0c0ca293)) -* **drinking_water:** add temperature question ([5617630](https://github.com/pietervdvn/mapcomplete/commits/5617630d690d3a229be13be0104a24316950c0e3)) -* move generated themes into assets, remove known_themes, support pruning of borrowed icons ([ee64d84](https://github.com/pietervdvn/mapcomplete/commits/ee64d84d270f141b0dafb2ac2726899afce5297e)) -* **scouting:** cleanup, use NSI ([1f384e7](https://github.com/pietervdvn/mapcomplete/commits/1f384e754b92bbc3c45b1251222145004b3614b7)) -* **shops:** revert to ID-presets for icons, add "vacant" as shop option ([622049f](https://github.com/pietervdvn/mapcomplete/commits/622049f21f2a43812ff31709dd91cfbe71e9197d)) -* **toilets:** add ratings ([5276442](https://github.com/pietervdvn/mapcomplete/commits/527644220984593b0379b1a17fa8c2a39936bef4)) -* **waste:** Fix broken translations (fj[#2297](https://github.com/pietervdvn/MapComplete/issues/2297)) ([8c6619a](https://github.com/pietervdvn/mapcomplete/commits/8c6619a1722430ce3e4a93770c1af44cffc34a8e)) +* **charging_station:** add charge_point layer ([67b3fb3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/67b3fb3740af55172dba647a5a198902ebd27328)) +* **charging_station:** Remove units for V and A (gh[#2320](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2320)), fix stray A ([5a9c53e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5a9c53e4d632dcae58c49c34cd9a5a8e0c0ca293)) +* **drinking_water:** add temperature question ([5617630](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5617630d690d3a229be13be0104a24316950c0e3)) +* move generated themes into assets, remove known_themes, support pruning of borrowed icons ([ee64d84](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ee64d84d270f141b0dafb2ac2726899afce5297e)) +* **scouting:** cleanup, use NSI ([1f384e7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1f384e754b92bbc3c45b1251222145004b3614b7)) +* **shops:** revert to ID-presets for icons, add "vacant" as shop option ([622049f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/622049f21f2a43812ff31709dd91cfbe71e9197d)) +* **toilets:** add ratings ([5276442](https://source.mapcomplete.org/MapComplete/MapComplete/commit/527644220984593b0379b1a17fa8c2a39936bef4)) +* **waste:** Fix broken translations (fj[#2297](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2297)) ([8c6619a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8c6619a1722430ce3e4a93770c1af44cffc34a8e)) -### [0.47.14](https://github.com/pietervdvn/mapcomplete/compare/v0.47.13...v0.47.14) (2025-01-02) +### [0.47.14](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.13...v0.47.14) (2025-01-02) ### Bug Fixes -* Add velopark link ([23ac962](https://github.com/pietervdvn/mapcomplete/commits/23ac96251cbd67372b9ad8d2cbf75773b8e2bb65)) -* clean up minzoomVisible in some themes (gh[#2279](https://github.com/pietervdvn/MapComplete/issues/2279)) ([2a6e118](https://github.com/pietervdvn/mapcomplete/commits/2a6e118b5ba91ed4e3dfd9737cbf3ab96f937cff)) -* deduplicate .gitignore and reorder ([9d6036b](https://github.com/pietervdvn/mapcomplete/commits/9d6036be8797df4c92b2f0a02fcb349e1877f819)) -* deduplicate .gitignore and reorder ([8c1a73c](https://github.com/pietervdvn/mapcomplete/commits/8c1a73c9d50824b668dd0a31b435bbed2b15ffc1)) -* fix classes argument ([46ac716](https://github.com/pietervdvn/mapcomplete/commits/46ac71639596831926224c05d3f507d99321a5e9)) -* fix inspector ([e0931dc](https://github.com/pietervdvn/mapcomplete/commits/e0931dcebadb1d42b282131c78c9a87cbc486af1)) -* fix inspector ([4830527](https://github.com/pietervdvn/mapcomplete/commits/48305273e52ac85667b85b69ac2f6d13b0de8d19)) -* fix special visualisations ([9c686fe](https://github.com/pietervdvn/mapcomplete/commits/9c686fed89fb3ee8a3de21706aee37fa17ac3205)) -* imagepreview: improve typing; fix comparison tool ([2de8b54](https://github.com/pietervdvn/mapcomplete/commits/2de8b544570f7c983d67d51684ab9b31ddabe44d)) -* imagepreview: improve typing; fix comparison tool ([6cb1687](https://github.com/pietervdvn/mapcomplete/commits/6cb16877e8e27a70c1e1c327d965be1e0ab45788)) -* order of commands in npm run init ([33efe4f](https://github.com/pietervdvn/mapcomplete/commits/33efe4f2c25eda7dc179e572313e02b72de0e96a)) -* order of commands in npm run init ([3759134](https://github.com/pietervdvn/mapcomplete/commits/375913492cf6da22389d27a2458e817fa5c19d37)) -* remove checked-in file that is covered by .gitignore ([bccd744](https://github.com/pietervdvn/mapcomplete/commits/bccd74408659cf2377bbfa98e1d02b8e2b186937)) -* remove checked-in file that is covered by .gitignore ([c88ffda](https://github.com/pietervdvn/mapcomplete/commits/c88ffdae5513e57cdbaf702116714496d6fb3380)) -* remove obsolete "SetClass"-calls which don't work anyway ([4fcdd8b](https://github.com/pietervdvn/mapcomplete/commits/4fcdd8ba5a9cbfb06e160a77f51b59f5ee302914)) -* tests ([5b43316](https://github.com/pietervdvn/mapcomplete/commits/5b43316f10f07383c4bd2f1c5b12373bfd4e52dc)) -* various small fixes ([5284d94](https://github.com/pietervdvn/mapcomplete/commits/5284d94427df74bd8fed85f9d506d147d068cdb3)) +* Add velopark link ([23ac962](https://source.mapcomplete.org/MapComplete/MapComplete/commit/23ac96251cbd67372b9ad8d2cbf75773b8e2bb65)) +* clean up minzoomVisible in some themes (gh[#2279](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2279)) ([2a6e118](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2a6e118b5ba91ed4e3dfd9737cbf3ab96f937cff)) +* deduplicate .gitignore and reorder ([9d6036b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9d6036be8797df4c92b2f0a02fcb349e1877f819)) +* deduplicate .gitignore and reorder ([8c1a73c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8c1a73c9d50824b668dd0a31b435bbed2b15ffc1)) +* fix classes argument ([46ac716](https://source.mapcomplete.org/MapComplete/MapComplete/commit/46ac71639596831926224c05d3f507d99321a5e9)) +* fix inspector ([e0931dc](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e0931dcebadb1d42b282131c78c9a87cbc486af1)) +* fix inspector ([4830527](https://source.mapcomplete.org/MapComplete/MapComplete/commit/48305273e52ac85667b85b69ac2f6d13b0de8d19)) +* fix special visualisations ([9c686fe](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9c686fed89fb3ee8a3de21706aee37fa17ac3205)) +* imagepreview: improve typing; fix comparison tool ([2de8b54](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2de8b544570f7c983d67d51684ab9b31ddabe44d)) +* imagepreview: improve typing; fix comparison tool ([6cb1687](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6cb16877e8e27a70c1e1c327d965be1e0ab45788)) +* order of commands in npm run init ([33efe4f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/33efe4f2c25eda7dc179e572313e02b72de0e96a)) +* order of commands in npm run init ([3759134](https://source.mapcomplete.org/MapComplete/MapComplete/commit/375913492cf6da22389d27a2458e817fa5c19d37)) +* remove checked-in file that is covered by .gitignore ([bccd744](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bccd74408659cf2377bbfa98e1d02b8e2b186937)) +* remove checked-in file that is covered by .gitignore ([c88ffda](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c88ffdae5513e57cdbaf702116714496d6fb3380)) +* remove obsolete "SetClass"-calls which don't work anyway ([4fcdd8b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4fcdd8ba5a9cbfb06e160a77f51b59f5ee302914)) +* tests ([5b43316](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5b43316f10f07383c4bd2f1c5b12373bfd4e52dc)) +* various small fixes ([5284d94](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5284d94427df74bd8fed85f9d506d147d068cdb3)) ### Theme improvements -* **bicycle_parking:** add more nuance to ([87cb88d](https://github.com/pietervdvn/mapcomplete/commits/87cb88d7f35558283d8d27eb5fe5e7942b901d6b)) -* **cycleways_and_roads:** use 'width' instead of 'width:carriageway', fix [#2318](https://github.com/pietervdvn/MapComplete/issues/2318) ([90626c6](https://github.com/pietervdvn/mapcomplete/commits/90626c632aee2be3b6d0a5e31d514b92ceccc4ab)) -* **shops:** add optometrist service ([76831c4](https://github.com/pietervdvn/mapcomplete/commits/76831c4e855b98f233ca85320c069226eb107e4a)) -* **shops:** change 'optomotetrist'-service into multiple other services ([4925e21](https://github.com/pietervdvn/mapcomplete/commits/4925e216b8d273868787c7b057391c10ab474267)) -* **shops:** change 'optomotetrist'-service into multiple other services ([80776f5](https://github.com/pietervdvn/mapcomplete/commits/80776f5943704b36dfc7d5047e4b0aa8be6f552d)) +* **bicycle_parking:** add more nuance to ([87cb88d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/87cb88d7f35558283d8d27eb5fe5e7942b901d6b)) +* **cycleways_and_roads:** use 'width' instead of 'width:carriageway', fix [#2318](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2318) ([90626c6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/90626c632aee2be3b6d0a5e31d514b92ceccc4ab)) +* **shops:** add optometrist service ([76831c4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/76831c4e855b98f233ca85320c069226eb107e4a)) +* **shops:** change 'optomotetrist'-service into multiple other services ([4925e21](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4925e216b8d273868787c7b057391c10ab474267)) +* **shops:** change 'optomotetrist'-service into multiple other services ([80776f5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/80776f5943704b36dfc7d5047e4b0aa8be6f552d)) -### [0.47.13](https://github.com/pietervdvn/mapcomplete/compare/v0.47.12...v0.47.13) (2024-12-17) +### [0.47.13](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.12...v0.47.13) (2024-12-17) ### Bug Fixes -* attributed image doesn't open fullscreen if no ID given ([b272c1c](https://github.com/pietervdvn/mapcomplete/commits/b272c1cda7352a4a78e4f61dbd39fe2f80ae204d)) -* don't report an unneeded error ([79314e1](https://github.com/pietervdvn/mapcomplete/commits/79314e1747ee74544975948ba35fb499c203a061)) -* fix [#2309](https://github.com/pietervdvn/MapComplete/issues/2309) ([83a9184](https://github.com/pietervdvn/mapcomplete/commits/83a918477f24fd86bc2783e266ac59a4c687020f)) -* fix [#2309](https://github.com/pietervdvn/MapComplete/issues/2309) ([fe2a6ca](https://github.com/pietervdvn/mapcomplete/commits/fe2a6ca065b8ace2f466a6cac549f6d84ee35044)) -* fix changelog links ([0471fd7](https://github.com/pietervdvn/mapcomplete/commits/0471fd7779329da051400a62d16162bd21dc0324)) -* fix possible failing upload (error report postmortem) ([22c348a](https://github.com/pietervdvn/mapcomplete/commits/22c348af27677cd97f124dc45f63276d91b40152)) -* linked data vis for velopark does no longer rely on country codes ([c26b9ae](https://github.com/pietervdvn/mapcomplete/commits/c26b9ae7f7fa3de69d499451db14be61e4698721)) -* **linkeddata:** velopark deals with sections, fix image loading ([ef1d2c9](https://github.com/pietervdvn/mapcomplete/commits/ef1d2c9f56fc07f87255c557b05daf5e0451fdc5)) -* remove 'id' attribute ([926ea0b](https://github.com/pietervdvn/mapcomplete/commits/926ea0b6e46f9966d1b1b9a4157c6ca6708b82fa)) -* server config (CORS) ([2c877dd](https://github.com/pietervdvn/mapcomplete/commits/2c877dd52532b24066907a5ae9676e26371e48f0)) -* typing ([565e92a](https://github.com/pietervdvn/mapcomplete/commits/565e92a37dde751e21d7f3e2abc69fa57b27d30f)) +* attributed image doesn't open fullscreen if no ID given ([b272c1c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b272c1cda7352a4a78e4f61dbd39fe2f80ae204d)) +* don't report an unneeded error ([79314e1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/79314e1747ee74544975948ba35fb499c203a061)) +* fix [#2309](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2309) ([83a9184](https://source.mapcomplete.org/MapComplete/MapComplete/commit/83a918477f24fd86bc2783e266ac59a4c687020f)) +* fix [#2309](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2309) ([fe2a6ca](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fe2a6ca065b8ace2f466a6cac549f6d84ee35044)) +* fix changelog links ([0471fd7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0471fd7779329da051400a62d16162bd21dc0324)) +* fix possible failing upload (error report postmortem) ([22c348a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/22c348af27677cd97f124dc45f63276d91b40152)) +* linked data vis for velopark does no longer rely on country codes ([c26b9ae](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c26b9ae7f7fa3de69d499451db14be61e4698721)) +* **linkeddata:** velopark deals with sections, fix image loading ([ef1d2c9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ef1d2c9f56fc07f87255c557b05daf5e0451fdc5)) +* remove 'id' attribute ([926ea0b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/926ea0b6e46f9966d1b1b9a4157c6ca6708b82fa)) +* server config (CORS) ([2c877dd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2c877dd52532b24066907a5ae9676e26371e48f0)) +* typing ([565e92a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/565e92a37dde751e21d7f3e2abc69fa57b27d30f)) -### [0.47.12](https://github.com/pietervdvn/mapcomplete/compare/v0.47.11...v0.47.12) (2024-12-11) +### [0.47.12](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.11...v0.47.12) (2024-12-11) ### Bug Fixes -* add ignored file ([a6d07c5](https://github.com/pietervdvn/mapcomplete/commits/a6d07c50a1d11bbe8a2d78201ad85bb5f2e606e5)) -* attempt to add more EXIF-fields, see [#2296](https://github.com/pietervdvn/MapComplete/issues/2296) ([a87e9e2](https://github.com/pietervdvn/mapcomplete/commits/a87e9e2e98f0a703e3b50570183edfa5ad858719)) -* attempt to get runners working ([a7e729a](https://github.com/pietervdvn/mapcomplete/commits/a7e729a2dee0dd4e961067f62e52662b085ad161)) -* attempt to get runners working ([4a6efe8](https://github.com/pietervdvn/mapcomplete/commits/4a6efe8bfb35215aa7d2763bd8b906052a0341a3)) -* attempt to get runners working ([221c136](https://github.com/pietervdvn/mapcomplete/commits/221c13679a90b688867be4a83f43614cff3a8b93)) -* attempt to get runners working ([142cf9a](https://github.com/pietervdvn/mapcomplete/commits/142cf9a1174fd7006ccfdd141d2b051de0b28348)) -* don't show tags in filter view if not logged in ([a07c792](https://github.com/pietervdvn/mapcomplete/commits/a07c79289b7f6c5d3f14101d15b985c931a42b44)) -* don't show walls-and-buildings if the layer is disabled ([130ede8](https://github.com/pietervdvn/mapcomplete/commits/130ede896cdeea39bf9ca17d4a451d3d861905af)) -* Enable recycling:waste option [#2280](https://github.com/pietervdvn/MapComplete/issues/2280) ([673322d](https://github.com/pietervdvn/mapcomplete/commits/673322d15bab4789b6d62facbc9d96dce7997480)) -* fix [#2304](https://github.com/pietervdvn/MapComplete/issues/2304) ([0a001d3](https://github.com/pietervdvn/mapcomplete/commits/0a001d3c7d337a2838c3f2b7493d4a3b218fe9a5)) -* fix [#2306](https://github.com/pietervdvn/MapComplete/issues/2306) by using a cutoff of 150m ([9ab8d99](https://github.com/pietervdvn/mapcomplete/commits/9ab8d99e56d8ae9653921c21e2f3559d69cc675f)) -* fix [#2306](https://github.com/pietervdvn/MapComplete/issues/2306) by using a cutoff of 150m ([73f0fff](https://github.com/pietervdvn/mapcomplete/commits/73f0ffff5d21703bb1e24ba920d65994e3993100)) -* image upload will now fail less for newly created points ([b91bd78](https://github.com/pietervdvn/mapcomplete/commits/b91bd78762f6eb3bd6555cc0fb3bfb244fe3340b)) -* improve typing and probably fix broken settings (https://source.mapcomplete.org/MapComplete/MapComplete/issues/2281) ([4b121e4](https://github.com/pietervdvn/mapcomplete/commits/4b121e474ce6998f03e9743e4b52e2de1288b71a)) -* linking images is not possible for notes or non-openstreetmap elements ([7f9f7e7](https://github.com/pietervdvn/mapcomplete/commits/7f9f7e753443e779b16a544bc6312214ae26dab4)) -* Missing import ([c4c93bc](https://github.com/pietervdvn/mapcomplete/commits/c4c93bc49bd10b7043e81227ea5d1113e7c75ede)) +* add ignored file ([a6d07c5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a6d07c50a1d11bbe8a2d78201ad85bb5f2e606e5)) +* attempt to add more EXIF-fields, see [#2296](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2296) ([a87e9e2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a87e9e2e98f0a703e3b50570183edfa5ad858719)) +* attempt to get runners working ([a7e729a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a7e729a2dee0dd4e961067f62e52662b085ad161)) +* attempt to get runners working ([4a6efe8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4a6efe8bfb35215aa7d2763bd8b906052a0341a3)) +* attempt to get runners working ([221c136](https://source.mapcomplete.org/MapComplete/MapComplete/commit/221c13679a90b688867be4a83f43614cff3a8b93)) +* attempt to get runners working ([142cf9a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/142cf9a1174fd7006ccfdd141d2b051de0b28348)) +* don't show tags in filter view if not logged in ([a07c792](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a07c79289b7f6c5d3f14101d15b985c931a42b44)) +* don't show walls-and-buildings if the layer is disabled ([130ede8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/130ede896cdeea39bf9ca17d4a451d3d861905af)) +* Enable recycling:waste option [#2280](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2280) ([673322d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/673322d15bab4789b6d62facbc9d96dce7997480)) +* fix [#2304](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2304) ([0a001d3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0a001d3c7d337a2838c3f2b7493d4a3b218fe9a5)) +* fix [#2306](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2306) by using a cutoff of 150m ([9ab8d99](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9ab8d99e56d8ae9653921c21e2f3559d69cc675f)) +* fix [#2306](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2306) by using a cutoff of 150m ([73f0fff](https://source.mapcomplete.org/MapComplete/MapComplete/commit/73f0ffff5d21703bb1e24ba920d65994e3993100)) +* image upload will now fail less for newly created points ([b91bd78](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b91bd78762f6eb3bd6555cc0fb3bfb244fe3340b)) +* improve typing and probably fix broken settings (https://source.mapcomplete.org/MapComplete/MapComplete/issues/2281) ([4b121e4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4b121e474ce6998f03e9743e4b52e2de1288b71a)) +* linking images is not possible for notes or non-openstreetmap elements ([7f9f7e7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7f9f7e753443e779b16a544bc6312214ae26dab4)) +* Missing import ([c4c93bc](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c4c93bc49bd10b7043e81227ea5d1113e7c75ede)) ### Theme improvements -* new [insect hotels theme](https://mapcomplete.org/insects.html) ([07a53e9](https://github.com/pietervdvn/mapcomplete/commits/07a53e9373f7341fc03f32c2815538f72afa6fdb)) -* **blind_osm:** Differentiate escalators more ([#2247](https://github.com/pietervdvn/MapComplete/issues/2247)) ([d19b2de](https://github.com/pietervdvn/mapcomplete/commits/d19b2de1cdb32388229d6ae2eb432cd59b58abad)) -* **climbing:** Add auto belay tags ([9b8235e](https://github.com/pietervdvn/mapcomplete/commits/9b8235e51f3b115bdd3788dc9dfe3e3e99a4a1e4)) -* **climbing:** Add auto belay tags ([026825a](https://github.com/pietervdvn/mapcomplete/commits/026825aa3d37650b8b0121e2a5d39c6d55d42d63)) -* **climbing:** Change conditions for gear rental questions ([a424398](https://github.com/pietervdvn/mapcomplete/commits/a4243986eab087128ab09032319b3f8f699a1f0a)) -* **climbing:** Clarify questions about gear rental ([12f0ec9](https://github.com/pietervdvn/mapcomplete/commits/12f0ec98fbcf540626328e97b5c2cf4e87cbd4be)) -* **climbing:** Recognize leisure=sports_hall ([2a135f9](https://github.com/pietervdvn/mapcomplete/commits/2a135f9eef5164c2b2af9ae46bb9608b764d1654)) -* **cyclofix:** don't count shops in overview ([b615c34](https://github.com/pietervdvn/mapcomplete/commits/b615c3487947eafe2a0ce555fe380101323f66ab)) -* **cyclofix:** show shops which sell second-hand bicycles in bicycle layer, see https://source.mapcomplete.org/MapComplete/MapComplete/issues/2279 ([67aba6d](https://github.com/pietervdvn/mapcomplete/commits/67aba6d034a6673d8c7efedef0d26d88c723d12b)) -* **etymology:** add parks, fix [#2292](https://github.com/pietervdvn/MapComplete/issues/2292) ([ceadd9f](https://github.com/pietervdvn/mapcomplete/commits/ceadd9fdefa9843cf766935368aa01b3c96dbe76)) -* **food:** Add question about drive-through ([9e5ace0](https://github.com/pietervdvn/mapcomplete/commits/9e5ace07d46959dbc3972a5f0948dc989c2b73f6)) -* **food:** Add question about seating ([#1976](https://github.com/pietervdvn/MapComplete/issues/1976)) ([a50d1eb](https://github.com/pietervdvn/mapcomplete/commits/a50d1ebe7de1fcbdf6d90136adf4b66f109f824d)) -* **note:** don't show notes which have _no_ comments; these are probably redacted. Fix [#2299](https://github.com/pietervdvn/MapComplete/issues/2299) ([ec7b166](https://github.com/pietervdvn/mapcomplete/commits/ec7b16638da2475e4cbca097ce08f566e46ba054)) +* new [insect hotels theme](https://mapcomplete.org/insects.html) ([07a53e9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/07a53e9373f7341fc03f32c2815538f72afa6fdb)) +* **blind_osm:** Differentiate escalators more ([#2247](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2247)) ([d19b2de](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d19b2de1cdb32388229d6ae2eb432cd59b58abad)) +* **climbing:** Add auto belay tags ([9b8235e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9b8235e51f3b115bdd3788dc9dfe3e3e99a4a1e4)) +* **climbing:** Add auto belay tags ([026825a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/026825aa3d37650b8b0121e2a5d39c6d55d42d63)) +* **climbing:** Change conditions for gear rental questions ([a424398](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a4243986eab087128ab09032319b3f8f699a1f0a)) +* **climbing:** Clarify questions about gear rental ([12f0ec9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/12f0ec98fbcf540626328e97b5c2cf4e87cbd4be)) +* **climbing:** Recognize leisure=sports_hall ([2a135f9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2a135f9eef5164c2b2af9ae46bb9608b764d1654)) +* **cyclofix:** don't count shops in overview ([b615c34](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b615c3487947eafe2a0ce555fe380101323f66ab)) +* **cyclofix:** show shops which sell second-hand bicycles in bicycle layer, see https://source.mapcomplete.org/MapComplete/MapComplete/issues/2279 ([67aba6d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/67aba6d034a6673d8c7efedef0d26d88c723d12b)) +* **etymology:** add parks, fix [#2292](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2292) ([ceadd9f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ceadd9fdefa9843cf766935368aa01b3c96dbe76)) +* **food:** Add question about drive-through ([9e5ace0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9e5ace07d46959dbc3972a5f0948dc989c2b73f6)) +* **food:** Add question about seating ([#1976](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1976)) ([a50d1eb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a50d1ebe7de1fcbdf6d90136adf4b66f109f824d)) +* **note:** don't show notes which have _no_ comments; these are probably redacted. Fix [#2299](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2299) ([ec7b166](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ec7b16638da2475e4cbca097ce08f566e46ba054)) -### [0.47.11](https://github.com/pietervdvn/mapcomplete/compare/v0.47.10...v0.47.11) (2024-11-28) +### [0.47.11](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.10...v0.47.11) (2024-11-28) ### Features -* allow to disable questions (and to enable them again), fix [#256](https://github.com/pietervdvn/MapComplete/issues/256) ([93ebdd8](https://github.com/pietervdvn/mapcomplete/commits/93ebdd8e1688d2424f0e67d03271d46b4c6640b9)) +* allow to disable questions (and to enable them again), fix [#256](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/256) ([93ebdd8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/93ebdd8e1688d2424f0e67d03271d46b4c6640b9)) ### Bug Fixes -* add prevent-defaults ([afce4cb](https://github.com/pietervdvn/mapcomplete/commits/afce4cb5ba6c77c3e076b5390640eb5ed505cf64)) -* allow to move items more then 50 meter if relocated ([f63f886](https://github.com/pietervdvn/mapcomplete/commits/f63f886ea57d5ca2fca352b455a4d833537422a5)) -* apply refactoring ([140e966](https://github.com/pietervdvn/mapcomplete/commits/140e966de12689b374acc1ec7feaf69065bb1250)) -* attempt to fix image upload on stripped coordinates, see [#2202](https://github.com/pietervdvn/MapComplete/issues/2202) ([a94a7ec](https://github.com/pietervdvn/mapcomplete/commits/a94a7ecd7162b5f49f689d77c5e40219ae7fda05)) -* don't show all items if favourites is shown ([3292307](https://github.com/pietervdvn/mapcomplete/commits/32923072081961b5ef9b899267be99b354265d59)) -* fix [#2254](https://github.com/pietervdvn/MapComplete/issues/2254); an image carousel with a different key would not show up due to caching ([c0b11a8](https://github.com/pietervdvn/mapcomplete/commits/c0b11a81e91db1c4eb130db1a722e20211f4ba5e)) -* fix [#2272](https://github.com/pietervdvn/MapComplete/issues/2272) : correct link ([44355f5](https://github.com/pietervdvn/mapcomplete/commits/44355f566762a234942b678a21b8686341b2087b)) -* fix [#2278](https://github.com/pietervdvn/MapComplete/issues/2278) ([540e2c2](https://github.com/pietervdvn/mapcomplete/commits/540e2c227e5327a501c8ab46fc8c56d0d4bc27bc)) -* fix [#2281](https://github.com/pietervdvn/MapComplete/issues/2281) ([8ef7af6](https://github.com/pietervdvn/mapcomplete/commits/8ef7af613f20f265386ccb3d301c43ff49108cb1)) +* add prevent-defaults ([afce4cb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/afce4cb5ba6c77c3e076b5390640eb5ed505cf64)) +* allow to move items more then 50 meter if relocated ([f63f886](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f63f886ea57d5ca2fca352b455a4d833537422a5)) +* apply refactoring ([140e966](https://source.mapcomplete.org/MapComplete/MapComplete/commit/140e966de12689b374acc1ec7feaf69065bb1250)) +* attempt to fix image upload on stripped coordinates, see [#2202](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2202) ([a94a7ec](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a94a7ecd7162b5f49f689d77c5e40219ae7fda05)) +* don't show all items if favourites is shown ([3292307](https://source.mapcomplete.org/MapComplete/MapComplete/commit/32923072081961b5ef9b899267be99b354265d59)) +* fix [#2254](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2254); an image carousel with a different key would not show up due to caching ([c0b11a8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c0b11a81e91db1c4eb130db1a722e20211f4ba5e)) +* fix [#2272](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2272) : correct link ([44355f5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/44355f566762a234942b678a21b8686341b2087b)) +* fix [#2278](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2278) ([540e2c2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/540e2c227e5327a501c8ab46fc8c56d0d4bc27bc)) +* fix [#2281](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2281) ([8ef7af6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8ef7af613f20f265386ccb3d301c43ff49108cb1)) ### Theme improvements -* **maps:** add tactile maps and tactile models to map theme, fix [#2277](https://github.com/pietervdvn/MapComplete/issues/2277) ([12926e1](https://github.com/pietervdvn/mapcomplete/commits/12926e1e9cc3fef81811b6df011f83e2013d3ad5)) -* **stairs:** fix [#2248](https://github.com/pietervdvn/MapComplete/issues/2248) ([a0c63b2](https://github.com/pietervdvn/mapcomplete/commits/a0c63b273423bef6a3aba1106880015b135e4542)) -* **surveillance:** fix tagging ([208d7ec](https://github.com/pietervdvn/mapcomplete/commits/208d7ecf4e4386ddbd9d58a71a0b6e4fcb26beaa)) +* **maps:** add tactile maps and tactile models to map theme, fix [#2277](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2277) ([12926e1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/12926e1e9cc3fef81811b6df011f83e2013d3ad5)) +* **stairs:** fix [#2248](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2248) ([a0c63b2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a0c63b273423bef6a3aba1106880015b135e4542)) +* **surveillance:** fix tagging ([208d7ec](https://source.mapcomplete.org/MapComplete/MapComplete/commit/208d7ecf4e4386ddbd9d58a71a0b6e4fcb26beaa)) -### [0.47.10](https://github.com/pietervdvn/mapcomplete/compare/v0.47.9...v0.47.10) (2024-11-14) +### [0.47.10](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.9...v0.47.10) (2024-11-14) ### Bug Fixes -* actually download all OSM-data when downloading as geojson or CSV ([05298c2](https://github.com/pietervdvn/mapcomplete/commits/05298c2498bb908860f49f057b7466f4a8feb5ba)) -* don't show `maxstay=30 days` in velopark, this is actually 'unknown' ([d2237cf](https://github.com/pietervdvn/mapcomplete/commits/d2237cf26c1e3af034f0c3b72bd5ffa878ef1c64)) -* fix image upload ([f1106ad](https://github.com/pietervdvn/mapcomplete/commits/f1106ad4a816c9fb84a92974cb7d88e9aae7633b)) +* actually download all OSM-data when downloading as geojson or CSV ([05298c2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/05298c2498bb908860f49f057b7466f4a8feb5ba)) +* don't show `maxstay=30 days` in velopark, this is actually 'unknown' ([d2237cf](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d2237cf26c1e3af034f0c3b72bd5ffa878ef1c64)) +* fix image upload ([f1106ad](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f1106ad4a816c9fb84a92974cb7d88e9aae7633b)) ### Theme improvements -* **surveillance:** add doorbell as option ([88a4bd5](https://github.com/pietervdvn/mapcomplete/commits/88a4bd561952b3d9d0cd8e4ebaab123b739909e8)) +* **surveillance:** add doorbell as option ([88a4bd5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/88a4bd561952b3d9d0cd8e4ebaab123b739909e8)) -### [0.47.9](https://github.com/pietervdvn/mapcomplete/compare/v0.47.8...v0.47.9) (2024-11-07) +### [0.47.9](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.8...v0.47.9) (2024-11-07) ### Features -* **filters:** show tags that are filtered on, deal with multi-answer tags to allow having this option with auto-filters ([69a6ec6](https://github.com/pietervdvn/mapcomplete/commits/69a6ec6b0291bf1a5ec0bdcece605c7cf9f6ea0a)) +* **filters:** show tags that are filtered on, deal with multi-answer tags to allow having this option with auto-filters ([69a6ec6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/69a6ec6b0291bf1a5ec0bdcece605c7cf9f6ea0a)) ### Bug Fixes -* better support for complicated regex tags ([b4817f7](https://github.com/pietervdvn/mapcomplete/commits/b4817f7a7faafffe716619a4d6908c013d58efd6)) -* build ([70612f1](https://github.com/pietervdvn/mapcomplete/commits/70612f1c12ef69209205a29828694c16a9bbc177)) -* build by fixing licenses ([62936b9](https://github.com/pietervdvn/mapcomplete/commits/62936b916b238f7ddf4edb841383d4e2cb1bf3da)) -* deal with dashes in the path ([5127609](https://github.com/pietervdvn/mapcomplete/commits/51276091203d48cecb154271e69be0ce784ed01d)) -* fix build by having correct regextag.asJson() ([0dd96f4](https://github.com/pietervdvn/mapcomplete/commits/0dd96f469b8ed7fd83da4543998b0b473bcc2206)) -* fix fediverse link ([3683780](https://github.com/pietervdvn/mapcomplete/commits/3683780f9d19016ee0972cffb6ee55997a0b60c5)) -* hide items if the layer is disabled and favourites is enabled ([7bdd308](https://github.com/pietervdvn/mapcomplete/commits/7bdd30879b870406cf5ebf3a23edfc3fbeb52a47)) -* increase timeout when opening a new POI ([e8e4ae1](https://github.com/pietervdvn/mapcomplete/commits/e8e4ae1f47514b1b7769e701bdf5a7581c231aa8)) -* show favourites in loaded layers if favourites are enabled ([e65f61d](https://github.com/pietervdvn/mapcomplete/commits/e65f61d2962eba8301afa51e27f0e085e8db2ff7)) -* when using Chronic, check the `aslong` condition before actually running instead of using it to reset the clock. ([10e9416](https://github.com/pietervdvn/mapcomplete/commits/10e9416f8f1abe4cda334242821157bd7c486986)) +* better support for complicated regex tags ([b4817f7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b4817f7a7faafffe716619a4d6908c013d58efd6)) +* build ([70612f1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/70612f1c12ef69209205a29828694c16a9bbc177)) +* build by fixing licenses ([62936b9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/62936b916b238f7ddf4edb841383d4e2cb1bf3da)) +* deal with dashes in the path ([5127609](https://source.mapcomplete.org/MapComplete/MapComplete/commit/51276091203d48cecb154271e69be0ce784ed01d)) +* fix build by having correct regextag.asJson() ([0dd96f4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0dd96f469b8ed7fd83da4543998b0b473bcc2206)) +* fix fediverse link ([3683780](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3683780f9d19016ee0972cffb6ee55997a0b60c5)) +* hide items if the layer is disabled and favourites is enabled ([7bdd308](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7bdd30879b870406cf5ebf3a23edfc3fbeb52a47)) +* increase timeout when opening a new POI ([e8e4ae1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e8e4ae1f47514b1b7769e701bdf5a7581c231aa8)) +* show favourites in loaded layers if favourites are enabled ([e65f61d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e65f61d2962eba8301afa51e27f0e085e8db2ff7)) +* when using Chronic, check the `aslong` condition before actually running instead of using it to reset the clock. ([10e9416](https://source.mapcomplete.org/MapComplete/MapComplete/commit/10e9416f8f1abe4cda334242821157bd7c486986)) ### Theme improvements -* **education:** add images, move contact information up ([d77bb7e](https://github.com/pietervdvn/mapcomplete/commits/d77bb7e22525aef3b64ce3a9aa57a39351ebb441)) -* **memorial:** add filter on type of memorial, remove obsolete 'memorial:type=stolperstein' ([1415fcd](https://github.com/pietervdvn/mapcomplete/commits/1415fcdfecb4be757ea9611b08a1b473e5d50be7)) -* **playgrounds:** don't show counts for small POI, only for playgrounds; make icons smaller ([f3335c9](https://github.com/pietervdvn/mapcomplete/commits/f3335c93711bd224ad3dfa611b95a40039596746)) -* **postboxes:** add contact info, add condition for post partner ([8fcc747](https://github.com/pietervdvn/mapcomplete/commits/8fcc747370fab69e93fac2e00c1886261cb6e08f)) -* **postboxes:** add option to snap to wall and rendering, add "operator" to post boxes ([f7b5db9](https://github.com/pietervdvn/mapcomplete/commits/f7b5db9ec34676f834a3b2d8966649f09b34c1b1)) +* **education:** add images, move contact information up ([d77bb7e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d77bb7e22525aef3b64ce3a9aa57a39351ebb441)) +* **memorial:** add filter on type of memorial, remove obsolete 'memorial:type=stolperstein' ([1415fcd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1415fcdfecb4be757ea9611b08a1b473e5d50be7)) +* **playgrounds:** don't show counts for small POI, only for playgrounds; make icons smaller ([f3335c9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f3335c93711bd224ad3dfa611b95a40039596746)) +* **postboxes:** add contact info, add condition for post partner ([8fcc747](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8fcc747370fab69e93fac2e00c1886261cb6e08f)) +* **postboxes:** add option to snap to wall and rendering, add "operator" to post boxes ([f7b5db9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f7b5db9ec34676f834a3b2d8966649f09b34c1b1)) -### [0.47.8](https://github.com/pietervdvn/mapcomplete/compare/v0.47.7...v0.47.8) (2024-11-01) +### [0.47.8](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.7...v0.47.8) (2024-11-01) ### Bug Fixes -* fix uploading images in the 'notes' theme ([5fd0314](https://github.com/pietervdvn/mapcomplete/commits/5fd03144080aa32fe500333b64575069e93e8b79)) +* fix uploading images in the 'notes' theme ([5fd0314](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5fd03144080aa32fe500333b64575069e93e8b79)) -### [0.47.7](https://github.com/pietervdvn/mapcomplete/compare/v0.47.6...v0.47.7) (2024-10-28) +### [0.47.7](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.6...v0.47.7) (2024-10-28) ### Features -* add script to upload images to panoramax and remove 'imgur'-links ([4233bd7](https://github.com/pietervdvn/mapcomplete/commits/4233bd7618e69e71c00ef027bbb4afc199c29fa9)) -* panoramax uploads in testmode are sent to a different sequence ([834b6b1](https://github.com/pietervdvn/mapcomplete/commits/834b6b18ff985cd1a79e725af915e307525d221e)) -* remove possibility to load a custom theme via the hash, no longer necessary with a theme server ([a016a8f](https://github.com/pietervdvn/mapcomplete/commits/a016a8f771ca3cfb210b5f5f92b136a011d08543)) -* update update script ([d27c38d](https://github.com/pietervdvn/mapcomplete/commits/d27c38d0e48d653675ffa44bc3812e6f8e05f5f8)) -* upload to specified panoramax instance ([3df0f9c](https://github.com/pietervdvn/mapcomplete/commits/3df0f9ca94f8df6314322359edbfb4276c971419)) +* add script to upload images to panoramax and remove 'imgur'-links ([4233bd7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4233bd7618e69e71c00ef027bbb4afc199c29fa9)) +* panoramax uploads in testmode are sent to a different sequence ([834b6b1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/834b6b18ff985cd1a79e725af915e307525d221e)) +* remove possibility to load a custom theme via the hash, no longer necessary with a theme server ([a016a8f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a016a8f771ca3cfb210b5f5f92b136a011d08543)) +* update update script ([d27c38d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d27c38d0e48d653675ffa44bc3812e6f8e05f5f8)) +* upload to specified panoramax instance ([3df0f9c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3df0f9ca94f8df6314322359edbfb4276c971419)) ### Bug Fixes -* add missing import ([9bf013c](https://github.com/pietervdvn/mapcomplete/commits/9bf013cd47468c88bbc9ad90376f9240d0e921c0)) -* attempt to fix build ([571791d](https://github.com/pietervdvn/mapcomplete/commits/571791d06349cc9a409ddede0737f04824186210)) -* attempt to fix panoramax upload, see [#2202](https://github.com/pietervdvn/MapComplete/issues/2202) ([07c1cc0](https://github.com/pietervdvn/mapcomplete/commits/07c1cc0beea816d4f328adaa9ac15d32676380c4)) -* bing layer, see [#2222](https://github.com/pietervdvn/MapComplete/issues/2222) ([51608fb](https://github.com/pietervdvn/mapcomplete/commits/51608fb22348a79b7459a7d3558202edb68ec773)) -* build ([01c8d63](https://github.com/pietervdvn/mapcomplete/commits/01c8d63943c0df74892e2ae02720a469bf3bdb89)) -* don't index 'all_streets' ([c1c2390](https://github.com/pietervdvn/mapcomplete/commits/c1c2390694ab145524dae96cd7dff5a866e4b865)) -* fix [#2212](https://github.com/pietervdvn/MapComplete/issues/2212). ([91f5c8f](https://github.com/pietervdvn/mapcomplete/commits/91f5c8f1669a448c36876e0fda374165f5b60886)) -* fix [#2213](https://github.com/pietervdvn/MapComplete/issues/2213), remove image-license from usersettings.json ([90a34ab](https://github.com/pietervdvn/mapcomplete/commits/90a34ab31f23be942e27ba4cbcd60528c591f7df)) -* fix [#2222](https://github.com/pietervdvn/MapComplete/issues/2222), restore global background layers which were not included in the connect-src ([905f176](https://github.com/pietervdvn/mapcomplete/commits/905f1768f2b994fa83af31224447c96003ab70ce)) -* **panoramax:** stabilize loading images ([8480f94](https://github.com/pietervdvn/mapcomplete/commits/8480f9417c6fa11ab21bc06d15e4a5a5baeaa1f4)) -* see [#2212](https://github.com/pietervdvn/MapComplete/issues/2212): actually save custom themes as visited ([9427083](https://github.com/pietervdvn/mapcomplete/commits/9427083939bb6958b07e6fd48f5356101f06e681)) -* special quicksearch for osmcha ([01cfc5f](https://github.com/pietervdvn/mapcomplete/commits/01cfc5fe4db17362b3e3317f0eba7e0bf954a689)) -* translations ([d10f894](https://github.com/pietervdvn/mapcomplete/commits/d10f89469a7de5e91bc613ae4527054c502b966a)) -* translations ([ab8835b](https://github.com/pietervdvn/mapcomplete/commits/ab8835b279a9c3aecf04a367464cc1bde25ac1d8)) -* Use alternative way to read coordinates from exif data ([6257c24](https://github.com/pietervdvn/mapcomplete/commits/6257c2415a6fff2859168bb671f54e700f0b3152)) -* use popup when in an iframe ([63162c5](https://github.com/pietervdvn/mapcomplete/commits/63162c58e147aaf9c1c4c77d5187b13aaa8cf13a)) +* add missing import ([9bf013c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9bf013cd47468c88bbc9ad90376f9240d0e921c0)) +* attempt to fix build ([571791d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/571791d06349cc9a409ddede0737f04824186210)) +* attempt to fix panoramax upload, see [#2202](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2202) ([07c1cc0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/07c1cc0beea816d4f328adaa9ac15d32676380c4)) +* bing layer, see [#2222](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2222) ([51608fb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/51608fb22348a79b7459a7d3558202edb68ec773)) +* build ([01c8d63](https://source.mapcomplete.org/MapComplete/MapComplete/commit/01c8d63943c0df74892e2ae02720a469bf3bdb89)) +* don't index 'all_streets' ([c1c2390](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c1c2390694ab145524dae96cd7dff5a866e4b865)) +* fix [#2212](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2212). ([91f5c8f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/91f5c8f1669a448c36876e0fda374165f5b60886)) +* fix [#2213](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2213), remove image-license from usersettings.json ([90a34ab](https://source.mapcomplete.org/MapComplete/MapComplete/commit/90a34ab31f23be942e27ba4cbcd60528c591f7df)) +* fix [#2222](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2222), restore global background layers which were not included in the connect-src ([905f176](https://source.mapcomplete.org/MapComplete/MapComplete/commit/905f1768f2b994fa83af31224447c96003ab70ce)) +* **panoramax:** stabilize loading images ([8480f94](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8480f9417c6fa11ab21bc06d15e4a5a5baeaa1f4)) +* see [#2212](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2212): actually save custom themes as visited ([9427083](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9427083939bb6958b07e6fd48f5356101f06e681)) +* special quicksearch for osmcha ([01cfc5f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/01cfc5fe4db17362b3e3317f0eba7e0bf954a689)) +* translations ([d10f894](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d10f89469a7de5e91bc613ae4527054c502b966a)) +* translations ([ab8835b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ab8835b279a9c3aecf04a367464cc1bde25ac1d8)) +* Use alternative way to read coordinates from exif data ([6257c24](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6257c2415a6fff2859168bb671f54e700f0b3152)) +* use popup when in an iframe ([63162c5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/63162c58e147aaf9c1c4c77d5187b13aaa8cf13a)) ### Theme improvements -* **bike_parking:** add lean_and_stick type ([9e1bd7f](https://github.com/pietervdvn/mapcomplete/commits/9e1bd7fa9d9e3b2d5242fbe7b073234b7fa04cbd)) -* **bikeparking:** update text of access=private, sync translation ([4ce5a40](https://github.com/pietervdvn/mapcomplete/commits/4ce5a40eb4b3b3d350873ff2bf9a2a7d9b3a5d15)) -* **cycle_infra:** add minzoom for all layers ([94bc478](https://github.com/pietervdvn/mapcomplete/commits/94bc478b9e5cfdbbb9e062b3950433984bfd752b)) -* **items_with_image:** include 'panoramax' and 'mapillary' as tags for items with image, fix [#2225](https://github.com/pietervdvn/MapComplete/issues/2225) ([899312b](https://github.com/pietervdvn/mapcomplete/commits/899312ba7cb2b9b00fc8c4483ffe57955f08cdf2)) -* **shops:** support `shop=sports` together with 'shop=sport' ([98470ef](https://github.com/pietervdvn/mapcomplete/commits/98470ef8ac1c38cb54cdbae1bd07cbab825be795)) -* **velopark:** hide NMBS-maproulette items ([0a0d0a1](https://github.com/pietervdvn/mapcomplete/commits/0a0d0a15cb546dd390bd2c388fafb43d13bda327)) -* **velopark:** properly hide NMBS-maproulette items with a filter ([4840816](https://github.com/pietervdvn/mapcomplete/commits/4840816b1768cd3c4d43ef01d07c852cd32f1d3e)) +* **bike_parking:** add lean_and_stick type ([9e1bd7f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9e1bd7fa9d9e3b2d5242fbe7b073234b7fa04cbd)) +* **bikeparking:** update text of access=private, sync translation ([4ce5a40](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4ce5a40eb4b3b3d350873ff2bf9a2a7d9b3a5d15)) +* **cycle_infra:** add minzoom for all layers ([94bc478](https://source.mapcomplete.org/MapComplete/MapComplete/commit/94bc478b9e5cfdbbb9e062b3950433984bfd752b)) +* **items_with_image:** include 'panoramax' and 'mapillary' as tags for items with image, fix [#2225](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2225) ([899312b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/899312ba7cb2b9b00fc8c4483ffe57955f08cdf2)) +* **shops:** support `shop=sports` together with 'shop=sport' ([98470ef](https://source.mapcomplete.org/MapComplete/MapComplete/commit/98470ef8ac1c38cb54cdbae1bd07cbab825be795)) +* **velopark:** hide NMBS-maproulette items ([0a0d0a1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0a0d0a15cb546dd390bd2c388fafb43d13bda327)) +* **velopark:** properly hide NMBS-maproulette items with a filter ([4840816](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4840816b1768cd3c4d43ef01d07c852cd32f1d3e)) -### [0.47.6](https://github.com/pietervdvn/mapcomplete/compare/v0.47.5...v0.47.6) (2024-10-15) +### [0.47.6](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.5...v0.47.6) (2024-10-15) ### Features -* remove 'noteImportLayer', they are not used enough for the big performance and maintenance impact they have ([e35df65](https://github.com/pietervdvn/mapcomplete/commits/e35df654d7f2a0ef7c12c0ceef27cb3a1a7a1027)) +* remove 'noteImportLayer', they are not used enough for the big performance and maintenance impact they have ([e35df65](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e35df654d7f2a0ef7c12c0ceef27cb3a1a7a1027)) ### Bug Fixes -* add error reporting when image upload fails, see [#2202](https://github.com/pietervdvn/MapComplete/issues/2202) ([368d785](https://github.com/pietervdvn/mapcomplete/commits/368d7857a055c92109ec6d5155078aabaef230ac)) -* add nvm path ([7d83cb1](https://github.com/pietervdvn/mapcomplete/commits/7d83cb1a7fdaad23d4a1343edb75145f60bf771f)) -* add spaces to opening hours picker for PH ([8a8b2e2](https://github.com/pietervdvn/mapcomplete/commits/8a8b2e20aebe8019af86aca02e6bcc4d90896b4f)) -* attempt to workaround for [#2202](https://github.com/pietervdvn/MapComplete/issues/2202) ([66465fd](https://github.com/pietervdvn/mapcomplete/commits/66465fdc9893fa4c3f0c1f5b8279a51c33a1e407)) -* bug in error reporting ([4794032](https://github.com/pietervdvn/mapcomplete/commits/4794032e49a4b5b2d3fdceac8a2b8a75994e94ea)) -* build: add generated file which is needed for some steps ([016908f](https://github.com/pietervdvn/mapcomplete/commits/016908fb940a65dc863cddca5be8d681b9370c49)) -* explicitly use version number in update script ([977c6ff](https://github.com/pietervdvn/mapcomplete/commits/977c6ff9fb30267f47c39aa55fb0a0f2e6028564)) -* fix [#2207](https://github.com/pietervdvn/MapComplete/issues/2207) ([ca17d3d](https://github.com/pietervdvn/mapcomplete/commits/ca17d3da1b772e4976414b54406816a68ef0e175)) -* fix [#2209](https://github.com/pietervdvn/MapComplete/issues/2209), remove lingering incorrect translations ([fbcbdc5](https://github.com/pietervdvn/mapcomplete/commits/fbcbdc571edd848106885f9148e473c816990a67)) -* fix loading of preferences ([7060f7c](https://github.com/pietervdvn/mapcomplete/commits/7060f7cf6cac807877efb8babc8586eabfc79351)) -* remove truly unrecoverable changes from report logging ([f2b681c](https://github.com/pietervdvn/mapcomplete/commits/f2b681caa59a419c4c217e705ad6d1a7ac271128)) -* reset translations ([6a4166f](https://github.com/pietervdvn/mapcomplete/commits/6a4166febb5ce386beac8bbb06cd7527b90c6a12)) -* set max image size (100 MB) ([cc6ce3c](https://github.com/pietervdvn/mapcomplete/commits/cc6ce3c271475759a7a2062b1ca7e4668ca4a230)) -* some fixes to studio ([c795e74](https://github.com/pietervdvn/mapcomplete/commits/c795e74037ca1aa222fdba6eb2cc4a32a78a8eb7)) -* tests ([c95999b](https://github.com/pietervdvn/mapcomplete/commits/c95999b50b84d294476783573baf21d46318cb16)) +* add error reporting when image upload fails, see [#2202](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2202) ([368d785](https://source.mapcomplete.org/MapComplete/MapComplete/commit/368d7857a055c92109ec6d5155078aabaef230ac)) +* add nvm path ([7d83cb1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7d83cb1a7fdaad23d4a1343edb75145f60bf771f)) +* add spaces to opening hours picker for PH ([8a8b2e2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8a8b2e20aebe8019af86aca02e6bcc4d90896b4f)) +* attempt to workaround for [#2202](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2202) ([66465fd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/66465fdc9893fa4c3f0c1f5b8279a51c33a1e407)) +* bug in error reporting ([4794032](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4794032e49a4b5b2d3fdceac8a2b8a75994e94ea)) +* build: add generated file which is needed for some steps ([016908f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/016908fb940a65dc863cddca5be8d681b9370c49)) +* explicitly use version number in update script ([977c6ff](https://source.mapcomplete.org/MapComplete/MapComplete/commit/977c6ff9fb30267f47c39aa55fb0a0f2e6028564)) +* fix [#2207](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2207) ([ca17d3d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ca17d3da1b772e4976414b54406816a68ef0e175)) +* fix [#2209](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2209), remove lingering incorrect translations ([fbcbdc5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fbcbdc571edd848106885f9148e473c816990a67)) +* fix loading of preferences ([7060f7c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7060f7cf6cac807877efb8babc8586eabfc79351)) +* remove truly unrecoverable changes from report logging ([f2b681c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f2b681caa59a419c4c217e705ad6d1a7ac271128)) +* reset translations ([6a4166f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6a4166febb5ce386beac8bbb06cd7527b90c6a12)) +* set max image size (100 MB) ([cc6ce3c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cc6ce3c271475759a7a2062b1ca7e4668ca4a230)) +* some fixes to studio ([c795e74](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c795e74037ca1aa222fdba6eb2cc4a32a78a8eb7)) +* tests ([c95999b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c95999b50b84d294476783573baf21d46318cb16)) ### Theme improvements -* don't do face blurring for some layers (artwork, memorials, ghost_bikes) ([15176a1](https://github.com/pietervdvn/mapcomplete/commits/15176a16825d52e26a52f92567cf3977382ce213)) -* **food:** fix vegan questions, show vegan/vegetarian badge if `=only`, fix shops layer ([f8ef32f](https://github.com/pietervdvn/mapcomplete/commits/f8ef32f123340cb9db0060cdca7f4622cd55c228)) +* don't do face blurring for some layers (artwork, memorials, ghost_bikes) ([15176a1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/15176a16825d52e26a52f92567cf3977382ce213)) +* **food:** fix vegan questions, show vegan/vegetarian badge if `=only`, fix shops layer ([f8ef32f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f8ef32f123340cb9db0060cdca7f4622cd55c228)) -### [0.47.5](https://github.com/pietervdvn/mapcomplete/compare/v0.47.4...v0.47.5) (2024-10-08) +### [0.47.5](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.4...v0.47.5) (2024-10-08) ### Features -* add DWG-block support ([c28baaa](https://github.com/pietervdvn/mapcomplete/commits/c28baaab62585838a4f6a652b922d170b4cfff02)) -* add panoramax link to 'browse nearby images' ([06363e8](https://github.com/pietervdvn/mapcomplete/commits/06363e808ff16fae528d620e16a0972f9f8b5053)) -* add panoramax to status page ([9e9d5e8](https://github.com/pietervdvn/mapcomplete/commits/9e9d5e80d891e41c77ded60c59e122ef734ed31d)) +* add DWG-block support ([c28baaa](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c28baaab62585838a4f6a652b922d170b4cfff02)) +* add panoramax link to 'browse nearby images' ([06363e8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/06363e808ff16fae528d620e16a0972f9f8b5053)) +* add panoramax to status page ([9e9d5e8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9e9d5e80d891e41c77ded60c59e122ef734ed31d)) ### Bug Fixes -* actually use prefix and postfix ([0461ca1](https://github.com/pietervdvn/mapcomplete/commits/0461ca176de3f1aad222105a1393882264bb8f80)) -* fix [#2197](https://github.com/pietervdvn/MapComplete/issues/2197) ([c2f7b1e](https://github.com/pietervdvn/mapcomplete/commits/c2f7b1e8c11dcc844131da4d368cc114c99e7601)) -* fix download panel ([fb3bf98](https://github.com/pietervdvn/mapcomplete/commits/fb3bf98f1923db4bbba02728d23360a12319a08c)) -* fix filters in statistics.html ([5048da5](https://github.com/pietervdvn/mapcomplete/commits/5048da58e7cb6446716ca143b93e98e946f940b8)) -* mention license of panoramax ([86af270](https://github.com/pietervdvn/mapcomplete/commits/86af270aa0a0bcb49843eb009fccee47a54012cd)) -* should improve 2193 ([15856d7](https://github.com/pietervdvn/mapcomplete/commits/15856d7047e05f29f3e37dc8f9c9eb47ae81d9f7)) -* tests ([ba46736](https://github.com/pietervdvn/mapcomplete/commits/ba46736ed9cf51161c8da99cb85f5d307e90e084)) -* use textContent instead of inntertext, fixes tests ([591e992](https://github.com/pietervdvn/mapcomplete/commits/591e992839592d3037f31e6e0d33f7f7f19d0aa4)) +* actually use prefix and postfix ([0461ca1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0461ca176de3f1aad222105a1393882264bb8f80)) +* fix [#2197](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2197) ([c2f7b1e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c2f7b1e8c11dcc844131da4d368cc114c99e7601)) +* fix download panel ([fb3bf98](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fb3bf98f1923db4bbba02728d23360a12319a08c)) +* fix filters in statistics.html ([5048da5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5048da58e7cb6446716ca143b93e98e946f940b8)) +* mention license of panoramax ([86af270](https://source.mapcomplete.org/MapComplete/MapComplete/commit/86af270aa0a0bcb49843eb009fccee47a54012cd)) +* should improve 2193 ([15856d7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/15856d7047e05f29f3e37dc8f9c9eb47ae81d9f7)) +* tests ([ba46736](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ba46736ed9cf51161c8da99cb85f5d307e90e084)) +* use textContent instead of inntertext, fixes tests ([591e992](https://source.mapcomplete.org/MapComplete/MapComplete/commit/591e992839592d3037f31e6e0d33f7f7f19d0aa4)) ### Theme improvements -* **charging stations:** add keywords in search ([e502c15](https://github.com/pietervdvn/mapcomplete/commits/e502c1519d2f9a021c01ebd7fcfa7ad289a30d01)) -* **fritures:** Add 'diet:vegan=only' and 'diet:vegetarian=only' options to fritures, fix [#2191](https://github.com/pietervdvn/MapComplete/issues/2191) ([17e95ca](https://github.com/pietervdvn/mapcomplete/commits/17e95ca5946782894304cf4d9d811bb4c9dd3bec)) -* **shops:** add labels to icecream, refactor label for shps ([1ade2ed](https://github.com/pietervdvn/mapcomplete/commits/1ade2ed45b1fdd2e4fa6acccc889f939f68c4fa2)) +* **charging stations:** add keywords in search ([e502c15](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e502c1519d2f9a021c01ebd7fcfa7ad289a30d01)) +* **fritures:** Add 'diet:vegan=only' and 'diet:vegetarian=only' options to fritures, fix [#2191](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2191) ([17e95ca](https://source.mapcomplete.org/MapComplete/MapComplete/commit/17e95ca5946782894304cf4d9d811bb4c9dd3bec)) +* **shops:** add labels to icecream, refactor label for shps ([1ade2ed](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1ade2ed45b1fdd2e4fa6acccc889f939f68c4fa2)) -### [0.47.4](https://github.com/pietervdvn/mapcomplete/compare/v0.46.12...v0.47.4) (2024-09-30) +### [0.47.4](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.46.12...v0.47.4) (2024-09-30) ### Features -* **studio:** add possibility to directly write into the theme files ([0be7c64](https://github.com/pietervdvn/mapcomplete/commits/0be7c64ea1dae928ef658b0ef91ad6ad662f0f36)) +* **studio:** add possibility to directly write into the theme files ([0be7c64](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0be7c64ea1dae928ef658b0ef91ad6ad662f0f36)) ### Bug Fixes -* enable summary server again ([d6eca37](https://github.com/pietervdvn/mapcomplete/commits/d6eca3717a7fb3ac8d17d20861870d17a0da44bb)) -* fix [#2183](https://github.com/pietervdvn/MapComplete/issues/2183) by updating wikidata-sdk to latest wikibase-sdk ([021e5f2](https://github.com/pietervdvn/mapcomplete/commits/021e5f2734c46de3d51860f6c717b667dd8d1427)) +* enable summary server again ([d6eca37](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d6eca3717a7fb3ac8d17d20861870d17a0da44bb)) +* fix [#2183](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2183) by updating wikidata-sdk to latest wikibase-sdk ([021e5f2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/021e5f2734c46de3d51860f6c717b667dd8d1427)) ### Theme improvements -* **bicycle_counter:** add images, fix center location ([ea133c5](https://github.com/pietervdvn/mapcomplete/commits/ea133c5effeaad3f5e09e6e2991f0f1f6a12bbc4)) -* **police:** add jail and checkpoint icons ([169ee29](https://github.com/pietervdvn/mapcomplete/commits/169ee2941498e9968dfbf42f65c8504b6bcb7f37)) -* **shops:** make 'shops' only appear on zoomlevel 15 ([c4ae41e](https://github.com/pietervdvn/mapcomplete/commits/c4ae41e0e1fffa925f293f2a65c277979308a694)) -* tighten minzooms ([1aef862](https://github.com/pietervdvn/mapcomplete/commits/1aef862b11dfcb1a359144c70cd7d26db51dd6f2)) +* **bicycle_counter:** add images, fix center location ([ea133c5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ea133c5effeaad3f5e09e6e2991f0f1f6a12bbc4)) +* **police:** add jail and checkpoint icons ([169ee29](https://source.mapcomplete.org/MapComplete/MapComplete/commit/169ee2941498e9968dfbf42f65c8504b6bcb7f37)) +* **shops:** make 'shops' only appear on zoomlevel 15 ([c4ae41e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c4ae41e0e1fffa925f293f2a65c277979308a694)) +* tighten minzooms ([1aef862](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1aef862b11dfcb1a359144c70cd7d26db51dd6f2)) -### [0.47.2](https://github.com/pietervdvn/mapcomplete/compare/v0.47.1...v0.47.2) (2024-09-24) +### [0.47.2](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.1...v0.47.2) (2024-09-24) ### Bug Fixes -* correctly apply previous refactoring ([2a53f99](https://github.com/pietervdvn/mapcomplete/commits/2a53f99dd50695768ff9b625665ca69bf0bec4c1)) -* delete entry from 'localStorage' ([22c8a45](https://github.com/pietervdvn/mapcomplete/commits/22c8a45012be60dad215f8b0d72501133665454e)) -* don't add buildings to database, reevaluate builddb script ([ce87edf](https://github.com/pietervdvn/mapcomplete/commits/ce87edf80009bd65c9f185d9ff68b023c5486adc)) -* fix wrong location in theme ([8b0b24b](https://github.com/pietervdvn/mapcomplete/commits/8b0b24b01eefa5dbe86d97ac9c3baf38fd2fad0d)) -* remove stray word ([a6598fd](https://github.com/pietervdvn/mapcomplete/commits/a6598fd52d588ba7a5a6b05e2df8ff8ae460a37b)) -* use 'isCounted' instead of 'doCount', add check for this ([3a8fc42](https://github.com/pietervdvn/mapcomplete/commits/3a8fc4248b7aa6a9cea8c2529a02a7cc11325cc8)) +* correctly apply previous refactoring ([2a53f99](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2a53f99dd50695768ff9b625665ca69bf0bec4c1)) +* delete entry from 'localStorage' ([22c8a45](https://source.mapcomplete.org/MapComplete/MapComplete/commit/22c8a45012be60dad215f8b0d72501133665454e)) +* don't add buildings to database, reevaluate builddb script ([ce87edf](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ce87edf80009bd65c9f185d9ff68b023c5486adc)) +* fix wrong location in theme ([8b0b24b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8b0b24b01eefa5dbe86d97ac9c3baf38fd2fad0d)) +* remove stray word ([a6598fd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a6598fd52d588ba7a5a6b05e2df8ff8ae460a37b)) +* use 'isCounted' instead of 'doCount', add check for this ([3a8fc42](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3a8fc4248b7aa6a9cea8c2529a02a7cc11325cc8)) -### [0.47.1](https://github.com/pietervdvn/mapcomplete/compare/v0.47.0...v0.47.1) (2024-09-19) +### [0.47.1](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.0...v0.47.1) (2024-09-19) ### Bug Fixes -* actually read preferences ([a5b3342](https://github.com/pietervdvn/mapcomplete/commits/a5b3342415e843d5a33b1d3eb2dce4a95b14932a)) -* use correct overflow ([c668698](https://github.com/pietervdvn/mapcomplete/commits/c668698b1eb16f0d96c5ae0e4e7e79209b6abd95)) +* actually read preferences ([a5b3342](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a5b3342415e843d5a33b1d3eb2dce4a95b14932a)) +* use correct overflow ([c668698](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c668698b1eb16f0d96c5ae0e4e7e79209b6abd95)) ### Theme improvements -* **food:** add search keywords ([53b7597](https://github.com/pietervdvn/mapcomplete/commits/53b75973f6734bcad6d1081299e826d2e00e0551)) -* **sport:** add sport pitches filter on sports, fix [#2159](https://github.com/pietervdvn/MapComplete/issues/2159) ([58cec96](https://github.com/pietervdvn/mapcomplete/commits/58cec96fb50284dca79716ffe43d0a75b4cb6597)) +* **food:** add search keywords ([53b7597](https://source.mapcomplete.org/MapComplete/MapComplete/commit/53b75973f6734bcad6d1081299e826d2e00e0551)) +* **sport:** add sport pitches filter on sports, fix [#2159](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2159) ([58cec96](https://source.mapcomplete.org/MapComplete/MapComplete/commit/58cec96fb50284dca79716ffe43d0a75b4cb6597)) -## [0.47.0](https://github.com/pietervdvn/mapcomplete/compare/v0.46.9...v0.47.0) (2024-09-17) +## [0.47.0](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.46.9...v0.47.0) (2024-09-17) ### Features -* add download as json to 'allTags'-panel (for debugging) ([af2905d](https://github.com/pietervdvn/mapcomplete/commits/af2905dc6d1cbbcfb2d9cd2583369eebd90ced70)) +* add download as json to 'allTags'-panel (for debugging) ([af2905d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/af2905dc6d1cbbcfb2d9cd2583369eebd90ced70)) ### Bug Fixes -* actually search for keywords in theme view ([cdc1e05](https://github.com/pietervdvn/mapcomplete/commits/cdc1e05499ffc41d093503ccd24defa347eea50e)) +* actually search for keywords in theme view ([cdc1e05](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cdc1e05499ffc41d093503ccd24defa347eea50e)) ### Theme improvements -* allow to disable auto filters ([b349293](https://github.com/pietervdvn/mapcomplete/commits/b3492930b8e5090e9a9d3449d6e9abc365fc1780)) -* **healthcare:** add payment options to pharmacy layer ([6c5b619](https://github.com/pietervdvn/mapcomplete/commits/6c5b61924a63e8bb82afd2dc963cc4fe38caa9ad)) -* **shop:** 'open_now' filter is introduced automatically ([ed2bec1](https://github.com/pietervdvn/mapcomplete/commits/ed2bec139cf4e4094973aba2f4734522802898f3)) -* **shop:** don't show trolley bay on low zoom levels ([cdb62df](https://github.com/pietervdvn/mapcomplete/commits/cdb62dfe58f5a6264c17e9d88bb590ea3f984b09)) -* some tweaks for the search feature ([bc52c05](https://github.com/pietervdvn/mapcomplete/commits/bc52c05a9b47ba6dbf8c3f79a131f8281b8c5197)) -* **waste:** add filter for 'recycling centre' ([5da63bf](https://github.com/pietervdvn/mapcomplete/commits/5da63bf83aa7d8b230c8dbc082be3fba33344289)) +* allow to disable auto filters ([b349293](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b3492930b8e5090e9a9d3449d6e9abc365fc1780)) +* **healthcare:** add payment options to pharmacy layer ([6c5b619](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6c5b61924a63e8bb82afd2dc963cc4fe38caa9ad)) +* **shop:** 'open_now' filter is introduced automatically ([ed2bec1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ed2bec139cf4e4094973aba2f4734522802898f3)) +* **shop:** don't show trolley bay on low zoom levels ([cdb62df](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cdb62dfe58f5a6264c17e9d88bb590ea3f984b09)) +* some tweaks for the search feature ([bc52c05](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bc52c05a9b47ba6dbf8c3f79a131f8281b8c5197)) +* **waste:** add filter for 'recycling centre' ([5da63bf](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5da63bf83aa7d8b230c8dbc082be3fba33344289)) -### [0.47.2](https://github.com/pietervdvn/mapcomplete/compare/v0.47.1...v0.47.2) (2024-09-24) +### [0.47.2](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.1...v0.47.2) (2024-09-24) ### Bug Fixes -* correctly apply previous refactoring ([2a53f99](https://github.com/pietervdvn/mapcomplete/commits/2a53f99dd50695768ff9b625665ca69bf0bec4c1)) -* delete entry from 'localStorage' ([22c8a45](https://github.com/pietervdvn/mapcomplete/commits/22c8a45012be60dad215f8b0d72501133665454e)) -* don't add buildings to database, reevaluate builddb script ([ce87edf](https://github.com/pietervdvn/mapcomplete/commits/ce87edf80009bd65c9f185d9ff68b023c5486adc)) -* filtering for dates now works again ([bea9f66](https://github.com/pietervdvn/mapcomplete/commits/bea9f66b9aac9d2f13bca74b7a35cde7dd217e12)) -* fix wrong location in theme ([8b0b24b](https://github.com/pietervdvn/mapcomplete/commits/8b0b24b01eefa5dbe86d97ac9c3baf38fd2fad0d)) -* remove stray word ([a6598fd](https://github.com/pietervdvn/mapcomplete/commits/a6598fd52d588ba7a5a6b05e2df8ff8ae460a37b)) -* studio now handles arrays better (might fix [#2102](https://github.com/pietervdvn/MapComplete/issues/2102)) ([0c9e41a](https://github.com/pietervdvn/mapcomplete/commits/0c9e41a6ce4508ba3bc767f5eb5bd3cdb88201b2)) -* use 'isCounted' instead of 'doCount', add check for this ([3a8fc42](https://github.com/pietervdvn/mapcomplete/commits/3a8fc4248b7aa6a9cea8c2529a02a7cc11325cc8)) +* correctly apply previous refactoring ([2a53f99](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2a53f99dd50695768ff9b625665ca69bf0bec4c1)) +* delete entry from 'localStorage' ([22c8a45](https://source.mapcomplete.org/MapComplete/MapComplete/commit/22c8a45012be60dad215f8b0d72501133665454e)) +* don't add buildings to database, reevaluate builddb script ([ce87edf](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ce87edf80009bd65c9f185d9ff68b023c5486adc)) +* filtering for dates now works again ([bea9f66](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bea9f66b9aac9d2f13bca74b7a35cde7dd217e12)) +* fix wrong location in theme ([8b0b24b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8b0b24b01eefa5dbe86d97ac9c3baf38fd2fad0d)) +* remove stray word ([a6598fd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a6598fd52d588ba7a5a6b05e2df8ff8ae460a37b)) +* studio now handles arrays better (might fix [#2102](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2102)) ([0c9e41a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0c9e41a6ce4508ba3bc767f5eb5bd3cdb88201b2)) +* use 'isCounted' instead of 'doCount', add check for this ([3a8fc42](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3a8fc4248b7aa6a9cea8c2529a02a7cc11325cc8)) ### Theme improvements -* **ghostsigns:** streamline ghostsigns theme, fix [#2168](https://github.com/pietervdvn/MapComplete/issues/2168), fix [#2167](https://github.com/pietervdvn/MapComplete/issues/2167) ([392fe3b](https://github.com/pietervdvn/mapcomplete/commits/392fe3b190975b9e3c5cb4aadb4d1543aa686d9e)) -* **vending_machine:** add better 'fixme' if freeform for 'vending' is used ([dfce217](https://github.com/pietervdvn/mapcomplete/commits/dfce217288957be2b27c198d640fd2dd5d53c9fb)) +* **ghostsigns:** streamline ghostsigns theme, fix [#2168](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2168), fix [#2167](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2167) ([392fe3b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/392fe3b190975b9e3c5cb4aadb4d1543aa686d9e)) +* **vending_machine:** add better 'fixme' if freeform for 'vending' is used ([dfce217](https://source.mapcomplete.org/MapComplete/MapComplete/commit/dfce217288957be2b27c198d640fd2dd5d53c9fb)) -### [0.47.1](https://github.com/pietervdvn/mapcomplete/compare/v0.47.0...v0.47.1) (2024-09-19) +### [0.47.1](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.47.0...v0.47.1) (2024-09-19) ### Bug Fixes -* actually read preferences ([a5b3342](https://github.com/pietervdvn/mapcomplete/commits/a5b3342415e843d5a33b1d3eb2dce4a95b14932a)) -* fix loading images for CSP, fix [#2161](https://github.com/pietervdvn/MapComplete/issues/2161) ([2569d0c](https://github.com/pietervdvn/mapcomplete/commits/2569d0cb66e411228d9d25cf50dc3278a83d0de5)) -* use correct overflow ([c668698](https://github.com/pietervdvn/mapcomplete/commits/c668698b1eb16f0d96c5ae0e4e7e79209b6abd95)) +* actually read preferences ([a5b3342](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a5b3342415e843d5a33b1d3eb2dce4a95b14932a)) +* fix loading images for CSP, fix [#2161](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2161) ([2569d0c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2569d0cb66e411228d9d25cf50dc3278a83d0de5)) +* use correct overflow ([c668698](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c668698b1eb16f0d96c5ae0e4e7e79209b6abd95)) ### Theme improvements -* **food:** add search keywords ([53b7597](https://github.com/pietervdvn/mapcomplete/commits/53b75973f6734bcad6d1081299e826d2e00e0551)) -* **sport:** add sport pitches filter on sports, fix [#2159](https://github.com/pietervdvn/MapComplete/issues/2159) ([58cec96](https://github.com/pietervdvn/mapcomplete/commits/58cec96fb50284dca79716ffe43d0a75b4cb6597)) +* **food:** add search keywords ([53b7597](https://source.mapcomplete.org/MapComplete/MapComplete/commit/53b75973f6734bcad6d1081299e826d2e00e0551)) +* **sport:** add sport pitches filter on sports, fix [#2159](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2159) ([58cec96](https://source.mapcomplete.org/MapComplete/MapComplete/commit/58cec96fb50284dca79716ffe43d0a75b4cb6597)) -## [0.47.0](https://github.com/pietervdvn/MapComplete/compare/v0.46.9...v0.47.0) (2024-09-17) +## [0.47.0](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.46.9...v0.47.0) (2024-09-17) ### Features -* add a search menu with many improvements ([#2156](https://github.com/pietervdvn/MapComplete/pull/2156)) -* add download as json to 'allTags'-panel (for debugging) ([af2905d](https://github.com/pietervdvn/MapComplete/commit/af2905dc6d1cbbcfb2d9cd2583369eebd90ced70)) +* add a search menu with many improvements ([#2156](https://source.mapcomplete.org/MapComplete/MapComplete/pulls/2156)) +* add download as json to 'allTags'-panel (for debugging) ([af2905d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/af2905dc6d1cbbcfb2d9cd2583369eebd90ced70)) ### Bug Fixes -* actually search for keywords in theme view ([cdc1e05](https://github.com/pietervdvn/MapComplete/commit/cdc1e05499ffc41d093503ccd24defa347eea50e)) -* search fields in a filter are now wrapped into parentheses, allowing for OR as regex ([fb250fb](https://github.com/pietervdvn/MapComplete/commit/fb250fb928da576b5649d398272387da72e89e5c)) +* actually search for keywords in theme view ([cdc1e05](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cdc1e05499ffc41d093503ccd24defa347eea50e)) +* search fields in a filter are now wrapped into parentheses, allowing for OR as regex ([fb250fb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fb250fb928da576b5649d398272387da72e89e5c)) ### Theme improvements -* allow to disable auto filters ([b349293](https://github.com/pietervdvn/MapComplete/commit/b3492930b8e5090e9a9d3449d6e9abc365fc1780)) -* **healthcare:** add payment options to pharmacy layer ([6c5b619](https://github.com/pietervdvn/MapComplete/commit/6c5b61924a63e8bb82afd2dc963cc4fe38caa9ad)) -* **note:** add filter removing anything matching one or more keywords ([9c09da3](https://github.com/pietervdvn/MapComplete/commit/9c09da3c137a6af88b935108fe55aa8e1163ed2c)) -* **shop:** 'open_now' filter is introduced automatically ([ed2bec1](https://github.com/pietervdvn/MapComplete/commit/ed2bec139cf4e4094973aba2f4734522802898f3)) -* **shop:** don't show trolley bay on low zoom levels ([cdb62df](https://github.com/pietervdvn/MapComplete/commit/cdb62dfe58f5a6264c17e9d88bb590ea3f984b09)) -* some tweaks for the search feature ([bc52c05](https://github.com/pietervdvn/MapComplete/commit/bc52c05a9b47ba6dbf8c3f79a131f8281b8c5197)) -* **waste:** add filter for 'recycling centre' ([5da63bf](https://github.com/pietervdvn/MapComplete/commit/5da63bf83aa7d8b230c8dbc082be3fba33344289)) +* allow to disable auto filters ([b349293](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b3492930b8e5090e9a9d3449d6e9abc365fc1780)) +* **healthcare:** add payment options to pharmacy layer ([6c5b619](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6c5b61924a63e8bb82afd2dc963cc4fe38caa9ad)) +* **note:** add filter removing anything matching one or more keywords ([9c09da3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9c09da3c137a6af88b935108fe55aa8e1163ed2c)) +* **shop:** 'open_now' filter is introduced automatically ([ed2bec1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ed2bec139cf4e4094973aba2f4734522802898f3)) +* **shop:** don't show trolley bay on low zoom levels ([cdb62df](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cdb62dfe58f5a6264c17e9d88bb590ea3f984b09)) +* some tweaks for the search feature ([bc52c05](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bc52c05a9b47ba6dbf8c3f79a131f8281b8c5197)) +* **waste:** add filter for 'recycling centre' ([5da63bf](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5da63bf83aa7d8b230c8dbc082be3fba33344289)) -### [0.46.12](https://github.com/USERNAME/REPOSITORY_NAME/compare/v0.46.11...v0.46.12) (2024-09-29) +### [0.46.12](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.46.11...v0.46.12) (2024-09-29) ### Features -* more integrations of panoramax: add panoramax to nearby images view, add to drawer, add icon, see [#1451](https://github.com/pietervdvn/MapComplete/issues/1451) ([5fd1d75](https://github.com/USERNAME/REPOSITORY_NAME/commits5fd1d75efb0fbd49cac3eb5f7a37104887f92f10)) +* more integrations of panoramax: add panoramax to nearby images view, add to drawer, add icon, see [#1451](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1451) ([5fd1d75](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5fd1d75efb0fbd49cac3eb5f7a37104887f92f10)) ### Bug Fixes -* add panoramax.xyz to CSP list ([89d31f5](https://github.com/USERNAME/REPOSITORY_NAME/commits89d31f54bcd9f7f2bf62a663d67aa5bf1308307a)) -* load external panoramax images ([df9c44a](https://github.com/USERNAME/REPOSITORY_NAME/commitsdf9c44aaed7b2670134e8f9128343022e92c6e8d)) +* add panoramax.xyz to CSP list ([89d31f5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/89d31f54bcd9f7f2bf62a663d67aa5bf1308307a)) +* load external panoramax images ([df9c44a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/df9c44aaed7b2670134e8f9128343022e92c6e8d)) ### Theme improvements -* **drinking water:** fix [#2184](https://github.com/pietervdvn/MapComplete/issues/2184) ([308d2ba](https://github.com/USERNAME/REPOSITORY_NAME/commits308d2ba4c62cc66d9c30cd1536549411c0abcb88)) +* **drinking water:** fix [#2184](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2184) ([308d2ba](https://source.mapcomplete.org/MapComplete/MapComplete/commit/308d2ba4c62cc66d9c30cd1536549411c0abcb88)) -### [0.46.11](https://github.com/USERNAME/REPOSITORY_NAME/compare/v0.46.10...v0.46.11) (2024-09-28) +### [0.46.11](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.46.10...v0.46.11) (2024-09-28) ### Features -* check if the image was blurred, attempt to reload if it is done; refactoring of ImageProvider code ([4650170](https://github.com/USERNAME/REPOSITORY_NAME/commits4650170db4bdd3b9e4fbd1900147a7433652dd6f)) +* check if the image was blurred, attempt to reload if it is done; refactoring of ImageProvider code ([4650170](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4650170db4bdd3b9e4fbd1900147a7433652dd6f)) ### Bug Fixes -* fix tests with some refactoring ([0b992e7](https://github.com/USERNAME/REPOSITORY_NAME/commits0b992e75a481ffa5156f68d9a9fa3495a1fec4c9)) -* note themes uses full URL now instead of Panoramax-id ([ce363df](https://github.com/USERNAME/REPOSITORY_NAME/commitsce363dfb59c3237e20aed87ab51da42b9652cb01)) -* quickfixes to image upload flow ([ba1eb28](https://github.com/USERNAME/REPOSITORY_NAME/commitsba1eb28f274ac6cc6be4614456ca3d2137d9ba64)) +* fix tests with some refactoring ([0b992e7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0b992e75a481ffa5156f68d9a9fa3495a1fec4c9)) +* note themes uses full URL now instead of Panoramax-id ([ce363df](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ce363dfb59c3237e20aed87ab51da42b9652cb01)) +* quickfixes to image upload flow ([ba1eb28](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ba1eb28f274ac6cc6be4614456ca3d2137d9ba64)) -### [0.46.10](https://github.com/USERNAME/REPOSITORY_NAME/compare/v0.46.9...v0.46.10) (2024-09-26) +### [0.46.10](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.46.9...v0.46.10) (2024-09-26) ### Features -* Use panoramax to upload to. Will contain bugs ([0bdc1ae](https://github.com/USERNAME/REPOSITORY_NAME/commits0bdc1aec61ec742d141bb3882be07b6d99df654e)) +* Use panoramax to upload to. Will contain bugs ([0bdc1ae](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0bdc1aec61ec742d141bb3882be07b6d99df654e)) ### Bug Fixes -* disable image upload button (see [#2178](https://github.com/pietervdvn/MapComplete/issues/2178)) ([cf74296](https://github.com/USERNAME/REPOSITORY_NAME/commitscf74296d23de9ae6dab902205ebe860490627c00)) -* filtering for dates now works again ([bea9f66](https://github.com/USERNAME/REPOSITORY_NAME/commitsbea9f66b9aac9d2f13bca74b7a35cde7dd217e12)) -* fix loading images for CSP, fix [#2161](https://github.com/pietervdvn/MapComplete/issues/2161) ([2569d0c](https://github.com/USERNAME/REPOSITORY_NAME/commits2569d0cb66e411228d9d25cf50dc3278a83d0de5)) -* search fields in a filter are now wrapped into parentheses, allowing for OR as regex ([fb250fb](https://github.com/USERNAME/REPOSITORY_NAME/commitsfb250fb928da576b5649d398272387da72e89e5c)) -* studio now handles arrays better (might fix [#2102](https://github.com/pietervdvn/MapComplete/issues/2102)) ([0c9e41a](https://github.com/USERNAME/REPOSITORY_NAME/commits0c9e41a6ce4508ba3bc767f5eb5bd3cdb88201b2)) +* disable image upload button (see [#2178](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2178)) ([cf74296](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cf74296d23de9ae6dab902205ebe860490627c00)) +* filtering for dates now works again ([bea9f66](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bea9f66b9aac9d2f13bca74b7a35cde7dd217e12)) +* fix loading images for CSP, fix [#2161](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2161) ([2569d0c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2569d0cb66e411228d9d25cf50dc3278a83d0de5)) +* search fields in a filter are now wrapped into parentheses, allowing for OR as regex ([fb250fb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fb250fb928da576b5649d398272387da72e89e5c)) +* studio now handles arrays better (might fix [#2102](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2102)) ([0c9e41a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0c9e41a6ce4508ba3bc767f5eb5bd3cdb88201b2)) ### Theme improvements -* **ghostsigns:** streamline ghostsigns theme, fix [#2168](https://github.com/pietervdvn/MapComplete/issues/2168), fix [#2167](https://github.com/pietervdvn/MapComplete/issues/2167) ([392fe3b](https://github.com/USERNAME/REPOSITORY_NAME/commits392fe3b190975b9e3c5cb4aadb4d1543aa686d9e)) -* **note:** add filter removing anything matching one or more keywords ([9c09da3](https://github.com/USERNAME/REPOSITORY_NAME/commits9c09da3c137a6af88b935108fe55aa8e1163ed2c)) -* **vending_machine:** add better 'fixme' if freeform for 'vending' is used ([dfce217](https://github.com/USERNAME/REPOSITORY_NAME/commitsdfce217288957be2b27c198d640fd2dd5d53c9fb)) +* **ghostsigns:** streamline ghostsigns theme, fix [#2168](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2168), fix [#2167](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2167) ([392fe3b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/392fe3b190975b9e3c5cb4aadb4d1543aa686d9e)) +* **note:** add filter removing anything matching one or more keywords ([9c09da3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9c09da3c137a6af88b935108fe55aa8e1163ed2c)) +* **vending_machine:** add better 'fixme' if freeform for 'vending' is used ([dfce217](https://source.mapcomplete.org/MapComplete/MapComplete/commit/dfce217288957be2b27c198d640fd2dd5d53c9fb)) -### [0.46.9](https://github.com/USERNAME/REPOSITORY_NAME/compare/v0.46.8...v0.46.9) (2024-09-14) +### [0.46.9](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.46.8...v0.46.9) (2024-09-14) -### [0.46.9](https://github.com/pietervdvn/MapComplete/compare/v0.46.8...v0.46.9) (2024-09-14) +### [0.46.9](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.46.8...v0.46.9) (2024-09-14) ### Bug Fixes -* fix [#2142](https://github.com/pietervdvn/MapComplete/issues/2142) ([f2fca2d](https://github.com/pietervdvn/MapComplete/commit/f2fca2dad8576a18629591e886e511912c1d99e9)) -* nobrand= is actually applied when using the Name suggestion index ([c3bb0cb](https://github.com/pietervdvn/MapComplete/commit/c3bb0cb83787c299ee4a92e8df6046aa448d77c8)) -* scroll horizontal images into view ([0397863](https://github.com/pietervdvn/MapComplete/commit/03978631ebd1e61abd13dd7a53bdb400c3d0f059)) -* some fixes to make studio useable again, probably fixes [#2139](https://github.com/pietervdvn/MapComplete/issues/2139) ([6672fc8](https://github.com/pietervdvn/MapComplete/commit/6672fc87b4326db65289dfa31599ec0583d6c0f4)) +* fix [#2142](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2142) ([f2fca2d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f2fca2dad8576a18629591e886e511912c1d99e9)) +* nobrand= is actually applied when using the Name suggestion index ([c3bb0cb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c3bb0cb83787c299ee4a92e8df6046aa448d77c8)) +* scroll horizontal images into view ([0397863](https://source.mapcomplete.org/MapComplete/MapComplete/commit/03978631ebd1e61abd13dd7a53bdb400c3d0f059)) +* some fixes to make studio useable again, probably fixes [#2139](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2139) ([6672fc8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6672fc87b4326db65289dfa31599ec0583d6c0f4)) ### Theme improvements -* **disaster_respone:** add a police station layer, add this and more layers to disaster_response theme ([418a4a7](https://github.com/pietervdvn/MapComplete/commit/418a4a71af5824487e4aa6754701e5d14371beae)) -* **disaster_response:** add defibrillators and logical zoom levels ([65fceb9](https://github.com/pietervdvn/MapComplete/commit/65fceb9434294051c8f565d89f42443c6afe3fb8)) +* **disaster_respone:** add a police station layer, add this and more layers to disaster_response theme ([418a4a7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/418a4a71af5824487e4aa6754701e5d14371beae)) +* **disaster_response:** add defibrillators and logical zoom levels ([65fceb9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/65fceb9434294051c8f565d89f42443c6afe3fb8)) -### [0.46.8](https://github.com/pietervdvn/MapComplete/compare/v0.46.7...v0.46.8) (2024-09-13) +### [0.46.8](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.46.7...v0.46.8) (2024-09-13) ### Theme improvements -* improve note theme, fix [#2088](https://github.com/pietervdvn/MapComplete/issues/2088) ([e8099b9](https://github.com/pietervdvn/MapComplete/commit/e8099b9081ae25ff37f2b7a491f9301a29772080)) -* update safe_loops svg ([70117ac](https://github.com/pietervdvn/MapComplete/commit/70117ac6874ec860a6f2497c2230d29248de71a7)) +* improve note theme, fix [#2088](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2088) ([e8099b9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e8099b9081ae25ff37f2b7a491f9301a29772080)) +* update safe_loops svg ([70117ac](https://source.mapcomplete.org/MapComplete/MapComplete/commit/70117ac6874ec860a6f2497c2230d29248de71a7)) ### 0.46.7 (2024-09-13) ### Features -* add bike_parking=safe_loops ([e4de3d8](https://github.com/pietervdvn/MapComplete/commit/e4de3d8e5f2b8e6002e68dba20ac659f57a3c8cc)) -* add color for streets with no cycleways ([5d52462](https://github.com/pietervdvn/MapComplete/commit/5d524629b46d3e2e1d059f9db3010609e05ffb61)) -* add prettier config ([d3f453a](https://github.com/pietervdvn/MapComplete/commit/d3f453a4fb3f7eaac9031026dc95bff0a076dec3)) -* Add printer cartridges to recycling ([28d6637](https://github.com/pietervdvn/MapComplete/commit/28d66373680dda160b4b899621c5c89aa1c52143)) -* **themes:** add osm community index as a layer ([e85cf43](https://github.com/pietervdvn/MapComplete/commit/e85cf43ffbf9de86491a2d3aaa4b7f0a52082843)) -* **themes:** add questionHint to give extra information about a question ([d7fe3a0](https://github.com/pietervdvn/MapComplete/commit/d7fe3a056ef74d85f3d4e310a6e053b244b659f8)) +* add bike_parking=safe_loops ([e4de3d8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e4de3d8e5f2b8e6002e68dba20ac659f57a3c8cc)) +* add color for streets with no cycleways ([5d52462](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5d524629b46d3e2e1d059f9db3010609e05ffb61)) +* add prettier config ([d3f453a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d3f453a4fb3f7eaac9031026dc95bff0a076dec3)) +* Add printer cartridges to recycling ([28d6637](https://source.mapcomplete.org/MapComplete/MapComplete/commit/28d66373680dda160b4b899621c5c89aa1c52143)) +* **themes:** add osm community index as a layer ([e85cf43](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e85cf43ffbf9de86491a2d3aaa4b7f0a52082843)) +* **themes:** add questionHint to give extra information about a question ([d7fe3a0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d7fe3a056ef74d85f3d4e310a6e053b244b659f8)) ### Bug Fixes -* _actually_ fix [#1706](https://github.com/pietervdvn/MapComplete/issues/1706) ([6577007](https://github.com/pietervdvn/MapComplete/commit/6577007717910bf46086490da8e9d549b63f1891)) -* _actually_ run the *.spec.ts-tests... ([82a860c](https://github.com/pietervdvn/MapComplete/commit/82a860cbf5bad2ab1b4d9b806e9f18e4d5cbc054)) -* [#1093](https://github.com/pietervdvn/MapComplete/issues/1093) ([5a6ed7b](https://github.com/pietervdvn/MapComplete/commit/5a6ed7bf21aaaf677c05e572afacd53443eb2d59)) -* [#1685](https://github.com/pietervdvn/MapComplete/issues/1685), fix oopsie ([d96fe61](https://github.com/pietervdvn/MapComplete/commit/d96fe614624771bed99c418bbc9bb4f09ce7bd3a)) -* a freeform key will mimick a mapping if appropriate (and avoid the 'addExtraTags') ([68ea4e3](https://github.com/pietervdvn/MapComplete/commit/68ea4e3d9f255e989cf158159b434ed6bfc6f55a)) -* actually allow to login via prominent login button ([4be49a0](https://github.com/pietervdvn/MapComplete/commit/4be49a0561531c729d9d46d5e99571056d2492df)) -* actually apply preferred background layer ([b69c2de](https://github.com/pietervdvn/MapComplete/commit/b69c2de3f41e7737ceec919214f0748634d9dfd3)) -* actually attempt to login when login button is pressed ([f1de8a3](https://github.com/pietervdvn/MapComplete/commit/f1de8a3d9dafad4860ebb380c113ff2f253d13db)) -* actually deploy on the production repo ([ca89956](https://github.com/pietervdvn/MapComplete/commit/ca899561d55626b9c2c14f90d60d01c8c1276823)) -* actually include _all_ features ([8f7b731](https://github.com/pietervdvn/MapComplete/commit/8f7b731d29ca7daec1063a6833716e86333b0ffd)) -* actually load geojson layers; formatting ([cbc4e6e](https://github.com/pietervdvn/MapComplete/commit/cbc4e6eb15a2a6d7f9693a24f35839886b4f3544)) -* actually open usersettings when license is clicked ([c10fecb](https://github.com/pietervdvn/MapComplete/commit/c10fecb7e8293190b07a2fc3ff90b6f830a75103)) -* actually pass the initial coordinate in the locationInput element, fix [#1486](https://github.com/pietervdvn/MapComplete/issues/1486) ([68e07d7](https://github.com/pietervdvn/MapComplete/commit/68e07d7d7beca5b4ea26b9fc6ff964014d28af4b)) -* Actually show errors in custom themes now ([6a79dde](https://github.com/pietervdvn/MapComplete/commit/6a79dde743264c272e461614ae718044d90a7080)) -* actually show HD image for nearby streetview imager, add loading indicator ([8b6ee87](https://github.com/pietervdvn/MapComplete/commit/8b6ee877f08a584df7d3bc8706292b6eeb11f030)) -* actually show polygon_centroid ([5a957d5](https://github.com/pietervdvn/MapComplete/commit/5a957d56c73771a1fa2560dbd8755a7eebe36285)) -* actually show tags on changes when the user has enough changesets ([d702134](https://github.com/pietervdvn/MapComplete/commit/d7021344e890bede888ea3412270420e033207f7)) -* actually upload new themes ([6446586](https://github.com/pietervdvn/MapComplete/commit/6446586ac581fa3994e58dba62a365afde7d5937)) -* add 'maxspeed=20' to living street ([fd9c48b](https://github.com/pietervdvn/MapComplete/commit/fd9c48b5b56fe7a08e3532cad777246b82b3a073)) -* add 'onbeforeunload' if images are uploading, see [#1841](https://github.com/pietervdvn/MapComplete/issues/1841) ([ce7bc8f](https://github.com/pietervdvn/MapComplete/commit/ce7bc8fb6cc373e96179e57395818d6e6befd942)) -* add 'self' to connect-src ([3bca130](https://github.com/pietervdvn/MapComplete/commit/3bca1305b504ba08203a09916fe849365eca0458)) -* add all global layers to CSP ([93630bd](https://github.com/pietervdvn/MapComplete/commit/93630bd1db9e71f5e62619b2d02aaf18b42222f6)) -* add all needed urls again ([ce1855b](https://github.com/pietervdvn/MapComplete/commit/ce1855b2bd322044f9710a4dab38287298ad5fc6)) -* add all vector layers to CSP ([2736740](https://github.com/pietervdvn/MapComplete/commit/2736740cd0d777450f8da7eea76f1defa7993944)) -* add awaitAnimationFrame to fix non-working questions ([d744fd3](https://github.com/pietervdvn/MapComplete/commit/d744fd3a42bedb64de7de1562b6f4ee31ba9d254)) -* Add button to go back to the map when showing that a point is deleted, fix [#1417](https://github.com/pietervdvn/MapComplete/issues/1417) ([55903d4](https://github.com/pietervdvn/MapComplete/commit/55903d45f933ebbfd7971a14296fe2dac1b6fa96)) -* add carto vector layers again ([5e2a989](https://github.com/pietervdvn/MapComplete/commit/5e2a98924c2a0efdb1f75a213efe7114df5e0cae)) -* add check for missing 'noopener' attributes; add missing noopener attributes ([6e8617c](https://github.com/pietervdvn/MapComplete/commit/6e8617c93fd0fde8f0b27c035625e68d143f9b58)) -* add check that no changeset is opened without actually having changes ([2843b01](https://github.com/pietervdvn/MapComplete/commit/2843b01586fd40a2e0d4dc92861b9d001d1684d3)) -* add correct attribution for maptiler bg layer ([c90b334](https://github.com/pietervdvn/MapComplete/commit/c90b334678ac44346d82302599647236b3c0df09)) -* add default value for setStatus ([eede2d1](https://github.com/pietervdvn/MapComplete/commit/eede2d17dd411a3b27295a9efab8cb69df3b57c2)) -* add dutch translation ([a55b84d](https://github.com/pietervdvn/MapComplete/commit/a55b84dba18564e0959bd709b0da0e5b228d3ca0)) -* add execute permissions to build script ([5567869](https://github.com/pietervdvn/MapComplete/commit/5567869bb4ede7a56c174b960aff734de06ea67f)) -* add extra refresh:layeroverview in order to fix the favourites theme icons ([c65ccdb](https://github.com/pietervdvn/MapComplete/commit/c65ccdbc240ad5406189e48bd92c40569d19bc3c)) -* add glow effect to bench theme for selected object ([75b1a46](https://github.com/pietervdvn/MapComplete/commit/75b1a467e0307cee94a0af9e482a3ab5e8ac4ccd)) -* add glow effect when dropping an image in the file selector; fix [#1496](https://github.com/pietervdvn/MapComplete/issues/1496) ([426620a](https://github.com/pietervdvn/MapComplete/commit/426620a76c4a6ca86181dec73da90d076f73c9aa)) -* add language picker in settings page if logged out, fix [#1505](https://github.com/pietervdvn/MapComplete/issues/1505) ([a7ff3b8](https://github.com/pietervdvn/MapComplete/commit/a7ff3b86faa90e70d3496f973c72b0265f993708)) -* add links and overpass link to cafe_pub ([41b6eea](https://github.com/pietervdvn/MapComplete/commit/41b6eea430cbb6f504deb7a3e4fb5cf493004d6f)) -* add maxzoom to osm.carto-layer, see [#1664](https://github.com/pietervdvn/MapComplete/issues/1664)$ ([5f918b6](https://github.com/pietervdvn/MapComplete/commit/5f918b607b9034c5a8ce6bcdd003caf8efe1466b)) -* add missing assets ([f2b8c0d](https://github.com/pietervdvn/MapComplete/commit/f2b8c0db0f80bf503f2b4332d66cbede0736f82a)) -* add missing tag ([c5300a3](https://github.com/pietervdvn/MapComplete/commit/c5300a3fd5b46e611a4604ad9c0483f823396dda)) -* add new items works again, fix [#1593](https://github.com/pietervdvn/MapComplete/issues/1593) ([c527427](https://github.com/pietervdvn/MapComplete/commit/c527427f70990006b9c71ef472bbe45d2c9bff70)) -* add safety check to not overuse the OSM-api ([4602df3](https://github.com/pietervdvn/MapComplete/commit/4602df30469b57a57b9b8e1b8c6cc5c70ff901d7)) -* add script integrity, add check to validate that script integrity is always in place ([08bbbca](https://github.com/pietervdvn/MapComplete/commit/08bbbcabc402abcf328274bb2990d59b47580376)) -* add selection indicator to artwork ([ec99ab2](https://github.com/pietervdvn/MapComplete/commit/ec99ab24f806e8d43ae89ab8f33f570f43ce59fb)) -* add support for legacy iconSize to fix some custom themes, see [#1494](https://github.com/pietervdvn/MapComplete/issues/1494) ([200361b](https://github.com/pietervdvn/MapComplete/commit/200361bf8dcd17f47574539137b2c42cb745143a)) -* add text on cancel button ([1208e09](https://github.com/pietervdvn/MapComplete/commit/1208e095cf3fe87a2c9948a0c6666705c14c5e52)) -* add the minimap again ([e83b8cb](https://github.com/pietervdvn/MapComplete/commit/e83b8cb19183b53c4d6b24b4f621900fd14280fa)) -* addnewpoint-dialog works again ([8ed0a32](https://github.com/pietervdvn/MapComplete/commit/8ed0a32d153d4a434602c86a85eaf02881f6d480)) -* alias 'urls' as 'website', fix [#246](https://github.com/pietervdvn/MapComplete/issues/246) ([87e79b8](https://github.com/pietervdvn/MapComplete/commit/87e79b8e8c981f5b0daa105097c514273ce6be3e)) -* allow selection of the first radiobutton ([8fafd0a](https://github.com/pietervdvn/MapComplete/commit/8fafd0a8a5701323c6e25210ac6310dc418e31eb)) -* allow to delete freeform values in more cases ([9b78838](https://github.com/pietervdvn/MapComplete/commit/9b78838745f41f3e42f158c9959c695e4160e7e8)) -* allow to link multiple mapillary-images ([286fe72](https://github.com/pietervdvn/MapComplete/commit/286fe729359db1ec36328768a6a7662a9e951ce8)) -* allow to move (non-snapped) points again after fixing [#1809](https://github.com/pietervdvn/MapComplete/issues/1809) ([77f07f5](https://github.com/pietervdvn/MapComplete/commit/77f07f55ecf9140c1c556fb4147c7d5cb74b0645)) -* alltags shows objects as JSON instead as [object Object] ([1df28ab](https://github.com/pietervdvn/MapComplete/commit/1df28ab50199310928974a07809b65e854df1525)) -* also copy png assets ([8f32916](https://github.com/pietervdvn/MapComplete/commit/8f32916454b63939d63c7496f7ba7b30f6f038cc)) -* also show location info on shake if GPS is disabled ([4c5d24a](https://github.com/pietervdvn/MapComplete/commit/4c5d24a0a7dacc393c0a4328c99b5e5e08058b0b)) -* always allow www.openstreetmap.org ([6b4be12](https://github.com/pietervdvn/MapComplete/commit/6b4be1200c60664bbbee87f9f8f8e3d821a277c3)) -* always link to the wiki when tags are shown ([8dfef62](https://github.com/pietervdvn/MapComplete/commit/8dfef624323b8b93098150115d93f4089b846fb2)) -* attempt to fix build ([0e8c3b1](https://github.com/pietervdvn/MapComplete/commit/0e8c3b10626f6f37e54b8ef96c11fb5dc113fe7a)) -* attempt to fix build ([0e760b9](https://github.com/pietervdvn/MapComplete/commit/0e760b908c4955300b9d329f6d7eb9fb475713d3)) -* attributes to answered questions didn't automatically show, questions which became available are now shown if they become avaible because of a tag change. Fix [#1587](https://github.com/pietervdvn/MapComplete/issues/1587) ([7de0af1](https://github.com/pietervdvn/MapComplete/commit/7de0af15f100815288fea4fdb13f3e845bc79088)) -* await 'country' to be loaded ([3c5bde1](https://github.com/pietervdvn/MapComplete/commit/3c5bde1ae3ff3ed1aa72bb1463a4690e16f941e6)) -* background layer csp fixe ([713e53c](https://github.com/pietervdvn/MapComplete/commit/713e53c41a840ae1e66cb9a36e06e0e9361285bd)) -* better error handling and handling of changes ([7813653](https://github.com/pietervdvn/MapComplete/commit/78136532651ebcea6a2d2d94e42b2775bb9e92e3)) -* better select available levels ([7b73578](https://github.com/pietervdvn/MapComplete/commit/7b73578f88b09ee65f923c363a884d91f20d2fae)) -* broken titleIcons (fix [#1344](https://github.com/pietervdvn/MapComplete/issues/1344)) ([bdcf8a2](https://github.com/pietervdvn/MapComplete/commit/bdcf8a26014b01e8128ece897e4b98286722d0e4)) -* browser specific bug which caused the file selector to open twice on chromium; fix [#1771](https://github.com/pietervdvn/MapComplete/issues/1771) ([9893e43](https://github.com/pietervdvn/MapComplete/commit/9893e433f3bb43fbea80beb2a73ea4e271a01491)) -* bug submitted comments on notes twice ([5be4b9d](https://github.com/pietervdvn/MapComplete/commit/5be4b9d1fb1e5a5e2cb03e314d4d65370aa44957)) -* build ([cef7e01](https://github.com/pietervdvn/MapComplete/commit/cef7e01a2e7855d214d4a5ca75fc032a2b1d123a)) -* build ([8556196](https://github.com/pietervdvn/MapComplete/commit/8556196acec5652ab39baaaa14ac911cb6dc5a15)) -* build ([dbca260](https://github.com/pietervdvn/MapComplete/commit/dbca2601324cd79d5d2d7d0398d002565d8825de)) -* build ([2a21040](https://github.com/pietervdvn/MapComplete/commit/2a2104055185e1f9fa8f1cad620606b690527a0c)) -* build ([29ee113](https://github.com/pietervdvn/MapComplete/commit/29ee113e30c11edc670331f1fb67f41e08f9ab50)) -* build, some metatagging errors ([0d529e7](https://github.com/pietervdvn/MapComplete/commit/0d529e7cca4f044ab4c5fd4491e3704678598862)) -* build; subtle bug ([5644c7a](https://github.com/pietervdvn/MapComplete/commit/5644c7a8b87a0fb17e846a4c370ac432cc03ca15)) -* bypass missing favourites in custom theme loader ([6f59e46](https://github.com/pietervdvn/MapComplete/commit/6f59e46befd0ba1df57066400f3d2bbf00166f5b)) -* charging station theme uses anchor too ([39024eb](https://github.com/pietervdvn/MapComplete/commit/39024eb5f3f68b5dba6b10d8dcf07fe2c5c67fbc)) -* charging_station.protojson ([f042ca4](https://github.com/pietervdvn/MapComplete/commit/f042ca40701e269a02254289a35acd43aaed05b0)) -* chromium browsers don't handle spaces in `tel:`-links well ([4168ef0](https://github.com/pietervdvn/MapComplete/commit/4168ef01e333784f738fafa15d1eb7d7c4c527c7)) -* cleanup merge ([e160510](https://github.com/pietervdvn/MapComplete/commit/e16051025a0f7c827c90db7251596be0c5e902c9)) -* cleanup of wikipedia panel, fix [#1570](https://github.com/pietervdvn/MapComplete/issues/1570) ([203f24f](https://github.com/pietervdvn/MapComplete/commit/203f24fca01047edd2f01ed541fc93841ac1f17d)) -* clicking the magnifying icon actually works now ([5478711](https://github.com/pietervdvn/MapComplete/commit/5478711bed8806d4cd5ae0ffe69ab64f3293fa69)) -* compilation warning ([5851531](https://github.com/pietervdvn/MapComplete/commit/5851531306b2cb2cebfb459e5c5bef284b8c3e94)) -* correct 'sync repo' step ([ecd84c2](https://github.com/pietervdvn/MapComplete/commit/ecd84c2cf6174bddad5d1759caeeeea761e1b9f1)) -* correct CSP header for iOs/safari ([54868de](https://github.com/pietervdvn/MapComplete/commit/54868debec137c57b8dd45024332854150cc8f0f)) -* correct default access assumption ([ea06152](https://github.com/pietervdvn/MapComplete/commit/ea061524737b343bec120356b8822d185cdefd85)) -* correct default sed param for BSD sed flavor ([46fe1c5](https://github.com/pietervdvn/MapComplete/commit/46fe1c5795a110c541ed97548c426b205705ff2d)) -* correct faulty name ([0952200](https://github.com/pietervdvn/MapComplete/commit/09522004db01453dcdb9a26670c3d7ef6f4e1eee)) -* correct filters ([4d2d541](https://github.com/pietervdvn/MapComplete/commit/4d2d54175ca5b4af5a258bf7d1b89debab9f8f8e)) -* correct maybe missing option in etymology layer ([a8ecab4](https://github.com/pietervdvn/MapComplete/commit/a8ecab4d794c219301d636594933520c87fd8d75)) -* correct merge conflict ([e6d8401](https://github.com/pietervdvn/MapComplete/commit/e6d84019a579daed01a34cf67825689511fd9c0a)) -* correct minzoom on all themes ([bde5878](https://github.com/pietervdvn/MapComplete/commit/bde5878fedae0eac20db8bb4c6eca81f904e20fd)) -* correct sed command to be OSX compatible ([e21eb65](https://github.com/pietervdvn/MapComplete/commit/e21eb6596ee85471b8cbbd6776fa65647786bfda)) -* correct typings ([2f17e6e](https://github.com/pietervdvn/MapComplete/commit/2f17e6e53259193c06d1764188a1a9602fbd97bb)) -* Correctly calculate available levels, reselect last_click automatically ([4c962ea](https://github.com/pietervdvn/MapComplete/commit/4c962eab21af8146d9d57f7d12cd08cdd4a642d6)) -* correctly escape markdown ([4d01d81](https://github.com/pietervdvn/MapComplete/commit/4d01d81e1e87ca5a18b6d0fd7b9f232c77cda936)) -* correctly flatten special cases ([7ba0e73](https://github.com/pietervdvn/MapComplete/commit/7ba0e736a87492bc64e5f73811a6c790851c59d9)) -* correctly flatten special cases ([593d7bd](https://github.com/pietervdvn/MapComplete/commit/593d7bd07ac520875c5acfcab5df364fb04dd77c)) -* correctly interpret 'hideInAnswer'-conditions, recalculate them dynamically ([37dc6a7](https://github.com/pietervdvn/MapComplete/commit/37dc6a71616fc9510d1bf6e814060390dd329629)) -* correctly optimize 'key=A&key!=B' into 'key=A' ([d8a5f3c](https://github.com/pietervdvn/MapComplete/commit/d8a5f3c2be985c4fcbedfda09564ae5d02e6e5b4)) -* correctly replace fields in filterview ([ae491f4](https://github.com/pietervdvn/MapComplete/commit/ae491f491652798344273d18fb42f1d27108ba4b)) -* crash in new note flow, spotted by [@thibaultmolleman](https://github.com/thibaultmolleman) ([3e49929](https://github.com/pietervdvn/MapComplete/commit/3e49929f253f8ae1f945d9df4eb3398b39030a43)) -* css-generate script; loading of stylesheet in style_test, add small buttons to style_test ([6bed170](https://github.com/pietervdvn/MapComplete/commit/6bed170910cdf6fd2ca68eb9d1b65779287afa5d)) -* CSV download ([c1bce7a](https://github.com/pietervdvn/MapComplete/commit/c1bce7abc76984ddb84f112d1b7367e5822d5763)) -* decent PDF-export ([de20b00](https://github.com/pietervdvn/MapComplete/commit/de20b00b8f8af6796cbab060262d85a5ab171c5d)) -* direction input does not scroll anymore when dragged, fix [#1468](https://github.com/pietervdvn/MapComplete/issues/1468) ([102892e](https://github.com/pietervdvn/MapComplete/commit/102892ec774501b2811179b333217fb81efe33bb)) -* disable 'delete'-button if no reason is selected, fix [#1631](https://github.com/pietervdvn/MapComplete/issues/1631) ([6b6b1e3](https://github.com/pietervdvn/MapComplete/commit/6b6b1e32862c7021cff99c2b340a50ae5822cf60)) -* disable check ([b2e7b7d](https://github.com/pietervdvn/MapComplete/commit/b2e7b7d221a6dbc12f73505522a5d29bd6d36244)) -* disable rotation on mobile if the user enabled this ([93a30fd](https://github.com/pietervdvn/MapComplete/commit/93a30fdba5edfd91c19050013aa4f58123ce127c)) -* don't attempt to show an osm wiki page as image, fix [#1776](https://github.com/pietervdvn/MapComplete/issues/1776) ([7dc43f9](https://github.com/pietervdvn/MapComplete/commit/7dc43f933e84b73f99935ceba4638fe85e376c94)) -* don't count layers if they are not shown by default, fix [#1840](https://github.com/pietervdvn/MapComplete/issues/1840) ([d848171](https://github.com/pietervdvn/MapComplete/commit/d848171c3d795e31a73b10d687b475de30e8f39c)) -* don't crash if 't' is undefined ([b1c4097](https://github.com/pietervdvn/MapComplete/commit/b1c4097cb480785d2e644a3da072055d1778a17c)) -* don't crash if no features nearby ([b6a4cc1](https://github.com/pietervdvn/MapComplete/commit/b6a4cc11bdf25c4cf09e55ad802eb0d460311c9d)) -* don't crash if no features nearby ([c2001f1](https://github.com/pietervdvn/MapComplete/commit/c2001f17a55937bbc09e52d730828c9234bf30ef)) -* don't measure compass if alpha is null, fix [#1787](https://github.com/pietervdvn/MapComplete/issues/1787) ([3461ed6](https://github.com/pietervdvn/MapComplete/commit/3461ed60990fc91e399ef3c4cd082029db2059dd)) -* don't move the map after we jumped to the current GPS location ([f31b025](https://github.com/pietervdvn/MapComplete/commit/f31b025b8dba7218576c58ef6bc2b3101052beb7)) -* don't set invalid coordinates ([fbc3bce](https://github.com/pietervdvn/MapComplete/commit/fbc3bce5109ffa95491b792d4c7870167f9915ba)) -* don't show both counts and summary at the same time ([d6dbeca](https://github.com/pietervdvn/MapComplete/commit/d6dbecace26b9dc52da61d19b767469190a0e8be)) -* don't show duplicate entry of default baselayer if already added ([7ef1628](https://github.com/pietervdvn/MapComplete/commit/7ef1628d87f32240746251b3e7b4bfdfdbebf6cb)) -* Don't show item if there is no label ([7edc730](https://github.com/pietervdvn/MapComplete/commit/7edc7302bbb6f0884e6652a429e00705f64413bb)) -* don't show preset_type special vis if no presets are given ([cf3b414](https://github.com/pietervdvn/MapComplete/commit/cf3b4145ff68871a2040b15ccb6d030b59c448ad)) -* don't show radiobuttons if only one option is available ([8e68ca0](https://github.com/pietervdvn/MapComplete/commit/8e68ca03ab33cf91df83f1e1d2750723cfb0370b)) -* don't store location 0,0 to prevent movement or cursor in addNew-dialog ([c19317b](https://github.com/pietervdvn/MapComplete/commit/c19317bd04a10db89ecbb95eda9b3156f50c395b)) -* don't throw an error if there is no parent element which can be scrolled ([3166918](https://github.com/pietervdvn/MapComplete/commit/3166918551aab57bdf0777e7bd378003779f8c10)) -* drag & drop for file selector ([5be24db](https://github.com/pietervdvn/MapComplete/commit/5be24dbef1647cd2c6c869d86ea5b37f0e072106)) -* dynamic filtering with non-string values ([58b94c3](https://github.com/pietervdvn/MapComplete/commit/58b94c38e50c5a9c66ac248fe8117b19bac7d05a)) -* effectively show `contact:website` in title icons ([0027299](https://github.com/pietervdvn/MapComplete/commit/0027299a3e373e9cd19deec0b93dd7a7599ff78a)) -* emit warning for invalid suggestions ([56ba426](https://github.com/pietervdvn/MapComplete/commit/56ba426ab5bb2f10ac38776728a67ff4558e0cfa)) -* enable editing questions (and settings) again (oopsie) ([d079ba9](https://github.com/pietervdvn/MapComplete/commit/d079ba91aa29395262b8084f811eec26e51750b9)) -* enable external data sources from the ELI ([5ea0804](https://github.com/pietervdvn/MapComplete/commit/5ea08040d7ec40abaabf849ef20771c1a5112637)) -* enable login on index screen ([aface6a](https://github.com/pietervdvn/MapComplete/commit/aface6aea7f1774b62c9218e64cd65bf77b97c0b)) -* enable rainbow question again, fix [#1453](https://github.com/pietervdvn/MapComplete/issues/1453) ([af447a9](https://github.com/pietervdvn/MapComplete/commit/af447a948f3d425565afe5620a97123111d6bf91)) -* enable settings again, fix [#1815](https://github.com/pietervdvn/MapComplete/issues/1815) ([a118c29](https://github.com/pietervdvn/MapComplete/commit/a118c295d641852584bbd16f07c419a3fa896591)) -* error server properly names files, add status endpoint ([37c1d46](https://github.com/pietervdvn/MapComplete/commit/37c1d46dd43a9d75326a4f9187d4bb3846b4a211)) -* escape special characters for wikipedia search, might improve [#1500](https://github.com/pietervdvn/MapComplete/issues/1500) ([ec94253](https://github.com/pietervdvn/MapComplete/commit/ec94253d6c5ef38ee5d5d1c7bc25fff53cd6be82)) -* etymology theme now supports multi-apply again, uses lower zoom level for multiselect ([90869a1](https://github.com/pietervdvn/MapComplete/commit/90869a1c985d992063656d89fe0d95b73184304a)) -* Expose all templates ([09a3e7f](https://github.com/pietervdvn/MapComplete/commit/09a3e7fba1464835bfad061110f4352d9a47e173)) -* facade gardens: restore forgottne rendering ([f8fa184](https://github.com/pietervdvn/MapComplete/commit/f8fa1841e4df8627a18ee57c7c2cb943176557be)) -* fill in freeform value if already set ([e0527e9](https://github.com/pietervdvn/MapComplete/commit/e0527e964702427014220e2978680e3e6a7cc774)) -* fix [#1471](https://github.com/pietervdvn/MapComplete/issues/1471): add option to bench for 'does probably not have an artwork' ([91892d5](https://github.com/pietervdvn/MapComplete/commit/91892d50c5a5c5071838c8a38a24c60f1f7ed717)) -* fix [#1477](https://github.com/pietervdvn/MapComplete/issues/1477). Setting the background caused a map.resize(), which in turn caused the coordinates to be set to 0,0, which caused the location-correction to kick in, moving the location input towards null island ([d95d96f](https://github.com/pietervdvn/MapComplete/commit/d95d96fb1ba1a8886f05b118c0650a4af1ae5dd7)) -* fix [#1503](https://github.com/pietervdvn/MapComplete/issues/1503), fix [#1571](https://github.com/pietervdvn/MapComplete/issues/1571) ([382f965](https://github.com/pietervdvn/MapComplete/commit/382f96596ed474bef086d64cabb748257416f2de)) -* fix [#1506](https://github.com/pietervdvn/MapComplete/issues/1506), language-URL-parameter works again and is properly documented ([2942a2d](https://github.com/pietervdvn/MapComplete/commit/2942a2dae77d7c79b3af47b0c518342fa6c87454)) -* fix [#1528](https://github.com/pietervdvn/MapComplete/issues/1528): from weblate to theme files did not properly sync ([3c08c12](https://github.com/pietervdvn/MapComplete/commit/3c08c1297423d74348aa83e5932a7fbd94c260e5)) -* fix [#1529](https://github.com/pietervdvn/MapComplete/issues/1529) ([05bf79f](https://github.com/pietervdvn/MapComplete/commit/05bf79f7616af06aefea8e9f095e2b467d84a5d7)) -* fix [#1532](https://github.com/pietervdvn/MapComplete/issues/1532) ([5d00f3c](https://github.com/pietervdvn/MapComplete/commit/5d00f3cc6a75a22732ec7ffa63d9335d9d75853c)) -* fix [#1580](https://github.com/pietervdvn/MapComplete/issues/1580) ([56934b7](https://github.com/pietervdvn/MapComplete/commit/56934b79f6911da6d182c4e3f28bbd6749932c3e)) -* fix [#1596](https://github.com/pietervdvn/MapComplete/issues/1596) ([0727a22](https://github.com/pietervdvn/MapComplete/commit/0727a228fd8bf9b7dd7ecc5b42d9225eab00bae7)) -* fix [#1627](https://github.com/pietervdvn/MapComplete/issues/1627) ([e37f908](https://github.com/pietervdvn/MapComplete/commit/e37f90855fb3b1fd59d19506aca0e2ccc6a12fb2)) -* fix [#1675](https://github.com/pietervdvn/MapComplete/issues/1675) ([65250d7](https://github.com/pietervdvn/MapComplete/commit/65250d77beec81f9d336302c4b185dcd14518917)) -* fix [#1684](https://github.com/pietervdvn/MapComplete/issues/1684); add 'openid' to auth-tokens (will be needed in the future for geovisio integration) ([0a82dd0](https://github.com/pietervdvn/MapComplete/commit/0a82dd0edfd67c18b2c59c903d506cbb0d46ffc1)) -* fix [#1713](https://github.com/pietervdvn/MapComplete/issues/1713) ([2720f5d](https://github.com/pietervdvn/MapComplete/commit/2720f5dd19deb2ebdcf1eae2229e2fbdd0adc4dd)) -* fix [#1779](https://github.com/pietervdvn/MapComplete/issues/1779), add check to prevent similar errors ([417dc16](https://github.com/pietervdvn/MapComplete/commit/417dc1633e05b1b4776449eb245739232dea975e)) -* fix [#1813](https://github.com/pietervdvn/MapComplete/issues/1813). For some reason, importing a .js-file suddenly fails, so ported it to typescript ([cab414e](https://github.com/pietervdvn/MapComplete/commit/cab414e80895933b4ae874be5fd77b90b8c13f3f)) -* fix [#1817](https://github.com/pietervdvn/MapComplete/issues/1817), some more improvements to the loading screen ([6394ee8](https://github.com/pietervdvn/MapComplete/commit/6394ee8e6800d2cd23d30383ffea9629964c4dc9)) -* fix [#1844](https://github.com/pietervdvn/MapComplete/issues/1844) ([e11442e](https://github.com/pietervdvn/MapComplete/commit/e11442e1009465e8bc3e8823e8d66fe44fb5f9c2)) -* fix [#1883](https://github.com/pietervdvn/MapComplete/issues/1883); display underground railway lines in a subtler rendering ([b3299cd](https://github.com/pietervdvn/MapComplete/commit/b3299cdd733152820e30c18463e551059654d3fb)) -* fix [#1906](https://github.com/pietervdvn/MapComplete/issues/1906) ([3ab1d15](https://github.com/pietervdvn/MapComplete/commit/3ab1d1591fde7e31efe4e6186af78b71987c1498)) -* fix [#1917](https://github.com/pietervdvn/MapComplete/issues/1917) ([8c65448](https://github.com/pietervdvn/MapComplete/commit/8c6544883469d9634fca285b600fa05706dcdbfa)) -* fix [#1917](https://github.com/pietervdvn/MapComplete/issues/1917) ([903a11d](https://github.com/pietervdvn/MapComplete/commit/903a11d4e7c832ad46d3afd4ed9786df6e6d1331)) -* fix anonymous reviews; fix [#1868](https://github.com/pietervdvn/MapComplete/issues/1868) ([073cd69](https://github.com/pietervdvn/MapComplete/commit/073cd692e456ae63999bfc2770d0c204dc8a1793)) -* fix back-button on the 404-page, remove some obsolete classes ([006f695](https://github.com/pietervdvn/MapComplete/commit/006f69561a08a1c3a3577ada83e9b3954d8332f2)) -* fix bug icon ([1fea2b5](https://github.com/pietervdvn/MapComplete/commit/1fea2b56be82e8a9a5db2683ee55a5a81ec7e7f2)) -* fix bug with incorrect translation context for themes ([368f9ad](https://github.com/pietervdvn/MapComplete/commit/368f9ad0c83eaeb40d4f7ae293d73d11714271e0)) -* fix build ([0d705b9](https://github.com/pietervdvn/MapComplete/commit/0d705b97277a7c6cba5a57d071aeaace1a24fc5a)) -* fix crash in studio ([b18d575](https://github.com/pietervdvn/MapComplete/commit/b18d575ade434ec51a33684ff365ede7b93cfa79)) -* fix dissappearing items to apply ([a935c03](https://github.com/pietervdvn/MapComplete/commit/a935c03631614390a1ab43248f51e6ba0eb26956)) -* fix domain name ([301f00f](https://github.com/pietervdvn/MapComplete/commit/301f00f6aef727981e2faa73e2093710ac25c337)) -* fix file drag and drop, allow entire featurePopup for file drop ([859faea](https://github.com/pietervdvn/MapComplete/commit/859faead7fd8c6fa5ae73b70e41a753f34dfd5ff)) -* fix icons in mappings which use a builtin svg ([ab28fbe](https://github.com/pietervdvn/MapComplete/commit/ab28fbe35c97de56e765bc3b35277489aebb1872)) -* fix incorrectly linked translation in privacy policy ([e2aaa7d](https://github.com/pietervdvn/MapComplete/commit/e2aaa7d435ee91d20a62e8380300ec27418e93c1)) -* fix link image action ([ce55b4c](https://github.com/pietervdvn/MapComplete/commit/ce55b4c7d8659044b93a03afaaa37d272a6b48ab)) -* fix maps ([e48571a](https://github.com/pietervdvn/MapComplete/commit/e48571a80a03418d5c0c61304dbb166a67740ddc)) -* fix move dialog ([084cd86](https://github.com/pietervdvn/MapComplete/commit/084cd86b71bbc26e3b7542a5f16ecc1715275a50)) -* fix multi-visualisation ([872e36d](https://github.com/pietervdvn/MapComplete/commit/872e36dffa6810f599e06778010f8b00056b976c)) -* fix nearby drinking water fountain detection ([13ebcff](https://github.com/pietervdvn/MapComplete/commit/13ebcffab102fdcda6263c22cdd12bc22a6f86f7)) -* fix nearby drinking water fountain detection ([a5276eb](https://github.com/pietervdvn/MapComplete/commit/a5276eb4e67ed939e5b34ad7ffca61d6e41d679d)) -* fix query:licenses ([e0ee3ed](https://github.com/pietervdvn/MapComplete/commit/e0ee3edf71388614a1bc07dc43aaf18def1a630e)) -* fix rainbow crossings theme ([5b29177](https://github.com/pietervdvn/MapComplete/commit/5b291777be5a1aa4826ba894af76dbf4c09b9a7c)) -* fix reverse tabnabbing in most cases, add rel=noopener to most links to untrusted content ([d9b8257](https://github.com/pietervdvn/MapComplete/commit/d9b8257e47f7c2e2ce06e4a0fcad8830764dae8e)) -* fix scrolling for 'addNewPoint' ([637cebe](https://github.com/pietervdvn/MapComplete/commit/637cebefc7685d64ae5286c2a5f63afb3193a2db)) -* fix scrolling for 'addNewPoint' ([f697d29](https://github.com/pietervdvn/MapComplete/commit/f697d292a3ab6bf3114d5f7055c908203efbc8e0)) -* fix settings menu ([2b728fd](https://github.com/pietervdvn/MapComplete/commit/2b728fdf8bd6effce1682119f7f0d67a13d1c97d)) -* fix styling of translate button in titles ([0a8164c](https://github.com/pietervdvn/MapComplete/commit/0a8164c378ca4aaa1e34dc3bbd4e2741e5bc6318)) -* fix tests; use OAuth client id from dedicated MapComplete account ([fc9dd46](https://github.com/pietervdvn/MapComplete/commit/fc9dd462399a3b7ed8959c38c4a97f24895f9ca8)) -* fix translate icon, fix [#1832](https://github.com/pietervdvn/MapComplete/issues/1832) ([064c601](https://github.com/pietervdvn/MapComplete/commit/064c60163c19e55d098e1b1061cf3b8df3dcf782)) -* fix UK-Addresses themes again ([370b200](https://github.com/pietervdvn/MapComplete/commit/370b200bb33f26db448e5d3feda2107f2224d232)) -* fix updating of styles ([650c1a6](https://github.com/pietervdvn/MapComplete/commit/650c1a675c783179482338f449ca1202246916a0)) -* fix validation of question input; remove some obsolete logging; stabilize output of generate:translations wrt newlines ([1f39ba9](https://github.com/pietervdvn/MapComplete/commit/1f39ba9ab50f63e04be89f676aa82c04d5bb2f94)) -* fixes to etymology: load wikidata on mobile (which uses m.wikidata.org, tripping the CSP); fix 'upload image of the streetsign' parameters ([480956d](https://github.com/pietervdvn/MapComplete/commit/480956d45dc767c77848ba32b176af373e73060a)) -* force downloading (without cache) before uploading ([b85b2ac](https://github.com/pietervdvn/MapComplete/commit/b85b2ace0b373aeae1b9cef8e748ddea7cd3ca5c)) -* force redrawing the questions in a questionbox to avoid rendering artefacts and unselectable items ([f7e2dc7](https://github.com/pietervdvn/MapComplete/commit/f7e2dc7457f366d9cf4722beccfe6b16467ab435)) -* generate layeroverview ([ce654cb](https://github.com/pietervdvn/MapComplete/commit/ce654cbcf9d7164121ee539836c3f7775d93365d)) -* generate layeroverview ([e71a1c7](https://github.com/pietervdvn/MapComplete/commit/e71a1c7a3d011b921c6ff08dcc54f93dd84971dc)) -* generateCSP ([a612d4e](https://github.com/pietervdvn/MapComplete/commit/a612d4e1c2f6469c7b2d1fc66c8fc416ccdcac1a)) -* generating layeroverview; performance: do not try to download ratings if no ratings element is present ([fc62d41](https://github.com/pietervdvn/MapComplete/commit/fc62d41e1b832278bb0c846ffcaa971273419730)) -* giving a review is possible again ([0879ff9](https://github.com/pietervdvn/MapComplete/commit/0879ff97ed4b0b5de572dbf50cc45433b60423f2)) -* giving a review is possible again ([a75fc0d](https://github.com/pietervdvn/MapComplete/commit/a75fc0d21550495ea2e579922af9b27b2b2a6e22)) -* gps-icon should turn into an arrow again ([ef93ad1](https://github.com/pietervdvn/MapComplete/commit/ef93ad126f5c6b973fb2f66c368522ebdee07543)) -* handle NBSP in svg ([4190bf7](https://github.com/pietervdvn/MapComplete/commit/4190bf79339330601b4d6d426c45cfc6e431ef61)) -* hash would not clear because the update method unregistered itself ([8dd7f34](https://github.com/pietervdvn/MapComplete/commit/8dd7f34ad733080e9e5e648a91942528d96857ed)) -* hidden theme link not working ([d5e128b](https://github.com/pietervdvn/MapComplete/commit/d5e128b1ed71fb7be7402bbe4ed86edcd6e5a6b0)) -* hide 'addnewpoint'-icon when closing the dialog ([499ad85](https://github.com/pietervdvn/MapComplete/commit/499ad85f1efd0aefd2cf757198eaef5af037c7ee)) -* hide some elements of the UI if they are disabled by a featureSwitch ([17503d5](https://github.com/pietervdvn/MapComplete/commit/17503d5bfb63c5c03968c96f15c2c5a674a3ede3)) -* hide tag_apply_button when applied ([622df2d](https://github.com/pietervdvn/MapComplete/commit/622df2df19ce4fa7049447995194d0f28b91d59f)) -* icons for rental in cyclofix theme ([02064a2](https://github.com/pietervdvn/MapComplete/commit/02064a2d8078b07aeb9e282700018c86638c4683)) -* ifnot-value would show up together with the 'if'-value ([15f1a93](https://github.com/pietervdvn/MapComplete/commit/15f1a9362c624d3fec9680efa3e38edf912cbaf1)) -* import ([98ca6aa](https://github.com/pietervdvn/MapComplete/commit/98ca6aa8aaac923b57d12f52b41f5ee13412b0a2)) -* improve background layer switching code, might improve [#1481](https://github.com/pietervdvn/MapComplete/issues/1481) ([33fa11f](https://github.com/pietervdvn/MapComplete/commit/33fa11fc1728f017644977be2181c25441a76e18)) -* improve deployscript for hetzner ([dcd02e9](https://github.com/pietervdvn/MapComplete/commit/dcd02e9ad772346bc3f69ebd9563af80ea30810e)) -* improve error message ([7f6c1f0](https://github.com/pietervdvn/MapComplete/commit/7f6c1f06e23cb249d2eadda9be08b1cafc680d30)) -* improve first-sentence ([7aee442](https://github.com/pietervdvn/MapComplete/commit/7aee442ae49a7a68821917de9580ce9e62105edf)) -* improve functionality of GRB-theme (WIP) ([b86e291](https://github.com/pietervdvn/MapComplete/commit/b86e2910baba5fe37cf5c0f53a64966c85d159ce)) -* improve optimization; add tests ([595503c](https://github.com/pietervdvn/MapComplete/commit/595503cfc35c8db3cb4ee4b28f82b7c91ee75dff)) -* improve parsing of possible mapillary values ([3d54a83](https://github.com/pietervdvn/MapComplete/commit/3d54a8392be94a369bf388dad0f83f60fb5a5474)) -* improve PDF-output functionality ([215286a](https://github.com/pietervdvn/MapComplete/commit/215286a5af46c58a197bf85b9561c26eff5bd8fe)) -* include 'source' and tile URLs from vector tile sources into CSP, see [#1652](https://github.com/pietervdvn/MapComplete/issues/1652) ([09504e1](https://github.com/pietervdvn/MapComplete/commit/09504e18ecb4b85ceb6562fcdb0e21034e496ad8)) -* include japanese dot as sentence separator ([d2c6689](https://github.com/pietervdvn/MapComplete/commit/d2c668922b7ac5dc682461c6789fbbdb37fad8c3)) -* include lod-proxy in CSp ([087c099](https://github.com/pietervdvn/MapComplete/commit/087c099e2e633237b00748ee5d3dbba454999881)) -* incorrect path in error message ([5da8952](https://github.com/pietervdvn/MapComplete/commit/5da895276c5d5447bea7094d81d371e99458ff7e)) -* **index:** search got confused as it didn't have an id for the list items ([6f42884](https://github.com/pietervdvn/MapComplete/commit/6f4288476eebf7b0e8af6177bff066d06f3823dc)) -* init indexedFeatureStore with a default map as to fix crash upon loading if a pending change is present ([377c411](https://github.com/pietervdvn/MapComplete/commit/377c411143c577752014842bbc205093c9ebfdc4)) -* initialize user settings with a strict value to be able to override it ([57e0093](https://github.com/pietervdvn/MapComplete/commit/57e0093e478f541c46145a72dbfb9fc70d467633)) -* interpret missing level tag as 'level=0' ([5d8b422](https://github.com/pietervdvn/MapComplete/commit/5d8b42216236d49b6bcf328e8a009884f697e312)) -* keep map mouse-interactive when panning with arrow keys, some CSS-tweaks ([512bb4c](https://github.com/pietervdvn/MapComplete/commit/512bb4c00e1fed39927c8bd40aaef378db64d648)) -* layers now compile again ([1c99173](https://github.com/pietervdvn/MapComplete/commit/1c99173f32112b332ce38f926623fa2c27f89ab8)) -* lines with opacity have colour again ([f0d9365](https://github.com/pietervdvn/MapComplete/commit/f0d9365e06eb533f0bf0a47c21ce58834fc5cabd)) -* load element if set in the hash ([9090dda](https://github.com/pietervdvn/MapComplete/commit/9090dda6889a4e4eda33b9d634fb22da3aedadd8)) -* load translations for PDF-export internally ([d103911](https://github.com/pietervdvn/MapComplete/commit/d103911d143803c9e0373a673110009a785f94da)) -* loading oneway arrows on multiple layers; fix nullpointer ([1678427](https://github.com/pietervdvn/MapComplete/commit/16784270ce45560520d4e9b19d81bd04da7033ee)) -* long domain names cause horizontal scroll with taghints ([eb47c4d](https://github.com/pietervdvn/MapComplete/commit/eb47c4d5b9a0379cc87b773c73638965fb247ee8)) -* make levelselector clickable again, fix [#1416](https://github.com/pietervdvn/MapComplete/issues/1416) ([8b5daef](https://github.com/pietervdvn/MapComplete/commit/8b5daefc9063c818eeea6e044167787feb31d4b5)) -* make sure that a 'hidden' tagRendering cannot be accidentally selected ([5585f02](https://github.com/pietervdvn/MapComplete/commit/5585f02cad0c737f99c16433d7a61f3a5f3743d3)) -* make sure that the passed-in-location of the map is respected, prevents random jumps in the location input ([5c01f6a](https://github.com/pietervdvn/MapComplete/commit/5c01f6ada95ab1410310d4f084f593b6f561cc53)) -* make sure the background is always below the rendered layers ([2769747](https://github.com/pietervdvn/MapComplete/commit/2769747737964a509897ccce4702a9ea9ebefcd8)) -* make text a translation ([418e0cd](https://github.com/pietervdvn/MapComplete/commit/418e0cd149f1af50527e1f1f2c6fbec254779681)) -* make top and bottom panels click-through ([0db6a89](https://github.com/pietervdvn/MapComplete/commit/0db6a8977716e33bfa775bd731e994bf9facf0c9)) -* maproulette endpoints ([bbf6d62](https://github.com/pietervdvn/MapComplete/commit/bbf6d62c866950476ee34ff735352d8cc38daa7a)) -* maproulette import flow ([5f7cc35](https://github.com/pietervdvn/MapComplete/commit/5f7cc351c9fb3743ab1cba65327611f730440ec5)) -* maproulette item ([b6b77da](https://github.com/pietervdvn/MapComplete/commit/b6b77daef78bdc111530ec1fb17820c4fb042e57)) -* markers can rotate again ([5e453d5](https://github.com/pietervdvn/MapComplete/commit/5e453d5cf19fb63ef7516ad11e53aad4e0006bdc)) -* markers now appear correctly on PNG exports ([e5b3e15](https://github.com/pietervdvn/MapComplete/commit/e5b3e15c43672933fc3f1f6a59960514961ce377)) -* MC would crash if a pending change was present; remember preferences in order to reuse the changeset ([f2375f4](https://github.com/pietervdvn/MapComplete/commit/f2375f4877316193132f4ae4189ef5b65e7ef710)) -* metatagging of width theme ([c4ff70c](https://github.com/pietervdvn/MapComplete/commit/c4ff70ce656e941574a31120f3971375ecc7ba4c)) -* minimap takes to much space ([037c593](https://github.com/pietervdvn/MapComplete/commit/037c593f61b3adfd4ac314aef063e20049ce3cb7)) -* missing commas in elevator.json ([229e605](https://github.com/pietervdvn/MapComplete/commit/229e60538b4d9002875a63ad877324941dd4647d)) -* Move image preview below FloatOver, the popup otherwise hides the image preview ([df1fef2](https://github.com/pietervdvn/MapComplete/commit/df1fef28c02b08a1ba13e4fbd8bc6f15d6c7913c)) -* move lastClick to bottom anchor ([beea00c](https://github.com/pietervdvn/MapComplete/commit/beea00cbf079ad0c109c78d2828b7359479f0717)) -* multianswer with a free textfield did not activate ([649ed1f](https://github.com/pietervdvn/MapComplete/commit/649ed1f53a7948bafda45aab36ed214d1808b51e)) -* multianswer would not accept last option ([6f5c71e](https://github.com/pietervdvn/MapComplete/commit/6f5c71ed5a17147d5fc8c9da9f194a61f18fbb30)) -* no more duplicate link showing up, avoid crash ([7be01d5](https://github.com/pietervdvn/MapComplete/commit/7be01d5b8f789576b8b74bf07824ed660d9339a1)) -* normalization of URLs, formatting, stabilize inputHelper ([441c4df](https://github.com/pietervdvn/MapComplete/commit/441c4df4f6d3e26cf866418e5ddaea90bedd2c6a)) -* only check browserLanguage if navigator is defined; fixes tests ([a1fa3b4](https://github.com/pietervdvn/MapComplete/commit/a1fa3b494259d7cc8f4873af31d5c9a987cef972)) -* only show 'newly created' if version number is 1 or unset ([1a78ecb](https://github.com/pietervdvn/MapComplete/commit/1a78ecb85806db67f6e51e39a0882c038589a058)) -* only show fixmes on high zoom level (performance), add the option to remove a fixme ([2f5091a](https://github.com/pietervdvn/MapComplete/commit/2f5091a8cb484681d69db0ea6578dd7d26eacef7)) -* only show website icon if a website is known ([46244b8](https://github.com/pietervdvn/MapComplete/commit/46244b8345c0005f3b3648a3379149d243cfe897)) -* open correct menu if set in hash ([7a95334](https://github.com/pietervdvn/MapComplete/commit/7a953348824f6d601c16a0e632aac8353e0283fb)) -* open settings again ([894d857](https://github.com/pietervdvn/MapComplete/commit/894d857cdc35864bbd778925ef84a042d6e04aaa)) -* opening the popup if defined in the hash ([196d76d](https://github.com/pietervdvn/MapComplete/commit/196d76d9dc8736667956ad803cf5aed15f3b682e)) -* ordering of baselayers ([8379a89](https://github.com/pietervdvn/MapComplete/commit/8379a894d0fc826e33d24d05b3e44852556a60b1)) -* output tailwind into 'public/css/' instead of 'css/' ([a1f5032](https://github.com/pietervdvn/MapComplete/commit/a1f50322321d878d823ac3fc70021683dbb6ab69)) -* overpass feature source will redownload if the layers to download have changed ([bae4974](https://github.com/pietervdvn/MapComplete/commit/bae49744d95e350f7b4c1b031b8e4a178879deea)) -* overpass feature source will redownload if the layers to download have changed ([7ed5307](https://github.com/pietervdvn/MapComplete/commit/7ed53076fe206f0e260d329844eb1d8898206b01)) -* pass along initial coordinates with the location input, prevents flashing of the ocean; fix [#1469](https://github.com/pietervdvn/MapComplete/issues/1469) ([790c276](https://github.com/pietervdvn/MapComplete/commit/790c2767e2dfbdca65f56ec95bf3cd69a98e4301)) -* pass properties of snapping feature in newPointInput to render correctly ([c80085d](https://github.com/pietervdvn/MapComplete/commit/c80085dfda58c9eb73fda466d8d81731095f1672)) -* personal theme crashed due to unset defaultIcon ([6075b01](https://github.com/pietervdvn/MapComplete/commit/6075b016485808352ae84a12d5b872482693411a)) -* png correctly outputs all markers now ([905f796](https://github.com/pietervdvn/MapComplete/commit/905f796baa26b8eedc177ce7f58353331e432535)) -* precise location input picks correct location (and not the previous click) ([6d337e8](https://github.com/pietervdvn/MapComplete/commit/6d337e877589f49ed1b4b1dc60ae232dd6634342)) -* preciseInputPicker will show correct icon if snapped or not snapped to a wall ([9870391](https://github.com/pietervdvn/MapComplete/commit/98703914ca48afefb614e1f19eb15663ab3280b7)) -* presets will now also show if the layer doesn't have a name and is shown ([3f18ce7](https://github.com/pietervdvn/MapComplete/commit/3f18ce7fd387a4f60db5863cfa4f759eaf34edff)) -* pressing enter would ignore input ([95c41d6](https://github.com/pietervdvn/MapComplete/commit/95c41d672ee7f5556645925d09610f0bf36ee1c0)) -* probably fix black area outlines ([0bd9e1e](https://github.com/pietervdvn/MapComplete/commit/0bd9e1e667e659cf1b856e2aece94696089b9a20)) -* properly add 'self' to connect-src ([441a9a5](https://github.com/pietervdvn/MapComplete/commit/441a9a5ed9e5b6a37356e0f15967f66799419572)) -* properly add 'self' to connect-src (take 2) ([c823e74](https://github.com/pietervdvn/MapComplete/commit/c823e745a3e0b562ddfdb489541182ed17449336)) -* properly show hidden themes, drop 'custom theme generator'-button, drop 'professional services' button ([93adfd3](https://github.com/pietervdvn/MapComplete/commit/93adfd3da592cbf2f177123802f69a7c4fc72637)) -* questions are shown if the condition is met, fix [#1630](https://github.com/pietervdvn/MapComplete/issues/1630) ([8500276](https://github.com/pietervdvn/MapComplete/commit/85002766a8d3b8d0d4ad31410437bad72ae7ca03)) -* questions now appear when reselecting an item ([0c5e88d](https://github.com/pietervdvn/MapComplete/commit/0c5e88df7b5bdad82bf2e67b45aa817e29ca4fde)) -* questions of charging stations are now shown separately again ([fe9afb4](https://github.com/pietervdvn/MapComplete/commit/fe9afb415ff68c0b8e35fcb41fc68330a41a2b08)) -* questions of charging stations are now shown separately again ([30af019](https://github.com/pietervdvn/MapComplete/commit/30af019cdfe8dea845e92645d0ec859e439a2b90)) -* re-enable generate command ([13a35b9](https://github.com/pietervdvn/MapComplete/commit/13a35b94202ef775598fc7130b60b8839cef514a)) -* re-enable reservation question ([cebd428](https://github.com/pietervdvn/MapComplete/commit/cebd428e9ec58b708637ae34055a5c689e3004cd)) -* re-enable speed and heading in GPS-cursor ([ff47d75](https://github.com/pietervdvn/MapComplete/commit/ff47d75d41fc1fd4f576cd483150fe27cb3942d3)) -* readd missing files ([7d802d4](https://github.com/pietervdvn/MapComplete/commit/7d802d418bd52bf29b147c245e548a7704e2d45f)) -* redraw line layers on background change ([6e5fcde](https://github.com/pietervdvn/MapComplete/commit/6e5fcdef205d4616305d2bca39a1904d60954003)) -* reinstantiate uploads ([871d511](https://github.com/pietervdvn/MapComplete/commit/871d511616ae48055095e8c3485db762adc6b140)) -* remember map rotation setting ([c764839](https://github.com/pietervdvn/MapComplete/commit/c764839fdcefff316b9458067e462f282a2fe7d5)) -* remember previous, externally loaded themes ([b61c0a1](https://github.com/pietervdvn/MapComplete/commit/b61c0a11807585a1832ff410be362e74ae2a810b)) -* remove 'icons.defaults' from favourite layers, cleanup of various small typing errors ([e8569ec](https://github.com/pietervdvn/MapComplete/commit/e8569ec5404e632ebae0c71b040c1d9a9b891583)) -* remove all html-attributes from shortDescriptions in the theme overview ([39572f4](https://github.com/pietervdvn/MapComplete/commit/39572f4767f270a4a5a40d8973ae9824ac3a43d1)) -* remove empty license files, fix [#1135](https://github.com/pietervdvn/MapComplete/issues/1135) ([2eabfea](https://github.com/pietervdvn/MapComplete/commit/2eabfea8af22a3810487cdacd68d850f4432e624)) -* remove ghost bike translations from translation files and resync them, should fix the build ([0487497](https://github.com/pietervdvn/MapComplete/commit/0487497e17ace04d381d2c9d43b02f8032874e2f)) -* Remove isOpen from defaults ([11b8c61](https://github.com/pietervdvn/MapComplete/commit/11b8c619c165f6d66fed03061ad9afa052a7a096)) -* remove no longer needed translation ([0e893f7](https://github.com/pietervdvn/MapComplete/commit/0e893f7903d68f37936c9b87883ffdc31b9ff088)) -* remove no longer needed translations ([3c74a94](https://github.com/pietervdvn/MapComplete/commit/3c74a94eee676a8ff0fc2b0b85f1bf8d7487d216)) -* remove trailing ';' for opening hours, as spotted by Midgard ([36b086e](https://github.com/pietervdvn/MapComplete/commit/36b086e4141e70253e68aec59d099638d46d14af)) -* remove unneeded translation download, fix PDF-export ([1930f7b](https://github.com/pietervdvn/MapComplete/commit/1930f7bb53f4d477c2529471b478db77ddcc012b)) -* remove unneeded URL parameter ([365d573](https://github.com/pietervdvn/MapComplete/commit/365d573b7c0d36bfa675cc637e6223abe770f3a0)) -* remove unused property ([99b0135](https://github.com/pietervdvn/MapComplete/commit/99b0135fa9b44639189a1c9e690cf5829010c6e7)) -* rendering of 'inline' was not dynamic ([60d825d](https://github.com/pietervdvn/MapComplete/commit/60d825de3c94afad79351f492c691af3d2109f60)) -* rendering of indoor room icons ([6235e23](https://github.com/pietervdvn/MapComplete/commit/6235e231922b64adba86b012422175347a9887c1)) -* replace all mentions of 'mapcomplete.osm.be' with 'mapcomplete.org' ([7321004](https://github.com/pietervdvn/MapComplete/commit/7321004c19212b0849394b9d541583e52e4ec5e6)) -* reset translations ([ad952fc](https://github.com/pietervdvn/MapComplete/commit/ad952fcaf284b1669cee4657389cf36a52ee334c)) -* resize svgs ([89186c8](https://github.com/pietervdvn/MapComplete/commit/89186c8610185e56bf9afa78b2765c45b2a939bd)) -* restore loading of custom themes ([bcb2ecf](https://github.com/pietervdvn/MapComplete/commit/bcb2ecf6ab6c372cd41dd79780b027c79cb4a49e)) -* reviews need an uncertainty ([bc96288](https://github.com/pietervdvn/MapComplete/commit/bc96288d3d75f24fb12620d050f472029c5df135)) -* rotation of the GPS-marker ([bbc7698](https://github.com/pietervdvn/MapComplete/commit/bbc7698b1281ad654c00c54bf58b9de7ba1e71e6)) -* safari-specific fixes ([059ef2c](https://github.com/pietervdvn/MapComplete/commit/059ef2c1bc2ea5fb377a0f1e253652c0c243e250)) -* schemaBasedArray ([a7599f6](https://github.com/pietervdvn/MapComplete/commit/a7599f6d7f5a061cb1971ee8170f9f039ea2e2de)) -* set share capability to 'no' if running from console, fixes tests ([af7bc0f](https://github.com/pietervdvn/MapComplete/commit/af7bc0f7ce686147608256e1c5dd0a9d24388945)) -* setting the language does not overwrite the user setting anymore ([c6283ac](https://github.com/pietervdvn/MapComplete/commit/c6283ac7205f69c1a42e8cf16e5f4f1ab2c239f8)) -* share button ([84cbd2f](https://github.com/pietervdvn/MapComplete/commit/84cbd2fbc00d3d9e386a3b485dd4fa61c8000722)) -* show add new point fullscreen again ([aad31f6](https://github.com/pietervdvn/MapComplete/commit/aad31f649e733d108c63297aa6d25bf87ac73c34)) -* show preferred languages (according to OSM) in usersettings ([0ea103f](https://github.com/pietervdvn/MapComplete/commit/0ea103f24780ef2c6ba191cbd4891716bb2d86f6)) -* show tags that will be applied if setting is 'full' ([0b82661](https://github.com/pietervdvn/MapComplete/commit/0b826612e93c0b120f99b6927c57c13b60c2835f)) -* show tags that will be deleted with strikethrough in TagHint ([15a481f](https://github.com/pietervdvn/MapComplete/commit/15a481f864b4afb7b650fd150f0ce7d46c9d1e78)) -* size of new element picker map ([#1701](https://github.com/pietervdvn/MapComplete/issues/1701)), add debug info about GPS ([9407ed3](https://github.com/pietervdvn/MapComplete/commit/9407ed35b109660a9b23c2b71fd15f3ecf1dc0d0)) -* small bug in script ([795d6d2](https://github.com/pietervdvn/MapComplete/commit/795d6d2e072d13c1d64259ac8ff960d618c2deba)) -* small CSS fix ([1b8970b](https://github.com/pietervdvn/MapComplete/commit/1b8970b34aae337edfe5567315cc36319add1ff7)) -* SPDX-compliance ([6c4b464](https://github.com/pietervdvn/MapComplete/commit/6c4b464f14ed2851980da34e12df355cb8137ba7)) -* special loginbutton now actually works ([6a4def6](https://github.com/pietervdvn/MapComplete/commit/6a4def67ca97b55beb26445a0ddb713149527cc5)) -* stabilize change injector ([efdff63](https://github.com/pietervdvn/MapComplete/commit/efdff6335f5075f74156b5b1258ae69ab058705b)) -* stabilize opening hours, make delete clickable again ([cc60d2a](https://github.com/pietervdvn/MapComplete/commit/cc60d2a5fbae3a14d63aa859fa02e2b09e1e48f9)) -* stabilize rendering of linelayers ([055e5a8](https://github.com/pietervdvn/MapComplete/commit/055e5a801b60276cdfcf31870fae29e6af30521b)) -* style issue, types ([5932dc7](https://github.com/pietervdvn/MapComplete/commit/5932dc7ad4b532c45d6e6bff95f46f6cb26645b2)) -* style of tabbedGroup-elements needed an 'important' to work in production ([5a2e54b](https://github.com/pietervdvn/MapComplete/commit/5a2e54b00a86b4ac0f91b69aa55ff3c36939e8ab)) -* style tweaks to link feature ([bd71645](https://github.com/pietervdvn/MapComplete/commit/bd71645c04e819a28c355da5c898293092b51068)) -* styling issues; refactoring: remove 'SearchAndGo' ([0e81b65](https://github.com/pietervdvn/MapComplete/commit/0e81b653631a97699ba07ce5d34b61bc4422a5d1)) -* styling of OH input, fix [#1489](https://github.com/pietervdvn/MapComplete/issues/1489) ([064f875](https://github.com/pietervdvn/MapComplete/commit/064f87537f450e40b76d936d7793ea9036b2b181)) -* styling of PH-input in OpeningHoursInput, fix [#1422](https://github.com/pietervdvn/MapComplete/issues/1422) ([a9c25d3](https://github.com/pietervdvn/MapComplete/commit/a9c25d378a709e3ac7b4a76919ae10cf405dacec)) -* substitute name ([408e782](https://github.com/pietervdvn/MapComplete/commit/408e7826269dc30d97f89e6e1fd097dae69b7923)) -* substituteKeys works correctly if newline is in the text, fix 'send email to report broken'-button by porting it to svelte ([b4f65bf](https://github.com/pietervdvn/MapComplete/commit/b4f65bf2f7ce2a6993906076353acc11a1d64d94)) -* subtleLink should not open in a new tab ([61c417c](https://github.com/pietervdvn/MapComplete/commit/61c417c546e828dbed2356c35eebfe4cf2ef403d)) -* Support contact:email and contact:phone in icons ([7bcefe5](https://github.com/pietervdvn/MapComplete/commit/7bcefe527ce080b3f7b7c48fdd1a828289b126c3)) -* svg image generation script ([f9b1e9b](https://github.com/pietervdvn/MapComplete/commit/f9b1e9b2de8f4aa657272d714385c1c7fbfdb3b3)) -* temporarily only warn for incomplete translations ([adb5d89](https://github.com/pietervdvn/MapComplete/commit/adb5d892fb39cdf63ea65d95ef5079f0efed6324)) -* tests ([238de89](https://github.com/pietervdvn/MapComplete/commit/238de89ad54fd0c8c0d4bf75f49282d7921f21a2)) -* tests ([841be16](https://github.com/pietervdvn/MapComplete/commit/841be16dffd8219713a1bc00b9a8409195a8f82d)) -* tests ([1d54356](https://github.com/pietervdvn/MapComplete/commit/1d543563d702f6af424e1df041191632126ed805)) -* tests ([2a73c43](https://github.com/pietervdvn/MapComplete/commit/2a73c43a5fc652f7d91c8d89cf47d0ce8853ee62)) -* the search bar on the theme index was not clickable on wide screens as the 'centermessage' hovered over it invisibly ([af7672a](https://github.com/pietervdvn/MapComplete/commit/af7672a0e00de4e3d75a85678b4528093515fb7e)) -* theme compilation ([86d0de3](https://github.com/pietervdvn/MapComplete/commit/86d0de380644c92fe90f4dd87aa4399074fdc42e)) -* **themes:** remove 'unkown' mapping from hydrants, the unkown case is handled by MapComplete ([4850e50](https://github.com/pietervdvn/MapComplete/commit/4850e5094a49a16d3975795fd1f25a81f2e13a5a)) -* turn favourites black again, sync them globally ([14594b2](https://github.com/pietervdvn/MapComplete/commit/14594b286dd2278bc64ed27f0305b76596d7e190)) -* tweaking addNewPoint-flow ([d0e0abd](https://github.com/pietervdvn/MapComplete/commit/d0e0abdece560799a9770b74d0992c42ebe89ed6)) -* typo ([929093d](https://github.com/pietervdvn/MapComplete/commit/929093d36f13ab1861d533f4d93152a7ddd1e6dc)) -* typo ([2671d01](https://github.com/pietervdvn/MapComplete/commit/2671d0158983c7befb9f5c8d3e91544a50408c6b)) -* typo ([752de10](https://github.com/pietervdvn/MapComplete/commit/752de107ab6a50f8e513b0c7307b44dc6094d974)) -* typo ([8531571](https://github.com/pietervdvn/MapComplete/commit/8531571c7be653339d752f953a8725d94eec692c)) -* typo ([de99f56](https://github.com/pietervdvn/MapComplete/commit/de99f56ca8fe34e361a7c6345d147f8295293f57)) -* typo ([3a25106](https://github.com/pietervdvn/MapComplete/commit/3a25106a5ab7bd958cfe731d8e1e959b5b07b23e)) -* typo in charging_station.protojson ([21d01a4](https://github.com/pietervdvn/MapComplete/commit/21d01a46f9164a872145c03fe845233c6cd47f8b)) -* typo in elevator.json ([374a4eb](https://github.com/pietervdvn/MapComplete/commit/374a4eb22211ecfbe8a04569d89b8236f109b8ed)) -* typo in filter ([366577f](https://github.com/pietervdvn/MapComplete/commit/366577f70b40765b3e10ccae222193ca07cae4bb)) -* typo in tag ([a903112](https://github.com/pietervdvn/MapComplete/commit/a9031129d3dddfdd0ab1d2d83d371b872a0d5180)) -* **typo:** s/bick_wal/brick_wall/ ([753efef](https://github.com/pietervdvn/MapComplete/commit/753efef38f1f1a4f731c0c66408c7adddb26a967)) -* undo accidental changes, fix saving preferences ([ff3a7f8](https://github.com/pietervdvn/MapComplete/commit/ff3a7f8f4372d46b0aba61aa12115da4207f2331)) -* units which used a 'string'-validator might not detect the actual denomination. They have now been forbidden and fixed ([7b497f9](https://github.com/pietervdvn/MapComplete/commit/7b497f991d788c991457f1167d472a77f2789cdc)) -* unselect layer, prevents that 'lastClick'-popup opens on map click ([63ffa11](https://github.com/pietervdvn/MapComplete/commit/63ffa11238766962cab6b1c8cedcd0153504d45e)) -* update and simplification of sharescreen, rename some feature switches, remove some no longer relevant feature switches ([96d0367](https://github.com/pietervdvn/MapComplete/commit/96d036781f55987732629355be118373c363830d)) -* upload flow deals better with point reuse: it actually opens the feature now ([c14cbc9](https://github.com/pietervdvn/MapComplete/commit/c14cbc9fe95bf1d2432ea7290cae0d0f7a9b6ada)) -* uploads were broken ([efd6b30](https://github.com/pietervdvn/MapComplete/commit/efd6b30e1b41024ee4b7c0f6cf69a49f87f5da69)) -* URL-parameter language disables the language picker, fix [#1506](https://github.com/pietervdvn/MapComplete/issues/1506) ([3ca8ba1](https://github.com/pietervdvn/MapComplete/commit/3ca8ba18fd6a1569214f5d6298eca291cb8ceefc)) -* URL-parameter language disables the language picker, fix [#1506](https://github.com/pietervdvn/MapComplete/issues/1506) ([2f5c89f](https://github.com/pietervdvn/MapComplete/commit/2f5c89f8c5a7aa7adbe83d1b9cf98e198f9f1aab)) -* use api.openstreetmap.org on many places, fix [#1573](https://github.com/pietervdvn/MapComplete/issues/1573) ([8fccf78](https://github.com/pietervdvn/MapComplete/commit/8fccf784786074e22a4d437dc8a38c58bf54c375)) -* use correct backend address (including www.) ([c320239](https://github.com/pietervdvn/MapComplete/commit/c320239610f15083d1d050f17e337780621f7dc3)) -* use correct branch to deploy ([9c0dac2](https://github.com/pietervdvn/MapComplete/commit/9c0dac28ad0604026936cc68c5238927978b250a)) -* use correct relocation icon again ([cdb1bb2](https://github.com/pietervdvn/MapComplete/commit/cdb1bb23b8e5df8bd1f2e0732ff14f3bd55935f5)) -* use correct snapping ([ec2e0e1](https://github.com/pietervdvn/MapComplete/commit/ec2e0e1de168f9f4551f86ff73b070a6e4ccdd77)) -* use https for extractGraph endpoint ([f89123d](https://github.com/pietervdvn/MapComplete/commit/f89123d318ebb24553b842884e0aad3b9adf6570)) -* use proper circle for bench and artwork ([e2a56f5](https://github.com/pietervdvn/MapComplete/commit/e2a56f5e5cc469c95974625f561a4a5229b5cb9a)) -* use proper selected element ([dbff953](https://github.com/pietervdvn/MapComplete/commit/dbff95309642178dcccb4a0a365a263c722c5a96)) -* use theme.html?layout= instead of layout.html if a local deploy is detected ([db67600](https://github.com/pietervdvn/MapComplete/commit/db6760015f69239dc51cc47c866635927cd9dadf)) -* use translated value for community index tab ([a3a7c53](https://github.com/pietervdvn/MapComplete/commit/a3a7c536fbce04698a05847da429d1bacc851aad)) -* use translated value for community index tab ([22ee806](https://github.com/pietervdvn/MapComplete/commit/22ee806090a8679ea2951d84af47e4de8314925c)) -* use www.openstreetmap.org again, it doesnt work ([580b58e](https://github.com/pietervdvn/MapComplete/commit/580b58e86a974432b068b073a047c22864621126)) +* _actually_ fix [#1706](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1706) ([6577007](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6577007717910bf46086490da8e9d549b63f1891)) +* _actually_ run the *.spec.ts-tests... ([82a860c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/82a860cbf5bad2ab1b4d9b806e9f18e4d5cbc054)) +* [#1093](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1093) ([5a6ed7b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5a6ed7bf21aaaf677c05e572afacd53443eb2d59)) +* [#1685](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1685), fix oopsie ([d96fe61](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d96fe614624771bed99c418bbc9bb4f09ce7bd3a)) +* a freeform key will mimick a mapping if appropriate (and avoid the 'addExtraTags') ([68ea4e3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/68ea4e3d9f255e989cf158159b434ed6bfc6f55a)) +* actually allow to login via prominent login button ([4be49a0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4be49a0561531c729d9d46d5e99571056d2492df)) +* actually apply preferred background layer ([b69c2de](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b69c2de3f41e7737ceec919214f0748634d9dfd3)) +* actually attempt to login when login button is pressed ([f1de8a3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f1de8a3d9dafad4860ebb380c113ff2f253d13db)) +* actually deploy on the production repo ([ca89956](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ca899561d55626b9c2c14f90d60d01c8c1276823)) +* actually include _all_ features ([8f7b731](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8f7b731d29ca7daec1063a6833716e86333b0ffd)) +* actually load geojson layers; formatting ([cbc4e6e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cbc4e6eb15a2a6d7f9693a24f35839886b4f3544)) +* actually open usersettings when license is clicked ([c10fecb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c10fecb7e8293190b07a2fc3ff90b6f830a75103)) +* actually pass the initial coordinate in the locationInput element, fix [#1486](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1486) ([68e07d7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/68e07d7d7beca5b4ea26b9fc6ff964014d28af4b)) +* Actually show errors in custom themes now ([6a79dde](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6a79dde743264c272e461614ae718044d90a7080)) +* actually show HD image for nearby streetview imager, add loading indicator ([8b6ee87](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8b6ee877f08a584df7d3bc8706292b6eeb11f030)) +* actually show polygon_centroid ([5a957d5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5a957d56c73771a1fa2560dbd8755a7eebe36285)) +* actually show tags on changes when the user has enough changesets ([d702134](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d7021344e890bede888ea3412270420e033207f7)) +* actually upload new themes ([6446586](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6446586ac581fa3994e58dba62a365afde7d5937)) +* add 'maxspeed=20' to living street ([fd9c48b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fd9c48b5b56fe7a08e3532cad777246b82b3a073)) +* add 'onbeforeunload' if images are uploading, see [#1841](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1841) ([ce7bc8f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ce7bc8fb6cc373e96179e57395818d6e6befd942)) +* add 'self' to connect-src ([3bca130](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3bca1305b504ba08203a09916fe849365eca0458)) +* add all global layers to CSP ([93630bd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/93630bd1db9e71f5e62619b2d02aaf18b42222f6)) +* add all needed urls again ([ce1855b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ce1855b2bd322044f9710a4dab38287298ad5fc6)) +* add all vector layers to CSP ([2736740](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2736740cd0d777450f8da7eea76f1defa7993944)) +* add awaitAnimationFrame to fix non-working questions ([d744fd3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d744fd3a42bedb64de7de1562b6f4ee31ba9d254)) +* Add button to go back to the map when showing that a point is deleted, fix [#1417](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1417) ([55903d4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/55903d45f933ebbfd7971a14296fe2dac1b6fa96)) +* add carto vector layers again ([5e2a989](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5e2a98924c2a0efdb1f75a213efe7114df5e0cae)) +* add check for missing 'noopener' attributes; add missing noopener attributes ([6e8617c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6e8617c93fd0fde8f0b27c035625e68d143f9b58)) +* add check that no changeset is opened without actually having changes ([2843b01](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2843b01586fd40a2e0d4dc92861b9d001d1684d3)) +* add correct attribution for maptiler bg layer ([c90b334](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c90b334678ac44346d82302599647236b3c0df09)) +* add default value for setStatus ([eede2d1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/eede2d17dd411a3b27295a9efab8cb69df3b57c2)) +* add dutch translation ([a55b84d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a55b84dba18564e0959bd709b0da0e5b228d3ca0)) +* add execute permissions to build script ([5567869](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5567869bb4ede7a56c174b960aff734de06ea67f)) +* add extra refresh:layeroverview in order to fix the favourites theme icons ([c65ccdb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c65ccdbc240ad5406189e48bd92c40569d19bc3c)) +* add glow effect to bench theme for selected object ([75b1a46](https://source.mapcomplete.org/MapComplete/MapComplete/commit/75b1a467e0307cee94a0af9e482a3ab5e8ac4ccd)) +* add glow effect when dropping an image in the file selector; fix [#1496](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1496) ([426620a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/426620a76c4a6ca86181dec73da90d076f73c9aa)) +* add language picker in settings page if logged out, fix [#1505](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1505) ([a7ff3b8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a7ff3b86faa90e70d3496f973c72b0265f993708)) +* add links and overpass link to cafe_pub ([41b6eea](https://source.mapcomplete.org/MapComplete/MapComplete/commit/41b6eea430cbb6f504deb7a3e4fb5cf493004d6f)) +* add maxzoom to osm.carto-layer, see [#1664](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1664)$ ([5f918b6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5f918b607b9034c5a8ce6bcdd003caf8efe1466b)) +* add missing assets ([f2b8c0d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f2b8c0db0f80bf503f2b4332d66cbede0736f82a)) +* add missing tag ([c5300a3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c5300a3fd5b46e611a4604ad9c0483f823396dda)) +* add new items works again, fix [#1593](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1593) ([c527427](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c527427f70990006b9c71ef472bbe45d2c9bff70)) +* add safety check to not overuse the OSM-api ([4602df3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4602df30469b57a57b9b8e1b8c6cc5c70ff901d7)) +* add script integrity, add check to validate that script integrity is always in place ([08bbbca](https://source.mapcomplete.org/MapComplete/MapComplete/commit/08bbbcabc402abcf328274bb2990d59b47580376)) +* add selection indicator to artwork ([ec99ab2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ec99ab24f806e8d43ae89ab8f33f570f43ce59fb)) +* add support for legacy iconSize to fix some custom themes, see [#1494](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1494) ([200361b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/200361bf8dcd17f47574539137b2c42cb745143a)) +* add text on cancel button ([1208e09](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1208e095cf3fe87a2c9948a0c6666705c14c5e52)) +* add the minimap again ([e83b8cb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e83b8cb19183b53c4d6b24b4f621900fd14280fa)) +* addnewpoint-dialog works again ([8ed0a32](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8ed0a32d153d4a434602c86a85eaf02881f6d480)) +* alias 'urls' as 'website', fix [#246](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/246) ([87e79b8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/87e79b8e8c981f5b0daa105097c514273ce6be3e)) +* allow selection of the first radiobutton ([8fafd0a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8fafd0a8a5701323c6e25210ac6310dc418e31eb)) +* allow to delete freeform values in more cases ([9b78838](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9b78838745f41f3e42f158c9959c695e4160e7e8)) +* allow to link multiple mapillary-images ([286fe72](https://source.mapcomplete.org/MapComplete/MapComplete/commit/286fe729359db1ec36328768a6a7662a9e951ce8)) +* allow to move (non-snapped) points again after fixing [#1809](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1809) ([77f07f5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/77f07f55ecf9140c1c556fb4147c7d5cb74b0645)) +* alltags shows objects as JSON instead as [object Object] ([1df28ab](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1df28ab50199310928974a07809b65e854df1525)) +* also copy png assets ([8f32916](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8f32916454b63939d63c7496f7ba7b30f6f038cc)) +* also show location info on shake if GPS is disabled ([4c5d24a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4c5d24a0a7dacc393c0a4328c99b5e5e08058b0b)) +* always allow www.openstreetmap.org ([6b4be12](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6b4be1200c60664bbbee87f9f8f8e3d821a277c3)) +* always link to the wiki when tags are shown ([8dfef62](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8dfef624323b8b93098150115d93f4089b846fb2)) +* attempt to fix build ([0e8c3b1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0e8c3b10626f6f37e54b8ef96c11fb5dc113fe7a)) +* attempt to fix build ([0e760b9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0e760b908c4955300b9d329f6d7eb9fb475713d3)) +* attributes to answered questions didn't automatically show, questions which became available are now shown if they become avaible because of a tag change. Fix [#1587](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1587) ([7de0af1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7de0af15f100815288fea4fdb13f3e845bc79088)) +* await 'country' to be loaded ([3c5bde1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3c5bde1ae3ff3ed1aa72bb1463a4690e16f941e6)) +* background layer csp fixe ([713e53c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/713e53c41a840ae1e66cb9a36e06e0e9361285bd)) +* better error handling and handling of changes ([7813653](https://source.mapcomplete.org/MapComplete/MapComplete/commit/78136532651ebcea6a2d2d94e42b2775bb9e92e3)) +* better select available levels ([7b73578](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7b73578f88b09ee65f923c363a884d91f20d2fae)) +* broken titleIcons (fix [#1344](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1344)) ([bdcf8a2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bdcf8a26014b01e8128ece897e4b98286722d0e4)) +* browser specific bug which caused the file selector to open twice on chromium; fix [#1771](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1771) ([9893e43](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9893e433f3bb43fbea80beb2a73ea4e271a01491)) +* bug submitted comments on notes twice ([5be4b9d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5be4b9d1fb1e5a5e2cb03e314d4d65370aa44957)) +* build ([cef7e01](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cef7e01a2e7855d214d4a5ca75fc032a2b1d123a)) +* build ([8556196](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8556196acec5652ab39baaaa14ac911cb6dc5a15)) +* build ([dbca260](https://source.mapcomplete.org/MapComplete/MapComplete/commit/dbca2601324cd79d5d2d7d0398d002565d8825de)) +* build ([2a21040](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2a2104055185e1f9fa8f1cad620606b690527a0c)) +* build ([29ee113](https://source.mapcomplete.org/MapComplete/MapComplete/commit/29ee113e30c11edc670331f1fb67f41e08f9ab50)) +* build, some metatagging errors ([0d529e7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0d529e7cca4f044ab4c5fd4491e3704678598862)) +* build; subtle bug ([5644c7a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5644c7a8b87a0fb17e846a4c370ac432cc03ca15)) +* bypass missing favourites in custom theme loader ([6f59e46](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6f59e46befd0ba1df57066400f3d2bbf00166f5b)) +* charging station theme uses anchor too ([39024eb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/39024eb5f3f68b5dba6b10d8dcf07fe2c5c67fbc)) +* charging_station.protojson ([f042ca4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f042ca40701e269a02254289a35acd43aaed05b0)) +* chromium browsers don't handle spaces in `tel:`-links well ([4168ef0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4168ef01e333784f738fafa15d1eb7d7c4c527c7)) +* cleanup merge ([e160510](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e16051025a0f7c827c90db7251596be0c5e902c9)) +* cleanup of wikipedia panel, fix [#1570](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1570) ([203f24f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/203f24fca01047edd2f01ed541fc93841ac1f17d)) +* clicking the magnifying icon actually works now ([5478711](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5478711bed8806d4cd5ae0ffe69ab64f3293fa69)) +* compilation warning ([5851531](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5851531306b2cb2cebfb459e5c5bef284b8c3e94)) +* correct 'sync repo' step ([ecd84c2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ecd84c2cf6174bddad5d1759caeeeea761e1b9f1)) +* correct CSP header for iOs/safari ([54868de](https://source.mapcomplete.org/MapComplete/MapComplete/commit/54868debec137c57b8dd45024332854150cc8f0f)) +* correct default access assumption ([ea06152](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ea061524737b343bec120356b8822d185cdefd85)) +* correct default sed param for BSD sed flavor ([46fe1c5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/46fe1c5795a110c541ed97548c426b205705ff2d)) +* correct faulty name ([0952200](https://source.mapcomplete.org/MapComplete/MapComplete/commit/09522004db01453dcdb9a26670c3d7ef6f4e1eee)) +* correct filters ([4d2d541](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4d2d54175ca5b4af5a258bf7d1b89debab9f8f8e)) +* correct maybe missing option in etymology layer ([a8ecab4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a8ecab4d794c219301d636594933520c87fd8d75)) +* correct merge conflict ([e6d8401](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e6d84019a579daed01a34cf67825689511fd9c0a)) +* correct minzoom on all themes ([bde5878](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bde5878fedae0eac20db8bb4c6eca81f904e20fd)) +* correct sed command to be OSX compatible ([e21eb65](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e21eb6596ee85471b8cbbd6776fa65647786bfda)) +* correct typings ([2f17e6e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2f17e6e53259193c06d1764188a1a9602fbd97bb)) +* Correctly calculate available levels, reselect last_click automatically ([4c962ea](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4c962eab21af8146d9d57f7d12cd08cdd4a642d6)) +* correctly escape markdown ([4d01d81](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4d01d81e1e87ca5a18b6d0fd7b9f232c77cda936)) +* correctly flatten special cases ([7ba0e73](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7ba0e736a87492bc64e5f73811a6c790851c59d9)) +* correctly flatten special cases ([593d7bd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/593d7bd07ac520875c5acfcab5df364fb04dd77c)) +* correctly interpret 'hideInAnswer'-conditions, recalculate them dynamically ([37dc6a7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/37dc6a71616fc9510d1bf6e814060390dd329629)) +* correctly optimize 'key=A&key!=B' into 'key=A' ([d8a5f3c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d8a5f3c2be985c4fcbedfda09564ae5d02e6e5b4)) +* correctly replace fields in filterview ([ae491f4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ae491f491652798344273d18fb42f1d27108ba4b)) +* crash in new note flow, spotted by [@Thibaultmol](https://source.mapcomplete.org/Thibaultmol) ([3e49929](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3e49929f253f8ae1f945d9df4eb3398b39030a43)) +* css-generate script; loading of stylesheet in style_test, add small buttons to style_test ([6bed170](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6bed170910cdf6fd2ca68eb9d1b65779287afa5d)) +* CSV download ([c1bce7a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c1bce7abc76984ddb84f112d1b7367e5822d5763)) +* decent PDF-export ([de20b00](https://source.mapcomplete.org/MapComplete/MapComplete/commit/de20b00b8f8af6796cbab060262d85a5ab171c5d)) +* direction input does not scroll anymore when dragged, fix [#1468](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1468) ([102892e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/102892ec774501b2811179b333217fb81efe33bb)) +* disable 'delete'-button if no reason is selected, fix [#1631](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1631) ([6b6b1e3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6b6b1e32862c7021cff99c2b340a50ae5822cf60)) +* disable check ([b2e7b7d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b2e7b7d221a6dbc12f73505522a5d29bd6d36244)) +* disable rotation on mobile if the user enabled this ([93a30fd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/93a30fdba5edfd91c19050013aa4f58123ce127c)) +* don't attempt to show an osm wiki page as image, fix [#1776](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1776) ([7dc43f9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7dc43f933e84b73f99935ceba4638fe85e376c94)) +* don't count layers if they are not shown by default, fix [#1840](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1840) ([d848171](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d848171c3d795e31a73b10d687b475de30e8f39c)) +* don't crash if 't' is undefined ([b1c4097](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b1c4097cb480785d2e644a3da072055d1778a17c)) +* don't crash if no features nearby ([b6a4cc1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b6a4cc11bdf25c4cf09e55ad802eb0d460311c9d)) +* don't crash if no features nearby ([c2001f1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c2001f17a55937bbc09e52d730828c9234bf30ef)) +* don't measure compass if alpha is null, fix [#1787](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1787) ([3461ed6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3461ed60990fc91e399ef3c4cd082029db2059dd)) +* don't move the map after we jumped to the current GPS location ([f31b025](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f31b025b8dba7218576c58ef6bc2b3101052beb7)) +* don't set invalid coordinates ([fbc3bce](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fbc3bce5109ffa95491b792d4c7870167f9915ba)) +* don't show both counts and summary at the same time ([d6dbeca](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d6dbecace26b9dc52da61d19b767469190a0e8be)) +* don't show duplicate entry of default baselayer if already added ([7ef1628](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7ef1628d87f32240746251b3e7b4bfdfdbebf6cb)) +* Don't show item if there is no label ([7edc730](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7edc7302bbb6f0884e6652a429e00705f64413bb)) +* don't show preset_type special vis if no presets are given ([cf3b414](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cf3b4145ff68871a2040b15ccb6d030b59c448ad)) +* don't show radiobuttons if only one option is available ([8e68ca0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8e68ca03ab33cf91df83f1e1d2750723cfb0370b)) +* don't store location 0,0 to prevent movement or cursor in addNew-dialog ([c19317b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c19317bd04a10db89ecbb95eda9b3156f50c395b)) +* don't throw an error if there is no parent element which can be scrolled ([3166918](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3166918551aab57bdf0777e7bd378003779f8c10)) +* drag & drop for file selector ([5be24db](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5be24dbef1647cd2c6c869d86ea5b37f0e072106)) +* dynamic filtering with non-string values ([58b94c3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/58b94c38e50c5a9c66ac248fe8117b19bac7d05a)) +* effectively show `contact:website` in title icons ([0027299](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0027299a3e373e9cd19deec0b93dd7a7599ff78a)) +* emit warning for invalid suggestions ([56ba426](https://source.mapcomplete.org/MapComplete/MapComplete/commit/56ba426ab5bb2f10ac38776728a67ff4558e0cfa)) +* enable editing questions (and settings) again (oopsie) ([d079ba9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d079ba91aa29395262b8084f811eec26e51750b9)) +* enable external data sources from the ELI ([5ea0804](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5ea08040d7ec40abaabf849ef20771c1a5112637)) +* enable login on index screen ([aface6a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/aface6aea7f1774b62c9218e64cd65bf77b97c0b)) +* enable rainbow question again, fix [#1453](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1453) ([af447a9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/af447a948f3d425565afe5620a97123111d6bf91)) +* enable settings again, fix [#1815](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1815) ([a118c29](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a118c295d641852584bbd16f07c419a3fa896591)) +* error server properly names files, add status endpoint ([37c1d46](https://source.mapcomplete.org/MapComplete/MapComplete/commit/37c1d46dd43a9d75326a4f9187d4bb3846b4a211)) +* escape special characters for wikipedia search, might improve [#1500](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1500) ([ec94253](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ec94253d6c5ef38ee5d5d1c7bc25fff53cd6be82)) +* etymology theme now supports multi-apply again, uses lower zoom level for multiselect ([90869a1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/90869a1c985d992063656d89fe0d95b73184304a)) +* Expose all templates ([09a3e7f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/09a3e7fba1464835bfad061110f4352d9a47e173)) +* facade gardens: restore forgottne rendering ([f8fa184](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f8fa1841e4df8627a18ee57c7c2cb943176557be)) +* fill in freeform value if already set ([e0527e9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e0527e964702427014220e2978680e3e6a7cc774)) +* fix [#1471](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1471): add option to bench for 'does probably not have an artwork' ([91892d5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/91892d50c5a5c5071838c8a38a24c60f1f7ed717)) +* fix [#1477](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1477). Setting the background caused a map.resize(), which in turn caused the coordinates to be set to 0,0, which caused the location-correction to kick in, moving the location input towards null island ([d95d96f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d95d96fb1ba1a8886f05b118c0650a4af1ae5dd7)) +* fix [#1503](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1503), fix [#1571](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1571) ([382f965](https://source.mapcomplete.org/MapComplete/MapComplete/commit/382f96596ed474bef086d64cabb748257416f2de)) +* fix [#1506](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1506), language-URL-parameter works again and is properly documented ([2942a2d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2942a2dae77d7c79b3af47b0c518342fa6c87454)) +* fix [#1528](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1528): from weblate to theme files did not properly sync ([3c08c12](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3c08c1297423d74348aa83e5932a7fbd94c260e5)) +* fix [#1529](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1529) ([05bf79f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/05bf79f7616af06aefea8e9f095e2b467d84a5d7)) +* fix [#1532](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1532) ([5d00f3c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5d00f3cc6a75a22732ec7ffa63d9335d9d75853c)) +* fix [#1580](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1580) ([56934b7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/56934b79f6911da6d182c4e3f28bbd6749932c3e)) +* fix [#1596](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1596) ([0727a22](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0727a228fd8bf9b7dd7ecc5b42d9225eab00bae7)) +* fix [#1627](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1627) ([e37f908](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e37f90855fb3b1fd59d19506aca0e2ccc6a12fb2)) +* fix [#1675](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1675) ([65250d7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/65250d77beec81f9d336302c4b185dcd14518917)) +* fix [#1684](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1684); add 'openid' to auth-tokens (will be needed in the future for geovisio integration) ([0a82dd0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0a82dd0edfd67c18b2c59c903d506cbb0d46ffc1)) +* fix [#1713](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1713) ([2720f5d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2720f5dd19deb2ebdcf1eae2229e2fbdd0adc4dd)) +* fix [#1779](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1779), add check to prevent similar errors ([417dc16](https://source.mapcomplete.org/MapComplete/MapComplete/commit/417dc1633e05b1b4776449eb245739232dea975e)) +* fix [#1813](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1813). For some reason, importing a .js-file suddenly fails, so ported it to typescript ([cab414e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cab414e80895933b4ae874be5fd77b90b8c13f3f)) +* fix [#1817](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1817), some more improvements to the loading screen ([6394ee8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6394ee8e6800d2cd23d30383ffea9629964c4dc9)) +* fix [#1844](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1844) ([e11442e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e11442e1009465e8bc3e8823e8d66fe44fb5f9c2)) +* fix [#1883](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1883); display underground railway lines in a subtler rendering ([b3299cd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b3299cdd733152820e30c18463e551059654d3fb)) +* fix [#1906](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1906) ([3ab1d15](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3ab1d1591fde7e31efe4e6186af78b71987c1498)) +* fix [#1917](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1917) ([8c65448](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8c6544883469d9634fca285b600fa05706dcdbfa)) +* fix [#1917](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1917) ([903a11d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/903a11d4e7c832ad46d3afd4ed9786df6e6d1331)) +* fix anonymous reviews; fix [#1868](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1868) ([073cd69](https://source.mapcomplete.org/MapComplete/MapComplete/commit/073cd692e456ae63999bfc2770d0c204dc8a1793)) +* fix back-button on the 404-page, remove some obsolete classes ([006f695](https://source.mapcomplete.org/MapComplete/MapComplete/commit/006f69561a08a1c3a3577ada83e9b3954d8332f2)) +* fix bug icon ([1fea2b5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1fea2b56be82e8a9a5db2683ee55a5a81ec7e7f2)) +* fix bug with incorrect translation context for themes ([368f9ad](https://source.mapcomplete.org/MapComplete/MapComplete/commit/368f9ad0c83eaeb40d4f7ae293d73d11714271e0)) +* fix build ([0d705b9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0d705b97277a7c6cba5a57d071aeaace1a24fc5a)) +* fix crash in studio ([b18d575](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b18d575ade434ec51a33684ff365ede7b93cfa79)) +* fix dissappearing items to apply ([a935c03](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a935c03631614390a1ab43248f51e6ba0eb26956)) +* fix domain name ([301f00f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/301f00f6aef727981e2faa73e2093710ac25c337)) +* fix file drag and drop, allow entire featurePopup for file drop ([859faea](https://source.mapcomplete.org/MapComplete/MapComplete/commit/859faead7fd8c6fa5ae73b70e41a753f34dfd5ff)) +* fix icons in mappings which use a builtin svg ([ab28fbe](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ab28fbe35c97de56e765bc3b35277489aebb1872)) +* fix incorrectly linked translation in privacy policy ([e2aaa7d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e2aaa7d435ee91d20a62e8380300ec27418e93c1)) +* fix link image action ([ce55b4c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ce55b4c7d8659044b93a03afaaa37d272a6b48ab)) +* fix maps ([e48571a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e48571a80a03418d5c0c61304dbb166a67740ddc)) +* fix move dialog ([084cd86](https://source.mapcomplete.org/MapComplete/MapComplete/commit/084cd86b71bbc26e3b7542a5f16ecc1715275a50)) +* fix multi-visualisation ([872e36d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/872e36dffa6810f599e06778010f8b00056b976c)) +* fix nearby drinking water fountain detection ([13ebcff](https://source.mapcomplete.org/MapComplete/MapComplete/commit/13ebcffab102fdcda6263c22cdd12bc22a6f86f7)) +* fix nearby drinking water fountain detection ([a5276eb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a5276eb4e67ed939e5b34ad7ffca61d6e41d679d)) +* fix query:licenses ([e0ee3ed](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e0ee3edf71388614a1bc07dc43aaf18def1a630e)) +* fix rainbow crossings theme ([5b29177](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5b291777be5a1aa4826ba894af76dbf4c09b9a7c)) +* fix reverse tabnabbing in most cases, add rel=noopener to most links to untrusted content ([d9b8257](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d9b8257e47f7c2e2ce06e4a0fcad8830764dae8e)) +* fix scrolling for 'addNewPoint' ([637cebe](https://source.mapcomplete.org/MapComplete/MapComplete/commit/637cebefc7685d64ae5286c2a5f63afb3193a2db)) +* fix scrolling for 'addNewPoint' ([f697d29](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f697d292a3ab6bf3114d5f7055c908203efbc8e0)) +* fix settings menu ([2b728fd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2b728fdf8bd6effce1682119f7f0d67a13d1c97d)) +* fix styling of translate button in titles ([0a8164c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0a8164c378ca4aaa1e34dc3bbd4e2741e5bc6318)) +* fix tests; use OAuth client id from dedicated MapComplete account ([fc9dd46](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fc9dd462399a3b7ed8959c38c4a97f24895f9ca8)) +* fix translate icon, fix [#1832](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1832) ([064c601](https://source.mapcomplete.org/MapComplete/MapComplete/commit/064c60163c19e55d098e1b1061cf3b8df3dcf782)) +* fix UK-Addresses themes again ([370b200](https://source.mapcomplete.org/MapComplete/MapComplete/commit/370b200bb33f26db448e5d3feda2107f2224d232)) +* fix updating of styles ([650c1a6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/650c1a675c783179482338f449ca1202246916a0)) +* fix validation of question input; remove some obsolete logging; stabilize output of generate:translations wrt newlines ([1f39ba9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1f39ba9ab50f63e04be89f676aa82c04d5bb2f94)) +* fixes to etymology: load wikidata on mobile (which uses m.wikidata.org, tripping the CSP); fix 'upload image of the streetsign' parameters ([480956d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/480956d45dc767c77848ba32b176af373e73060a)) +* force downloading (without cache) before uploading ([b85b2ac](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b85b2ace0b373aeae1b9cef8e748ddea7cd3ca5c)) +* force redrawing the questions in a questionbox to avoid rendering artefacts and unselectable items ([f7e2dc7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f7e2dc7457f366d9cf4722beccfe6b16467ab435)) +* generate layeroverview ([ce654cb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ce654cbcf9d7164121ee539836c3f7775d93365d)) +* generate layeroverview ([e71a1c7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e71a1c7a3d011b921c6ff08dcc54f93dd84971dc)) +* generateCSP ([a612d4e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a612d4e1c2f6469c7b2d1fc66c8fc416ccdcac1a)) +* generating layeroverview; performance: do not try to download ratings if no ratings element is present ([fc62d41](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fc62d41e1b832278bb0c846ffcaa971273419730)) +* giving a review is possible again ([0879ff9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0879ff97ed4b0b5de572dbf50cc45433b60423f2)) +* giving a review is possible again ([a75fc0d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a75fc0d21550495ea2e579922af9b27b2b2a6e22)) +* gps-icon should turn into an arrow again ([ef93ad1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ef93ad126f5c6b973fb2f66c368522ebdee07543)) +* handle NBSP in svg ([4190bf7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4190bf79339330601b4d6d426c45cfc6e431ef61)) +* hash would not clear because the update method unregistered itself ([8dd7f34](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8dd7f34ad733080e9e5e648a91942528d96857ed)) +* hidden theme link not working ([d5e128b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d5e128b1ed71fb7be7402bbe4ed86edcd6e5a6b0)) +* hide 'addnewpoint'-icon when closing the dialog ([499ad85](https://source.mapcomplete.org/MapComplete/MapComplete/commit/499ad85f1efd0aefd2cf757198eaef5af037c7ee)) +* hide some elements of the UI if they are disabled by a featureSwitch ([17503d5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/17503d5bfb63c5c03968c96f15c2c5a674a3ede3)) +* hide tag_apply_button when applied ([622df2d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/622df2df19ce4fa7049447995194d0f28b91d59f)) +* icons for rental in cyclofix theme ([02064a2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/02064a2d8078b07aeb9e282700018c86638c4683)) +* ifnot-value would show up together with the 'if'-value ([15f1a93](https://source.mapcomplete.org/MapComplete/MapComplete/commit/15f1a9362c624d3fec9680efa3e38edf912cbaf1)) +* import ([98ca6aa](https://source.mapcomplete.org/MapComplete/MapComplete/commit/98ca6aa8aaac923b57d12f52b41f5ee13412b0a2)) +* improve background layer switching code, might improve [#1481](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1481) ([33fa11f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/33fa11fc1728f017644977be2181c25441a76e18)) +* improve deployscript for hetzner ([dcd02e9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/dcd02e9ad772346bc3f69ebd9563af80ea30810e)) +* improve error message ([7f6c1f0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7f6c1f06e23cb249d2eadda9be08b1cafc680d30)) +* improve first-sentence ([7aee442](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7aee442ae49a7a68821917de9580ce9e62105edf)) +* improve functionality of GRB-theme (WIP) ([b86e291](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b86e2910baba5fe37cf5c0f53a64966c85d159ce)) +* improve optimization; add tests ([595503c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/595503cfc35c8db3cb4ee4b28f82b7c91ee75dff)) +* improve parsing of possible mapillary values ([3d54a83](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3d54a8392be94a369bf388dad0f83f60fb5a5474)) +* improve PDF-output functionality ([215286a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/215286a5af46c58a197bf85b9561c26eff5bd8fe)) +* include 'source' and tile URLs from vector tile sources into CSP, see [#1652](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1652) ([09504e1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/09504e18ecb4b85ceb6562fcdb0e21034e496ad8)) +* include japanese dot as sentence separator ([d2c6689](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d2c668922b7ac5dc682461c6789fbbdb37fad8c3)) +* include lod-proxy in CSp ([087c099](https://source.mapcomplete.org/MapComplete/MapComplete/commit/087c099e2e633237b00748ee5d3dbba454999881)) +* incorrect path in error message ([5da8952](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5da895276c5d5447bea7094d81d371e99458ff7e)) +* **index:** search got confused as it didn't have an id for the list items ([6f42884](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6f4288476eebf7b0e8af6177bff066d06f3823dc)) +* init indexedFeatureStore with a default map as to fix crash upon loading if a pending change is present ([377c411](https://source.mapcomplete.org/MapComplete/MapComplete/commit/377c411143c577752014842bbc205093c9ebfdc4)) +* initialize user settings with a strict value to be able to override it ([57e0093](https://source.mapcomplete.org/MapComplete/MapComplete/commit/57e0093e478f541c46145a72dbfb9fc70d467633)) +* interpret missing level tag as 'level=0' ([5d8b422](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5d8b42216236d49b6bcf328e8a009884f697e312)) +* keep map mouse-interactive when panning with arrow keys, some CSS-tweaks ([512bb4c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/512bb4c00e1fed39927c8bd40aaef378db64d648)) +* layers now compile again ([1c99173](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1c99173f32112b332ce38f926623fa2c27f89ab8)) +* lines with opacity have colour again ([f0d9365](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f0d9365e06eb533f0bf0a47c21ce58834fc5cabd)) +* load element if set in the hash ([9090dda](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9090dda6889a4e4eda33b9d634fb22da3aedadd8)) +* load translations for PDF-export internally ([d103911](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d103911d143803c9e0373a673110009a785f94da)) +* loading oneway arrows on multiple layers; fix nullpointer ([1678427](https://source.mapcomplete.org/MapComplete/MapComplete/commit/16784270ce45560520d4e9b19d81bd04da7033ee)) +* long domain names cause horizontal scroll with taghints ([eb47c4d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/eb47c4d5b9a0379cc87b773c73638965fb247ee8)) +* make levelselector clickable again, fix [#1416](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1416) ([8b5daef](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8b5daefc9063c818eeea6e044167787feb31d4b5)) +* make sure that a 'hidden' tagRendering cannot be accidentally selected ([5585f02](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5585f02cad0c737f99c16433d7a61f3a5f3743d3)) +* make sure that the passed-in-location of the map is respected, prevents random jumps in the location input ([5c01f6a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5c01f6ada95ab1410310d4f084f593b6f561cc53)) +* make sure the background is always below the rendered layers ([2769747](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2769747737964a509897ccce4702a9ea9ebefcd8)) +* make text a translation ([418e0cd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/418e0cd149f1af50527e1f1f2c6fbec254779681)) +* make top and bottom panels click-through ([0db6a89](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0db6a8977716e33bfa775bd731e994bf9facf0c9)) +* maproulette endpoints ([bbf6d62](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bbf6d62c866950476ee34ff735352d8cc38daa7a)) +* maproulette import flow ([5f7cc35](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5f7cc351c9fb3743ab1cba65327611f730440ec5)) +* maproulette item ([b6b77da](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b6b77daef78bdc111530ec1fb17820c4fb042e57)) +* markers can rotate again ([5e453d5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5e453d5cf19fb63ef7516ad11e53aad4e0006bdc)) +* markers now appear correctly on PNG exports ([e5b3e15](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e5b3e15c43672933fc3f1f6a59960514961ce377)) +* MC would crash if a pending change was present; remember preferences in order to reuse the changeset ([f2375f4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f2375f4877316193132f4ae4189ef5b65e7ef710)) +* metatagging of width theme ([c4ff70c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c4ff70ce656e941574a31120f3971375ecc7ba4c)) +* minimap takes to much space ([037c593](https://source.mapcomplete.org/MapComplete/MapComplete/commit/037c593f61b3adfd4ac314aef063e20049ce3cb7)) +* missing commas in elevator.json ([229e605](https://source.mapcomplete.org/MapComplete/MapComplete/commit/229e60538b4d9002875a63ad877324941dd4647d)) +* Move image preview below FloatOver, the popup otherwise hides the image preview ([df1fef2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/df1fef28c02b08a1ba13e4fbd8bc6f15d6c7913c)) +* move lastClick to bottom anchor ([beea00c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/beea00cbf079ad0c109c78d2828b7359479f0717)) +* multianswer with a free textfield did not activate ([649ed1f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/649ed1f53a7948bafda45aab36ed214d1808b51e)) +* multianswer would not accept last option ([6f5c71e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6f5c71ed5a17147d5fc8c9da9f194a61f18fbb30)) +* no more duplicate link showing up, avoid crash ([7be01d5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7be01d5b8f789576b8b74bf07824ed660d9339a1)) +* normalization of URLs, formatting, stabilize inputHelper ([441c4df](https://source.mapcomplete.org/MapComplete/MapComplete/commit/441c4df4f6d3e26cf866418e5ddaea90bedd2c6a)) +* only check browserLanguage if navigator is defined; fixes tests ([a1fa3b4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a1fa3b494259d7cc8f4873af31d5c9a987cef972)) +* only show 'newly created' if version number is 1 or unset ([1a78ecb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1a78ecb85806db67f6e51e39a0882c038589a058)) +* only show fixmes on high zoom level (performance), add the option to remove a fixme ([2f5091a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2f5091a8cb484681d69db0ea6578dd7d26eacef7)) +* only show website icon if a website is known ([46244b8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/46244b8345c0005f3b3648a3379149d243cfe897)) +* open correct menu if set in hash ([7a95334](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7a953348824f6d601c16a0e632aac8353e0283fb)) +* open settings again ([894d857](https://source.mapcomplete.org/MapComplete/MapComplete/commit/894d857cdc35864bbd778925ef84a042d6e04aaa)) +* opening the popup if defined in the hash ([196d76d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/196d76d9dc8736667956ad803cf5aed15f3b682e)) +* ordering of baselayers ([8379a89](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8379a894d0fc826e33d24d05b3e44852556a60b1)) +* output tailwind into 'public/css/' instead of 'css/' ([a1f5032](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a1f50322321d878d823ac3fc70021683dbb6ab69)) +* overpass feature source will redownload if the layers to download have changed ([bae4974](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bae49744d95e350f7b4c1b031b8e4a178879deea)) +* overpass feature source will redownload if the layers to download have changed ([7ed5307](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7ed53076fe206f0e260d329844eb1d8898206b01)) +* pass along initial coordinates with the location input, prevents flashing of the ocean; fix [#1469](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1469) ([790c276](https://source.mapcomplete.org/MapComplete/MapComplete/commit/790c2767e2dfbdca65f56ec95bf3cd69a98e4301)) +* pass properties of snapping feature in newPointInput to render correctly ([c80085d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c80085dfda58c9eb73fda466d8d81731095f1672)) +* personal theme crashed due to unset defaultIcon ([6075b01](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6075b016485808352ae84a12d5b872482693411a)) +* png correctly outputs all markers now ([905f796](https://source.mapcomplete.org/MapComplete/MapComplete/commit/905f796baa26b8eedc177ce7f58353331e432535)) +* precise location input picks correct location (and not the previous click) ([6d337e8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6d337e877589f49ed1b4b1dc60ae232dd6634342)) +* preciseInputPicker will show correct icon if snapped or not snapped to a wall ([9870391](https://source.mapcomplete.org/MapComplete/MapComplete/commit/98703914ca48afefb614e1f19eb15663ab3280b7)) +* presets will now also show if the layer doesn't have a name and is shown ([3f18ce7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3f18ce7fd387a4f60db5863cfa4f759eaf34edff)) +* pressing enter would ignore input ([95c41d6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/95c41d672ee7f5556645925d09610f0bf36ee1c0)) +* probably fix black area outlines ([0bd9e1e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0bd9e1e667e659cf1b856e2aece94696089b9a20)) +* properly add 'self' to connect-src ([441a9a5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/441a9a5ed9e5b6a37356e0f15967f66799419572)) +* properly add 'self' to connect-src (take 2) ([c823e74](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c823e745a3e0b562ddfdb489541182ed17449336)) +* properly show hidden themes, drop 'custom theme generator'-button, drop 'professional services' button ([93adfd3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/93adfd3da592cbf2f177123802f69a7c4fc72637)) +* questions are shown if the condition is met, fix [#1630](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1630) ([8500276](https://source.mapcomplete.org/MapComplete/MapComplete/commit/85002766a8d3b8d0d4ad31410437bad72ae7ca03)) +* questions now appear when reselecting an item ([0c5e88d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0c5e88df7b5bdad82bf2e67b45aa817e29ca4fde)) +* questions of charging stations are now shown separately again ([fe9afb4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fe9afb415ff68c0b8e35fcb41fc68330a41a2b08)) +* questions of charging stations are now shown separately again ([30af019](https://source.mapcomplete.org/MapComplete/MapComplete/commit/30af019cdfe8dea845e92645d0ec859e439a2b90)) +* re-enable generate command ([13a35b9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/13a35b94202ef775598fc7130b60b8839cef514a)) +* re-enable reservation question ([cebd428](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cebd428e9ec58b708637ae34055a5c689e3004cd)) +* re-enable speed and heading in GPS-cursor ([ff47d75](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ff47d75d41fc1fd4f576cd483150fe27cb3942d3)) +* readd missing files ([7d802d4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7d802d418bd52bf29b147c245e548a7704e2d45f)) +* redraw line layers on background change ([6e5fcde](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6e5fcdef205d4616305d2bca39a1904d60954003)) +* reinstantiate uploads ([871d511](https://source.mapcomplete.org/MapComplete/MapComplete/commit/871d511616ae48055095e8c3485db762adc6b140)) +* remember map rotation setting ([c764839](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c764839fdcefff316b9458067e462f282a2fe7d5)) +* remember previous, externally loaded themes ([b61c0a1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b61c0a11807585a1832ff410be362e74ae2a810b)) +* remove 'icons.defaults' from favourite layers, cleanup of various small typing errors ([e8569ec](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e8569ec5404e632ebae0c71b040c1d9a9b891583)) +* remove all html-attributes from shortDescriptions in the theme overview ([39572f4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/39572f4767f270a4a5a40d8973ae9824ac3a43d1)) +* remove empty license files, fix [#1135](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1135) ([2eabfea](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2eabfea8af22a3810487cdacd68d850f4432e624)) +* remove ghost bike translations from translation files and resync them, should fix the build ([0487497](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0487497e17ace04d381d2c9d43b02f8032874e2f)) +* Remove isOpen from defaults ([11b8c61](https://source.mapcomplete.org/MapComplete/MapComplete/commit/11b8c619c165f6d66fed03061ad9afa052a7a096)) +* remove no longer needed translation ([0e893f7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0e893f7903d68f37936c9b87883ffdc31b9ff088)) +* remove no longer needed translations ([3c74a94](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3c74a94eee676a8ff0fc2b0b85f1bf8d7487d216)) +* remove trailing ';' for opening hours, as spotted by Midgard ([36b086e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/36b086e4141e70253e68aec59d099638d46d14af)) +* remove unneeded translation download, fix PDF-export ([1930f7b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1930f7bb53f4d477c2529471b478db77ddcc012b)) +* remove unneeded URL parameter ([365d573](https://source.mapcomplete.org/MapComplete/MapComplete/commit/365d573b7c0d36bfa675cc637e6223abe770f3a0)) +* remove unused property ([99b0135](https://source.mapcomplete.org/MapComplete/MapComplete/commit/99b0135fa9b44639189a1c9e690cf5829010c6e7)) +* rendering of 'inline' was not dynamic ([60d825d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/60d825de3c94afad79351f492c691af3d2109f60)) +* rendering of indoor room icons ([6235e23](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6235e231922b64adba86b012422175347a9887c1)) +* replace all mentions of 'mapcomplete.osm.be' with 'mapcomplete.org' ([7321004](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7321004c19212b0849394b9d541583e52e4ec5e6)) +* reset translations ([ad952fc](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ad952fcaf284b1669cee4657389cf36a52ee334c)) +* resize svgs ([89186c8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/89186c8610185e56bf9afa78b2765c45b2a939bd)) +* restore loading of custom themes ([bcb2ecf](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bcb2ecf6ab6c372cd41dd79780b027c79cb4a49e)) +* reviews need an uncertainty ([bc96288](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bc96288d3d75f24fb12620d050f472029c5df135)) +* rotation of the GPS-marker ([bbc7698](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bbc7698b1281ad654c00c54bf58b9de7ba1e71e6)) +* safari-specific fixes ([059ef2c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/059ef2c1bc2ea5fb377a0f1e253652c0c243e250)) +* schemaBasedArray ([a7599f6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a7599f6d7f5a061cb1971ee8170f9f039ea2e2de)) +* set share capability to 'no' if running from console, fixes tests ([af7bc0f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/af7bc0f7ce686147608256e1c5dd0a9d24388945)) +* setting the language does not overwrite the user setting anymore ([c6283ac](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c6283ac7205f69c1a42e8cf16e5f4f1ab2c239f8)) +* share button ([84cbd2f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/84cbd2fbc00d3d9e386a3b485dd4fa61c8000722)) +* show add new point fullscreen again ([aad31f6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/aad31f649e733d108c63297aa6d25bf87ac73c34)) +* show preferred languages (according to OSM) in usersettings ([0ea103f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0ea103f24780ef2c6ba191cbd4891716bb2d86f6)) +* show tags that will be applied if setting is 'full' ([0b82661](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0b826612e93c0b120f99b6927c57c13b60c2835f)) +* show tags that will be deleted with strikethrough in TagHint ([15a481f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/15a481f864b4afb7b650fd150f0ce7d46c9d1e78)) +* size of new element picker map ([#1701](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1701)), add debug info about GPS ([9407ed3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9407ed35b109660a9b23c2b71fd15f3ecf1dc0d0)) +* small bug in script ([795d6d2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/795d6d2e072d13c1d64259ac8ff960d618c2deba)) +* small CSS fix ([1b8970b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1b8970b34aae337edfe5567315cc36319add1ff7)) +* SPDX-compliance ([6c4b464](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6c4b464f14ed2851980da34e12df355cb8137ba7)) +* special loginbutton now actually works ([6a4def6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6a4def67ca97b55beb26445a0ddb713149527cc5)) +* stabilize change injector ([efdff63](https://source.mapcomplete.org/MapComplete/MapComplete/commit/efdff6335f5075f74156b5b1258ae69ab058705b)) +* stabilize opening hours, make delete clickable again ([cc60d2a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cc60d2a5fbae3a14d63aa859fa02e2b09e1e48f9)) +* stabilize rendering of linelayers ([055e5a8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/055e5a801b60276cdfcf31870fae29e6af30521b)) +* style issue, types ([5932dc7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5932dc7ad4b532c45d6e6bff95f46f6cb26645b2)) +* style of tabbedGroup-elements needed an 'important' to work in production ([5a2e54b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5a2e54b00a86b4ac0f91b69aa55ff3c36939e8ab)) +* style tweaks to link feature ([bd71645](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bd71645c04e819a28c355da5c898293092b51068)) +* styling issues; refactoring: remove 'SearchAndGo' ([0e81b65](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0e81b653631a97699ba07ce5d34b61bc4422a5d1)) +* styling of OH input, fix [#1489](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1489) ([064f875](https://source.mapcomplete.org/MapComplete/MapComplete/commit/064f87537f450e40b76d936d7793ea9036b2b181)) +* styling of PH-input in OpeningHoursInput, fix [#1422](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1422) ([a9c25d3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a9c25d378a709e3ac7b4a76919ae10cf405dacec)) +* substitute name ([408e782](https://source.mapcomplete.org/MapComplete/MapComplete/commit/408e7826269dc30d97f89e6e1fd097dae69b7923)) +* substituteKeys works correctly if newline is in the text, fix 'send email to report broken'-button by porting it to svelte ([b4f65bf](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b4f65bf2f7ce2a6993906076353acc11a1d64d94)) +* subtleLink should not open in a new tab ([61c417c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/61c417c546e828dbed2356c35eebfe4cf2ef403d)) +* Support contact:email and contact:phone in icons ([7bcefe5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7bcefe527ce080b3f7b7c48fdd1a828289b126c3)) +* svg image generation script ([f9b1e9b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f9b1e9b2de8f4aa657272d714385c1c7fbfdb3b3)) +* temporarily only warn for incomplete translations ([adb5d89](https://source.mapcomplete.org/MapComplete/MapComplete/commit/adb5d892fb39cdf63ea65d95ef5079f0efed6324)) +* tests ([238de89](https://source.mapcomplete.org/MapComplete/MapComplete/commit/238de89ad54fd0c8c0d4bf75f49282d7921f21a2)) +* tests ([841be16](https://source.mapcomplete.org/MapComplete/MapComplete/commit/841be16dffd8219713a1bc00b9a8409195a8f82d)) +* tests ([1d54356](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1d543563d702f6af424e1df041191632126ed805)) +* tests ([2a73c43](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2a73c43a5fc652f7d91c8d89cf47d0ce8853ee62)) +* the search bar on the theme index was not clickable on wide screens as the 'centermessage' hovered over it invisibly ([af7672a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/af7672a0e00de4e3d75a85678b4528093515fb7e)) +* theme compilation ([86d0de3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/86d0de380644c92fe90f4dd87aa4399074fdc42e)) +* **themes:** remove 'unkown' mapping from hydrants, the unkown case is handled by MapComplete ([4850e50](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4850e5094a49a16d3975795fd1f25a81f2e13a5a)) +* turn favourites black again, sync them globally ([14594b2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/14594b286dd2278bc64ed27f0305b76596d7e190)) +* tweaking addNewPoint-flow ([d0e0abd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d0e0abdece560799a9770b74d0992c42ebe89ed6)) +* typo ([929093d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/929093d36f13ab1861d533f4d93152a7ddd1e6dc)) +* typo ([2671d01](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2671d0158983c7befb9f5c8d3e91544a50408c6b)) +* typo ([752de10](https://source.mapcomplete.org/MapComplete/MapComplete/commit/752de107ab6a50f8e513b0c7307b44dc6094d974)) +* typo ([8531571](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8531571c7be653339d752f953a8725d94eec692c)) +* typo ([de99f56](https://source.mapcomplete.org/MapComplete/MapComplete/commit/de99f56ca8fe34e361a7c6345d147f8295293f57)) +* typo ([3a25106](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3a25106a5ab7bd958cfe731d8e1e959b5b07b23e)) +* typo in charging_station.protojson ([21d01a4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/21d01a46f9164a872145c03fe845233c6cd47f8b)) +* typo in elevator.json ([374a4eb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/374a4eb22211ecfbe8a04569d89b8236f109b8ed)) +* typo in filter ([366577f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/366577f70b40765b3e10ccae222193ca07cae4bb)) +* typo in tag ([a903112](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a9031129d3dddfdd0ab1d2d83d371b872a0d5180)) +* **typo:** s/bick_wal/brick_wall/ ([753efef](https://source.mapcomplete.org/MapComplete/MapComplete/commit/753efef38f1f1a4f731c0c66408c7adddb26a967)) +* undo accidental changes, fix saving preferences ([ff3a7f8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ff3a7f8f4372d46b0aba61aa12115da4207f2331)) +* units which used a 'string'-validator might not detect the actual denomination. They have now been forbidden and fixed ([7b497f9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7b497f991d788c991457f1167d472a77f2789cdc)) +* unselect layer, prevents that 'lastClick'-popup opens on map click ([63ffa11](https://source.mapcomplete.org/MapComplete/MapComplete/commit/63ffa11238766962cab6b1c8cedcd0153504d45e)) +* update and simplification of sharescreen, rename some feature switches, remove some no longer relevant feature switches ([96d0367](https://source.mapcomplete.org/MapComplete/MapComplete/commit/96d036781f55987732629355be118373c363830d)) +* upload flow deals better with point reuse: it actually opens the feature now ([c14cbc9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c14cbc9fe95bf1d2432ea7290cae0d0f7a9b6ada)) +* uploads were broken ([efd6b30](https://source.mapcomplete.org/MapComplete/MapComplete/commit/efd6b30e1b41024ee4b7c0f6cf69a49f87f5da69)) +* URL-parameter language disables the language picker, fix [#1506](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1506) ([3ca8ba1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3ca8ba18fd6a1569214f5d6298eca291cb8ceefc)) +* URL-parameter language disables the language picker, fix [#1506](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1506) ([2f5c89f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2f5c89f8c5a7aa7adbe83d1b9cf98e198f9f1aab)) +* use api.openstreetmap.org on many places, fix [#1573](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1573) ([8fccf78](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8fccf784786074e22a4d437dc8a38c58bf54c375)) +* use correct backend address (including www.) ([c320239](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c320239610f15083d1d050f17e337780621f7dc3)) +* use correct branch to deploy ([9c0dac2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9c0dac28ad0604026936cc68c5238927978b250a)) +* use correct relocation icon again ([cdb1bb2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cdb1bb23b8e5df8bd1f2e0732ff14f3bd55935f5)) +* use correct snapping ([ec2e0e1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ec2e0e1de168f9f4551f86ff73b070a6e4ccdd77)) +* use https for extractGraph endpoint ([f89123d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f89123d318ebb24553b842884e0aad3b9adf6570)) +* use proper circle for bench and artwork ([e2a56f5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e2a56f5e5cc469c95974625f561a4a5229b5cb9a)) +* use proper selected element ([dbff953](https://source.mapcomplete.org/MapComplete/MapComplete/commit/dbff95309642178dcccb4a0a365a263c722c5a96)) +* use theme.html?layout= instead of layout.html if a local deploy is detected ([db67600](https://source.mapcomplete.org/MapComplete/MapComplete/commit/db6760015f69239dc51cc47c866635927cd9dadf)) +* use translated value for community index tab ([a3a7c53](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a3a7c536fbce04698a05847da429d1bacc851aad)) +* use translated value for community index tab ([22ee806](https://source.mapcomplete.org/MapComplete/MapComplete/commit/22ee806090a8679ea2951d84af47e4de8314925c)) +* use www.openstreetmap.org again, it doesnt work ([580b58e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/580b58e86a974432b068b073a047c22864621126)) ### Theme improvements -* a few improvements to velopark ([e7a5712](https://github.com/pietervdvn/MapComplete/commit/e7a57125d797fdf3c31c66c1e0c54dfc5dc5a304)) -* active 'browse and link streetview' on all themes ([eb2a582](https://github.com/pietervdvn/MapComplete/commit/eb2a582d4910edda5e8dd76d229c0637bc5ac4a5)) -* Add 'access=permissive' to charging stations, fixes [#1255](https://github.com/pietervdvn/MapComplete/issues/1255) ([cc70e09](https://github.com/pietervdvn/MapComplete/commit/cc70e09e11f55c62276fe9fcc5cf4e9033ccc6f5)) -* add 'allowMove' everywhere, make 'allowMove' obligated, see [#2121](https://github.com/pietervdvn/MapComplete/issues/2121) ([29d52e0](https://github.com/pietervdvn/MapComplete/commit/29d52e0fc69f16477fbfd6f5c08900890626f0be)) -* add 'artwork' questions to drinking water fountains ([def640f](https://github.com/pietervdvn/MapComplete/commit/def640fb1c97c581e4688c8c0a50f4e295d9458b)) -* add 'binding'-service question to copyshops ([7b1ca43](https://github.com/pietervdvn/MapComplete/commit/7b1ca43266f596c9b9b40a3a86c0f5cf6d213a3e)) -* add 'fine-gravel' as option to sport-pitches ([679e371](https://github.com/pietervdvn/MapComplete/commit/679e371bd470976a41327494004054548e120401)) -* add 'hacklab' as option to hackerspaces ([665cd3b](https://github.com/pietervdvn/MapComplete/commit/665cd3b0dd3bd2ad91c601554417cfec0eec54a2)) -* add 'hoops' question to basketball pitches ([4df9632](https://github.com/pietervdvn/MapComplete/commit/4df9632d7c7093511b6e3b2349ee5d2fd99cb681)) -* add 'link' as builtin, available Icon ([7872f22](https://github.com/pietervdvn/MapComplete/commit/7872f221512797ee82ea1e92455326baaa9874ab)) -* add 'lock' and 'key' icon to toilets, fix [#2094](https://github.com/pietervdvn/MapComplete/issues/2094) ([577b596](https://github.com/pietervdvn/MapComplete/commit/577b596e7a8cdc2ea4cbd97c401422ee0ad06652)) -* Add 'open_now' filter to bike-shop ([aa6902a](https://github.com/pietervdvn/MapComplete/commit/aa6902a25c4b27ef9424d0cdfb68a83f44ec7405)) -* add 'pedagogy', fix [#1839](https://github.com/pietervdvn/MapComplete/issues/1839) ([4644b6a](https://github.com/pietervdvn/MapComplete/commit/4644b6ae550fa53c042978317484f9a99eafe8c7)) -* add 'skateboard' as sport pitch option ([f20219c](https://github.com/pietervdvn/MapComplete/commit/f20219cf37711b42e8bf1d4a4a1c0379d7d8df0e)) -* add 'website'-button which shows up by default if a website is known ([7c0d339](https://github.com/pietervdvn/MapComplete/commit/7c0d339976fb26a9fc9ab74a540c7d5b7d640f80)) -* add ALPR-cameras to surveillance theme ([d1e91ee](https://github.com/pietervdvn/MapComplete/commit/d1e91ee2f98936871941e4b7cd035ee4f1e35bbd)) -* add ALPR-cameras to surveillance theme ([97236c8](https://github.com/pietervdvn/MapComplete/commit/97236c80a99686a1dc0c296bb4a730bc595884a5)) -* add animal types to animal_shelter, include animal_shelter in pets, generate licenses, fix cycle_highways.json ([3968a1e](https://github.com/pietervdvn/MapComplete/commit/3968a1e841cef10e5fac08b7a2c8e6b685a4f07c)) -* add animal_shelter, created by the studio ([c4d4a57](https://github.com/pietervdvn/MapComplete/commit/c4d4a57a0804776c2eabb7cd7c11e269bac101d8)) -* add atm-option to postoffice, add postoffices to ATM theme, fix [#1551](https://github.com/pietervdvn/MapComplete/issues/1551) ([c4a9fa8](https://github.com/pietervdvn/MapComplete/commit/c4a9fa81f23ec8a5dcc685b6c42b9e1208337818)) -* add baby icon to changing table question ([1b5a0a2](https://github.com/pietervdvn/MapComplete/commit/1b5a0a2a853237e9d51298f5e1b17c69afaafa71)) -* Add badminton fields to filters ([b60a3aa](https://github.com/pietervdvn/MapComplete/commit/b60a3aa5684d58e9fec146b06fe2d2993eafd72e)) -* add before text on correct location ([6a2e372](https://github.com/pietervdvn/MapComplete/commit/6a2e3720622e404089c243dc1aa7e7ab282ba2f2)) -* add benches on playground theme ([54a9edc](https://github.com/pietervdvn/MapComplete/commit/54a9edc687667372d0097fb51efb7b904005c9de)) -* add bicycle self-repair workshops to the map (WIP) ([c11d7af](https://github.com/pietervdvn/MapComplete/commit/c11d7af17531cf381ce03e37765c2e0f7efd1745)) -* add camp site ([cfa1c28](https://github.com/pietervdvn/MapComplete/commit/cfa1c28789d2056e6b8ad7483360a007c639d73c)) -* add cargo bike option to bicycle rental, fix [#2016](https://github.com/pietervdvn/MapComplete/issues/2016) ([b98aaff](https://github.com/pietervdvn/MapComplete/commit/b98aaff8101255138c10704d2a02f9226b0fa7ec)) -* add charge to bike_parking ([ed96859](https://github.com/pietervdvn/MapComplete/commit/ed96859233a921cbfc61046106b9202d40bbde6c)) -* add compile time check for 'sameAs'-filters that the referenced layer actually exists ([e188b96](https://github.com/pietervdvn/MapComplete/commit/e188b9656122dd3f0a4cda55352bf81dad6dbc65)) -* add condition that hoops are only asked on basketball courts, fix [#1577](https://github.com/pietervdvn/MapComplete/issues/1577) ([fb6f7ee](https://github.com/pietervdvn/MapComplete/commit/fb6f7ee191554816581c955cfdfbb1a932981c77)) -* add conveying as condition for stairs ([f95f631](https://github.com/pietervdvn/MapComplete/commit/f95f631045e2a83424a6ac7ef3d607fcba18cc6f)) -* add correct title for cafe, nightclub and bar if no name is present, fix [#1704](https://github.com/pietervdvn/MapComplete/issues/1704) ([0129845](https://github.com/pietervdvn/MapComplete/commit/0129845d22f028b213af59e57014ce8962b76327)) -* add currency type which does some reformatting ([d40474d](https://github.com/pietervdvn/MapComplete/commit/d40474d47e0b5ded963df2c4e76c6911de63dbca)) -* add currently open badge ([d9d330e](https://github.com/pietervdvn/MapComplete/commit/d9d330e91221fac741120c7e2cb0b394d0871406)) -* add delete to banks ([68cada0](https://github.com/pietervdvn/MapComplete/commit/68cada0a0d8f7f57b2ed43eb459680764b2b3070)) -* add dog icon into title-icons, add dog filter, see [#212](https://github.com/pietervdvn/MapComplete/issues/212) ([7e0120d](https://github.com/pietervdvn/MapComplete/commit/7e0120d0e8948510db1eb0c17090900127dc8ed8)) -* add extra check so that in a mapping cannot override the , fix two such instances ([56ea116](https://github.com/pietervdvn/MapComplete/commit/56ea1163bb7c272cec717076da452ba069e82b3c)) -* add extra questions to 'map' layer based on custom theme ([10e0e27](https://github.com/pietervdvn/MapComplete/commit/10e0e277787f95e4da8b075edd308300dd6b0256)) -* add filter for vegetable oil to fritures theme ([721a930](https://github.com/pietervdvn/MapComplete/commit/721a930d76fcd4fedada4044f1c6b2c6802cd022)) -* add filters for 'wifi' and 'electricity' ([af2c6f4](https://github.com/pietervdvn/MapComplete/commit/af2c6f47829dd91e5fa0ac4dad2f23e18ebf1d3f)) -* add fine_gravel as option for playground surface ([d8be0ac](https://github.com/pietervdvn/MapComplete/commit/d8be0acdfef8a0a7f349d152abadf3e394c0145f)) -* add first version of ski theme ([8f25006](https://github.com/pietervdvn/MapComplete/commit/8f250069988ea8e1b7f25e29db4e287200d354b8)) -* add guidepost layer ([da39dde](https://github.com/pietervdvn/MapComplete/commit/da39dde7b699e576e79eb5781933146fa9747ace)) -* add guidepost layer ([a06e513](https://github.com/pietervdvn/MapComplete/commit/a06e513c4f5a662e6d09908440f6b3394addf483)) -* add guidepost theme ([ad239b2](https://github.com/pietervdvn/MapComplete/commit/ad239b230fd57233f377266dd68b15011136bbaa)) -* add guideposts to climbing theme ([a96a214](https://github.com/pietervdvn/MapComplete/commit/a96a214c03b3438f9ccf96f7c37a2e842ec224e1)) -* add hostel, cleanup of hotel ([d167fe7](https://github.com/pietervdvn/MapComplete/commit/d167fe77232b502ccef4ee051c8d73f948100dd0)) -* add hostel, cleanup of hotel ([8e9ae05](https://github.com/pietervdvn/MapComplete/commit/8e9ae0529b95b8736ad6a2cabf9927a3a27e4c0c)) -* add ice cream parlors ([69a7c9e](https://github.com/pietervdvn/MapComplete/commit/69a7c9efa3eb29c32f0256b1a956e9846cdf5260)) -* add icons to access question in toilets ([2ba461d](https://github.com/pietervdvn/MapComplete/commit/2ba461d9578b515b23ff25a8a99d9a2b03779653)) -* add icons to question ([246b163](https://github.com/pietervdvn/MapComplete/commit/246b16317d93b8e2effe9b41f7ed8c362a61cff6)) -* add icons, add 'auto'-title-icons ([2c662c9](https://github.com/pietervdvn/MapComplete/commit/2c662c957860144a927260504ca30795f9249238)) -* Add internet questions to hackerspace, fix [#1856](https://github.com/pietervdvn/MapComplete/issues/1856) ([c870544](https://github.com/pietervdvn/MapComplete/commit/c870544d857a1c0f3f13e04da78db1a00f5e5342)) -* add keycutting service tags ([d8ce6f0](https://github.com/pietervdvn/MapComplete/commit/d8ce6f0da5887724778c03ea554add5fd5be16cd)) -* add label support to questions.json; add opening hours for hospitals ([41fdeb9](https://github.com/pietervdvn/MapComplete/commit/41fdeb9cb5c664ca604da1f89f2724c0de3b1304)) -* add maxstay for bicycle parkings ([a71ed5d](https://github.com/pietervdvn/MapComplete/commit/a71ed5d53e0b238713cdd8741c7b05e9a9568c55)) -* add memorial layer, use 'subject' instead of 'name' for ghost bikes ([a57dbe0](https://github.com/pietervdvn/MapComplete/commit/a57dbe09d60734785420c4502699fcb6d89c6033)) -* add memorials to artwork on high zoom ([29c5b88](https://github.com/pietervdvn/MapComplete/commit/29c5b884c404c14258dd116921990923c9a89181)) -* add metal as material option ([6420b90](https://github.com/pietervdvn/MapComplete/commit/6420b906e055f5572d093e18febdbe5dba325bce)) -* add minzoom to cafe_pub ([e2d3a71](https://github.com/pietervdvn/MapComplete/commit/e2d3a71c5b3a15b5a21db112baaf5a13dec55a3c)) -* add minzoom to ski_piste and aerialway, fix [#1876](https://github.com/pietervdvn/MapComplete/issues/1876) ([d7982bf](https://github.com/pietervdvn/MapComplete/commit/d7982bfd3e92a863e33e9154b2c9c4044cdb4951)) -* add missing assets ([bc826be](https://github.com/pietervdvn/MapComplete/commit/bc826bebed2c0f073da3163994be818d1c41c6f5)) -* Add more memorial types, add freeform option, fix [#1824](https://github.com/pietervdvn/MapComplete/issues/1824) ([b0d0436](https://github.com/pietervdvn/MapComplete/commit/b0d0436ebe79a44c1bfc6880ecbef66f85e159be)) -* add more options for support in advertisement, add presets ([c26225c](https://github.com/pietervdvn/MapComplete/commit/c26225ccf11987f8a2cbdf45820a2310428cf1c0)) -* add more questions about drinking water ([9fabab3](https://github.com/pietervdvn/MapComplete/commit/9fabab3588a7cdc3d04bcbae19b6868694bbc95f)) -* add mountain rescue stations to the ski map ([04509bc](https://github.com/pietervdvn/MapComplete/commit/04509bc3e7783f55e593679ddfba2263ecf7f3de)) -* add name and title to assembly_point and disaster_response layers ([f087012](https://github.com/pietervdvn/MapComplete/commit/f08701211632b8f8f35597d908160f8460934e04)) -* add open love map, see https://github.com/thomersch/OpenLoveMap/issues/21 ([d6a55a5](https://github.com/pietervdvn/MapComplete/commit/d6a55a5ee9ef03c0a813b0d95dffa42cb0b4955d)) -* add operator question to bicycle parking ([ea00c71](https://github.com/pietervdvn/MapComplete/commit/ea00c717de78c06ded81fae56be1a05b8e50ae37)) -* add OSM-carto again, fix [#1664](https://github.com/pietervdvn/MapComplete/issues/1664) ([376a683](https://github.com/pietervdvn/MapComplete/commit/376a683cce13921e644364c8342362f3a21b3ab3)) -* add paid as option, fix [#2119](https://github.com/pietervdvn/MapComplete/issues/2119) ([a4018d8](https://github.com/pietervdvn/MapComplete/commit/a4018d88b0f187b907c68a49dcfb496c0259bb91)) -* add payment options and internet to climbing theme ([2337033](https://github.com/pietervdvn/MapComplete/commit/23370336e81fa865a62507bb6f4de5030ad48bb5)) -* add payment options and internet to climbing theme ([1abcc76](https://github.com/pietervdvn/MapComplete/commit/1abcc766f98f27298eb82e70ad7c09520adb8377)) -* add possibility to add an icon to 'render' (just like with mappings), add contact:mastodon support as general question, add mastodon question to hackerspaces ([03aafbe](https://github.com/pietervdvn/MapComplete/commit/03aafbe99c0d9f4fa5768d18e7bde093529ce93f)) -* add possibility to enable terrain, some fixes to overlaymap and pitch control ([e3dec8a](https://github.com/pietervdvn/MapComplete/commit/e3dec8aafada699be3cddfc86aeb63938036e5c5)) -* add proper 'image along way' possibility ([584fb3c](https://github.com/pietervdvn/MapComplete/commit/584fb3cb57e77ea4382fda152d8604ef8293f9b1)) -* add question wether climbing ropes can be hired ([6425ad6](https://github.com/pietervdvn/MapComplete/commit/6425ad67e6a053e1b6cbbb038e0c544c0f07f10b)) -* Add rubber;tartan surface to playgrounds, add checkdate to playgrounds, add tartan to sport pitches ([7859e7d](https://github.com/pietervdvn/MapComplete/commit/7859e7d06990666c1c40756795f993949abef434)) -* add shoe repair services to the climbing map, add question if a shoemaker also repairs climbing shoes, add craft=shoemaker to shops theme ([3df5727](https://github.com/pietervdvn/MapComplete/commit/3df5727f40a29d190394c71cf99896261f78474d)) -* add short description to velopark ([50e3c54](https://github.com/pietervdvn/MapComplete/commit/50e3c5483461cd085d3207fbd96f5b7fdfaebe57)) -* add smoking to food-layer, fix [#1874](https://github.com/pietervdvn/MapComplete/issues/1874) ([f5a94c7](https://github.com/pietervdvn/MapComplete/commit/f5a94c7b5f24c1846681f75f8f79bc1d870574c0)) -* add some icons ([48df237](https://github.com/pietervdvn/MapComplete/commit/48df2379bf013006aad7e7bd68977e7a55a670d3)) -* add speed_camera to surveillance theme, see [#1913](https://github.com/pietervdvn/MapComplete/issues/1913) ([9716bc5](https://github.com/pietervdvn/MapComplete/commit/9716bc5425967aa81b4885bff4063d8c0eebfd18)) -* add Stamen Watercolor again, see [#1652](https://github.com/pietervdvn/MapComplete/issues/1652) ([d997c90](https://github.com/pietervdvn/MapComplete/commit/d997c90352a0d70f2cd33108af4de16f58444868)) -* add statistics on used version ([1a7acc8](https://github.com/pietervdvn/MapComplete/commit/1a7acc80c1933894aa71bdd9cdfc6bd6985f5a40)) -* add sugar_free, gluten_free and lactose-free to shops- and food-layers ([b06784e](https://github.com/pietervdvn/MapComplete/commit/b06784e7a06aaeb40a375210bc95538a73db9aed)) -* add support for operator:email, mostly for velopark ([1c45f09](https://github.com/pietervdvn/MapComplete/commit/1c45f0963219f3aa743b2ddf9840e2d152b0fae5)) -* add toilet questions into indoor theme ([8f93b0d](https://github.com/pietervdvn/MapComplete/commit/8f93b0d398aa16caa6e9167d96b02c7fc45182a4)) -* add validation check if a mapping does not erase another mapping completely ([556f6d0](https://github.com/pietervdvn/MapComplete/commit/556f6d0b93aa7774b703e80590d2df1601d293c4)) -* add validation for duplicate presets, fix [#1582](https://github.com/pietervdvn/MapComplete/issues/1582) ([2e8a331](https://github.com/pietervdvn/MapComplete/commit/2e8a3311e76c9065338ffce1388658269a05e261)) -* add various services to hackerspaces and makerspaces, add icons, some fixes to make this work with expandRewrite ([8ceda1c](https://github.com/pietervdvn/MapComplete/commit/8ceda1cc5f7e549ccecc65b6469a7195de1022cc)) -* add velopark import functionality ([4c5ebf0](https://github.com/pietervdvn/MapComplete/commit/4c5ebf05f5d818abd622bf9d8c8a96926e36ddd6)) -* add velopark theme ([1c1cea7](https://github.com/pietervdvn/MapComplete/commit/1c1cea7f033ea19c74a6efb958a69a3a729bad3c)) -* add warning if a tagRendering can be replaced by a direct value ([79e40d0](https://github.com/pietervdvn/MapComplete/commit/79e40d0fee2e40b32babc218a374095f6ca520a5)) -* add wikipedia page for "subject:wikidata" on ghost bikes, specifically for the ghost bike of #Natenom ([d74cb00](https://github.com/pietervdvn/MapComplete/commit/d74cb00df4fc55ca00082326da138b580fa39cc7)) -* add year to units ([c8eef2c](https://github.com/pietervdvn/MapComplete/commit/c8eef2c8f6866ded26276250d422bd4a97e5b08c)) -* **advertising:** add (animated!) flag and screen icons ([090130d](https://github.com/pietervdvn/MapComplete/commit/090130d596bb5ab7d337c7c96a55b38ef6181231)) -* **advertising:** boards are never animated ([b92e9b8](https://github.com/pietervdvn/MapComplete/commit/b92e9b815da3e1b15c9859f6d4726bac09307b7b)) -* **advertising:** Fix typos ([9e02c89](https://github.com/pietervdvn/MapComplete/commit/9e02c89fd5da5c7ad4623ed205ef610e4462b2a7)) -* **advertising:** further refinements ([8127027](https://github.com/pietervdvn/MapComplete/commit/81270272518012cf2023be2888d2faa444ee012f)) -* **advertising:** further refinements ([59eabc5](https://github.com/pietervdvn/MapComplete/commit/59eabc5daaa675880e1b684c3d8b4d3f0c1139ac)) -* **advertising:** last icon ([3e72ba2](https://github.com/pietervdvn/MapComplete/commit/3e72ba2b464c819a09956fa22bb321ed68fe34a3)) -* **advertising:** more icons, reordering of the questions ([7fc0770](https://github.com/pietervdvn/MapComplete/commit/7fc0770488ba99ea2d7aab658933d6e22c62cb3e)) -* align iconbadge, fix [#1893](https://github.com/pietervdvn/MapComplete/issues/1893) ([ba098fc](https://github.com/pietervdvn/MapComplete/commit/ba098fc29ac4ea46b0ff19a918282b4f81fe8f10)) -* allow multiple internet access types ([786b850](https://github.com/pietervdvn/MapComplete/commit/786b850dbeff9a92f761e65cd01a0e948140f37d)) -* allow to add multiple changing table locations, see [#1756](https://github.com/pietervdvn/MapComplete/issues/1756) ([c62f7cc](https://github.com/pietervdvn/MapComplete/commit/c62f7cce01da15ef3f123b95e08056ca5019b7c9)) -* allow to add pictures to a 'shelter' ([39c079d](https://github.com/pietervdvn/MapComplete/commit/39c079db45aaadf98bf651d66d6bd88dbbe04bb2)) -* Allow to delete tourism accomodation ([60eeab9](https://github.com/pietervdvn/MapComplete/commit/60eeab9aa79ab1a5fc65b7f5e6efb2ebb0b6e55e)) -* allow to have a non-number type together with a unit ([4ccfe3e](https://github.com/pietervdvn/MapComplete/commit/4ccfe3efe446b407be1ca53d4ad2c3ee6fdde0b4)) -* allow to move a shelter ([565dee8](https://github.com/pietervdvn/MapComplete/commit/565dee8854f605ea40570c0c82d225935e11dba0)) -* allow to move and delete pharmacies ([5e95bd9](https://github.com/pietervdvn/MapComplete/commit/5e95bd99a2dcf424acbcad85aa96a3a36bd612a8)) -* allow to move hydrants ([432f244](https://github.com/pietervdvn/MapComplete/commit/432f24456d75e131425f0f1fe0df15c448f593ef)) -* also ask about menstrual products for toilet_at_amenity ([ae7cc95](https://github.com/pietervdvn/MapComplete/commit/ae7cc95727bc33c6d67a2ef24d2a2e0c2e3c3214)) -* also show 'operator:website' and 'contact:website' as title icon if they are available ([8526f4e](https://github.com/pietervdvn/MapComplete/commit/8526f4e94140132c8abe880b93cbc45780f9686b)) -* automatically derive source from presets if no source is given ([0689758](https://github.com/pietervdvn/MapComplete/commit/06897588be3e56570b973c8db08fce1e13b29c7b)) -* automatically derive source from presets if no source is given ([8e18864](https://github.com/pietervdvn/MapComplete/commit/8e18864daa9d19c2d9ccc2eb6a8ee408e7038d5e)) -* bench.json: decrease minzoom ([5b33d88](https://github.com/pietervdvn/MapComplete/commit/5b33d88ffbff285849d7bf5896df8e8e2e547cef)) -* better support billboard on walls ([8816ad0](https://github.com/pietervdvn/MapComplete/commit/8816ad03ecaedfe248fff1b7b101a266a9a6f444)) -* better support billboard on walls ([0a1c90b](https://github.com/pietervdvn/MapComplete/commit/0a1c90be9e1515b2f708e0f672b0732c7356101b)) -* bicycle library: allow move, fix [#1768](https://github.com/pietervdvn/MapComplete/issues/1768) ([7ac84dd](https://github.com/pietervdvn/MapComplete/commit/7ac84dd675a68f47b6af0465e337561aa0dc9586)) -* bicycle parking: add lockers as options, add operator:website (velopark features) ([22721cd](https://github.com/pietervdvn/MapComplete/commit/22721cd3ef604255bc88d5be995d0f2d65e68a83)) -* change minzoom of second hand shops in circular economy ([0b2e878](https://github.com/pietervdvn/MapComplete/commit/0b2e878481e3cc32b7b37c8cdb28251daa1b02d7)) -* Change text type ([c9751a3](https://github.com/pietervdvn/MapComplete/commit/c9751a3eb570f1865966fa3861fac5ff5c761f1a)) -* description is now a textarea ([0c1b5d1](https://github.com/pietervdvn/MapComplete/commit/0c1b5d1b6c0d12914845a19692670bd1931f532c)) -* disable 'direction'-indicator for surveillance theme as it breaks selection, fix [#1458](https://github.com/pietervdvn/MapComplete/issues/1458) ([9e15353](https://github.com/pietervdvn/MapComplete/commit/9e15353588009e39cf4a8bc2569748f40759609a)) -* disable 'disused' from delete config, delete less fast for shops but use softdeletion instead ([28e737e](https://github.com/pietervdvn/MapComplete/commit/28e737ed2eb6a3934fb650df9b1939a25f954d8c)) -* disable maxspeed and cycleway question for pedestrian roads ([e580f55](https://github.com/pietervdvn/MapComplete/commit/e580f553197165d611258b8c68ed9f9a66ca42c4)) -* don't count food for fritures ([98d441a](https://github.com/pietervdvn/MapComplete/commit/98d441a2602c360136db9f9cc883d2ef734137e5)) -* don't enforce 'allowMove' on unofficial themes ([5b45e42](https://github.com/pietervdvn/MapComplete/commit/5b45e427a0185e224446aeecfe99e87d6077379a)) -* don't inline text fields if they don't have text around them ([821ddcf](https://github.com/pietervdvn/MapComplete/commit/821ddcfaca11ca194b319bfa09f8b0a9fea01a41)) -* don't show 'mark as unknown' if this would break the source-filter ([76a9a2e](https://github.com/pietervdvn/MapComplete/commit/76a9a2ee23dcf61097d33fcbe556df7a46d9a395)) -* don't show favourite icon if not logged in ([b1d94b2](https://github.com/pietervdvn/MapComplete/commit/b1d94b2121195a52ced59454b51844412b9018f3)) -* don't show opening_hours_state title icon if seasonal is set and the item is closed due to seasonal restrictions ([1748e98](https://github.com/pietervdvn/MapComplete/commit/1748e98bfc714e147c12b8fc233432412ed186c2)) -* don't use 'Yes' or 'No' as start ([f87e735](https://github.com/pietervdvn/MapComplete/commit/f87e73596e65a12b7fb88456dfb21dcc1eb8a850)) -* elevators: first ask if there is speech output/tactile writing before asking the relative languages ([8acaafe](https://github.com/pietervdvn/MapComplete/commit/8acaafe307826ac682f25eaa0b188278ca4056fe)) -* enable 'guideposts' in nature theme ([94291de](https://github.com/pietervdvn/MapComplete/commit/94291de5a3451120b6abdb153ba57675949d3d5b)) -* enable 'speciality'-filter in doctors, decrease minzoom ([4090a74](https://github.com/pietervdvn/MapComplete/commit/4090a7493253e2b5513307d013d0a0061394aed6)) -* enable deletion of bike_cafes ([90c44cc](https://github.com/pietervdvn/MapComplete/commit/90c44cc8bdfb7b2447f1974ed94430e5b2fa3c6f)) -* enable download functionality by default ([5504d49](https://github.com/pietervdvn/MapComplete/commit/5504d49d595fee66f0c43f3efbf6f130634497be)) -* enable move on schools, tweak GRB for performance ([db98288](https://github.com/pietervdvn/MapComplete/commit/db982884a1eea2a6e37d67129256f9c6b192a841)) -* enable reviews for climbing areas and gyms ([2a3a78b](https://github.com/pietervdvn/MapComplete/commit/2a3a78bc69eea38a83378f02717bc9fdc1cd5414)) -* enable reviews on pharmacies-theme ([701f033](https://github.com/pietervdvn/MapComplete/commit/701f03397e0339cba98fc776f06b38ccb13511b2)) -* enable snapping for facade gardens ([da68d36](https://github.com/pietervdvn/MapComplete/commit/da68d365feab19a94ea85b2a756e3336bfb8b127)) -* exclude 'advertising=no' from loading, fix [#1865](https://github.com/pietervdvn/MapComplete/issues/1865) ([eef9918](https://github.com/pietervdvn/MapComplete/commit/eef99186cfbc46b57a97d2df78c8ef9c69a4609b)) -* exclude route relations from "toilets=yes". There are a few route relations with 'toilets' and those choke up MapComplete ([139b014](https://github.com/pietervdvn/MapComplete/commit/139b014c6c1f34fff08210c1c4915ea79534086c)) -* explicitly set 'allowMove' for all layers, fix [#2121](https://github.com/pietervdvn/MapComplete/issues/2121) ([468b895](https://github.com/pietervdvn/MapComplete/commit/468b895302fff50bc68cbdf72998bc08590307d0)) -* extract layers from camperssite ([82e6b2a](https://github.com/pietervdvn/MapComplete/commit/82e6b2af9b564117ebb5714b8a795b759ebf528d)) -* extract layers from camperssite ([44f42ee](https://github.com/pietervdvn/MapComplete/commit/44f42ee2c946d3f37224ca41f603e9c907ed5214)) -* first version of circular economy theme ([592be68](https://github.com/pietervdvn/MapComplete/commit/592be68f09b06f22d45d5d5c274c91315d1613f7)) -* fix [#1362](https://github.com/pietervdvn/MapComplete/issues/1362) ([ff9ca5e](https://github.com/pietervdvn/MapComplete/commit/ff9ca5e5cd6abde6c578ae442fe0d06217015288)) -* fix [#1866](https://github.com/pietervdvn/MapComplete/issues/1866) ([1cf7119](https://github.com/pietervdvn/MapComplete/commit/1cf71197f51646cfceb4b58267cf1bdd2223e12f)) -* fix [#1910](https://github.com/pietervdvn/MapComplete/issues/1910) ([b484ea0](https://github.com/pietervdvn/MapComplete/commit/b484ea005b6b91bad729b7b1923f71b8fc893870)) -* fix badge, fix [#1894](https://github.com/pietervdvn/MapComplete/issues/1894) ([a2279ac](https://github.com/pietervdvn/MapComplete/commit/a2279ac28bfb1d5dbc0ac47c2762a9104e4e54c5)) -* fix calculated tags of climbing theme ([f800545](https://github.com/pietervdvn/MapComplete/commit/f80054558fe8422c7c1dfa9e277bd772f157f436)) -* fix compilation ([c300d90](https://github.com/pietervdvn/MapComplete/commit/c300d901284dfbf05c5044da46e12ec8ca4469d1)) -* fix conversion for legacy themes ([21c35fc](https://github.com/pietervdvn/MapComplete/commit/21c35fc2c56eea64d18ee0fc18d65b2cdb913c82)) -* fix cycle rental which dissappears ([efce134](https://github.com/pietervdvn/MapComplete/commit/efce134a6cc90d4c3794cac91fc0a9da10fdd3b1)) -* fix cycle_highways ([61575a9](https://github.com/pietervdvn/MapComplete/commit/61575a9909d8c0206e45a8106ef369ef616f45d7)) -* fix icon for shops layer ([d9d8c0a](https://github.com/pietervdvn/MapComplete/commit/d9d8c0ad1f0af64f6d08364a6c64f59b748f001a)) -* fix incorrect argument, might fix [#1881](https://github.com/pietervdvn/MapComplete/issues/1881) ([209cfe6](https://github.com/pietervdvn/MapComplete/commit/209cfe6b733b849e85854d7ab3eaf4987116226f)) -* fix internet question ([b132590](https://github.com/pietervdvn/MapComplete/commit/b13259083a8d7c3b42e4df618b88de06b00f1041)) -* fix overrides, fix [#1705](https://github.com/pietervdvn/MapComplete/issues/1705) ([3334bfb](https://github.com/pietervdvn/MapComplete/commit/3334bfb8cae9a2c326764e7375829769ac96c400)) -* fix rendering of charging station ([0c52051](https://github.com/pietervdvn/MapComplete/commit/0c5205136b1a18ee91df65de52e9e60f2036d3b7)) -* fix some isCounted-typos ([20a462f](https://github.com/pietervdvn/MapComplete/commit/20a462fdf5683587e50b42171c109e87eb193422)) -* fix titles and names for assembly points and disaster_response ([170c459](https://github.com/pietervdvn/MapComplete/commit/170c4592d13929810f6e822592cd1e2d1e83a1ac)) -* fix typo in soft-deletion tag ([5f62712](https://github.com/pietervdvn/MapComplete/commit/5f627124e98e98f25e9e5a834f56e906237e0241)) -* fix validation errors due to [#1779](https://github.com/pietervdvn/MapComplete/issues/1779) ([707d996](https://github.com/pietervdvn/MapComplete/commit/707d99619d7b5fa90891e93d5641f52715f04beb)) -* fix: don't show irrelevant 'multilevel'-question anymore ([b5fca68](https://github.com/pietervdvn/MapComplete/commit/b5fca68a82d529bd10f56ba0dd63d27ae11ea2a5)) -* ghost signs: add wall-based artworks to be able to mark them as ghost sign and to avoid duplicates ([e68edeb](https://github.com/pietervdvn/MapComplete/commit/e68edeb29fa604daee0c7638999bcebab2fd7b11)) -* ghost signs: add wall-based artworks to be able to mark them as ghost sign and to avoid duplicates ([8f95e85](https://github.com/pietervdvn/MapComplete/commit/8f95e8520a751ef9fef8cc7a8810322117c7b6c1)) -* hackerspaces: more workshop types ([70fa180](https://github.com/pietervdvn/MapComplete/commit/70fa180b6a1e1a0db4e54f623797c05847b7face)) -* Hide bike cleaning cost if we don't know if there is a bike cleaning service ([87aee9e](https://github.com/pietervdvn/MapComplete/commit/87aee9e2b72013e387fd3c196a9940bf477743c8)) -* improve 'auto-type' special visualisation ([658db35](https://github.com/pietervdvn/MapComplete/commit/658db3561722ec5d220043969ed1154c9e7411af)) -* improve 'tourism-accomodation', add many more categories as some people are using 'hotels' to also add other categories (see https://wiki.openstreetmap.org/wiki/Organised_Editing/Activities/Trziste_prace) ([53ffa06](https://github.com/pietervdvn/MapComplete/commit/53ffa06a49a670ff23e605595aea7919c84f20b5)) -* improve 'tourism-accomodation', add many more categories as some people are using 'hotels' to also add other categories (see https://wiki.openstreetmap.org/wiki/Organised_Editing/Activities/Trziste_prace) ([bc54f79](https://github.com/pietervdvn/MapComplete/commit/bc54f797d792ebeac4b043612df9682a1a4c79c6)) -* improve ability of 'rewrite' config ([f015604](https://github.com/pietervdvn/MapComplete/commit/f015604000e09b81625d8dc5617e7c999b27fc74)) -* improve advertising theme, see [#1866](https://github.com/pietervdvn/MapComplete/issues/1866), translation reset for new presets ([05bba07](https://github.com/pietervdvn/MapComplete/commit/05bba071dc44897fe795974a39d472159cbaadd4)) -* improve atm opening hours, add reviews to playgrounds ([9ce60b6](https://github.com/pietervdvn/MapComplete/commit/9ce60b6ffb175803fde11b9116a0e1390ade766c)) -* improve benches ([9e10bf4](https://github.com/pietervdvn/MapComplete/commit/9e10bf421f9bcd1cadec10638eb520132c647c64)) -* improve error messages ([6897b88](https://github.com/pietervdvn/MapComplete/commit/6897b888170399db9a5d4e649d89dee2f9d0b30f)) -* improve favourite panel ([59090fd](https://github.com/pietervdvn/MapComplete/commit/59090fdb39a864b7d8b64a26fe35e98eacfa2121)) -* improve information about indoor rooms ([47bf119](https://github.com/pietervdvn/MapComplete/commit/47bf1195bcc198446c35b31ebd7d446efde7dd9d)) -* improve velopark usability ([c1003f8](https://github.com/pietervdvn/MapComplete/commit/c1003f8fe79c4a2ce820d9764b51a4a25b6e7bbd)) -* improvements to BBQ, different icons, add some questions, remove 'unknown'-options ([2db0b1a](https://github.com/pietervdvn/MapComplete/commit/2db0b1afcbbf7c8d8e6174080a1e62295c223e87)) -* improvements to memorial theme ([59f56bd](https://github.com/pietervdvn/MapComplete/commit/59f56bd251c2523cb81ca07c74f9107c70560869)) -* include love hotels in regular hotels theme (with a high minzoom) ([d48b8af](https://github.com/pietervdvn/MapComplete/commit/d48b8aff922e3478a62ecc3e92f92b750e8eef8f)) -* lint layers to use an array instead of a string for 'snapToLayers' ([d534842](https://github.com/pietervdvn/MapComplete/commit/d534842d050f046ac5187ff8386c9edf052cdd23)) -* make filters of public bookcase translatable ([7b3d07e](https://github.com/pietervdvn/MapComplete/commit/7b3d07e5c489c0d139543cb7e5481e522b435b12)) -* make the selected note pulsate and have a different border when selected ([83fc189](https://github.com/pietervdvn/MapComplete/commit/83fc189fd332c0df2dc719a7ba676f3fad7cca32)) -* more questions about climbing services ([3769bd1](https://github.com/pietervdvn/MapComplete/commit/3769bd1c4fc7976d8d980f049ca6a3ecbc8710f1)) -* move all bike_shop questions into shops, reuse shops layer instead ([3c16e3d](https://github.com/pietervdvn/MapComplete/commit/3c16e3de686a903c1807d7a3a1397c6f350c8476)) -* move some bicycle shop questions into the shops-layer so that those questions are asked there as well (and that both layers can be unified) ([6cd7828](https://github.com/pietervdvn/MapComplete/commit/6cd7828ed3576dd8abf36c24032f9ec1d4966684)) -* move tagRenderings+ above leftover-questions ([f2f041f](https://github.com/pietervdvn/MapComplete/commit/f2f041f9d0bfb557588ccd90b1d710498aa8edc0)) -* only add rating-title-icon if 'review_list()' is used in the layer ([6c75553](https://github.com/pietervdvn/MapComplete/commit/6c75553f3fec7642c7bbb75d999781126a344065)) -* phone validation now knows about some short-codes ([38b9523](https://github.com/pietervdvn/MapComplete/commit/38b9523b835b72bfe9f068b55015d8f7868951c9)) -* pin more markers to new icon ([04ee3dc](https://github.com/pietervdvn/MapComplete/commit/04ee3dc32c7b1e8c6690a91624530309df65e813)) -* properly show the name of the hospital ([9739973](https://github.com/pietervdvn/MapComplete/commit/9739973f2e9e1c98e0ae6ea58f55bf8588a9de14)) -* re-enable terrain ([94bc6ee](https://github.com/pietervdvn/MapComplete/commit/94bc6ee31d36c56c31090ea07c7f2baecff99eb1)) -* remove obsolete fields from drinking water theme ([66cc615](https://github.com/pietervdvn/MapComplete/commit/66cc615805246100634aaccd8426c59eec5c03ce)) -* remove obsolete SOTM-events, fix [#1909](https://github.com/pietervdvn/MapComplete/issues/1909) ([5659dd8](https://github.com/pietervdvn/MapComplete/commit/5659dd8e8c2a1fbf596cf9fa2e3cb56ed2d95349)) -* remove unneeded invalidValues ([4fe0c41](https://github.com/pietervdvn/MapComplete/commit/4fe0c41628ae0a9dc6985a10bb396ea96534dde9)) -* show capacity:cargo_bike, allow to erase it ([58dfb93](https://github.com/pietervdvn/MapComplete/commit/58dfb93818e6f737b93c406b25bf4eb3c0572d7c)) -* show keycutting service question ([5bcc617](https://github.com/pietervdvn/MapComplete/commit/5bcc617d22ce6596f48f8e68a21910cd744c4682)) -* show maproulette marker in linking menu ([e327d38](https://github.com/pietervdvn/MapComplete/commit/e327d385d126864bb5e3ba17e3f3b2ff2fd7b5ae)) -* show maproulette marker in linking menu ([ac6fdde](https://github.com/pietervdvn/MapComplete/commit/ac6fdde785ddf11b833501ac3de6c4a9bf84201d)) -* show maproulette marker in linking menu ([8a4e2d8](https://github.com/pietervdvn/MapComplete/commit/8a4e2d8cb56c28b38ac03262dbfd76f874d3f2ef)) -* show toilets only from zoomlevel >= 15 ([6760897](https://github.com/pietervdvn/MapComplete/commit/6760897a6f6427755b63c8cc7da37b9d39279083)) -* small tweaks to fitness stations ([3f4410f](https://github.com/pietervdvn/MapComplete/commit/3f4410ff19e71c02e59df5fbe1ef77bcb2a53224)) -* tweak zoomlevels ([303d3a0](https://github.com/pietervdvn/MapComplete/commit/303d3a0337afc388ed2158ab008a8a17684c6530)) -* Update climbing_route.json: add snap to layer ([193b8b4](https://github.com/pietervdvn/MapComplete/commit/193b8b4672405abe0e54d3143c9faec88733e450)) -* Update climbing.json: add layers ([bb9b1df](https://github.com/pietervdvn/MapComplete/commit/bb9b1df4e0b26fff0a0e2e513b544c910f046f86)) -* update some default background layers ([a855840](https://github.com/pietervdvn/MapComplete/commit/a85584040d436012e3c68fe85e54e490529388db)) -* update tagging of climbing shoe repair ([d1aa751](https://github.com/pietervdvn/MapComplete/commit/d1aa751e1831cd1090ea5a738462b052fad2a4d9)) -* Update velopark description ([9083e89](https://github.com/pietervdvn/MapComplete/commit/9083e8954971ad4bed1914bc7cd5c30397b23895)) -* validate that a background layer actually exists, fix current-view button (GRB) ([fc483ed](https://github.com/pietervdvn/MapComplete/commit/fc483ed54776ed78efb9d9f4b2b868ac85a0e6b3)) -* validate that a background layer actually exists, fix current-view button (GRB) ([eb6194b](https://github.com/pietervdvn/MapComplete/commit/eb6194bf8f1752a7ef80583d8b878f75c146c7f8)) -* various fixes to velopark, see [#1783](https://github.com/pietervdvn/MapComplete/issues/1783) ([2583fee](https://github.com/pietervdvn/MapComplete/commit/2583feef65e18f786253c93123e22d111e992ccf)) -* various improvements ([d4895a0](https://github.com/pietervdvn/MapComplete/commit/d4895a098916183cef47f5dc79d1870b99472be3)) -* velopark: reorder attributes for a clearer view ([0929b55](https://github.com/pietervdvn/MapComplete/commit/0929b55b0807eb8cd9dea188d03339facf1113ce)) -* vending machines: add meat as option, add operator phone number, add 'condom' icon, fix [#1584](https://github.com/pietervdvn/MapComplete/issues/1584) ([86d0e5d](https://github.com/pietervdvn/MapComplete/commit/86d0e5dc745805772f248d67eddfec88095657a6)) +* a few improvements to velopark ([e7a5712](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e7a57125d797fdf3c31c66c1e0c54dfc5dc5a304)) +* active 'browse and link streetview' on all themes ([eb2a582](https://source.mapcomplete.org/MapComplete/MapComplete/commit/eb2a582d4910edda5e8dd76d229c0637bc5ac4a5)) +* Add 'access=permissive' to charging stations, fixes [#1255](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1255) ([cc70e09](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cc70e09e11f55c62276fe9fcc5cf4e9033ccc6f5)) +* add 'allowMove' everywhere, make 'allowMove' obligated, see [#2121](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2121) ([29d52e0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/29d52e0fc69f16477fbfd6f5c08900890626f0be)) +* add 'artwork' questions to drinking water fountains ([def640f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/def640fb1c97c581e4688c8c0a50f4e295d9458b)) +* add 'binding'-service question to copyshops ([7b1ca43](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7b1ca43266f596c9b9b40a3a86c0f5cf6d213a3e)) +* add 'fine-gravel' as option to sport-pitches ([679e371](https://source.mapcomplete.org/MapComplete/MapComplete/commit/679e371bd470976a41327494004054548e120401)) +* add 'hacklab' as option to hackerspaces ([665cd3b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/665cd3b0dd3bd2ad91c601554417cfec0eec54a2)) +* add 'hoops' question to basketball pitches ([4df9632](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4df9632d7c7093511b6e3b2349ee5d2fd99cb681)) +* add 'link' as builtin, available Icon ([7872f22](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7872f221512797ee82ea1e92455326baaa9874ab)) +* add 'lock' and 'key' icon to toilets, fix [#2094](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2094) ([577b596](https://source.mapcomplete.org/MapComplete/MapComplete/commit/577b596e7a8cdc2ea4cbd97c401422ee0ad06652)) +* Add 'open_now' filter to bike-shop ([aa6902a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/aa6902a25c4b27ef9424d0cdfb68a83f44ec7405)) +* add 'pedagogy', fix [#1839](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1839) ([4644b6a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4644b6ae550fa53c042978317484f9a99eafe8c7)) +* add 'skateboard' as sport pitch option ([f20219c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f20219cf37711b42e8bf1d4a4a1c0379d7d8df0e)) +* add 'website'-button which shows up by default if a website is known ([7c0d339](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7c0d339976fb26a9fc9ab74a540c7d5b7d640f80)) +* add ALPR-cameras to surveillance theme ([d1e91ee](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d1e91ee2f98936871941e4b7cd035ee4f1e35bbd)) +* add ALPR-cameras to surveillance theme ([97236c8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/97236c80a99686a1dc0c296bb4a730bc595884a5)) +* add animal types to animal_shelter, include animal_shelter in pets, generate licenses, fix cycle_highways.json ([3968a1e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3968a1e841cef10e5fac08b7a2c8e6b685a4f07c)) +* add animal_shelter, created by the studio ([c4d4a57](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c4d4a57a0804776c2eabb7cd7c11e269bac101d8)) +* add atm-option to postoffice, add postoffices to ATM theme, fix [#1551](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1551) ([c4a9fa8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c4a9fa81f23ec8a5dcc685b6c42b9e1208337818)) +* add baby icon to changing table question ([1b5a0a2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1b5a0a2a853237e9d51298f5e1b17c69afaafa71)) +* Add badminton fields to filters ([b60a3aa](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b60a3aa5684d58e9fec146b06fe2d2993eafd72e)) +* add before text on correct location ([6a2e372](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6a2e3720622e404089c243dc1aa7e7ab282ba2f2)) +* add benches on playground theme ([54a9edc](https://source.mapcomplete.org/MapComplete/MapComplete/commit/54a9edc687667372d0097fb51efb7b904005c9de)) +* add bicycle self-repair workshops to the map (WIP) ([c11d7af](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c11d7af17531cf381ce03e37765c2e0f7efd1745)) +* add camp site ([cfa1c28](https://source.mapcomplete.org/MapComplete/MapComplete/commit/cfa1c28789d2056e6b8ad7483360a007c639d73c)) +* add cargo bike option to bicycle rental, fix [#2016](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2016) ([b98aaff](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b98aaff8101255138c10704d2a02f9226b0fa7ec)) +* add charge to bike_parking ([ed96859](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ed96859233a921cbfc61046106b9202d40bbde6c)) +* add compile time check for 'sameAs'-filters that the referenced layer actually exists ([e188b96](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e188b9656122dd3f0a4cda55352bf81dad6dbc65)) +* add condition that hoops are only asked on basketball courts, fix [#1577](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1577) ([fb6f7ee](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fb6f7ee191554816581c955cfdfbb1a932981c77)) +* add conveying as condition for stairs ([f95f631](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f95f631045e2a83424a6ac7ef3d607fcba18cc6f)) +* add correct title for cafe, nightclub and bar if no name is present, fix [#1704](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1704) ([0129845](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0129845d22f028b213af59e57014ce8962b76327)) +* add currency type which does some reformatting ([d40474d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d40474d47e0b5ded963df2c4e76c6911de63dbca)) +* add currently open badge ([d9d330e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d9d330e91221fac741120c7e2cb0b394d0871406)) +* add delete to banks ([68cada0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/68cada0a0d8f7f57b2ed43eb459680764b2b3070)) +* add dog icon into title-icons, add dog filter, see [#212](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/212) ([7e0120d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7e0120d0e8948510db1eb0c17090900127dc8ed8)) +* add extra check so that in a mapping cannot override the , fix two such instances ([56ea116](https://source.mapcomplete.org/MapComplete/MapComplete/commit/56ea1163bb7c272cec717076da452ba069e82b3c)) +* add extra questions to 'map' layer based on custom theme ([10e0e27](https://source.mapcomplete.org/MapComplete/MapComplete/commit/10e0e277787f95e4da8b075edd308300dd6b0256)) +* add filter for vegetable oil to fritures theme ([721a930](https://source.mapcomplete.org/MapComplete/MapComplete/commit/721a930d76fcd4fedada4044f1c6b2c6802cd022)) +* add filters for 'wifi' and 'electricity' ([af2c6f4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/af2c6f47829dd91e5fa0ac4dad2f23e18ebf1d3f)) +* add fine_gravel as option for playground surface ([d8be0ac](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d8be0acdfef8a0a7f349d152abadf3e394c0145f)) +* add first version of ski theme ([8f25006](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8f250069988ea8e1b7f25e29db4e287200d354b8)) +* add guidepost layer ([da39dde](https://source.mapcomplete.org/MapComplete/MapComplete/commit/da39dde7b699e576e79eb5781933146fa9747ace)) +* add guidepost layer ([a06e513](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a06e513c4f5a662e6d09908440f6b3394addf483)) +* add guidepost theme ([ad239b2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ad239b230fd57233f377266dd68b15011136bbaa)) +* add guideposts to climbing theme ([a96a214](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a96a214c03b3438f9ccf96f7c37a2e842ec224e1)) +* add hostel, cleanup of hotel ([d167fe7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d167fe77232b502ccef4ee051c8d73f948100dd0)) +* add hostel, cleanup of hotel ([8e9ae05](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8e9ae0529b95b8736ad6a2cabf9927a3a27e4c0c)) +* add ice cream parlors ([69a7c9e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/69a7c9efa3eb29c32f0256b1a956e9846cdf5260)) +* add icons to access question in toilets ([2ba461d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2ba461d9578b515b23ff25a8a99d9a2b03779653)) +* add icons to question ([246b163](https://source.mapcomplete.org/MapComplete/MapComplete/commit/246b16317d93b8e2effe9b41f7ed8c362a61cff6)) +* add icons, add 'auto'-title-icons ([2c662c9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2c662c957860144a927260504ca30795f9249238)) +* Add internet questions to hackerspace, fix [#1856](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1856) ([c870544](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c870544d857a1c0f3f13e04da78db1a00f5e5342)) +* add keycutting service tags ([d8ce6f0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d8ce6f0da5887724778c03ea554add5fd5be16cd)) +* add label support to questions.json; add opening hours for hospitals ([41fdeb9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/41fdeb9cb5c664ca604da1f89f2724c0de3b1304)) +* add maxstay for bicycle parkings ([a71ed5d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a71ed5d53e0b238713cdd8741c7b05e9a9568c55)) +* add memorial layer, use 'subject' instead of 'name' for ghost bikes ([a57dbe0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a57dbe09d60734785420c4502699fcb6d89c6033)) +* add memorials to artwork on high zoom ([29c5b88](https://source.mapcomplete.org/MapComplete/MapComplete/commit/29c5b884c404c14258dd116921990923c9a89181)) +* add metal as material option ([6420b90](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6420b906e055f5572d093e18febdbe5dba325bce)) +* add minzoom to cafe_pub ([e2d3a71](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e2d3a71c5b3a15b5a21db112baaf5a13dec55a3c)) +* add minzoom to ski_piste and aerialway, fix [#1876](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1876) ([d7982bf](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d7982bfd3e92a863e33e9154b2c9c4044cdb4951)) +* add missing assets ([bc826be](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bc826bebed2c0f073da3163994be818d1c41c6f5)) +* Add more memorial types, add freeform option, fix [#1824](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1824) ([b0d0436](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b0d0436ebe79a44c1bfc6880ecbef66f85e159be)) +* add more options for support in advertisement, add presets ([c26225c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c26225ccf11987f8a2cbdf45820a2310428cf1c0)) +* add more questions about drinking water ([9fabab3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9fabab3588a7cdc3d04bcbae19b6868694bbc95f)) +* add mountain rescue stations to the ski map ([04509bc](https://source.mapcomplete.org/MapComplete/MapComplete/commit/04509bc3e7783f55e593679ddfba2263ecf7f3de)) +* add name and title to assembly_point and disaster_response layers ([f087012](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f08701211632b8f8f35597d908160f8460934e04)) +* add open love map, see https://github.com/thomersch/OpenLoveMap/issues/21 ([d6a55a5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d6a55a5ee9ef03c0a813b0d95dffa42cb0b4955d)) +* add operator question to bicycle parking ([ea00c71](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ea00c717de78c06ded81fae56be1a05b8e50ae37)) +* add OSM-carto again, fix [#1664](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1664) ([376a683](https://source.mapcomplete.org/MapComplete/MapComplete/commit/376a683cce13921e644364c8342362f3a21b3ab3)) +* add paid as option, fix [#2119](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2119) ([a4018d8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a4018d88b0f187b907c68a49dcfb496c0259bb91)) +* add payment options and internet to climbing theme ([2337033](https://source.mapcomplete.org/MapComplete/MapComplete/commit/23370336e81fa865a62507bb6f4de5030ad48bb5)) +* add payment options and internet to climbing theme ([1abcc76](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1abcc766f98f27298eb82e70ad7c09520adb8377)) +* add possibility to add an icon to 'render' (just like with mappings), add contact:mastodon support as general question, add mastodon question to hackerspaces ([03aafbe](https://source.mapcomplete.org/MapComplete/MapComplete/commit/03aafbe99c0d9f4fa5768d18e7bde093529ce93f)) +* add possibility to enable terrain, some fixes to overlaymap and pitch control ([e3dec8a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e3dec8aafada699be3cddfc86aeb63938036e5c5)) +* add proper 'image along way' possibility ([584fb3c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/584fb3cb57e77ea4382fda152d8604ef8293f9b1)) +* add question wether climbing ropes can be hired ([6425ad6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6425ad67e6a053e1b6cbbb038e0c544c0f07f10b)) +* Add rubber;tartan surface to playgrounds, add checkdate to playgrounds, add tartan to sport pitches ([7859e7d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7859e7d06990666c1c40756795f993949abef434)) +* add shoe repair services to the climbing map, add question if a shoemaker also repairs climbing shoes, add craft=shoemaker to shops theme ([3df5727](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3df5727f40a29d190394c71cf99896261f78474d)) +* add short description to velopark ([50e3c54](https://source.mapcomplete.org/MapComplete/MapComplete/commit/50e3c5483461cd085d3207fbd96f5b7fdfaebe57)) +* add smoking to food-layer, fix [#1874](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1874) ([f5a94c7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f5a94c7b5f24c1846681f75f8f79bc1d870574c0)) +* add some icons ([48df237](https://source.mapcomplete.org/MapComplete/MapComplete/commit/48df2379bf013006aad7e7bd68977e7a55a670d3)) +* add speed_camera to surveillance theme, see [#1913](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1913) ([9716bc5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9716bc5425967aa81b4885bff4063d8c0eebfd18)) +* add Stamen Watercolor again, see [#1652](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1652) ([d997c90](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d997c90352a0d70f2cd33108af4de16f58444868)) +* add statistics on used version ([1a7acc8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1a7acc80c1933894aa71bdd9cdfc6bd6985f5a40)) +* add sugar_free, gluten_free and lactose-free to shops- and food-layers ([b06784e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b06784e7a06aaeb40a375210bc95538a73db9aed)) +* add support for operator:email, mostly for velopark ([1c45f09](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1c45f0963219f3aa743b2ddf9840e2d152b0fae5)) +* add toilet questions into indoor theme ([8f93b0d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8f93b0d398aa16caa6e9167d96b02c7fc45182a4)) +* add validation check if a mapping does not erase another mapping completely ([556f6d0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/556f6d0b93aa7774b703e80590d2df1601d293c4)) +* add validation for duplicate presets, fix [#1582](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1582) ([2e8a331](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2e8a3311e76c9065338ffce1388658269a05e261)) +* add various services to hackerspaces and makerspaces, add icons, some fixes to make this work with expandRewrite ([8ceda1c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8ceda1cc5f7e549ccecc65b6469a7195de1022cc)) +* add velopark import functionality ([4c5ebf0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4c5ebf05f5d818abd622bf9d8c8a96926e36ddd6)) +* add velopark theme ([1c1cea7](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1c1cea7f033ea19c74a6efb958a69a3a729bad3c)) +* add warning if a tagRendering can be replaced by a direct value ([79e40d0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/79e40d0fee2e40b32babc218a374095f6ca520a5)) +* add wikipedia page for "subject:wikidata" on ghost bikes, specifically for the ghost bike of #Natenom ([d74cb00](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d74cb00df4fc55ca00082326da138b580fa39cc7)) +* add year to units ([c8eef2c](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c8eef2c8f6866ded26276250d422bd4a97e5b08c)) +* **advertising:** add (animated!) flag and screen icons ([090130d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/090130d596bb5ab7d337c7c96a55b38ef6181231)) +* **advertising:** boards are never animated ([b92e9b8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b92e9b815da3e1b15c9859f6d4726bac09307b7b)) +* **advertising:** Fix typos ([9e02c89](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9e02c89fd5da5c7ad4623ed205ef610e4462b2a7)) +* **advertising:** further refinements ([8127027](https://source.mapcomplete.org/MapComplete/MapComplete/commit/81270272518012cf2023be2888d2faa444ee012f)) +* **advertising:** further refinements ([59eabc5](https://source.mapcomplete.org/MapComplete/MapComplete/commit/59eabc5daaa675880e1b684c3d8b4d3f0c1139ac)) +* **advertising:** last icon ([3e72ba2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3e72ba2b464c819a09956fa22bb321ed68fe34a3)) +* **advertising:** more icons, reordering of the questions ([7fc0770](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7fc0770488ba99ea2d7aab658933d6e22c62cb3e)) +* align iconbadge, fix [#1893](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1893) ([ba098fc](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ba098fc29ac4ea46b0ff19a918282b4f81fe8f10)) +* allow multiple internet access types ([786b850](https://source.mapcomplete.org/MapComplete/MapComplete/commit/786b850dbeff9a92f761e65cd01a0e948140f37d)) +* allow to add multiple changing table locations, see [#1756](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1756) ([c62f7cc](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c62f7cce01da15ef3f123b95e08056ca5019b7c9)) +* allow to add pictures to a 'shelter' ([39c079d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/39c079db45aaadf98bf651d66d6bd88dbbe04bb2)) +* Allow to delete tourism accomodation ([60eeab9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/60eeab9aa79ab1a5fc65b7f5e6efb2ebb0b6e55e)) +* allow to have a non-number type together with a unit ([4ccfe3e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4ccfe3efe446b407be1ca53d4ad2c3ee6fdde0b4)) +* allow to move a shelter ([565dee8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/565dee8854f605ea40570c0c82d225935e11dba0)) +* allow to move and delete pharmacies ([5e95bd9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5e95bd99a2dcf424acbcad85aa96a3a36bd612a8)) +* allow to move hydrants ([432f244](https://source.mapcomplete.org/MapComplete/MapComplete/commit/432f24456d75e131425f0f1fe0df15c448f593ef)) +* also ask about menstrual products for toilet_at_amenity ([ae7cc95](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ae7cc95727bc33c6d67a2ef24d2a2e0c2e3c3214)) +* also show 'operator:website' and 'contact:website' as title icon if they are available ([8526f4e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8526f4e94140132c8abe880b93cbc45780f9686b)) +* automatically derive source from presets if no source is given ([0689758](https://source.mapcomplete.org/MapComplete/MapComplete/commit/06897588be3e56570b973c8db08fce1e13b29c7b)) +* automatically derive source from presets if no source is given ([8e18864](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8e18864daa9d19c2d9ccc2eb6a8ee408e7038d5e)) +* bench.json: decrease minzoom ([5b33d88](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5b33d88ffbff285849d7bf5896df8e8e2e547cef)) +* better support billboard on walls ([8816ad0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8816ad03ecaedfe248fff1b7b101a266a9a6f444)) +* better support billboard on walls ([0a1c90b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0a1c90be9e1515b2f708e0f672b0732c7356101b)) +* bicycle library: allow move, fix [#1768](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1768) ([7ac84dd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7ac84dd675a68f47b6af0465e337561aa0dc9586)) +* bicycle parking: add lockers as options, add operator:website (velopark features) ([22721cd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/22721cd3ef604255bc88d5be995d0f2d65e68a83)) +* change minzoom of second hand shops in circular economy ([0b2e878](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0b2e878481e3cc32b7b37c8cdb28251daa1b02d7)) +* Change text type ([c9751a3](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c9751a3eb570f1865966fa3861fac5ff5c761f1a)) +* description is now a textarea ([0c1b5d1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0c1b5d1b6c0d12914845a19692670bd1931f532c)) +* disable 'direction'-indicator for surveillance theme as it breaks selection, fix [#1458](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1458) ([9e15353](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9e15353588009e39cf4a8bc2569748f40759609a)) +* disable 'disused' from delete config, delete less fast for shops but use softdeletion instead ([28e737e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/28e737ed2eb6a3934fb650df9b1939a25f954d8c)) +* disable maxspeed and cycleway question for pedestrian roads ([e580f55](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e580f553197165d611258b8c68ed9f9a66ca42c4)) +* don't count food for fritures ([98d441a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/98d441a2602c360136db9f9cc883d2ef734137e5)) +* don't enforce 'allowMove' on unofficial themes ([5b45e42](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5b45e427a0185e224446aeecfe99e87d6077379a)) +* don't inline text fields if they don't have text around them ([821ddcf](https://source.mapcomplete.org/MapComplete/MapComplete/commit/821ddcfaca11ca194b319bfa09f8b0a9fea01a41)) +* don't show 'mark as unknown' if this would break the source-filter ([76a9a2e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/76a9a2ee23dcf61097d33fcbe556df7a46d9a395)) +* don't show favourite icon if not logged in ([b1d94b2](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b1d94b2121195a52ced59454b51844412b9018f3)) +* don't show opening_hours_state title icon if seasonal is set and the item is closed due to seasonal restrictions ([1748e98](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1748e98bfc714e147c12b8fc233432412ed186c2)) +* don't use 'Yes' or 'No' as start ([f87e735](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f87e73596e65a12b7fb88456dfb21dcc1eb8a850)) +* elevators: first ask if there is speech output/tactile writing before asking the relative languages ([8acaafe](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8acaafe307826ac682f25eaa0b188278ca4056fe)) +* enable 'guideposts' in nature theme ([94291de](https://source.mapcomplete.org/MapComplete/MapComplete/commit/94291de5a3451120b6abdb153ba57675949d3d5b)) +* enable 'speciality'-filter in doctors, decrease minzoom ([4090a74](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4090a7493253e2b5513307d013d0a0061394aed6)) +* enable deletion of bike_cafes ([90c44cc](https://source.mapcomplete.org/MapComplete/MapComplete/commit/90c44cc8bdfb7b2447f1974ed94430e5b2fa3c6f)) +* enable download functionality by default ([5504d49](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5504d49d595fee66f0c43f3efbf6f130634497be)) +* enable move on schools, tweak GRB for performance ([db98288](https://source.mapcomplete.org/MapComplete/MapComplete/commit/db982884a1eea2a6e37d67129256f9c6b192a841)) +* enable reviews for climbing areas and gyms ([2a3a78b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2a3a78bc69eea38a83378f02717bc9fdc1cd5414)) +* enable reviews on pharmacies-theme ([701f033](https://source.mapcomplete.org/MapComplete/MapComplete/commit/701f03397e0339cba98fc776f06b38ccb13511b2)) +* enable snapping for facade gardens ([da68d36](https://source.mapcomplete.org/MapComplete/MapComplete/commit/da68d365feab19a94ea85b2a756e3336bfb8b127)) +* exclude 'advertising=no' from loading, fix [#1865](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1865) ([eef9918](https://source.mapcomplete.org/MapComplete/MapComplete/commit/eef99186cfbc46b57a97d2df78c8ef9c69a4609b)) +* exclude route relations from "toilets=yes". There are a few route relations with 'toilets' and those choke up MapComplete ([139b014](https://source.mapcomplete.org/MapComplete/MapComplete/commit/139b014c6c1f34fff08210c1c4915ea79534086c)) +* explicitly set 'allowMove' for all layers, fix [#2121](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/2121) ([468b895](https://source.mapcomplete.org/MapComplete/MapComplete/commit/468b895302fff50bc68cbdf72998bc08590307d0)) +* extract layers from camperssite ([82e6b2a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/82e6b2af9b564117ebb5714b8a795b759ebf528d)) +* extract layers from camperssite ([44f42ee](https://source.mapcomplete.org/MapComplete/MapComplete/commit/44f42ee2c946d3f37224ca41f603e9c907ed5214)) +* first version of circular economy theme ([592be68](https://source.mapcomplete.org/MapComplete/MapComplete/commit/592be68f09b06f22d45d5d5c274c91315d1613f7)) +* fix [#1362](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1362) ([ff9ca5e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ff9ca5e5cd6abde6c578ae442fe0d06217015288)) +* fix [#1866](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1866) ([1cf7119](https://source.mapcomplete.org/MapComplete/MapComplete/commit/1cf71197f51646cfceb4b58267cf1bdd2223e12f)) +* fix [#1910](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1910) ([b484ea0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b484ea005b6b91bad729b7b1923f71b8fc893870)) +* fix badge, fix [#1894](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1894) ([a2279ac](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a2279ac28bfb1d5dbc0ac47c2762a9104e4e54c5)) +* fix calculated tags of climbing theme ([f800545](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f80054558fe8422c7c1dfa9e277bd772f157f436)) +* fix compilation ([c300d90](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c300d901284dfbf05c5044da46e12ec8ca4469d1)) +* fix conversion for legacy themes ([21c35fc](https://source.mapcomplete.org/MapComplete/MapComplete/commit/21c35fc2c56eea64d18ee0fc18d65b2cdb913c82)) +* fix cycle rental which dissappears ([efce134](https://source.mapcomplete.org/MapComplete/MapComplete/commit/efce134a6cc90d4c3794cac91fc0a9da10fdd3b1)) +* fix cycle_highways ([61575a9](https://source.mapcomplete.org/MapComplete/MapComplete/commit/61575a9909d8c0206e45a8106ef369ef616f45d7)) +* fix icon for shops layer ([d9d8c0a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d9d8c0ad1f0af64f6d08364a6c64f59b748f001a)) +* fix incorrect argument, might fix [#1881](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1881) ([209cfe6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/209cfe6b733b849e85854d7ab3eaf4987116226f)) +* fix internet question ([b132590](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b13259083a8d7c3b42e4df618b88de06b00f1041)) +* fix overrides, fix [#1705](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1705) ([3334bfb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3334bfb8cae9a2c326764e7375829769ac96c400)) +* fix rendering of charging station ([0c52051](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0c5205136b1a18ee91df65de52e9e60f2036d3b7)) +* fix some isCounted-typos ([20a462f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/20a462fdf5683587e50b42171c109e87eb193422)) +* fix titles and names for assembly points and disaster_response ([170c459](https://source.mapcomplete.org/MapComplete/MapComplete/commit/170c4592d13929810f6e822592cd1e2d1e83a1ac)) +* fix typo in soft-deletion tag ([5f62712](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5f627124e98e98f25e9e5a834f56e906237e0241)) +* fix validation errors due to [#1779](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1779) ([707d996](https://source.mapcomplete.org/MapComplete/MapComplete/commit/707d99619d7b5fa90891e93d5641f52715f04beb)) +* fix: don't show irrelevant 'multilevel'-question anymore ([b5fca68](https://source.mapcomplete.org/MapComplete/MapComplete/commit/b5fca68a82d529bd10f56ba0dd63d27ae11ea2a5)) +* ghost signs: add wall-based artworks to be able to mark them as ghost sign and to avoid duplicates ([e68edeb](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e68edeb29fa604daee0c7638999bcebab2fd7b11)) +* ghost signs: add wall-based artworks to be able to mark them as ghost sign and to avoid duplicates ([8f95e85](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8f95e8520a751ef9fef8cc7a8810322117c7b6c1)) +* hackerspaces: more workshop types ([70fa180](https://source.mapcomplete.org/MapComplete/MapComplete/commit/70fa180b6a1e1a0db4e54f623797c05847b7face)) +* Hide bike cleaning cost if we don't know if there is a bike cleaning service ([87aee9e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/87aee9e2b72013e387fd3c196a9940bf477743c8)) +* improve 'auto-type' special visualisation ([658db35](https://source.mapcomplete.org/MapComplete/MapComplete/commit/658db3561722ec5d220043969ed1154c9e7411af)) +* improve 'tourism-accomodation', add many more categories as some people are using 'hotels' to also add other categories (see https://wiki.openstreetmap.org/wiki/Organised_Editing/Activities/Trziste_prace) ([53ffa06](https://source.mapcomplete.org/MapComplete/MapComplete/commit/53ffa06a49a670ff23e605595aea7919c84f20b5)) +* improve 'tourism-accomodation', add many more categories as some people are using 'hotels' to also add other categories (see https://wiki.openstreetmap.org/wiki/Organised_Editing/Activities/Trziste_prace) ([bc54f79](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bc54f797d792ebeac4b043612df9682a1a4c79c6)) +* improve ability of 'rewrite' config ([f015604](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f015604000e09b81625d8dc5617e7c999b27fc74)) +* improve advertising theme, see [#1866](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1866), translation reset for new presets ([05bba07](https://source.mapcomplete.org/MapComplete/MapComplete/commit/05bba071dc44897fe795974a39d472159cbaadd4)) +* improve atm opening hours, add reviews to playgrounds ([9ce60b6](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9ce60b6ffb175803fde11b9116a0e1390ade766c)) +* improve benches ([9e10bf4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9e10bf421f9bcd1cadec10638eb520132c647c64)) +* improve error messages ([6897b88](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6897b888170399db9a5d4e649d89dee2f9d0b30f)) +* improve favourite panel ([59090fd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/59090fdb39a864b7d8b64a26fe35e98eacfa2121)) +* improve information about indoor rooms ([47bf119](https://source.mapcomplete.org/MapComplete/MapComplete/commit/47bf1195bcc198446c35b31ebd7d446efde7dd9d)) +* improve velopark usability ([c1003f8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/c1003f8fe79c4a2ce820d9764b51a4a25b6e7bbd)) +* improvements to BBQ, different icons, add some questions, remove 'unknown'-options ([2db0b1a](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2db0b1afcbbf7c8d8e6174080a1e62295c223e87)) +* improvements to memorial theme ([59f56bd](https://source.mapcomplete.org/MapComplete/MapComplete/commit/59f56bd251c2523cb81ca07c74f9107c70560869)) +* include love hotels in regular hotels theme (with a high minzoom) ([d48b8af](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d48b8aff922e3478a62ecc3e92f92b750e8eef8f)) +* lint layers to use an array instead of a string for 'snapToLayers' ([d534842](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d534842d050f046ac5187ff8386c9edf052cdd23)) +* make filters of public bookcase translatable ([7b3d07e](https://source.mapcomplete.org/MapComplete/MapComplete/commit/7b3d07e5c489c0d139543cb7e5481e522b435b12)) +* make the selected note pulsate and have a different border when selected ([83fc189](https://source.mapcomplete.org/MapComplete/MapComplete/commit/83fc189fd332c0df2dc719a7ba676f3fad7cca32)) +* more questions about climbing services ([3769bd1](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3769bd1c4fc7976d8d980f049ca6a3ecbc8710f1)) +* move all bike_shop questions into shops, reuse shops layer instead ([3c16e3d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3c16e3de686a903c1807d7a3a1397c6f350c8476)) +* move some bicycle shop questions into the shops-layer so that those questions are asked there as well (and that both layers can be unified) ([6cd7828](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6cd7828ed3576dd8abf36c24032f9ec1d4966684)) +* move tagRenderings+ above leftover-questions ([f2f041f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/f2f041f9d0bfb557588ccd90b1d710498aa8edc0)) +* only add rating-title-icon if 'review_list()' is used in the layer ([6c75553](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6c75553f3fec7642c7bbb75d999781126a344065)) +* phone validation now knows about some short-codes ([38b9523](https://source.mapcomplete.org/MapComplete/MapComplete/commit/38b9523b835b72bfe9f068b55015d8f7868951c9)) +* pin more markers to new icon ([04ee3dc](https://source.mapcomplete.org/MapComplete/MapComplete/commit/04ee3dc32c7b1e8c6690a91624530309df65e813)) +* properly show the name of the hospital ([9739973](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9739973f2e9e1c98e0ae6ea58f55bf8588a9de14)) +* re-enable terrain ([94bc6ee](https://source.mapcomplete.org/MapComplete/MapComplete/commit/94bc6ee31d36c56c31090ea07c7f2baecff99eb1)) +* remove obsolete fields from drinking water theme ([66cc615](https://source.mapcomplete.org/MapComplete/MapComplete/commit/66cc615805246100634aaccd8426c59eec5c03ce)) +* remove obsolete SOTM-events, fix [#1909](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1909) ([5659dd8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5659dd8e8c2a1fbf596cf9fa2e3cb56ed2d95349)) +* remove unneeded invalidValues ([4fe0c41](https://source.mapcomplete.org/MapComplete/MapComplete/commit/4fe0c41628ae0a9dc6985a10bb396ea96534dde9)) +* show capacity:cargo_bike, allow to erase it ([58dfb93](https://source.mapcomplete.org/MapComplete/MapComplete/commit/58dfb93818e6f737b93c406b25bf4eb3c0572d7c)) +* show keycutting service question ([5bcc617](https://source.mapcomplete.org/MapComplete/MapComplete/commit/5bcc617d22ce6596f48f8e68a21910cd744c4682)) +* show maproulette marker in linking menu ([e327d38](https://source.mapcomplete.org/MapComplete/MapComplete/commit/e327d385d126864bb5e3ba17e3f3b2ff2fd7b5ae)) +* show maproulette marker in linking menu ([ac6fdde](https://source.mapcomplete.org/MapComplete/MapComplete/commit/ac6fdde785ddf11b833501ac3de6c4a9bf84201d)) +* show maproulette marker in linking menu ([8a4e2d8](https://source.mapcomplete.org/MapComplete/MapComplete/commit/8a4e2d8cb56c28b38ac03262dbfd76f874d3f2ef)) +* show toilets only from zoomlevel >= 15 ([6760897](https://source.mapcomplete.org/MapComplete/MapComplete/commit/6760897a6f6427755b63c8cc7da37b9d39279083)) +* small tweaks to fitness stations ([3f4410f](https://source.mapcomplete.org/MapComplete/MapComplete/commit/3f4410ff19e71c02e59df5fbe1ef77bcb2a53224)) +* tweak zoomlevels ([303d3a0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/303d3a0337afc388ed2158ab008a8a17684c6530)) +* Update climbing_route.json: add snap to layer ([193b8b4](https://source.mapcomplete.org/MapComplete/MapComplete/commit/193b8b4672405abe0e54d3143c9faec88733e450)) +* Update climbing.json: add layers ([bb9b1df](https://source.mapcomplete.org/MapComplete/MapComplete/commit/bb9b1df4e0b26fff0a0e2e513b544c910f046f86)) +* update some default background layers ([a855840](https://source.mapcomplete.org/MapComplete/MapComplete/commit/a85584040d436012e3c68fe85e54e490529388db)) +* update tagging of climbing shoe repair ([d1aa751](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d1aa751e1831cd1090ea5a738462b052fad2a4d9)) +* Update velopark description ([9083e89](https://source.mapcomplete.org/MapComplete/MapComplete/commit/9083e8954971ad4bed1914bc7cd5c30397b23895)) +* validate that a background layer actually exists, fix current-view button (GRB) ([fc483ed](https://source.mapcomplete.org/MapComplete/MapComplete/commit/fc483ed54776ed78efb9d9f4b2b868ac85a0e6b3)) +* validate that a background layer actually exists, fix current-view button (GRB) ([eb6194b](https://source.mapcomplete.org/MapComplete/MapComplete/commit/eb6194bf8f1752a7ef80583d8b878f75c146c7f8)) +* various fixes to velopark, see [#1783](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1783) ([2583fee](https://source.mapcomplete.org/MapComplete/MapComplete/commit/2583feef65e18f786253c93123e22d111e992ccf)) +* various improvements ([d4895a0](https://source.mapcomplete.org/MapComplete/MapComplete/commit/d4895a098916183cef47f5dc79d1870b99472be3)) +* velopark: reorder attributes for a clearer view ([0929b55](https://source.mapcomplete.org/MapComplete/MapComplete/commit/0929b55b0807eb8cd9dea188d03339facf1113ce)) +* vending machines: add meat as option, add operator phone number, add 'condom' icon, fix [#1584](hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues/1584) ([86d0e5d](https://source.mapcomplete.org/MapComplete/MapComplete/commit/86d0e5dc745805772f248d67eddfec88095657a6)) -### [0.46.6](https://github.com/pietervdvn/MapComplete/compare/v0.46.7...v0.46.6) (2024-09-13) +### [0.46.6](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.46.7...v0.46.6) (2024-09-13) -### [0.46.7](https://github.com/pietervdvn/MapComplete/compare/v0.46.6...v0.46.7) (2024-09-13) +### [0.46.7](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.46.6...v0.46.7) (2024-09-13) diff --git a/package.json b/package.json index 6ee0a7277f..ac1f18c754 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "mapcomplete", "version": "0.50.7", - "repository": "https://github.com/pietervdvn/MapComplete", + "repository": "https://source.mapcomplete.org/MapComplete/MapComplete", "description": "A small website to edit OSM easily", - "bugs": "https://github.com/pietervdvn/MapComplete/issues", + "bugs": "hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues", "homepage": "https://mapcomplete.org", "main": "index.ts", "type": "module", @@ -295,4 +295,4 @@ "vite-node": "^3.0.5", "vitest": "^3.0.5" } -} +} \ No newline at end of file From 03526a8e162116fcdecaf532e11c8b030eb23a61 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Mon, 7 Apr 2025 19:10:11 +0200 Subject: [PATCH 59/90] Chore: Remove more GH references (#2374) --- .forgejo/pull_request_template.md | 2 +- .reuse/dep5 | 2 +- CONTRIBUTING.md | 8 ++++---- Docs/Development_deployment.md | 2 +- Docs/LanguagePicker.md | 2 +- Docs/Reasonings/Android.md | 2 +- Docs/Reasonings/ImgurToPanoramax.md | 4 ++-- .../Search/Research_UX_in_search.md | 6 +++--- Docs/Sponsors.md | 2 +- Docs/Studio/TagRenderingIntro.md | 2 +- Docs/Tags_format.md | 2 +- .../2023-01-06 Followup - cyclestreets.md | 2 +- Docs/UserTests/2024-08-26 User Test Search.md | 4 ++-- .../maproulette_challenge.json | 12 +++++------ assets/layers/questions/license_info.json | 2 +- assets/layers/sport_pitch/license_info.json | 2 +- assets/themes/climbing/climbing.json | 4 ++-- assets/themes/velopark/velopark.json | 4 ++-- langs/ca.json | 6 +++--- langs/cs.json | 6 +++--- langs/da.json | 7 +++---- langs/de.json | 6 +++--- langs/en.json | 6 +++--- langs/es.json | 6 +++--- langs/fi.json | 4 ++-- langs/fr.json | 6 +++--- langs/gl.json | 2 +- langs/hu.json | 6 +++--- langs/id.json | 5 ++--- langs/it.json | 4 ++-- langs/ja.json | 2 +- langs/ko.json | 6 +++--- langs/layers/ca.json | 2 +- langs/layers/cs.json | 2 +- langs/layers/de.json | 2 +- langs/layers/en.json | 2 +- langs/layers/es.json | 2 +- langs/nb_NO.json | 10 ++++------ langs/nl.json | 6 +++--- langs/pl.json | 6 +++--- langs/pt.json | 6 +++--- langs/ru.json | 2 +- langs/themes/de.json | 2 +- langs/uk.json | 6 +++--- langs/zh_Hant.json | 6 +++--- scripts/downloadEli.ts | 2 +- scripts/hetzner/deployHetzner.sh | 2 +- scripts/nsiLogos.ts | 2 +- scripts/serverLdScrape.ts | 2 +- src/Logic/Search/SearchUtils.ts | 7 ++++--- src/Logic/Tags/TagUtils.ts | 2 +- src/Logic/Web/MangroveReviews.ts | 2 +- src/Models/Constants.ts | 2 +- .../ThemeConfig/Conversion/PrepareLayer.ts | 20 +++++++++++++++---- .../ThemeConfig/Conversion/PrepareTheme.ts | 2 +- .../ThemeConfig/Json/LayerConfigJson.ts | 6 +++--- src/Models/ThemeConfig/Json/TagConfigJson.ts | 2 +- .../BigComponents/SelectedElementTitle.svelte | 2 +- src/UI/Input/TextField.ts | 2 +- src/UI/Reviews/ReviewsOverview.svelte | 2 +- src/UI/Studio/TagInput/BasicTagInput.svelte | 2 +- src/UI/StudioGUI.svelte | 2 +- src/assets/studio_tagrenderings_intro.json | 2 +- 63 files changed, 131 insertions(+), 122 deletions(-) diff --git a/.forgejo/pull_request_template.md b/.forgejo/pull_request_template.md index 8745114960..5d12d6ee98 100644 --- a/.forgejo/pull_request_template.md +++ b/.forgejo/pull_request_template.md @@ -13,5 +13,5 @@ To making merging smooth, please make sure that each of the following conditions - [ ] The codebase is GPL-licensed. By opening a pull request, the new theme will be GPL too - [ ] All images are included in the pull request and no images are loaded from an external service (e.g. Wikipedia) -- [ ] The [guidelines on how to make your own theme](https://github.com/pietervdvn/MapComplete/blob/master/Docs/Making_Your_Own_Theme.md) +- [ ] The [guidelines on how to make your own theme](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/master/Docs/Making_Your_Own_Theme.md) are read and followed diff --git a/.reuse/dep5 b/.reuse/dep5 index 7917d2bbfd..db35a7b550 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -1,7 +1,7 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: MapComplete Upstream-Contact: Pieter Vander Vennet -Source: https://github.com/pietervdvn/MapComplete +Source: https://source.mapcomplete.org/MapComplete/MapComplete/ Files: scripts/* src/* *.html Docs/* langs/* test/* ublic/css/* CODE_OF_CONDUCT.md CONTRIBUTING.md README.md package.json Copyright: MapComplete contributors diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 97c6f4c4c1..4ffe382623 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,7 +7,7 @@ There are multiple ways to contribute: - Translating MapComplete to your own language can be done on [the Weblate website](https://translate.mapcomplete.org/projects/mapcomplete/) -- If you encounter a bug, the [issue tracker](https://github.com/pietervdvn/MapComplete/issues) is the place to be +- If you encounter a bug, the [issue tracker](https://source.mapcomplete.org/MapComplete/MapComplete/issues) is the place to be - A good start to contribute is to create a single map layer showing features which interest you. Read more about [making your own theme](/Docs/Making_Your_Own_Theme.md). - Feel free to hop in [our chat channel on matrix](https://app.element.io/#/room/#MapComplete:matrix.org) - If you want to improve a theme, create a new theme, spot a typo in the repo... the best way is to open a pull request. @@ -19,9 +19,9 @@ Rights of contributors ----------------------- If you have write access to the repository, you can make a fork of an already existing branch and push this new branch -to GitHub. This means that this branch will be _automatically built_ and be **deployed** -to `https://pietervdvn.github.io/mc/`. You can see the deploy process -on [GitHub Actions](https://github.com/pietervdvn/MapComplete/actions). Don't worry about pushing too much. These +to Forgejo. This means that this branch will be _automatically built_ and be **deployed** +to `https://builds.mapcomplete.org/`. You can see the deploy process +on [Forgejo Actions](https://source.mapcomplete.org/MapComplete/MapComplete/actions). Don't worry about pushing too much. These deploys are free and totally automatic. They might fail if something is wrong, but this will hinder no one. Additionally, some other maintainer might step in and merge the latest develop with your branch, making later pull diff --git a/Docs/Development_deployment.md b/Docs/Development_deployment.md index a415f99d84..317cbddb80 100644 --- a/Docs/Development_deployment.md +++ b/Docs/Development_deployment.md @@ -6,7 +6,7 @@ There are various scripts to help set up MapComplete for developing and for depl This documents attempts to shed some light on these scripts. Note: these scripts change every now and then - if the documentation here is incorrect or you run into troubles, do -leave a message in [the issue tracker](https://github.com/pietervdvn/MapComplete/issues) +leave a message in [the issue tracker](https://source.mapcomplete.org/MapComplete/MapComplete/issues) Architecture overview --------------------- diff --git a/Docs/LanguagePicker.md b/Docs/LanguagePicker.md index fcc609c584..0ce82ce42b 100644 --- a/Docs/LanguagePicker.md +++ b/Docs/LanguagePicker.md @@ -41,7 +41,7 @@ This one fetches all languages and uses the labels in every language as their tr Of course, real life isn't as easy. There are dialects, differences in notation between Weblate and Wikipedia (e.g. `zh-hant` vs `zh-Hant`). But with a few exceptions, this can be fixed too. Some pragmatism doesn't hurt - even though it is nice that it works for most cases automatically. -[The full script is available here](https://github.com/pietervdvn/MapComplete/blob/develop/scripts/fetchLanguages.ts). +[The full script is available here](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/scripts/fetchLanguages.ts). # Results diff --git a/Docs/Reasonings/Android.md b/Docs/Reasonings/Android.md index ed6b95b063..52cf989e11 100644 --- a/Docs/Reasonings/Android.md +++ b/Docs/Reasonings/Android.md @@ -1,6 +1,6 @@ # Android experiments -This document keeps track of the approaches used to implement https://github.com/pietervdvn/MapComplete/issues/2112 +This document keeps track of the approaches used to implement https://source.mapcomplete.org/MapComplete/MapComplete/issues/2112 It is espacially used to document the dead ends diff --git a/Docs/Reasonings/ImgurToPanoramax.md b/Docs/Reasonings/ImgurToPanoramax.md index fddf3c4cd1..ca4e24e765 100644 --- a/Docs/Reasonings/ImgurToPanoramax.md +++ b/Docs/Reasonings/ImgurToPanoramax.md @@ -28,7 +28,7 @@ one can notice the graph going steeper during october: With all the machinery in place to upload to panoramax, I also created a script to upload the images from my backup to this panoramax instance. I've been moving the pictures over in the past few weeks (before the divorce gets ugly and we get completely blocked off). -The technical details are documented on [the issue tracker](https://github.com/pietervdvn/MapComplete/issues/2189) +The technical details are documented on [the issue tracker](https://source.mapcomplete.org/MapComplete/MapComplete/issues/2189) But, by now, there are 39.124 pictures in our Panoramax server. At most a few (<10) pictures made with MapComplete had been lost by now. The script deleted a few more image links - mostly in Germany - but these links have been dead for a long time - the original image was linked about 12 year ago for some POI. @@ -66,7 +66,7 @@ such as thematic maps (such as the streetcomplete overlays) or having image uplo ## Support the project Please, continue to support the project! The most obvious way is to [simply use it to make edit](https://mapcomplete.org), -by [reporting bugs](https://github.com/pietervdvn/MapComplete/issues) (but I'm swamped with work and studies right now, so it'll take a while before I'll look to your bug report) +by [reporting bugs](https://source.mapcomplete.org/MapComplete/MapComplete/issues) (but I'm swamped with work and studies right now, so it'll take a while before I'll look to your bug report) or by [supporting me financially](https://liberapay.com/pietervdvn/) You can follow us on Mastodon: diff --git a/Docs/Reasonings/Search/Research_UX_in_search.md b/Docs/Reasonings/Search/Research_UX_in_search.md index d3ed329858..4541b13cd3 100644 --- a/Docs/Reasonings/Search/Research_UX_in_search.md +++ b/Docs/Reasonings/Search/Research_UX_in_search.md @@ -110,6 +110,6 @@ Support for coordinates (some always interpret lat, lon) and optional reverse ge Support for OSM-ids (e.g. node/123, https://osm.org/node/123) (#1671) Support for layers (categories) and/or switching themes -Switch themes (or layers) via search (https://github.com/pietervdvn/MapComplete/issues/1385) -Open the popup on exact match (https://github.com/pietervdvn/MapComplete/issues/1385) -https://github.com/pietervdvn/MapComplete/issues/1480 +Switch themes (or layers) via search (https://source.mapcomplete.org/MapComplete/MapComplete/src/issues/1385) +Open the popup on exact match (https://source.mapcomplete.org/MapComplete/MapComplete/issues/1385) +https://source.mapcomplete.org/MapComplete/MapComplete/issues/1480 diff --git a/Docs/Sponsors.md b/Docs/Sponsors.md index 5e0ef0e11f..c41d7c74f6 100644 --- a/Docs/Sponsors.md +++ b/Docs/Sponsors.md @@ -7,7 +7,7 @@ This ties in closely to the history of the project as well. There is a [Liberapay](https://liberapay.com/pietervdvn). -NL-Net is currently sponsoring Pietervdvn as well [for specific improvements](https://github.com/pietervdvn/MapComplete/issues?q=is%3Aissue+is%3Aopen+label%3ANLNet). +NL-Net is currently sponsoring Pietervdvn as well [for specific improvements](https://source.mapcomplete.org/MapComplete/MapComplete/issues?labels=9). ## Historical sponsors diff --git a/Docs/Studio/TagRenderingIntro.md b/Docs/Studio/TagRenderingIntro.md index 0d8990050e..a6683608e3 100644 --- a/Docs/Studio/TagRenderingIntro.md +++ b/Docs/Studio/TagRenderingIntro.md @@ -29,7 +29,7 @@ Note that this also works withing predifined options # Special values -Special components can be summoned by calling them. For example, the relevant wikipedia will be displayed by entering the text `{wikipedia()}`. A table with opening hours is displayed with `{opening_hours()}`. For a full reference, [see the documentation](https://github.com/pietervdvn/MapComplete/blob/master/Docs/SpecialRenderings.md). +Special components can be summoned by calling them. For example, the relevant wikipedia will be displayed by entering the text `{wikipedia()}`. A table with opening hours is displayed with `{opening_hours()}`. For a full reference, [see the documentation](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/SpecialRenderings.md). # Requesting data with predefined options diff --git a/Docs/Tags_format.md b/Docs/Tags_format.md index 39fcb16004..f113174c79 100644 --- a/Docs/Tags_format.md +++ b/Docs/Tags_format.md @@ -6,7 +6,7 @@ Tags format When creating the `json` file describing your layer or theme, you'll have to add a few tags to describe what you want. This document gives an overview of what every expression means and how it behaves in edge cases. -If the schema-files note a type [`TagConfigJson`](https://github.com/pietervdvn/MapComplete/blob/develop/src/Models/ThemeConfig/Json/TagConfigJson.ts), you can use one of these values. +If the schema-files note a type [`TagConfigJson`](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/src/Models/ThemeConfig/Json/TagConfigJson.ts), you can use one of these values. In some cases, not every type of tags-filter can be used. For example, _rendering_ an option with a regex is fine (`"if": "brand~[Bb]randname", "then":" The brand is Brandname"`); but this regex can not be used to write a value diff --git a/Docs/UserTests/2023-01-06 Followup - cyclestreets.md b/Docs/UserTests/2023-01-06 Followup - cyclestreets.md index 3cb61b1a77..173508df16 100644 --- a/Docs/UserTests/2023-01-06 Followup - cyclestreets.md +++ b/Docs/UserTests/2023-01-06 Followup - cyclestreets.md @@ -1,7 +1,7 @@ # Follow-up user test This user test was conducted with the same test subject as [2023-01-02 Ad Hoc - cyclestreets.md]. -This test consists of the _same_ task as the previous user test to validate that [improvements made based on this usertest](https://github.com/pietervdvn/MapComplete/issues/1219) actually improve the situation. +This test consists of the _same_ task as the previous user test to validate that [improvements made based on this usertest](https://source.mapcomplete.org/MapComplete/MapComplete/issues/1219) actually improve the situation. Subject: K Vs diff --git a/Docs/UserTests/2024-08-26 User Test Search.md b/Docs/UserTests/2024-08-26 User Test Search.md index 71fd74e14c..56aad16d9e 100644 --- a/Docs/UserTests/2024-08-26 User Test Search.md +++ b/Docs/UserTests/2024-08-26 User Test Search.md @@ -77,7 +77,7 @@ Success: user sponteanously interacts with the questions! > User wants to make a change to the review - [/] Failure: this is not yet possible, tracked in https://github.com/pietervdvn/MapComplete/issues/2129 + [/] Failure: this is not yet possible, tracked in https://source.mapcomplete.org/MapComplete/MapComplete/issues/2129 ## Updating information @@ -103,7 +103,7 @@ Success: user sponteanously interacts with the questions! > THe user notices that complex opening hours are displayed a bit sloppily - [+] Coincidentally, an issue was opened about precisely this at the same time: https://github.com/pietervdvn/MapComplete/issues/2100 + [+] Coincidentally, an issue was opened about precisely this at the same time: https://source.mapcomplete.org/MapComplete/MapComplete/issues/2100 > At first, the user changed the classification from 'restaurant' to 'fastfood' after thoroughly reading through the descriptions diff --git a/assets/layers/maproulette_challenge/maproulette_challenge.json b/assets/layers/maproulette_challenge/maproulette_challenge.json index 8d04f289f6..2137f4d13e 100644 --- a/assets/layers/maproulette_challenge/maproulette_challenge.json +++ b/assets/layers/maproulette_challenge/maproulette_challenge.json @@ -2,12 +2,12 @@ "id": "maproulette_challenge", "name": null, "description": { - "en": "Layer showing tasks of a single MapRoulette challenge. This layer is intended to be reused and extended in themes; refer to [the documentation](https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Integrating_Maproulette.md) on how to do this.", - "de": "Ebene mit Aufgaben einer einzelnen MapRoulette-Herausforderung. Diese Ebene soll in Themen wiederverwendet und erweitert werden; Informationen dazu finden Sie in der [Dokumentation](https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Integrating_Maproulette.md).", + "en": "Layer showing tasks of a single MapRoulette challenge. This layer is intended to be reused and extended in themes; refer to [the documentation](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Integrating_Maproulette.md) on how to do this.", + "de": "Ebene mit Aufgaben einer einzelnen MapRoulette-Herausforderung. Diese Ebene soll in Themen wiederverwendet und erweitert werden; Informationen dazu finden Sie in der [Dokumentation](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Integrating_Maproulette.md).", "nl": "Laag met taken van een MapRoulette uitdaging", - "ca": "Capa que mostra les tasques d'un sol repte de MapRoulette. Aquesta capa està pensada per ser reutilitzada i ampliada en temes; consulteu [la documentació](https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Integrating_Maproulette.md) sobre com fer-ho.", - "cs": "Vrstva zobrazující úkoly jedné výzvy MapRoulette. Tato vrstva je určena k opětovnému použití a rozšíření v tématech; naleznete v [dokumentaci](https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Integrating_Maproulette.md), jak to provést.", - "es": "Capa que muestra las tareas de un único reto de MapRoulette. Esta capa está pensada para ser reutilizada y ampliada en temas; consulta la [documentación](https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Integrating_Maproulette.md) sobre cómo hacerlo." + "ca": "Capa que mostra les tasques d'un sol repte de MapRoulette. Aquesta capa està pensada per ser reutilitzada i ampliada en temes; consulteu [la documentació](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Integrating_Maproulette.md) sobre com fer-ho.", + "cs": "Vrstva zobrazující úkoly jedné výzvy MapRoulette. Tato vrstva je určena k opětovnému použití a rozšíření v tématech; naleznete v [dokumentaci](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Integrating_Maproulette.md), jak to provést.", + "es": "Capa que muestra las tareas de un único reto de MapRoulette. Esta capa está pensada para ser reutilizada y ampliada en temas; consulta la [documentación](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Integrating_Maproulette.md) sobre cómo hacerlo." }, "source": { "osmTags": "mr_taskId~*", @@ -309,4 +309,4 @@ } ], "allowMove": false -} +} \ No newline at end of file diff --git a/assets/layers/questions/license_info.json b/assets/layers/questions/license_info.json index c36d3502c6..fe402e0cdb 100644 --- a/assets/layers/questions/license_info.json +++ b/assets/layers/questions/license_info.json @@ -68,7 +68,7 @@ ], "sources": [ "https://freesvg.org/no-dogs-round-sign-vector-graphics", - "https://github.com/pietervdvn/MapComplete/pull/1948" + "https://source.mapcomplete.org/MapComplete/MapComplete/pulls/1948" ] }, { diff --git a/assets/layers/sport_pitch/license_info.json b/assets/layers/sport_pitch/license_info.json index f80b527b3b..cb1e8e5b7f 100644 --- a/assets/layers/sport_pitch/license_info.json +++ b/assets/layers/sport_pitch/license_info.json @@ -50,7 +50,7 @@ "Hufkratzer" ], "sources": [ - "https://github.com/pietervdvn/MapComplete/issues/920", + "https://source.mapcomplete.org/MapComplete/MapComplete/issues/920", " https://gist.githubusercontent.com/Hufkratzer/81abcfe749ce8f99257e38f58633dd72/raw/8fa614a983807724f7110793b57344cc70dc34bc/equestrian.svg" ] }, diff --git a/assets/themes/climbing/climbing.json b/assets/themes/climbing/climbing.json index 2461b97518..cc29314552 100644 --- a/assets/themes/climbing/climbing.json +++ b/assets/themes/climbing/climbing.json @@ -41,7 +41,7 @@ "descriptionTail": { "nl": "De klimkaart is oorspronkelijk gemaakt door Christian Neumann op kletterspots.de.", "en": "The climbing map was originally made by Christian Neumann. Please get in touch if you have feedback or questions.

The project uses data of the OpenStreetMap project.

", - "de": "

kletterspots.de wird betrieben von Christian Neumann. Bitte melden Sie sich, wenn Sie Feedback oder Fragen haben.

Das Projekt nutzt OpenStreetMap Daten und basiert auf der freien Software MapComplete.

", + "de": "

kletterspots.de wird betrieben von Christian Neumann. Bitte melden Sie sich, wenn Sie Feedback oder Fragen haben.

Das Projekt nutzt OpenStreetMap Daten und basiert auf der freien Software MapComplete.

", "ru": "Создатель карты скалолазания — Christian Neumann. Пожалуйста, пишите если у вас есть отзыв или вопросы.

Проект использует данные OpenStreetMap.

", "ja": "登山地図はもともと Christian Neumann によって作成されたものです。フィードバックや質問がありましたら、ご連絡ください。

このプロジェクトでは、OpenStreetMapプロジェクトのデータを使用します。

", "zh_Hant": "攀爬地圖最初由 Christian Neumann 製作。如果你有回饋意見或問題請到Please 這邊反應

這專案使用來自開放街圖專案的資料。

", @@ -548,4 +548,4 @@ ], "customCss": "./assets/themes/climbing/climbing.css", "widenFactor": 1.5 -} +} \ No newline at end of file diff --git a/assets/themes/velopark/velopark.json b/assets/themes/velopark/velopark.json index 571e2ccd03..279537926b 100644 --- a/assets/themes/velopark/velopark.json +++ b/assets/themes/velopark/velopark.json @@ -17,7 +17,7 @@ "nl": "Een hulpmiddel om data van velopark.be in OpenStreetMap in te laden" }, "descriptionTail": { - "*": "

Maintainer tools

" + "*": "

Maintainer tools

" }, "icon": "./assets/themes/velopark/velopark.svg", "startZoom": 18, @@ -575,4 +575,4 @@ ] ], "enableNoteImports": false -} +} \ No newline at end of file diff --git a/langs/ca.json b/langs/ca.json index b656041abf..f08a8ed3e4 100644 --- a/langs/ca.json +++ b/langs/ca.json @@ -171,7 +171,7 @@ "attributionBackgroundLayerWithCopyright": "La capa de fons actual és {name}: {copyright}", "attributionContent": "

Totes les dades provenen d'OpenStreetMap, i es poden reutilitzar lliurement sota la Llicència Oberta de Base de Dades (ODbL).

", "attributionTitle": "Avís d’atribució", - "codeContributionsBy": "MapComplete ha estat fet per {contributors} i {hiddenCount} més contribuïdors", + "codeContributionsBy": "MapComplete ha estat fet per {contributors} i {hiddenCount} més contribuïdors", "donate": "Donar suport econòmic a MapComplete", "editId": "Obre l'editor en línia d'OpenStreetMap aquí", "editJosm": "Editar aquí amb JOSM", @@ -194,7 +194,7 @@ "seeOnMapillary": "Veure aquestes imatges a Mapillary", "themeBy": "Tema mantingut per {author}", "title": "Copyright i atribució", - "translatedBy": "MapComplete ha estat traduït per {contributors} i {hiddenCount} col·laboradors més" + "translatedBy": "MapComplete ha estat traduït per {contributors} i {hiddenCount} col·laboradors més" }, "back": "Tornar", "backToIndex": "Torna a la vista general amb tots els mapes temàtics", @@ -320,7 +320,7 @@ }, "sharescreen": { "copiedToClipboard": "Enllaç copiat al portapapers", - "documentation": "Per obtenir més informació sobre els paràmetres d'URL disponibles, consulteu la documentació", + "documentation": "Per obtenir més informació sobre els paràmetres d'URL disponibles, consulteu la documentació", "embedIntro": "

Inclou-ho a la teva pàgina web

Per favor, inclou aquest mapa dins de la teva pàgina web.
T'animem a que ho facis, no cal que demanis permís.
És gratuït, i sempre ho serà. A més gent que ho faci servir més valuós serà.", "fsUserbadge": "Activar el botó d'entrada", "fsWelcomeMessage": "Mostra el missatge emergent de benvinguda i pestanyes associades", diff --git a/langs/cs.json b/langs/cs.json index 30f7c8d0f2..d51cb9542a 100644 --- a/langs/cs.json +++ b/langs/cs.json @@ -171,7 +171,7 @@ "attributionBackgroundLayerWithCopyright": "Aktuální vrstva pozadí je {name}: {copyright}", "attributionContent": "

Všechna data poskytuje OpenStreetMap, volně znovu použitelná pod licence pro otevřenou databázi.

", "attributionTitle": "Oznámení o atribuci", - "codeContributionsBy": "MapComplete vytvořili {contributors} a {hiddenCount} dalších přispěvatelů", + "codeContributionsBy": "MapComplete vytvořili {contributors} a {hiddenCount} dalších přispěvatelů", "donate": "Podpořte MapComplete finančně", "editId": "Zde otevřít online editor OpenStreetMap", "editJosm": "Upravit zde pomocí JOSM", @@ -199,7 +199,7 @@ "seeOnMapillary": "Podívejte se na tento obrázek na Mapillary", "themeBy": "Téma spravuje {author}", "title": "Autorská práva a uvedení zdroje", - "translatedBy": "MapComplete přeložili {contributors} a {hiddenCount} dalších přispěvatelů" + "translatedBy": "MapComplete přeložili {contributors} a {hiddenCount} dalších přispěvatelů" }, "back": "Zpět", "backToIndex": "Zobrazit všechny tematické mapy", @@ -399,7 +399,7 @@ "share": "Sdílet", "sharescreen": { "copiedToClipboard": "Odkaz zkopírovaný do schránky", - "documentation": "Další informace o dostupných parametrech URL naleznete v dokumentaci", + "documentation": "Další informace o dostupných parametrech URL naleznete v dokumentaci", "embedIntro": "

Vložte mapu na své webové stránky

Prosíme, vložte tuto mapu na své webové stránky.
Doporučujeme vám to udělat - nemusíte ani žádat o povolení.
Je a vždy to bude zdarma. Čím více lidí bude projekt používat, tím bude cennější.", "fsBackground": "Povolit přepínání pozadí", "fsFilter": "Povolit možnost přepínání vrstev a filtrů", diff --git a/langs/da.json b/langs/da.json index faa3d1f07e..c562ebe933 100644 --- a/langs/da.json +++ b/langs/da.json @@ -124,7 +124,7 @@ "attributionBackgroundLayerWithCopyright": "Det nuværende baggrundslag er {name}: {copyright}", "attributionContent": "

Alle data leveres af OpenStreetMap, frit genanvendelige under Open DataBase Licensen.

", "attributionTitle": "Meddelelse om tilskrivning", - "codeContributionsBy": "MapComplete er lavet af {contributors} og {hiddenCount} flere bidragsydere", + "codeContributionsBy": "MapComplete er lavet af {contributors} og {hiddenCount} flere bidragsydere", "donate": "Støt MapComplete økonomisk", "editId": "Åbn OpenStreetMap-onlineeditoren her", "editJosm": "Rediger her med JOSM", @@ -143,7 +143,7 @@ "openOsmcha": "De de seneste rettelser lavet med {theme}", "openThemeDocumentation": "Åbn dokumentationen for temakortet {name}", "themeBy": "Tema vedligeholdt af {author}", - "translatedBy": "MapComplete er oversat af {contributors} og {hiddenCount} flere bidragsydere" + "translatedBy": "MapComplete er oversat af {contributors} og {hiddenCount} flere bidragsydere" }, "back": "Tilbage", "backToIndex": "Gå tilbage til oversigten med alle temakort", @@ -460,8 +460,7 @@ "activateButton": "Hjælp med at oversætte MapComplete", "missing": "{count} uoversatte strenge" }, - "userinfo": { - }, + "userinfo": {}, "validation": { "color": { "description": "En farve eller hex-kode" diff --git a/langs/de.json b/langs/de.json index 418de370df..d780f56f98 100644 --- a/langs/de.json +++ b/langs/de.json @@ -171,7 +171,7 @@ "attributionBackgroundLayerWithCopyright": "Die aktuelle Hintergrundebene ist {name}: {copyright}", "attributionContent": "

Alle Daten werden bereitgestellt von OpenStreetMap, frei verwendbar unter der Open Database License.

", "attributionTitle": "Danke", - "codeContributionsBy": "MapComplete wurde erstellt von {contributors} und {hiddenCount} weiteren Personen", + "codeContributionsBy": "MapComplete wurde erstellt von {contributors} und {hiddenCount} weiteren Personen", "donate": "MapComplete finanziell unterstützen", "editId": "OpenStreetMap Online Editor öffnen", "editJosm": "Mit JOSM bearbeiten", @@ -199,7 +199,7 @@ "seeOnMapillary": "Dieses Bild auf Mapillary ansehen", "themeBy": "Dieses Thema wurde erstellt von {author}", "title": "Copyright und Urheberrechtsangabe", - "translatedBy": "MapComplete wurde übersetzt von {contributors} und {hiddenCount} weiteren Personen" + "translatedBy": "MapComplete wurde übersetzt von {contributors} und {hiddenCount} weiteren Personen" }, "back": "Zurück", "backToIndex": "Alle Themenkarten anzeigen", @@ -399,7 +399,7 @@ "share": "Teilen", "sharescreen": { "copiedToClipboard": "Verknüpfung in Zwischenablage kopiert", - "documentation": "Für weitere Informationen über verfügbare URL-Parameter, siehe Dokumentation", + "documentation": "Für weitere Informationen über verfügbare URL-Parameter, siehe Dokumentation", "embedIntro": "

Karte in Webseiten einbetten

Betten Sie diese Karte in Ihre Webseite ein.
Wir ermutigen Sie gern dazu - Sie müssen nicht mal um Erlaubnis fragen.
Die Karte ist kostenlos und wird es immer sein. Je mehr Leute die Karte benutzen, desto wertvoller wird sie.", "fsBackground": "Hintergrundauswahl aktivieren", "fsFilter": "Filter und Ebenenauswahl aktivieren", diff --git a/langs/en.json b/langs/en.json index 60d0cc1d22..45bd670828 100644 --- a/langs/en.json +++ b/langs/en.json @@ -171,7 +171,7 @@ "attributionBackgroundLayerWithCopyright": "The current background layer is {name}: {copyright}", "attributionContent": "

All data is provided by OpenStreetMap, freely reusable under the Open DataBase License.

", "attributionTitle": "Attribution notice", - "codeContributionsBy": "MapComplete has been built by {contributors} and {hiddenCount} more contributors", + "codeContributionsBy": "MapComplete has been built by {contributors} and {hiddenCount} more contributors", "donate": "Support MapComplete financially", "editId": "Open the OpenStreetMap online editor here", "editJosm": "Edit here with JOSM", @@ -199,7 +199,7 @@ "seeOnMapillary": "See this image on Mapillary", "themeBy": "Theme maintained by {author}", "title": "Copyright and attribution", - "translatedBy": "MapComplete has been translated by {contributors} and {hiddenCount} more contributors" + "translatedBy": "MapComplete has been translated by {contributors} and {hiddenCount} more contributors" }, "back": "Back", "backToIndex": "See all thematic maps", @@ -399,7 +399,7 @@ "share": "Share", "sharescreen": { "copiedToClipboard": "Link copied to clipboard", - "documentation": "For more information on available URL-parameters, consult the documentation", + "documentation": "For more information on available URL-parameters, consult the documentation", "embedIntro": "

Embed on your website

Please, embed this map into your website.
We encourage you to do it - you don't even have to ask permission.
It is free, and always will be. The more people are using this, the more valuable it becomes.", "fsBackground": "Enable switching backgrounds", "fsFilter": "Enable the possibility to toggle layers and filters", diff --git a/langs/es.json b/langs/es.json index 5892f5dbf7..8ec718cd94 100644 --- a/langs/es.json +++ b/langs/es.json @@ -171,7 +171,7 @@ "attributionBackgroundLayerWithCopyright": "La capa de fondo actual es {name}: {copyright}", "attributionContent": "

Todos los datos son proporcionados por OpenStreetMap, libremente reutilizables bajo la Licencia de Base de Datos Abierta.

", "attributionTitle": "Aviso de atribución", - "codeContributionsBy": "MapComplete ha sido creado por {contributors} y {hiddenCount} colaboradores más", + "codeContributionsBy": "MapComplete ha sido creado por {contributors} y {hiddenCount} colaboradores más", "donate": "Apoya MapComplete económicamente", "editId": "Abre el editor en línea de OpenStreetMap aquí", "editJosm": "Edita aquí con JOSM", @@ -198,7 +198,7 @@ "seeOnMapillary": "Ver esta imagen en Mapillary", "themeBy": "Tema mantenido por {author}", "title": "Copyright y atribución", - "translatedBy": "MapComplete ha sido traducido por {contributors} y {hiddenCount} colaboradores más" + "translatedBy": "MapComplete ha sido traducido por {contributors} y {hiddenCount} colaboradores más" }, "back": "Atrás", "backToIndex": "Ver todos los mapas temáticos", @@ -397,7 +397,7 @@ "share": "Compartir", "sharescreen": { "copiedToClipboard": "Enlace copiado al portapapeles", - "documentation": "Para más información sobre los parámetros de URL disponibles, consulta la documentación", + "documentation": "Para más información sobre los parámetros de URL disponibles, consulta la documentación", "embedIntro": "

Integrar en tu sitio web

Por favor, integra este mapa en tu sitio web.
Te animamos a hacerlo, ni siquiera tienes que pedir permiso.
Es gratis, y siempre lo será. Cuanto más gente lo use, más valioso se vuelve.", "fsBackground": "Habilitar el cambio de fondos", "fsFilter": "Habilitar la posibilidad de alternar capas y filtros", diff --git a/langs/fi.json b/langs/fi.json index 07a820d697..6b615867d8 100644 --- a/langs/fi.json +++ b/langs/fi.json @@ -149,7 +149,7 @@ "attributionBackgroundLayerWithCopyright": "Nykyinen taustataso on {name}: {copyright}", "attributionContent": "

Kaiken datan tarjoaa OpenStreetMap, vapaasti uudelleenkäytettävissä Open Database Licensen mukaisesti.

", "attributionTitle": "Kiitokset", - "codeContributionsBy": "MapCompleten on tehneet {contributors} ja {hiddenCount} muuta", + "codeContributionsBy": "MapCompleten on tehneet {contributors} ja {hiddenCount} muuta", "donate": "Tue MapCompletea rahallisesti", "editId": "Avaa OpenStreetMap-verkkoeditori tänne", "editJosm": "Muokkaa täällä JOSM:illa", @@ -168,7 +168,7 @@ "seeOnMapillary": "Näytä tämä kuva Mapillaryssä", "themeBy": "Teemaa ylläpitää {author}", "title": "Tekijänoikeudet ja alkuperä", - "translatedBy": "MapCompleten on kääntäneet {contributors} ja {hiddenCount} muuta" + "translatedBy": "MapCompleten on kääntäneet {contributors} ja {hiddenCount} muuta" }, "back": "Takaisin", "backToIndex": "Palaa kaikkien teemakarttojen yleiskuvaan", diff --git a/langs/fr.json b/langs/fr.json index c974ff6a70..2d9898a71b 100644 --- a/langs/fr.json +++ b/langs/fr.json @@ -150,7 +150,7 @@ "attributionBackgroundLayerWithCopyright": "Le fond de carte actuel est {name}: {copyright}", "attributionContent": "

Toutes les données sont fournies par OpenStreetMap, librement réutilisables sous Open DataBase License.

", "attributionTitle": "Crédits", - "codeContributionsBy": "MapComplete a été construit par {contributors} et {hiddenCount} autres contributeurs", + "codeContributionsBy": "MapComplete a été construit par {contributors} et {hiddenCount} autres contributeurs", "donate": "Soutenir MapComplete financièrement", "editId": "Ouvrir l’éditeur en ligne OpenStreetMap ici", "editJosm": "Modifier ici avec JOSM", @@ -170,7 +170,7 @@ "openThemeDocumentation": "Ouvrir la documentation pour la carte thématique {name}", "themeBy": "Thème maintenu par {author}", "title": "Droits d'auteur et attribution", - "translatedBy": "MapComplete est traduite par {contributors} et {hiddenCount} autres personnes" + "translatedBy": "MapComplete est traduite par {contributors} et {hiddenCount} autres personnes" }, "back": "Retour", "backToIndex": "Revenir vers l'aperçu de toutes les cartes thématiques", @@ -290,7 +290,7 @@ "share": "Partager", "sharescreen": { "copiedToClipboard": "Lien copié dans le presse-papier", - "documentation": "Pour plus d'information sur les paramètre d'URL disponible,consultez la documentation", + "documentation": "Pour plus d'information sur les paramètre d'URL disponible,consultez la documentation", "embedIntro": "

Incorporer à votre site Web

Ajouter la carte à votre site Web.
Nous vous y encourageons – pas besoin de permission.
C'est gratuit et pour toujours. Plus de personnes l'utilisent, mieux c'est.", "fsUserbadge": "Activer le bouton de connexion", "fsWelcomeMessage": "Afficher le message de bienvenue et les onglets associés", diff --git a/langs/gl.json b/langs/gl.json index ca118090df..bf06e22b41 100644 --- a/langs/gl.json +++ b/langs/gl.json @@ -23,7 +23,7 @@ "attribution": { "attributionContent": "

Todos os datos proveñen do OpenStreetMap, e pódense reutilizar libremente baixo a Licenza Aberta de Base de Datos (ODbL).

", "attributionTitle": "Aviso de atribución", - "codeContributionsBy": "O MapComplete foi feito por {contributors} e {hiddenCount} contribuíntes máis", + "codeContributionsBy": "O MapComplete foi feito por {contributors} e {hiddenCount} contribuíntes máis", "iconAttribution": { "title": "Iconas empregadas" }, diff --git a/langs/hu.json b/langs/hu.json index e7d2d5d160..8b1a03b050 100644 --- a/langs/hu.json +++ b/langs/hu.json @@ -171,7 +171,7 @@ "attributionBackgroundLayerWithCopyright": "A jelenlegi háttérréteg: {name} ({copyright})", "attributionContent": "

Az összes adatot az OpenStreetMap biztosítja; szabadon újrafelhasználhatók az Open DataBase License alapján.

", "attributionTitle": "Szerzők", - "codeContributionsBy": "A MapComplete-et {contributors} és további {hiddenCount} közreműködő fejleszti", + "codeContributionsBy": "A MapComplete-et {contributors} és további {hiddenCount} közreműködő fejleszti", "donate": "A MapComplete pénzügyi támogatása", "editId": "Az OpenStreetMap online szerkesztőjének megnyitása itt", "editJosm": "Szerkesztés itt JOSM-mal", @@ -198,7 +198,7 @@ "seeOnMapillary": "Kép megtekintése a Mapillaryn", "themeBy": "A tematikus térkép karbantartója: {author}", "title": "Szerzői jogok és tulajdonjog", - "translatedBy": "A MapComplete fordítói: {contributors} és {hiddenCount} további közreműködők" + "translatedBy": "A MapComplete fordítói: {contributors} és {hiddenCount} további közreműködők" }, "back": "Vissza", "backToIndex": "Az összes tematikus térkép megtekintése", @@ -397,7 +397,7 @@ "share": "Megosztás", "sharescreen": { "copiedToClipboard": "Link a vágólapra másolva", - "documentation": "A használható URL-paraméterekről további információt a dokumentációban találsz", + "documentation": "A használható URL-paraméterekről további információt a dokumentációban találsz", "embedIntro": "

Beágyazás egy weboldalon

Kérjük, illeszd be ezt a térképet a weboldalba.
Nosza, tedd meg – még engedélyt sem kell kérned.
Ingyenes, és az is marad. Minél többen használják, annál értékesebbé válik.", "fsBackground": "Háttér váltásának engedélyezése", "fsFilter": "Tétegek és szűrők közötti váltások lehetőségének engedélyezése", diff --git a/langs/id.json b/langs/id.json index 63e3842e27..d0b4a7e211 100644 --- a/langs/id.json +++ b/langs/id.json @@ -59,7 +59,7 @@ "attribution": { "attributionContent": "

Semua data disediakan oleh OpenStreetMap, digunakan kembali secara bebas di bawah Open DataBase License.

", "attributionTitle": "Pemberitahuan atribusi", - "codeContributionsBy": "MapComplete telah dibangun oleh {contributors} dan {hiddenCount} kontributor lainnya", + "codeContributionsBy": "MapComplete telah dibangun oleh {contributors} dan {hiddenCount} kontributor lainnya", "donate": "Dukung MapComplete secara finansial", "editId": "Buka penyunting daring OpenStreetMap di sini", "editJosm": "Sunting di sini dengan JOSM", @@ -150,8 +150,7 @@ "split": { "cancel": "Batal" }, - "translations": { - }, + "translations": {}, "validation": { "date": { "description": "Tanggal, dimulai dari tahun" diff --git a/langs/it.json b/langs/it.json index 8dd808b400..279671abc8 100644 --- a/langs/it.json +++ b/langs/it.json @@ -146,7 +146,7 @@ "attribution": { "attributionContent": "

Tutti i dati sono forniti da OpenStreetMap, riutilizzabili liberamente con Open Database License

", "attributionTitle": "Crediti", - "codeContributionsBy": "MapComplete è stato realizzato da {contributors} e {hiddenCount} altri collaboratori", + "codeContributionsBy": "MapComplete è stato realizzato da {contributors} e {hiddenCount} altri collaboratori", "donate": "Sostieni MapComplete economicamente", "editId": "Apri l'editor online di OpenStreetMap qui", "editJosm": "Modifica qui con JOSM", @@ -168,7 +168,7 @@ "seeOnMapillary": "Guarda questa immagine su Mapillary", "themeBy": "Tema manutenuto da {author}", "title": "Copyright e attribuzione", - "translatedBy": "MapComplete è stata tradotta da {contributors} e da {hiddenCount} contributori aggiuntivi" + "translatedBy": "MapComplete è stata tradotta da {contributors} e da {hiddenCount} contributori aggiuntivi" }, "back": "Indietro", "backToIndex": "Ritorna alla panoramica con tutte le mappe tematiche", diff --git a/langs/ja.json b/langs/ja.json index 174fa65d40..ca647b647a 100644 --- a/langs/ja.json +++ b/langs/ja.json @@ -23,7 +23,7 @@ "attribution": { "attributionContent": "

すべてのデータはOpenStreetMapによって提供され、 Open DataBaseライセンスの下で自由に再利用できます。

", "attributionTitle": "帰属通知", - "codeContributionsBy": "MapCompleteは{contributors}と、 {hiddenCount}人の貢献者によって開発されました", + "codeContributionsBy": "MapCompleteは{contributors}と、 {hiddenCount}人の貢献者によって開発されました", "iconAttribution": { "title": "使用されるアイコン" }, diff --git a/langs/ko.json b/langs/ko.json index ecfdd6bbbf..b6213966dd 100644 --- a/langs/ko.json +++ b/langs/ko.json @@ -171,7 +171,7 @@ "attributionBackgroundLayerWithCopyright": "최근 배경 레이어의 이름은 {name}: {copyright} 입니다", "attributionContent": "

모든 데이터는 OpenStreetMap에서 제공되며, Open DataBase License에 따라 자유롭게 재사용할 수 있습니다.

", "attributionTitle": "저작권 표시 안내", - "codeContributionsBy": "MapComplete는 {contributors}와{hiddenCount}명의 기여자들에 의해 개발되었습니다", + "codeContributionsBy": "MapComplete는 {contributors}와{hiddenCount}명의 기여자들에 의해 개발되었습니다", "donate": "MapComplete에 재정적으로 후원하기", "editId": "OpenStreetMap 온라인 편집기 열기", "editJosm": "JOSM으로 여기서 편집하기", @@ -198,7 +198,7 @@ "seeOnMapillary": "Mapillary에서 이미지 보기", "themeBy": "테마는 {author}에 의해 유지되었습니다", "title": "저작권 및 기여", - "translatedBy": "MapComplete는 {contributors}와 {hiddenCount}명의 기여자들에 의해 번역되었습니다" + "translatedBy": "MapComplete는 {contributors}와 {hiddenCount}명의 기여자들에 의해 번역되었습니다" }, "back": "뒤로가기", "backToIndex": "모든 테마의 지도 보기", @@ -397,7 +397,7 @@ "share": "공유", "sharescreen": { "copiedToClipboard": "클립보드에 링크 복사", - "documentation": "사용 가능한 URL 매개변수에 대한 자세한 내용은 문서를 참조하세요", + "documentation": "사용 가능한 URL 매개변수에 대한 자세한 내용은 문서를 참조하세요", "embedIntro": "

사용자의 사이트 삽입

이 지도를 사용자의 사이트에 삽입해 주세요
이를 적극 권장 합니다 -별도의 허가는 필요 없습니다
무료로 제공되며, 사용자가 많을수록 지도의 가치는 올라갑니다.", "fsBackground": "배경 전환 활성화", "fsFilter": "레이어와 필터 전환 기능 활성화", diff --git a/langs/layers/ca.json b/langs/layers/ca.json index 397f30f9e4..bc3caf8720 100644 --- a/langs/layers/ca.json +++ b/langs/layers/ca.json @@ -7151,7 +7151,7 @@ } }, "maproulette_challenge": { - "description": "Capa que mostra les tasques d'un sol repte de MapRoulette. Aquesta capa està pensada per ser reutilitzada i ampliada en temes; consulteu [la documentació](https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Integrating_Maproulette.md) sobre com fer-ho.", + "description": "Capa que mostra les tasques d'un sol repte de MapRoulette. Aquesta capa està pensada per ser reutilitzada i ampliada en temes; consulteu [la documentació](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Integrating_Maproulette.md) sobre com fer-ho.", "filter": { "0": { "options": { diff --git a/langs/layers/cs.json b/langs/layers/cs.json index 4f0ebe9cb0..a20424f670 100644 --- a/langs/layers/cs.json +++ b/langs/layers/cs.json @@ -6746,7 +6746,7 @@ } }, "maproulette_challenge": { - "description": "Vrstva zobrazující úkoly jedné výzvy MapRoulette. Tato vrstva je určena k opětovnému použití a rozšíření v tématech; naleznete v [dokumentaci](https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Integrating_Maproulette.md), jak to provést.", + "description": "Vrstva zobrazující úkoly jedné výzvy MapRoulette. Tato vrstva je určena k opětovnému použití a rozšíření v tématech; naleznete v [dokumentaci](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Integrating_Maproulette.md), jak to provést.", "filter": { "0": { "options": { diff --git a/langs/layers/de.json b/langs/layers/de.json index da90aaf6d6..b352a7b810 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -7115,7 +7115,7 @@ } }, "maproulette_challenge": { - "description": "Ebene mit Aufgaben einer einzelnen MapRoulette-Herausforderung. Diese Ebene soll in Themen wiederverwendet und erweitert werden; Informationen dazu finden Sie in der [Dokumentation](https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Integrating_Maproulette.md).", + "description": "Ebene mit Aufgaben einer einzelnen MapRoulette-Herausforderung. Diese Ebene soll in Themen wiederverwendet und erweitert werden; Informationen dazu finden Sie in der [Dokumentation](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Integrating_Maproulette.md).", "filter": { "0": { "options": { diff --git a/langs/layers/en.json b/langs/layers/en.json index 2d7de409b1..83e724195c 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -7348,7 +7348,7 @@ } }, "maproulette_challenge": { - "description": "Layer showing tasks of a single MapRoulette challenge. This layer is intended to be reused and extended in themes; refer to [the documentation](https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Integrating_Maproulette.md) on how to do this.", + "description": "Layer showing tasks of a single MapRoulette challenge. This layer is intended to be reused and extended in themes; refer to [the documentation](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Integrating_Maproulette.md) on how to do this.", "filter": { "0": { "options": { diff --git a/langs/layers/es.json b/langs/layers/es.json index dba026357b..c2f8bf4b6a 100644 --- a/langs/layers/es.json +++ b/langs/layers/es.json @@ -6739,7 +6739,7 @@ } }, "maproulette_challenge": { - "description": "Capa que muestra las tareas de un único reto de MapRoulette. Esta capa está pensada para ser reutilizada y ampliada en temas; consulta la [documentación](https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Integrating_Maproulette.md) sobre cómo hacerlo.", + "description": "Capa que muestra las tareas de un único reto de MapRoulette. Esta capa está pensada para ser reutilizada y ampliada en temas; consulta la [documentación](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Integrating_Maproulette.md) sobre cómo hacerlo.", "filter": { "0": { "options": { diff --git a/langs/nb_NO.json b/langs/nb_NO.json index 92c37ff8d2..da24253fec 100644 --- a/langs/nb_NO.json +++ b/langs/nb_NO.json @@ -102,7 +102,7 @@ "attribution": { "attributionContent": "

All data er fra OpenStreetMap, fritt gjenbrukbart med Open DataBase-lisens.

", "attributionTitle": "Tilskrivelsesmerknad", - "codeContributionsBy": "MapComplete har blitt bygd av {contributors} og {hiddenCount} bidragsytere til", + "codeContributionsBy": "MapComplete har blitt bygd av {contributors} og {hiddenCount} bidragsytere til", "donate": "Støtt MapComplete finansielt", "editId": "Åpne den nettbaserte OpenStreetMap-behandleren her", "editJosm": "Rediger med JOSM", @@ -118,7 +118,7 @@ "openMapillary": "Åpne Mapillary her", "openOsmcha": "Vis de seneste redigeringene gjort med {theme}", "themeBy": "Tema vedlikeholdt av {author}", - "translatedBy": "MapComplete har blitt oversatt av {contributors} og {hiddenCount} andre bidragsytere." + "translatedBy": "MapComplete har blitt oversatt av {contributors} og {hiddenCount} andre bidragsytere." }, "back": "Tilbake", "backgroundMap": "Bakgrunnskart", @@ -274,8 +274,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 +369,7 @@ "activateButton": "Bistå oversettelsen av MapComplete", "missing": "{count} uoversatte strenger" }, - "userinfo": { - }, + "userinfo": {}, "validation": { "color": { "description": "En farge eller heksadesimal kode" diff --git a/langs/nl.json b/langs/nl.json index 3b709b6710..b4510a80da 100644 --- a/langs/nl.json +++ b/langs/nl.json @@ -171,7 +171,7 @@ "attributionBackgroundLayerWithCopyright": "De huidige achtergrondlaag is {name} : {copyright}", "attributionContent": "

Alle data is voorzien door OpenStreetMap, gratis en vrij te hergebruiken onder de Open DataBase Licentie.

", "attributionTitle": "Met dank aan", - "codeContributionsBy": "MapComplete is gebouwd door {contributors} en {hiddenCount} andere bijdragers", + "codeContributionsBy": "MapComplete is gebouwd door {contributors} en {hiddenCount} andere bijdragers", "donate": "Geef MapComplete financiële steun", "editId": "Hier bewerken met de OpenStreetMap online editor", "editJosm": "Hier bewerken met JOSM", @@ -198,7 +198,7 @@ "seeOnMapillary": "Bekijk dit beeld op Mapillary", "themeBy": "Thema gemaakt door {author}", "title": "Copyright en attributie", - "translatedBy": "MapComplete werd vertaald door {contributors} en {hiddenCount} meer vertalers" + "translatedBy": "MapComplete werd vertaald door {contributors} en {hiddenCount} meer vertalers" }, "back": "Vorige", "backToIndex": "Bekijk alle thematische kaarten", @@ -397,7 +397,7 @@ "share": "Deel deze locatie", "sharescreen": { "copiedToClipboard": "Link gekopieerd naar klembord", - "documentation": "Voor meer informatie over beschikbare URL-parameters, raadpleeg de documentatie", + "documentation": "Voor meer informatie over beschikbare URL-parameters, raadpleeg de documentatie", "embedIntro": "

Plaats dit op je website

Voeg dit kaartje toe op je eigen website.
We moedigen dit zelfs aan - je hoeft geen toestemming te vragen.
Het is gratis en zal dat altijd blijven. Hoe meer het gebruikt wordt, hoe waardevoller", "fsBackground": "Wisselende achtergronden inschakelen", "fsFilter": "De mogelijkheid inschakelen om te wisselen tussen lagen en filters", diff --git a/langs/pl.json b/langs/pl.json index 0b4b2c2b42..97846187fa 100644 --- a/langs/pl.json +++ b/langs/pl.json @@ -129,7 +129,7 @@ "attributionBackgroundLayerWithCopyright": "Bieżąca warstwa tła to {name}: {copyright}", "attributionContent": "

Wszystkie dane pochodzą z OpenStreetMap i można je swobodnie wykorzystywać na warunkach Licencji Open DataBase.

", "attributionTitle": "Informacja o atrybucji", - "codeContributionsBy": "MapComplete został stworzony przez {contributors} i {hiddenCount} innych współtwórców", + "codeContributionsBy": "MapComplete został stworzony przez {contributors} i {hiddenCount} innych współtwórców", "donate": "Wspieraj finansowo MapComplete", "editId": "Otwórz edytor online OpenStreetMap w tej lokalizacji", "editJosm": "Edytuj tutaj za pomocą JOSM", @@ -147,7 +147,7 @@ "openOsmcha": "Zobacz ostatnie edycje zrobione przez {theme}", "themeBy": "Temat prowadzony przez: {author}", "title": "Prawa autorskie i podanie źródła", - "translatedBy": "MapComplete zostało przetłumaczone przez {contributors} i {hiddenCount} innych autorów" + "translatedBy": "MapComplete zostało przetłumaczone przez {contributors} i {hiddenCount} innych autorów" }, "back": "Cofnij", "backToIndex": "Cofnij do przeglądu wszystkich map tematycznych", @@ -267,7 +267,7 @@ }, "sharescreen": { "copiedToClipboard": "Link został skopiowany do schowka", - "documentation": "Aby uzyskać więcej informacji na temat dostępnych parametrów adresu URL, zajrzyj do dokumentacji", + "documentation": "Aby uzyskać więcej informacji na temat dostępnych parametrów adresu URL, zajrzyj do dokumentacji", "embedIntro": "

Umieść na swojej stronie internetowej

Proszę, umieść tę mapę na swojej stronie internetowej.
Zachęcamy Cię do tego - nie musisz nawet pytać o zgodę.
Jest ona darmowa i zawsze będzie. Im więcej osób jej używa, tym bardziej staje się wartościowa.", "fsUserbadge": "Włącz przycisk logowania", "fsWelcomeMessage": "Pokaż wyskakujące okienko wiadomości powitalnej i powiązane zakładki", diff --git a/langs/pt.json b/langs/pt.json index b0e74620dc..c1de41582b 100644 --- a/langs/pt.json +++ b/langs/pt.json @@ -169,7 +169,7 @@ "attributionBackgroundLayerWithCopyright": "A camada de fundo atual é {name}: {copyright}", "attributionContent": "

Todos os dados são fornecidos pelo OpenStreetMap e são livremente reutilizáveis sob a licença Open DataBase License.

", "attributionTitle": "Aviso de atribuição", - "codeContributionsBy": "O MapComplete foi criado por {contributors} e mais {hiddenCount} contribuidores", + "codeContributionsBy": "O MapComplete foi criado por {contributors} e mais {hiddenCount} contribuidores", "donate": "Apoie o MapComplete financeiramente", "editId": "Editar aqui com o editor online OpenStreetMap", "editJosm": "Editar aqui com o JOSM", @@ -188,7 +188,7 @@ "seeOnMapillary": "Ver esta imagem no Mapillary", "themeBy": "Tema mantido por {author}", "title": "Direitos de autor e atribuição", - "translatedBy": "O MapComplete foi traduzido por {contributors} e mais {hiddenCount} utilizadores" + "translatedBy": "O MapComplete foi traduzido por {contributors} e mais {hiddenCount} utilizadores" }, "back": "Voltar", "backToIndex": "Voltar à vista geral com todos os mapas temáticos", @@ -353,7 +353,7 @@ "share": "Partilhar", "sharescreen": { "copiedToClipboard": "Hiperligação copiada para a área de transferência", - "documentation": "Para mais informações nos parâmetros URL disponíveis, consulte a documentação", + "documentation": "Para mais informações nos parâmetros URL disponíveis, consulte a documentação", "embedIntro": "

Incorporar no seu site

Por favor, insira este mapa no seu site.
Encorajamos a fazê-lo - nem precisa de pedir permissão.
É grátis e sempre será. Quanto mais pessoas estiverem a usar isto, mais valioso se torna.", "fsUserbadge": "Ativar o botão de iniciar sessão", "fsWelcomeMessage": "Mostrar a janela com a mensagem de boas-vindas e separadores associados", diff --git a/langs/ru.json b/langs/ru.json index a6dab435f2..2376aa766c 100644 --- a/langs/ru.json +++ b/langs/ru.json @@ -50,7 +50,7 @@ "attribution": { "attributionContent": "

Все данные предоставлены OpenStreetMap, свободное повторное использование согласно Open DataBase License.

", "attributionTitle": "Уведомление об авторстве", - "codeContributionsBy": "MapComplete был создан {contributors} и ещё {hiddenCount} соавторами ", + "codeContributionsBy": "MapComplete был создан {contributors} и ещё {hiddenCount} соавторами ", "editJosm": "Редактировать это место в JOSM", "iconAttribution": { "title": "Используемые значки" diff --git a/langs/themes/de.json b/langs/themes/de.json index 47946dc198..993e3573fa 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -172,7 +172,7 @@ }, "climbing": { "description": "Eine Karte mit Klettermöglichkeiten wie Kletterhallen, Kletterparks oder Felsen.", - "descriptionTail": "

kletterspots.de wird betrieben von Christian Neumann. Bitte melden Sie sich, wenn Sie Feedback oder Fragen haben.

Das Projekt nutzt OpenStreetMap Daten und basiert auf der freien Software MapComplete.

", + "descriptionTail": "

kletterspots.de wird betrieben von Christian Neumann. Bitte melden Sie sich, wenn Sie Feedback oder Fragen haben.

Das Projekt nutzt OpenStreetMap Daten und basiert auf der freien Software MapComplete.

", "layers": { "0": { "override": { diff --git a/langs/uk.json b/langs/uk.json index 474954545f..f98aef8253 100644 --- a/langs/uk.json +++ b/langs/uk.json @@ -171,7 +171,7 @@ "attributionBackgroundLayerWithCopyright": "Поточний фоновий шар {name}: {copyright}", "attributionContent": "

Усі дані надаються OpenStreetMap, які можна вільно повторно використовувати в Ліцензія Open DataBase.

", "attributionTitle": "Повідомлення про авторство", - "codeContributionsBy": "MapComplete створено {contributors} та {hiddenCount} іншими учасниками", + "codeContributionsBy": "MapComplete створено {contributors} та {hiddenCount} іншими учасниками", "donate": "Підтримайте MapComplete фінансово", "editId": "Відкрийте онлайн-редактор OpenStreetMap тут", "editJosm": "Редагувати тут за допомогою JOSM", @@ -199,7 +199,7 @@ "seeOnMapillary": "Переглянути зображення на Mapillary", "themeBy": "Тему підтримує {author}", "title": "Авторське право", - "translatedBy": "MapComplete переклали {contributors} та {hiddenCount} інших учасників" + "translatedBy": "MapComplete переклали {contributors} та {hiddenCount} інших учасників" }, "back": "Назад", "backToIndex": "Переглянути всі тематичні мапи", @@ -399,7 +399,7 @@ "share": "Поділитися", "sharescreen": { "copiedToClipboard": "Посилання скопійовано в буфер обміну", - "documentation": "Для отримання додаткової інформації про доступні URL-параметри, зверніться до документації", + "documentation": "Для отримання додаткової інформації про доступні URL-параметри, зверніться до документації", "embedIntro": "

Додайте на свій вебсайт

Будь ласка, додайте цю мапу на свій вебсайт.
Ми заохочуємо вас це зробити — вам навіть не потрібно питати дозволу.
Це безплатно, і завжди буде. Чим більше людей цим користується, тим ціннішим воно стає.", "fsBackground": "Увімкнути перемикання фонів", "fsFilter": "Увімкніть можливість перемикання шарів і фільтрів", diff --git a/langs/zh_Hant.json b/langs/zh_Hant.json index e5691f3a08..463d250ffe 100644 --- a/langs/zh_Hant.json +++ b/langs/zh_Hant.json @@ -171,7 +171,7 @@ "attributionBackgroundLayerWithCopyright": "目前的背景圖層是 {name}:{copyright}", "attributionContent": "

所有資料由開放街圖提供,在開放資料庫授權條款之下自由再利用。

", "attributionTitle": "署名通知", - "codeContributionsBy": "MapComplete 是由 {contributors} 和其他 {hiddenCount} 位貢獻者構建而成", + "codeContributionsBy": "MapComplete 是由 {contributors} 和其他 {hiddenCount} 位貢獻者構建而成", "donate": "財務上支援 MapComplete", "editId": "開啟開放街圖線上編輯器", "editJosm": "採用 JOSM 編輯", @@ -199,7 +199,7 @@ "seeOnMapillary": "在 Mapillary 觀看這張影像", "themeBy": "由 {author} 維護主題", "title": "版權與署名", - "translatedBy": "MapComplete 由 {contributors} 翻譯,而且還有 {hiddenCount} 更多貢獻者" + "translatedBy": "MapComplete 由 {contributors} 翻譯,而且還有 {hiddenCount} 更多貢獻者" }, "back": "返回", "backToIndex": "回到所有主題地圖的總覽頁面", @@ -399,7 +399,7 @@ "share": "分享", "sharescreen": { "copiedToClipboard": "複製連結到簡貼簿", - "documentation": "要知道更多可以用的網址參數,參考這份文章", + "documentation": "要知道更多可以用的網址參數,參考這份文章", "embedIntro": "

嵌入到你的網站

請考慮將這份地圖嵌入您的網站。
地圖毋須額外授權,非常歡迎您多加利用。
一切都是免費的,而且之後也是免費的,越有更多人使用,則越顯得它的價值。", "fsBackground": "啟用切換背景", "fsFilter": "啟用切換圖層和過濾器的可能性", diff --git a/scripts/downloadEli.ts b/scripts/downloadEli.ts index 68abee9d0b..8780d5d816 100644 --- a/scripts/downloadEli.ts +++ b/scripts/downloadEli.ts @@ -25,7 +25,7 @@ class DownloadEli extends Script { const props = layer.properties if (props.type === "bing") { - // A lot of work to implement - see https://github.com/pietervdvn/MapComplete/issues/648 + // A lot of work to implement - see https://source.mapcomplete.org/MapComplete/MapComplete/issues/648 try { const bing = await BingRasterLayer.get() if (bing === "error") { diff --git a/scripts/hetzner/deployHetzner.sh b/scripts/hetzner/deployHetzner.sh index 1f790078f9..a2a99eabfb 100755 --- a/scripts/hetzner/deployHetzner.sh +++ b/scripts/hetzner/deployHetzner.sh @@ -7,7 +7,7 @@ # apt install unzip # npm i -g csp-logger -# wget https://github.com/pietervdvn/latlon2country/raw/main/tiles.zip +# wget https://source.mapcomplete.org/MapComplete/latlon2country/raw/branch/main/tiles.zip # unzip tiles.zip cp config.json config.json.bu && diff --git a/scripts/nsiLogos.ts b/scripts/nsiLogos.ts index c477700a62..ae893e8130 100644 --- a/scripts/nsiLogos.ts +++ b/scripts/nsiLogos.ts @@ -74,7 +74,7 @@ class NsiLogos extends Script { ttl-- const dloaded = await Utils.downloadAdvanced(url, { "User-Agent": - "MapComplete NSI scraper/0.1 (https://github.com/pietervdvn/MapComplete; pietervdvn@posteo.net)", + "MapComplete NSI scraper/0.1 (https://source.mapcomplete.org/MapComplete/MapComplete; pietervdvn@posteo.net)", }) const redirect: string | undefined = dloaded["redirect"] if (redirect) { diff --git a/scripts/serverLdScrape.ts b/scripts/serverLdScrape.ts index 799698a897..a75052cb63 100644 --- a/scripts/serverLdScrape.ts +++ b/scripts/serverLdScrape.ts @@ -19,7 +19,7 @@ class ServerLdScrape extends Script { accept: "application/html", }, /* { - "User-Agent": "MapComplete/openstreetmap scraper; pietervdvn@posteo.net; https://github.com/pietervdvn/MapComplete", + "User-Agent": "MapComplete/openstreetmap scraper; pietervdvn@posteo.net; https://source.mapcomplete.org/MapComplete", "accept": "application/html" }, { diff --git a/src/Logic/Search/SearchUtils.ts b/src/Logic/Search/SearchUtils.ts index 1268d193e5..520341fafa 100644 --- a/src/Logic/Search/SearchUtils.ts +++ b/src/Logic/Search/SearchUtils.ts @@ -17,15 +17,16 @@ export default class SearchUtils { return true } if (searchTerm === "bugs" || searchTerm === "issues") { - window.location.href = "https://github.com/pietervdvn/MapComplete/issues" + window.location.href = "https://source.mapcomplete.org/MapComplete/MapComplete/issues" return true } if (searchTerm === "source") { - window.location.href = "https://github.com/pietervdvn/MapComplete" + window.location.href = "https://source.mapcomplete.org/MapComplete/MapComplete" return true } if (searchTerm === "docs") { - window.location.href = "https://github.com/pietervdvn/MapComplete/tree/develop/Docs" + window.location.href = + "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs" return true } if (searchTerm === "osmcha" || searchTerm === "stats") { diff --git a/src/Logic/Tags/TagUtils.ts b/src/Logic/Tags/TagUtils.ts index b6db516818..d19872213f 100644 --- a/src/Logic/Tags/TagUtils.ts +++ b/src/Logic/Tags/TagUtils.ts @@ -191,7 +191,7 @@ export class TagUtils { "When creating the `json` file describing your layer or theme, you'll have to add a few tags to describe what you want.\n" + "This document gives an overview of what every expression means and how it behaves in edge cases.\n" + "\n" + - "If the schema-files note a type [`TagConfigJson`](https://github.com/pietervdvn/MapComplete/blob/develop/src/Models/ThemeConfig/Json/TagConfigJson.ts), you can use one of these values.\n" + + "If the schema-files note a type [`TagConfigJson`](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/src/Models/ThemeConfig/Json/TagConfigJson.ts), you can use one of these values.\n" + "\n" + "In some cases, not every type of tags-filter can be used. For example, _rendering_ an option with a regex is\n" + 'fine (`"if": "brand~[Bb]randname", "then":" The brand is Brandname"`); but this regex can not be used to write a value\n' + diff --git a/src/Logic/Web/MangroveReviews.ts b/src/Logic/Web/MangroveReviews.ts index 77271ee339..8bffc99b13 100644 --- a/src/Logic/Web/MangroveReviews.ts +++ b/src/Logic/Web/MangroveReviews.ts @@ -141,7 +141,7 @@ export class MangroveIdentity { */ export default class FeatureReviews { /** - * See https://gitlab.com/open-reviews/mangrove/-/blob/master/servers/reviewer/src/review.rs#L269 and https://github.com/pietervdvn/MapComplete/issues/1775 + * See https://gitlab.com/open-reviews/mangrove/-/blob/master/servers/reviewer/src/review.rs#L269 and https://source.mapcomplete.org/MapComplete/MapComplete/issues/1775 */ public static readonly REVIEW_OPINION_MAX_LENGTH = 1000 private static readonly _featureReviewsCache: Record = {} diff --git a/src/Models/Constants.ts b/src/Models/Constants.ts index cad980136d..801d9c2189 100644 --- a/src/Models/Constants.ts +++ b/src/Models/Constants.ts @@ -230,7 +230,7 @@ export default class Constants { if (Utils.runningFromConsole) { return false } - // The cause for this line of code: https://github.com/pietervdvn/MapComplete/issues/115 + // The cause for this line of code: https://source.mapcomplete.org/MapComplete/MapComplete/issues/115 // See https://stackoverflow.com/questions/19689715/what-is-the-best-way-to-detect-retina-support-on-a-device-using-javascript return ( (window.matchMedia && diff --git a/src/Models/ThemeConfig/Conversion/PrepareLayer.ts b/src/Models/ThemeConfig/Conversion/PrepareLayer.ts index 4e37b063cf..df8a241958 100644 --- a/src/Models/ThemeConfig/Conversion/PrepareLayer.ts +++ b/src/Models/ThemeConfig/Conversion/PrepareLayer.ts @@ -1,6 +1,18 @@ -import { Concat, DesugaringContext, DesugaringStep, Each, FirstOf, Fuse, On, SetDefault } from "./Conversion" +import { + Concat, + DesugaringContext, + DesugaringStep, + Each, + FirstOf, + Fuse, + On, + SetDefault, +} from "./Conversion" import { LayerConfigJson } from "../Json/LayerConfigJson" -import { MinimalTagRenderingConfigJson, TagRenderingConfigJson } from "../Json/TagRenderingConfigJson" +import { + MinimalTagRenderingConfigJson, + TagRenderingConfigJson, +} from "../Json/TagRenderingConfigJson" import { Utils } from "../../../Utils" import RewritableConfigJson from "../Json/RewritableConfigJson" import SpecialVisualizations from "../../../UI/SpecialVisualizations" @@ -496,7 +508,7 @@ export class RewriteSpecial extends DesugaringStep { (sp) => sp.funcName ) context.err( - `Special visualisation '${type}' not found. Did you perhaps mean ${options[0].funcName}, ${options[1].funcName} or ${options[2].funcName}?\n\tFor all known special visualisations, please see https://github.com/pietervdvn/MapComplete/blob/develop/Docs/SpecialRenderings.md` + `Special visualisation '${type}' not found. Did you perhaps mean ${options[0].funcName}, ${options[1].funcName} or ${options[2].funcName}?\n\tFor all known special visualisations, please see https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/SpecialRenderings.md` ) return undefined } @@ -868,7 +880,7 @@ export class AddRatingBadge extends DesugaringStep { const funcs = new Set(specialVis.map((rs) => rs.func.funcName)) if (funcs.has("list_reviews")) { - (<(string | TagRenderingConfigJson)[]>json.titleIcons).push("icons.rating") + ;(<(string | TagRenderingConfigJson)[]>json.titleIcons).push("icons.rating") } return json } diff --git a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts index abbd5c9d9e..261f6fbf80 100644 --- a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts +++ b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts @@ -46,7 +46,7 @@ class SubstituteLayer extends Conversion n[0]) // Known builtin layers are "+.join(",")+"\n For more information, see " context.err(`The layer with name ${name} was not found as a builtin layer. Perhaps you meant ${ids[0]}, ${ids[1]} or ${ids[2]}? - For an overview of all available layers, refer to https://github.com/pietervdvn/MapComplete/blob/develop/Docs/BuiltinLayers.md`) + For an overview of all available layers, refer to https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/BuiltinLayers.md`) } if (typeof json === "string") { diff --git a/src/Models/ThemeConfig/Json/LayerConfigJson.ts b/src/Models/ThemeConfig/Json/LayerConfigJson.ts index a826d463a3..533911ae8a 100644 --- a/src/Models/ThemeConfig/Json/LayerConfigJson.ts +++ b/src/Models/ThemeConfig/Json/LayerConfigJson.ts @@ -148,7 +148,7 @@ export interface LayerConfigJson { * "_some_key:=some_javascript_expression" * ] * - * See the full documentation on [https://github.com/pietervdvn/MapComplete/blob/master/Docs/CalculatedTags.md] + * See the full documentation on [https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/CalculatedTags.md] * * group: expert * question: What extra attributes should be calculated with javascript? @@ -254,7 +254,7 @@ export interface LayerConfigJson { * Creates points to render on the map. * This can render points for point-objects, lineobjects or areaobjects; use 'location' to indicate where it should be rendered. * - * Note that all attributes - including [the calculated tags](https://github.com/pietervdvn/MapComplete/blob/develop/Docs/CalculatedTags.md) can be used to create the markers and lines + * Note that all attributes - including [the calculated tags](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/CalculatedTags.md) can be used to create the markers and lines * * group: pointrendering */ @@ -319,7 +319,7 @@ export interface LayerConfigJson { * * If no presets are defined, the button which invites to add a new preset will not be shown. *
- *

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�z)!TF-IrPPvq^OLI5kYJ26-eMDCFi&r=mB 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≶okKB5HOyc)&X#_X;}KQkO0wjjjE+ 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 O@y=j+5B~tth5y+r?d_QW diff --git a/scripts/ScriptUtils.ts b/scripts/ScriptUtils.ts index 66ca1e8159..c6d8bebebe 100644 --- a/scripts/ScriptUtils.ts +++ b/scripts/ScriptUtils.ts @@ -9,6 +9,7 @@ import xml2js from "xml2js" export default class ScriptUtils { public static fixUtils() { Utils.externalDownloadFunction = ScriptUtils.Download + } /** diff --git a/scripts/fixPannellum.sh b/scripts/fixPannellum.sh new file mode 100755 index 0000000000..4cc4f4632e --- /dev/null +++ b/scripts/fixPannellum.sh @@ -0,0 +1,8 @@ +#! /bin/bash + +# Are you ready to feel really dirty? +# Pannellum is a direct import (not a module!) which uses window.pannellum = function... +# This breaks when importing this in nodeJS +# So, we patch it up... +echo "Fixing pannellum..." +sed -i 's/^window./if(typeof window !== "undefined")\n&/' "./node_modules/pannellum/build/pannellum.js" diff --git a/src/Logic/ImageProviders/GenericImageProvider.ts b/src/Logic/ImageProviders/GenericImageProvider.ts index 2d2093acfa..34d1417f49 100644 --- a/src/Logic/ImageProviders/GenericImageProvider.ts +++ b/src/Logic/ImageProviders/GenericImageProvider.ts @@ -44,4 +44,8 @@ export default class GenericImageProvider extends ImageProvider { public DownloadAttribution(_) { return undefined } + + getPanoramaInfo(image: { id: string }): undefined { + return undefined + } } diff --git a/src/Logic/ImageProviders/ImageProvider.ts b/src/Logic/ImageProviders/ImageProvider.ts index d40907b572..3bb2a9bf08 100644 --- a/src/Logic/ImageProviders/ImageProvider.ts +++ b/src/Logic/ImageProviders/ImageProvider.ts @@ -1,7 +1,8 @@ -import { Store, Stores, UIEventSource } from "../UIEventSource" +import { Store, Stores } from "../UIEventSource" import BaseUIElement from "../../UI/BaseUIElement" import { LicenseInfo } from "./LicenseInfo" import { Utils } from "../../Utils" +import { Feature, Point } from "geojson" export interface ProvidedImage { url: string @@ -19,6 +20,17 @@ export interface ProvidedImage { lat?: number lon?: number host?: string + isSpherical?: boolean +} + +export interface PanoramaView { + url: string, + /** + * 0 - 359 + * Degrees in which the picture is taken, with north = 0; going clockwise + */ + northOffset?: number, + pitchOffset?: number } export default abstract class ImageProvider { @@ -89,6 +101,8 @@ export default abstract class ImageProvider { public abstract apiUrls(): string[] + public abstract getPanoramaInfo(image: { id: string }): Promise> | undefined; + public static async offerImageAsDownload(image: ProvidedImage) { const response = await fetch(image.url_hd ?? image.url) const blob = await response.blob() @@ -96,4 +110,5 @@ export default abstract class ImageProvider { mimetype: "image/jpg", }) } + } diff --git a/src/Logic/ImageProviders/Imgur.ts b/src/Logic/ImageProviders/Imgur.ts index dfa7f8b08a..3f0f255700 100644 --- a/src/Logic/ImageProviders/Imgur.ts +++ b/src/Logic/ImageProviders/Imgur.ts @@ -116,4 +116,8 @@ export class Imgur extends ImageProvider { return license } + + getPanoramaInfo(image: { id: string }): undefined { + return undefined + } } diff --git a/src/Logic/ImageProviders/Mapillary.ts b/src/Logic/ImageProviders/Mapillary.ts index a555aade96..48627f06d0 100644 --- a/src/Logic/ImageProviders/Mapillary.ts +++ b/src/Logic/ImageProviders/Mapillary.ts @@ -1,10 +1,11 @@ -import ImageProvider, { ProvidedImage } from "./ImageProvider" +import ImageProvider, { PanoramaView, ProvidedImage } from "./ImageProvider" import BaseUIElement from "../../UI/BaseUIElement" import { Utils } from "../../Utils" import { LicenseInfo } from "./LicenseInfo" import Constants from "../../Models/Constants" import SvelteUIElement from "../../UI/Base/SvelteUIElement" import MapillaryIcon from "./MapillaryIcon.svelte" +import { Feature, Point } from "geojson" export class Mapillary extends ImageProvider { public static readonly singleton = new Mapillary() @@ -16,7 +17,7 @@ export class Mapillary extends ImageProvider { "http://mapillary.com", "https://mapillary.com", "http://www.mapillary.com", - "https://www.mapillary.com", + "https://www.mapillary.com" ] defaultKeyPrefixes = ["mapillary", "image"] @@ -69,7 +70,7 @@ export class Mapillary extends ImageProvider { lat: location?.lat, lng: location?.lon, z: location === undefined ? undefined : Math.max((zoom ?? 2) - 1, 1), - pKey, + pKey } const baselink = `https://www.mapillary.com/app/?` const paramsStr = Utils.NoNull( @@ -137,6 +138,41 @@ export class Mapillary extends ImageProvider { return [img] } + + /** + * Download data necessary for the 360°-viewer + * @param pkey + * @constructor + */ + public async getPanoramaInfo(image: { id: number | string }): Promise> { + const pkey = image.id + const metadataUrl = + "https://graph.mapillary.com/" + + pkey + + "?fields=computed_compass_angle,geometry,is_pano,thumb_2048_url,thumb_original_url&access_token=" + + Constants.mapillary_client_token_v4 + const response = await Utils.downloadJsonCached< + { + computed_compass_angle: number, + geometry: Point, + + is_pano: boolean, + thumb_2048_url: string, + thumb_original_url: string, + id: string, + + }>(metadataUrl, 60 * 60) + return { + type: "Feature", + geometry: response.geometry, + properties: { + url: response.thumb_2048_url, + northOffset: response.computed_compass_angle + } + } + } + + public async DownloadAttribution(providedImage: { id: string }): Promise { const mapillaryId = providedImage.id const metadataUrl = @@ -182,7 +218,7 @@ export class Mapillary extends ImageProvider { key, rotation, lat: geometry.coordinates[1], - lon: geometry.coordinates[0], + lon: geometry.coordinates[0] } } } diff --git a/src/Logic/ImageProviders/Panoramax.ts b/src/Logic/ImageProviders/Panoramax.ts index 4f0204a1b0..a6ba23c3c6 100644 --- a/src/Logic/ImageProviders/Panoramax.ts +++ b/src/Logic/ImageProviders/Panoramax.ts @@ -1,7 +1,7 @@ import { ImageUploader } from "./ImageUploader" import { AuthorizedPanoramax, ImageData, Panoramax, PanoramaxXYZ } from "panoramax-js/dist" import ExifReader from "exifreader" -import ImageProvider, { ProvidedImage } from "./ImageProvider" +import ImageProvider, { PanoramaView, ProvidedImage } from "./ImageProvider" import BaseUIElement from "../../UI/BaseUIElement" import { LicenseInfo } from "./LicenseInfo" import { GeoOperations } from "../GeoOperations" @@ -10,6 +10,7 @@ import { Store, Stores, UIEventSource } from "../UIEventSource" import SvelteUIElement from "../../UI/Base/SvelteUIElement" import Panoramax_bw from "../../assets/svg/Panoramax_bw.svelte" import Link from "../../UI/Base/Link" +import { Feature, Point } from "geojson" export default class PanoramaxImageProvider extends ImageProvider { public static readonly singleton: PanoramaxImageProvider = new PanoramaxImageProvider() @@ -187,6 +188,20 @@ export default class PanoramaxImageProvider extends ImageProvider { } return new Panoramax(host) } + + public async getPanoramaInfo(image: { id: string }): Promise> | undefined { + const imageInfo = await PanoramaxImageProvider.xyz.imageInfo(image.id) + const url = (imageInfo.assets.sd ?? imageInfo.assets.thumb ?? imageInfo.assets.hd).href + const northOffset = imageInfo.properties["view:azimuth"] + const pitchOffset = Number(imageInfo.properties.exif["Xmp.GPano.PosePitchDegrees"]) + return >{ + type: "Feature", + geometry: imageInfo.geometry, + properties: { + url, northOffset, pitchOffset + } + } + } } export class PanoramaxUploader implements ImageUploader { diff --git a/src/Logic/State/UserSettingsMetaTagging.ts b/src/Logic/State/UserSettingsMetaTagging.ts index 6e568c5c32..33a5ae85b5 100644 --- a/src/Logic/State/UserSettingsMetaTagging.ts +++ b/src/Logic/State/UserSettingsMetaTagging.ts @@ -1,42 +1,14 @@ import { Utils } from "../../Utils" /** This code is autogenerated - do not edit. Edit ./assets/layers/usersettings/usersettings.json instead */ export class ThemeMetaTagging { - public static readonly themeName = "usersettings" + public static readonly themeName = "usersettings" - public metaTaggging_for_usersettings(feat: { properties: Record }) { - Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_md", () => - feat.properties._description - .match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/) - ?.at(1) - ) - Utils.AddLazyProperty( - feat.properties, - "_d", - () => feat.properties._description?.replace(/</g, "<")?.replace(/>/g, ">") ?? "" - ) - Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_a", () => - ((feat) => { - const e = document.createElement("div") - e.innerHTML = feat.properties._d - return Array.from(e.getElementsByTagName("a")).filter( - (a) => a.href.match(/mastodon|en.osm.town/) !== null - )[0]?.href - })(feat) - ) - Utils.AddLazyProperty(feat.properties, "_mastodon_link", () => - ((feat) => { - const e = document.createElement("div") - e.innerHTML = feat.properties._d - return Array.from(e.getElementsByTagName("a")).filter( - (a) => a.getAttribute("rel")?.indexOf("me") >= 0 - )[0]?.href - })(feat) - ) - Utils.AddLazyProperty( - feat.properties, - "_mastodon_candidate", - () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a - ) - feat.properties["__current_backgroun"] = "initial_value" - } -} + public metaTaggging_for_usersettings(feat: {properties: Record}) { + Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_md', () => feat.properties._description.match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)?.at(1) ) + Utils.AddLazyProperty(feat.properties, '_d', () => feat.properties._description?.replace(/</g,'<')?.replace(/>/g,'>') ?? '' ) + Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_a', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.href.match(/mastodon|en.osm.town/) !== null)[0]?.href }) (feat) ) + Utils.AddLazyProperty(feat.properties, '_mastodon_link', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.getAttribute("rel")?.indexOf('me') >= 0)[0]?.href})(feat) ) + Utils.AddLazyProperty(feat.properties, '_mastodon_candidate', () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a ) + feat.properties['__current_backgroun'] = 'initial_value' + } +} \ No newline at end of file diff --git a/src/Logic/Web/NearbyImagesSearch.ts b/src/Logic/Web/NearbyImagesSearch.ts index 69987f855e..8d74af5290 100644 --- a/src/Logic/Web/NearbyImagesSearch.ts +++ b/src/Logic/Web/NearbyImagesSearch.ts @@ -7,8 +7,6 @@ import { BBox } from "../BBox" import Constants from "../../Models/Constants" import { Utils } from "../../Utils" import { Point } from "geojson" -import MvtSource from "../FeatureSource/Sources/MvtSource" -import AllImageProviders from "../ImageProviders/AllImageProviders" import { Imgur } from "../ImageProviders/Imgur" import { Panoramax, PanoramaxXYZ } from "panoramax-js/dist" @@ -211,111 +209,6 @@ class ImagesFromPanoramaxFetcher implements ImageFetcher { } } -class ImagesFromCacheServerFetcher implements ImageFetcher { - private readonly _searchRadius: number - public readonly name = "fromCacheServer" - private readonly _serverUrl: string - - constructor(searchRadius: number = 500, serverUrl: string = Constants.VectorTileServer) { - this._searchRadius = searchRadius - this._serverUrl = serverUrl - } - - async fetchImages(lat: number, lon: number): Promise { - return ( - await Promise.all([ - this.fetchImagesForType(lat, lon, "lines"), - this.fetchImagesForType(lat, lon, "pois"), - this.fetchImagesForType(lat, lon, "polygons"), - ]) - ).flatMap((x) => x) - } - - async fetchImagesForType( - targetlat: number, - targetlon: number, - type: "lines" | "pois" | "polygons" - ): Promise { - const { x, y, z } = Tiles.embedded_tile(targetlat, targetlon, 14) - - const url = this._serverUrl - - async function getFeatures(x: number, y: number) { - const src = new MvtSource( - Utils.SubstituteKeys(url, { - type, - x, - y, - z, - layer: "item_with_image", - }), - x, - y, - z - ) - await src.updateAsync() - return src.features.data - } - - const features = ( - await Promise.all([ - getFeatures(x, y), - getFeatures(x, y + 1), - getFeatures(x, y - 1), - - getFeatures(x + 1, y + 1), - getFeatures(x + 1, y), - getFeatures(x + 1, y - 1), - - getFeatures(x - 1, y - 1), - getFeatures(x - 1, y), - getFeatures(x - 1, y + 1), - ]) - ).flatMap((x) => x) - - const pics: P4CPicture[] = [] - for (const f of features) { - const [lng, lat] = GeoOperations.centerpointCoordinates(f) - if ( - GeoOperations.distanceBetween([targetlon, targetlat], [lng, lat]) > - this._searchRadius - ) { - return [] - } - for (let i = -1; i < 50; i++) { - let key = "image" - if (i >= 0) { - key += ":" + i - } - const v = f.properties[key] - console.log(v) - if (!v) { - continue - } - let provider = "unkown" - try { - provider = (await AllImageProviders.selectBestProvider("image", v))?.name - } catch (e) { - console.error("Could not detect provider for", "image", v) - } - pics.push({ - pictureUrl: v, - coordinates: { lat, lng }, - details: { - isSpherical: false, - }, - osmTags: { - image: v, - }, - thumbUrl: v, - provider, - }) - } - } - return pics - } -} - class MapillaryFetcher implements ImageFetcher { public readonly name = "mapillary_new" private readonly _panoramas: "only" | "no" | undefined @@ -390,7 +283,7 @@ class MapillaryFetcher implements ImageFetcher { mapillary: img.id, }, details: { - isSpherical: img.is_pano, + isSpherical: this._panoramas === "only" }, }) } @@ -407,15 +300,20 @@ export class CombinedFetcher { constructor(radius: number, maxage: Date, indexedFeatures: IndexedFeatureSource) { this.sources = [ new ImagesInLoadedDataFetcher(indexedFeatures, radius), - new ImagesFromCacheServerFetcher(radius), new ImagesFromPanoramaxFetcher(), new ImagesFromPanoramaxFetcher(Constants.panoramax.url), + // For mapillary, we need to query both with and without panoramas. See https://www.mapillary.com/developer/api-documentation/ new MapillaryFetcher({ max_images: 25, start_captured_at: maxage, + panoramas: "only" }), - new P4CImageFetcher("mapillary"), - new P4CImageFetcher("wikicommons"), + new MapillaryFetcher({ + max_images: 25, + start_captured_at: maxage, + panoramas: "no" + }), new P4CImageFetcher("mapillary"), + new P4CImageFetcher("wikicommons") ].map((f) => new CachedFetcher(f)) } diff --git a/src/UI/Image/AttributedImage.svelte b/src/UI/Image/AttributedImage.svelte index a60d9d64f0..8be73f6d85 100644 --- a/src/UI/Image/AttributedImage.svelte +++ b/src/UI/Image/AttributedImage.svelte @@ -3,6 +3,8 @@ * Shows an image with attribution */ import ImageAttribution from "./ImageAttribution.svelte" + import { Store } from "../../Logic/UIEventSource" + import type { ProvidedImage } from "../../Logic/ImageProviders/ImageProvider" import { Mapillary } from "../../Logic/ImageProviders/Mapillary" import { UIEventSource } from "../../Logic/UIEventSource" @@ -32,6 +34,8 @@ export let attributionFormat: "minimal" | "medium" | "large" = "medium" let previewedImage: UIEventSource> = MenuState.previewedImage export let canZoom = previewedImage !== undefined + export let nearbyFeatures: Feature[] | Store = [] + let loaded = false let showBigPreview = new UIEventSource(false) onDestroy( @@ -74,9 +78,8 @@ -