Merge develop

This commit is contained in:
Pieter Vander Vennet 2023-03-15 14:29:53 +01:00
commit e67d740769
719 changed files with 30508 additions and 15682 deletions

4
.gitignore vendored
View file

@ -6,7 +6,7 @@ scratch
assets/editor-layer-index.json
assets/generated/*
assets/generated/images/*
/*.webmanifest
public/*.webmanifest
/*.html
!/index.html
!/customGenerator.html
@ -36,3 +36,5 @@ service-worker.js
# Built Visual Studio Code Extensions
*.vsix
public/*.webmanifest
public/assets/generated/

1
.nvmrc Normal file
View file

@ -0,0 +1 @@
nodejs 16.9.1

View file

@ -1,4 +1,6 @@
{
"semi": false,
"printWidth": 100
"printWidth": 100,
"plugins": ["prettier-plugin-svelte"],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
}

View file

@ -2,6 +2,8 @@
"recommendations": [
"esbenp.prettier-vscode",
"eamodio.gitlens",
"GitHub.vscode-pull-request-github"
"GitHub.vscode-pull-request-github",
"svelte.svelte-vscode",
"bradlc.vscode-tailwindcss"
]
}

18
.vscode/settings.json vendored
View file

@ -1,21 +1,21 @@
{
"json.schemas": [
{
"fileMatch": [
"/assets/layers/*/*.json",
"!/assets/layers/*/license_info.json"
],
"fileMatch": ["/assets/layers/*/*.json", "!/assets/layers/*/license_info.json"],
"url": "./Docs/Schemas/LayerConfigJson.schema.json"
},
{
"fileMatch": [
"/assets/themes/*/*.json",
"!/assets/themes/*/license_info.json"
],
"fileMatch": ["/assets/themes/*/*.json", "!/assets/themes/*/license_info.json"],
"url": "./Docs/Schemas/LayoutConfigJson.schema.json"
}
],
"editor.tabSize": 2,
"files.autoSave": "onFocusChange",
"search.useIgnoreFiles": true
"search.useIgnoreFiles": true,
"css.lint.unknownAtRules": "ignore",
"scss.lint.unknownAtRules": "ignore",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[svelte]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}

View file

@ -1,290 +1,52 @@
import * as known_themes from "../assets/generated/known_layers_and_themes.json"
import known_themes from "../assets/generated/known_themes.json"
import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"
import LayerConfig from "../Models/ThemeConfig/LayerConfig"
import BaseUIElement from "../UI/BaseUIElement"
import Combine from "../UI/Base/Combine"
import Title from "../UI/Base/Title"
import List from "../UI/Base/List"
import DependencyCalculator from "../Models/ThemeConfig/DependencyCalculator"
import Constants from "../Models/Constants"
import { Utils } from "../Utils"
import Link from "../UI/Base/Link"
import { LayoutConfigJson } from "../Models/ThemeConfig/Json/LayoutConfigJson"
import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson"
export class AllKnownLayouts {
public static allKnownLayouts: Map<string, LayoutConfig> = AllKnownLayouts.AllLayouts()
public static layoutsList: LayoutConfig[] = AllKnownLayouts.GenerateOrderedList(
AllKnownLayouts.allKnownLayouts
)
// Must be below the list...
private static sharedLayers: Map<string, LayerConfig> = AllKnownLayouts.getSharedLayers()
public static AllPublicLayers(options?: {
includeInlineLayers: true | boolean
}): LayerConfig[] {
const allLayers: LayerConfig[] = []
const seendIds = new Set<string>()
AllKnownLayouts.sharedLayers.forEach((layer, key) => {
seendIds.add(key)
allLayers.push(layer)
})
if (options?.includeInlineLayers ?? true) {
const publicLayouts = AllKnownLayouts.layoutsList.filter((l) => !l.hideFromOverview)
for (const layout of publicLayouts) {
if (layout.hideFromOverview) {
continue
}
for (const layer of layout.layers) {
if (seendIds.has(layer.id)) {
continue
}
seendIds.add(layer.id)
allLayers.push(layer)
}
}
}
return allLayers
}
/**
* Returns all themes which use the given layer, reverse sorted by minzoom. This sort maximizes the chances that the layer is prominently featured on the first theme
/**
* Somewhat of a dictionary, which lazily parses needed themes
*/
public static themesUsingLayer(id: string, publicOnly = true): LayoutConfig[] {
const themes = AllKnownLayouts.layoutsList
.filter((l) => !(publicOnly && l.hideFromOverview) && l.id !== "personal")
.map((theme) => ({
theme,
minzoom: theme.layers.find((layer) => layer.id === id)?.minzoom,
}))
.filter((obj) => obj.minzoom !== undefined)
themes.sort((th0, th1) => th1.minzoom - th0.minzoom)
return themes.map((th) => th.theme)
}
/**
* Generates documentation for the layers.
* Inline layers are included (if the theme is public)
* @param callback
* @constructor
*/
public static GenOverviewsForSingleLayer(
callback: (layer: LayerConfig, element: BaseUIElement, inlineSource: string) => void
): void {
const allLayers: LayerConfig[] = Array.from(AllKnownLayouts.sharedLayers.values()).filter(
(layer) => Constants.priviliged_layers.indexOf(layer.id) < 0
)
const builtinLayerIds: Set<string> = new Set<string>()
allLayers.forEach((l) => builtinLayerIds.add(l.id))
const inlineLayers = new Map<string, string>()
for (const layout of Array.from(AllKnownLayouts.allKnownLayouts.values())) {
if (layout.hideFromOverview) {
continue
}
for (const layer of layout.layers) {
if (Constants.priviliged_layers.indexOf(layer.id) >= 0) {
continue
}
if (builtinLayerIds.has(layer.id)) {
continue
}
if (layer.source.geojsonSource !== undefined) {
// Not an OSM-source
continue
}
allLayers.push(layer)
builtinLayerIds.add(layer.id)
inlineLayers.set(layer.id, layout.id)
}
}
const themesPerLayer = new Map<string, string[]>()
for (const layout of Array.from(AllKnownLayouts.allKnownLayouts.values())) {
if (layout.hideFromOverview) {
continue
}
for (const layer of layout.layers) {
if (!builtinLayerIds.has(layer.id)) {
// This is an inline layer
continue
}
if (!themesPerLayer.has(layer.id)) {
themesPerLayer.set(layer.id, [])
}
themesPerLayer.get(layer.id).push(layout.id)
}
}
// Determine the cross-dependencies
const layerIsNeededBy: Map<string, string[]> = new Map<string, string[]>()
for (const layer of allLayers) {
for (const dep of DependencyCalculator.getLayerDependencies(layer)) {
const dependency = dep.neededLayer
if (!layerIsNeededBy.has(dependency)) {
layerIsNeededBy.set(dependency, [])
}
layerIsNeededBy.get(dependency).push(layer.id)
}
}
allLayers.forEach((layer) => {
const element = layer.GenerateDocumentation(
themesPerLayer.get(layer.id),
layerIsNeededBy,
DependencyCalculator.getLayerDependencies(layer)
)
callback(layer, element, inlineLayers.get(layer.id))
})
}
/**
* Generates the documentation for the layers overview page
* @constructor
*/
public static GenLayerOverviewText(): BaseUIElement {
for (const id of Constants.priviliged_layers) {
if (!AllKnownLayouts.sharedLayers.has(id)) {
throw "Priviliged layer definition not found: " + id
}
}
const allLayers: LayerConfig[] = Array.from(AllKnownLayouts.sharedLayers.values()).filter(
(layer) => Constants.priviliged_layers.indexOf(layer.id) < 0
)
const builtinLayerIds: Set<string> = new Set<string>()
allLayers.forEach((l) => builtinLayerIds.add(l.id))
const themesPerLayer = new Map<string, string[]>()
for (const layout of Array.from(AllKnownLayouts.allKnownLayouts.values())) {
for (const layer of layout.layers) {
if (!builtinLayerIds.has(layer.id)) {
continue
}
if (!themesPerLayer.has(layer.id)) {
themesPerLayer.set(layer.id, [])
}
themesPerLayer.get(layer.id).push(layout.id)
}
}
// Determine the cross-dependencies
const layerIsNeededBy: Map<string, string[]> = new Map<string, string[]>()
for (const layer of allLayers) {
for (const dep of DependencyCalculator.getLayerDependencies(layer)) {
const dependency = dep.neededLayer
if (!layerIsNeededBy.has(dependency)) {
layerIsNeededBy.set(dependency, [])
}
layerIsNeededBy.get(dependency).push(layer.id)
}
}
return new Combine([
new Title("Special and other useful layers", 1),
"MapComplete has a few data layers available in the theme which have special properties through builtin-hooks. Furthermore, there are some normal layers (which are built from normal Theme-config files) but are so general that they get a mention here.",
new Title("Priviliged layers", 1),
new List(Constants.priviliged_layers.map((id) => "[" + id + "](#" + id + ")")),
...Constants.priviliged_layers
.map((id) => AllKnownLayouts.sharedLayers.get(id))
.map((l) =>
l.GenerateDocumentation(
themesPerLayer.get(l.id),
layerIsNeededBy,
DependencyCalculator.getLayerDependencies(l),
Constants.added_by_default.indexOf(l.id) >= 0,
Constants.no_include.indexOf(l.id) < 0
)
),
new Title("Normal layers", 1),
"The following layers are included in MapComplete:",
new List(
Array.from(AllKnownLayouts.sharedLayers.keys()).map(
(id) => new Link(id, "./Layers/" + id + ".md")
)
),
])
}
public static GenerateDocumentationForTheme(theme: LayoutConfig): BaseUIElement {
return new Combine([
new Title(new Combine([theme.title, "(", theme.id + ")"]), 2),
theme.description,
"This theme contains the following layers:",
new List(
theme.layers
.filter((l) => !l.id.startsWith("note_import_"))
.map((l) => new Link(l.id, "../Layers/" + l.id + ".md"))
),
"Available languages:",
new List(theme.language.filter((ln) => ln !== "_context")),
]).SetClass("flex flex-col")
}
public static getSharedLayers(): Map<string, LayerConfig> {
const sharedLayers = new Map<string, LayerConfig>()
for (const layer of known_themes["layers"]) {
try {
// @ts-ignore
const parsed = new LayerConfig(layer, "shared_layers")
sharedLayers.set(layer.id, parsed)
} catch (e) {
if (!Utils.runningFromConsole) {
console.error(
"CRITICAL: Could not parse a layer configuration!",
layer.id,
" due to",
e
)
}
}
}
return sharedLayers
}
public static getSharedLayersConfigs(): Map<string, LayerConfigJson> {
const sharedLayers = new Map<string, LayerConfigJson>()
for (const layer of known_themes["layers"]) {
// @ts-ignore
sharedLayers.set(layer.id, layer)
}
return sharedLayers
}
private static GenerateOrderedList(allKnownLayouts: Map<string, LayoutConfig>): LayoutConfig[] {
const list = []
allKnownLayouts.forEach((layout) => {
list.push(layout)
})
return list
}
private static AllLayouts(): Map<string, LayoutConfig> {
const dict: Map<string, LayoutConfig> = new Map()
export class AllKnownLayoutsLazy {
private readonly dict: Map<string, { data: LayoutConfig } | { func: () => LayoutConfig }> =
new Map()
constructor() {
for (const layoutConfigJson of known_themes["themes"]) {
this.dict.set(layoutConfigJson.id, {
func: () => {
const layout = new LayoutConfig(<LayoutConfigJson>layoutConfigJson, true)
dict.set(layout.id, layout)
for (let i = 0; i < layout.layers.length; i++) {
let layer = layout.layers[i]
if (typeof layer === "string") {
layer = AllKnownLayouts.sharedLayers.get(layer)
layout.layers[i] = layer
if (layer === undefined) {
console.log("Defined layers are ", AllKnownLayouts.sharedLayers.keys())
throw `Layer ${layer} was not found or defined - probably a type was made`
throw "Layer " + layer + " was not expanded in " + layout.id
}
}
return layout
},
})
}
}
return dict
public get(key: string): LayoutConfig {
const thunk = this.dict.get(key)
if (thunk === undefined) {
return undefined
}
if (thunk["data"]) {
return thunk["data"]
}
const layout = thunk["func"]()
this.dict.set(key, { data: layout })
return layout
}
public keys() {
return this.dict.keys()
}
public values() {
return Array.from(this.keys()).map((k) => this.get(k))
}
}
export class AllKnownLayouts {
public static allKnownLayouts: AllKnownLayoutsLazy = new AllKnownLayoutsLazy()
}

View file

@ -0,0 +1,69 @@
import LayerConfig from "../Models/ThemeConfig/LayerConfig"
import { Utils } from "../Utils"
import known_themes from "../assets/generated/known_layers.json"
import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson"
import { ALL } from "dns"
import { AllKnownLayouts } from "./AllKnownLayouts"
export class AllSharedLayers {
public static sharedLayers: Map<string, LayerConfig> = AllSharedLayers.getSharedLayers()
public static getSharedLayersConfigs(): Map<string, LayerConfigJson> {
const sharedLayers = new Map<string, LayerConfigJson>()
for (const layer of known_themes.layers) {
// @ts-ignore
sharedLayers.set(layer.id, layer)
}
return sharedLayers
}
private static getSharedLayers(): Map<string, LayerConfig> {
const sharedLayers = new Map<string, LayerConfig>()
for (const layer of known_themes.layers) {
try {
// @ts-ignore
const parsed = new LayerConfig(layer, "shared_layers")
sharedLayers.set(layer.id, parsed)
} catch (e) {
if (!Utils.runningFromConsole) {
console.error(
"CRITICAL: Could not parse a layer configuration!",
layer.id,
" due to",
e
)
}
}
}
return sharedLayers
}
public static AllPublicLayers(options?: {
includeInlineLayers: true | boolean
}): LayerConfig[] {
const allLayers: LayerConfig[] = []
const seendIds = new Set<string>()
AllSharedLayers.sharedLayers.forEach((layer, key) => {
seendIds.add(key)
allLayers.push(layer)
})
if (options?.includeInlineLayers ?? true) {
const publicLayouts = Array.from(AllKnownLayouts.allKnownLayouts.values()).filter(
(l) => !l.hideFromOverview
)
for (const layout of publicLayouts) {
if (layout.hideFromOverview) {
continue
}
for (const layer of layout.layers) {
if (seendIds.has(layer.id)) {
continue
}
seendIds.add(layer.id)
allLayers.push(layer)
}
}
}
return allLayers
}
}

View file

@ -1,5 +1,4 @@
import * as questions from "../assets/tagRenderings/questions.json"
import * as icons from "../assets/tagRenderings/icons.json"
import questions from "../assets/tagRenderings/questions.json"
import { Utils } from "../Utils"
import TagRenderingConfig from "../Models/ThemeConfig/TagRenderingConfig"
import { TagRenderingConfigJson } from "../Models/ThemeConfig/Json/TagRenderingConfigJson"
@ -14,11 +13,9 @@ export default class SharedTagRenderings {
SharedTagRenderings.generatedSharedFields()
public static SharedTagRenderingJson: Map<string, TagRenderingConfigJson> =
SharedTagRenderings.generatedSharedFieldsJsons()
public static SharedIcons: Map<string, TagRenderingConfig> =
SharedTagRenderings.generatedSharedFields(true)
private static generatedSharedFields(iconsOnly = false): Map<string, TagRenderingConfig> {
const configJsons = SharedTagRenderings.generatedSharedFieldsJsons(iconsOnly)
private static generatedSharedFields(): Map<string, TagRenderingConfig> {
const configJsons = SharedTagRenderings.generatedSharedFieldsJsons()
const d = new Map<string, TagRenderingConfig>()
for (const key of Array.from(configJsons.keys())) {
try {
@ -31,7 +28,7 @@ export default class SharedTagRenderings {
console.error(
"BUG: could not parse",
key,
" from questions.json or icons.json - this error happened during the build step of the SharedTagRenderings",
" from questions.json - this error happened during the build step of the SharedTagRenderings",
e
)
}
@ -40,25 +37,15 @@ export default class SharedTagRenderings {
return d
}
private static generatedSharedFieldsJsons(
iconsOnly = false
): Map<string, TagRenderingConfigJson> {
private static generatedSharedFieldsJsons(): Map<string, TagRenderingConfigJson> {
const dict = new Map<string, TagRenderingConfigJson>()
if (!iconsOnly) {
for (const key in questions) {
if (key === "id") {
continue
}
dict.set(key, <TagRenderingConfigJson>questions[key])
}
}
for (const key in icons) {
if (key === "id") {
continue
}
dict.set(key, <TagRenderingConfigJson>icons[key])
}
dict.forEach((value, key) => {
if (key === "id") {

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
Index of builtin TagRendering
===============================
@ -48,13 +48,13 @@
+ [questions](#questions)
+ [export_as_gpx](#export_as_gpx)
+ [export_as_geojson](#export_as_geojson)
+ [{upload_to_osm()}](#{upload_to_osm()})
+ [minimap](#minimap)
+ [payment-options-split](#payment-options-split)
+ [denominations-coins](#denominations-coins)
+ [denominations-notes](#denominations-notes)
+ [id_presets.shop_types](#id_presetsshop_types)
+ [school.capacity](#schoolcapacity)
+ [school.gender](#schoolgender)
+ [payment-options-split](#payment-options-split)
+ [denominations-coins](#denominations-coins)
+ [toilet.toilets-type](#toilettoilets-type)
+ [toilet.toilets-changing-table](#toilettoilets-changing-table)
+ [toilet.toilet-changing_table:location](#toilettoilet-changing_table:location)
@ -101,6 +101,7 @@
- climbing_area
- climbing_gym
- climbing_route
- clock
- crossings
- defibrillator
- dentist
@ -112,6 +113,7 @@
- extinguisher
- fire_station
- fitness_centre
- fitness_station
- food
- ghost_bike
- governments
@ -128,6 +130,7 @@
- parcel_lockers
- parking
- parking_spaces
- parking_ticket_machine
- pharmacy
- physiotherapist
- picnic_table
@ -156,6 +159,7 @@
- viewpoint
- village_green
- waste_basket
- waste_disposal
- windturbine
@ -739,17 +743,6 @@
- gps_track
### {upload_to_osm()}
- gps_track
@ -766,6 +759,43 @@
### payment-options-split
- parking_ticket_machine
- ticket_machine
- toilet
### denominations-coins
- parking_ticket_machine
- ticket_machine
### denominations-notes
- parking_ticket_machine
- ticket_machine
### id_presets.shop_types
@ -799,29 +829,6 @@
### payment-options-split
- ticket_machine
- toilet
### denominations-coins
- ticket_machine
### toilet.toilets-type

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
Special and other useful layers
=================================
@ -27,7 +27,7 @@
+ [Privacy notice](#privacy-notice)
+ [export_as_gpx](#export_as_gpx)
+ [export_as_geojson](#export_as_geojson)
+ [uploadtoosm](#uploadtoosm)
+ [upload_to_osm](#upload_to_osm)
+ [minimap](#minimap)
+ [delete](#delete)
1. [type_node](#type_node)
@ -349,7 +349,7 @@ This tagrendering has no question and is thus read-only
### uploadtoosm
### upload_to_osm
@ -946,6 +946,7 @@ The following layers are included in MapComplete:
- [climbing_gym](./Layers/climbing_gym.md)
- [climbing_opportunity](./Layers/climbing_opportunity.md)
- [climbing_route](./Layers/climbing_route.md)
- [clock](./Layers/clock.md)
- [cluster_style](./Layers/cluster_style.md)
- [conflation](./Layers/conflation.md)
- [crab_address](./Layers/crab_address.md)
@ -978,6 +979,7 @@ The following layers are included in MapComplete:
- [hospital](./Layers/hospital.md)
- [hotel](./Layers/hotel.md)
- [hydrant](./Layers/hydrant.md)
- [icons](./Layers/icons.md)
- [id_presets](./Layers/id_presets.md)
- [import_candidate](./Layers/import_candidate.md)
- [indoors](./Layers/indoors.md)
@ -998,6 +1000,7 @@ The following layers are included in MapComplete:
- [parcel_lockers](./Layers/parcel_lockers.md)
- [parking](./Layers/parking.md)
- [parking_spaces](./Layers/parking_spaces.md)
- [parking_ticket_machine](./Layers/parking_ticket_machine.md)
- [pedestrian_path](./Layers/pedestrian_path.md)
- [pharmacy](./Layers/pharmacy.md)
- [physiotherapist](./Layers/physiotherapist.md)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
Builtin questions
===================
@ -20,7 +20,6 @@ The following items can be easily reused in your layers
+ [minimap](#minimap)
+ [phone](#phone)
+ [osmlink](#osmlink)
+ [wikipedialink](#wikipedialink)
+ [email](#email)
+ [website](#website)
+ [wheelchair-access](#wheelchair-access)
@ -34,6 +33,7 @@ The following items can be easily reused in your layers
+ [payment-options-split](#payment-options-split)
+ [payment-options-advanced](#payment-options-advanced)
+ [denominations-coins](#denominations-coins)
+ [denominations-notes](#denominations-notes)
+ [last_edit](#last_edit)
+ [all_tags](#all_tags)
+ [multilevels](#multilevels)
@ -43,13 +43,6 @@ The following items can be easily reused in your layers
+ [internet](#internet)
+ [internet-fee](#internet-fee)
+ [internet-ssid](#internet-ssid)
+ [default](#default)
+ [defaults](#defaults)
+ [isOpen](#isopen)
+ [phonelink](#phonelink)
+ [emaillink](#emaillink)
+ [smokingicon](#smokingicon)
+ [sharelink](#sharelink)
@ -158,29 +151,13 @@ What is the phone number of {title()}?
<a href='https://openstreetmap.org/{id}' target='_blank'><img alt='on osm' textmode='🗺️' src='./assets/svg/osm-logo-us.svg'/></a>
<a href='https://openstreetmap.org/{id}' target='_blank'><img src='./assets/svg/osm-logo-us.svg'/></a>
*Read-only tagrendering*
-
- <a href='{_backend}/{id}' target='_blank'><img src='./assets/svg/osm-logo-us.svg'/></a>
### wikipedialink
<a href='https://wikipedia.org/wiki/{wikipedia}' target='_blank'><img src='./assets/svg/wikipedia.svg' textmode='📖' alt='Wikipedia'/></a>
*Read-only tagrendering*
- <a href='https://www.wikidata.org/wiki/{wikidata}' target='_blank'><img src='./assets/svg/wikidata.svg' alt='WD'/></a>
- <span class='alert'>Uploading...</alert>
@ -253,7 +230,7 @@ Are dogs allowed in this business?
{description}
Is there still something relevant you couldn't give in the previous questions? Add it here.<br/><span style='font-size: small'>Don't repeat already stated facts</span>
Is there still something relevant you couldn't give in the previous questions? Add it here.
@ -382,6 +359,25 @@ What coins can you use to pay here?
### denominations-notes
what notes can you use to pay here?
- 5 euro notes are accepted
- 10 euro notes are accepted
- 20 euro notes are accepted
- 50 euro notes are accepted
- 100 euro notes are accepted
- 200 euro notes are accepted
- 500 euro notes are accepted
### last_edit
@ -514,80 +510,4 @@ What is the network name for the wireless internet access?
- Telekom
### default
*Read-only tagrendering*
### defaults
*Read-only tagrendering*
### isOpen
*Read-only tagrendering*
- clock:#0f0;ring:#0f0
- circle:#f00;clock:#fff
- clock:#ff0;ring:#ff0
- circle:#f0f;clock:#fff
### phonelink
<a href='tel:{phone}'><img textmode='📞' alt='phone' src='./assets/tagRenderings/phone.svg'/></a>
*Read-only tagrendering*
### emaillink
<a href='mailto:{email}'><img textmode='✉️' alt='email' src='./assets/tagRenderings/send_email.svg'/></a>
*Read-only tagrendering*
### smokingicon
*Read-only tagrendering*
- <img textmode='🚭️' alt='no-smoking' src='./assets/tagRenderings/no_smoking.svg'/>
- <img textmode='🚬️' alt='smoking-allowed' src='./assets/tagRenderings/smoking.svg'/>
### sharelink
{share_link()}
*Read-only tagrendering*
This document is autogenerated from [Customizations/SharedTagRenderings.ts](https://github.com/pietervdvn/MapComplete/blob/develop/Customizations/SharedTagRenderings.ts), [assets/tagRenderings/questions.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/tagRenderings/questions.json)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
Metatags
==========
@ -23,6 +23,7 @@
+ [sidewalk:left, sidewalk:right, generic_key:left:property, generic_key:right:property](#sidewalkleft,-sidewalk:right,-generic_key:left:property,-generic_key:right:property)
+ [_geometry:type](#_geometrytype)
+ [_level](#_level)
+ [_referencing_ways](#_referencing_ways)
+ [distanceTo](#distanceto)
+ [overlapWith](#overlapwith)
+ [enclosingFeatures](#enclosingfeatures)
@ -191,6 +192,16 @@ Extract the 'level'-tag into a normalized, ';'-separated value
### _referencing_ways
_referencing_ways contains - for a node - which ways use this this node as point in their geometry.
This is a lazy metatag and is only calculated when needed
Calculating tags with Javascript
----------------------------------

View file

@ -24,26 +24,27 @@ the switch ;) ). If you are using Visual Studio Code you can use
a [WSL Remote](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) window, or use the
Devcontainer (see more details later).
You need at least 3Gb available to run MapComplete.
You need at least 3Gb RAM available to run MapComplete, but you'll preferably have 8GB of free RAM available.
To develop and build MapComplete, you
0. Make a fork and clone the repository. (We recommend a shallow clone with `git clone --filter=blob:none <repo>`)
1. Install `python3` if you do not have it already
- On linux: `sudo apt install python3`
- On windows: find the latest download on the [Python Releases for Windows page](https://www.python.org/downloads/windows/)
2. Install the nodejs version specified in [/.tool-versions](/.tool-versions)
- On linux: install npm first `sudo apt install npm`, then install `n` using npm: ` npm install -g n`, which can
then install node with `n install <node-version>`. You can [use asdf to manage your runtime versions](https://asdf-vm.com/).
- Windows: install nodeJS: https://nodejs.org/en/download/
3. Run `npm run init` which …
- runs `npm install`
1. Install `python3` if you do not have it already - On linux: `sudo apt install python3`
2. Install `nvm` to easily install node:
- `wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash`
- Restart your terminal
- Run `nvm install` and `nvm use` to install and use the correct version of node. (_Note: nvm might complain that the relevant version is not yet installed. It'll have it installed only for the current user account but not system-wide - which is fine)
4. Run `npm run init` (including **run**, not ~~`npm init`~~)which …
- runs `npm ci` for you
- generates some additional dependencies and files
4. Run `npm run start` to host a local testversion at http://localhost:1234/index.html
5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
- does various housekeeping and setup. This can take a few minutes the first time as some pngs need to be created
5. Run `npm run start` to host a local testversion at http://localhost:1234/
6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (
e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
The previous instructions were tested on 2023-03-09 on a Ubuntu 22.04 machine
Development using Windows
------------------------

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
Hotkeys
=========

View file

@ -0,0 +1,136 @@
# Integrating MapRoulette
[MapRoulette](https://www.maproulette.org/) is a website which has challenges. A challenge is a collection of _microtasks_, i.e. mapping
tasks which can be solved in a few minutes.
A perfect example of this is to setup such a challenge to e.g. import new points. [Important: always follow the import guidelines if you want to import data.](https://wiki.openstreetmap.org/wiki/Import/Guidelines)
(Another approach to set up a guided import is to create a map note for every point with the [import helper](https://mapcomplete.osm.be/import_helper). This however litters the map notes and will upset mappers if used with to much points. However, this flow is easier to setup as no changes to theme files are needed, nor is a maproulette-account needed)
## The API
**Most of the heavy lifting is done in [layer `maproulette-challenge`](./Docs/Layers/maproulette_challenge.md). Extend this layer with your needs.**
The API is shortly discussed here for future reference only.
There is an API-endpoint at `https://maproulette.org/api/v2/tasks/box/{x_min}/{y_min}/{x_max}/{y_max}` which can be used
to query _all_ tasks in a bbox and returns this as geojson. Hint:
use [the maproulette theme in debug mode](https://mapcomplete.osm.be/maproulette?debug=true) to inspect all properties.
To view the overview a single challenge, visit `https://maproulette.org/browse/challenges/<challenge-id>` with your
browser.
The API endpoint for a single challenge is `https://maproulette.org/api/v2/challenge/view/<challenge-id>` which returns a
geojson.
## Displaying MapRoulette data in MapComplete
As you'll probably want to link MapComplete to your challenge, reuse [maproulette_challenge](Docs/Layers/maproulette_challenge.md).
It has a basic framework already to load the tags.
Of course, interacting with the tasks is the next step.
### Detecting nearby features
You can use [`calculatedTags`](./Docs/CalculatedTags.md) to add a small piece of code to e.g. detect nearby entities.
The following example is to match hotels:
```
"calculatedTags": [
"_closest_osm_hotel=feat.closest('hotel')?.properties?.id",
"_closest_osm_hotel_distance=feat.distanceTo(feat.properties._closest_osm_hotel)",
"_has_closeby_feature=Number(feat.properties._closest_osm_hotel_distance) < 50 ? 'yes' : 'no'"
],
```
This can be used to decide if tags should be applied on an existing object or a new point should be created.
### Creating a new point based on a maproulette challenge (Guided import)
**Requirement**: the MapRoulette task should have `tags` added.
One can add `import`-button in the featureInfoBox ([documentation here](./Docs/SpecialRenderings.md#importbutton)).
Note that the import button has support for MapRoulette and is able to close the task if the property containing the maproulette-id is given:
```json
{
"id": "import-button",
"render": {
"special": {
"type": "import_button",
"targetLayer": "<the layer in which the point should appear afterwards>",
"tags": "tags", -- should stay 'tags'
"maproulette_id": "mr_taskId", -- important to get the task closed
"text": {
"en": "Import this point" -- or a nice message
},
"icon": "./assets/svg/addSmall.svg", -- optional, feel free to change
"location_picker": "photo", -- optional, background layer to pinpoint the hotel
}
}
}
```
### Applying tags to already existing features
For this, [the `tag_apply`-button can be used](./Docs/SpecialRenderings.md#tagapply).
The following example uses the calculated tags `_has_closeby_feature` and `_closest_osm_hotel`. These were added by a small extra script using `calculatedTagss`.
```json
{
"id": "tag-apply-button",
"condition": "_has_closeby_feature=yes", -- don't show if no feature to add to
"render": {
"special": {
"type": "tag_apply",
"tags_to_apply": "$tags", -- note the '$', property containing the tags
"id_of_object_to_apply_this_one": "_closest_osm_hotel" -- id of the feature to add those tags to
"message": {
"en": "Add all the suggested tags"
},
"image": "./assets/svg/addSmall.svg"
}
}
}
```
### Changing the status of the task
The easiest way is to reuse a tagrendering from the [Maproulette-layer](./Docs/Layers/maproulette.md) (_not_ the `maproulette-challenge`-layer!), such as [`maproulette.mark_fixed`](./Docs/Layers/maproulette.md#markfixed),[`maproulette.mark_duplicate`](./Docs/Layers/maproulette.md#markduplicate),[`maproulette.mark_too_hard`](./Docs/Layers/maproulette.md#marktoohard).
In the background, these use the special visualisation [`maproulette_set_status`](./Docs/SpecialRenderings.md#maproulettesetstatus) - which allows to apply different status codes or different messages/icons.
## Creating a maproulette challenge
A challenge can be created on https://maproulette.org/admin/projects
This can be done with a geojson-file (or by other means).
MapRoulette works as a geojson-store with status fields added. As such, you have a bit of freedom in creating the data, but an **id** field is mandatory. A **name** tag is recommended
To setup a guided import, add a `tags`-field with tags formatted in such a way that they are compatible with the [import-button](./Docs/SpecialRenderings.md#specifying-which-tags-to-copy-or-add)
(The following example is not tested and might be wrong.)
```
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {"type": "Point", "coordinates": [1.234, 5.678]},
"properties": {
"id": ...
"tags": "foo=bar;name=xyz",
}
}
]
}
```

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
address
=========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
all_streets
=============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
ambulancestation
==================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
artwork
=========
@ -378,7 +378,7 @@ This tagrendering has labels `bench-questions`
The question is *Does this bench have an inscription?<div class='subtle text-lg'>E.g. on a mounted plaque, in the backrest, ...</div>*
The question is *Does this bench have an inscription?*
This rendering asks information about the property [inscription](https://wiki.openstreetmap.org/wiki/Key:inscription)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
atm
=====

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bank
======

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
banks_with_atm
================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
barrier
=========
@ -100,6 +100,8 @@ The question is *Can a bicycle go past this barrier?*
- *A cyclist can not go past this.* corresponds with `bicycle=no`
This tagrendering is only visible in the popup if the following condition is met: `_referencing_ways~.+`
### barrier_type
@ -171,6 +173,8 @@ This is rendered with `Maximum width: {maxwidth:physical} m`
This tagrendering is only visible in the popup if the following condition is met: `cycle_barrier!=double&cycle_barrier!=triple&_referencing_ways~.+`
### Space between barrier (cyclebarrier)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bench
=======
@ -225,7 +225,7 @@ This tagrendering has labels `bench-questions`
The question is *Does this bench have an inscription?<div class='subtle text-lg'>E.g. on a mounted plaque, in the backrest, ...</div>*
The question is *Does this bench have an inscription?*
This rendering asks information about the property [inscription](https://wiki.openstreetmap.org/wiki/Key:inscription)
@ -248,7 +248,7 @@ This tagrendering has labels `bench-questions`
The question is *Does this bench have an artistic element?<div class='subtle text-lg'>E.g. it has an integrated painting, statue or other non-trivial, creative work</div>*
The question is *Does this bench have an artistic element?*

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bench_at_pt
=============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bicycle_library
=================
@ -214,7 +214,7 @@ The question is *Who can loan bicycles here?*
The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.<br/><span style='font-size: small'>Don't repeat already stated facts</span>*
The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.*
This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bicycle_rental
================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bicycle_rental_non_docking
============================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bicycle_tube_vending_machine
==============================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bike_cafe
===========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bike_cleaning
===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bike_parking
==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bike_repair_station
=====================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bike_shop
===========
@ -40,10 +40,10 @@ Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle' target='_blank'>bicycle</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dbicycle_rental' target='_blank'>bicycle_rental</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports' target='_blank'>sports</a>&service:bicycle:retail!=no&service:bicycle:repair!=no&<a href='https://wiki.openstreetmap.org/wiki/Key:sport' target='_blank'>sport</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:sport%3Dbicycle' target='_blank'>bicycle</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:sport' target='_blank'>sport</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:sport%3Dcycling' target='_blank'>cycling</a>|
- <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle' target='_blank'>bicycle</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports' target='_blank'>sports</a>&service:bicycle:retail!=no&service:bicycle:repair!=no&<a href='https://wiki.openstreetmap.org/wiki/Key:sport' target='_blank'>sport</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:sport%3Dbicycle' target='_blank'>bicycle</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:sport' target='_blank'>sport</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:sport%3Dcycling' target='_blank'>cycling</a>|
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22shop%22%3D%22bicycle%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22amenity%22%3D%22bicycle_rental%22%5D%5B!%22network%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B%22sport%22%3D%22bicycle%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B%22sport%22%3D%22cycling%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B!%22sport%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22shop%22%3D%22bicycle%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B%22sport%22%3D%22bicycle%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B%22sport%22%3D%22cycling%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B!%22sport%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
@ -518,7 +518,7 @@ This is rendered with `Using the cleaning service costs {service:bicycle:cleani
The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.<br/><span style='font-size: small'>Don't repeat already stated facts</span>*
The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.*
This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bike_themed_object
====================
@ -85,7 +85,7 @@ This tagrendering has no question and is thus read-only
The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.<br/><span style='font-size: small'>Don't repeat already stated facts</span>*
The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.*
This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
binocular
===========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
birdhide
==========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
cafe_pub
==========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
car_rental
============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
caravansites
==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
charging_station
==================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
charging_station_ebikes
=========================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
climbing
==========
@ -184,7 +184,7 @@ The question is *Is sport climbing possible here on fixed anchors?*
The question is *Is traditional climbing possible here (using own gear e.g. chocks)?*
The question is *Is traditional climbing possible here?*

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
climbing_area
===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
climbing_club
===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
climbing_gym
==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
climbing_opportunity
======================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
climbing_route
================
@ -153,7 +153,7 @@ This is rendered with `This route has {climbing:bolts} bolts <div class='subtle
The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.<br/><span style='font-size: small'>Don't repeat already stated facts</span>*
The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.*
This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description)

232
Docs/Layers/clock.md Normal file
View file

@ -0,0 +1,232 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
clock
=======
<img src='https://mapcomplete.osm.be/./assets/layers/clock/clock.svg' height="100px">
Layer with public clocks
- This layer is shown at zoomlevel **13** and higher
- This layer will automatically load [walls_and_buildings](./walls_and_buildings.md) into the layout as it depends on it: a preset snaps to this layer (presets[1])
#### Themes using this layer
- [clock](https://mapcomplete.osm.be/clock)
- [personal](https://mapcomplete.osm.be/personal)
Basic tags for this layer
---------------------------
Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dclock' target='_blank'>clock</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22amenity%22%3D%22clock%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%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
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/support#values) [support](https://wiki.openstreetmap.org/wiki/Key:support) | Multiple choice | [pole](https://wiki.openstreetmap.org/wiki/Tag:support%3Dpole) [wall_mounted](https://wiki.openstreetmap.org/wiki/Tag:support%3Dwall_mounted) [billboard](https://wiki.openstreetmap.org/wiki/Tag:support%3Dbillboard) [ground](https://wiki.openstreetmap.org/wiki/Tag:support%3Dground)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/display#values) [display](https://wiki.openstreetmap.org/wiki/Key:display) | Multiple choice | [analog](https://wiki.openstreetmap.org/wiki/Tag:display%3Danalog) [digital](https://wiki.openstreetmap.org/wiki/Tag:display%3Ddigital) [sundial](https://wiki.openstreetmap.org/wiki/Tag:display%3Dsundial) [unorthodox](https://wiki.openstreetmap.org/wiki/Tag:display%3Dunorthodox)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/visibility#values) [visibility](https://wiki.openstreetmap.org/wiki/Key:visibility) | Multiple choice | [house](https://wiki.openstreetmap.org/wiki/Tag:visibility%3Dhouse) [street](https://wiki.openstreetmap.org/wiki/Tag:visibility%3Dstreet) [area](https://wiki.openstreetmap.org/wiki/Tag:visibility%3Darea)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/date#values) [date](https://wiki.openstreetmap.org/wiki/Key:date) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:date%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:date%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/thermometer#values) [thermometer](https://wiki.openstreetmap.org/wiki/Key:thermometer) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:thermometer%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:thermometer%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/barometer#values) [barometer](https://wiki.openstreetmap.org/wiki/Key:barometer) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:barometer%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:barometer%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/hygrometer#values) [hygrometer](https://wiki.openstreetmap.org/wiki/Key:hygrometer) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:hygrometer%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:hygrometer%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/faces#values) [faces](https://wiki.openstreetmap.org/wiki/Key:faces) | [pnat](../SpecialInputElements.md#pnat) | [1](https://wiki.openstreetmap.org/wiki/Tag:faces%3D1) [2](https://wiki.openstreetmap.org/wiki/Tag:faces%3D2) [4](https://wiki.openstreetmap.org/wiki/Tag:faces%3D4)
### images
This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata`
This tagrendering has no question and is thus read-only
### support
The question is *In what way is the clock mounted?*
- *This clock is mounted on a pole* corresponds with `support=pole`
- *This clock is mounted on a wall* corresponds with `support=wall_mounted`
- *This clock is part of a billboard* corresponds with `support=billboard`
- *This clock is on the ground* corresponds with `support=ground`
### display
The question is *How does this clock display the time?*
- *This clock displays the time with hands* corresponds with `display=analog`
- *This clock displays the time with digits* corresponds with `display=digital`
- *This clock displays the time with a sundial* corresponds with `display=sundial`
- *This clock displays the time in a non-standard way, e.g using binary, water or something else* corresponds with `display=unorthodox`
### visibility
The question is *How visible is this clock?*
- *This clock is visible from about 5 meters away (small wall-mounted clock)* corresponds with `visibility=house`
- *This clock is visible from about 20 meters away (medium size billboard clock)* corresponds with `visibility=street`
- *This clock is visible from more than 20 meters away (church clock)* corresponds with `visibility=area`
### date
The question is *Does this clock also display the date?*
- *This clock also displays the date* corresponds with `date=yes`
- *This clock does not display the date* corresponds with `date=no`
- *This clock does probably not display the date* corresponds with ``
- This option cannot be chosen as answer
### thermometer
The question is *Does this clock also display the temperature?*
- *This clock also displays the temperature* corresponds with `thermometer=yes`
- *This clock does not display the temperature* corresponds with `thermometer=no`
- *This clock does probably not display the temperature* corresponds with ``
- This option cannot be chosen as answer
### barometer
The question is *Does this clock also display the air pressure?*
- *This clock also displays the air pressure* corresponds with `barometer=yes`
- *This clock does not display the air pressure* corresponds with `barometer=no`
- *This clock does probably not display the air pressure* corresponds with ``
- This option cannot be chosen as answer
### hygrometer
The question is *Does this clock also display the humidity?*
- *This clock also displays the humidity* corresponds with `hygrometer=yes`
- *This clock does not display the humidity* corresponds with `hygrometer=no`
- *This clock does probably not display the humidity* corresponds with ``
- This option cannot be chosen as answer
### faces
The question is *How many faces does this clock have?*
This rendering asks information about the property [faces](https://wiki.openstreetmap.org/wiki/Key:faces)
This is rendered with `This clock has {faces} faces`
- *This clock has one face* corresponds with `faces=1`
- *This clock has two faces* corresponds with `faces=2`
- *This clock has four faces* corresponds with `faces=4`
This document is autogenerated from [assets/layers/clock/clock.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/clock/clock.json)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
cluster_style
===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
crab_address
==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
crossings
===========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
cultural_places_without_etymology
===================================
@ -106,7 +106,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *What is this object named after?<br/><span class='subtle'>This might be written on the street name sign</span>*
The question is *What is this object named after?*
This rendering asks information about the property [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
cycleways_and_roads
=====================
@ -287,7 +287,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *What is the carriage width of this road (in meters)?<br/><span class='subtle'>This is measured curb to curb and thus includes the width of parallell parking lanes</span>*
The question is *What is the carriage width of this road (in meters)?*
This rendering asks information about the property [width:carriageway](https://wiki.openstreetmap.org/wiki/Key:width:carriageway)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
defibrillator
===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
dentist
=========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
doctors
=========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
dogfoodb
==========
@ -503,7 +503,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *If you bring your own container (such as a cooking pot and small pots), is it used to package your order?<br/>*
The question is *If you bring your own container (such as a cooking pot and small pots), is it used to package your order?*

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
dogpark
=========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
dogshop
=========
@ -418,7 +418,7 @@ The question is *What paper formats does this shop offer?*
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:service:print:A0' target='_blank'>service:print:A0</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:print:A0%3Dno' target='_blank'>no</a>
This tagrendering is only visible in the popup if the following condition is met: `shop~^(.*copyshop.*)$|shop~^(.*stationary.*)$|service:print=yes`
This tagrendering is only visible in the popup if the following condition is met: `shop~^(.*copyshop.*)$|shop~^(.*stationery.*)$|service:print=yes`

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
drinking_water
================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
dumpstations
==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
education_institutions_without_etymology
==========================================
@ -106,7 +106,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *What is this object named after?<br/><span class='subtle'>This might be written on the street name sign</span>*
The question is *What is this object named after?*
This rendering asks information about the property [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
elevator
==========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
entrance
==========
@ -140,7 +140,7 @@ The question is *What type of entrance is this?*
The question is *What is the type of this door?<br/><span class='subtle'>Wether or not the door is automated is asked in the next question</span>*
The question is *What is the type of this door?*

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
etymology
===========
@ -106,7 +106,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *What is this object named after?<br/><span class='subtle'>This might be written on the street name sign</span>*
The question is *What is this object named after?*
This rendering asks information about the property [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
extinguisher
==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
facadegardens
===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
fietsstraat
=============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
filters
=========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
fire_station
==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
fitness_centre
================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
fitness_station
=================
@ -68,6 +68,18 @@ attribute | type | values which are supported by this layer
### images
This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata`
This tagrendering has no question and is thus read-only
### name

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
food
======
@ -506,7 +506,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *If you bring your own container (such as a cooking pot and small pots), is it used to package your order?<br/>*
The question is *If you bring your own container (such as a cooking pot and small pots), is it used to package your order?*

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
friture
=========
@ -503,7 +503,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *If you bring your own container (such as a cooking pot and small pots), is it used to package your order?<br/>*
The question is *If you bring your own container (such as a cooking pot and small pots), is it used to package your order?*

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
ghost_bike
============
@ -94,7 +94,7 @@ This tagrendering has no question and is thus read-only
The question is *Whom is remembered by this ghost bike?<span class='question-subtext'><br/>Please respect privacy - only fill out the name if it is widely published or marked on the cycle. Opt to leave out the family name.</span>*
The question is *Whom is remembered by this ghost bike?*
This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
governments
=============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
grass_in_parks
================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
hackerspace
=============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
health_and_social_places_without_etymology
============================================
@ -106,7 +106,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *What is this object named after?<br/><span class='subtle'>This might be written on the street name sign</span>*
The question is *What is this object named after?*
This rendering asks information about the property [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
hospital
==========
@ -41,10 +41,10 @@ Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dhospital' target='_blank'>hospital</a>
- <a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dhospital' target='_blank'>hospital</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dclinic' target='_blank'>clinic</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22amenity%22%3D%22hospital%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22amenity%22%3D%22hospital%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22amenity%22%3D%22clinic%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
@ -62,6 +62,7 @@ this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/amenity#values) [amenity](https://wiki.openstreetmap.org/wiki/Key:amenity) | Multiple choice | [clinic](https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dclinic) [hospital](https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dhospital)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |
@ -83,6 +84,22 @@ This is rendered with `This hospital is called {name}`
### inpatient
The question is *Does this facility admit inpatients?*
- *This is a clinic - patients can not stay overnight* corresponds with `amenity=clinic`
- *This is a hospital - patients can be admitted here for multiple days* corresponds with `amenity=hospital`
### phone

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
hotel
=======

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
hydrant
=========
@ -64,6 +64,7 @@ attribute | type | values which are supported by this layer
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/fire_hydrant:type#values) [fire_hydrant:type](https://wiki.openstreetmap.org/wiki/Key:fire_hydrant:type) | [string](../SpecialInputElements.md#string) | [pillar](https://wiki.openstreetmap.org/wiki/Tag:fire_hydrant:type%3Dpillar) [pipe](https://wiki.openstreetmap.org/wiki/Tag:fire_hydrant:type%3Dpipe) [wall](https://wiki.openstreetmap.org/wiki/Tag:fire_hydrant:type%3Dwall) [underground](https://wiki.openstreetmap.org/wiki/Tag:fire_hydrant:type%3Dunderground)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/emergency#values) [emergency](https://wiki.openstreetmap.org/wiki/Key:emergency) | Multiple choice | [fire_hydrant](https://wiki.openstreetmap.org/wiki/Tag:emergency%3Dfire_hydrant) [](https://wiki.openstreetmap.org/wiki/Tag:emergency%3D) [](https://wiki.openstreetmap.org/wiki/Tag:emergency%3D)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/fire_hydrant:diameter#values) [fire_hydrant:diameter](https://wiki.openstreetmap.org/wiki/Key:fire_hydrant:diameter) | [int](../SpecialInputElements.md#int) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/couplings#values) [couplings](https://wiki.openstreetmap.org/wiki/Key:couplings) | [int](../SpecialInputElements.md#int) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/couplings:type#values) [couplings:type](https://wiki.openstreetmap.org/wiki/Key:couplings:type) | [string](../SpecialInputElements.md#string) | [Storz](https://wiki.openstreetmap.org/wiki/Tag:couplings:type%3DStorz) [UNI](https://wiki.openstreetmap.org/wiki/Tag:couplings:type%3DUNI) [Barcelona](https://wiki.openstreetmap.org/wiki/Tag:couplings:type%3DBarcelona)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/couplings:diameters#values) [couplings:diameters](https://wiki.openstreetmap.org/wiki/Key:couplings:diameters) | [string](../SpecialInputElements.md#string) |
@ -84,8 +85,6 @@ This is rendered with `The hydrant color is {colour}`
- *The hydrant color is unknown.* corresponds with ``
- This option cannot be chosen as answer
- *The hydrant color is yellow.* corresponds with `colour=yellow`
- *The hydrant color is red.* corresponds with `colour=red`
@ -106,8 +105,6 @@ This is rendered with ` Hydrant type: {fire_hydrant:type}`
- *The hydrant type is unknown.* corresponds with ``
- This option cannot be chosen as answer
- *Pillar type.* corresponds with `fire_hydrant:type=pillar`
- *Pipe type.* corresponds with `fire_hydrant:type=pipe`
- *Wall type.* corresponds with `fire_hydrant:type=wall`
@ -147,6 +144,20 @@ This is rendered with `Pipe diameter: {canonical(fire_hydrant:diameter)}`
### hydrant-number-of-couplings
The question is *How many couplings does this fire hydrant have?*
This rendering asks information about the property [couplings](https://wiki.openstreetmap.org/wiki/Key:couplings)
This is rendered with `Number of couplings: {couplings}`
### hydrant-couplings

176
Docs/Layers/icons.md Normal file
View file

@ -0,0 +1,176 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
icons
=======
A layer acting as library for icon-tagrenderings, especially to show as badge next to a POI
- This layer is shown at zoomlevel **0** and higher
- Elements don't have a title set and cannot be toggled nor will they show up in the dashboard. If you import this layer in your theme, override `title` to make this toggleable.
- 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`
Basic tags for this layer
---------------------------
Elements must have the all of following tags to be shown on this layer:
- id~.+
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22id%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%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
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/wikipedia#values) [wikipedia](https://wiki.openstreetmap.org/wiki/Key:wikipedia) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:wikipedia%3D)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/_isOpen#values) [_isOpen](https://wiki.openstreetmap.org/wiki/Key:_isOpen) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:_isOpen%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:_isOpen%3Dno) [](https://wiki.openstreetmap.org/wiki/Tag:_isOpen%3D) [parse_error](https://wiki.openstreetmap.org/wiki/Tag:_isOpen%3Dparse_error)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/smoking#values) [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes)
### wikipedialink
This tagrendering has no question and is thus read-only
- *<a href='https://www.wikidata.org/wiki/{wikidata}' target='_blank'><img src='./assets/svg/wikidata.svg' alt='WD'/></a>* corresponds with ``
This tagrendering is only visible in the popup if the following condition is met: `wikipedia~.+|wikidata~.+`
This tagrendering has labels `defaults`
### isOpen
This tagrendering has no question and is thus read-only
- *clock:#0f0;ring:#0f0* corresponds with `_isOpen=yes`
- *circle:#f00;clock:#fff* corresponds with `_isOpen=no`
- *clock:#ff0;ring:#ff0* corresponds with `opening_hours~.+`
- *circle:#f0f;clock:#fff* corresponds with `_isOpen=parse_error&opening_hours~.+`
This tagrendering has labels `defaults`
### phonelink
This tagrendering has no question and is thus read-only
This tagrendering is only visible in the popup if the following condition is met: `phone~.+`
This tagrendering has labels `defaults`
### emaillink
This tagrendering has no question and is thus read-only
This tagrendering is only visible in the popup if the following condition is met: `email~.+`
This tagrendering has labels `defaults`
### smokingicon
This tagrendering has no question and is thus read-only
- *<img textmode='🚭️' alt='no-smoking' src='./assets/tagRenderings/no_smoking.svg'/>* corresponds with `smoking=no`
- *<img textmode='🚬️' alt='smoking-allowed' src='./assets/tagRenderings/smoking.svg'/>* corresponds with `smoking=yes`
This tagrendering has labels `defaults`
### sharelink
This tagrendering has no question and is thus read-only
This tagrendering has labels `defaults`
### osmlink
This tagrendering has no question and is thus read-only
- ** corresponds with `id~^(.*\/-.*)$`
- *<a href='{_backend}/{id}' target='_blank'><img src='./assets/svg/osm-logo-us.svg'/></a>* corresponds with `_backend~.+`
This tagrendering is only visible in the popup if the following condition is met: `id~^((node|way|relation)\/[0-9]*)$`
This tagrendering has labels `defaults`
This document is autogenerated from [assets/layers/icons/icons.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/icons/icons.json)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
id_presets
============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
indoors
=========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
information_board
===================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
kerbs
=======

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
kindergarten_childcare
========================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
lit_streets
=============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
map
=====

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
maproulette
=============
@ -76,7 +76,7 @@ This tagrendering has no question and is thus read-only
### blurb
### mark_fixed
@ -84,7 +84,25 @@ This tagrendering has no question and is thus read-only
This tagrendering is only visible in the popup if the following condition is met: `blurb~.+`
### mark_duplicate
This tagrendering has no question and is thus read-only
### mark_too_hard
This tagrendering has no question and is thus read-only

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
maproulette_challenge
=======================
@ -7,7 +7,7 @@
<img src='https://mapcomplete.osm.be/./assets/layers/maproulette/logomark.svg' height="100px">
Layer showing tasks of a MapRoulette challenge
Layer showing tasks of a single MapRoulette challenge. This layer is intended to be reused and extended in themes; refer to the documentation on how to do this.
@ -99,18 +99,6 @@ This tagrendering has no question and is thus read-only
### blurb
This tagrendering has no question and is thus read-only
This tagrendering is only visible in the popup if the following condition is met: `blurb~.+`
#### Filters

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
maxspeed
==========

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
named_streets
===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
nature_reserve
================
@ -195,7 +195,7 @@ This is rendered with `<a href='{website}' rel='nofollow noopener noreferrer' t
The question is *Whom is the curator of this nature reserve?<br/><span class='subtle'>Respect privacy - only fill out a name if this is widely published*
The question is *Whom is the curator of this nature reserve?*
This rendering asks information about the property [curator](https://wiki.openstreetmap.org/wiki/Key:curator)
@ -209,7 +209,7 @@ This is rendered with `{curator} is the curator of this nature reserve`
The question is *What email adress can one send to with questions and problems with this nature reserve?<br/><span class='subtle'>Respect privacy - only fill out a personal email address if this is widely published*
The question is *What email adress can one send to with questions and problems with this nature reserve?*
This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email)
@ -223,7 +223,7 @@ This is rendered with `<a href='mailto:{email}' target='_blank'>{email}</a>`
The question is *What phone number can one call to with questions and problems with this nature reserve?<br/><span class='subtle'>Respect privacy - only fill out a personal phone number address if this is widely published*
The question is *What phone number can one call to with questions and problems with this nature reserve?*
This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
observation_tower
===================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
osm_community_index
=====================
@ -15,7 +15,7 @@ A layer showing the OpenStreetMap Communities
- This layer is shown at zoomlevel **0** and higher
- <img src='../warning.svg' height='1rem'/> This layer is loaded from an external source, namely `https://raw.githubusercontent.com/osmlab/osm-community-index/main/dist/completeFeatureCollection.json`
- <img src='../warning.svg' height='1rem'/> This layer is loaded from an external source, namely `https://raw.githubusercontent.com/pietervdvn/MapComplete-data/main/community_index/tile_{z}_{x}_{y}.geojson`

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
parcel_lockers
================

Some files were not shown because too many files have changed in this diff Show more