From b300fffdc5627ad8c3b825e8e232a74b134458f8 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 10 Feb 2025 02:04:58 +0100 Subject: [PATCH] Chore: housekeeping --- Docs/BuiltinIndex.md | 28 +- Docs/CalculatedTags.md | 4 + Docs/ELI-overview.md | 87 +- Docs/Layers/address.md | 48 +- Docs/Layers/artwork.md | 4 +- Docs/Layers/artwork_on_wall.md | 4 +- Docs/Layers/bench.md | 4 +- Docs/Layers/bike_shop.md | 288 +++++- Docs/Layers/campsite.md | 155 +++ Docs/Layers/dentist.md | 59 ++ Docs/Layers/doctors.md | 67 +- Docs/Layers/group_campsite.md | 151 +++ Docs/Layers/hospital.md | 59 ++ Docs/Layers/medical_shops.md | 2 +- Docs/Layers/memorial.md | 4 +- Docs/Layers/named_streets.md | 2 - Docs/Layers/pharmacy.md | 59 ++ Docs/Layers/physiotherapist.md | 59 ++ Docs/Layers/school.md | 134 ++- Docs/Layers/shop_dog_friendly.md | 2 +- Docs/Layers/shops.md | 2 +- Docs/Layers/shops_glutenfree.md | 2 +- Docs/Layers/shops_lactosefree.md | 2 +- Docs/Layers/shops_second_hand.md | 2 +- .../Layers/shops_with_climbing_shoe_repair.md | 2 +- Docs/Layers/sport_shops.md | 2 +- Docs/Layers/tertiary_education.md | 2 +- Docs/SpecialRenderings.md | 10 +- Docs/TagInfo/mapcomplete_cyclofix.json | 925 ++++++++++++++++++ .../mapcomplete_disaster_response.json | 111 +++ Docs/TagInfo/mapcomplete_education.json | 152 ++- Docs/TagInfo/mapcomplete_healthcare.json | 185 ++++ Docs/TagInfo/mapcomplete_onwheels.json | 111 +++ Docs/TagInfo/mapcomplete_scouting.json | 108 ++ Docs/TagInfo/mapcomplete_shops.json | 37 + Docs/Themes/circular_economy.md | 2 +- Docs/Themes/climbing.md | 2 +- Docs/Themes/ghostsigns.md | 4 +- Docs/Themes/glutenfree.md | 2 +- Docs/Themes/grb.md | 1 - Docs/Themes/healthcare.md | 2 +- Docs/Themes/lactosefree.md | 2 +- Docs/Themes/openlovemap.md | 12 +- Docs/Themes/personal.md | 1 + Docs/Themes/pets.md | 2 +- Docs/Themes/scouting.md | 149 +++ Docs/Themes/sports.md | 2 +- Docs/URL_Parameters.md | 18 +- Docs/wikiIndex.txt | 4 +- app/AppIndex.svelte | 24 +- app/land.ts | 16 +- assets/layers/campsite/campsite.json | 1 - .../mapcomplete-changes.json | 71 +- .../mapcomplete-changes.proto.json | 31 +- capacitor.config.ts | 14 +- langs/themes/cs.json | 7 + langs/themes/de.json | 7 + langs/themes/en.json | 24 + langs/themes/es.json | 7 + langs/themes/ko.json | 7 + langs/themes/nl.json | 7 + package-lock.json | 15 +- scripts/downloadCommunityIndex.ts | 59 +- scripts/generateDocs.ts | 3 +- scripts/generateLayerOverview.ts | 13 +- scripts/generateLayouts.ts | 2 +- src/Logic/Actors/GeoLocationHandler.ts | 1 - src/Logic/BBox.ts | 26 +- .../Actors/SaveFeatureSourceToLocalStorage.ts | 43 +- .../DynamicGeoJsonTileSource.ts | 7 +- src/Logic/GeoOperations.ts | 127 ++- src/Logic/ImageProviders/AllImageProviders.ts | 10 +- src/Logic/ImageProviders/Panoramax.ts | 2 +- src/Logic/Osm/ChangesetHandler.ts | 26 +- src/Logic/Osm/OsmConnection.ts | 149 +-- src/Logic/Search/CombinedSearcher.ts | 6 +- src/Logic/Search/PhotonSearch.ts | 2 +- src/Logic/Search/ThemeSearch.ts | 5 +- src/Logic/SimpleMetaTagger.ts | 84 +- src/Logic/State/FeatureSwitchState.ts | 4 +- src/Logic/State/GeoLocationState.ts | 20 +- src/Logic/State/UserRelatedState.ts | 4 +- src/Logic/State/UserSettingsMetaTagging.ts | 48 +- src/Logic/Web/AndroidPolyfill.ts | 90 +- src/Logic/Web/CommunityIndex.ts | 11 +- src/Logic/Web/ThemeViewStateHashActor.ts | 11 +- src/Models/ThemeConfig/TagRenderingConfig.ts | 4 +- .../ThemeViewState/WithSpecialLayers.ts | 7 +- src/Models/TileRange.ts | 6 +- src/UI/AllThemesGui.svelte | 29 +- src/UI/Base/DirectionIndicator.svelte | 4 +- src/UI/Base/FloatOver.svelte | 6 +- src/UI/Base/Loading.svelte | 2 +- src/UI/Base/LoginToggle.svelte | 2 +- src/UI/Base/ModalRight.svelte | 2 +- src/UI/Base/Searchbar.svelte | 2 +- src/UI/Base/TitledPanel.svelte | 3 +- .../BigComponents/CommunityIndexView.svelte | 23 +- src/UI/BigComponents/ContactLink.svelte | 5 +- .../BigComponents/CopyrightSingleIcon.svelte | 2 +- src/UI/BigComponents/MenuDrawer.svelte | 2 +- src/UI/BigComponents/ThemeButton.svelte | 12 +- src/UI/Comparison/ComparisonAction.svelte | 2 +- src/UI/Comparison/ComparisonTable.svelte | 2 +- src/UI/Image/AttributedImage.svelte | 4 +- src/UI/Image/DeletableImage.svelte | 13 +- src/UI/Image/ImageOperations.svelte | 2 +- .../Helpers/DirectionInput.svelte | 4 +- .../InputElement/Helpers/LocationInput.svelte | 6 +- .../Helpers/OpeningHours/OHTable.svelte | 2 +- .../Helpers/OpeningHoursInput.svelte | 2 +- src/UI/Map/DynamicMarker.svelte | 2 +- src/UI/Map/MapLibreAdaptor.ts | 45 +- src/UI/Map/MaplibreMap.svelte | 2 +- src/UI/Map/Marker.svelte | 2 +- src/UI/Map/ShowDataLayer.ts | 18 +- src/UI/PlantNet/PlantNet.svelte | 2 +- src/UI/PlantNet/PlantNetSpeciesList.svelte | 2 +- src/UI/Popup/AddNewPoint/AddNewPoint.svelte | 2 +- src/UI/Popup/AutoApplyButton.ts | 4 +- src/UI/Popup/GroupedView.svelte | 10 +- .../Popup/LanguageElement/LanguageElement.ts | 2 +- src/UI/Popup/SplitRoadWizard.svelte | 9 +- src/UI/Popup/TagHint.svelte | 18 +- src/UI/Popup/TagRendering/Questionbox.svelte | 2 +- .../TagRendering/SpecialTranslation.svelte | 5 +- .../TagRendering/TagRenderingQuestion.svelte | 4 +- src/UI/PrivacyGui.svelte | 10 +- src/UI/Search/SearchResults.svelte | 6 +- src/UI/SingleThemeGui.svelte | 4 +- .../DataImportSpecialVisualisations.ts | 505 +++++----- .../FavouriteVisualisations.ts | 48 +- .../ImageVisualisations.ts | 35 +- .../NoteVisualisations.ts | 59 +- .../ReviewSpecialVisualisations.ts | 56 +- .../SettingsVisualisations.ts | 43 +- ...deringManipulationSpecialVisualisations.ts | 51 +- .../UISpecialVisualisations.ts | 53 +- ...ebAndCommunicationSpecialVisualisations.ts | 55 +- src/UI/SpecialVisualization.ts | 1 - src/UI/SpecialVisualizations.ts | 181 ++-- src/UI/Statistics/AllStats.svelte | 16 +- src/UI/Statistics/StatisticsGui.svelte | 14 +- src/UI/StatusGui.ts | 2 +- src/UI/StudioGui.ts | 2 +- src/UI/StylesheetTestGui.svelte | 3 - src/UI/Test.svelte | 9 +- src/UI/ThemeViewGUI.svelte | 12 +- src/assets/contributors.json | 22 +- src/assets/schemas/layerconfigmeta.json | 12 +- src/assets/schemas/layoutconfigmeta.json | 36 +- src/assets/translators.json | 46 +- src/land.ts | 5 +- src/test.ts | 2 +- test/Logic/Actors/Actors.spec.ts | 6 +- test/Logic/GeoOperations.spec.ts | 123 +-- 156 files changed, 4436 insertions(+), 1318 deletions(-) create mode 100644 Docs/Layers/campsite.md create mode 100644 Docs/Layers/group_campsite.md diff --git a/Docs/BuiltinIndex.md b/Docs/BuiltinIndex.md index 27048c3cd..843c5ed7e 100644 --- a/Docs/BuiltinIndex.md +++ b/Docs/BuiltinIndex.md @@ -31,6 +31,7 @@ - birdhide - brothel - cafe_pub + - campsite - car_rental - caravansites - charge_point @@ -203,9 +204,7 @@ - climbing_club - climbing_gym - cycle_highways - - dentist - disaster_response - - doctors - dogpark - elongated_coin - fitness_centre @@ -216,7 +215,6 @@ - nature_reserve - observation_tower - outdoor_seating - - physiotherapist - playground - recycling - shops @@ -241,14 +239,11 @@ - childcare - climbing_club - climbing_gym - - dentist - - doctors - fitness_centre - food - food_courts - governments - hackerspace - - physiotherapist - recycling - shops - sports_centre @@ -268,13 +263,10 @@ - childcare - climbing_club - climbing_gym - - dentist - - doctors - fitness_centre - food - governments - hackerspace - - physiotherapist - recycling - shops - sports_centre @@ -301,6 +293,7 @@ - lighthouse - nature_reserve - observation_tower + - school ### memorial.memorial-questions @@ -320,11 +313,15 @@ - assisted_repair - brothel + - campsite - cinema + - dentist + - doctors - hospital - ice_cream - love_hotel - pharmacy + - physiotherapist - police - postoffices - school @@ -336,6 +333,7 @@ ### mastodon - assisted_repair + - campsite - hackerspace - scouting_group @@ -493,7 +491,8 @@ ### questions - - caravansites + - campsite + - caravansites - charge_point - charging_station - etymology @@ -582,6 +581,15 @@ - search - summary + ### address.address + + - dentist + - doctors + - hospital + - pharmacy + - physiotherapist + - school + ### seasonal - drinking_water diff --git a/Docs/CalculatedTags.md b/Docs/CalculatedTags.md index 41c657b3f..ceef0e5a3 100644 --- a/Docs/CalculatedTags.md +++ b/Docs/CalculatedTags.md @@ -95,6 +95,10 @@ Adds the currency valid for the object, based on country or explicit tagging. Ca This is a lazy metatag and is only calculated when needed +### panoramax + +Converts a `panoramax=hash1;hash2;hash3;...` into `panoramax=hash1`,`panoramax:0=hash1`... + Calculating tags with Javascript ---------------------------------- diff --git a/Docs/ELI-overview.md b/Docs/ELI-overview.md index 211245f23..c56b4de22 100644 --- a/Docs/ELI-overview.md +++ b/Docs/ELI-overview.md @@ -239,6 +239,7 @@ This table gives a summary of ids, names and other metainformation. [See the onl | ICGC-topo | ICGC - Topogràfic de Catalunya | other | | Institut Cartogràfic i Geològic de Catalunya | | PNOA-Spain-TMS | PNOA Spain | photo | ⭐ | PNOA | | SITNA-catastro | Catastro Navarra | other | | SITNA - Gobierno de Navarra / Nafarroako Gobernua | +| geoEuskadi-basemap | geoEuskadiren Kartografia | map | | Eusko Jaurlaritza / Gobierno Vasco. geoEuskadi | | geoEuskadi-ORTO | geoEuskadiren Ortoargazkiak | photo | ⭐ | Eusko Jaurlaritza / Gobierno Vasco. geoEuskadi | | IDEIB | IDEIB - Ortofoto més recent de les Illes Balears | photo | ⭐ | Infraestructura de Dades Espacials de les Illes Balears | | hri-orto | Helsinki region orthophoto | photo | ⭐ | © Espoon, Helsingin ja Vantaan kaupungit, Kirkkonummen ja Nurmijärven kunnat sekä HSL ja HSY | @@ -488,11 +489,11 @@ This table gives a summary of ids, names and other metainformation. [See the onl | Lodz-2015 | Łódź: Orthophotomap 2015 (aerial image) | | | Urząd Miasta Łodzi | | Lodz-2017 | Łódź: Orthophotomap 2017 (aerial image) | | | Urząd Miasta Łodzi | | MDT2M_LITORAL_2014_15 | Elevation hillshade of the coastal areas of mainland Portugal - 2m - 2014-2015 (DGT) | elevation | | Informação geográfica cedida pela Direção-Geral do Território | -| ORTOS_DGT_2014_15 | Orthophotos of the coastal areas of mainland Portugal - 10cm - 2014-2015 (DGT) | historicphoto | | Informação geográfica cedida pela Direção-Geral do Território | -| ORTOS_DGT_2018_WMS | Orthophotos of mainland Portugal - 25cm - 2018 (DGT) | photo | ⭐ | Informação geográfica cedida pela Direção-Geral do Território | -| ORTOS_DGRF_2004_06 | Orthophotos of mainland Portugal - 50cm - 2004-2006 (DGT) | historicphoto | | Informação geográfica cedida pela Direção-Geral do Território | -| ORTOS_DGT_2021_RGB | Orthophotos of the northern portion of mainland Portugal - 25cm - 2021 (DGT) | photo | ⭐ | Informação geográfica cedida pela Direção-Geral do Território | -| ORTOSAT_DGT_2023_RGB | OrtoSat - Portugal Continental - 30cm - 2023 (DGT) | photo | | Informação geográfica cedida pela Direção-Geral do Território | +| ORTOS_DGT_2014_15 | Orthophotos of the coastal areas of mainland Portugal - 10 cm - 2014-2015 (DGT) | historicphoto | | Informação geográfica cedida pela Direção-Geral do Território | +| ORTOS_DGT_2018_WMS | Orthophotos of mainland Portugal - 25 cm - 2018 (DGT) | photo | ⭐ | Informação geográfica cedida pela Direção-Geral do Território | +| ORTOS_DGRF_2004_06 | Orthophotos of mainland Portugal - 50 cm - 2004-2006 (DGT) | historicphoto | | Informação geográfica cedida pela Direção-Geral do Território | +| ORTOS_DGT_2021_RGB | Orthophotos of the northern portion of mainland Portugal - 25 cm - 2021 (DGT) | photo | ⭐ | Informação geográfica cedida pela Direção-Geral do Território | +| ORTOSAT_DGT_2023_RGB | OrtoSat - Portugal Continental - 30 cm - 2023 (DGT) | photo | | Informação geográfica cedida pela Direção-Geral do Território | | rs-osm-official-cyr | Official Serbia OSM (cyr) | osmbasedmap | | openstreetmap.rs | | rs-osm-official-lat | Official Serbia OSM (lat) | osmbasedmap | | openstreetmap.rs | | lantmateriet-orto1960 | Lantmäteriet Historic Orthophoto 1960 | historicphoto | | © Lantmäteriet, CC0 | @@ -696,7 +697,7 @@ This table gives a summary of ids, names and other metainformation. [See the onl | IndianaMap_Latest | IndianaMap Orthoimagery - Latest Available | photo | | IndianaMap, Indiana Geographic Information Office | | Kansas_NG911_2014 | Kansas NG911 Orthoimagery (2014) | historicphoto | | Kansas 911 Coordinating Council | | Kansas_NG911_2018 | Kansas NG911 Orthoimagery (2018) | historicphoto | | Kansas 911 Coordinating Council | -| Kansas_NG911_2021 | Kansas NG911 Orthoimagery (2021) | photo | | Kansas 911 Coordinating Council | +| Kansas_NG911_2021 | Kansas NG911 Orthoimagery (2021) | photo | ⭐ | Kansas 911 Coordinating Council | | KYAPED_Phase_1 | KyFromAbove Aerial Imagery (2012-2014) | historicphoto | | KyFromAbove | | KYAPED_Phase_2 | KyFromAbove Aerial Imagery (2018-2022) | photo | | KyFromAbove | | MassGIS-LIDAR-Shaded-Relief | MassGIS LIDAR Shaded Relief | elevation | | MassGIS | @@ -842,16 +843,84 @@ This table gives a summary of ids, names and other metainformation. [See the onl | ACT202311 | ACTmapi Imagery Nov 2023 | photo | | Aerial Imagery from ACTMapi ©ACT Government and MetroMap | | ACT202402 | ACTmapi Imagery Feb 2024 | photo | | Aerial Imagery from ACTMapi ©ACT Government and MetroMap | | ACT202409 | ACTmapi Imagery Sep 2024 | photo | ⭐ | Aerial Imagery from ACTMapi ©ACT Government and MetroMap | +| NSW_DCS_SS_HAPE_Imagery_1943 | NSW DCS SS HAPE Imagery 1943 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1944 | NSW DCS SS HAPE Imagery 1944 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1947 | NSW DCS SS HAPE Imagery 1947 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1955 | NSW DCS SS HAPE Imagery 1955 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1965 | NSW DCS SS HAPE Imagery 1965 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1966 | NSW DCS SS HAPE Imagery 1966 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1969 | NSW DCS SS HAPE Imagery 1969 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1970 | NSW DCS SS HAPE Imagery 1970 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1971 | NSW DCS SS HAPE Imagery 1971 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1972 | NSW DCS SS HAPE Imagery 1972 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1975 | NSW DCS SS HAPE Imagery 1975 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1976 | NSW DCS SS HAPE Imagery 1976 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1978 | NSW DCS SS HAPE Imagery 1978 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1980 | NSW DCS SS HAPE Imagery 1980 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1982 | NSW DCS SS HAPE Imagery 1982 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1983 | NSW DCS SS HAPE Imagery 1983 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1984 | NSW DCS SS HAPE Imagery 1984 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1986 | NSW DCS SS HAPE Imagery 1986 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1989 | NSW DCS SS HAPE Imagery 1989 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1990 | NSW DCS SS HAPE Imagery 1990 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1991 | NSW DCS SS HAPE Imagery 1991 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1993 | NSW DCS SS HAPE Imagery 1993 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1994 | NSW DCS SS HAPE Imagery 1994 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1996 | NSW DCS SS HAPE Imagery 1996 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_1998 | NSW DCS SS HAPE Imagery 1998 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_2001 | NSW DCS SS HAPE Imagery 2001 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_2004 | NSW DCS SS HAPE Imagery 2004 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_2005 | NSW DCS SS HAPE Imagery 2005 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_2006 | NSW DCS SS HAPE Imagery 2006 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| NSW_DCS_SS_HAPE_Imagery_2013 | NSW DCS SS HAPE Imagery 2013 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | | Maxar_19-20_Australian_Bushfires_PreEvent | Maxar 2019-2020 Australian Bushfires Pre-event | photo | | ©2020 DigitalGlobe | | NSW_LPI_BaseMap | DCS NSW Base Map | map | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | -| DCS_NSW_Floods2021 | DCS NSW Floods 2021 | photo | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | -| DCS_NSW_Floods2022 | DCS NSW Floods 2022 | photo | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | | NSW_LPI_Imagery | DCS NSW Imagery | photo | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_2021_Bourke_flood_2021_04_15cm | DCS NSW Floods 2021 Bourke flood 2021 04 15cm | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_2021_Brewarrina_flood_2021_04_14_15cm | DCS NSW Floods 2021 Brewarrina flood 2021 04 14 15cm | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_2021_Hawkesbury-Nepean_Floods_Central_Sector_2021_03_15cm_RGB | DCS NSW Floods 2021 Hawkesbury-Nepean Floods Central Sector 2021 03 15cm RGB | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_2021_Hawkesbury-Nepean_Floods_West_Sector_2021_03_15cm | DCS NSW Floods 2021 Hawkesbury-Nepean Floods West Sector 2021 03 15cm | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_2021_Hawkesbury-nepean_floods_eastern_sector_2021_03_25cm | DCS NSW Floods 2021 Hawkesbury-nepean floods eastern sector 2021 03 25cm | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_2021_Hawkesbury-nepean_floods_southern_sector_2021_03_16cm | DCS NSW Floods 2021 Hawkesbury-nepean floods southern sector 2021 03 16cm | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_2021_Lower_clarence_flood_2021_03_16cm | DCS NSW Floods 2021 Lower clarence flood 2021 03 16cm | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_2021_Mogil_Mogil_RGB_2021_04_10_Flood_15cm_Rapid_ortho | DCS NSW Floods 2021 Mogil Mogil RGB 2021 04 10 Flood 15cm Rapid ortho | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_2021_Mungindi_RGB_2021_04_10_Flood_15cm_Rapid_ortho | DCS NSW Floods 2021 Mungindi RGB 2021 04 10 Flood 15cm Rapid ortho | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_2021_Walgett_flood_2021_04_14_15cm | DCS NSW Floods 2021 Walgett flood 2021 04 14 15cm | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Historical_Forbes_flood_2012_03_20cm_bgrn | DCS NSW Floods Historical Forbes 2012-03 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Historical_forbesflood_2016_10_20cm_bgrn | DCS NSW Floods Historical Forbes 2016-10 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Mar_2022_Grafton_Flood_2022_03_02_10cm_P3 | DCS NSW Floods Mar 2022 Grafton Flood 2022 03 02 10cm P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Mar_2022_Hawkesbury-Nepean_Flood_2022_03_09_13cm_P3 | DCS NSW Floods Mar 2022 Hawkesbury-Nepean Flood 2022 03 09 13cm P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Mar_2022_Lismore_Flood_2022_03_02_8cm_P3 | DCS NSW Floods Mar 2022 Lismore Flood 2022 03 02 8cm P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Mar_2022_Ulmarra_Flood_2022_03_03_8cm_p3 | DCS NSW Floods Mar 2022 Ulmarra Flood 2022 03 03 8cm p3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Mar_2022_Wisemans_Ferry_2022_03_13cm_P3 | DCS NSW Floods Mar 2022 Wisemans Ferry 2022 03 13cm P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Mar_2022_singleton_flood_2022_03_10_10cm_p3 | DCS NSW Floods Mar 2022 singleton flood 2022 03 10 10cm p3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2021_Condobolin_Flood_2021_11_13cm_P3 | DCS NSW Floods Nov 2021 Condobolin Flood 2021 11 13cm P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2021_Forbes_Flood_East_2021_11_16_15cm_P3 | DCS NSW Floods Nov 2021 Forbes Flood East 2021 11 16 15cm P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2021_Forbes_Flood_West_2021_11_17_15cm_P3 | DCS NSW Floods Nov 2021 Forbes Flood West 2021 11 17 15cm P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2021_Lake_Cowal_North_Flood_2021_12_36cm_P3 | DCS NSW Floods Nov 2021 Lake Cowal North Flood 2021 12 36cm P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2021_Nanami_Flood_East_2021_11_15_9cm_P3 | DCS NSW Floods Nov 2021 Nanami Flood East 2021 11 15 9cm P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2021_Nanami_Flood_West_2021_11_15_9cm_P3 | DCS NSW Floods Nov 2021 Nanami Flood West 2021 11 15 9cm P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2021_humbug_creek_flood_2021_12_16cm_p3 | DCS NSW Floods Nov 2021 humbug creek flood 2021 12 16cm p3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2021_mirrool_creek_flood_2021_11_16cm_p3 | DCS NSW Floods Nov 2021 mirrool creek flood 2021 11 16cm p3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Balranald_Flood_02122022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Balranald Flood 02122022 15cm RGBN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Bathurst_Flood_14112022_10cm_BGRN_P3 | DCS NSW Floods Nov 2022 Bathurst Flood 14112022 10cm BGRN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Billabong_Creek_Flood_26112022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Billabong Creek Flood 26112022 15cm RGBN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Condobolin_Flood_22112022_10cm_RGBN_P3 | DCS NSW Floods Nov 2022 Condobolin Flood 22112022 10cm RGBN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Coreen_Flood_17112022_10cm_RGBN_P3 | DCS NSW Floods Nov 2022 Coreen Flood 17112022 10cm RGBN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Corowa_Yarrawonga_Flood_25112022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Corowa Yarrawonga Flood 25112022 15cm RGBN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Derriwong_Flood_22112022_10cm_P3_RGBN_P3 | DCS NSW Floods Nov 2022 Derriwong Flood 22112022 10cm P3 RGBN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Forbes_Flood_05112022_10cm_RGBN_P3 | DCS NSW Floods Nov 2022 Forbes Flood 05112022 10cm RGBN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Lake-Cargelligo_Euabolong_Flood_04122022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Lake-Cargelligo Euabolong Flood 04122022 15cm RGBN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Murray_Wakool_Flood_01122022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Murray Wakool Flood 01122022 15cm RGBN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Swan_Hill_Flood_25112022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Swan-Hill Flood 25112022 15cm RGBN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Tooleybuc_Flood_01122022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Tooleybuc Flood 01122022 15cm RGBN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | +| DCS_NSW_Floods_Nov_2022_Wentworth_Flood_03122022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Wentworth Flood 03122022 15cm RGBN P3 | historicphoto | | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. | | ARA_Bushfires_2020 | ARA Bushfires 2020 | photo | ⭐ | ARA - Airborne Research Australia | | CityOfLaunceston_2011 | Launceston OrthoPhoto 2011 | historicphoto | | © City of Launceston | | CityOfLaunceston_2013 | Launceston OrthoPhoto 2013 | photo | | © City of Launceston | -| City_of_Melbourne_Feb_2019 | City of Melbourne Feb 2019 | photo | ⭐ | City of Melbourne | +| City_of_Melbourne_Feb_2019 | City of Melbourne Feb 2019 | photo | | City of Melbourne | | City_of_Melbourne_May_2018 | City of Melbourne May 2018 | historicphoto | | City of Melbourne | +| City_of_Melbourne_May_2020 | City of Melbourne May 2020 | photo | ⭐ | City of Melbourne | | USDA_Micronesia_2023 | USDA Micronesia Imagery (2023) | photo | | U.S. Department of Agriculture | | USDA_Guam_2022 | USDA Guam Imagery (2022) | photo | | U.S. Department of Agriculture | | USDA_Marshall_Islands_2023 | USDA Marshall Islands Imagery (2023) | photo | | U.S. Department of Agriculture | diff --git a/Docs/Layers/address.md b/Docs/Layers/address.md index e1e833bf0..b6246c471 100644 --- a/Docs/Layers/address.md +++ b/Docs/Layers/address.md @@ -5,15 +5,17 @@ Addresses - This layer is shown at zoomlevel **18** and higher - - This layer will automatically load [named_streets](./named_streets.md) into the layout as it depends on it: a calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _closest_3_street_names) ## Table of contents 1. [Themes using this layer](#themes-using-this-layer) 2. [Basic tags for this layer](#basic-tags-for-this-layer) 3. [Supported attributes](#supported-attributes) + - [address_joined](#address_joined) + - [header](#header) - [housenumber](#housenumber) - [street](#street) + - [unit](#unit) - [fixme](#fixme) - [leftover-questions](#leftover-questions) - [move-button](#move-button) @@ -39,10 +41,31 @@ Elements must match **any** of the following expressions: | attribute | type | values which are supported by this layer | -----|-----|----- | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) | | [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) | | -| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) | | +| [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) | | [fixme](https://wiki.openstreetmap.org/wiki/Key:fixme) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:fixme%3D) | +### address_joined + +_This tagrendering has no question and is thus read-only_ +*{group(header,street;housenumber;unit)}* + +This tagrendering has labels +`address` + +### header + +_This tagrendering has no question and is thus read-only_ +*{addr:street} {addr:housenumber} {addr:unit}* + + - *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber= + +This tagrendering has labels +`address` +`hidden` + ### housenumber The question is `What is the number of this house?` @@ -50,14 +73,29 @@ The question is `What is the number of this house?` - *This building has no house number* is shown if with nohousenumber=yes +This tagrendering has labels +`address` +`hidden` + ### street The question is `What street is this address located in?` *This address is in street {addr:street}* is shown if `addr:street` is set - - *Located in {_closest_street:0:name}* is shown if with addr:street= - - *Located in {_closest_street:1:name}* is shown if with addr:street= - - *Located in {_closest_street:2:name}* is shown if with addr:street= +This tagrendering has labels +`address` +`hidden` + +### unit + +The question is `What is the unit number or letter?` +*The unit number is {addr:unit}* is shown if `addr:unit` is set + + - *No unit number* is shown if with addr:unit= + +This tagrendering has labels +`address` +`hidden` ### fixme diff --git a/Docs/Layers/artwork.md b/Docs/Layers/artwork.md index 6cac1afb9..4419330ca 100644 --- a/Docs/Layers/artwork.md +++ b/Docs/Layers/artwork.md @@ -208,8 +208,8 @@ The question is `Does this artwork serve as a bench?` The question is `Does this bench have a backrest?` - *This bench is two-sided and shares the backrest* is shown if with backrest=yes & two_sided=yes - - *This bench does have a backrest* is shown if with backrest=yes - - *This bench does not have a backrest* is shown if with backrest=no + - *This bench does have a backrest* is shown if with backrest=yes + - *This bench does not have a backrest* is shown if with backrest=no This tagrendering is only visible in the popup if the following condition is met: amenity=bench This tagrendering has labels diff --git a/Docs/Layers/artwork_on_wall.md b/Docs/Layers/artwork_on_wall.md index 596012dd4..6b683cae2 100644 --- a/Docs/Layers/artwork_on_wall.md +++ b/Docs/Layers/artwork_on_wall.md @@ -211,8 +211,8 @@ The question is `Does this artwork serve as a bench?` The question is `Does this bench have a backrest?` - *This bench is two-sided and shares the backrest* is shown if with backrest=yes & two_sided=yes - - *This bench does have a backrest* is shown if with backrest=yes - - *This bench does not have a backrest* is shown if with backrest=no + - *This bench does have a backrest* is shown if with backrest=yes + - *This bench does not have a backrest* is shown if with backrest=no This tagrendering is only visible in the popup if the following condition is met: amenity=bench This tagrendering has labels diff --git a/Docs/Layers/bench.md b/Docs/Layers/bench.md index eb63b2d31..2288b15f4 100644 --- a/Docs/Layers/bench.md +++ b/Docs/Layers/bench.md @@ -88,8 +88,8 @@ _This tagrendering has no question and is thus read-only_ The question is `Does this bench have a backrest?` - *This bench is two-sided and shares the backrest* is shown if with backrest=yes & two_sided=yes - - *This bench does have a backrest* is shown if with backrest=yes - - *This bench does not have a backrest* is shown if with backrest=no + - *This bench does have a backrest* is shown if with backrest=yes + - *This bench does not have a backrest* is shown if with backrest=no This tagrendering has labels `bench-questions` diff --git a/Docs/Layers/bike_shop.md b/Docs/Layers/bike_shop.md index d9d511d92..42e765cb9 100644 --- a/Docs/Layers/bike_shop.md +++ b/Docs/Layers/bike_shop.md @@ -15,6 +15,7 @@ A shop specifically selling bicycles or related items - [images](#images) - [reviews](#reviews) - [shops-name](#shops-name) + - [shop_types](#shop_types) - [brand](#brand) - [second_hand](#second_hand) - [opening_hours](#opening_hours) @@ -33,9 +34,18 @@ A shop specifically selling bicycles or related items - [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) @@ -81,6 +91,7 @@ Elements must match **any** of the following expressions: | 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) | | @@ -94,9 +105,18 @@ Elements must match **any** of the following expressions: | [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;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) | | [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) | @@ -122,6 +142,180 @@ _This tagrendering has no question and is thus read-only_ 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?` @@ -233,7 +427,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 @@ -287,6 +481,88 @@ The question is `Does this shop rent out bikes?` 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?` @@ -317,6 +593,16 @@ The question is `Are bicycles washed here?` 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?` diff --git a/Docs/Layers/campsite.md b/Docs/Layers/campsite.md new file mode 100644 index 000000000..ae9c3bbba --- /dev/null +++ b/Docs/Layers/campsite.md @@ -0,0 +1,155 @@ +[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources) + +# campsite + +Campsites + + - This layer is shown at zoomlevel **7** 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) + - [group_only](#group_only) + - [name](#name) + - [fee](#fee) + - [capacity_persons](#capacity_persons) + - [phone](#phone) + - [email](#email) + - [website](#website) + - [questions](#questions) + - [mastodon](#mastodon) + - [images](#images) + - [lod](#lod) +5. [Filters](#filters) + +## Themes using this layer + + - [personal](https://mapcomplete.org/personal) + - [scouting](https://mapcomplete.org/scouting) + +## Presets + +The following options to create new points are included: + + - **campsite** which has the following tags:tourism=camp_site + - **campsite for groups** which has the following tags:tourism=camp_site & group_only=yes + +## Basic tags for this layer + +Elements must match the expression **tourism=camp_site** + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%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 | +-----|-----|----- | +| [group_only](https://wiki.openstreetmap.org/wiki/Key:group_only) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dno) | +| [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [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) | | +| [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) | | +| [contact:mastodon](https://wiki.openstreetmap.org/wiki/Key:contact:mastodon) | [fediverse](../SpecialInputElements.md#fediverse) | | + +### group_only + +The question is `Is this campsite exclusively for groups?` + + - *This campsite is exclusively for groups* is shown if with group_only=yes + - *This campsite is not exclusively for groups* is shown if with group_only=no + +### name + +The question is `What is the name of this campsite?` +*The name of this campsite is {name}* is shown if `name` is set + +### 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 + +### 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` + +### 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` + +### 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` + +### questions +Show the questions block at this location +_This tagrendering has no question and is thus read-only_ +*{questions()}* + +### mastodon +Shows and asks for the mastodon handle +The question is `What is the Mastodon-handle of {title()}?` +*{fediverse_link(contact:mastodon)}* is shown if `contact:mastodon` 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_ +*{image_carousel()}{image_upload()}* + +### 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 | +-----|-----|----- | +| capacity_persons_filter.0 | *All capacities* (default) | | +| capacity_persons_filter.1 | Capacity between 1 and 20 persons | capacity:persons>=1 & capacity:persons<=20 | +| capacity_persons_filter.2 | Capacity between 21 and 50 persons | capacity:persons>=21 & capacity:persons<=50 | +| capacity_persons_filter.3 | Capacity between 51 and 100 persons | capacity:persons>=51 & capacity:persons<=100 | +| capacity_persons_filter.4 | Capacity between 101 and 200 persons | capacity:persons>=101 & capacity:persons<=200 | +| capacity_persons_filter.5 | Capacity between 201 and 500 persons | capacity:persons>=201 & capacity:persons<=500 | +| capacity_persons_filter.6 | Capacity over 500 persons | capacity:persons>=501 | +| capacity_persons_filter.7 | ? | capacity:persons= | + + + +This document is autogenerated from [assets/layers/campsite/campsite.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/layers/campsite/campsite.json) diff --git a/Docs/Layers/dentist.md b/Docs/Layers/dentist.md index 4dcd7fe37..73feffedc 100644 --- a/Docs/Layers/dentist.md +++ b/Docs/Layers/dentist.md @@ -18,6 +18,11 @@ This layer shows dentist offices - [phone](#phone) - [email](#email) - [website](#website) + - [address_joined](#address_joined) + - [header](#header) + - [housenumber](#housenumber) + - [street](#street) + - [unit](#unit) - [name](#name) - [leftover-questions](#leftover-questions) - [move-button](#move-button) @@ -52,6 +57,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) | | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) | +| [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) | | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) | | +| [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) | | [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | ### images @@ -97,6 +106,56 @@ The question is `What is the website of {title()}?` This tagrendering has labels `contact` +### address_joined + +_This tagrendering has no question and is thus read-only_ +*{group(header,street;housenumber;unit)}* + +This tagrendering has labels +`address` + +### header + +_This tagrendering has no question and is thus read-only_ +*{addr:street} {addr:housenumber} {addr:unit}* + + - *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber= + +This tagrendering has labels +`address` +`hidden` + +### housenumber + +The question is `What is the number of this house?` +*The house number is {addr:housenumber}* is shown if `addr:housenumber` is set + + - *This building has no house number* is shown if with nohousenumber=yes + +This tagrendering has labels +`address` +`hidden` + +### street + +The question is `What street is this address located in?` +*This address is in street {addr:street}* is shown if `addr:street` is set + +This tagrendering has labels +`address` +`hidden` + +### unit + +The question is `What is the unit number or letter?` +*The unit number is {addr:unit}* is shown if `addr:unit` is set + + - *No unit number* is shown if with addr:unit= + +This tagrendering has labels +`address` +`hidden` + ### name The question is `What is the name of this dentist?` diff --git a/Docs/Layers/doctors.md b/Docs/Layers/doctors.md index 13f87139d..98964dd80 100644 --- a/Docs/Layers/doctors.md +++ b/Docs/Layers/doctors.md @@ -19,6 +19,11 @@ This layer shows doctor offices - [phone](#phone) - [email](#email) - [website](#website) + - [address_joined](#address_joined) + - [header](#header) + - [housenumber](#housenumber) + - [street](#street) + - [unit](#unit) - [specialty](#specialty) - [leftover-questions](#leftover-questions) - [move-button](#move-button) @@ -56,6 +61,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) | | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) | +| [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) | | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) | | +| [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) | | [healthcare:speciality](https://wiki.openstreetmap.org/wiki/Key:healthcare:speciality) | [string](../SpecialInputElements.md#string) | [general](https://wiki.openstreetmap.org/wiki/Tag:healthcare:speciality%3Dgeneral) [gynaecology](https://wiki.openstreetmap.org/wiki/Tag:healthcare:speciality%3Dgynaecology) [psychiatry](https://wiki.openstreetmap.org/wiki/Tag:healthcare:speciality%3Dpsychiatry) [paediatrics](https://wiki.openstreetmap.org/wiki/Tag:healthcare:speciality%3Dpaediatrics) | ### images @@ -108,6 +117,56 @@ The question is `What is the website of {title()}?` This tagrendering has labels `contact` +### address_joined + +_This tagrendering has no question and is thus read-only_ +*{group(header,street;housenumber;unit)}* + +This tagrendering has labels +`address` + +### header + +_This tagrendering has no question and is thus read-only_ +*{addr:street} {addr:housenumber} {addr:unit}* + + - *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber= + +This tagrendering has labels +`address` +`hidden` + +### housenumber + +The question is `What is the number of this house?` +*The house number is {addr:housenumber}* is shown if `addr:housenumber` is set + + - *This building has no house number* is shown if with nohousenumber=yes + +This tagrendering has labels +`address` +`hidden` + +### street + +The question is `What street is this address located in?` +*This address is in street {addr:street}* is shown if `addr:street` is set + +This tagrendering has labels +`address` +`hidden` + +### unit + +The question is `What is the unit number or letter?` +*The unit number is {addr:unit}* is shown if `addr:unit` is set + + - *No unit number* is shown if with addr:unit= + +This tagrendering has labels +`address` +`hidden` + ### specialty The question is `What is this doctor specialized in?` @@ -150,10 +209,10 @@ This tagrendering has labels | id | question | osmTags | -----|-----|----- | | specialty.0 | *What is this doctor specialized in?* (default) | | -| specialty.1 | This is a general practitioner | healthcare:speciality~^(.+;)?general(;.+)$ | -| specialty.2 | This is a gynaecologist | healthcare:speciality~^(.+;)?gynaecology(;.+)$ | -| specialty.3 | This is a psychiatrist | healthcare:speciality~^(.+;)?psychiatry(;.+)$ | -| specialty.4 | This is a paediatrician | healthcare:speciality~^(.+;)?paediatrics(;.+)$ | +| specialty.1 | This is a general practitioner | healthcare:speciality~^(^(.+;)?general(;.+)?$)$ | +| specialty.2 | This is a gynaecologist | healthcare:speciality~^(^(.+;)?gynaecology(;.+)?$)$ | +| specialty.3 | This is a psychiatrist | healthcare:speciality~^(^(.+;)?psychiatry(;.+)?$)$ | +| specialty.4 | This is a paediatrician | healthcare:speciality~^(^(.+;)?paediatrics(;.+)?$)$ | diff --git a/Docs/Layers/group_campsite.md b/Docs/Layers/group_campsite.md new file mode 100644 index 000000000..d3ac3cbd6 --- /dev/null +++ b/Docs/Layers/group_campsite.md @@ -0,0 +1,151 @@ +[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources) + +# group_campsite + +This layer is based on [campsite](../Layers/campsite.md) + +Campsites + + - This layer is shown at zoomlevel **7** and higher + +## Table of contents + +1. [Themes using this layer](#themes-using-this-layer) +2. [Basic tags for this layer](#basic-tags-for-this-layer) +3. [Supported attributes](#supported-attributes) + - [group_only](#group_only) + - [name](#name) + - [fee](#fee) + - [capacity_persons](#capacity_persons) + - [phone](#phone) + - [email](#email) + - [website](#website) + - [questions](#questions) + - [mastodon](#mastodon) + - [images](#images) + - [lod](#lod) +4. [Filters](#filters) + +## Themes using this layer + + - [scouting](https://mapcomplete.org/scouting) + +## Basic tags for this layer + +Elements must match **all** of the following expressions: + +0. tourism=camp_site +1. group_only=yes | scout=yes + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22group_only%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22scout%22%3D%22yes%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 | +-----|-----|----- | +| [group_only](https://wiki.openstreetmap.org/wiki/Key:group_only) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dno) | +| [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [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) | | +| [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) | | +| [contact:mastodon](https://wiki.openstreetmap.org/wiki/Key:contact:mastodon) | [fediverse](../SpecialInputElements.md#fediverse) | | + +### group_only + +The question is `Is this campsite exclusively for groups?` + + - *This campsite is exclusively for groups* is shown if with group_only=yes + - *This campsite is not exclusively for groups* is shown if with group_only=no + +### name + +The question is `What is the name of this campsite?` +*The name of this campsite is {name}* is shown if `name` is set + +### 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 + +### 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` + +### 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` + +### 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` + +### questions +Show the questions block at this location +_This tagrendering has no question and is thus read-only_ +*{questions()}* + +### mastodon +Shows and asks for the mastodon handle +The question is `What is the Mastodon-handle of {title()}?` +*{fediverse_link(contact:mastodon)}* is shown if `contact:mastodon` 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_ +*{image_carousel()}{image_upload()}* + +### 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 | +-----|-----|----- | +| capacity_persons_filter.0 | *All capacities* (default) | | +| capacity_persons_filter.1 | Capacity between 1 and 20 persons | capacity:persons>=1 & capacity:persons<=20 | +| capacity_persons_filter.2 | Capacity between 21 and 50 persons | capacity:persons>=21 & capacity:persons<=50 | +| capacity_persons_filter.3 | Capacity between 51 and 100 persons | capacity:persons>=51 & capacity:persons<=100 | +| capacity_persons_filter.4 | Capacity between 101 and 200 persons | capacity:persons>=101 & capacity:persons<=200 | +| capacity_persons_filter.5 | Capacity between 201 and 500 persons | capacity:persons>=201 & capacity:persons<=500 | +| capacity_persons_filter.6 | Capacity over 500 persons | capacity:persons>=501 | +| capacity_persons_filter.7 | ? | capacity:persons= | + + + +This document is autogenerated from [assets/themes/scouting/scouting.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/themes/scouting/scouting.json) diff --git a/Docs/Layers/hospital.md b/Docs/Layers/hospital.md index 8ea93d440..fa31e7e7b 100644 --- a/Docs/Layers/hospital.md +++ b/Docs/Layers/hospital.md @@ -16,6 +16,11 @@ A layer showing hospital grounds - [phone](#phone) - [email](#email) - [website](#website) + - [address_joined](#address_joined) + - [header](#header) + - [housenumber](#housenumber) + - [street](#street) + - [unit](#unit) - [oh-visitor](#oh-visitor) - [Opening hours for visitors](#opening-hours-for-visitors) - [leftover-questions](#leftover-questions) @@ -49,6 +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) | | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) | +| [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) | | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) | | +| [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) | | [opening_hours:visitors](https://wiki.openstreetmap.org/wiki/Key:opening_hours:visitors) | [opening_hours](../SpecialInputElements.md#opening_hours) | | ### name @@ -94,6 +103,56 @@ The question is `What is the website of {title()}?` This tagrendering has labels `contact` +### address_joined + +_This tagrendering has no question and is thus read-only_ +*{group(header,street;housenumber;unit)}* + +This tagrendering has labels +`address` + +### header + +_This tagrendering has no question and is thus read-only_ +*{addr:street} {addr:housenumber} {addr:unit}* + + - *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber= + +This tagrendering has labels +`address` +`hidden` + +### housenumber + +The question is `What is the number of this house?` +*The house number is {addr:housenumber}* is shown if `addr:housenumber` is set + + - *This building has no house number* is shown if with nohousenumber=yes + +This tagrendering has labels +`address` +`hidden` + +### street + +The question is `What street is this address located in?` +*This address is in street {addr:street}* is shown if `addr:street` is set + +This tagrendering has labels +`address` +`hidden` + +### unit + +The question is `What is the unit number or letter?` +*The unit number is {addr:unit}* is shown if `addr:unit` is set + + - *No unit number* is shown if with addr:unit= + +This tagrendering has labels +`address` +`hidden` + ### oh-visitor The question is `When are visitors allowed to visit?` diff --git a/Docs/Layers/medical_shops.md b/Docs/Layers/medical_shops.md index acd11d412..edeac7e62 100644 --- a/Docs/Layers/medical_shops.md +++ b/Docs/Layers/medical_shops.md @@ -427,7 +427,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Layers/memorial.md b/Docs/Layers/memorial.md index 9b38a13a2..59606c9cd 100644 --- a/Docs/Layers/memorial.md +++ b/Docs/Layers/memorial.md @@ -136,8 +136,8 @@ The question is `When was this memorial installed?` The question is `Does this bench have a backrest?` - *This bench is two-sided and shares the backrest* is shown if with backrest=yes & two_sided=yes - - *This bench does have a backrest* is shown if with backrest=yes - - *This bench does not have a backrest* is shown if with backrest=no + - *This bench does have a backrest* is shown if with backrest=yes + - *This bench does not have a backrest* is shown if with backrest=no This tagrendering is only visible in the popup if the following condition is met: amenity=bench This tagrendering has labels diff --git a/Docs/Layers/named_streets.md b/Docs/Layers/named_streets.md index 2ceda7d43..6526280d8 100644 --- a/Docs/Layers/named_streets.md +++ b/Docs/Layers/named_streets.md @@ -10,7 +10,6 @@ Hidden layer with all streets which have a name. Useful to detect addresses - This layer is not visible by default and the visibility cannot be toggled, effectively resulting in a fully hidden layer. This can be useful, e.g. to calculate some metatags. If you want to render this layer (e.g. for debugging), enable it by setting the URL-parameter layer-=true - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - This layer is needed as dependency for layer [address](#address) ## Table of contents @@ -20,7 +19,6 @@ Hidden layer with all streets which have a name. Useful to detect addresses ## Themes using this layer - - [grb](https://mapcomplete.org/grb) - [uk_addresses](https://mapcomplete.org/uk_addresses) ## Basic tags for this layer diff --git a/Docs/Layers/pharmacy.md b/Docs/Layers/pharmacy.md index 1c303f2d2..9157bed2d 100644 --- a/Docs/Layers/pharmacy.md +++ b/Docs/Layers/pharmacy.md @@ -20,6 +20,11 @@ A layer showing pharmacies, which (probably) dispense prescription drugs - [phone](#phone) - [email](#email) - [website](#website) + - [address_joined](#address_joined) + - [header](#header) + - [housenumber](#housenumber) + - [street](#street) + - [unit](#unit) - [payment-options](#payment-options) - [wheelchair](#wheelchair) - [leftover-questions](#leftover-questions) @@ -59,6 +64,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) | | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) | +| [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) | | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) | | +| [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) | ### 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 @@ -113,6 +122,56 @@ The question is `What is the website of {title()}?` This tagrendering has labels `contact` +### address_joined + +_This tagrendering has no question and is thus read-only_ +*{group(header,street;housenumber;unit)}* + +This tagrendering has labels +`address` + +### header + +_This tagrendering has no question and is thus read-only_ +*{addr:street} {addr:housenumber} {addr:unit}* + + - *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber= + +This tagrendering has labels +`address` +`hidden` + +### housenumber + +The question is `What is the number of this house?` +*The house number is {addr:housenumber}* is shown if `addr:housenumber` is set + + - *This building has no house number* is shown if with nohousenumber=yes + +This tagrendering has labels +`address` +`hidden` + +### street + +The question is `What street is this address located in?` +*This address is in street {addr:street}* is shown if `addr:street` is set + +This tagrendering has labels +`address` +`hidden` + +### unit + +The question is `What is the unit number or letter?` +*The unit number is {addr:unit}* is shown if `addr:unit` is set + + - *No unit number* is shown if with addr:unit= + +This tagrendering has labels +`address` +`hidden` + ### payment-options The question is `Which methods of payment are accepted here?` diff --git a/Docs/Layers/physiotherapist.md b/Docs/Layers/physiotherapist.md index b1446f296..3cf2d61a3 100644 --- a/Docs/Layers/physiotherapist.md +++ b/Docs/Layers/physiotherapist.md @@ -19,6 +19,11 @@ This layer shows physiotherapists - [phone](#phone) - [email](#email) - [website](#website) + - [address_joined](#address_joined) + - [header](#header) + - [housenumber](#housenumber) + - [street](#street) + - [unit](#unit) - [leftover-questions](#leftover-questions) - [move-button](#move-button) - [delete-button](#delete-button) @@ -53,6 +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) | | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) | +| [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) | | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) | | +| [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) | ### 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 @@ -104,6 +113,56 @@ The question is `What is the website of {title()}?` This tagrendering has labels `contact` +### address_joined + +_This tagrendering has no question and is thus read-only_ +*{group(header,street;housenumber;unit)}* + +This tagrendering has labels +`address` + +### header + +_This tagrendering has no question and is thus read-only_ +*{addr:street} {addr:housenumber} {addr:unit}* + + - *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber= + +This tagrendering has labels +`address` +`hidden` + +### housenumber + +The question is `What is the number of this house?` +*The house number is {addr:housenumber}* is shown if `addr:housenumber` is set + + - *This building has no house number* is shown if with nohousenumber=yes + +This tagrendering has labels +`address` +`hidden` + +### street + +The question is `What street is this address located in?` +*This address is in street {addr:street}* is shown if `addr:street` is set + +This tagrendering has labels +`address` +`hidden` + +### unit + +The question is `What is the unit number or letter?` +*The unit number is {addr:unit}* is shown if `addr:unit` is set + + - *No unit number* is shown if with addr:unit= + +This tagrendering has labels +`address` +`hidden` + ### leftover-questions _This tagrendering has no question and is thus read-only_ diff --git a/Docs/Layers/school.md b/Docs/Layers/school.md index 79e2be34a..ea5b3dfc8 100644 --- a/Docs/Layers/school.md +++ b/Docs/Layers/school.md @@ -19,13 +19,21 @@ Schools giving primary and secondary education and post-secondary, non-tertiary - [phone](#phone) - [email](#email) - [website](#website) + - [address_joined](#address_joined) + - [header](#header) + - [housenumber](#housenumber) + - [street](#street) + - [unit](#unit) - [capacity](#capacity) - [education-level-belgium](#education-level-belgium) + - [is_special_needs](#is_special_needs) - [orientation_belgium](#orientation_belgium) + - [orientation_belgium_special_needs](#orientation_belgium_special_needs) - [gender](#gender) - [pedagogy](#pedagogy) - - [target-audience](#target-audience) + - [special_needs_categories_be](#special_needs_categories_be) - [school-language](#school-language) + - [wikipedia](#wikipedia) - [leftover-questions](#leftover-questions) - [move-button](#move-button) - [lod](#lod) @@ -62,12 +70,18 @@ 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) | | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) | +| [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) | | +| [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) | | +| [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) | | [capacity](https://wiki.openstreetmap.org/wiki/Key:capacity) | [pnat](../SpecialInputElements.md#pnat) | | | [school](https://wiki.openstreetmap.org/wiki/Key:school) | Multiple choice | [kindergarten](https://wiki.openstreetmap.org/wiki/Tag:school%3Dkindergarten) [primary](https://wiki.openstreetmap.org/wiki/Tag:school%3Dprimary) [secondary](https://wiki.openstreetmap.org/wiki/Tag:school%3Dsecondary) [lower_secondary](https://wiki.openstreetmap.org/wiki/Tag:school%3Dlower_secondary) [middle_secondary](https://wiki.openstreetmap.org/wiki/Tag:school%3Dmiddle_secondary) [upper_secondary](https://wiki.openstreetmap.org/wiki/Tag:school%3Dupper_secondary) [post_secondary](https://wiki.openstreetmap.org/wiki/Tag:school%3Dpost_secondary) | +| [school:special_needs](https://wiki.openstreetmap.org/wiki/Key:school:special_needs) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Donly) [separated](https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dseparated) [mixed](https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dmixed) [limited](https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dno) | | [school:orientation](https://wiki.openstreetmap.org/wiki/Key:school:orientation) | Multiple choice | [academic](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dacademic) [professional](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dprofessional) [vocational](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dvocational) | +| [school:orientation](https://wiki.openstreetmap.org/wiki/Key:school:orientation) | Multiple choice | [care_institution](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dcare_institution) [sheltered_workshop](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dsheltered_workshop) [vocational](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dvocational) [professional](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dprofessional) | | [school:gender](https://wiki.openstreetmap.org/wiki/Key:school:gender) | Multiple choice | [mixed](https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dmixed) [separated](https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dseparated) [male](https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dmale) [female](https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dfemale) | | [pedagogy](https://wiki.openstreetmap.org/wiki/Key:pedagogy) | [string](../SpecialInputElements.md#string) | [mainstream](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dmainstream) [montessori](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dmontessori) [freinet](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dfreinet) [jenaplan](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Djenaplan) [waldorf](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dwaldorf) [dalton](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Ddalton) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Doutdoor) [reggio_emilia](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dreggio_emilia) [sudbury](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dsudbury) | -| [school:for](https://wiki.openstreetmap.org/wiki/Key:school:for) | [string](../SpecialInputElements.md#string) | [mainstream](https://wiki.openstreetmap.org/wiki/Tag:school:for%3Dmainstream) [learning_disabilities](https://wiki.openstreetmap.org/wiki/Tag:school:for%3Dlearning_disabilities) [blind](https://wiki.openstreetmap.org/wiki/Tag:school:for%3Dblind) [deaf](https://wiki.openstreetmap.org/wiki/Tag:school:for%3Ddeaf) [disabilities](https://wiki.openstreetmap.org/wiki/Tag:school:for%3Ddisabilities) [special_needs](https://wiki.openstreetmap.org/wiki/Tag:school:for%3Dspecial_needs) | +| [wikidata](https://wiki.openstreetmap.org/wiki/Key:wikidata) | [wikidata](../SpecialInputElements.md#wikidata) | | ### 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 @@ -110,6 +124,56 @@ The question is `What is the website of {title()}?` This tagrendering has labels `contact` +### address_joined + +_This tagrendering has no question and is thus read-only_ +*{group(header,street;housenumber;unit)}* + +This tagrendering has labels +`address` + +### header + +_This tagrendering has no question and is thus read-only_ +*{addr:street} {addr:housenumber} {addr:unit}* + + - *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber= + +This tagrendering has labels +`address` +`hidden` + +### housenumber + +The question is `What is the number of this house?` +*The house number is {addr:housenumber}* is shown if `addr:housenumber` is set + + - *This building has no house number* is shown if with nohousenumber=yes + +This tagrendering has labels +`address` +`hidden` + +### street + +The question is `What street is this address located in?` +*This address is in street {addr:street}* is shown if `addr:street` is set + +This tagrendering has labels +`address` +`hidden` + +### unit + +The question is `What is the unit number or letter?` +*The unit number is {addr:unit}* is shown if `addr:unit` is set + + - *No unit number* is shown if with addr:unit= + +This tagrendering has labels +`address` +`hidden` + ### capacity The question is `How much students can at most enroll in this school?` @@ -129,6 +193,17 @@ The question is `What level of education is given on this school?` This tagrendering is only visible in the popup if the following condition is met: _country=be +### is_special_needs + +The question is `Does this school target students with a special need?` + + - *This school is only for special need students; a certificate is needed to enroll* is shown if with school:special_needs=only + - *This school has a separate section for special need students.* is shown if with school:special_needs=separated + - *Students with special needs and non-special need students have classes together.* is shown if with school:special_needs=mixed + - *This school offers limited, ad hoc support but has no significant expertise and is not considered a special needs school.* is shown if with school:special_needs=limited + - *This school has no support for special need students.* is shown if with school:special_needs=no + - *This school is for special need students.* is shown if with school:special_needs=yes. _This option cannot be chosen as answer_ + ### orientation_belgium The question is `What does this school train pupils for?` @@ -137,7 +212,18 @@ The question is `What does this school train pupils for?` - *Prepares for a professional study at a college* is shown if with school:orientation=professional - *Prepares for a job* is shown if with school:orientation=vocational -This tagrendering is only visible in the popup if the following condition is met: school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$ +This tagrendering is only visible in the popup if the following condition is met: (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=no | school:special_needs= | school:special_needs=limited) + +### orientation_belgium_special_needs + +The question is `What does this school train pupils for?` + + - *Training type 1: trains elementary life skills to live in an institution. There is no intention to do a (paid) job after training* is shown if with school:orientation=care_institution + - *Training type 2: prepares to work in an environment with extra care and facilities such as a sheltered workshop* is shown if with school:orientation=sheltered_workshop + - *Training type 3: prepares for a job and a (more-or-less) independent life in society* is shown if with school:orientation=vocational + - *Training type 4: prepares for a job or continued education* is shown if with school:orientation=professional + +This tagrendering is only visible in the popup if the following condition is met: (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=yes | school:special_needs=only) ### gender @@ -163,23 +249,34 @@ The question is `What educational theory is applied on this school?` - *This school uses the Reggio Emilia approach* is shown if with pedagogy=reggio_emilia - *This school uses the Sudbury system* is shown if with pedagogy=sudbury -### target-audience +### special_needs_categories_be -The question is `Does this school target students with a special need? Which structural facilities does this school have?` -*This school has facilities for students with {school:for}* is shown if `school:for` is set +The question is `What type of special needs are given here?` - - *This is a school for students without special needs
This includes students who can follow the courses with small, ad hoc measurements
* is shown if with school:for=mainstream - - *This is a school for students with learning disabilities* is shown if with school:for=learning_disabilities - - *This is a school for blind students or students with sight impairments* is shown if with school:for=blind - - *This is a school for deaf students or students with hearing impairments* is shown if with school:for=deaf - - *This is a school for students with disabilities* is shown if with school:for=disabilities - - *This is a school for students with special needs* is shown if with school:for=special_needs + - *For students with an intellectual disability (type 2)* is shown if with special_needs:intellectual_disability=yes. Unselecting this answer will add special_needs:intellectual_disability=no + - *For students with an emotional and behavioural problem (type 3)* is shown if with special_needs:emotional_behavioural_disorder=yes. Unselecting this answer will add special_needs:emotional_behavioural_disorder=no + - *For students with an physical disability (type 4)* is shown if with special_needs:physical_disability=yes. Unselecting this answer will add special_needs:physical_disability=no + - *For blind and visually impaired students (type 6)* is shown if with special_needs:blind=yes. Unselecting this answer will add special_needs:blind=no + - *For deaf students and students with hearing loss (type 7)* is shown if with special_needs:deaf=yes. Unselecting this answer will add special_needs:deaf=no + - *For students with a Developemental Language Disorder (type 7 - DLD)* is shown if with special_needs:language_disorder=yes. Unselecting this answer will add special_needs:language_disorder=no + - *For students with an autism spectrum disorder (type 9)* is shown if with special_needs:autism=yes. Unselecting this answer will add special_needs:autism=no + - *For students with a learning disability (basic offering )* is shown if with special_needs:learning_disabilities=yes. Unselecting this answer will add special_needs:learning_disabilities=no + +This tagrendering is only visible in the popup if the following condition is met: _country=be & school:special_needs!~^(no)$ & school:special_needs~.+ ### school-language _This tagrendering has no question and is thus read-only_ *{language_chooser(language,What is the main language of this school?
What language is spoken with the students in non-language related courses and with the administration?
,,&LBRACElanguage&LPARENS&RPARENS&RBRACE is the main language of this school,The following languages are used in this school:&LBRACElist&LPARENS&RPARENS&RBRACE,The main language of this school is unknown)}* +### wikipedia +Shows a wikipedia box with the corresponding wikipedia article; the wikidata-item link can be changed by a contributor +The question is `What is the corresponding Wikidata entity?` +*{wikipedia():max-height:25rem}* is shown if `wikidata` is set + + - *{wikipedia():max-height:25rem}* is shown if with wikipedia~.+. _This option cannot be chosen as answer_ + - *No Wikipedia page has been linked yet* is shown if with wikidata=. _This option cannot be chosen as answer_ + ### leftover-questions _This tagrendering has no question and is thus read-only_ @@ -225,6 +322,19 @@ This tagrendering has labels | level.7 | This school offers post-secondary education (e.g. a seventh or eight specialisation year) | school~^(.+;)?post_secondary(;.+)$ | | level.8 | Unknown school level | school= & amenity!=kindergarten | +| id | question | osmTags | +-----|-----|----- | +| has_special_needs.0 | *Does this school have special need education?* (default) | | +| has_special_needs.1 | Has special education | school:special_needs~.+ & school:special_needs!=no | +| has_special_needs.2 | No or limited special need education | school:special_needs= | school:special_needs=no | school:special_needs=limited | + +| id | question | osmTags | +-----|-----|----- | +| orientation_belgium.0 | *What does this school train pupils for?* (default) | | +| orientation_belgium.1 | Prepares for an academic study at university | school:orientation~^(^(.+;)?academic(;.+)?$)$ | +| orientation_belgium.2 | Prepares for a professional study at a college | school:orientation~^(^(.+;)?professional(;.+)?$)$ | +| orientation_belgium.3 | Prepares for a job | school:orientation~^(^(.+;)?vocational(;.+)?$)$ | + This document is autogenerated from [assets/layers/school/school.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/layers/school/school.json) diff --git a/Docs/Layers/shop_dog_friendly.md b/Docs/Layers/shop_dog_friendly.md index 820dac11d..8208f3c85 100644 --- a/Docs/Layers/shop_dog_friendly.md +++ b/Docs/Layers/shop_dog_friendly.md @@ -419,7 +419,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Layers/shops.md b/Docs/Layers/shops.md index a339dbfdb..f6fc757ba 100644 --- a/Docs/Layers/shops.md +++ b/Docs/Layers/shops.md @@ -435,7 +435,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Layers/shops_glutenfree.md b/Docs/Layers/shops_glutenfree.md index bb60a3ce8..f16c92033 100644 --- a/Docs/Layers/shops_glutenfree.md +++ b/Docs/Layers/shops_glutenfree.md @@ -432,7 +432,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Layers/shops_lactosefree.md b/Docs/Layers/shops_lactosefree.md index 7a139e5bb..dfa236159 100644 --- a/Docs/Layers/shops_lactosefree.md +++ b/Docs/Layers/shops_lactosefree.md @@ -432,7 +432,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Layers/shops_second_hand.md b/Docs/Layers/shops_second_hand.md index 48da161bb..69091e22e 100644 --- a/Docs/Layers/shops_second_hand.md +++ b/Docs/Layers/shops_second_hand.md @@ -418,7 +418,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Layers/shops_with_climbing_shoe_repair.md b/Docs/Layers/shops_with_climbing_shoe_repair.md index 967b8b93e..f1d98e9e2 100644 --- a/Docs/Layers/shops_with_climbing_shoe_repair.md +++ b/Docs/Layers/shops_with_climbing_shoe_repair.md @@ -427,7 +427,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Layers/sport_shops.md b/Docs/Layers/sport_shops.md index 313abe26f..1e8eab396 100644 --- a/Docs/Layers/sport_shops.md +++ b/Docs/Layers/sport_shops.md @@ -422,7 +422,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Layers/tertiary_education.md b/Docs/Layers/tertiary_education.md index a295ebb46..384da99b5 100644 --- a/Docs/Layers/tertiary_education.md +++ b/Docs/Layers/tertiary_education.md @@ -4,7 +4,7 @@ Layer with all tertiary education institutes (ISCED:2011 levels 6,7 and 8) - - This layer is shown at zoomlevel **0** and higher + - This layer is shown at zoomlevel **14** and higher ## Table of contents diff --git a/Docs/SpecialRenderings.md b/Docs/SpecialRenderings.md index f9adc82a3..ae25dfb0d 100644 --- a/Docs/SpecialRenderings.md +++ b/Docs/SpecialRenderings.md @@ -665,6 +665,14 @@ A module showing the pending changes, with the option to clear the pending chang `{pending_changes()}` +### storage_all_tags + +Shows the current state of storage + +#### Example usage of storage_all_tags + +`{storage_all_tags()}` + ## tagrendering_manipulation Special visualisations which reuse other tagRenderings to show data, but with a twist. @@ -973,7 +981,7 @@ The language element allows to show and pick all known (modern) languages. The k | name | default | description | -----|-----|----- | -| key | _undefined_ | What key to use, e.g. `language`, `tactile_writing:braille:language`, ... If a language is supported, the language code will be appended to this key, resulting in `language:nl=yes` if nl is picked | +| key | _undefined_ | What key to use, e.g. `language`, `tactile_writing:braille:language`, ... If a language is supported, the language code will be appended to this key, resulting in `:nl=yes` if _nl_ is picked | | question | _undefined_ | What to ask if no questions are known | | render_list_item | {language()} | How a single language will be shown in the list of languages. Use `{language}` to indicate the language (which it must contain). | | render_single_language | _undefined_ | What will be shown if the feature only supports a single language | diff --git a/Docs/TagInfo/mapcomplete_cyclofix.json b/Docs/TagInfo/mapcomplete_cyclofix.json index 7a8657f92..a9e3f6403 100644 --- a/Docs/TagInfo/mapcomplete_cyclofix.json +++ b/Docs/TagInfo/mapcomplete_cyclofix.json @@ -340,6 +340,835 @@ "key": "name", "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'name' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')" }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'shop' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=bicycle_rental with a fixed text, namely 'Bicycle rental shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "bicycle_rental" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "agrarian" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=alcohol with a fixed text, namely 'Liquor Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "alcohol" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=anime with a fixed text, namely 'Anime / Manga Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "anime" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=antiques with a fixed text, namely 'Antique Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "antiques" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=appliance with a fixed text, namely 'Appliance Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "appliance" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=art with a fixed text, namely 'Art Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "art" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=baby_goods with a fixed text, namely 'Baby Goods Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "baby_goods" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=bag with a fixed text, namely 'Bag/Luggage Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "bag" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=bakery with a fixed text, namely 'Bakery' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "bakery" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=bathroom_furnishing with a fixed text, namely 'Bathroom Furnishing Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "bathroom_furnishing" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=beauty with a fixed text, namely 'Beauty Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "beauty" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=bed with a fixed text, namely 'Bedding/Mattress Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "bed" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=beverages with a fixed text, namely 'Beverage Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "beverages" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=bicycle with a fixed text, namely 'Bicycle Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "bicycle" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=boat with a fixed text, namely 'Boat Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "boat" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=bookmaker with a fixed text, namely 'Bookmaker' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "bookmaker" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=books with a fixed text, namely 'Bookstore' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "books" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=brewing_supplies with a fixed text, namely 'Brewing Supply Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "brewing_supplies" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=butcher with a fixed text, namely 'Butcher' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "butcher" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=camera with a fixed text, namely 'Camera Equipment Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "camera" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=candles with a fixed text, namely 'Candle Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "candles" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=cannabis with a fixed text, namely 'Cannabis Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "cannabis" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=car with a fixed text, namely 'Car Dealership' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "car" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=car_parts with a fixed text, namely 'Car Parts Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "car_parts" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=car_repair with a fixed text, namely 'Car Repair Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "car_repair" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=caravan with a fixed text, namely 'RV Dealership' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "caravan" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=carpet with a fixed text, namely 'Carpet Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "carpet" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=catalogue with a fixed text, namely 'Catalog Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "catalogue" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=charity with a fixed text, namely 'Charity Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "charity" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=cheese with a fixed text, namely 'Cheese Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "cheese" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=chemist with a fixed text, namely 'Drugstore' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "chemist" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=chocolate with a fixed text, namely 'Chocolate Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "chocolate" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=clothes with a fixed text, namely 'Clothing Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "clothes" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=coffee with a fixed text, namely 'Coffee Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "coffee" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=collector with a fixed text, namely 'Collectibles Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "collector" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=computer with a fixed text, namely 'Computer Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "computer" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=confectionery with a fixed text, namely 'Candy Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "confectionery" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=convenience with a fixed text, namely 'Convenience Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "convenience" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=copyshop with a fixed text, namely 'Copy Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "copyshop" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=cosmetics with a fixed text, namely 'Cosmetics Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "cosmetics" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=country_store with a fixed text, namely 'Rural Supplies Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "country_store" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=craft with a fixed text, namely 'Arts & Crafts Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "craft" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=curtain with a fixed text, namely 'Curtain Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "curtain" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=dairy with a fixed text, namely 'Dairy Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "dairy" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=deli with a fixed text, namely 'Delicatessen' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "deli" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=department_store with a fixed text, namely 'Department Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "department_store" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=doityourself with a fixed text, namely 'DIY Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "doityourself" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=doors with a fixed text, namely 'Door Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "doors" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=dry_cleaning with a fixed text, namely 'Dry Cleaner' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "dry_cleaning" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=e-cigarette with a fixed text, namely 'E-Cigarette Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "e-cigarette" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=electrical with a fixed text, namely 'Electrical Equipment Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "electrical" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=electronics with a fixed text, namely 'Electronics Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "electronics" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=erotic with a fixed text, namely 'Erotic Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "erotic" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=fabric with a fixed text, namely 'Fabric Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "fabric" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=farm with a fixed text, namely 'Produce Stand' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "farm" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=fashion_accessories with a fixed text, namely 'Fashion Accessories Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "fashion_accessories" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=fireplace with a fixed text, namely 'Fireplace Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "fireplace" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=fishing with a fixed text, namely 'Fishing Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "fishing" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=flooring with a fixed text, namely 'Flooring Supply Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "flooring" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=florist with a fixed text, namely 'Florist' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "florist" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=frame with a fixed text, namely 'Framing Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "frame" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=frozen_food with a fixed text, namely 'Frozen Food Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "frozen_food" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=fuel with a fixed text, namely 'Fuel Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "fuel" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=funeral_directors with a fixed text, namely 'Funeral Home' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "funeral_directors" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=furniture with a fixed text, namely 'Furniture Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "furniture" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=games with a fixed text, namely 'Tabletop Game Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "games" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=garden_centre with a fixed text, namely 'Garden Center' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "garden_centre" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=gas with a fixed text, namely 'Bottled Gas Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "gas" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=general with a fixed text, namely 'General Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "general" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=gift with a fixed text, namely 'Gift Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "gift" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=greengrocer with a fixed text, namely 'Greengrocer' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "greengrocer" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "hairdresser" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=hairdresser_supply with a fixed text, namely 'Hairdresser Supply Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "hairdresser_supply" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=hardware with a fixed text, namely 'Hardware Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "hardware" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=health_food with a fixed text, namely 'Health Food Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "health_food" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=hearing_aids with a fixed text, namely 'Hearing Aids Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "hearing_aids" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=herbalist with a fixed text, namely 'Herbalist' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "herbalist" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=hifi with a fixed text, namely 'Hifi Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "hifi" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=honey with a fixed text, namely 'Honey Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "honey" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=household_linen with a fixed text, namely 'Household Linen Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "household_linen" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=houseware with a fixed text, namely 'Houseware Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "houseware" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=hunting with a fixed text, namely 'Hunting Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "hunting" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=interior_decoration with a fixed text, namely 'Interior Decoration Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "interior_decoration" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=jewelry with a fixed text, namely 'Jewelry Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "jewelry" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=kiosk with a fixed text, namely 'Kiosk' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "kiosk" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=kitchen with a fixed text, namely 'Kitchen Design Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "kitchen" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=laundry with a fixed text, namely 'Laundry' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "laundry" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=leather with a fixed text, namely 'Leather Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "leather" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=lighting with a fixed text, namely 'Lighting Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "lighting" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=locksmith with a fixed text, namely 'Locksmith' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "locksmith" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=lottery with a fixed text, namely 'Lottery Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "lottery" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=mall with a fixed text, namely 'Mall' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "mall" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=massage with a fixed text, namely 'Massage Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "massage" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=medical_supply with a fixed text, namely 'Medical Supply Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "medical_supply" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=military_surplus with a fixed text, namely 'Military Surplus Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "military_surplus" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=mobile_phone with a fixed text, namely 'Mobile Phone Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "mobile_phone" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=model with a fixed text, namely 'Model Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "model" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=money_lender with a fixed text, namely 'Money Lender' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "money_lender" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=motorcycle with a fixed text, namely 'Motorcycle Dealership' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "motorcycle" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=motorcycle_repair with a fixed text, namely 'Motorcycle Repair Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "motorcycle_repair" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=music with a fixed text, namely 'Music Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "music" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=musical_instrument with a fixed text, namely 'Musical Instrument Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "musical_instrument" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=newsagent with a fixed text, namely 'Newsstand' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "newsagent" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=nutrition_supplements with a fixed text, namely 'Nutrition Supplements Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "nutrition_supplements" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=nuts with a fixed text, namely 'Nuts Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "nuts" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=optician with a fixed text, namely 'Optician' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "optician" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=outdoor with a fixed text, namely 'Outdoors Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "outdoor" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=outpost with a fixed text, namely 'Online Retailer Outpost' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "outpost" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=paint with a fixed text, namely 'Paint Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "paint" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=party with a fixed text, namely 'Party Supply Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "party" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=pasta with a fixed text, namely 'Pasta Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "pasta" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=pastry with a fixed text, namely 'Pastry Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "pastry" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=pawnbroker with a fixed text, namely 'Pawnshop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "pawnbroker" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=perfumery with a fixed text, namely 'Perfume Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "perfumery" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=pet with a fixed text, namely 'Pet Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "pet" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=pet_grooming with a fixed text, namely 'Pet Groomer' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "pet_grooming" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=photo with a fixed text, namely 'Photography Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "photo" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=pottery with a fixed text, namely 'Pottery Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "pottery" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=printer_ink with a fixed text, namely 'Printer Ink Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "printer_ink" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=psychic with a fixed text, namely 'Psychic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "psychic" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=pyrotechnics with a fixed text, namely 'Fireworks Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "pyrotechnics" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=radiotechnics with a fixed text, namely 'Radio/Electronic Component Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "radiotechnics" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=religion with a fixed text, namely 'Religious Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "religion" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=rental with a fixed text, namely 'Rental Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "rental" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=repair with a fixed text, namely 'Repair Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "repair" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=rice with a fixed text, namely 'Rice Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "rice" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=scuba_diving with a fixed text, namely 'Scuba Diving Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "scuba_diving" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=seafood with a fixed text, namely 'Seafood Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "seafood" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=second_hand with a fixed text, namely 'Thrift Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "second_hand" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=sewing with a fixed text, namely 'Sewing Supply Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "sewing" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=shoe_repair with a fixed text, namely 'Shoe Repair Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "shoe_repair" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=shoes with a fixed text, namely 'Shoe Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "shoes" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=spices with a fixed text, namely 'Spice Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "spices" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=sports with a fixed text, namely 'Sporting Goods Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "sports" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=stationery with a fixed text, namely 'Stationery Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "stationery" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=storage_rental with a fixed text, namely 'Storage Rental' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "storage_rental" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "supermarket" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=swimming_pool with a fixed text, namely 'Pool Supply Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "swimming_pool" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=tailor with a fixed text, namely 'Tailor' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "tailor" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=tattoo with a fixed text, namely 'Tattoo Parlor' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "tattoo" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=tea with a fixed text, namely 'Tea Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "tea" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=telecommunication with a fixed text, namely 'Telecom Retail Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "telecommunication" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=ticket with a fixed text, namely 'Ticket Seller' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "ticket" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=tiles with a fixed text, namely 'Tile Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "tiles" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=tobacco with a fixed text, namely 'Tobacco Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "tobacco" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=tool_hire with a fixed text, namely 'Tool Rental' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "tool_hire" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=toys with a fixed text, namely 'Toy Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "toys" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=trade with a fixed text, namely 'Trade Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "trade" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=travel_agency with a fixed text, namely 'Travel Agency' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "travel_agency" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=trophy with a fixed text, namely 'Trophy Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "trophy" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=tyres with a fixed text, namely 'Tire Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "tyres" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=vacuum_cleaner with a fixed text, namely 'Vacuum Cleaner Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "vacuum_cleaner" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=variety_store with a fixed text, namely 'Discount Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "variety_store" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=video with a fixed text, namely 'Video Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "video" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=video_games with a fixed text, namely 'Video Game Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "video_games" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=watches with a fixed text, namely 'Watches Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "watches" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=water with a fixed text, namely 'Drinking Water Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "water" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=water_sports with a fixed text, namely 'Watersport/Swim Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "water_sports" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=weapons with a fixed text, namely 'Weapon Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "weapons" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=wholesale with a fixed text, namely 'Wholesale Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "wholesale" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=wigs with a fixed text, namely 'Wig Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "wigs" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=window_blind with a fixed text, namely 'Window Blind Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "window_blind" + }, + { + "key": "shop", + "description": "Layer 'Bike repair/shop' shows shop=wine with a fixed text, namely 'Wine Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)", + "value": "wine" + }, + { + "key": "disused:shop", + "description": "Layer 'Bike repair/shop' shows disused:shop= with a fixed text, namely 'This shop is no longer used. It is vacant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') Picking this answer will delete the key disused:shop. (This is only shown if craft=)", + "value": "" + }, { "key": "brand", "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'brand' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')" @@ -565,6 +1394,83 @@ "description": "Layer 'Bike repair/shop' shows service:bicycle:rental=no with a fixed text, namely 'This shop doesn't rent out bikes' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if service:bicycle:rental~.+ | shop=bicycle | shop=sport | shop=sports | shop=bicycle_repair | shop=outdoor | shop=rental)", "value": "no" }, + { + "key": "rental", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'rental' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))" + }, + { + "key": "rental", + "description": "Layer 'Bike repair/shop' shows rental=city_bike with a fixed text, namely 'Normal city bikes can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))", + "value": "city_bike" + }, + { + "key": "rental", + "description": "Layer 'Bike repair/shop' shows rental=ebike with a fixed text, namely 'Electrical bikes can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))", + "value": "ebike" + }, + { + "key": "rental", + "description": "Layer 'Bike repair/shop' shows rental=bmx with a fixed text, namely 'BMX bikes can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))", + "value": "bmx" + }, + { + "key": "rental", + "description": "Layer 'Bike repair/shop' shows rental=mtb with a fixed text, namely 'Mountainbikes can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))", + "value": "mtb" + }, + { + "key": "rental", + "description": "Layer 'Bike repair/shop' shows rental=kid_bike with a fixed text, namely 'Bikes for children can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))", + "value": "kid_bike" + }, + { + "key": "rental", + "description": "Layer 'Bike repair/shop' shows rental=tandem with a fixed text, namely 'Tandem bicycles can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))", + "value": "tandem" + }, + { + "key": "rental", + "description": "Layer 'Bike repair/shop' shows rental=racebike with a fixed text, namely 'Race bicycles can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))", + "value": "racebike" + }, + { + "key": "rental", + "description": "Layer 'Bike repair/shop' shows rental=bike_helmet with a fixed text, namely 'Bike helmets can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))", + "value": "bike_helmet" + }, + { + "key": "rental", + "description": "Layer 'Bike repair/shop' shows rental=cargo_bike with a fixed text, namely 'Cargo bikes can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))", + "value": "cargo_bike" + }, + { + "key": "capacity:city_bike", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:city_bike' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*city_bike.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))" + }, + { + "key": "capacity:ebike", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:ebike' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*ebike.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))" + }, + { + "key": "capacity:kid_bike", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:kid_bike' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*kid_bike.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))" + }, + { + "key": "capacity:bmx", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:bmx' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*bmx.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))" + }, + { + "key": "capacity:mtb", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:mtb' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*mtb.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))" + }, + { + "key": "capacity:bicycle_pannier", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:bicycle_pannier' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*bicycle_pannier.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))" + }, + { + "key": "capacity:tandem_bicycle", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:tandem_bicycle' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*tandem_bicycle.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))" + }, { "key": "service:bicycle:pump", "description": "Layer 'Bike repair/shop' shows service:bicycle:pump=yes with a fixed text, namely 'This shop offers a bike pump for anyone' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if service:bicycle:pump~.+ | shop=bicycle | shop=bicycle_repair | service:bicycle:retail=yes | ^(service:bicycle:.+)$~~^(yes)$)", @@ -610,6 +1516,25 @@ "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning=no with a fixed text, namely 'This shop doesn't offer bicycle cleaning' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if service:bicycle:cleaning~.+ | shop=bicycle | shop=bicycle_repair | ^(service:bicycle:.*)$~~^(yes|only)$)", "value": "no" }, + { + "key": "service:bicycle:cleaning:charge", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'service:bicycle:cleaning:charge' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if amenity!=bicycle_wash & service:bicycle:cleaning!=no & service:bicycle:cleaning~.+)" + }, + { + "key": "service:bicycle:cleaning:fee", + "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=no with a fixed text, namely 'The cleaning service is free to use' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if amenity!=bicycle_wash & service:bicycle:cleaning!=no & service:bicycle:cleaning~.+)", + "value": "no" + }, + { + "key": "service:bicycle:cleaning:fee", + "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=yes & service:bicycle:cleaning:charge= with a fixed text, namely 'Free to use' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if amenity!=bicycle_wash & service:bicycle:cleaning!=no & service:bicycle:cleaning~.+)", + "value": "yes" + }, + { + "key": "service:bicycle:cleaning:charge", + "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=yes & service:bicycle:cleaning:charge= with a fixed text, namely 'Free to use' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') Picking this answer will delete the key service:bicycle:cleaning:charge. (This is only shown if amenity!=bicycle_wash & service:bicycle:cleaning!=no & service:bicycle:cleaning~.+)", + "value": "" + }, { "key": "internet_access", "description": "Layer 'Bike repair/shop' shows internet_access=wlan with a fixed text, namely 'This place offers wireless internet access' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')", diff --git a/Docs/TagInfo/mapcomplete_disaster_response.json b/Docs/TagInfo/mapcomplete_disaster_response.json index 3440dc983..ff736f390 100644 --- a/Docs/TagInfo/mapcomplete_disaster_response.json +++ b/Docs/TagInfo/mapcomplete_disaster_response.json @@ -66,6 +66,43 @@ "key": "contact:website", "description": "Layer 'Hospitals' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'Disaster response and emergency services')" }, + { + "key": "addr:street", + "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Disaster response and emergency services')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Hospitals' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Disaster response and emergency services') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Disaster response and emergency services')" + }, + { + "key": "addr:unit", + "description": "Layer 'Hospitals' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "opening_hours:visitors", "description": "Layer 'Hospitals' shows and asks freeform values for key 'opening_hours:visitors' (in the mapcomplete.org theme 'Disaster response and emergency services')" @@ -752,6 +789,43 @@ "key": "contact:website", "description": "Layer 'Doctors' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'Disaster response and emergency services')" }, + { + "key": "addr:street", + "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Disaster response and emergency services')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Doctors' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Disaster response and emergency services') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Disaster response and emergency services')" + }, + { + "key": "addr:unit", + "description": "Layer 'Doctors' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "healthcare:speciality", "description": "Layer 'Doctors' shows and asks freeform values for key 'healthcare:speciality' (in the mapcomplete.org theme 'Disaster response and emergency services')" @@ -915,6 +989,43 @@ "key": "contact:website", "description": "Layer 'Pharmacies' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'Disaster response and emergency services')" }, + { + "key": "addr:street", + "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Disaster response and emergency services')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Pharmacies' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Disaster response and emergency services') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Disaster response and emergency services')" + }, + { + "key": "addr:unit", + "description": "Layer 'Pharmacies' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "payment:cash", "description": "Layer 'Pharmacies' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services')", diff --git a/Docs/TagInfo/mapcomplete_education.json b/Docs/TagInfo/mapcomplete_education.json index 09ac14cbe..3fd13c992 100644 --- a/Docs/TagInfo/mapcomplete_education.json +++ b/Docs/TagInfo/mapcomplete_education.json @@ -130,6 +130,43 @@ "key": "contact:website", "description": "Layer 'Primary and secondary schools' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'Education')" }, + { + "key": "addr:street", + "description": "Layer 'Primary and secondary schools' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Education')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Primary and secondary schools' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Education')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Primary and secondary schools' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Education')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Primary and secondary schools' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Education')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Primary and secondary schools' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Primary and secondary schools' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Education') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Primary and secondary schools' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Education')" + }, + { + "key": "addr:unit", + "description": "Layer 'Primary and secondary schools' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "capacity", "description": "Layer 'Primary and secondary schools' shows and asks freeform values for key 'capacity' (in the mapcomplete.org theme 'Education')" @@ -169,21 +206,71 @@ "description": "Layer 'Primary and secondary schools' shows school=post_secondary with a fixed text, namely 'This school offers post-secondary education (e.g. a seventh or eight specialisation year)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be)", "value": "post_secondary" }, + { + "key": "school:special_needs", + "description": "Layer 'Primary and secondary schools' shows school:special_needs=only with a fixed text, namely 'This school is only for special need students; a certificate is needed to enroll' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", + "value": "only" + }, + { + "key": "school:special_needs", + "description": "Layer 'Primary and secondary schools' shows school:special_needs=separated with a fixed text, namely 'This school has a separate section for special need students.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", + "value": "separated" + }, + { + "key": "school:special_needs", + "description": "Layer 'Primary and secondary schools' shows school:special_needs=mixed with a fixed text, namely 'Students with special needs and non-special need students have classes together.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", + "value": "mixed" + }, + { + "key": "school:special_needs", + "description": "Layer 'Primary and secondary schools' shows school:special_needs=limited with a fixed text, namely 'This school offers limited, ad hoc support but has no significant expertise and is not considered a special needs school.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", + "value": "limited" + }, + { + "key": "school:special_needs", + "description": "Layer 'Primary and secondary schools' shows school:special_needs=no with a fixed text, namely 'This school has no support for special need students.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", + "value": "no" + }, + { + "key": "school:special_needs", + "description": "Layer 'Primary and secondary schools' shows school:special_needs=yes with a fixed text, namely 'This school is for special need students.' (in the mapcomplete.org theme 'Education')", + "value": "yes" + }, { "key": "school:orientation", - "description": "Layer 'Primary and secondary schools' shows school:orientation=academic with a fixed text, namely 'Prepares for an academic study at university' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$)", + "description": "Layer 'Primary and secondary schools' shows school:orientation=academic with a fixed text, namely 'Prepares for an academic study at university' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=no | school:special_needs= | school:special_needs=limited))", "value": "academic" }, { "key": "school:orientation", - "description": "Layer 'Primary and secondary schools' shows school:orientation=professional with a fixed text, namely 'Prepares for a professional study at a college' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$)", + "description": "Layer 'Primary and secondary schools' shows school:orientation=professional with a fixed text, namely 'Prepares for a professional study at a college' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=no | school:special_needs= | school:special_needs=limited))", "value": "professional" }, { "key": "school:orientation", - "description": "Layer 'Primary and secondary schools' shows school:orientation=vocational with a fixed text, namely 'Prepares for a job' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$)", + "description": "Layer 'Primary and secondary schools' shows school:orientation=vocational with a fixed text, namely 'Prepares for a job' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=no | school:special_needs= | school:special_needs=limited))", "value": "vocational" }, + { + "key": "school:orientation", + "description": "Layer 'Primary and secondary schools' shows school:orientation=care_institution with a fixed text, namely 'Training type 1: trains elementary life skills to live in an institution. There is no intention to do a (paid) job after training' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=yes | school:special_needs=only))", + "value": "care_institution" + }, + { + "key": "school:orientation", + "description": "Layer 'Primary and secondary schools' shows school:orientation=sheltered_workshop with a fixed text, namely 'Training type 2: prepares to work in an environment with extra care and facilities such as a sheltered workshop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=yes | school:special_needs=only))", + "value": "sheltered_workshop" + }, + { + "key": "school:orientation", + "description": "Layer 'Primary and secondary schools' shows school:orientation=vocational with a fixed text, namely 'Training type 3: prepares for a job and a (more-or-less) independent life in society' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=yes | school:special_needs=only))", + "value": "vocational" + }, + { + "key": "school:orientation", + "description": "Layer 'Primary and secondary schools' shows school:orientation=professional with a fixed text, namely 'Training type 4: prepares for a job or continued education' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=yes | school:special_needs=only))", + "value": "professional" + }, { "key": "school:gender", "description": "Layer 'Primary and secondary schools' shows school:gender=mixed with a fixed text, namely 'Both boys and girls can enroll here and have classes together' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", @@ -254,38 +341,57 @@ "value": "sudbury" }, { - "key": "school:for", - "description": "Layer 'Primary and secondary schools' shows and asks freeform values for key 'school:for' (in the mapcomplete.org theme 'Education')" + "key": "special_needs:intellectual_disability", + "description": "Layer 'Primary and secondary schools' shows special_needs:intellectual_disability=yes with a fixed text, namely 'For students with an intellectual disability (type 2)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)", + "value": "yes" }, { - "key": "school:for", - "description": "Layer 'Primary and secondary schools' shows school:for=mainstream with a fixed text, namely 'This is a school for students without special needs
This includes students who can follow the courses with small, ad hoc measurements
' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", - "value": "mainstream" + "key": "special_needs:emotional_behavioural_disorder", + "description": "Layer 'Primary and secondary schools' shows special_needs:emotional_behavioural_disorder=yes with a fixed text, namely 'For students with an emotional and behavioural problem (type 3)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)", + "value": "yes" }, { - "key": "school:for", - "description": "Layer 'Primary and secondary schools' shows school:for=learning_disabilities with a fixed text, namely 'This is a school for students with learning disabilities' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", - "value": "learning_disabilities" + "key": "special_needs:physical_disability", + "description": "Layer 'Primary and secondary schools' shows special_needs:physical_disability=yes with a fixed text, namely 'For students with an physical disability (type 4)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)", + "value": "yes" }, { - "key": "school:for", - "description": "Layer 'Primary and secondary schools' shows school:for=blind with a fixed text, namely 'This is a school for blind students or students with sight impairments' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", - "value": "blind" + "key": "special_needs:blind", + "description": "Layer 'Primary and secondary schools' shows special_needs:blind=yes with a fixed text, namely 'For blind and visually impaired students (type 6)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)", + "value": "yes" }, { - "key": "school:for", - "description": "Layer 'Primary and secondary schools' shows school:for=deaf with a fixed text, namely 'This is a school for deaf students or students with hearing impairments' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", - "value": "deaf" + "key": "special_needs:deaf", + "description": "Layer 'Primary and secondary schools' shows special_needs:deaf=yes with a fixed text, namely 'For deaf students and students with hearing loss (type 7)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)", + "value": "yes" }, { - "key": "school:for", - "description": "Layer 'Primary and secondary schools' shows school:for=disabilities with a fixed text, namely 'This is a school for students with disabilities' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", - "value": "disabilities" + "key": "special_needs:language_disorder", + "description": "Layer 'Primary and secondary schools' shows special_needs:language_disorder=yes with a fixed text, namely 'For students with a Developemental Language Disorder (type 7 - DLD)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)", + "value": "yes" }, { - "key": "school:for", - "description": "Layer 'Primary and secondary schools' shows school:for=special_needs with a fixed text, namely 'This is a school for students with special needs' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')", - "value": "special_needs" + "key": "special_needs:autism", + "description": "Layer 'Primary and secondary schools' shows special_needs:autism=yes with a fixed text, namely 'For students with an autism spectrum disorder (type 9)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)", + "value": "yes" + }, + { + "key": "special_needs:learning_disabilities", + "description": "Layer 'Primary and secondary schools' shows special_needs:learning_disabilities=yes with a fixed text, namely 'For students with a learning disability (basic offering )' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)", + "value": "yes" + }, + { + "key": "wikidata", + "description": "Layer 'Primary and secondary schools' shows and asks freeform values for key 'wikidata' (in the mapcomplete.org theme 'Education')" + }, + { + "key": "wikipedia", + "description": "Layer 'Primary and secondary schools' shows wikipedia~.+ with a fixed text, namely '{wikipedia():max-height:25rem}' (in the mapcomplete.org theme 'Education')" + }, + { + "key": "wikidata", + "description": "Layer 'Primary and secondary schools' shows wikidata= with a fixed text, namely 'No Wikipedia page has been linked yet' (in the mapcomplete.org theme 'Education') Picking this answer will delete the key wikidata.", + "value": "" }, { "key": "amenity", diff --git a/Docs/TagInfo/mapcomplete_healthcare.json b/Docs/TagInfo/mapcomplete_healthcare.json index d8fa281d9..dea196116 100644 --- a/Docs/TagInfo/mapcomplete_healthcare.json +++ b/Docs/TagInfo/mapcomplete_healthcare.json @@ -89,6 +89,43 @@ "key": "contact:website", "description": "Layer 'Doctors' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'Healthcare')" }, + { + "key": "addr:street", + "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Healthcare')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Doctors' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Healthcare') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Healthcare')" + }, + { + "key": "addr:unit", + "description": "Layer 'Doctors' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "healthcare:speciality", "description": "Layer 'Doctors' shows and asks freeform values for key 'healthcare:speciality' (in the mapcomplete.org theme 'Healthcare')" @@ -192,6 +229,43 @@ "key": "contact:website", "description": "Layer 'Physiotherapist' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'Healthcare')" }, + { + "key": "addr:street", + "description": "Layer 'Physiotherapist' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Physiotherapist' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Physiotherapist' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Physiotherapist' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Healthcare')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Physiotherapist' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Physiotherapist' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Healthcare') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Physiotherapist' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Healthcare')" + }, + { + "key": "addr:unit", + "description": "Layer 'Physiotherapist' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "amenity", "description": "The MapComplete theme Healthcare has a layer Dentist showing features with this tag", @@ -258,6 +332,43 @@ "key": "contact:website", "description": "Layer 'Dentist' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'Healthcare')" }, + { + "key": "addr:street", + "description": "Layer 'Dentist' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Dentist' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Dentist' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Dentist' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Healthcare')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Dentist' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Dentist' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Healthcare') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Dentist' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Healthcare')" + }, + { + "key": "addr:unit", + "description": "Layer 'Dentist' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "name", "description": "Layer 'Dentist' shows and asks freeform values for key 'name' (in the mapcomplete.org theme 'Healthcare')" @@ -318,6 +429,43 @@ "key": "contact:website", "description": "Layer 'Hospitals' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'Healthcare')" }, + { + "key": "addr:street", + "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Healthcare')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Hospitals' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Healthcare') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Healthcare')" + }, + { + "key": "addr:unit", + "description": "Layer 'Hospitals' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "opening_hours:visitors", "description": "Layer 'Hospitals' shows and asks freeform values for key 'opening_hours:visitors' (in the mapcomplete.org theme 'Healthcare')" @@ -392,6 +540,43 @@ "key": "contact:website", "description": "Layer 'Pharmacies' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'Healthcare')" }, + { + "key": "addr:street", + "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Healthcare')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Pharmacies' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Healthcare') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Healthcare')" + }, + { + "key": "addr:unit", + "description": "Layer 'Pharmacies' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "payment:cash", "description": "Layer 'Pharmacies' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare')", diff --git a/Docs/TagInfo/mapcomplete_onwheels.json b/Docs/TagInfo/mapcomplete_onwheels.json index 437843cde..90055a7b5 100644 --- a/Docs/TagInfo/mapcomplete_onwheels.json +++ b/Docs/TagInfo/mapcomplete_onwheels.json @@ -3265,6 +3265,43 @@ "key": "contact:website", "description": "Layer 'Pharmacies' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'OnWheels')" }, + { + "key": "addr:street", + "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'OnWheels')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Pharmacies' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'OnWheels') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'OnWheels')" + }, + { + "key": "addr:unit", + "description": "Layer 'Pharmacies' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "payment:cash", "description": "Layer 'Pharmacies' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", @@ -3359,6 +3396,43 @@ "key": "contact:website", "description": "Layer 'Doctors' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'OnWheels')" }, + { + "key": "addr:street", + "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'OnWheels')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Doctors' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'OnWheels') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'OnWheels')" + }, + { + "key": "addr:unit", + "description": "Layer 'Doctors' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "healthcare:speciality", "description": "Layer 'Doctors' shows and asks freeform values for key 'healthcare:speciality' (in the mapcomplete.org theme 'OnWheels')" @@ -3439,6 +3513,43 @@ "key": "contact:website", "description": "Layer 'Hospitals' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'OnWheels')" }, + { + "key": "addr:street", + "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'OnWheels')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Hospitals' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'OnWheels') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'OnWheels')" + }, + { + "key": "addr:unit", + "description": "Layer 'Hospitals' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "opening_hours:visitors", "description": "Layer 'Hospitals' shows and asks freeform values for key 'opening_hours:visitors' (in the mapcomplete.org theme 'OnWheels')" diff --git a/Docs/TagInfo/mapcomplete_scouting.json b/Docs/TagInfo/mapcomplete_scouting.json index 6c6349c4d..8fd8d4d1a 100644 --- a/Docs/TagInfo/mapcomplete_scouting.json +++ b/Docs/TagInfo/mapcomplete_scouting.json @@ -58,6 +58,114 @@ { "key": "contact:mastodon", "description": "Layer 'Scouting groups' shows and asks freeform values for key 'contact:mastodon' (in the mapcomplete.org theme 'Scouting groups')" + }, + { + "key": "tourism", + "description": "The MapComplete theme Scouting groups has a layer Group Campsites showing features with this tag", + "value": "camp_site" + }, + { + "key": "scout", + "description": "The MapComplete theme Scouting groups has a layer Group Campsites showing features with this tag", + "value": "yes" + }, + { + "key": "group_only", + "description": "The MapComplete theme Scouting groups has a layer Group Campsites showing features with this tag", + "value": "yes" + }, + { + "key": "id", + "description": "Layer 'Group Campsites' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'Scouting groups') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))" + }, + { + "key": "group_only", + "description": "Layer 'Group Campsites' shows group_only=yes with a fixed text, namely 'This campsite is exclusively for groups' and allows to pick this as a default answer (in the mapcomplete.org theme 'Scouting groups')", + "value": "yes" + }, + { + "key": "group_only", + "description": "Layer 'Group Campsites' shows group_only=no with a fixed text, namely 'This campsite is not exclusively for groups' and allows to pick this as a default answer (in the mapcomplete.org theme 'Scouting groups')", + "value": "no" + }, + { + "key": "name", + "description": "Layer 'Group Campsites' shows and asks freeform values for key 'name' (in the mapcomplete.org theme 'Scouting groups')" + }, + { + "key": "charge", + "description": "Layer 'Group Campsites' shows and asks freeform values for key 'charge' (in the mapcomplete.org theme 'Scouting groups')" + }, + { + "key": "fee", + "description": "Layer 'Group Campsites' shows fee=no with a fixed text, namely 'The campsite is free of charge' and allows to pick this as a default answer (in the mapcomplete.org theme 'Scouting groups')", + "value": "no" + }, + { + "key": "fee", + "description": "Layer 'Group Campsites' shows fee=yes & charge= with a fixed text, namely 'A fee is charged here.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Scouting groups')", + "value": "yes" + }, + { + "key": "charge", + "description": "Layer 'Group Campsites' shows fee=yes & charge= with a fixed text, namely 'A fee is charged here.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Scouting groups') Picking this answer will delete the key charge.", + "value": "" + }, + { + "key": "capacity:persons", + "description": "Layer 'Group Campsites' shows and asks freeform values for key 'capacity:persons' (in the mapcomplete.org theme 'Scouting groups')" + }, + { + "key": "phone", + "description": "Layer 'Group Campsites' shows and asks freeform values for key 'phone' (in the mapcomplete.org theme 'Scouting groups')" + }, + { + "key": "contact:phone", + "description": "Layer 'Group Campsites' shows contact:phone~.+ with a fixed text, namely '{link(&LBRACEcontact:phone&RBRACE,tel:&LBRACEcontact:phone&RBRACE,,,,)}' (in the mapcomplete.org theme 'Scouting groups')" + }, + { + "key": "email", + "description": "Layer 'Group Campsites' shows and asks freeform values for key 'email' (in the mapcomplete.org theme 'Scouting groups')" + }, + { + "key": "contact:email", + "description": "Layer 'Group Campsites' shows contact:email~.+ with a fixed text, namely '{contact:email}' (in the mapcomplete.org theme 'Scouting groups')" + }, + { + "key": "operator:email", + "description": "Layer 'Group Campsites' shows operator:email~.+ with a fixed text, namely '{operator:email}' (in the mapcomplete.org theme 'Scouting groups')" + }, + { + "key": "website", + "description": "Layer 'Group Campsites' shows and asks freeform values for key 'website' (in the mapcomplete.org theme 'Scouting groups')" + }, + { + "key": "contact:website", + "description": "Layer 'Group Campsites' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'Scouting groups')" + }, + { + "key": "contact:mastodon", + "description": "Layer 'Group Campsites' shows and asks freeform values for key 'contact:mastodon' (in the mapcomplete.org theme 'Scouting groups')" + }, + { + "key": "image", + "description": "The layer 'Group Campsites allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "panoramax", + "description": "The layer 'Group Campsites allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Group Campsites allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Group Campsites allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Group Campsites allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" } ] } \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_shops.json b/Docs/TagInfo/mapcomplete_shops.json index bbbbfa562..5d64fa1ec 100644 --- a/Docs/TagInfo/mapcomplete_shops.json +++ b/Docs/TagInfo/mapcomplete_shops.json @@ -1475,6 +1475,43 @@ "key": "contact:website", "description": "Layer 'Pharmacies' shows contact:website~.+ with a fixed text, namely '{contact:website}' (in the mapcomplete.org theme 'Shops')" }, + { + "key": "addr:street", + "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Shops')", + "value": "" + }, + { + "key": "addr:unit", + "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Shops')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Shops')", + "value": "" + }, + { + "key": "addr:housenumber", + "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Shops')" + }, + { + "key": "nohousenumber", + "description": "Layer 'Pharmacies' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Shops')", + "value": "yes" + }, + { + "key": "addr:street", + "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Shops') (This is only shown if nohousenumber!~^(yes)$)" + }, + { + "key": "addr:unit", + "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Shops')" + }, + { + "key": "addr:unit", + "description": "Layer 'Pharmacies' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Shops') Picking this answer will delete the key addr:unit.", + "value": "" + }, { "key": "payment:cash", "description": "Layer 'Pharmacies' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Shops')", diff --git a/Docs/Themes/circular_economy.md b/Docs/Themes/circular_economy.md index 4d616b38f..45f8b761a 100644 --- a/Docs/Themes/circular_economy.md +++ b/Docs/Themes/circular_economy.md @@ -451,7 +451,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Themes/climbing.md b/Docs/Themes/climbing.md index ea54cf59b..cf3726529 100644 --- a/Docs/Themes/climbing.md +++ b/Docs/Themes/climbing.md @@ -468,7 +468,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Themes/ghostsigns.md b/Docs/Themes/ghostsigns.md index 09835c88b..43c38cbca 100644 --- a/Docs/Themes/ghostsigns.md +++ b/Docs/Themes/ghostsigns.md @@ -391,8 +391,8 @@ The question is `Does this artwork serve as a bench?` The question is `Does this bench have a backrest?` - *This bench is two-sided and shares the backrest* is shown if with backrest=yes & two_sided=yes - - *This bench does have a backrest* is shown if with backrest=yes - - *This bench does not have a backrest* is shown if with backrest=no + - *This bench does have a backrest* is shown if with backrest=yes + - *This bench does not have a backrest* is shown if with backrest=no This tagrendering is only visible in the popup if the following condition is met: amenity=bench This tagrendering has labels diff --git a/Docs/Themes/glutenfree.md b/Docs/Themes/glutenfree.md index da255eb97..476c431f3 100644 --- a/Docs/Themes/glutenfree.md +++ b/Docs/Themes/glutenfree.md @@ -1287,7 +1287,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Themes/grb.md b/Docs/Themes/grb.md index c3dd1b8f9..22af4114a 100644 --- a/Docs/Themes/grb.md +++ b/Docs/Themes/grb.md @@ -15,7 +15,6 @@ This theme contains the following layers: - [address](../Layers/address.md) - [crab_address](../Layers/crab_address.md) - [current_view](../Layers/current_view.md) - - [named_streets](../Layers/named_streets.md) Available languages: diff --git a/Docs/Themes/healthcare.md b/Docs/Themes/healthcare.md index 7884876d8..1d7c7778f 100644 --- a/Docs/Themes/healthcare.md +++ b/Docs/Themes/healthcare.md @@ -466,7 +466,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Themes/lactosefree.md b/Docs/Themes/lactosefree.md index bc215542e..a9fac5db4 100644 --- a/Docs/Themes/lactosefree.md +++ b/Docs/Themes/lactosefree.md @@ -1284,7 +1284,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Themes/openlovemap.md b/Docs/Themes/openlovemap.md index f6befef53..18f03a98b 100644 --- a/Docs/Themes/openlovemap.md +++ b/Docs/Themes/openlovemap.md @@ -502,7 +502,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 @@ -828,11 +828,11 @@ This tagrendering has labels | id | question | osmTags | -----|-----|----- | | fetish.0 | *Does this shop offer fetish gear?* (default) | | -| fetish.1 | This shop offers soft BDSM-gear, such as fluffy handcuffs, a 'fifty-shade-of-grey'-starterset, ... | fetish:bdsm:soft~^(.+;)?yes(;.+)$ | -| fetish.2 | This shop offers specialized BDSM-gear, such as spreader bars, supplies for needle play, medical bondage supplies, impact tools, shackles, metal colors, cuffs, nipple clamps, shibari accessories, ... | fetish:bdsm:specialized~^(.+;)?yes(;.+)$ | -| fetish.3 | This shop offers pet play accessories, such as puppy masks, animal masks, pony play, tails, hoof shoes, ... | fetish:pet_play~^(.+;)?yes(;.+)$ | -| fetish.4 | This shop offers leather gear, including pants and shirts usable in daily life up till leather harnesses | fetish:leather~^(.+;)?yes(;.+)$ | -| fetish.5 | This shop offers uniforms for roleplay, such nurse uniforms, military uniforms, police, school girl, french maid, ... | fetish:uniform~^(.+;)?yes(;.+)$ | +| fetish.1 | This shop offers soft BDSM-gear, such as fluffy handcuffs, a 'fifty-shade-of-grey'-starterset, ... | fetish:bdsm:soft~^(^(.+;)?yes(;.+)?$)$ | +| fetish.2 | This shop offers specialized BDSM-gear, such as spreader bars, supplies for needle play, medical bondage supplies, impact tools, shackles, metal colors, cuffs, nipple clamps, shibari accessories, ... | fetish:bdsm:specialized~^(^(.+;)?yes(;.+)?$)$ | +| fetish.3 | This shop offers pet play accessories, such as puppy masks, animal masks, pony play, tails, hoof shoes, ... | fetish:pet_play~^(^(.+;)?yes(;.+)?$)$ | +| fetish.4 | This shop offers leather gear, including pants and shirts usable in daily life up till leather harnesses | fetish:leather~^(^(.+;)?yes(;.+)?$)$ | +| fetish.5 | This shop offers uniforms for roleplay, such nurse uniforms, military uniforms, police, school girl, french maid, ... | fetish:uniform~^(^(.+;)?yes(;.+)?$)$ | | id | question | osmTags | -----|-----|----- | diff --git a/Docs/Themes/personal.md b/Docs/Themes/personal.md index 144849415..f4b8699ae 100644 --- a/Docs/Themes/personal.md +++ b/Docs/Themes/personal.md @@ -34,6 +34,7 @@ This theme contains the following layers: - [binocular](../Layers/binocular.md) - [birdhide](../Layers/birdhide.md) - [cafe_pub](../Layers/cafe_pub.md) + - [campsite](../Layers/campsite.md) - [caravansites](../Layers/caravansites.md) - [charge_point](../Layers/charge_point.md) - [charging_station](../Layers/charging_station.md) diff --git a/Docs/Themes/pets.md b/Docs/Themes/pets.md index f6e88ed7c..bf58e3fec 100644 --- a/Docs/Themes/pets.md +++ b/Docs/Themes/pets.md @@ -1070,7 +1070,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/Themes/scouting.md b/Docs/Themes/scouting.md index 41e64cecd..d4113cd44 100644 --- a/Docs/Themes/scouting.md +++ b/Docs/Themes/scouting.md @@ -9,14 +9,163 @@ The theme introduction reads: This theme contains the following layers: - [scouting_group](../Layers/scouting_group.md) + - [group_campsite (defined in this theme)](#group_campsite) + - [campsite](../Layers/campsite.md) Available languages: - en - de + - uk + +# Table of contents + + - [Scouting groups ( scouting )](#scouting-groups-(-scouting-)) +1. [Layers defined in this theme configuration file](#layers-defined-in-this-theme-configuration-file) +2. [group_campsite](#group_campsite) + - [Basic tags for this layer](#basic-tags-for-this-layer) + - [Supported attributes](#supported-attributes) + + [group_only](#group_only) + + [name](#name) + + [fee](#fee) + + [capacity_persons](#capacity_persons) + + [phone](#phone) + + [email](#email) + + [website](#website) + + [questions](#questions) + + [mastodon](#mastodon) + + [images](#images) + + [lod](#lod) + - [Filters](#filters) # Layers defined in this theme configuration file These layers can not be reused in different themes. +# group_campsite + +This layer is based on [campsite](../Layers/campsite.md) + +Campsites + + - This layer is shown at zoomlevel **7** and higher + +No themes use this layer + +## Basic tags for this layer + +Elements must match **all** of the following expressions: + +0. tourism=camp_site +1. group_only=yes | scout=yes + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22group_only%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22scout%22%3D%22yes%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 | +-----|-----|----- | +| [group_only](https://wiki.openstreetmap.org/wiki/Key:group_only) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dno) | +| [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | +| [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) | | +| [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) | | +| [contact:mastodon](https://wiki.openstreetmap.org/wiki/Key:contact:mastodon) | [fediverse](../SpecialInputElements.md#fediverse) | | + +### group_only + +The question is `Is this campsite exclusively for groups?` + + - *This campsite is exclusively for groups* is shown if with group_only=yes + - *This campsite is not exclusively for groups* is shown if with group_only=no + +### name + +The question is `What is the name of this campsite?` +*The name of this campsite is {name}* is shown if `name` is set + +### 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 + +### 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` + +### 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` + +### 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` + +### questions +Show the questions block at this location +_This tagrendering has no question and is thus read-only_ +*{questions()}* + +### mastodon +Shows and asks for the mastodon handle +The question is `What is the Mastodon-handle of {title()}?` +*{fediverse_link(contact:mastodon)}* is shown if `contact:mastodon` 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_ +*{image_carousel()}{image_upload()}* + +### 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 | +-----|-----|----- | +| capacity_persons_filter.0 | *All capacities* (default) | | +| capacity_persons_filter.1 | Capacity between 1 and 20 persons | capacity:persons>=1 & capacity:persons<=20 | +| capacity_persons_filter.2 | Capacity between 21 and 50 persons | capacity:persons>=21 & capacity:persons<=50 | +| capacity_persons_filter.3 | Capacity between 51 and 100 persons | capacity:persons>=51 & capacity:persons<=100 | +| capacity_persons_filter.4 | Capacity between 101 and 200 persons | capacity:persons>=101 & capacity:persons<=200 | +| capacity_persons_filter.5 | Capacity between 201 and 500 persons | capacity:persons>=201 & capacity:persons<=500 | +| capacity_persons_filter.6 | Capacity over 500 persons | capacity:persons>=501 | +| capacity_persons_filter.7 | ? | capacity:persons= | + This document is autogenerated from [assets/themes/scouting/scouting.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/themes/scouting/scouting.json) diff --git a/Docs/Themes/sports.md b/Docs/Themes/sports.md index 7ed4cbc6e..b4fbef001 100644 --- a/Docs/Themes/sports.md +++ b/Docs/Themes/sports.md @@ -457,7 +457,7 @@ This tagrendering is only visible in the popup if the following condition is met 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:healtcare=optometrist + - *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 diff --git a/Docs/URL_Parameters.md b/Docs/URL_Parameters.md index 0873d5455..bcd81da3e 100644 --- a/Docs/URL_Parameters.md +++ b/Docs/URL_Parameters.md @@ -224,7 +224,7 @@ The default value is _true_ If true, 'dryrun' mode is activated. The app will behave as normal, except that changes to OSM will be printed onto the console instead of actually uploaded to osm.org -This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L192) +This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L190) The default value is _false_ @@ -232,7 +232,7 @@ The default value is _false_ If true, shows some extra debugging help such as all the available tags on every object -This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L198) +This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L196) The default value is _false_ @@ -240,7 +240,7 @@ The default value is _false_ If true, the location distance indication will not be written to the changeset and other privacy enhancing measures might be taken. -This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L204) +This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L202) The default value is _false_ @@ -248,7 +248,7 @@ The default value is _false_ Point mapcomplete to a different overpass-instance. Example: https://overpass-api.de/api/interpreter -This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L210) +This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L208) The default value is _https://overpass-api.de/api/interpreter,https://overpass.private.coffee/api/interpreter,https://overpass.osm.jp/api/interpreter_ @@ -256,7 +256,7 @@ The default value is _https://overpass-api.de/api/interpreter,https://overpass.p Set a different timeout (in seconds) for queries in overpass -This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L221) +This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L219) The default value is _30_ @@ -264,7 +264,7 @@ The default value is _30_ point to switch between OSM-api and overpass -This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L229) +This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L227) The default value is _16_ @@ -272,7 +272,7 @@ The default value is _16_ Tilesize when the OSM-API is used to fetch data within a BBOX -This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L237) +This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L235) The default value is _17_ @@ -330,7 +330,7 @@ One can use the [ID of an ELI-layer](./ELI-overview.md) or use one of the global - HDM_HOT - osmfr-occitan -This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L244) +This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L242) No default value set @@ -410,7 +410,7 @@ The default value is _0_ The mode the application starts in, e.g. 'map', 'dashboard' or 'statistics' -This documentation is defined in the source code at [generateDocs.ts](ervdvn/git2/MapComplete/scripts/generateDocs.ts#L442) +This documentation is defined in the source code at [generateDocs.ts](ervdvn/git2/MapComplete/scripts/generateDocs.ts#L444) The default value is _map_ diff --git a/Docs/wikiIndex.txt b/Docs/wikiIndex.txt index 5066da530..0af3d4ec9 100644 --- a/Docs/wikiIndex.txt +++ b/Docs/wikiIndex.txt @@ -582,7 +582,7 @@ The position of a signpost can be used by a hiker/biker/rider/s… {{service_item |name= [https://mapcomplete.org/scouting scouting] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:de|en}} +|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:uk|en}} |descr= A MapComplete theme: A scouting group is a social youth movement with a heavy emphasis on the outdoors |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png @@ -618,7 +618,7 @@ The position of a signpost can be used by a hiker/biker/rider/s… {{service_item |name= [https://mapcomplete.org/transit transit] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:fr|en}}, {{#language:da|en}}, {{#language:nl|en}}, {{#language:nb_NO|en}}, {{#language:ca|en}}, {{#language:es|en}}, {{#language:cs|en}}, {{#language:zh_Hant|en}}, {{#language:pl|en}}, {{#language:ko|en}} +|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:fr|en}}, {{#language:da|en}}, {{#language:nl|en}}, {{#language:nb_NO|en}}, {{#language:ca|en}}, {{#language:es|en}}, {{#language:cs|en}}, {{#language:zh_Hant|en}}, {{#language:pl|en}}, {{#language:ko|en}}, {{#language:uk|en}} |descr= A MapComplete theme: Plan your trip with the help of the public transport system |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png diff --git a/app/AppIndex.svelte b/app/AppIndex.svelte index 81a2620db..0accefe8f 100644 --- a/app/AppIndex.svelte +++ b/app/AppIndex.svelte @@ -1,19 +1,19 @@
+

MapComplete Android App

-

MapComplete Android App

+ MapComplete is available as Android App as direct download. We are working on publishing this in + the play store and on FDroid too. -MapComplete is available as Android App as direct download. - -We are working on publishing this in the play store and on FDroid too. - - - - Download the latest version - -Go back to mapcomplete + + + Download the latest version + + Go back to mapcomplete
diff --git a/app/land.ts b/app/land.ts index 57120b507..18025e500 100644 --- a/app/land.ts +++ b/app/land.ts @@ -13,9 +13,11 @@ const tokenSrc = new UIEventSource("") const debug = new UIEventSource([]) new Combine([ - new VariableUiElement(debug.map(debug => "
  • "+debug.join("
  • ")+"
")), - new VariableUiElement(tokenSrc)]).AttachTo("token") - + new VariableUiElement( + debug.map((debug) => "
  • " + debug.join("
  • ") + "
") + ), + new VariableUiElement(tokenSrc), +]).AttachTo("token") const connection = new OsmConnection() connection.finishLogin(async () => { @@ -24,16 +26,16 @@ connection.finishLogin(async () => { do { await Utils.waitFor(500) token = connection.getToken() - tokenSrc.set("Trying to get token ("+attempt+")") + tokenSrc.set("Trying to get token (" + attempt + ")") attempt++ const dbg = [] - Object.keys(localStorage).forEach(key => { - dbg.push(`${key} - ${localStorage.getItem(key)}`); + Object.keys(localStorage).forEach((key) => { + dbg.push(`${key} - ${localStorage.getItem(key)}`) }) debug.set(dbg) - if(attempt > 10){ + if (attempt > 10) { window.location.reload() } } while (!token) diff --git a/assets/layers/campsite/campsite.json b/assets/layers/campsite/campsite.json index 44dbcaae9..ccd551749 100644 --- a/assets/layers/campsite/campsite.json +++ b/assets/layers/campsite/campsite.json @@ -197,7 +197,6 @@ "question": { "en": "Capacity between 21 and 50 persons" }, - "osmTags": { "and": [ "capacity:persons>=21", diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index da52bbaa4..462a4e7f3 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -182,6 +182,26 @@ } ] }, + { + "id": "platform", + "question": { + "en": "With what platform was the change made?" + }, + "mappings": [ + { + "if": "android=", + "then": { + "en": "Made on the web" + } + }, + { + "if": "android=yes", + "then": { + "en": "Made with the android app" + } + } + ] + }, { "id": "version", "question": { @@ -769,18 +789,45 @@ } ] }, + { + "id": "platform", + "options": [ + { + "question": { + "en": "Changeset added at least one image", + "cs": "Sada změn přidala alespoň jeden obrázek", + "de": "Changeset hat mindestens ein Bild hinzugefügt", + "es": "El conjunto de cambios agregó al menos una imagen", + "ko": "주요 변경사항에 최소 하나의 이미지가 추가 되었습니다", + "nl": "Changeset voegde minstens één afbeelding toe" + } + }, + { + "question": { + "en": "Made with Android" + }, + "osmTags": "android=yes" + }, + { + "question": { + "en": "Made on the web" + }, + "osmTags": "android=" + } + ] + }, { "id": "added-image", "options": [ { "osmTags": "add-image>0", "question": { - "en": "Changeset added at least one image", - "de": "Changeset hat mindestens ein Bild hinzugefügt", - "cs": "Sada změn přidala alespoň jeden obrázek", - "es": "El conjunto de cambios agregó al menos una imagen", - "nl": "Changeset voegde minstens één afbeelding toe", - "ko": "주요 변경사항에 최소 하나의 이미지가 추가 되었습니다" + "en": "Exclude GRB theme", + "de": "GRB-Thema ausschließen", + "cs": "Vyloučit motiv GRB", + "es": "Excluir el tema GRB", + "nl": "GRB-thema uitsluiten", + "ko": "GRB 테마 제외" } } ] @@ -791,12 +838,12 @@ { "osmTags": "theme!=grb", "question": { - "en": "Exclude GRB theme", - "de": "GRB-Thema ausschließen", - "cs": "Vyloučit motiv GRB", - "es": "Excluir el tema GRB", - "nl": "GRB-thema uitsluiten", - "ko": "GRB 테마 제외" + "en": "Exclude etymology theme", + "de": "Etymologie-Thema ausschließen", + "cs": "Vyloučit etymologii tématu", + "es": "Excluir el tema de etimología", + "nl": "Thema etymologie uitsluiten", + "ko": "어원 테마 제외" } } ] diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json index d50ff1be8..49682a16b 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json @@ -428,7 +428,12 @@ "options": [ { "question": { - "en": "All platforms" + "en": "Changeset added at least one image", + "cs": "Sada změn přidala alespoň jeden obrázek", + "de": "Changeset hat mindestens ein Bild hinzugefügt", + "es": "El conjunto de cambios agregó al menos una imagen", + "ko": "주요 변경사항에 최소 하나의 이미지가 추가 되었습니다", + "nl": "Changeset voegde minstens één afbeelding toe" } }, { @@ -451,12 +456,12 @@ { "osmTags": "add-image>0", "question": { - "en": "Changeset added at least one image", - "de": "Changeset hat mindestens ein Bild hinzugefügt", - "cs": "Sada změn přidala alespoň jeden obrázek", - "es": "El conjunto de cambios agregó al menos una imagen", - "nl": "Changeset voegde minstens één afbeelding toe", - "ko": "주요 변경사항에 최소 하나의 이미지가 추가 되었습니다" + "en": "Exclude GRB theme", + "de": "GRB-Thema ausschließen", + "cs": "Vyloučit motiv GRB", + "es": "Excluir el tema GRB", + "nl": "GRB-thema uitsluiten", + "ko": "GRB 테마 제외" } } ] @@ -467,12 +472,12 @@ { "osmTags": "theme!=grb", "question": { - "en": "Exclude GRB theme", - "de": "GRB-Thema ausschließen", - "cs": "Vyloučit motiv GRB", - "es": "Excluir el tema GRB", - "nl": "GRB-thema uitsluiten", - "ko": "GRB 테마 제외" + "en": "Exclude etymology theme", + "de": "Etymologie-Thema ausschließen", + "cs": "Vyloučit etymologii tématu", + "es": "Excluir el tema de etimología", + "nl": "Thema etymologie uitsluiten", + "ko": "어원 테마 제외" } } ] diff --git a/capacitor.config.ts b/capacitor.config.ts index ea3350695..f70edc7d9 100644 --- a/capacitor.config.ts +++ b/capacitor.config.ts @@ -1,11 +1,9 @@ - -import type { CapacitorConfig } from "@capacitor/cli"; +import type { CapacitorConfig } from "@capacitor/cli" const config: CapacitorConfig = { - appId: "org.mapcomplete", - appName: "MapComplete", - webDir: "dist-full" -}; - -export default config; + appId: "org.mapcomplete", + appName: "MapComplete", + webDir: "dist-full", +} +export default config diff --git a/langs/themes/cs.json b/langs/themes/cs.json index 8095d514f..7070449c6 100644 --- a/langs/themes/cs.json +++ b/langs/themes/cs.json @@ -785,6 +785,13 @@ } } }, + "11": { + "options": { + "0": { + "question": "Vyloučit etymologii tématu" + } + } + }, "2": { "options": { "0": { diff --git a/langs/themes/de.json b/langs/themes/de.json index a99b1b018..75c649715 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -785,6 +785,13 @@ } } }, + "11": { + "options": { + "0": { + "question": "Etymologie-Thema ausschließen" + } + } + }, "2": { "options": { "0": { diff --git a/langs/themes/en.json b/langs/themes/en.json index 3cac383a3..0afc8aa49 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -785,6 +785,13 @@ } } }, + "11": { + "options": { + "0": { + "question": "Exclude etymology theme" + } + } + }, "2": { "options": { "0": { @@ -831,6 +838,12 @@ "options": { "0": { "question": "Changeset added at least one image" + }, + "1": { + "question": "Made with Android" + }, + "2": { + "question": "Made on the web" } } }, @@ -856,6 +869,17 @@ "question": "What locale (language) was this change made in?", "render": "User locale is {locale}" }, + "platform": { + "mappings": { + "0": { + "then": "Made on the web" + }, + "1": { + "then": "Made with the android app" + } + }, + "question": "With what platform was the change made?" + }, "show_changeset_id": { "render": "Changeset {id}" }, diff --git a/langs/themes/es.json b/langs/themes/es.json index 446d633b5..bfba91603 100644 --- a/langs/themes/es.json +++ b/langs/themes/es.json @@ -776,6 +776,13 @@ } } }, + "11": { + "options": { + "0": { + "question": "Excluir el tema de etimología" + } + } + }, "2": { "options": { "0": { diff --git a/langs/themes/ko.json b/langs/themes/ko.json index 077ba2d08..e291edde8 100644 --- a/langs/themes/ko.json +++ b/langs/themes/ko.json @@ -785,6 +785,13 @@ } } }, + "11": { + "options": { + "0": { + "question": "어원 테마 제외" + } + } + }, "2": { "options": { "0": { diff --git a/langs/themes/nl.json b/langs/themes/nl.json index aafd86378..2557fabac 100644 --- a/langs/themes/nl.json +++ b/langs/themes/nl.json @@ -836,6 +836,13 @@ } } }, + "11": { + "options": { + "0": { + "question": "Thema etymologie uitsluiten" + } + } + }, "2": { "options": { "0": { diff --git a/package-lock.json b/package-lock.json index 3275a3f33..ae6f4a88f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12780,9 +12780,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001692", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz", - "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==", + "version": "1.0.30001699", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz", + "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==", "dev": true, "funding": [ { @@ -12797,7 +12797,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/canonicalize": { "version": "1.0.8", @@ -39820,9 +39821,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001692", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz", - "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==", + "version": "1.0.30001699", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz", + "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==", "dev": true }, "canonicalize": { diff --git a/scripts/downloadCommunityIndex.ts b/scripts/downloadCommunityIndex.ts index 2fce588b7..a95329b61 100644 --- a/scripts/downloadCommunityIndex.ts +++ b/scripts/downloadCommunityIndex.ts @@ -8,7 +8,6 @@ import { Tiles } from "../src/Models/TileRange" import ScriptUtils from "./ScriptUtils" class DownloadCommunityIndex extends Script { - constructor() { super("Updates the community index") } @@ -18,7 +17,8 @@ class DownloadCommunityIndex extends Script { } private static targetZoomlevel: number = 6 - private static upstreamUrl: string = "https://raw.githubusercontent.com/osmlab/osm-community-index/main/dist/" + private static upstreamUrl: string = + "https://raw.githubusercontent.com/osmlab/osm-community-index/main/dist/" /** * Prunes away unnecessary fields from a CommunityResource @@ -33,12 +33,14 @@ class DownloadCommunityIndex extends Script { resolved: { name: r.resolved.name, description: r.resolved.description, - url: r.resolved.url - } + url: r.resolved.url, + }, } } - private static stripResourcesObj(resources: Readonly>>) { + private static stripResourcesObj( + resources: Readonly>> + ) { const stripped: Record = {} for (const k in resources) { const type = resources[k].type @@ -52,20 +54,24 @@ class DownloadCommunityIndex extends Script { } public static async update(targetDirectory: string) { - const data = await Utils.downloadJson, - nameEn: string, - id: string - }>>(DownloadCommunityIndex.upstreamUrl + "completeFeatureCollection.json" - ) + const data = await Utils.downloadJson< + FeatureCollection< + Polygon | MultiPolygon, + { + resources: Record + nameEn: string + id: string + } + > + >(DownloadCommunityIndex.upstreamUrl + "completeFeatureCollection.json") if (!existsSync(targetDirectory)) { mkdirSync(targetDirectory) } const features = data.features - const global = features.find( - f => f.id === "Q2" + const global = features.find((f) => f.id === "Q2") + const globalProperties = DownloadCommunityIndex.stripResourcesObj( + global.properties.resources ) - const globalProperties = DownloadCommunityIndex.stripResourcesObj(global.properties.resources) writeFileSync(targetDirectory + "/global.json", JSON.stringify(globalProperties), "utf8") console.log("Written global properties") @@ -80,12 +86,15 @@ class DownloadCommunityIndex extends Script { const url = `${DownloadCommunityIndex.upstreamUrl}img/${type}.svg` await ScriptUtils.DownloadFileTo(url, `${targetDirectory}/${type}.svg`) } - const local = features.filter(f => f.id !== "Q2") + const local = features.filter((f) => f.id !== "Q2") const spread = GeoOperations.spreadIntoBboxes(local, DownloadCommunityIndex.targetZoomlevel) let written = 0 let skipped = 0 const writtenTilesOverview: Record = {} - writeFileSync(targetDirectory + "local.geojson", JSON.stringify({ type: "FeatureCollection", features: local })) + writeFileSync( + targetDirectory + "local.geojson", + JSON.stringify({ type: "FeatureCollection", features: local }) + ) for (const tileIndex of spread.keys()) { const features = spread.get(tileIndex) const clipped = GeoOperations.clipAllInBox(features, tileIndex) @@ -94,7 +103,9 @@ class DownloadCommunityIndex extends Script { continue } for (const f of clipped) { - f.properties.resources = DownloadCommunityIndex.stripResourcesObj(f.properties.resources) + f.properties.resources = DownloadCommunityIndex.stripResourcesObj( + f.properties.resources + ) } const [z, x, y] = Tiles.tile_from_index(tileIndex) @@ -102,7 +113,11 @@ class DownloadCommunityIndex extends Script { clipped.forEach((f) => { delete f.bbox }) - writeFileSync(path, JSON.stringify({ type: "FeatureCollection", features: clipped }), "utf8") + writeFileSync( + path, + JSON.stringify({ type: "FeatureCollection", features: clipped }), + "utf8" + ) written++ let yList = writtenTilesOverview[x] if (!yList) { @@ -113,11 +128,14 @@ class DownloadCommunityIndex extends Script { console.log(`Written tile ${path}`) } console.log(`Created ${written} tiles, skipped ${skipped}`) - writeFileSync(targetDirectory + "/tile_6_overview.json", JSON.stringify(writtenTilesOverview), "utf8") + writeFileSync( + targetDirectory + "/tile_6_overview.json", + JSON.stringify(writtenTilesOverview), + "utf8" + ) console.log("Created overview file") } - async main(args: string[]): Promise { const path = args[0] if (!path) { @@ -126,7 +144,6 @@ class DownloadCommunityIndex extends Script { } await DownloadCommunityIndex.update(path) - } } diff --git a/scripts/generateDocs.ts b/scripts/generateDocs.ts index 0dd694eea..46292a31d 100644 --- a/scripts/generateDocs.ts +++ b/scripts/generateDocs.ts @@ -138,7 +138,7 @@ export class GenerateDocs extends Script { ScriptUtils.fixUtils() this.WriteMarkdownFile("./Docs/SpecialRenderings.md", SpecialVisualizations.HelpMessage(), [ - "src/UI/SpecialVisualizations.ts" + "src/UI/SpecialVisualizations.ts", ]) if (!existsSync("./Docs/Themes")) { @@ -171,7 +171,6 @@ export class GenerateDocs extends Script { ScriptUtils.erasableLog("Written docs for theme", theme.id) }) - this.WriteMarkdownFile( "./Docs/CalculatedTags.md", ["# Metatags", SimpleMetaTaggers.HelpText(), ExtraFunctions.HelpText()].join("\n"), diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index f5d259dee..fb727f7d0 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -9,12 +9,16 @@ 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" @@ -620,10 +624,7 @@ class LayerOverviewUtils extends Script { for (const sharedLayerPath of ScriptUtils.getLayerPaths()) { if (whitelist.size > 0) { const idByPath = sharedLayerPath.split("/").at(-1).split(".")[0] - if ( - !Constants.isPriviliged(idByPath) && - !whitelist.has(idByPath) - ) { + if (!Constants.isPriviliged(idByPath) && !whitelist.has(idByPath)) { continue } } diff --git a/scripts/generateLayouts.ts b/scripts/generateLayouts.ts index dc4fa9eed..02033237b 100644 --- a/scripts/generateLayouts.ts +++ b/scripts/generateLayouts.ts @@ -338,7 +338,7 @@ class GenerateLayouts extends Script { "https://api.panoramax.xyz", "https://panoramax.mapcomplete.org", "https://data.velopark.be", - "https://data.mapcomplete.org" + "https://data.mapcomplete.org", ].concat(...(await this.eliUrls())) SpecialVisualizations.specialVisualizations.forEach((sv) => { diff --git a/src/Logic/Actors/GeoLocationHandler.ts b/src/Logic/Actors/GeoLocationHandler.ts index 49c1adf7a..ec04f1063 100644 --- a/src/Logic/Actors/GeoLocationHandler.ts +++ b/src/Logic/Actors/GeoLocationHandler.ts @@ -13,7 +13,6 @@ import StaticFeatureSource, { } from "../FeatureSource/Sources/StaticFeatureSource" import { MapProperties } from "../../Models/MapProperties" import { Orientation } from "../../Sensors/Orientation" - ;("use strict") /** * The geolocation-handler takes a map-location and a geolocation state. diff --git a/src/Logic/BBox.ts b/src/Logic/BBox.ts index a9734ee29..7faebcdff 100644 --- a/src/Logic/BBox.ts +++ b/src/Logic/BBox.ts @@ -6,7 +6,7 @@ import { bbox } from "@turf/bbox" export class BBox { static global: BBox = new BBox([ [-180, -90], - [180, 90] + [180, 90], ]) readonly maxLat: number readonly maxLon: number @@ -62,7 +62,7 @@ export class BBox { static fromLeafletBounds(bounds) { return new BBox([ [bounds.getWest(), bounds.getNorth()], - [bounds.getEast(), bounds.getSouth()] + [bounds.getEast(), bounds.getSouth()], ]) } @@ -101,7 +101,7 @@ export class BBox { } return new BBox([ [maxLon, maxLat], - [minLon, minLat] + [minLon, minLat], ]) } @@ -128,7 +128,7 @@ export class BBox { public unionWith(other: BBox) { return new BBox([ [Math.max(this.maxLon, other.maxLon), Math.max(this.maxLat, other.maxLat)], - [Math.min(this.minLon, other.minLon), Math.min(this.minLat, other.minLat)] + [Math.min(this.minLon, other.minLon), Math.min(this.minLat, other.minLat)], ]) } @@ -181,7 +181,7 @@ export class BBox { return new BBox([ [lon - s / 2, lat - s / 2], - [lon + s / 2, lat + s / 2] + [lon + s / 2, lat + s / 2], ]) } @@ -238,21 +238,21 @@ export class BBox { const lonDiff = Math.min(maxIncrease / 2, Math.abs(this.maxLon - this.minLon) * factor) return new BBox([ [this.minLon - lonDiff, this.minLat - latDiff], - [this.maxLon + lonDiff, this.maxLat + latDiff] + [this.maxLon + lonDiff, this.maxLat + latDiff], ]) } padAbsolute(degrees: number): BBox { return new BBox([ [this.minLon - degrees, this.minLat - degrees], - [this.maxLon + degrees, this.maxLat + degrees] + [this.maxLon + degrees, this.maxLat + degrees], ]) } toLngLat(): [[number, number], [number, number]] { return [ [this.minLon, this.minLat], - [this.maxLon, this.maxLat] + [this.maxLon, this.maxLat], ] } @@ -271,7 +271,7 @@ export class BBox { return { type: "Feature", properties: properties, - geometry: this.asGeometry() + geometry: this.asGeometry(), } } @@ -284,9 +284,9 @@ export class BBox { [this.maxLon, this.minLat], [this.maxLon, this.maxLat], [this.minLon, this.maxLat], - [this.minLon, this.minLat] - ] - ] + [this.minLon, this.minLat], + ], + ], } } @@ -316,7 +316,7 @@ export class BBox { minLon, maxLon, minLat, - maxLat + maxLat, } } diff --git a/src/Logic/FeatureSource/Actors/SaveFeatureSourceToLocalStorage.ts b/src/Logic/FeatureSource/Actors/SaveFeatureSourceToLocalStorage.ts index 502d27407..d9505822b 100644 --- a/src/Logic/FeatureSource/Actors/SaveFeatureSourceToLocalStorage.ts +++ b/src/Logic/FeatureSource/Actors/SaveFeatureSourceToLocalStorage.ts @@ -77,21 +77,34 @@ export default class SaveFeatureSourceToLocalStorage { this.storage = storage const singleTileSavers: Map = new Map() features.features.addCallbackAndRunD((features) => { - if (features.some(f => { - let totalPoints = 0 - if (f.geometry.type === "MultiPolygon") { - totalPoints = f.geometry.coordinates.map(rings => rings.map(ring => ring.length).reduce((a, b) => a + b)).reduce((a, b) => a + b) - } else if (f.geometry.type === "Polygon" || f.geometry.type === "MultiLineString") { - totalPoints = f.geometry.coordinates.map(ring => ring.length).reduce((a, b) => a + b) - } else if (f.geometry.type === "LineString") { - totalPoints = f.geometry.coordinates.length - } - if (totalPoints > 1000) { - console.warn(`Not caching tiles, detected a big object (${totalPoints} points for ${f.properties.id})`) - return true - } - return false - })) { + if ( + features.some((f) => { + let totalPoints = 0 + if (f.geometry.type === "MultiPolygon") { + totalPoints = f.geometry.coordinates + .map((rings) => + rings.map((ring) => ring.length).reduce((a, b) => a + b) + ) + .reduce((a, b) => a + b) + } else if ( + f.geometry.type === "Polygon" || + f.geometry.type === "MultiLineString" + ) { + totalPoints = f.geometry.coordinates + .map((ring) => ring.length) + .reduce((a, b) => a + b) + } else if (f.geometry.type === "LineString") { + totalPoints = f.geometry.coordinates.length + } + if (totalPoints > 1000) { + console.warn( + `Not caching tiles, detected a big object (${totalPoints} points for ${f.properties.id})` + ) + return true + } + return false + }) + ) { // Has big objects return } diff --git a/src/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts b/src/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts index 848d8734b..71a2edbcb 100644 --- a/src/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts +++ b/src/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts @@ -37,8 +37,11 @@ export default class DynamicGeoJsonTileSource extends UpdatableDynamicTileSource if (DynamicGeoJsonTileSource.whitelistCache.has(whitelistUrl)) { whitelist = DynamicGeoJsonTileSource.whitelistCache.get(whitelistUrl) } else { - Utils.downloadJsonCached>(whitelistUrl, 1000 * 60 * 60) - .then(json => { + Utils.downloadJsonCached>( + whitelistUrl, + 1000 * 60 * 60 + ) + .then((json) => { const data = new Map>() for (const x in json) { if (x === "zoom") { diff --git a/src/Logic/GeoOperations.ts b/src/Logic/GeoOperations.ts index b049399ea..d520e0faf 100644 --- a/src/Logic/GeoOperations.ts +++ b/src/Logic/GeoOperations.ts @@ -10,12 +10,12 @@ 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 @@ -29,7 +29,7 @@ export class GeoOperations { "behind", "sharp_left", "left", - "slight_left" + "slight_left", ] as const private static reverseBearing = { N: 0, @@ -47,7 +47,7 @@ export class GeoOperations { W: 270, WNW: 292.5, NW: 315, - NNW: 337.5 + NNW: 337.5, } /** @@ -309,7 +309,7 @@ export class GeoOperations { bufferSizeInMeter: number ): Feature | FeatureCollection { return turf.buffer(feature, bufferSizeInMeter / 1000, { - units: "kilometers" + units: "kilometers", }) } @@ -325,9 +325,9 @@ export class GeoOperations { [lon0, lat], [lon0, lat0], [lon, lat0], - [lon, lat] - ] - } + [lon, lat], + ], + }, } } @@ -345,7 +345,10 @@ export class GeoOperations { public static nearestPoint( way: Feature, point: [number, number] - ): Feature { + ): Feature< + Point, + { dist: number; index: number; multiFeatureIndex: number; location: number } + > { return turf.nearestPointOnLine(>way, point, { units: "kilometers" }) } @@ -368,9 +371,9 @@ export class GeoOperations { type: "Feature", geometry: { type: "LineString", - coordinates: way.geometry.coordinates[0] + coordinates: way.geometry.coordinates[0], }, - properties: way.properties + properties: way.properties, } } if (way.geometry.type === "MultiPolygon") { @@ -378,9 +381,9 @@ export class GeoOperations { type: "Feature", geometry: { type: "MultiLineString", - coordinates: way.geometry.coordinates[0] + coordinates: way.geometry.coordinates[0], }, - properties: way.properties + properties: way.properties, } } if (way.geometry.type === "LineString") { @@ -542,7 +545,10 @@ export class GeoOperations { * Note: IDs are rewritten * Also @see spreadIntoBBoxes */ - public static clipAllInBox(features: ReadonlyArray>, tileIndex: number): Feature[] { + public static clipAllInBox( + features: ReadonlyArray>, + tileIndex: number + ): Feature[] { const bbox = Tiles.asGeojson(tileIndex) const newFeatures: Feature[] = [] for (const f of features) { @@ -555,7 +561,7 @@ export class GeoOperations { } const properties = { ...f.properties, - id + id, } intersectionPart.properties = properties newFeatures.push(intersectionPart) @@ -587,8 +593,8 @@ export class GeoOperations { properties: {}, geometry: { type: "Point", - coordinates: p - } + coordinates: p, + }, } ) } @@ -604,7 +610,7 @@ export class GeoOperations { trackPoints.push(trkpt) } const header = - "" + '' return ( header + "\n" + @@ -643,7 +649,7 @@ export class GeoOperations { trackPoints.push(trkpt) } const header = - "" + '' return ( header + "\n" + @@ -669,7 +675,7 @@ export class GeoOperations { const copy = { ...feature, - geometry: { ...feature.geometry } + geometry: { ...feature.geometry }, } let coordinates: [number, number][] if (feature.geometry.type === "LineString") { @@ -727,8 +733,8 @@ export class GeoOperations { type: "Feature", geometry: { type: "LineString", - coordinates: [a, b] - } + coordinates: [a, b], + }, }, distanceMeter, { units: "meters" } @@ -769,13 +775,17 @@ export class GeoOperations { possiblyEnclosingFeature: Readonly> ): boolean { if (feature.geometry.type === "MultiPolygon") { - const polygons = feature.geometry.coordinates.map(coordinates => - >{ - type: "Feature", geometry: { - type: "Polygon", coordinates + const polygons = feature.geometry.coordinates.map( + (coordinates) => + >{ + type: "Feature", + geometry: { + type: "Polygon", + coordinates, + }, } - }) - return !polygons.some(polygon => !booleanWithin(polygon, possiblyEnclosingFeature)) + ) + return !polygons.some((polygon) => !booleanWithin(polygon, possiblyEnclosingFeature)) } return booleanWithin(feature, possiblyEnclosingFeature) } @@ -784,7 +794,10 @@ export class GeoOperations { * Create an intersection between two features. * One or multiple new feature are returned based on 'toSplit', which'll have a geometry that is completely withing boundary */ - public static clipWith(toSplit: Readonly, boundary: Readonly>): Feature[] { + public static clipWith( + toSplit: Readonly, + boundary: Readonly> + ): Feature[] { if (toSplit.geometry.type === "Point") { const p = >toSplit if (GeoOperations.inside(<[number, number]>p.geometry.coordinates, boundary)) { @@ -795,7 +808,10 @@ export class GeoOperations { } if (toSplit.geometry.type === "LineString") { - const splitup: Feature[] = turf.lineSplit(>toSplit, boundary).features + const splitup: Feature[] = turf.lineSplit( + >toSplit, + boundary + ).features const kept: Feature[] = [] for (const f of splitup) { if (!GeoOperations.inside(GeoOperations.centerpointCoordinates(f), boundary)) { @@ -825,21 +841,29 @@ export class GeoOperations { return kept } if (toSplit.geometry.type === "Polygon" || toSplit.geometry.type == "MultiPolygon") { - - const splitup = turf.intersect(turf.featureCollection([>toSplit, boundary])) + const splitup = turf.intersect( + turf.featureCollection([>toSplit, boundary]) + ) if (splitup === null) { // No intersection found. // Either: the boundary is contained fully in 'toSplit', 'toSplit' is contained fully in 'boundary' or they are unrelated at all if (GeoOperations.completelyWithin(toSplit, boundary)) { return [toSplit] } - if (GeoOperations.completelyWithin(boundary, >toSplit)) { - return [{ - type: "Feature", - properties: { ...toSplit.properties }, - geometry: boundary.geometry, - bbox: boundary.bbox - }] + if ( + GeoOperations.completelyWithin( + boundary, + >toSplit + ) + ) { + return [ + { + type: "Feature", + properties: { ...toSplit.properties }, + geometry: boundary.geometry, + bbox: boundary.bbox, + }, + ] } return [] } @@ -911,7 +935,9 @@ export class GeoOperations { return undefined case "end": if (feature.geometry.type === "LineString") { - return <[number, number]>(>feature).geometry.coordinates.at(-1) + return <[number, number]>( + (>feature).geometry.coordinates.at(-1) + ) } return undefined default: @@ -934,8 +960,8 @@ export class GeoOperations { properties: p.properties, geometry: { type: "LineString", - coordinates: p.geometry.coordinates[0] - } + coordinates: p.geometry.coordinates[0], + }, } } @@ -963,7 +989,7 @@ export class GeoOperations { console.debug("Splitting way", feature.properties.id) result.push({ ...feature, - geometry: { ...feature.geometry, coordinates: coors.slice(i + 1) } + geometry: { ...feature.geometry, coordinates: coors.slice(i + 1) }, }) coors = coors.slice(0, i + 1) break @@ -972,7 +998,7 @@ export class GeoOperations { } result.push({ ...feature, - geometry: { ...feature.geometry, coordinates: coors } + geometry: { ...feature.geometry, coordinates: coors }, }) } } @@ -1146,8 +1172,8 @@ export class GeoOperations { properties: multiLineStringFeature.properties, geometry: { type: "LineString", - coordinates: coors[0] - } + coordinates: coors[0], + }, } } return { @@ -1155,8 +1181,8 @@ export class GeoOperations { properties: multiLineStringFeature.properties, geometry: { type: "MultiLineString", - coordinates: coors - } + coordinates: coors, + }, } } @@ -1306,9 +1332,10 @@ export class GeoOperations { } if (e.message.indexOf("SweepLine tree") >= 0) { console.log("Applying fallback intersection...") - const intersection = turf.intersect(turf.featureCollection([ + const intersection = turf.intersect( + turf.featureCollection([ turf.truncate(feature), - turf.truncate(otherFeature) + turf.truncate(otherFeature), ]) ) if (intersection == null) { diff --git a/src/Logic/ImageProviders/AllImageProviders.ts b/src/Logic/ImageProviders/AllImageProviders.ts index 457e37d5d..311d0be43 100644 --- a/src/Logic/ImageProviders/AllImageProviders.ts +++ b/src/Logic/ImageProviders/AllImageProviders.ts @@ -83,11 +83,15 @@ export default class AllImageProviders { ): number { let count = 0 - const sources = [Imgur.singleton, + const sources = [ + Imgur.singleton, Mapillary.singleton, Panoramax.singleton, - AllImageProviders.genericImageProvider] - const allPrefixes = Utils.Dedup(prefixes ?? [].concat(...sources.map(s => s.defaultKeyPrefixes))) + AllImageProviders.genericImageProvider, + ] + const allPrefixes = Utils.Dedup( + prefixes ?? [].concat(...sources.map((s) => s.defaultKeyPrefixes)) + ) for (const prefix of allPrefixes) { for (const k in tags) { if (!tags[k]) { diff --git a/src/Logic/ImageProviders/Panoramax.ts b/src/Logic/ImageProviders/Panoramax.ts index 7bf208c18..710c871c8 100644 --- a/src/Logic/ImageProviders/Panoramax.ts +++ b/src/Logic/ImageProviders/Panoramax.ts @@ -32,7 +32,7 @@ export default class PanoramaxImageProvider extends ImageProvider { lat: number } ): BaseUIElement { - const host = ("https://" + new URL(img.url).host) + const host = "https://" + new URL(img.url).host const p = new Panoramax(host) return new Link( new SvelteUIElement(Panoramax_bw), diff --git a/src/Logic/Osm/ChangesetHandler.ts b/src/Logic/Osm/ChangesetHandler.ts index 88d9ea5e2..5f364c5ce 100644 --- a/src/Logic/Osm/ChangesetHandler.ts +++ b/src/Logic/Osm/ChangesetHandler.ts @@ -53,7 +53,7 @@ export class ChangesetHandler { | { addAlias: (id0: string, id1: string) => void } | undefined, changes: Changes, - reportError: (e: string | Error, extramessage: string) => void, + reportError: (e: string | Error, extramessage: string) => void ) { this.osmConnection = osmConnection this._reportError = reportError @@ -114,7 +114,7 @@ export class ChangesetHandler { private async UploadWithNew( generateChangeXML: (csid: number, remappings: Map) => string, openChangeset: UIEventSource, - extraMetaTags: ChangesetTag[], + extraMetaTags: ChangesetTag[] ) { const csId = await this.OpenChangeset(extraMetaTags) openChangeset.setData(csId) @@ -122,7 +122,7 @@ export class ChangesetHandler { console.log( "Opened a new changeset (openChangeset.data is undefined):", changeset, - extraMetaTags, + extraMetaTags ) const changes = await this.UploadChange(csId, changeset) const hasSpecialMotivationChanges = ChangesetHandler.rewriteMetaTags(extraMetaTags, changes) @@ -145,7 +145,7 @@ export class ChangesetHandler { public async UploadChangeset( generateChangeXML: (csid: number, remappings: Map) => string, extraMetaTags: ChangesetTag[], - openChangeset: UIEventSource, + openChangeset: UIEventSource ): Promise { if ( !extraMetaTags.some((tag) => tag.key === "comment") || @@ -180,13 +180,13 @@ export class ChangesetHandler { try { const rewritings = await this.UploadChange( csId, - generateChangeXML(csId, this._remappings), + generateChangeXML(csId, this._remappings) ) const rewrittenTags = this.RewriteTagsOf( extraMetaTags, rewritings, - oldChangesetMeta, + oldChangesetMeta ) await this.UpdateTags(csId, rewrittenTags) return // We are done! @@ -197,7 +197,7 @@ export class ChangesetHandler { } catch (e) { this._reportError( e, - "While getting metadata from a changeset " + openChangeset.data, + "While getting metadata from a changeset " + openChangeset.data ) } } @@ -225,7 +225,7 @@ export class ChangesetHandler { console.warn( "Could not open/upload changeset due to ", e, - "trying again with a another fresh changeset ", + "trying again with a another fresh changeset " ) openChangeset.setData(undefined) @@ -251,7 +251,7 @@ export class ChangesetHandler { uid: number // User ID changes_count: number tags: any - }, + } ): ChangesetTag[] { // Note: extraMetaTags is where all the tags are collected into @@ -388,7 +388,7 @@ export class ChangesetHandler { tag.key !== undefined && tag.value !== undefined && tag.key !== "" && - tag.value !== "", + tag.value !== "" ) const metadata = tags.map((kv) => ``) const content = [``, metadata, ``].join("") @@ -434,7 +434,7 @@ export class ChangesetHandler { const csId = await this.osmConnection.put( "changeset/create", [``, metadata, ``].join(""), - { "Content-Type": "text/xml" }, + { "Content-Type": "text/xml" } ) return Number(csId) } @@ -444,12 +444,12 @@ export class ChangesetHandler { */ private async UploadChange( changesetId: number, - changesetXML: string, + changesetXML: string ): Promise> { const response = await this.osmConnection.post( "changeset/" + changesetId + "/upload", changesetXML, - { "Content-Type": "text/xml" }, + { "Content-Type": "text/xml" } ) const changes = this.parseUploadChangesetResponse(response) console.log("Uploaded changeset ", changesetId) diff --git a/src/Logic/Osm/OsmConnection.ts b/src/Logic/Osm/OsmConnection.ts index 72180d527..69a8de5be 100644 --- a/src/Logic/Osm/OsmConnection.ts +++ b/src/Logic/Osm/OsmConnection.ts @@ -10,44 +10,43 @@ import { AndroidPolyfill } from "../Web/AndroidPolyfill" import { QueryParameters } from "../Web/QueryParameters" interface OsmUserInfo { - - "id": number, - "display_name": string, - "account_created": string, - "description": string, - "contributor_terms": { - "agreed": boolean, - "pd": boolean + id: number + display_name: string + account_created: string + description: string + contributor_terms: { + agreed: boolean + pd: boolean } - "img"?: { - "href": string, + img?: { + href: string } - "roles": string[] - "changesets": { - "count": number + roles: string[] + changesets: { + count: number } traces: { count: number } - "blocks": { - "received": { - "count": number, - "active": number + blocks: { + received: { + count: number + active: number } } home?: { - lat: number, - lon: number, + lat: number + lon: number zoom: number } - "languages": string[] - "messages": { - "received": { - "count": number, - "unread": number - }, - "sent": { - "count": number + languages: string[] + messages: { + received: { + count: number + unread: number + } + sent: { + count: number } id: number @@ -60,12 +59,10 @@ interface OsmUserInfo { traces: { count: number } blocks: { received: { count: number; active: number } } img?: { href: string } - home: { lat: number, lon: number } + home: { lat: number; lon: number } languages?: string[] - messages: { received: { count: number, unread: number }, sent: { count: number } } - -} - + messages: { received: { count: number; unread: number }; sent: { count: number } } + } } export default interface UserDetails { @@ -81,7 +78,6 @@ export default interface UserDetails { tracesCount: number description?: string languages: string[] - } export type OsmServiceState = "online" | "readonly" | "offline" | "unknown" | "unreachable" @@ -126,14 +122,14 @@ export class OsmConnection { public userDetails: UIEventSource public isLoggedIn: Store public gpxServiceIsOnline: UIEventSource = new UIEventSource( - "unknown", + "unknown" ) public apiIsOnline: UIEventSource = new UIEventSource( - "unknown", + "unknown" ) public loadingStatus = new UIEventSource<"not-attempted" | "loading" | "error" | "logged-in">( - "not-attempted", + "not-attempted" ) public preferencesHandler: OsmPreferences public readonly _oauth_config: AuthConfig @@ -193,7 +189,7 @@ export class OsmConnection { (user) => !!user && (this.apiIsOnline.data === "unknown" || this.apiIsOnline.data === "online"), - [this.apiIsOnline], + [this.apiIsOnline] ) this._dryRun = options.dryRun ?? new UIEventSource(false) @@ -232,7 +228,7 @@ export class OsmConnection { defaultValue: string = undefined, options?: { prefix?: string - }, + } ): UIEventSource { const prefix = options?.prefix ?? "mapcomplete-" return >this.preferencesHandler.getPreference(key, defaultValue, prefix) @@ -241,7 +237,7 @@ export class OsmConnection { public getPreference( key: string, defaultValue: string = undefined, - prefix: string = "mapcomplete-", + prefix: string = "mapcomplete-" ): UIEventSource { return >this.preferencesHandler.getPreference(key, defaultValue, prefix) } @@ -275,7 +271,7 @@ export class OsmConnection { } this.updateAuthObject(true) LocalStorageSource.get("location_before_login").setData( - Utils.runningFromConsole ? undefined : window.location.href, + Utils.runningFromConsole ? undefined : window.location.href ) this.auth.authenticate((err) => { @@ -292,11 +288,13 @@ export class OsmConnection { this.loadingStatus.setData("error") return } - const data = <{ - "version": "0.6", - "license": "http://opendatacommons.org/licenses/odbl/1-0/", - "user": OsmUserInfo - }>JSON.parse(result) + const data = < + { + version: "0.6" + license: "http://opendatacommons.org/licenses/odbl/1-0/" + user: OsmUserInfo + } + >JSON.parse(result) const user = data.user const userdetails: UserDetails = { uid: user.id, @@ -343,7 +341,7 @@ export class OsmConnection { method: "GET" | "POST" | "PUT" | "DELETE" = "GET", header?: Record, content?: string, - allowAnonymous: boolean = false, + allowAnonymous: boolean = false ): Promise { const connection: osmAuth = this.auth if (allowAnonymous && !this.auth.authenticated()) { @@ -351,7 +349,7 @@ export class OsmConnection { `${this.Backend()}/api/0.6/${path}`, header, method, - content, + content ) if (possibleResult["content"]) { return possibleResult["content"] @@ -371,15 +369,15 @@ export class OsmConnection { method, headers: header, content, - path: `/api/0.6/${path}` + path: `/api/0.6/${path}`, }, - function(err, response) { + function (err, response) { if (err !== null) { error(err) } else { ok(response) } - }, + } ) }) } @@ -388,7 +386,7 @@ export class OsmConnection { path: string, content?: string, header?: Record, - allowAnonymous: boolean = false, + allowAnonymous: boolean = false ): Promise { return await this.interact(path, "POST", header, content, allowAnonymous) } @@ -396,7 +394,7 @@ export class OsmConnection { public async put( path: string, content?: string, - header?: Record, + header?: Record ): Promise { return await this.interact(path, "PUT", header, content) } @@ -404,7 +402,7 @@ export class OsmConnection { public async get( path: string, header?: Record, - allowAnonymous: boolean = false, + allowAnonymous: boolean = false ): Promise { return await this.interact(path, "GET", header, undefined, allowAnonymous) } @@ -443,7 +441,7 @@ export class OsmConnection { return new Promise<{ id: number }>((ok) => { window.setTimeout( () => ok({ id: Math.floor(Math.random() * 1000) }), - Math.random() * 5000, + Math.random() * 5000 ) }) } @@ -453,9 +451,9 @@ export class OsmConnection { "notes.json", content, { - "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", }, - true, + true ) const parsed = JSON.parse(response) console.log("Got result:", parsed) @@ -482,14 +480,14 @@ export class OsmConnection { * Note: these are called 'tags' on the wiki, but I opted to name them 'labels' instead as they aren't "key=value" tags, but just words. */ labels: string[] - }, + } ): Promise<{ id: number }> { if (this._dryRun.data) { console.warn("Dryrun enabled - not actually uploading GPX ", gpx) return new Promise<{ id: number }>((ok) => { window.setTimeout( () => ok({ id: Math.floor(Math.random() * 1000) }), - Math.random() * 5000, + Math.random() * 5000 ) }) } @@ -498,7 +496,7 @@ export class OsmConnection { file: gpx, description: options.description, tags: options.labels?.join(",") ?? "", - visibility: options.visibility + visibility: options.visibility, } if (!contents.description) { @@ -506,9 +504,9 @@ export class OsmConnection { } const extras = { file: - "; filename=\"" + + '; filename="' + (options.filename ?? "gpx_track_mapcomplete_" + new Date().toISOString()) + - "\"\r\nContent-Type: application/gpx+xml" + '"\r\nContent-Type: application/gpx+xml', } const boundary = "987654" @@ -516,7 +514,7 @@ export class OsmConnection { let body = "" for (const key in contents) { body += "--" + boundary + "\r\n" - body += "Content-Disposition: form-data; name=\"" + key + "\"" + body += 'Content-Disposition: form-data; name="' + key + '"' if (extras[key] !== undefined) { body += extras[key] } @@ -527,7 +525,7 @@ export class OsmConnection { const response = await this.post("gpx/create", body, { "Content-Type": "multipart/form-data; boundary=" + boundary, - "Content-Length": "" + body.length + "Content-Length": "" + body.length, }) const parsed = JSON.parse(response) console.log("Uploaded GPX track", parsed) @@ -548,15 +546,15 @@ export class OsmConnection { { method: "POST", - path: `/api/0.6/notes/${id}/comment?text=${encodeURIComponent(text)}` + path: `/api/0.6/notes/${id}/comment?text=${encodeURIComponent(text)}`, }, - function(err) { + function (err) { if (err !== null) { error(err) } else { ok() } - }, + } ) }) } @@ -576,15 +574,18 @@ export class OsmConnection { public getToken(): string { // https://www.openstreetmap.orgoauth2_access_token let prefix = this.Backend() - while(prefix.endsWith("/")){ - prefix = prefix.substring(0, prefix.length-2) + while (prefix.endsWith("/")) { + prefix = prefix.substring(0, prefix.length - 2) } - return QueryParameters.GetQueryParameter(prefix+ "oauth_token", undefined).data ?? window.localStorage.getItem(this._oauth_config.url + "oauth2_access_token") + return ( + QueryParameters.GetQueryParameter(prefix + "oauth_token", undefined).data ?? + window.localStorage.getItem(this._oauth_config.url + "oauth2_access_token") + ) } private async loginAndroidPolyfill() { const key = "https://www.openstreetmap.orgoauth2_access_token" - if(localStorage.getItem(key)){ + if (localStorage.getItem(key)) { // We are probably already logged in return } @@ -595,7 +596,6 @@ export class OsmConnection { console.log("Logged in!") } await this.loadUserInfo() - } private updateAuthObject(autoLogin: boolean) { let redirect_uri = Utils.runningFromConsole @@ -614,7 +614,7 @@ export class OsmConnection { */ singlepage: !this._iframeMode && !AndroidPolyfill.inAndroid.data, auto: autoLogin, - apiUrl: this._oauth_config.api_url ?? this._oauth_config.url + apiUrl: this._oauth_config.api_url ?? this._oauth_config.url, }) if (AndroidPolyfill.inAndroid.data) { this.loginAndroidPolyfill() // NO AWAIT! @@ -658,7 +658,8 @@ export class OsmConnection { if (this.fakeUser) { return } - this.fetchCapabilities().then(({ api, gpx }) => { + this.fetchCapabilities() + .then(({ api, gpx }) => { this.apiIsOnline.setData(api) this.gpxServiceIsOnline.setData(gpx) }) @@ -695,7 +696,7 @@ export class OsmConnection { } try { const result = await Utils.downloadJson( - this.Backend() + "/api/0.6/capabilities.json", + this.Backend() + "/api/0.6/capabilities.json" ) if (result?.api?.status === undefined) { console.log("Something went wrong:", result) diff --git a/src/Logic/Search/CombinedSearcher.ts b/src/Logic/Search/CombinedSearcher.ts index 64fb0d816..07affc4c1 100644 --- a/src/Logic/Search/CombinedSearcher.ts +++ b/src/Logic/Search/CombinedSearcher.ts @@ -1,4 +1,8 @@ -import GeocodingProvider, { GeocodeResult, GeocodingOptions, SearchResult } from "./GeocodingProvider" +import GeocodingProvider, { + GeocodeResult, + GeocodingOptions, + SearchResult, +} from "./GeocodingProvider" import { Utils } from "../../Utils" import { Store, Stores } from "../UIEventSource" diff --git a/src/Logic/Search/PhotonSearch.ts b/src/Logic/Search/PhotonSearch.ts index 153f74665..da93b4eb1 100644 --- a/src/Logic/Search/PhotonSearch.ts +++ b/src/Logic/Search/PhotonSearch.ts @@ -5,7 +5,7 @@ import GeocodingProvider, { GeocodingOptions, GeocodingUtils, ReverseGeocodingProvider, - ReverseGeocodingResult + ReverseGeocodingResult, } from "./GeocodingProvider" import { Utils } from "../../Utils" import { Feature, FeatureCollection } from "geojson" diff --git a/src/Logic/Search/ThemeSearch.ts b/src/Logic/Search/ThemeSearch.ts index 231fb3dd1..13f8d3e51 100644 --- a/src/Logic/Search/ThemeSearch.ts +++ b/src/Logic/Search/ThemeSearch.ts @@ -83,7 +83,10 @@ export default class ThemeSearch { } let linkPrefix = `${path}/${layout.id.toLowerCase()}.html?` - if ((location.hostname === "localhost" && !AndroidPolyfill.inAndroid.data) || location.hostname === "127.0.0.1") { + if ( + (location.hostname === "localhost" && !AndroidPolyfill.inAndroid.data) || + location.hostname === "127.0.0.1" + ) { linkPrefix = `${path}/theme.html?layout=${layout.id}&` } diff --git a/src/Logic/SimpleMetaTagger.ts b/src/Logic/SimpleMetaTagger.ts index f47a9fb4a..708b29bfa 100644 --- a/src/Logic/SimpleMetaTagger.ts +++ b/src/Logic/SimpleMetaTagger.ts @@ -80,7 +80,7 @@ export class ReferencingWaysMetaTagger extends SimpleMetaTagger { super({ keys: ["_referencing_ways"], isLazy: true, - doc: "_referencing_ways contains - for a node - which ways use this node as point in their geometry. " + doc: "_referencing_ways contains - for a node - which ways use this node as point in their geometry. ", }) } @@ -116,7 +116,7 @@ class CountryTagger extends SimpleMetaTagger { super({ keys: ["_country"], doc: "The country codes of the of the country/countries that the feature is located in (with latlon2country). Might contain _multiple_ countries, separated by a `;`", - includesDates: false + includesDates: false, }) } @@ -213,9 +213,9 @@ class RewriteMetaInfoTags extends SimpleMetaTagger { "_last_edit:changeset", "_last_edit:timestamp", "_version_number", - "_backend" + "_backend", ], - doc: "Information about the last edit of this object. This object will actually _rewrite_ some tags for features coming from overpass" + doc: "Information about the last edit of this object. This object will actually _rewrite_ some tags for features coming from overpass", }) } @@ -246,16 +246,20 @@ class RewriteMetaInfoTags extends SimpleMetaTagger { class NormalizePanoramax extends SimpleMetaTagger { constructor() { - super( - { - keys: ["panoramax"], - doc: "Converts a `panoramax=hash1;hash2;hash3;...` into `panoramax=hash1`,`panoramax:0=hash1`...", - isLazy: false, - cleanupRetagger: true - }) + super({ + keys: ["panoramax"], + doc: "Converts a `panoramax=hash1;hash2;hash3;...` into `panoramax=hash1`,`panoramax:0=hash1`...", + isLazy: false, + cleanupRetagger: true, + }) } - private addValue(comesFromKey: string, tags: Record, hashesToAdd: string[], postfix?: string) { + private addValue( + comesFromKey: string, + tags: Record, + hashesToAdd: string[], + postfix?: string + ) { let basekey = "panoramax" if (postfix) { basekey = "panoramax:" + postfix @@ -279,7 +283,11 @@ class NormalizePanoramax extends SimpleMetaTagger { * new NormalizePanoramax().applyMetaTagsOnFeature(_, _, tags, _) * tags.data // => {"panoramax": "abc", "panoramax:0" : "def", "panoramax:1": "ghi", "panoramax:2":"xyz", "panoramax:3":"uvw", "panoramax:streetsign":"a", "panoramax:streetsign:0":"b","panoramax:streetsign:1": "c"} */ - applyMetaTagsOnFeature(feature: Feature, layer: LayerConfig, tags: UIEventSource>): boolean { + applyMetaTagsOnFeature( + feature: Feature, + layer: LayerConfig, + tags: UIEventSource> + ): boolean { const tgs = tags.data let somethingChanged = false for (const key in tgs) { @@ -295,7 +303,6 @@ class NormalizePanoramax extends SimpleMetaTagger { this.addValue(key, tgs, parts) somethingChanged = true } else { - const postfix = key.match(/panoramax:([^:]+)(:[0-9]+)?/)?.[1] if (postfix) { this.addValue(key, tgs, parts, postfix) @@ -316,7 +323,7 @@ export default class SimpleMetaTaggers { public static geometryType = new InlineMetaTagger( { keys: ["_geometry:type"], - doc: "Adds the geometry type as property. This is identical to the GoeJson geometry type and is one of `Point`,`LineString`, `Polygon` and exceptionally `MultiPolygon` or `MultiLineString`" + doc: "Adds the geometry type as property. This is identical to the GoeJson geometry type and is one of `Point`,`LineString`, `Polygon` and exceptionally `MultiPolygon` or `MultiLineString`", }, (feature) => { const changed = feature.properties["_geometry:type"] === feature.geometry.type @@ -342,12 +349,12 @@ export default class SimpleMetaTaggers { W: 270, WNW: 292.5, NW: 315, - NNW: 337.5 + NNW: 337.5, } private static latlon = new InlineMetaTagger( { keys: ["_lat", "_lon"], - doc: "The latitude and longitude of the point (or centerpoint in the case of a way/area)" + doc: "The latitude and longitude of the point (or centerpoint in the case of a way/area)", }, (feature) => { const centerPoint = GeoOperations.centerpoint(feature) @@ -362,7 +369,7 @@ export default class SimpleMetaTaggers { { doc: "The layer-id to which this feature belongs. Note that this might be return any applicable if `passAllFeatures` is defined.", keys: ["_layer"], - includesDates: false + includesDates: false, }, (feature, layer) => { if (feature.properties._layer === layer.id) { @@ -378,11 +385,11 @@ export default class SimpleMetaTaggers { "sidewalk:left", "sidewalk:right", "generic_key:left:property", - "generic_key:right:property" + "generic_key:right:property", ], doc: "Rewrites tags from 'generic_key:both:property' as 'generic_key:left:property' and 'generic_key:right:property' (and similar for sidewalk tagging). Note that this rewritten tags _will be reuploaded on a change_. To prevent to much unrelated retagging, this is only enabled if the layer has at least some lineRenderings with offset defined", includesDates: false, - cleanupRetagger: true + cleanupRetagger: true, }, (feature, layer) => { if (!layer.lineRendering.some((lr) => lr.leftRightSensitive)) { @@ -396,7 +403,7 @@ export default class SimpleMetaTaggers { { keys: ["_surface"], doc: "The surface area of the feature in square meters. Not set on points and ways", - isLazy: true + isLazy: true, }, (feature) => { if (feature.geometry.type !== "Polygon" && feature.geometry.type !== "MultiPolygon") { @@ -414,7 +421,7 @@ export default class SimpleMetaTaggers { { keys: ["_surface:ha"], doc: "The surface area of the feature in hectare. Not set on points and ways", - isLazy: true + isLazy: true, }, (feature) => { if (feature.geometry.type !== "Polygon" && feature.geometry.type !== "MultiPolygon") { @@ -432,7 +439,7 @@ export default class SimpleMetaTaggers { private static levels = new InlineMetaTagger( { doc: "Extract the 'level'-tag into a normalized, ';'-separated value called '_level' (which also includes 'repeat_on'). The `level` tag (without underscore) will be normalized with only the value of `level`.", - keys: ["_level"] + keys: ["_level"], }, (feature) => { let somethingChanged = false @@ -467,7 +474,7 @@ export default class SimpleMetaTaggers { private static canonicalize = new InlineMetaTagger( { doc: "If 'units' is defined in the layoutConfig, then this metatagger will rewrite the specified keys to have the canonical form (e.g. `1meter` will be rewritten to `1m`; `1` will be rewritten to `1m` as well)", - keys: ["Theme-defined keys"] + keys: ["Theme-defined keys"], }, (feature, _, __, state) => { const units = Utils.NoNull( @@ -524,7 +531,7 @@ export default class SimpleMetaTaggers { private static lngth = new InlineMetaTagger( { keys: ["_length", "_length:km"], - doc: "The total length of a feature in meters (and in kilometers, rounded to one decimal for '_length:km'). For a surface, the length of the perimeter" + doc: "The total length of a feature in meters (and in kilometers, rounded to one decimal for '_length:km'). For a surface, the length of the perimeter", }, (feature) => { const l = GeoOperations.lengthInMeters(feature) @@ -540,7 +547,7 @@ export default class SimpleMetaTaggers { keys: ["_isOpen"], doc: "If 'opening_hours' is present, it will add the current state of the feature (being 'yes' or 'no')", includesDates: true, - isLazy: true + isLazy: true, }, (feature) => { if (Utils.runningFromConsole) { @@ -579,8 +586,8 @@ export default class SimpleMetaTaggers { lon: lon, address: { country_code: tags._country.toLowerCase(), - state: undefined - } + state: undefined, + }, }, { tag_key: "opening_hours" } ) @@ -592,14 +599,14 @@ export default class SimpleMetaTaggers { delete tags._isOpen tags["_isOpen"] = "parse_error" } - } + }, }) } ) private static directionSimplified = new InlineMetaTagger( { keys: ["_direction:numerical", "_direction:leftright"], - doc: "_direction:numerical is a normalized, numerical direction based on 'camera:direction' or on 'direction'; it is only present if a valid direction is found (e.g. 38.5 or NE). _direction:leftright is either 'left' or 'right', which is left-looking on the map or 'right-looking' on the map" + doc: "_direction:numerical is a normalized, numerical direction based on 'camera:direction' or on 'direction'; it is only present if a valid direction is found (e.g. 38.5 or NE). _direction:leftright is either 'left' or 'right', which is left-looking on the map or 'right-looking' on the map", }, (feature) => { const tags = feature.properties @@ -624,7 +631,7 @@ export default class SimpleMetaTaggers { { keys: ["_direction:centerpoint"], isLazy: true, - doc: "_direction:centerpoint is the direction of the linestring (in degrees) if one were standing at the projected centerpoint." + doc: "_direction:centerpoint is the direction of the linestring (in degrees) if one were standing at the projected centerpoint.", }, (feature: Feature) => { if (feature.geometry.type !== "LineString") { @@ -647,7 +654,7 @@ export default class SimpleMetaTaggers { delete feature.properties["_direction:centerpoint"] feature.properties["_direction:centerpoint"] = bearing return bearing - } + }, }) return true @@ -657,7 +664,7 @@ export default class SimpleMetaTaggers { { keys: ["_now:date", "_now:datetime"], doc: "Adds the time that the data got loaded - pretty much the time of downloading from overpass. The format is YYYY-MM-DD hh:mm, aka 'sortable' aka ISO-8601-but-not-entirely", - includesDates: true + includesDates: true, }, (feature) => { const now = new Date() @@ -681,7 +688,7 @@ export default class SimpleMetaTaggers { keys: ["_last_edit:passed_time"], doc: "Gives the number of seconds since the last edit. Note that this will _not_ update, but rather be the number of seconds elapsed at the moment this tag is read first", isLazy: true, - includesDates: true + includesDates: true, }, (feature) => { Utils.AddLazyProperty(feature.properties, "_last_edit:passed_time", () => { @@ -700,7 +707,7 @@ export default class SimpleMetaTaggers { { keys: ["_currency"], doc: "Adds the currency valid for the object, based on country or explicit tagging. Can be a single currency or a semicolon-separated list of currencies. Empty if no currency is found.", - isLazy: true + isLazy: true, }, (feature: Feature, layer: LayerConfig, tagsStore: UIEventSource) => { if (tagsStore === undefined) { @@ -742,7 +749,6 @@ export default class SimpleMetaTaggers { } ) - public static metatags: SimpleMetaTagger[] = [ SimpleMetaTaggers.latlon, SimpleMetaTaggers.layerInfo, @@ -762,7 +768,7 @@ export default class SimpleMetaTaggers { SimpleMetaTaggers.referencingWays, SimpleMetaTaggers.timeSinceLastEdit, SimpleMetaTaggers.currency, - SimpleMetaTaggers.normalizePanoramax + SimpleMetaTaggers.normalizePanoramax, ] /** @@ -844,8 +850,8 @@ export default class SimpleMetaTaggers { [ "Metatags are extra tags available, in order to display more data or to give better questions.", "They are calculated automatically on every feature when the data arrives in the webbrowser. This document gives an overview of the available metatags.", - "**Hint:** when using metatags, add the [query parameter](URL_Parameters.md) `debug=true` to the URL. This will include a box in the popup for features which shows all the properties of the object" - ].join("\n") + "**Hint:** when using metatags, add the [query parameter](URL_Parameters.md) `debug=true` to the URL. This will include a box in the popup for features which shows all the properties of the object", + ].join("\n"), ] subElements.push("## Metatags calculated by MapComplete") diff --git a/src/Logic/State/FeatureSwitchState.ts b/src/Logic/State/FeatureSwitchState.ts index 1fbbaf9e7..ee8a3b98b 100644 --- a/src/Logic/State/FeatureSwitchState.ts +++ b/src/Logic/State/FeatureSwitchState.ts @@ -182,7 +182,9 @@ export default class FeatureSwitchState extends OsmConnectionFeatureSwitches { let testingDefaultValue = false if ( - !Constants.osmAuthConfig.url.startsWith("https://master.apis.dev.openstreetmap.org") && !Utils.runningFromConsole && location.hostname === "127.0.0.1" + !Constants.osmAuthConfig.url.startsWith("https://master.apis.dev.openstreetmap.org") && + !Utils.runningFromConsole && + location.hostname === "127.0.0.1" ) { testingDefaultValue = true } diff --git a/src/Logic/State/GeoLocationState.ts b/src/Logic/State/GeoLocationState.ts index 34618905c..21fa3aaca 100644 --- a/src/Logic/State/GeoLocationState.ts +++ b/src/Logic/State/GeoLocationState.ts @@ -25,7 +25,7 @@ export class GeoLocationState { * 'denied' means that we don't have access */ public readonly permission: UIEventSource = new UIEventSource( - "prompt", + "prompt" ) /** @@ -130,7 +130,7 @@ export class GeoLocationState { } return Translations.t.general.waitingForLocation }, - [this.allowMoving, this.permission, this.currentGPSLocation], + [this.allowMoving, this.permission, this.currentGPSLocation] ) } @@ -165,15 +165,15 @@ export class GeoLocationState { return } - if(AndroidPolyfill.inAndroid.data){ + if (AndroidPolyfill.inAndroid.data) { this.permission.setData("requested") - this.permission.addCallbackAndRunD(p => { - if(p === "granted"){ + this.permission.addCallbackAndRunD((p) => { + if (p === "granted") { this.startWatching() return true } }) - AndroidPolyfill.requestGeoPermission().then(state => { + AndroidPolyfill.requestGeoPermission().then((state) => { const granted = state.value === "true" this.permission.set(granted ? "granted" : "denied") }) @@ -218,15 +218,14 @@ export class GeoLocationState { * @private */ private async startWatching() { - - if(AndroidPolyfill.inAndroid.data){ - AndroidPolyfill.watchLocation( this.currentGPSLocation, location => { + if (AndroidPolyfill.inAndroid.data) { + AndroidPolyfill.watchLocation(this.currentGPSLocation, (location) => { console.log(JSON.stringify(location)) }) } navigator.geolocation.watchPosition( - (position: GeolocationPosition) => { + (position: GeolocationPosition) => { this._gpsAvailable.set(true) this.currentGPSLocation.setData(position.coords) this._previousLocationGrant.setData(true) @@ -249,5 +248,4 @@ export class GeoLocationState { } ) } - } diff --git a/src/Logic/State/UserRelatedState.ts b/src/Logic/State/UserRelatedState.ts index 8ca36200a..8c9996efc 100644 --- a/src/Logic/State/UserRelatedState.ts +++ b/src/Logic/State/UserRelatedState.ts @@ -350,7 +350,9 @@ export default class UserRelatedState { * List of all hidden themes that have been seen before * @param osmConnection */ - public static initDiscoveredHiddenThemes(osmConnection: OsmConnection): Store { + public static initDiscoveredHiddenThemes( + osmConnection: OsmConnection + ): Store { const prefix = "mapcomplete-hidden-theme-" const userPreferences = osmConnection.preferencesHandler.allPreferences return userPreferences.mapD((preferences) => diff --git a/src/Logic/State/UserSettingsMetaTagging.ts b/src/Logic/State/UserSettingsMetaTagging.ts index 33a5ae85b..6e568c5c3 100644 --- a/src/Logic/State/UserSettingsMetaTagging.ts +++ b/src/Logic/State/UserSettingsMetaTagging.ts @@ -1,14 +1,42 @@ 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' - } -} \ No newline at end of file + 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" + } +} diff --git a/src/Logic/Web/AndroidPolyfill.ts b/src/Logic/Web/AndroidPolyfill.ts index f3193eeae..275b27226 100644 --- a/src/Logic/Web/AndroidPolyfill.ts +++ b/src/Logic/Web/AndroidPolyfill.ts @@ -7,7 +7,9 @@ import { Store, UIEventSource } from "../UIEventSource" import { OsmConnection } from "../Osm/OsmConnection" export interface DatabridgePlugin { - request(options: { key: string }): Promise<{ value: T }>; + request(options: { + key: string + }): Promise<{ value: T }> } const DatabridgePluginSingleton = registerPlugin("Databridge", { @@ -28,17 +30,25 @@ export class AndroidPolyfill { private static readonly databridgePlugin: DatabridgePlugin = DatabridgePluginSingleton private static readonly _inAndroid: UIEventSource = new UIEventSource(false) public static readonly inAndroid: Store = AndroidPolyfill._inAndroid - private static readonly _geolocationPermission: UIEventSource<"granted" | "denied" | "prompt"> = new UIEventSource("prompt") - public static readonly geolocationPermission: Store<"granted" | "denied" | "prompt"> = this._geolocationPermission + private static readonly _geolocationPermission: UIEventSource<"granted" | "denied" | "prompt"> = + new UIEventSource("prompt") + public static readonly geolocationPermission: Store<"granted" | "denied" | "prompt"> = + this._geolocationPermission /** * Registers 'navigator.' * @private */ private static backfillGeolocation(databridgePlugin: DatabridgePlugin) { - const src = UIEventSource.FromPromise(databridgePlugin.request({ key: "location:has-permission" })) - src.addCallbackAndRunD(permission => { - console.log("> Checking geopermission gave: ", JSON.stringify(permission), permission.value) + const src = UIEventSource.FromPromise( + databridgePlugin.request({ key: "location:has-permission" }) + ) + src.addCallbackAndRunD((permission) => { + console.log( + "> Checking geopermission gave: ", + JSON.stringify(permission), + permission.value + ) const granted = permission.value === "true" AndroidPolyfill._geolocationPermission.set(granted ? "granted" : "denied") }) @@ -61,17 +71,25 @@ export class AndroidPolyfill { } public static async requestLoginCodes() { - const result = await DatabridgePluginSingleton.request<{ oauth_token: string }>({ key: "request:login" }) + const result = await DatabridgePluginSingleton.request<{ oauth_token: string }>({ + key: "request:login", + }) const token: string = result.value.oauth_token - console.log("AndroidPolyfill: received oauth_token; trying to pass them to the oauth lib", token) + console.log( + "AndroidPolyfill: received oauth_token; trying to pass them to the oauth lib", + token + ) return token } - public static onBackButton(callback: () => boolean, options: { - returnToIndex: Store - }) { + public static onBackButton( + callback: () => boolean, + options: { + returnToIndex: Store + } + ) { console.log("Registering back button callback", callback) - DatabridgePluginSingleton.request({ key: "backbutton" }).then(ev => { + DatabridgePluginSingleton.request({ key: "backbutton" }).then((ev) => { console.log("AndroidPolyfill: received backbutton: ", ev) if (ev === null) { // Probably in web environment @@ -88,28 +106,38 @@ export class AndroidPolyfill { window.location.href = "/" } }) - } - public static watchLocation(writeInto: UIEventSource, callback: (location) => void) { + public static watchLocation( + writeInto: UIEventSource, + callback: (location) => void + ) { DatabridgePluginSingleton.request({ key: "location:watch", - }).then((l: { - value: { latitude: number, longitude: number, accuraccy: number, altidude: number, heading: number, speed:number } - }) => { - // example l: {"value":{"latitude":51.0618627,"longitude":3.730468566666667,"accuracy":2.0393495559692383,"altitude":46.408,"heading":168.2969970703125}} - console.log("Received location from Android:", JSON.stringify(l)) - const loc = l.value - writeInto.set({ - latitude: loc.latitude, - longitude: loc.longitude, - heading: loc.heading, - accuracy: loc.accuraccy, - altitude: loc.altidude, - altitudeAccuracy: undefined, - speed: loc.speed, - }) - }) + }).then( + (l: { + value: { + latitude: number + longitude: number + accuraccy: number + altidude: number + heading: number + speed: number + } + }) => { + // example l: {"value":{"latitude":51.0618627,"longitude":3.730468566666667,"accuracy":2.0393495559692383,"altitude":46.408,"heading":168.2969970703125}} + console.log("Received location from Android:", JSON.stringify(l)) + const loc = l.value + writeInto.set({ + latitude: loc.latitude, + longitude: loc.longitude, + heading: loc.heading, + accuracy: loc.accuraccy, + altitude: loc.altidude, + altitudeAccuracy: undefined, + speed: loc.speed, + }) + } + ) } } - diff --git a/src/Logic/Web/CommunityIndex.ts b/src/Logic/Web/CommunityIndex.ts index bb0dc1476..c1d30e956 100644 --- a/src/Logic/Web/CommunityIndex.ts +++ b/src/Logic/Web/CommunityIndex.ts @@ -2,22 +2,21 @@ * Various tools and types to work with the community index (https://openstreetmap.community/; https://github.com/osmlab/osm-community-index) */ - export interface CommunityResource { /** * A unique identifier for the resource * "pattern": "^[-_.A-Za-z0-9]+$" */ - id: string, + id: string /** * Type of community resource (thus: platform) */ - type: string, + type: string /** * included and excluded locations for this item * See location-conflation documentation for compatible values: https://github.com/rapideditor/location-conflation#readme */ - locationSet?, + locationSet? /** Array of ISO-639-1 (2 letter) or ISO-639-3 (3 letter) codes in lowercase * */ @@ -27,7 +26,5 @@ export interface CommunityResource { */ account?: string - resolved?: { url: string, name: string, description: string } & Record - + resolved?: { url: string; name: string; description: string } & Record } - diff --git a/src/Logic/Web/ThemeViewStateHashActor.ts b/src/Logic/Web/ThemeViewStateHashActor.ts index 18aff49ea..ff63a21b1 100644 --- a/src/Logic/Web/ThemeViewStateHashActor.ts +++ b/src/Logic/Web/ThemeViewStateHashActor.ts @@ -36,14 +36,14 @@ export default class ThemeViewStateHashActor { * */ constructor(state: { - featureSwitches: {featureSwitchBackToThemeOverview: Store} - indexedFeatures: IndexedFeatureSource, - selectedElement: UIEventSource, - guistate: MenuState, + featureSwitches: { featureSwitchBackToThemeOverview: Store } + indexedFeatures: IndexedFeatureSource + selectedElement: UIEventSource + guistate: MenuState }) { this._state = state AndroidPolyfill.onBackButton(() => this.back(), { - returnToIndex: state.featureSwitches.featureSwitchBackToThemeOverview + returnToIndex: state.featureSwitches.featureSwitchBackToThemeOverview, }) const hashOnLoad = Hash.hash.data @@ -81,7 +81,6 @@ export default class ThemeViewStateHashActor { // When all is done, set the hash. This must happen last to give the code above correct info this.setHash() - } /** diff --git a/src/Models/ThemeConfig/TagRenderingConfig.ts b/src/Models/ThemeConfig/TagRenderingConfig.ts index 5843cd2f1..c524f4ed6 100644 --- a/src/Models/ThemeConfig/TagRenderingConfig.ts +++ b/src/Models/ThemeConfig/TagRenderingConfig.ts @@ -129,8 +129,8 @@ export default class TagRenderingConfig { this.id ) } - if(json.labels && !Array.isArray( json.labels)){ - throw (`Invalid labels at ${context}: labels should be a list of strings, but got a ${typeof json.labels}`) + if (json.labels && !Array.isArray(json.labels)) { + throw `Invalid labels at ${context}: labels should be a list of strings, but got a ${typeof json.labels}` } this.labels = json.labels ?? [] diff --git a/src/Models/ThemeViewState/WithSpecialLayers.ts b/src/Models/ThemeViewState/WithSpecialLayers.ts index 97ddb070e..ea0af40f1 100644 --- a/src/Models/ThemeViewState/WithSpecialLayers.ts +++ b/src/Models/ThemeViewState/WithSpecialLayers.ts @@ -18,7 +18,7 @@ import { Store, UIEventSource } from "../../Logic/UIEventSource" import NearbyFeatureSource from "../../Logic/FeatureSource/Sources/NearbyFeatureSource" import { SummaryTileSource, - SummaryTileSourceRewriter + SummaryTileSourceRewriter, } from "../../Logic/FeatureSource/TiledFeatureSource/SummaryTileSource" import { ShowDataLayerOptions } from "../../UI/Map/ShowDataLayerOptions" @@ -94,10 +94,7 @@ export class WithSpecialLayers extends WithChangesState { const maxzoom = Math.min(...normalLayers.map((l) => l.minzoom)) const layers = this.theme.layers.filter( - (l) => - !Constants.isPriviliged(l) && - l.source.geojsonSource === undefined && - l.doCount + (l) => !Constants.isPriviliged(l) && l.source.geojsonSource === undefined && l.doCount ) if (!Constants.SummaryServer || layers.length === 0) { return undefined diff --git a/src/Models/TileRange.ts b/src/Models/TileRange.ts index 31890210d..90c805997 100644 --- a/src/Models/TileRange.ts +++ b/src/Models/TileRange.ts @@ -81,12 +81,12 @@ export class Tiles { return [z, x, index % factor] } - static asGeojson(index: number): Feature; - static asGeojson(x: number, y: number, z: number): Feature; + static asGeojson(index: number): Feature + static asGeojson(x: number, y: number, z: number): Feature 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() diff --git a/src/UI/AllThemesGui.svelte b/src/UI/AllThemesGui.svelte index 9c0701163..ca745216b 100644 --- a/src/UI/AllThemesGui.svelte +++ b/src/UI/AllThemesGui.svelte @@ -107,13 +107,16 @@ } }) - AndroidPolyfill.onBackButton((() => { - if(searchIsFocussed.data){ - searchIsFocussed.set(false) - return true - } - return false - }), {returnToIndex: new ImmutableStore(false)}) + AndroidPolyfill.onBackButton( + () => { + if (searchIsFocussed.data) { + searchIsFocussed.set(false) + return true + } + return false + }, + { returnToIndex: new ImmutableStore(false) } + ) /** * Opens the first search candidate @@ -228,11 +231,19 @@ - + - + diff --git a/src/UI/Base/DirectionIndicator.svelte b/src/UI/Base/DirectionIndicator.svelte index 895898421..9eb2c52d4 100644 --- a/src/UI/Base/DirectionIndicator.svelte +++ b/src/UI/Base/DirectionIndicator.svelte @@ -149,7 +149,7 @@ >
@@ -161,7 +161,7 @@
{#if $bearingFromGps !== undefined} -
+
{ console.log("OnClose") dispatch("close") @@ -38,8 +38,8 @@
-
- dispatch("close")} /> +
+ dispatch("close")} />
diff --git a/src/UI/Base/Loading.svelte b/src/UI/Base/Loading.svelte index 7c0c14b99..5a787642c 100644 --- a/src/UI/Base/Loading.svelte +++ b/src/UI/Base/Loading.svelte @@ -6,7 +6,7 @@
-
+
diff --git a/src/UI/Base/LoginToggle.svelte b/src/UI/Base/LoginToggle.svelte index c2d6119b7..661e8403c 100644 --- a/src/UI/Base/LoginToggle.svelte +++ b/src/UI/Base/LoginToggle.svelte @@ -47,7 +47,7 @@ {#if !hiddenFail}
-
+
diff --git a/src/UI/Base/ModalRight.svelte b/src/UI/Base/ModalRight.svelte index 3d8eceb41..88bf3f1a4 100644 --- a/src/UI/Base/ModalRight.svelte +++ b/src/UI/Base/ModalRight.svelte @@ -11,7 +11,7 @@