diff --git a/Docs/Layers/childcare.md b/Docs/Layers/childcare.md
new file mode 100644
index 0000000000..20e85e285e
--- /dev/null
+++ b/Docs/Layers/childcare.md
@@ -0,0 +1,139 @@
+[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
+
+# childcare
+
+Shows kindergartens and preschools. Both are grouped in one layer, as they are regularly confused with each other
+
+ - This layer is shown at zoomlevel **12** 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)
+ - [name](#name)
+ - [website](#website)
+ - [email](#email)
+ - [phone](#phone)
+ - [opening_hours](#opening_hours)
+ - [Opening hours](#opening-hours)
+ - [capacity](#capacity)
+ - [leftover-questions](#leftover-questions)
+ - [move-button](#move-button)
+ - [delete-button](#delete-button)
+ - [lod](#lod)
+5. [Filters](#filters)
+
+## Themes using this layer
+
+ - [education](https://mapcomplete.org/education)
+ - [personal](https://mapcomplete.org/personal)
+
+## Presets
+
+The following options to create new points are included:
+
+ - **a childcare** which has the following tags:amenity=childcare
+
+## Basic tags for this layer
+
+Elements must match the expression **amenity=childcare**
+
+[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22amenity%22%3D%22childcare%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
+
+## Supported attributes
+
+**Warning:**,this quick overview is incomplete,
+
+| attribute | type | values which are supported by this layer |
+-----|-----|----- |
+|
[name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | |
+|
[website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | |
+|
[email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | |
+|
[phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | |
+|
[opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | |
+|
[capacity](https://wiki.openstreetmap.org/wiki/Key:capacity) | [pnat](../SpecialInputElements.md#pnat) | |
+
+### name
+
+The question is `What is the name of this facility?`
+*This facility is named {name}* is shown if `name` is set
+
+### website
+
+The question is `What is the website of {title()}?`
+*{website}* is shown if `website` is set
+
+ -
*{contact:website}* is shown if with contact:website~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels
+`contact`
+
+### email
+
+The question is `What is the email address of {title()}?`
+*{email}* is shown if `email` is set
+
+ -
*{contact:email}* is shown if with contact:email~.+. _This option cannot be chosen as answer_
+ -
*{operator:email}* is shown if with operator:email~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels
+`contact`
+
+### phone
+
+The question is `What is the phone number of {title()}?`
+*{link(&LBRACEphone&RBRACE,tel:&LBRACEphone&RBRACE,,,,)}* is shown if `phone` is set
+
+ -
*{link(&LBRACEcontact:phone&RBRACE,tel:&LBRACEcontact:phone&RBRACE,,,,)}* is shown if with contact:phone~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels
+`contact`
+
+### opening_hours
+
+The question is `When is this childcare opened?`
+*
Opening hours
{opening_hours_table(opening_hours)}* is shown if `opening_hours` is set
+
+ - *Marked as closed for an unspecified time* is shown if with opening_hours=closed. _This option cannot be chosen as answer_
+
+This tagrendering is only visible in the popup if the following condition is met: amenity=childcare
+
+### capacity
+
+The question is `How much kids (at most) can be enrolled here?`
+*This facility has room for {capacity} kids* is shown if `capacity` is set
+
+### leftover-questions
+
+_This tagrendering has no question and is thus read-only_
+*{questions( ,)}*
+
+### move-button
+
+_This tagrendering has no question and is thus read-only_
+*{move_button()}*
+
+### delete-button
+
+_This tagrendering has no question and is thus read-only_
+*{delete_button()}*
+
+### lod
+
+_This tagrendering has no question and is thus read-only_
+*{linked_data_from_website()}*
+
+This tagrendering has labels
+`added_by_default`
+
+## Filters
+
+| id | question | osmTags |
+-----|-----|----- |
+| open_now.0 | Now open | _isOpen=yes |
+
+
+
+This document is autogenerated from [assets/layers/childcare/childcare.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/childcare/childcare.json)
diff --git a/Docs/Layers/dog_toilet.md b/Docs/Layers/dog_toilet.md
new file mode 100644
index 0000000000..66cddbe716
--- /dev/null
+++ b/Docs/Layers/dog_toilet.md
@@ -0,0 +1,73 @@
+[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
+
+# dog_toilet
+
+A dog toilet is a facility designated for dogs to urinate and excrete. This can be a designated, signposted patch of grass, a sand pit or a fenced area.
+
+ - This layer is shown at zoomlevel **13** and higher
+
+## Table of contents
+
+1. [Themes using this layer](#themes-using-this-layer)
+2. [Presets](#presets)
+3. [Basic tags for this layer](#basic-tags-for-this-layer)
+4. [Supported attributes](#supported-attributes)
+ - [images](#images)
+ - [barrier](#barrier)
+ - [leftover-questions](#leftover-questions)
+ - [move-button](#move-button)
+ - [lod](#lod)
+
+## Themes using this layer
+
+ - [personal](https://mapcomplete.org/personal)
+ - [pets](https://mapcomplete.org/pets)
+
+## Presets
+
+The following options to create new points are included:
+
+ - **a dog toilet** which has the following tags:amenity=dog_toilet
+
+## Basic tags for this layer
+
+Elements must match the expression **amenity=dog_toilet**
+
+[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22amenity%22%3D%22dog_toilet%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
+
+## Supported attributes
+
+### 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()}*
+
+### barrier
+
+The question is `Is this dog toilet fenced?`
+
+ - *There is a fence around this dog toilet* is shown if with barrier=fence
+ - *There is a hedge around this dog toilet* is shown if with barrier=hedge
+ - *There is a barrier around this dog toilet* is shown if with barrier=yes
+ - *There is no barrier around this dog toilet* is shown if with not:barrier=fence
+
+### leftover-questions
+
+_This tagrendering has no question and is thus read-only_
+*{questions( ,)}*
+
+### move-button
+
+_This tagrendering has no question and is thus read-only_
+*{move_button()}*
+
+### lod
+
+_This tagrendering has no question and is thus read-only_
+*{linked_data_from_website()}*
+
+This tagrendering has labels
+`added_by_default`
+
+
+This document is autogenerated from [assets/layers/dog_toilet/dog_toilet.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/dog_toilet/dog_toilet.json)
diff --git a/Docs/Layers/food_dog_friendly.md b/Docs/Layers/food_dog_friendly.md
new file mode 100644
index 0000000000..59ba3aca7a
--- /dev/null
+++ b/Docs/Layers/food_dog_friendly.md
@@ -0,0 +1,612 @@
+[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
+
+# food_dog_friendly
+
+This layer is based on [food](../Layers/food.md)
+
+A layer showing restaurants and fast-food amenities (with a special rendering for friteries)
+
+ - This layer is shown at zoomlevel **12** 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)
+ - [images](#images)
+ - [reviews](#reviews)
+ - [Name](#name)
+ - [Fastfood vs restaurant](#fastfood-vs-restaurant)
+ - [opening_hours](#opening_hours)
+ - [Opening hours](#opening-hours)
+ - [website](#website)
+ - [email](#email)
+ - [phone](#phone)
+ - [payment-options](#payment-options)
+ - [repeated](#repeated)
+ - [single_level](#single_level)
+ - [wheelchair-access](#wheelchair-access)
+ - [Cuisine](#cuisine)
+ - [show-menu-image](#show-menu-image)
+ - [add-menu-image](#add-menu-image)
+ - [menu-website](#menu-website)
+ - [Reservation](#reservation)
+ - [Takeaway](#takeaway)
+ - [delivery](#delivery)
+ - [drive-through](#drive-through)
+ - [drive-through-opening_hours](#drive-through-opening_hours)
+ - [Drive-through opening hours](#drive-through-opening-hours)
+ - [Vegetarian (no friture)](#vegetarian-(no-friture))
+ - [Vegan (no friture)](#vegan-(no-friture))
+ - [halal (no friture)](#halal-(no-friture))
+ - [organic (no friture)](#organic-(no-friture))
+ - [friture-vegetarian](#friture-vegetarian)
+ - [friture-vegan](#friture-vegan)
+ - [friture-organic](#friture-organic)
+ - [friture-oil](#friture-oil)
+ - [friture-take-your-container](#friture-take-your-container)
+ - [sugar_free](#sugar_free)
+ - [gluten_free](#gluten_free)
+ - [lactose_free](#lactose_free)
+ - [smoking](#smoking)
+ - [service:electricity](#serviceelectricity)
+ - [seating](#seating)
+ - [dog-access](#dog-access)
+ - [internet](#internet)
+ - [internet-fee](#internet-fee)
+ - [internet-ssid](#internet-ssid)
+ - [leftover-questions](#leftover-questions)
+ - [move-button](#move-button)
+ - [delete-button](#delete-button)
+ - [lod](#lod)
+4. [Filters](#filters)
+
+## Themes using this layer
+
+ - [pets](https://mapcomplete.org/pets)
+
+## Basic tags for this layer
+
+Elements must match **all** of the following expressions:
+
+0. amenity=fast_food | amenity=restaurant
+1. dog=unleashed | dog=leashed | dog=yes
+
+[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22amenity%22%3D%22fast_food%22%5D%5B%22dog%22%3D%22unleashed%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22amenity%22%3D%22fast_food%22%5D%5B%22dog%22%3D%22leashed%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22amenity%22%3D%22fast_food%22%5D%5B%22dog%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22amenity%22%3D%22restaurant%22%5D%5B%22dog%22%3D%22unleashed%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22amenity%22%3D%22restaurant%22%5D%5B%22dog%22%3D%22leashed%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22amenity%22%3D%22restaurant%22%5D%5B%22dog%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 |
+-----|-----|----- |
+|
[name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | |
+|
[amenity](https://wiki.openstreetmap.org/wiki/Key:amenity) | Multiple choice | [fast_food](https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dfast_food) [restaurant](https://wiki.openstreetmap.org/wiki/Tag:amenity%3Drestaurant) |
+|
[opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | |
+|
[website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | |
+|
[email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | |
+|
[phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | |
+|
[level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1) |
+|
[wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) |
+|
[cuisine](https://wiki.openstreetmap.org/wiki/Key:cuisine) | [string](../SpecialInputElements.md#string) | [pizza](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dpizza) [friture](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dfriture) [pasta](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dpasta) [kebab](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dkebab) [sandwich](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dsandwich) [burger](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dburger) [sushi](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dsushi) [coffee](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dcoffee) [italian](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Ditalian) [french](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dfrench) [chinese](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dchinese) [greek](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dgreek) [indian](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dindian) [turkish](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dturkish) [thai](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dthai) [mexican ](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dmexican ) [japanese ](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Djapanese ) [chicken ](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dchicken ) [seafood ](https://wiki.openstreetmap.org/wiki/Tag:cuisine%3Dseafood ) |
+|
[website:menu](https://wiki.openstreetmap.org/wiki/Key:website:menu) | [url](../SpecialInputElements.md#url) | |
+|
[reservation](https://wiki.openstreetmap.org/wiki/Key:reservation) | Multiple choice | [required](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drequired) [recommended](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drecommended) [yes](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dno) |
+|
[takeaway](https://wiki.openstreetmap.org/wiki/Key:takeaway) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dno) |
+|
[delivery](https://wiki.openstreetmap.org/wiki/Key:delivery) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dno) |
+|
[drive_through](https://wiki.openstreetmap.org/wiki/Key:drive_through) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dno) |
+|
[opening_hours:drive_through](https://wiki.openstreetmap.org/wiki/Key:opening_hours:drive_through) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://wiki.openstreetmap.org/wiki/Tag:opening_hours:drive_through%3D) |
+|
[diet:vegetarian](https://wiki.openstreetmap.org/wiki/Key:diet:vegetarian) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Don_demand) |
+|
[diet:vegan](https://wiki.openstreetmap.org/wiki/Key:diet:vegan) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Don_demand) |
+|
[diet:halal](https://wiki.openstreetmap.org/wiki/Key:diet:halal) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Donly) |
+|
[organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) |
+|
[diet:vegetarian](https://wiki.openstreetmap.org/wiki/Key:diet:vegetarian) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dno) |
+|
[diet:vegan](https://wiki.openstreetmap.org/wiki/Key:diet:vegan) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dno) |
+|
[organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) |
+|
[friture:oil](https://wiki.openstreetmap.org/wiki/Key:friture:oil) | Multiple choice | [vegetable](https://wiki.openstreetmap.org/wiki/Tag:friture:oil%3Dvegetable) [animal](https://wiki.openstreetmap.org/wiki/Tag:friture:oil%3Danimal) |
+|
[reusable_packaging:accept](https://wiki.openstreetmap.org/wiki/Key:reusable_packaging:accept) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:reusable_packaging:accept%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:reusable_packaging:accept%3Dno) [only](https://wiki.openstreetmap.org/wiki/Tag:reusable_packaging:accept%3Donly) |
+|
[diet:sugar_free](https://wiki.openstreetmap.org/wiki/Key:diet:sugar_free) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Dno) |
+|
[diet:gluten_free](https://wiki.openstreetmap.org/wiki/Key:diet:gluten_free) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Dno) |
+|
[diet:lactose_free](https://wiki.openstreetmap.org/wiki/Key:diet:lactose_free) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Dno) |
+|
[smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [outside](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Doutside) |
+|
[service:electricity](https://wiki.openstreetmap.org/wiki/Key:service:electricity) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dlimited) [ask](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dask) [no](https://wiki.openstreetmap.org/wiki/Tag:service:electricity%3Dno) |
+|
[dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) |
+|
[internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) |
+|
[internet_access: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) |
+
+### images
+This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images
+_This tagrendering has no question and is thus read-only_
+*{image_carousel()}{image_upload()}*
+
+### reviews
+Shows the reviews module (including the possibility to leave a review)
+_This tagrendering has no question and is thus read-only_
+*{create_review()}{list_reviews()}*
+
+### Name
+
+The question is `What is the name of this business?`
+*The name of this business is {name}* is shown if `name` is set
+
+### Fastfood vs restaurant
+
+The question is `What type of business is this?`
+
+ - *This is a fast-food business, focused on fast service. If seating is available, it is rather limited and functional.* is shown if with amenity=fast_food
+ - *A restaurant, focused on creating a nice experience where one is served at the table* is shown if with amenity=restaurant
+
+### opening_hours
+
+The question is `What are the opening hours of {title()}?`
+*Opening hours
{opening_hours_table(opening_hours)}* is shown if `opening_hours` is set
+
+ - *Marked as closed for an unspecified time* is shown if with opening_hours=closed. _This option cannot be chosen as answer_
+
+### website
+
+The question is `What is the website of {title()}?`
+*{website}* is shown if `website` is set
+
+ -
*{contact:website}* is shown if with contact:website~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels
+`contact`
+
+### email
+
+The question is `What is the email address of {title()}?`
+*{email}* is shown if `email` is set
+
+ -
*{contact:email}* is shown if with contact:email~.+. _This option cannot be chosen as answer_
+ -
*{operator:email}* is shown if with operator:email~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels
+`contact`
+
+### phone
+
+The question is `What is the phone number of {title()}?`
+*{link(&LBRACEphone&RBRACE,tel:&LBRACEphone&RBRACE,,,,)}* is shown if `phone` is set
+
+ -
*{link(&LBRACEcontact:phone&RBRACE,tel:&LBRACEcontact:phone&RBRACE,,,,)}* is shown if with contact:phone~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels
+`contact`
+
+### payment-options
+
+The question is `Which methods of payment are accepted here?`
+
+ -
*Cash is accepted here* is shown if with payment:cash=yes. Unselecting this answer will add payment:cash=no
+ -
*Payment cards are accepted here* is shown if with payment:cards=yes. Unselecting this answer will add payment:cards=no
+ -
*Payment by QR-code is possible here* is shown if with payment:qr_code=yes. Unselecting this answer will add payment:qr_code=no
+
+### repeated
+
+_This tagrendering has no question and is thus read-only_
+*Multiple, identical objects can be found on floors {repeat_on}.*
+
+This tagrendering is only visible in the popup if the following condition is met: repeat_on~.+
+This tagrendering has labels
+`level`
+
+### single_level
+
+The question is `On what level is this feature located?`
+*Located on the {level}th floor* is shown if `level` is set
+
+ - *Located underground* is shown if with location=underground. _This option cannot be chosen as answer_
+ - *Located on the ground floor* is shown if with level=0
+ - *Located on the ground floor* is shown if with level=. _This option cannot be chosen as answer_
+ - *Located on the first floor* is shown if with level=1
+ - *Located on the first basement level* is shown if with level=-1
+
+This tagrendering has labels
+`level`
+
+### wheelchair-access
+
+The question is `Is this place accessible with a wheelchair?`
+
+ - *This place is specially adapted for wheelchair users* is shown if with wheelchair=designated
+ - *This place is easily reachable with a wheelchair* is shown if with wheelchair=yes
+ - *It is possible to reach this place in a wheelchair, but it is not easy* is shown if with wheelchair=limited
+ - *This place is not reachable with a wheelchair* is shown if with wheelchair=no
+
+### Cuisine
+
+The question is `What kind of food is served here?`
+*This place mostly serves {cuisine}* is shown if `cuisine` is set
+
+ -
*Pizzeria* is shown if with cuisine=pizza
+ -
*Friture* is shown if with cuisine=friture
+ -
*Serves mainly pasta* is shown if with cuisine=pasta
+ -
*Kebab shop* is shown if with cuisine=kebab
+ -
*Sandwich shop* is shown if with cuisine=sandwich
+ -
*Burgersrestaurant* is shown if with cuisine=burger
+ -
*Sushi restaurant* is shown if with cuisine=sushi
+ -
*Coffeebar* is shown if with cuisine=coffee
+ -
*Italian restaurant (which serves more than pasta and pizza)* is shown if with cuisine=italian
+ -
*French restaurant* is shown if with cuisine=french
+ -
*Chinese* is shown if with cuisine=chinese
+ -
*Greek* is shown if with cuisine=greek
+ -
*Indian* is shown if with cuisine=indian
+ -
*Turkish restaurant* is shown if with cuisine=turkish
+ -
*Thai restaurant* is shown if with cuisine=thai
+ -
*Mexican dishes are served here* is shown if with cuisine=mexican
+ -
*Japanese dishes are served here* is shown if with cuisine=japanese
+ -
*Chicken based dishes are served here* is shown if with cuisine=chicken
+ -
*Seafood dishes are served here* is shown if with cuisine=seafood
+
+### show-menu-image
+
+_This tagrendering has no question and is thus read-only_
+*{image_carousel(image:menu)}*
+
+### add-menu-image
+
+_This tagrendering has no question and is thus read-only_
+*{image_upload(image:menu,Add an image from the menu,)}*
+
+### menu-website
+
+The question is `On what webpage is the menu published?`
+*{link(Consult the menu,&LBRACEwebsite:menu&RBRACE,,,,)}* is shown if `website:menu` is set
+
+### Reservation
+
+The question is `Is a reservation required for this place?`
+
+ - *A reservation is required at this place* is shown if with reservation=required
+ - *A reservation is not required, but still recommended to make sure you get a table* is shown if with reservation=recommended
+ - *Reservation is possible at this place* is shown if with reservation=yes
+ - *Reservation is not possible at this place* is shown if with reservation=no
+
+### Takeaway
+
+The question is `Does this place offer take-away?`
+
+ - *This is a take-away only business* is shown if with takeaway=only
+ - *Take-away is possible here* is shown if with takeaway=yes
+ - *Take-away is not possible here* is shown if with takeaway=no
+
+### delivery
+
+The question is `Does {title()} deliver food to your home?`
+
+ - *This business does home delivery (possibly via a third party)* is shown if with delivery=yes
+ - *This business does not deliver at home* is shown if with delivery=no
+
+### drive-through
+
+The question is `Does this fast-food restaurant have a drive-through?`
+
+ - *This fast-food restaurant has a drive-through* is shown if with drive_through=yes
+ - *This fast-food restaurant does not have a drive-through* is shown if with drive_through=no
+
+This tagrendering is only visible in the popup if the following condition is met: amenity=fast_food
+
+### drive-through-opening_hours
+
+The question is `What are the opening hours of the drive-through?`
+*Drive-through opening hours
{opening_hours_table(opening_hours:drive_through)}* is shown if `opening_hours:drive_through` is set
+
+ - *The opening hours of the drive-through are the same as the restaurant* is shown if with opening_hours:drive_through=
+
+This tagrendering is only visible in the popup if the following condition is met: drive_through=yes
+
+### Vegetarian (no friture)
+
+The question is `Does this restaurant have a vegetarian option?`
+
+ - *No vegetarian options are available* is shown if with diet:vegetarian=no
+ - *Some vegetarian options are available* is shown if with diet:vegetarian=limited
+ -
*Vegetarian options are available* is shown if with diet:vegetarian=yes
+ -
*All dishes are vegetarian* is shown if with diet:vegetarian=only
+ - *Some dishes might be adapted to a vegetarian version, but this should be demanded* is shown if with diet:vegetarian=on_demand
+
+### Vegan (no friture)
+
+The question is `Does this business serve vegan meals?`
+
+ - *No vegan options available* is shown if with diet:vegan=no
+ - *Some vegan options are available* is shown if with diet:vegan=limited
+ - *Vegan options are available* is shown if with diet:vegan=yes
+ - *All dishes are vegan* is shown if with diet:vegan=only
+ - *Some dishes might be adapted to a vegan version if asked for* is shown if with diet:vegan=on_demand
+
+### halal (no friture)
+
+The question is `Does this restaurant offer a halal menu?`
+
+ - *There are no halal options available* is shown if with diet:halal=no
+ - *There is a small halal menu* is shown if with diet:halal=limited
+ - *There is a halal menu* is shown if with diet:halal=yes
+ - *Only halal options are available* is shown if with diet:halal=only
+
+### organic (no friture)
+
+The question is `Does this restaurant offer organic food?`
+
+ - *There are no organic options available* is shown if with organic=no
+ - *There is an organic menu* is shown if with organic=yes
+ - *Only organic options are available* is shown if with organic=only
+
+### friture-vegetarian
+
+The question is `Does this fries shop have vegetarian snacks?`
+
+ - *Serves only vegetarian snacks and burgers* is shown if with diet:vegetarian=only
+ - *Vegetarian snacks are available* is shown if with diet:vegetarian=yes
+ - *Only a small selection of snacks are vegetarian* is shown if with diet:vegetarian=limited
+ - *No vegetarian snacks are available* is shown if with diet:vegetarian=no
+
+This tagrendering is only visible in the popup if the following condition is met: cuisine=friture
+
+### friture-vegan
+
+The question is `Does this fries shop have vegan snacks?`
+
+ - *Serves only vegan snacks and burgers* is shown if with diet:vegan=only
+ - *Vegan snacks are available* is shown if with diet:vegan=yes
+ - *A small selection of vegan snacks are available* is shown if with diet:vegan=limited
+ - *No vegan snacks are available* is shown if with diet:vegan=no
+
+This tagrendering is only visible in the popup if the following condition is met: cuisine=friture
+
+### friture-organic
+
+The question is `Does this fries shop offer organic snacks?`
+
+ - *Organic snacks are available* is shown if with organic=yes
+ - *No organic snacks are available* is shown if with organic=no
+ - *Only organic snacks are available* is shown if with organic=only
+
+This tagrendering is only visible in the popup if the following condition is met: cuisine=friture
+
+### friture-oil
+
+The question is `Does this fries shop use vegetable or animal oil for cooking?`
+
+ - *The frying is done with vegetable oil* is shown if with friture:oil=vegetable
+ - *The frying is done with animal oil* is shown if with friture:oil=animal
+
+This tagrendering is only visible in the popup if the following condition is met: cuisine=friture
+
+### friture-take-your-container
+
+The question is `If you bring your own container (such as a cooking pot and small pots), is it used to package your order?`
+
+ - *You can bring your own containers to get your order, saving on single-use packaging material and thus waste* is shown if with reusable_packaging:accept=yes
+ - *Bringing your own container is not allowed* is shown if with reusable_packaging:accept=no
+ - *You must bring your own container to order here.* is shown if with reusable_packaging:accept=only
+
+This tagrendering is only visible in the popup if the following condition is met: cuisine=friture
+
+### sugar_free
+
+The question is `Does this shop have a sugar free offering?`
+
+ - *This shop only sells sugar free products* is shown if with diet:sugar_free=only
+ - *This shop has a big sugar free offering* is shown if with diet:sugar_free=yes
+ - *This shop has a limited sugar free offering* is shown if with diet:sugar_free=limited
+ - *This shop has no sugar free offering* is shown if with diet:sugar_free=no
+
+This tagrendering has labels
+`diets`
+
+### gluten_free
+
+The question is `Does this shop have a gluten free offering?`
+
+ -
*This shop only sells gluten free products* is shown if with diet:gluten_free=only
+ -
*This shop has a big gluten free offering* is shown if with diet:gluten_free=yes
+ - *This shop has a limited gluten free offering* is shown if with diet:gluten_free=limited
+ - *This shop has no gluten free offering* is shown if with diet:gluten_free=no
+
+This tagrendering has labels
+`diets`
+
+### lactose_free
+
+The question is `Does {title()} have a lactose-free offering?`
+
+ -
*Only sells lactose free products* is shown if with diet:lactose_free=only
+ -
*Big lactose free offering* is shown if with diet:lactose_free=yes
+ - *Limited lactose free offering* is shown if with diet:lactose_free=limited
+ - *No lactose free offering* is shown if with diet:lactose_free=no
+
+This tagrendering has labels
+`diets`
+
+### smoking
+
+The question is `Is smoking allowed at {title()}?`
+
+ -
*Smoking is allowed* is shown if with smoking=yes
+ -
*Smoking is not allowed* is shown if with smoking=no
+ - *Smoking is allowed outside.* is shown if with smoking=outside
+
+### service:electricity
+
+The question is `Does this amenity have electrical outlets, available to customers when they are inside?`
+
+ - *There are plenty of domestic sockets available to customers seated indoors, where they can charge their electronics* is shown if with service:electricity=yes
+ - *There are a few domestic sockets available to customers seated indoors, where they can charge their electronics* is shown if with service:electricity=limited
+ - *There are no sockets available indoors to customers, but charging might be possible if the staff is asked* is shown if with service:electricity=ask
+ - *There are a no domestic sockets available to customers seated indoors* is shown if with service:electricity=no
+
+### seating
+
+The question is `What kind of seating does {title()} have?`
+
+ -
*This place has outdoor seating* is shown if with outdoor_seating=yes. Unselecting this answer will add outdoor_seating=no
+ - *This place has indoor seating* is shown if with indoor_seating=yes. Unselecting this answer will add indoor_seating=no
+
+### dog-access
+
+The question is `Are dogs allowed in this business?`
+
+ -
*Dogs are allowed* is shown if with dog=yes
+ -
*Dogs are not allowed* is shown if with dog=no
+ -
*Dogs are allowed, but they have to be leashed* is shown if with dog=leashed
+ -
*Dogs are allowed and can run around freely* is shown if with dog=unleashed
+ -
*Dogs are allowed only outside* is shown if with dog=outside
+
+### internet
+
+The question is `Does this place offer internet access?`
+
+ -
*This place offers wireless internet access* is shown if with internet_access=wlan
+ - *This place does not offer internet access* is shown if with internet_access=no
+ - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_
+ -
*This place offers internet access via a terminal or computer* is shown if with internet_access=terminal
+ - *This place offers wired internet access* is shown if with internet_access=wired
+ - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi
+
+This tagrendering has labels
+`internet-all`
+
+### internet-fee
+
+The question is `Is there a fee for internet access?`
+
+ - *There is a fee for the internet access at this place* is shown if with internet_access:fee=yes
+ - *Internet access is free at this place* is shown if with internet_access:fee=no
+ - *Internet access is free at this place, for customers only* is shown if with internet_access:fee=customers
+
+This tagrendering is only visible in the popup if the following condition is met: internet_access!=no & internet_access~.+
+This tagrendering has labels
+`internet-all`
+
+### internet-ssid
+
+The question is `What is the network name for the wireless internet access?`
+*The network name is {internet_access:ssid}* is shown if `internet_access:ssid` is set
+
+ - *Telekom* is shown if with internet_access:ssid=Telekom
+
+This tagrendering is only visible in the popup if the following condition is met: internet_access~^(.*wlan.*)$
+This tagrendering has labels
+`internet-all`
+
+### leftover-questions
+
+_This tagrendering has no question and is thus read-only_
+*{questions( ,)}*
+
+### move-button
+
+_This tagrendering has no question and is thus read-only_
+*{move_button()}*
+
+### delete-button
+
+_This tagrendering has no question and is thus read-only_
+*{delete_button()}*
+
+### lod
+
+_This tagrendering has no question and is thus read-only_
+*{linked_data_from_website()}*
+
+This tagrendering has labels
+`added_by_default`
+
+## Filters
+
+| id | question | osmTags |
+-----|-----|----- |
+| open_now.0 | Now open | _isOpen=yes |
+
+| id | question | osmTags |
+-----|-----|----- |
+| reservation.0 | Reservation not required | reservation=no | reservation=optional | reservation= |
+
+| id | question | osmTags |
+-----|-----|----- |
+| food-category.0 | *Restaurants and fast food businesses* (default) | |
+| food-category.1 | Only fastfood businesses | amenity=fast_food |
+| food-category.2 | Only restaurants | amenity=restaurant |
+
+| id | question | osmTags |
+-----|-----|----- |
+| vegetarian.0 | Has a vegetarian menu | diet:vegetarian=yes | diet:vegetarian=only | diet:vegan=yes | diet:vegan=only |
+
+| id | question | osmTags |
+-----|-----|----- |
+| vegan.0 | Has a vegan menu | diet:vegan=yes | diet:vegan=only |
+
+| id | question | osmTags |
+-----|-----|----- |
+| halal.0 | Has a halal menu | diet:halal=yes | diet:halal=only |
+
+| id | question | osmTags |
+-----|-----|----- |
+| has_organic.0 | Has organic options | organic=yes | organic=only |
+
+| id | question | osmTags |
+-----|-----|----- |
+| sugar_free.0 | Has a sugar-free offering | diet:sugar_free=yes | diet:sugar_free=only | diet:sugar_free=limited |
+
+| id | question | osmTags |
+-----|-----|----- |
+| gluten_free.0 | Has a gluten free offering | diet:gluten_free=yes | diet:gluten_free=only | diet:gluten_free=limited |
+
+| id | question | osmTags |
+-----|-----|----- |
+| lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited |
+
+| id | question | osmTags |
+-----|-----|----- |
+| outdoor_seating.0 | Has outdoor seating | outdoor_seating=yes |
+
+| id | question | osmTags |
+-----|-----|----- |
+| indoor_seating.0 | Has indoor seating | indoor_seating=yes |
+
+| id | question | osmTags |
+-----|-----|----- |
+| accepts_cash.0 | Accepts cash | payment:cash=yes |
+
+| id | question | osmTags |
+-----|-----|----- |
+| accepts_cards.0 | Accepts payment cards | payment:cards=yes |
+
+| id | question | osmTags |
+-----|-----|----- |
+| dogs.0 | *No preference towards dogs* (default) | |
+| dogs.1 | Dogs allowed | dog=unleashed | dog=yes |
+| dogs.2 | No dogs allowed | dog=no |
+
+| id | question | osmTags |
+-----|-----|----- |
+| Cuisine.0 | *What kind of food is served here?* (default) | |
+| Cuisine.1 | Pizzeria | cuisine=pizza |
+| Cuisine.2 | Friture | cuisine=friture |
+| Cuisine.3 | Serves mainly pasta | cuisine=pasta |
+| Cuisine.4 | Kebab shop | cuisine=kebab |
+| Cuisine.5 | Sandwich shop | cuisine=sandwich |
+| Cuisine.6 | Burgersrestaurant | cuisine=burger |
+| Cuisine.7 | Sushi restaurant | cuisine=sushi |
+| Cuisine.8 | Coffeebar | cuisine=coffee |
+| Cuisine.9 | Italian restaurant (which serves more than pasta and pizza) | cuisine=italian |
+| Cuisine.10 | French restaurant | cuisine=french |
+| Cuisine.11 | Chinese | cuisine=chinese |
+| Cuisine.12 | Greek | cuisine=greek |
+| Cuisine.13 | Indian | cuisine=indian |
+| Cuisine.14 | Turkish restaurant | cuisine=turkish |
+| Cuisine.15 | Thai restaurant | cuisine=thai |
+| Cuisine.16 | Mexican dishes are served here | cuisine=mexican |
+| Cuisine.17 | Japanese dishes are served here | cuisine=japanese |
+| Cuisine.18 | Chicken based dishes are served here | cuisine=chicken |
+| Cuisine.19 | Seafood dishes are served here | cuisine=seafood |
+
+| id | question | osmTags |
+-----|-----|----- |
+| has_internet.0 | Offers internet | internet_access=wlan | internet_access=yes | internet_access=wired |
+
+
+
+This document is autogenerated from [assets/themes/pets/pets.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/pets/pets.json)
diff --git a/Docs/Layers/shop_dog_friendly.md b/Docs/Layers/shop_dog_friendly.md
new file mode 100644
index 0000000000..46fe2412c0
--- /dev/null
+++ b/Docs/Layers/shop_dog_friendly.md
@@ -0,0 +1,937 @@
+[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
+
+# shop_dog_friendly
+
+This layer is based on [shops](../Layers/shops.md)
+
+A shop
+
+ - This layer is shown at zoomlevel **15** and higher
+
+## Table of contents
+
+1. [Themes using this layer](#themes-using-this-layer)
+2. [Basic tags for this layer](#basic-tags-for-this-layer)
+3. [Supported attributes](#supported-attributes)
+ - [images](#images)
+ - [reviews](#reviews)
+ - [shops-name](#shops-name)
+ - [shop_types](#shop_types)
+ - [brand](#brand)
+ - [second_hand](#second_hand)
+ - [opening_hours](#opening_hours)
+ - [Opening hours](#opening-hours)
+ - [website](#website)
+ - [email](#email)
+ - [phone](#phone)
+ - [payment-options](#payment-options)
+ - [repeated](#repeated)
+ - [single_level](#single_level)
+ - [copyshop-print-sizes](#copyshop-print-sizes)
+ - [copyshop-binding](#copyshop-binding)
+ - [optometrist_service](#optometrist_service)
+ - [key_cutter](#key_cutter)
+ - [sells_new_bikes](#sells_new_bikes)
+ - [bike_second_hand](#bike_second_hand)
+ - [repairs_bikes](#repairs_bikes)
+ - [bicycle_rental](#bicycle_rental)
+ - [bicycle-types](#bicycle-types)
+ - [rental-capacity-city_bike](#rental-capacity-city_bike)
+ - [rental-capacity-ebike](#rental-capacity-ebike)
+ - [rental-capacity-kid_bike](#rental-capacity-kid_bike)
+ - [rental-capacity-bmx](#rental-capacity-bmx)
+ - [rental-capacity-mtb](#rental-capacity-mtb)
+ - [rental-capacity-bicycle_pannier](#rental-capacity-bicycle_pannier)
+ - [rental-capacity-tandem_bicycle](#rental-capacity-tandem_bicycle)
+ - [bike_pump_service](#bike_pump_service)
+ - [bike_repair_tools](#bike_repair_tools)
+ - [bike_wash](#bike_wash)
+ - [bike_cleaning-service_bicycle_cleaning_charge](#bike_cleaning-service_bicycle_cleaning_charge)
+ - [internet](#internet)
+ - [internet-fee](#internet-fee)
+ - [internet-ssid](#internet-ssid)
+ - [organic](#organic)
+ - [sugar_free](#sugar_free)
+ - [gluten_free](#gluten_free)
+ - [lactose_free](#lactose_free)
+ - [dog-access](#dog-access)
+ - [description](#description)
+ - [leftover-questions](#leftover-questions)
+ - [move-button](#move-button)
+ - [delete-button](#delete-button)
+ - [lod](#lod)
+4. [Filters](#filters)
+
+## Themes using this layer
+
+ - [pets](https://mapcomplete.org/pets)
+
+## Basic tags for this layer
+
+Elements must match **all** of the following expressions:
+
+0. craft=shoe_repair | craft=key_cutter | shop~.+
+1. dog=leashed | dog=yes
+2. shop!=mall
+
+[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22craft%22%3D%22shoe_repair%22%5D%5B%22dog%22%3D%22leashed%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22craft%22%3D%22shoe_repair%22%5D%5B%22dog%22%3D%22yes%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22craft%22%3D%22key_cutter%22%5D%5B%22dog%22%3D%22leashed%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22craft%22%3D%22key_cutter%22%5D%5B%22dog%22%3D%22yes%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%5D%5B%22dog%22%3D%22leashed%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%5D%5B%22dog%22%3D%22yes%22%5D%5B%22shop%22!%3D%22mall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
+
+## Supported attributes
+
+**Warning:**,this quick overview is incomplete,
+
+| attribute | type | values which are supported by this layer |
+-----|-----|----- |
+|
[name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | |
+|
[shop](https://wiki.openstreetmap.org/wiki/Key:shop) | [string](../SpecialInputElements.md#string) | [bicycle_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle_rental) [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [honey](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhoney) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [nuts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnuts) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pasta](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpasta) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [rice](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drice) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) |
+|
[brand](https://wiki.openstreetmap.org/wiki/Key:brand) | [string](../SpecialInputElements.md#string) | |
+|
[second_hand](https://wiki.openstreetmap.org/wiki/Key:second_hand) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:second_hand%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:second_hand%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:second_hand%3Dno) |
+|
[opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | |
+|
[website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | |
+|
[email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | |
+|
[phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | |
+|
[level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1) |
+|
[service:binding](https://wiki.openstreetmap.org/wiki/Key:service:binding) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:binding%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:binding%3Dno) |
+|
[healthcare](https://wiki.openstreetmap.org/wiki/Key:healthcare) | Multiple choice | [optometrist](https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist) [audiologist](https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist) |
+|
[service:bicycle:retail](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:retail) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:retail%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:retail%3Dno) |
+|
[service:bicycle:second_hand](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:second_hand) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Dno) [only](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Donly) |
+|
[service:bicycle:repair](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:repair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Donly_sold) [brand](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dbrand) |
+|
[service:bicycle:rental](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dno) |
+|
[rental](https://wiki.openstreetmap.org/wiki/Key:rental) | [string](../SpecialInputElements.md#string) | [city_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcity_bike) [ebike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Debike) [bmx](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbmx) [mtb](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dmtb) [kid_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dkid_bike) [tandem](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dtandem) [racebike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dracebike) [bike_helmet](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbike_helmet) [cargo_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcargo_bike) |
+|
[capacity:city_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:city_bike) | [pnat](../SpecialInputElements.md#pnat) | |
+|
[capacity:ebike](https://wiki.openstreetmap.org/wiki/Key:capacity:ebike) | [pnat](../SpecialInputElements.md#pnat) | |
+|
[capacity:kid_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:kid_bike) | [pnat](../SpecialInputElements.md#pnat) | |
+|
[capacity:bmx](https://wiki.openstreetmap.org/wiki/Key:capacity:bmx) | [pnat](../SpecialInputElements.md#pnat) | |
+|
[capacity:mtb](https://wiki.openstreetmap.org/wiki/Key:capacity:mtb) | [pnat](../SpecialInputElements.md#pnat) | |
+|
[capacity:bicycle_pannier](https://wiki.openstreetmap.org/wiki/Key:capacity:bicycle_pannier) | [pnat](../SpecialInputElements.md#pnat) | |
+|
[capacity:tandem_bicycle](https://wiki.openstreetmap.org/wiki/Key:capacity:tandem_bicycle) | [pnat](../SpecialInputElements.md#pnat) | |
+|
[service:bicycle:pump](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:pump) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dno) [separate](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dseparate) |
+|
[service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) |
+|
[service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) |
+|
[service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) | |
+|
[internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;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) |
+|
[organic](https://wiki.openstreetmap.org/wiki/Key:organic) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:organic%3Donly) [no](https://wiki.openstreetmap.org/wiki/Tag:organic%3Dno) |
+|
[diet:sugar_free](https://wiki.openstreetmap.org/wiki/Key:diet:sugar_free) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:sugar_free%3Dno) |
+|
[diet:gluten_free](https://wiki.openstreetmap.org/wiki/Key:diet:gluten_free) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:gluten_free%3Dno) |
+|
[diet:lactose_free](https://wiki.openstreetmap.org/wiki/Key:diet:lactose_free) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:diet:lactose_free%3Dno) |
+|
[dog](https://wiki.openstreetmap.org/wiki/Key:dog) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno) [leashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed) [unleashed](https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed) [outside](https://wiki.openstreetmap.org/wiki/Tag:dog%3Doutside) |
+|
[description](https://wiki.openstreetmap.org/wiki/Key:description) | [text](../SpecialInputElements.md#text) | |
+
+### images
+This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images
+_This tagrendering has no question and is thus read-only_
+*{image_carousel()}{image_upload()}*
+
+### reviews
+Shows the reviews module (including the possibility to leave a review)
+_This tagrendering has no question and is thus read-only_
+*{create_review()}{list_reviews()}*
+
+### shops-name
+
+The question is `What is the name of this shop?`
+*This shop is called {name}* is shown if `name` is set
+
+### shop_types
+
+The question is `What kind of shop is this?`
+*This is a {shop}* is shown if `shop` is set
+
+ -
*Bicycle rental shop* is shown if with shop=bicycle_rental
+ -
*Farm Supply Shop* is shown if with shop=agrarian
+ -
*Liquor Store* is shown if with shop=alcohol
+ -
*Anime / Manga Shop* is shown if with shop=anime
+ -
*Antique Shop* is shown if with shop=antiques
+ -
*Appliance Store* is shown if with shop=appliance
+ -
*Art Store* is shown if with shop=art
+ -
*Baby Goods Store* is shown if with shop=baby_goods
+ -
*Bag/Luggage Store* is shown if with shop=bag
+ -
*Bakery* is shown if with shop=bakery
+ -
*Bathroom Furnishing Store* is shown if with shop=bathroom_furnishing
+ -
*Beauty Shop* is shown if with shop=beauty
+ -
*Bedding/Mattress Store* is shown if with shop=bed
+ -
*Beverage Store* is shown if with shop=beverages
+ -
*Bicycle Shop* is shown if with shop=bicycle
+ -
*Boat Store* is shown if with shop=boat
+ -
*Bookmaker* is shown if with shop=bookmaker
+ -
*Bookstore* is shown if with shop=books
+ -
*Brewing Supply Store* is shown if with shop=brewing_supplies
+ -
*Butcher* is shown if with shop=butcher
+ -
*Camera Equipment Store* is shown if with shop=camera
+ - *Candle Shop* is shown if with shop=candles
+ -
*Cannabis Shop* is shown if with shop=cannabis
+ - *Car Dealership* is shown if with shop=car
+ -
*Car Parts Store* is shown if with shop=car_parts
+ -
*Car Repair Shop* is shown if with shop=car_repair
+ -
*RV Dealership* is shown if with shop=caravan
+ -
*Carpet Store* is shown if with shop=carpet
+ -
*Catalog Shop* is shown if with shop=catalogue
+ -
*Charity Store* is shown if with shop=charity
+ -
*Cheese Store* is shown if with shop=cheese
+ - *Drugstore* is shown if with shop=chemist
+ -
*Chocolate Store* is shown if with shop=chocolate
+ -
*Clothing Store* is shown if with shop=clothes
+ -
*Coffee Store* is shown if with shop=coffee
+ - *Collectibles Shop* is shown if with shop=collector
+ -
*Computer Store* is shown if with shop=computer
+ -
*Candy Store* is shown if with shop=confectionery
+ - *Convenience Store* is shown if with shop=convenience
+ -
*Copy Store* is shown if with shop=copyshop
+ -
*Cosmetics Store* is shown if with shop=cosmetics
+ -
*Rural Supplies Store* is shown if with shop=country_store
+ - *Arts & Crafts Store* is shown if with shop=craft
+ -
*Curtain Store* is shown if with shop=curtain
+ -
*Dairy Store* is shown if with shop=dairy
+ -
*Delicatessen* is shown if with shop=deli
+ -
*Department Store* is shown if with shop=department_store
+ -
*DIY Store* is shown if with shop=doityourself
+ -
*Door Shop* is shown if with shop=doors
+ -
*Dry Cleaner* is shown if with shop=dry_cleaning
+ -
*E-Cigarette Shop* is shown if with shop=e-cigarette
+ -
*Electrical Equipment Store* is shown if with shop=electrical
+ -
*Electronics Store* is shown if with shop=electronics
+ -
*Erotic Store* is shown if with shop=erotic
+ -
*Fabric Store* is shown if with shop=fabric
+ - *Produce Stand* is shown if with shop=farm
+ -
*Fashion Accessories Store* is shown if with shop=fashion_accessories
+ -
*Fireplace Store* is shown if with shop=fireplace
+ -
*Fishing Shop* is shown if with shop=fishing
+ -
*Flooring Supply Shop* is shown if with shop=flooring
+ -
*Florist* is shown if with shop=florist
+ -
*Framing Shop* is shown if with shop=frame
+ - *Frozen Food Store* is shown if with shop=frozen_food
+ -
*Fuel Shop* is shown if with shop=fuel
+ -
*Funeral Home* is shown if with shop=funeral_directors
+ -
*Furniture Store* is shown if with shop=furniture
+ -
*Tabletop Game Store* is shown if with shop=games
+ -
*Garden Center* is shown if with shop=garden_centre
+ -
*Bottled Gas Shop* is shown if with shop=gas
+ -
*General Store* is shown if with shop=general
+ -
*Gift Shop* is shown if with shop=gift
+ -
*Greengrocer* is shown if with shop=greengrocer
+ -
*Hairdresser* is shown if with shop=hairdresser
+ -
*Hairdresser Supply Store* is shown if with shop=hairdresser_supply
+ -
*Hardware Store* is shown if with shop=hardware
+ -
*Health Food Store* is shown if with shop=health_food
+ -
*Hearing Aids Store* is shown if with shop=hearing_aids
+ -
*Herbalist* is shown if with shop=herbalist
+ -
*Hifi Store* is shown if with shop=hifi
+ -
*Honey Store* is shown if with shop=honey
+ -
*Household Linen Shop* is shown if with shop=household_linen
+ -
*Houseware Store* is shown if with shop=houseware
+ -
*Hunting Shop* is shown if with shop=hunting
+ -
*Interior Decoration Store* is shown if with shop=interior_decoration
+ -
*Jewelry Store* is shown if with shop=jewelry
+ -
*Kiosk* is shown if with shop=kiosk
+ -
*Kitchen Design Store* is shown if with shop=kitchen
+ -
*Laundry* is shown if with shop=laundry
+ -
*Leather Store* is shown if with shop=leather
+ -
*Lighting Store* is shown if with shop=lighting
+ -
*Locksmith* is shown if with shop=locksmith
+ - *Lottery Shop* is shown if with shop=lottery
+ - *Mall* is shown if with shop=mall
+ -
*Massage Shop* is shown if with shop=massage
+ -
*Medical Supply Store* is shown if with shop=medical_supply
+ -
*Military Surplus Store* is shown if with shop=military_surplus
+ - *Mobile Phone Store* is shown if with shop=mobile_phone
+ -
*Model Shop* is shown if with shop=model
+ -
*Money Lender* is shown if with shop=money_lender
+ -
*Motorcycle Dealership* is shown if with shop=motorcycle
+ -
*Motorcycle Repair Shop* is shown if with shop=motorcycle_repair
+ -
*Music Store* is shown if with shop=music
+ -
*Musical Instrument Store* is shown if with shop=musical_instrument
+ -
*Newsstand* is shown if with shop=newsagent
+ -
*Nutrition Supplements Store* is shown if with shop=nutrition_supplements
+ -
*Nuts Shop* is shown if with shop=nuts
+ -
*Optician* is shown if with shop=optician
+ -
*Outdoors Store* is shown if with shop=outdoor
+ -
*Online Retailer Outpost* is shown if with shop=outpost
+ -
*Paint Store* is shown if with shop=paint
+ -
*Party Supply Store* is shown if with shop=party
+ -
*Pasta Store* is shown if with shop=pasta
+ -
*Pastry Shop* is shown if with shop=pastry
+ -
*Pawnshop* is shown if with shop=pawnbroker
+ -
*Perfume Store* is shown if with shop=perfumery
+ -
*Pet Store* is shown if with shop=pet
+ -
*Pet Groomer* is shown if with shop=pet_grooming
+ -
*Photography Store* is shown if with shop=photo
+ -
*Pottery Store* is shown if with shop=pottery
+ -
*Printer Ink Store* is shown if with shop=printer_ink
+ -
*Psychic* is shown if with shop=psychic
+ -
*Fireworks Store* is shown if with shop=pyrotechnics
+ -
*Radio/Electronic Component Store* is shown if with shop=radiotechnics
+ -
*Religious Store* is shown if with shop=religion
+ -
*Rental Shop* is shown if with shop=rental
+ - *Repair Shop* is shown if with shop=repair
+ -
*Rice Store* is shown if with shop=rice
+ -
*Scuba Diving Shop* is shown if with shop=scuba_diving
+ -
*Seafood Shop* is shown if with shop=seafood
+ -
*Thrift Store* is shown if with shop=second_hand
+ -
*Sewing Supply Shop* is shown if with shop=sewing
+ -
*Shoe Repair Shop* is shown if with shop=shoe_repair
+ -
*Shoe Store* is shown if with shop=shoes
+ -
*Spice Shop* is shown if with shop=spices
+ -
*Sporting Goods Store* is shown if with shop=sports
+ -
*Stationery Store* is shown if with shop=stationery
+ -
*Storage Rental* is shown if with shop=storage_rental
+ -
*Supermarket* is shown if with shop=supermarket
+ - *Pool Supply Store* is shown if with shop=swimming_pool
+ -
*Tailor* is shown if with shop=tailor
+ -
*Tattoo Parlor* is shown if with shop=tattoo
+ -
*Tea Store* is shown if with shop=tea
+ -
*Telecom Retail Store* is shown if with shop=telecommunication
+ - *Ticket Seller* is shown if with shop=ticket
+ -
*Tile Shop* is shown if with shop=tiles
+ -
*Tobacco Shop* is shown if with shop=tobacco
+ -
*Tool Rental* is shown if with shop=tool_hire
+ -
*Toy Store* is shown if with shop=toys
+ -
*Trade Shop* is shown if with shop=trade
+ -
*Travel Agency* is shown if with shop=travel_agency
+ -
*Trophy Shop* is shown if with shop=trophy
+ -
*Tire Store* is shown if with shop=tyres
+ -
*Vacuum Cleaner Store* is shown if with shop=vacuum_cleaner
+ -
*Discount Store* is shown if with shop=variety_store
+ -
*Video Store* is shown if with shop=video
+ -
*Video Game Store* is shown if with shop=video_games
+ -
*Watches Shop* is shown if with shop=watches
+ -
*Drinking Water Shop* is shown if with shop=water
+ - *Watersport/Swim Shop* is shown if with shop=water_sports
+ -
*Weapon Shop* is shown if with shop=weapons
+ -
*Wholesale Store* is shown if with shop=wholesale
+ -
*Wig Shop* is shown if with shop=wigs
+ -
*Window Blind Store* is shown if with shop=window_blind
+ -
*Wine Shop* is shown if with shop=wine
+ -
*This shop is no longer used. It is vacant* is shown if with disused:shop=
+
+This tagrendering has labels
+`description`
+
+### brand
+
+The question is `What is the brand of this shop?`
+*Part of {brand}* is shown if `brand` is set
+
+ - *This shop does not have a specific brand, it is not part of a bigger chain* is shown if with not:brand=yes
+
+### second_hand
+
+The question is `Does this shop sell second-hand items?`
+
+ - *This shop sells second-hand items only* is shown if with second_hand=only
+ - *This shop sells second-hand items along with new items* is shown if with second_hand=yes
+ - *This shop only sells brand-new items* is shown if with second_hand=no
+
+This tagrendering is only visible in the popup if the following condition is met: shop=clothes | shop=books | shop=charity | shop=furniture | shop=mobile_phone | shop=computer | shop=toys
+
+### opening_hours
+
+The question is `What are the opening hours of {title()}?`
+*Opening hours
{opening_hours_table(opening_hours)}* is shown if `opening_hours` is set
+
+ - *Marked as closed for an unspecified time* is shown if with opening_hours=closed. _This option cannot be chosen as answer_
+
+### website
+
+The question is `What is the website of {title()}?`
+*{website}* is shown if `website` is set
+
+ -
*{contact:website}* is shown if with contact:website~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels
+`contact`
+
+### email
+
+The question is `What is the email address of {title()}?`
+*{email}* is shown if `email` is set
+
+ -
*{contact:email}* is shown if with contact:email~.+. _This option cannot be chosen as answer_
+ -
*{operator:email}* is shown if with operator:email~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels
+`contact`
+
+### phone
+
+The question is `What is the phone number of {title()}?`
+*{link(&LBRACEphone&RBRACE,tel:&LBRACEphone&RBRACE,,,,)}* is shown if `phone` is set
+
+ -
*{link(&LBRACEcontact:phone&RBRACE,tel:&LBRACEcontact:phone&RBRACE,,,,)}* is shown if with contact:phone~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels
+`contact`
+
+### payment-options
+
+The question is `Which methods of payment are accepted here?`
+
+ -
*Cash is accepted here* is shown if with payment:cash=yes. Unselecting this answer will add payment:cash=no
+ -
*Payment cards are accepted here* is shown if with payment:cards=yes. Unselecting this answer will add payment:cards=no
+ -
*Payment by QR-code is possible here* is shown if with payment:qr_code=yes. Unselecting this answer will add payment:qr_code=no
+
+### repeated
+
+_This tagrendering has no question and is thus read-only_
+*Multiple, identical objects can be found on floors {repeat_on}.*
+
+This tagrendering is only visible in the popup if the following condition is met: repeat_on~.+
+This tagrendering has labels
+`level`
+
+### single_level
+
+The question is `On what level is this feature located?`
+*Located on the {level}th floor* is shown if `level` is set
+
+ - *Located underground* is shown if with location=underground. _This option cannot be chosen as answer_
+ - *Located on the ground floor* is shown if with level=0
+ - *Located on the ground floor* is shown if with level=. _This option cannot be chosen as answer_
+ - *Located on the first floor* is shown if with level=1
+ - *Located on the first basement level* is shown if with level=-1
+
+This tagrendering has labels
+`level`
+
+### copyshop-print-sizes
+
+The question is `What paper formats does this shop offer?`
+
+ - *This shop can print on papers of size A4* is shown if with service:print:A4=yes. Unselecting this answer will add service:print:A4=no
+ - *This shop can print on papers of size A3* is shown if with service:print:A3=yes. Unselecting this answer will add service:print:A3=no
+ - *This shop can print on papers of size A2* is shown if with service:print:A2=yes. Unselecting this answer will add service:print:A2=no
+ - *This shop can print on papers of size A1* is shown if with service:print:A1=yes. Unselecting this answer will add service:print:A1=no
+ - *This shop can print on papers of size A0* is shown if with service:print:A0=yes. Unselecting this answer will add service:print:A0=no
+
+This tagrendering is only visible in the popup if the following condition is met: service:print=yes | shop~^(.*copyshop.*)$ | shop~^(.*stationery.*)$
+
+### copyshop-binding
+
+The question is `Does this shop offer a binding service?`
+
+ - *This shop binds papers into a booklet* is shown if with service:binding=yes
+ - *This shop does bind books* is shown if with service:binding=no
+
+This tagrendering is only visible in the popup if the following condition is met: service:print=yes | shop~^(.*copyshop.*)$ | shop~^(.*stationery.*)$
+
+### optometrist_service
+
+The question is `Are medical services available here?`
+
+ - *This shop offers eye exams by certified optometrists* is shown if with healthcare=optometrist. Unselecting this answer will add not:healtcare=optometrist
+ - *This shop offers hearing tests by a certified audiologist* is shown if with healthcare=audiologist. Unselecting this answer will add not:healthcare=audiologist
+
+This tagrendering is only visible in the popup if the following condition is met: shop=optician | shop=hearing_aid | shop=medical_supply
+
+### key_cutter
+
+The question is `Does this shop offer key cutting?`
+
+ -
*This shop is also specialized in key cutting* is shown if with craft=key_cutter
+ -
*This shop offers key cutting as a service* is shown if with service:key_cutting=yes
+ - *This shops does not offer key cutting as a service* is shown if with craft= & service:key_cutting=no
+
+This tagrendering is only visible in the popup if the following condition is met: craft=key_cutting | shop=shoe_repair | shop=diy | shop=doityourself | shop=home_improvement | shop=hardware | shop=locksmith | shop=repair | service:key_cutting~.+
+
+### sells_new_bikes
+
+The question is `Does this shop sell bikes?`
+
+ - *This shop sells new bikes* is shown if with service:bicycle:retail=yes
+ - *This shop doesn't sell new bikes* is shown if with service:bicycle:retail=no
+
+This tagrendering is only visible in the popup if the following condition is met: shop=outdoor | shop=sport | shop=sports | shop=diy | shop=doityourself | service:bicycle:retail~.+
+
+### bike_second_hand
+
+The question is `Does this shop sell second-hand bikes?`
+
+ - *This shop sells second-hand bikes* is shown if with service:bicycle:second_hand=yes
+ - *This shop doesn't sell second-hand bikes* is shown if with service:bicycle:second_hand=no
+ - *This shop only sells second-hand bikes* is shown if with service:bicycle:second_hand=only
+
+This tagrendering is only visible in the popup if the following condition is met: shop=bicycle | shop=charity | shop=second_hand | shop=bicycle_repair | service:bicycle:second_hand~.+
+
+### repairs_bikes
+
+The question is `Does this shop repair bikes?`
+
+ - *This shop repairs bikes* is shown if with service:bicycle:repair=yes
+ - *This shop doesn't repair bikes* is shown if with service:bicycle:repair=no
+ - *This shop only repairs bikes bought here* is shown if with service:bicycle:repair=only_sold
+ - *This shop only repairs bikes of a certain brand* is shown if with service:bicycle:repair=brand
+
+This tagrendering is only visible in the popup if the following condition is met: service:bicycle:retail=yes | service:bicycle:second_hand=yes | service:bicycle:second_hand=only | shop=sport | shop=sports | shop=outdoor | shop=bicycle | service:bicycle:repair~.+
+
+### bicycle_rental
+
+The question is `Does this shop rent out bikes?`
+
+ - *This shop rents out bikes* is shown if with service:bicycle:rental=yes
+ - *This shop doesn't rent out bikes* is shown if with service:bicycle:rental=no
+
+This tagrendering is only visible in the popup if the following condition is met: shop=bicycle | shop=sport | shop=sports | shop=bicycle_repair | shop=outdoor | shop=rental | service:bicycle:rental~.+
+
+### bicycle-types
+
+The question is `What kind of bicycles and accessories are rented here?`
+*{rental} is rented here* is shown if `rental` is set
+
+ - *Normal city bikes can be rented here* is shown if with rental=city_bike
+ - *Electrical bikes can be rented here* is shown if with rental=ebike
+ - *BMX bikes can be rented here* is shown if with rental=bmx
+ - *Mountainbikes can be rented here* is shown if with rental=mtb
+ - *Bikes for children can be rented here* is shown if with rental=kid_bike
+ - *Tandem bicycles can be rented here* is shown if with rental=tandem
+ - *Race bicycles can be rented here* is shown if with rental=racebike
+ - *Bike helmets can be rented here* is shown if with rental=bike_helmet
+ - *Cargo bikes can be rented here* is shown if with rental=cargo_bike
+
+This tagrendering is only visible in the popup if the following condition is met: service:bicycle:rental=yes | bicycle_rental~.+
+This tagrendering has labels
+`bicycle_rental`
+
+### rental-capacity-city_bike
+
+The question is `How many city bikes can be rented here?`
+*{capacity:city_bike} city bikes can be rented here* is shown if `capacity:city_bike` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*city_bike.*)$
+This tagrendering has labels
+`bicycle_rental`
+
+### rental-capacity-ebike
+
+The question is `How many electrical bikes can be rented here?`
+*{capacity:ebike} electrical bikes can be rented here* is shown if `capacity:ebike` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*ebike.*)$
+This tagrendering has labels
+`bicycle_rental`
+
+### rental-capacity-kid_bike
+
+The question is `How many bikes for children can be rented here?`
+*{capacity:kid_bike} bikes for children can be rented here* is shown if `capacity:kid_bike` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*kid_bike.*)$
+This tagrendering has labels
+`bicycle_rental`
+
+### rental-capacity-bmx
+
+The question is `How many BMX bikes can be rented here?`
+*{capacity:bmx} BMX bikes can be rented here* is shown if `capacity:bmx` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*bmx.*)$
+This tagrendering has labels
+`bicycle_rental`
+
+### rental-capacity-mtb
+
+The question is `How many mountainbikes can be rented here?`
+*{capacity:mtb} mountainbikes can be rented here* is shown if `capacity:mtb` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*mtb.*)$
+This tagrendering has labels
+`bicycle_rental`
+
+### rental-capacity-bicycle_pannier
+
+The question is `How many bicycle panniers can be rented here?`
+*{capacity:bicycle_pannier} bicycle panniers can be rented here* is shown if `capacity:bicycle_pannier` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*bicycle_pannier.*)$
+This tagrendering has labels
+`bicycle_rental`
+
+### rental-capacity-tandem_bicycle
+
+The question is `How many tandem can be rented here?`
+*{capacity:tandem_bicycle} tandem can be rented here* is shown if `capacity:tandem_bicycle` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (service:bicycle:rental=yes | bicycle_rental~.+) & rental~^(.*tandem_bicycle.*)$
+This tagrendering has labels
+`bicycle_rental`
+
+### bike_pump_service
+
+The question is `Does this shop offer a bike pump for use by anyone?`
+
+ - *This shop offers a bike pump for anyone* is shown if with service:bicycle:pump=yes
+ - *This shop doesn't offer a bike pump for anyone* is shown if with service:bicycle:pump=no
+ - *There is bicycle pump, it is shown as a separate point* is shown if with service:bicycle:pump=separate
+
+This tagrendering is only visible in the popup if the following condition is met: service:bicycle:retail=yes | shop=bicycle | shop=bicycle_repair | ^(service:bicycle:.+)$~~^(yes)$ | service:bicycle:pump~.+
+
+### bike_repair_tools
+
+The question is `Are there tools here to repair your own bike?`
+
+ - *This shop offers tools for DIY bicycle repair* is shown if with service:bicycle:diy=yes
+ - *This shop doesn't offer tools for DIY bicycle repair* is shown if with service:bicycle:diy=no
+ - *Tools for DIY bicycle repair are only available if you bought/hire the bike in the shop* is shown if with service:bicycle:diy=only_sold
+
+This tagrendering is only visible in the popup if the following condition is met: shop=bicycle | shop=bicycle_repair | service:bicycle:diy~.+ | service:bicycle:repair~^(yes|only)$
+
+### bike_wash
+
+The question is `Are bicycles washed here?`
+
+ - *This shop cleans bicycles* is shown if with service:bicycle:cleaning=yes
+ - *This shop has an installation where one can clean bicycles themselves* is shown if with service:bicycle:cleaning=diy
+ - *This shop doesn't offer bicycle cleaning* is shown if with service:bicycle:cleaning=no
+
+This tagrendering is only visible in the popup if the following condition is met: shop=bicycle | shop=bicycle_repair | ^(service:bicycle:.*)$~~^(yes|only)$ | service:bicycle:cleaning~.+
+
+### bike_cleaning-service_bicycle_cleaning_charge
+
+The question is `How much does it cost to use the cleaning service?`
+*Using the cleaning service costs {service:bicycle:cleaning:charge}* is shown if `service:bicycle:cleaning:charge` is set
+
+ - *The cleaning service is free to use* is shown if with service:bicycle:cleaning:fee=no
+ - *Free to use* is shown if with service:bicycle:cleaning:fee=yes & service:bicycle:cleaning:charge=. _This option cannot be chosen as answer_
+
+This tagrendering is only visible in the popup if the following condition is met: amenity!=bicycle_wash & service:bicycle:cleaning!=no & service:bicycle:cleaning~.+
+
+### internet
+
+The question is `Does this place offer internet access?`
+
+ -
*This place offers wireless internet access* is shown if with internet_access=wlan
+ - *This place does not offer internet access* is shown if with internet_access=no
+ - *This place offers internet access* is shown if with internet_access=yes. _This option cannot be chosen as answer_
+ -
*This place offers internet access via a terminal or computer* is shown if with internet_access=terminal
+ - *This place offers wired internet access* is shown if with internet_access=wired
+ - *This place offers both wireless internet and internet access via a terminal or computer* is shown if with internet_access=terminal;wifi
+
+This tagrendering has labels
+`internet-all`
+
+### internet-fee
+
+The question is `Is there a fee for internet access?`
+
+ - *There is a fee for the internet access at this place* is shown if with internet_access:fee=yes
+ - *Internet access is free at this place* is shown if with internet_access:fee=no
+ - *Internet access is free at this place, for customers only* is shown if with internet_access:fee=customers
+
+This tagrendering is only visible in the popup if the following condition is met: internet_access!=no & internet_access~.+
+This tagrendering has labels
+`internet-all`
+
+### internet-ssid
+
+The question is `What is the network name for the wireless internet access?`
+*The network name is {internet_access:ssid}* is shown if `internet_access:ssid` is set
+
+ - *Telekom* is shown if with internet_access:ssid=Telekom
+
+This tagrendering is only visible in the popup if the following condition is met: internet_access~^(.*wlan.*)$
+This tagrendering has labels
+`internet-all`
+
+### organic
+
+The question is `Does this shop offer organic products?`
+
+ - *This shop offers organic products* is shown if with organic=yes
+ - *This shop only offers organic products* is shown if with organic=only
+ - *This shop does not offer organic products* is shown if with organic=no
+
+This tagrendering is only visible in the popup if the following condition is met: shop=supermarket | shop=convenience | shop=farm | shop=greengrocer | shop=health_food | shop=clothes | shop=shoes | shop=butcher | shop=cosmetics | shop=deli | shop=bakery | shop=alcohol | shop=seafood | shop=beverages | shop=florist
+
+### sugar_free
+
+The question is `Does this shop have a sugar free offering?`
+
+ - *This shop only sells sugar free products* is shown if with diet:sugar_free=only
+ - *This shop has a big sugar free offering* is shown if with diet:sugar_free=yes
+ - *This shop has a limited sugar free offering* is shown if with diet:sugar_free=limited
+ - *This shop has no sugar free offering* is shown if with diet:sugar_free=no
+
+This tagrendering is only visible in the popup if the following condition is met: shop=supermarket | shop=convenience | shop=farm | shop=greengrocer | shop=health_food | shop=deli | shop=bakery | shop=beverages | shop=beverages | shop=pastry | shop=chocolate | shop=frozen_food | shop=ice_cream
+This tagrendering has labels
+`diets`
+
+### gluten_free
+
+The question is `Does this shop have a gluten free offering?`
+
+ -
*This shop only sells gluten free products* is shown if with diet:gluten_free=only
+ -
*This shop has a big gluten free offering* is shown if with diet:gluten_free=yes
+ - *This shop has a limited gluten free offering* is shown if with diet:gluten_free=limited
+ - *This shop has no gluten free offering* is shown if with diet:gluten_free=no
+
+This tagrendering is only visible in the popup if the following condition is met: shop=supermarket | shop=convenience | shop=farm | shop=greengrocer | shop=health_food | shop=deli | shop=bakery | shop=beverages | shop=beverages | shop=pastry | shop=chocolate | shop=frozen_food | shop=ice_cream
+This tagrendering has labels
+`diets`
+
+### lactose_free
+
+The question is `Does {title()} have a lactose-free offering?`
+
+ -
*Only sells lactose free products* is shown if with diet:lactose_free=only
+ -
*Big lactose free offering* is shown if with diet:lactose_free=yes
+ - *Limited lactose free offering* is shown if with diet:lactose_free=limited
+ - *No lactose free offering* is shown if with diet:lactose_free=no
+
+This tagrendering is only visible in the popup if the following condition is met: shop=supermarket | shop=convenience | shop=farm | shop=greengrocer | shop=health_food | shop=deli | shop=bakery | shop=beverages | shop=beverages | shop=pastry | shop=chocolate | shop=frozen_food | shop=ice_cream
+This tagrendering has labels
+`diets`
+
+### dog-access
+
+The question is `Are dogs allowed in this business?`
+
+ -
*Dogs are allowed* is shown if with dog=yes
+ -
*Dogs are not allowed* is shown if with dog=no
+ -
*Dogs are allowed, but they have to be leashed* is shown if with dog=leashed
+ -
*Dogs are allowed and can run around freely* is shown if with dog=unleashed
+ -
*Dogs are allowed only outside* is shown if with dog=outside
+
+### description
+
+The question is `Is there still some relevant info that the previous questions did not cover? Feel free to add it here.`
+*{description}* is shown if `description` is set
+
+### leftover-questions
+
+_This tagrendering has no question and is thus read-only_
+*{questions( ,)}*
+
+### move-button
+
+_This tagrendering has no question and is thus read-only_
+*{move_button()}*
+
+### delete-button
+
+_This tagrendering has no question and is thus read-only_
+*{delete_button()}*
+
+### lod
+
+_This tagrendering has no question and is thus read-only_
+*{linked_data_from_website()}*
+
+This tagrendering has labels
+`added_by_default`
+
+## Filters
+
+| id | question | osmTags |
+-----|-----|----- |
+| second_hand.0 | Only show shops selling second-hand items | shop=second_hand | shop=charity | second_hand=yes | second_hand=only | service:bicycle:second_hand~^(yes|only)$ |
+
+| id | question | osmTags |
+-----|-----|----- |
+| has_organic.0 | Has organic options | organic=yes | organic=only |
+
+| id | question | osmTags |
+-----|-----|----- |
+| dogs.0 | *No preference towards dogs* (default) | |
+| dogs.1 | Dogs allowed | dog=unleashed | dog=yes |
+| dogs.2 | No dogs allowed | dog=no |
+
+| id | question | osmTags |
+-----|-----|----- |
+| shop_types.0 | *What kind of shop is this?* (default) | |
+| shop_types.1 | Bicycle rental shop | shop=bicycle_rental | ((shop=rental & amenity=bicycle_rental)) |
+| shop_types.2 | Farm Supply Shop | shop=agrarian |
+| shop_types.3 | Liquor Store | shop=alcohol |
+| shop_types.4 | Anime / Manga Shop | shop=anime |
+| shop_types.5 | Antique Shop | shop=antiques |
+| shop_types.6 | Appliance Store | shop=appliance |
+| shop_types.7 | Art Store | shop=art |
+| shop_types.8 | Baby Goods Store | shop=baby_goods |
+| shop_types.9 | Bag/Luggage Store | shop=bag |
+| shop_types.10 | Bakery | shop=bakery |
+| shop_types.11 | Bathroom Furnishing Store | shop=bathroom_furnishing |
+| shop_types.12 | Beauty Shop | shop=beauty |
+| shop_types.13 | Bedding/Mattress Store | shop=bed |
+| shop_types.14 | Beverage Store | shop=beverages |
+| shop_types.15 | Bicycle Shop | shop=bicycle |
+| shop_types.16 | Boat Store | shop=boat |
+| shop_types.17 | Bookmaker | shop=bookmaker |
+| shop_types.18 | Bookstore | shop=books |
+| shop_types.19 | Brewing Supply Store | shop=brewing_supplies |
+| shop_types.20 | Butcher | shop=butcher |
+| shop_types.21 | Camera Equipment Store | shop=camera |
+| shop_types.22 | Candle Shop | shop=candles |
+| shop_types.23 | Cannabis Shop | shop=cannabis |
+| shop_types.24 | Car Dealership | shop=car |
+| shop_types.25 | Car Parts Store | shop=car_parts |
+| shop_types.26 | Car Repair Shop | shop=car_repair |
+| shop_types.27 | RV Dealership | shop=caravan |
+| shop_types.28 | Carpet Store | shop=carpet |
+| shop_types.29 | Catalog Shop | shop=catalogue |
+| shop_types.30 | Charity Store | shop=charity |
+| shop_types.31 | Cheese Store | shop=cheese |
+| shop_types.32 | Drugstore | shop=chemist |
+| shop_types.33 | Chocolate Store | shop=chocolate |
+| shop_types.34 | Clothing Store | shop=clothes |
+| shop_types.35 | Coffee Store | shop=coffee |
+| shop_types.36 | Collectibles Shop | shop=collector |
+| shop_types.37 | Computer Store | shop=computer |
+| shop_types.38 | Candy Store | shop=confectionery |
+| shop_types.39 | Convenience Store | shop=convenience |
+| shop_types.40 | Copy Store | shop=copyshop |
+| shop_types.41 | Cosmetics Store | shop=cosmetics |
+| shop_types.42 | Rural Supplies Store | shop=country_store |
+| shop_types.43 | Arts & Crafts Store | shop=craft |
+| shop_types.44 | Curtain Store | shop=curtain |
+| shop_types.45 | Dairy Store | shop=dairy |
+| shop_types.46 | Delicatessen | shop=deli |
+| shop_types.47 | Department Store | shop=department_store |
+| shop_types.48 | DIY Store | shop=doityourself |
+| shop_types.49 | Door Shop | shop=doors |
+| shop_types.50 | Dry Cleaner | shop=dry_cleaning |
+| shop_types.51 | E-Cigarette Shop | shop=e-cigarette |
+| shop_types.52 | Electrical Equipment Store | shop=electrical |
+| shop_types.53 | Electronics Store | shop=electronics |
+| shop_types.54 | Erotic Store | shop=erotic |
+| shop_types.55 | Fabric Store | shop=fabric |
+| shop_types.56 | Produce Stand | shop=farm |
+| shop_types.57 | Fashion Accessories Store | shop=fashion_accessories |
+| shop_types.58 | Fireplace Store | shop=fireplace |
+| shop_types.59 | Fishing Shop | shop=fishing |
+| shop_types.60 | Flooring Supply Shop | shop=flooring |
+| shop_types.61 | Florist | shop=florist |
+| shop_types.62 | Framing Shop | shop=frame |
+| shop_types.63 | Frozen Food Store | shop=frozen_food |
+| shop_types.64 | Fuel Shop | shop=fuel |
+| shop_types.65 | Funeral Home | shop=funeral_directors |
+| shop_types.66 | Furniture Store | shop=furniture |
+| shop_types.67 | Tabletop Game Store | shop=games |
+| shop_types.68 | Garden Center | shop=garden_centre |
+| shop_types.69 | Bottled Gas Shop | shop=gas |
+| shop_types.70 | General Store | shop=general |
+| shop_types.71 | Gift Shop | shop=gift |
+| shop_types.72 | Greengrocer | shop=greengrocer |
+| shop_types.73 | Hairdresser | shop=hairdresser |
+| shop_types.74 | Hairdresser Supply Store | shop=hairdresser_supply |
+| shop_types.75 | Hardware Store | shop=hardware |
+| shop_types.76 | Health Food Store | shop=health_food |
+| shop_types.77 | Hearing Aids Store | shop=hearing_aids |
+| shop_types.78 | Herbalist | shop=herbalist |
+| shop_types.79 | Hifi Store | shop=hifi |
+| shop_types.80 | Honey Store | shop=honey |
+| shop_types.81 | Household Linen Shop | shop=household_linen |
+| shop_types.82 | Houseware Store | shop=houseware |
+| shop_types.83 | Hunting Shop | shop=hunting |
+| shop_types.84 | Interior Decoration Store | shop=interior_decoration |
+| shop_types.85 | Jewelry Store | shop=jewelry |
+| shop_types.86 | Kiosk | shop=kiosk |
+| shop_types.87 | Kitchen Design Store | shop=kitchen |
+| shop_types.88 | Laundry | shop=laundry |
+| shop_types.89 | Leather Store | shop=leather |
+| shop_types.90 | Lighting Store | shop=lighting |
+| shop_types.91 | Locksmith | shop=locksmith |
+| shop_types.92 | Lottery Shop | shop=lottery |
+| shop_types.93 | Mall | shop=mall |
+| shop_types.94 | Massage Shop | shop=massage |
+| shop_types.95 | Medical Supply Store | shop=medical_supply |
+| shop_types.96 | Military Surplus Store | shop=military_surplus |
+| shop_types.97 | Mobile Phone Store | shop=mobile_phone |
+| shop_types.98 | Model Shop | shop=model |
+| shop_types.99 | Money Lender | shop=money_lender |
+| shop_types.100 | Motorcycle Dealership | shop=motorcycle |
+| shop_types.101 | Motorcycle Repair Shop | shop=motorcycle_repair |
+| shop_types.102 | Music Store | shop=music |
+| shop_types.103 | Musical Instrument Store | shop=musical_instrument |
+| shop_types.104 | Newsstand | shop=newsagent |
+| shop_types.105 | Nutrition Supplements Store | shop=nutrition_supplements |
+| shop_types.106 | Nuts Shop | shop=nuts |
+| shop_types.107 | Optician | shop=optician |
+| shop_types.108 | Outdoors Store | shop=outdoor |
+| shop_types.109 | Online Retailer Outpost | shop=outpost |
+| shop_types.110 | Paint Store | shop=paint |
+| shop_types.111 | Party Supply Store | shop=party |
+| shop_types.112 | Pasta Store | shop=pasta |
+| shop_types.113 | Pastry Shop | shop=pastry |
+| shop_types.114 | Pawnshop | shop=pawnbroker |
+| shop_types.115 | Perfume Store | shop=perfumery |
+| shop_types.116 | Pet Store | shop=pet |
+| shop_types.117 | Pet Groomer | shop=pet_grooming |
+| shop_types.118 | Photography Store | shop=photo |
+| shop_types.119 | Pottery Store | shop=pottery |
+| shop_types.120 | Printer Ink Store | shop=printer_ink |
+| shop_types.121 | Psychic | shop=psychic |
+| shop_types.122 | Fireworks Store | shop=pyrotechnics |
+| shop_types.123 | Radio/Electronic Component Store | shop=radiotechnics |
+| shop_types.124 | Religious Store | shop=religion |
+| shop_types.125 | Rental Shop | shop=rental |
+| shop_types.126 | Repair Shop | shop=repair |
+| shop_types.127 | Rice Store | shop=rice |
+| shop_types.128 | Scuba Diving Shop | shop=scuba_diving |
+| shop_types.129 | Seafood Shop | shop=seafood |
+| shop_types.130 | Thrift Store | shop=second_hand |
+| shop_types.131 | Sewing Supply Shop | shop=sewing |
+| shop_types.132 | Shoe Repair Shop | shop=shoe_repair |
+| shop_types.133 | Shoe Store | shop=shoes |
+| shop_types.134 | Spice Shop | shop=spices |
+| shop_types.135 | Sporting Goods Store | shop=sports |
+| shop_types.136 | Stationery Store | shop=stationery |
+| shop_types.137 | Storage Rental | shop=storage_rental |
+| shop_types.138 | Supermarket | shop=supermarket |
+| shop_types.139 | Pool Supply Store | shop=swimming_pool |
+| shop_types.140 | Tailor | shop=tailor |
+| shop_types.141 | Tattoo Parlor | shop=tattoo |
+| shop_types.142 | Tea Store | shop=tea |
+| shop_types.143 | Telecom Retail Store | shop=telecommunication |
+| shop_types.144 | Ticket Seller | shop=ticket |
+| shop_types.145 | Tile Shop | shop=tiles |
+| shop_types.146 | Tobacco Shop | shop=tobacco |
+| shop_types.147 | Tool Rental | shop=tool_hire |
+| shop_types.148 | Toy Store | shop=toys |
+| shop_types.149 | Trade Shop | shop=trade |
+| shop_types.150 | Travel Agency | shop=travel_agency |
+| shop_types.151 | Trophy Shop | shop=trophy |
+| shop_types.152 | Tire Store | shop=tyres |
+| shop_types.153 | Vacuum Cleaner Store | shop=vacuum_cleaner |
+| shop_types.154 | Discount Store | shop=variety_store |
+| shop_types.155 | Video Store | shop=video |
+| shop_types.156 | Video Game Store | shop=video_games |
+| shop_types.157 | Watches Shop | shop=watches |
+| shop_types.158 | Drinking Water Shop | shop=water |
+| shop_types.159 | Watersport/Swim Shop | shop=water_sports |
+| shop_types.160 | Weapon Shop | shop=weapons |
+| shop_types.161 | Wholesale Store | shop=wholesale |
+| shop_types.162 | Wig Shop | shop=wigs |
+| shop_types.163 | Window Blind Store | shop=window_blind |
+| shop_types.164 | Wine Shop | shop=wine |
+| shop_types.165 | This shop is no longer used. It is vacant | disused:shop= | (shop=disused | shop=vacant | disused:shop~^(.+)$ | abandoned:shop~^(.+)$) |
+
+| id | question | osmTags |
+-----|-----|----- |
+| open_now.0 | Now open | _isOpen=yes |
+
+| id | question | osmTags |
+-----|-----|----- |
+| accepts_cash.0 | Accepts cash | payment:cash=yes |
+
+| id | question | osmTags |
+-----|-----|----- |
+| accepts_cards.0 | Accepts payment cards | payment:cards=yes |
+
+| id | question | osmTags |
+-----|-----|----- |
+| has_internet.0 | Offers internet | internet_access=wlan | internet_access=yes | internet_access=wired |
+
+| id | question | osmTags |
+-----|-----|----- |
+| sugar_free.0 | Has a sugar-free offering | diet:sugar_free=yes | diet:sugar_free=only | diet:sugar_free=limited |
+
+| id | question | osmTags |
+-----|-----|----- |
+| gluten_free.0 | Has a gluten free offering | diet:gluten_free=yes | diet:gluten_free=only | diet:gluten_free=limited |
+
+| id | question | osmTags |
+-----|-----|----- |
+| lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited |
+
+
+
+This document is autogenerated from [assets/themes/pets/pets.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/pets/pets.json)
diff --git a/Docs/Layers/waste_basket_dogs.md b/Docs/Layers/waste_basket_dogs.md
new file mode 100644
index 0000000000..362d62ed87
--- /dev/null
+++ b/Docs/Layers/waste_basket_dogs.md
@@ -0,0 +1,97 @@
+[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
+
+# waste_basket_dogs
+
+This layer is based on [waste_basket](../Layers/waste_basket.md)
+
+This is a public waste basket, thrash can, where you can throw away your thrash.
+
+ - This layer is shown at zoomlevel **14** 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)
+ - [images](#images)
+ - [waste-basket-waste-types](#waste-basket-waste-types)
+ - [dispensing_dog_bags](#dispensing_dog_bags)
+ - [leftover-questions](#leftover-questions)
+ - [move-button](#move-button)
+ - [delete-button](#delete-button)
+ - [lod](#lod)
+
+## Themes using this layer
+
+ - [pets](https://mapcomplete.org/pets)
+
+## Basic tags for this layer
+
+Elements must match **all** of the following expressions:
+
+0. vending=excrement_bags
+1. amenity=waste_basket
+
+[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22vending%22%3D%22excrement_bags%22%5D%5B%22amenity%22%3D%22waste_basket%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 |
+-----|-----|----- |
+|
[waste](https://wiki.openstreetmap.org/wiki/Key:waste) | Multiple choice | [trash](https://wiki.openstreetmap.org/wiki/Tag:waste%3Dtrash) [dog_excrement](https://wiki.openstreetmap.org/wiki/Tag:waste%3Ddog_excrement) [cigarettes](https://wiki.openstreetmap.org/wiki/Tag:waste%3Dcigarettes) [drugs](https://wiki.openstreetmap.org/wiki/Tag:waste%3Ddrugs) [sharps](https://wiki.openstreetmap.org/wiki/Tag:waste%3Dsharps) [plastic](https://wiki.openstreetmap.org/wiki/Tag:waste%3Dplastic) [pmd](https://wiki.openstreetmap.org/wiki/Tag:waste%3Dpmd) [paper](https://wiki.openstreetmap.org/wiki/Tag:waste%3Dpaper) |
+|
[vending](https://wiki.openstreetmap.org/wiki/Key:vending) | Multiple choice | [excrement_bags](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dexcrement_bags) [](https://wiki.openstreetmap.org/wiki/Tag:vending%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
+_This tagrendering has no question and is thus read-only_
+*{image_carousel()}{image_upload()}*
+
+### waste-basket-waste-types
+
+The question is `What kind of waste basket is this?`
+
+ - *A waste basket for general waste* is shown if with waste=. _This option cannot be chosen as answer_
+ - *A waste basket for general waste* is shown if with waste=trash
+ - *A waste basket for dog excrements* is shown if with waste=dog_excrement
+ - *A waste basket for cigarettes* is shown if with waste=cigarettes
+ - *A waste basket for drugs* is shown if with waste=drugs
+ - *A waste basket for needles and other sharp objects* is shown if with waste=sharps
+ - *A waste basket for plastic* is shown if with waste=plastic
+ - *A waste basket for plastic packaging, metal packaging and drink cartons (PMD)* is shown if with waste=pmd
+ - *A waste basket for paper* is shown if with waste=paper
+
+### dispensing_dog_bags
+
+The question is `Does this waste basket have a dispenser for dog excrement bags?`
+
+ - *This waste basket has a dispenser for (dog) excrement bags* is shown if with vending=excrement_bags & not:vending=
+ - *This waste basket does not have a dispenser for (dog) excrement bags* is shown if with not:vending=excrement_bags & vending=
+ - *This waste basket does not have a dispenser for (dog) excrement bags* is shown if with vending=. _This option cannot be chosen as answer_
+
+### leftover-questions
+
+_This tagrendering has no question and is thus read-only_
+*{questions( ,)}*
+
+### move-button
+
+_This tagrendering has no question and is thus read-only_
+*{move_button()}*
+
+### delete-button
+
+_This tagrendering has no question and is thus read-only_
+*{delete_button()}*
+
+### lod
+
+_This tagrendering has no question and is thus read-only_
+*{linked_data_from_website()}*
+
+This tagrendering has labels
+`added_by_default`
+
+
+This document is autogenerated from [assets/themes/pets/pets.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/pets/pets.json)
diff --git a/scripts/generateDocs.ts b/scripts/generateDocs.ts
index 094b494c98..ddd918ff0a 100644
--- a/scripts/generateDocs.ts
+++ b/scripts/generateDocs.ts
@@ -30,6 +30,7 @@ import TableOfContents from "../src/UI/Base/TableOfContents"
import MarkdownUtils from "../src/Utils/MarkdownUtils"
import { parse as parse_html } from "node-html-parser"
import { AvailableRasterLayers } from "../src/Models/RasterLayers"
+import { ImmutableStore } from "../src/Logic/UIEventSource"
/**
* Converts a markdown-file into a .json file, which a walkthrough/slideshow element can use
@@ -253,7 +254,7 @@ export class GenerateDocs extends Script {
}
private generateHotkeyDocs() {
- new ThemeViewState(new ThemeConfig(bookcases), new Set())
+ new ThemeViewState(new ThemeConfig(bookcases), new ImmutableStore(new Set()))
this.WriteMarkdownFile("./Docs/Hotkeys.md", Hotkeys.generateDocumentation(), [
"src/UI/Base/Hotkeys.ts",
])
diff --git a/src/UI/Popup/AutoApplyButton.ts b/src/UI/Popup/AutoApplyButton.ts
index 9137faa0c7..a2cdf12d08 100644
--- a/src/UI/Popup/AutoApplyButton.ts
+++ b/src/UI/Popup/AutoApplyButton.ts
@@ -16,7 +16,6 @@ import { UIElement } from "../UIElement"
import FilteredLayer from "../../Models/FilteredLayer"
import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig"
import Lazy from "../Base/Lazy"
-import List from "../Base/List"
import { SpecialVisualization, SpecialVisualizationState } from "../SpecialVisualization"
import { IndexedFeatureSource } from "../../Logic/FeatureSource/FeatureSource"
import { MapLibreAdaptor } from "../Map/MapLibreAdaptor"
@@ -264,19 +263,15 @@ export default class AutoApplyButton implements SpecialVisualization {
)
}
- private static generateDocs(supportedActions: string[]) {
- return new Combine([
- "A button to run many actions for many features at once.",
- "To effectively use this button, you'll need some ingredients:",
- new List([
- "A target layer with features for which an action is defined in a tag rendering. The following special visualisations support an autoAction: " +
- supportedActions.join(", "),
- "A host feature to place the auto-action on. This can be a big outline (such as a city). Another good option for this is the layer ",
- new Link("current_view", "./BuiltinLayers.md#current_view"),
- "Then, use a calculated tag on the host feature to determine the overlapping object ids",
- "At last, add this component",
- ]),
- ]).AsMarkdown()
+ private static generateDocs(supportedActions: string[]): string {
+ return `
+ A button to run many actions for many features at once.
+ To effectively use this button, you'll need some ingredients:
+
+ 1. A target layer with features for which an action is defined in a tag rendering. The following special visualisations support an autoAction: ${supportedActions.join(", ")}
+ 2. A host feature to place the auto-action on. This can be a big outline (such as a city). Another good option for this is the layer [current_view](./BuiltinLayers.md#current_view)
+ 3. Then, use a calculated tag on the host feature to determine the overlapping object ids
+ 4. At last, add this component`
}
constr(
diff --git a/src/UI/SpecialVisualizations.ts b/src/UI/SpecialVisualizations.ts
index 18bd5d7936..196cc0d86b 100644
--- a/src/UI/SpecialVisualizations.ts
+++ b/src/UI/SpecialVisualizations.ts
@@ -81,13 +81,13 @@ class StealViz implements SpecialVisualization {
{
name: "featureId",
doc: "The key of the attribute which contains the id of the feature from which to use the tags",
- required: true,
+ required: true
},
{
name: "tagRenderingId",
doc: "The layer-id and tagRenderingId to render. Can be multiple value if ';'-separated (in which case every value must also contain the layerId, e.g. `layerId.tagRendering0; layerId.tagRendering1`). Note: this can cause layer injection",
- required: true,
- },
+ required: true
+ }
]
needsUrls = []
svelteBased = true
@@ -121,7 +121,7 @@ class StealViz implements SpecialVisualization {
tags: otherTags,
selectedElement: otherFeature,
state,
- layer,
+ layer
})
)
}
@@ -146,7 +146,6 @@ class StealViz implements SpecialVisualization {
}
-
export default class SpecialVisualizations {
public static specialVisualizations: SpecialVisualization[] = SpecialVisualizations.initList()
public static specialVisualisationsDict: Map = new Map<
@@ -178,18 +177,18 @@ export default class SpecialVisualizations {
viz.docs,
viz.args.length > 0
? MarkdownUtils.table(
- ["name", "default", "description"],
- viz.args.map((arg) => {
- let defaultArg = arg.defaultValue ?? "_undefined_"
- if (defaultArg == "") {
- defaultArg = "_empty string_"
- }
- return [arg.name, defaultArg, arg.doc]
- })
- )
+ ["name", "default", "description"],
+ viz.args.map((arg) => {
+ let defaultArg = arg.defaultValue ?? "_undefined_"
+ if (defaultArg == "") {
+ defaultArg = "_empty string_"
+ }
+ return [arg.name, defaultArg, arg.doc]
+ })
+ )
: undefined,
"#### Example usage of " + viz.funcName,
- "" + example + "
",
+ "" + example + "
"
].join("\n\n")
}
@@ -205,48 +204,82 @@ export default class SpecialVisualizations {
}
public static HelpMessage(): string {
- const helpTexts: string[] = SpecialVisualizations.specialVisualizations.map((viz) =>
- SpecialVisualizations.DocumentationFor(viz)
+
+ const vis = [...SpecialVisualizations.specialVisualizations]
+ vis.sort((a, b) => {
+ return a.funcName < b.funcName ? -1 : 1
+ })
+ vis.sort((a, b) => {
+ if (a.group === b.group) {
+ return 0
+ }
+ return (a.group ?? "xxx") < (b.group ?? "xxx") ? -1 : 1
+ })
+
+ const groupExplanations: Record = {
+ "default": "These special visualisations are interactive components that most elements get by default. You'll normally won't need them in custom layers",
+ "favourites": "Elements relating to marking an object as favourite (giving it a heart). Default element",
+ "settings": "Elements part of the usersettings-ui",
+ "images": "Elements related to adding or manipulating images. Normally also added by default, but in some cases a tweaked version is needed",
+ "notes": "Elements relating to OpenStreetMap-notes, e.g. the component to close and/or add a comment",
+ "reviews": "Elements relating to seeing and adding ratings and reviews with Mangrove.reviews"
+ }
+
+ const helpTexts: string[] = []
+ let lastGroup: string = null
+ for (const viz of vis) {
+ if (viz.group !== lastGroup) {
+ lastGroup = viz.group
+ if (viz.group === undefined) {
+
+
+ helpTexts.push("## Unclassified elements\n\nVarious elements")
+ } else {
+
+ helpTexts.push("## " + viz.group)
+ if (!groupExplanations[viz.group]) {
+ throw "\n\n >>>> ERROR <<<< Unknown visualisation group type: " + viz.group + "\n\n\n"
+ }
+ helpTexts.push(groupExplanations[viz.group])
+ }
+ }
+ helpTexts.push(SpecialVisualizations.DocumentationFor(viz))
+ }
+
+ const example = JSON.stringify(
+ {
+ render: {
+ special: {
+ type: "some_special_visualisation",
+ argname: "some_arg",
+ message: {
+ en: "some other really long message",
+ nl: "een boodschap in een andere taal"
+ },
+ other_arg_name: "more args"
+ },
+ before: {
+ en: "Some text to prefix before the special element (e.g. a title)",
+ nl: "Een tekst om voor het element te zetten (bv. een titel)"
+ },
+ after: {
+ en: "Some text to put after the element, e.g. a footer"
+ }
+ }
+ },
+ null,
+ " "
)
- const firstPart = new Combine([
- new Title("Special tag renderings", 1),
-
+ const firstPart = [
+ "# Special tag renderings",
"In a tagrendering, some special values are substituted by an advanced UI-element. This allows advanced features and visualizations to be reused by custom themes or even to query third-party API's.",
"General usage is `{func_name()}`, `{func_name(arg, someotherarg)}` or `{func_name(args):cssClasses}`. Note that you _do not_ need to use quotes around your arguments, the comma is enough to separate them. This also implies you cannot use a comma in your args",
- new Title("Using expanded syntax", 4),
+ "#### Using expanded syntax",
`Instead of using \`{"render": {"en": "{some_special_visualisation(some_arg, some other really long message, more args)} , "nl": "{some_special_visualisation(some_arg, een boodschap in een andere taal, more args)}}\`, one can also write`,
- new FixedUiElement(
- JSON.stringify(
- {
- render: {
- special: {
- type: "some_special_visualisation",
- argname: "some_arg",
- message: {
- en: "some other really long message",
- nl: "een boodschap in een andere taal",
- },
- other_arg_name: "more args",
- },
- before: {
- en: "Some text to prefix before the special element (e.g. a title)",
- nl: "Een tekst om voor het element te zetten (bv. een titel)",
- },
- after: {
- en: "Some text to put after the element, e.g. a footer",
- },
- },
- },
- null,
- " "
- )
- ).SetClass("code"),
- 'In other words: use `{ "before": ..., "after": ..., "special": {"type": ..., "argname": ...argvalue...}`. The args are in the `special` block; an argvalue can be a string, a translation or another value. (Refer to class `RewriteSpecial` in case of problems)',
- ])
- .SetClass("flex flex-col")
- .AsMarkdown()
- console.log(">>> ", helpTexts.join("\n\n"))
+ "```\n" + example + "\n```\n",
+ "In other words: use `{ \"before\": ..., \"after\": ..., \"special\": {\"type\": ..., \"argname\": ...argvalue...}`. The args are in the `special` block; an argvalue can be a string, a translation or another value. (Refer to class `RewriteSpecial` in case of problems)"
+ ].join("\n\n")
return firstPart + "\n\n" + helpTexts.join("\n\n")
}
@@ -267,9 +300,9 @@ export default class SpecialVisualizations {
const [lon, lat] = GeoOperations.centerpointCoordinates(feature)
return new SvelteUIElement(AddNewPoint, {
state,
- coordinate: { lon, lat },
+ coordinate: { lon, lat }
})
- },
+ }
},
{
funcName: "language_picker",
@@ -286,11 +319,11 @@ export default class SpecialVisualizations {
availableLanguages: languages,
preferredLanguages: state.osmConnection.userDetails.map(
(ud) => ud?.languages ?? []
- ),
+ )
})
})
)
- },
+ }
},
new HistogramViz(),
@@ -324,9 +357,9 @@ export default class SpecialVisualizations {
construct: (feature: Feature, title: string) =>
GeoOperations.toGpx(feature, title),
helpertext: t.downloadGpxHelper,
- maintext: t.downloadFeatureAsGpx,
+ maintext: t.downloadFeatureAsGpx
})
- },
+ }
},
new UploadToOsmViz(),
new MultiApplyViz(),
@@ -346,8 +379,8 @@ export default class SpecialVisualizations {
{
name: "keyToShowWikipediaFor",
doc: "Use the wikidata entry from this key to show the wikipedia article for. Multiple keys can be given (separated by ';'), in which case the first matching value is used",
- defaultValue: "wikidata;wikipedia",
- },
+ defaultValue: "wikidata;wikipedia"
+ }
],
needsUrls: [...Wikidata.neededUrls, ...Wikipedia.neededUrls],
@@ -360,9 +393,9 @@ export default class SpecialVisualizations {
return tags[key]?.split(";")?.map((id) => id.trim()) ?? []
})
return new SvelteUIElement(WikipediaPanel, {
- wikiIds,
+ wikiIds
})
- },
+ }
},
{
funcName: "wikidata_label",
@@ -371,8 +404,8 @@ export default class SpecialVisualizations {
{
name: "keyToShowWikidataFor",
doc: "Use the wikidata entry from this key to show the label",
- defaultValue: "wikidata",
- },
+ defaultValue: "wikidata"
+ }
],
needsUrls: Wikidata.neededUrls,
example:
@@ -396,7 +429,7 @@ export default class SpecialVisualizations {
})
)
})
- ),
+ )
},
new MapillaryLinkVis(),
new LanguageElement(),
@@ -410,7 +443,7 @@ export default class SpecialVisualizations {
_,
__,
layer: LayerConfig
- ) => new SvelteUIElement(AllTagsPanel, { tags, layer }),
+ ) => new SvelteUIElement(AllTagsPanel, { tags, layer })
},
{
funcName: "reviews",
@@ -460,18 +493,18 @@ export default class SpecialVisualizations {
{
name: "key",
defaultValue: "opening_hours",
- doc: "The tagkey from which the table is constructed.",
+ doc: "The tagkey from which the table is constructed."
},
{
name: "prefix",
defaultValue: "",
- doc: "Remove this string from the start of the value before parsing. __Note: use `&LPARENs` to indicate `(` if needed__",
+ doc: "Remove this string from the start of the value before parsing. __Note: use `&LPARENs` to indicate `(` if needed__"
},
{
name: "postfix",
defaultValue: "",
- doc: "Remove this string from the end of the value before parsing. __Note: use `&RPARENs` to indicate `)` if needed__",
- },
+ doc: "Remove this string from the end of the value before parsing. __Note: use `&RPARENs` to indicate `)` if needed__"
+ }
],
needsUrls: [Constants.countryCoderEndpoint],
example:
@@ -479,7 +512,7 @@ export default class SpecialVisualizations {
constr: (state, tagSource: UIEventSource, args) => {
const [key, prefix, postfix] = args
return new OpeningHoursVisualization(tagSource, key, prefix, postfix)
- },
+ }
},
{
funcName: "opening_hours_state",
@@ -488,18 +521,18 @@ export default class SpecialVisualizations {
{
name: "key",
defaultValue: "opening_hours",
- doc: "The tagkey from which the opening hours are read.",
+ doc: "The tagkey from which the opening hours are read."
},
{
name: "prefix",
defaultValue: "",
- doc: "Remove this string from the start of the value before parsing. __Note: use `&LPARENs` to indicate `(` if needed__",
+ doc: "Remove this string from the start of the value before parsing. __Note: use `&LPARENs` to indicate `(` if needed__"
},
{
name: "postfix",
defaultValue: "",
- doc: "Remove this string from the end of the value before parsing. __Note: use `&RPARENs` to indicate `)` if needed__",
- },
+ doc: "Remove this string from the end of the value before parsing. __Note: use `&RPARENs` to indicate `)` if needed__"
+ }
],
constr(
state: SpecialVisualizationState,
@@ -514,9 +547,9 @@ export default class SpecialVisualizations {
keyToUse,
tags,
prefix,
- postfix,
+ postfix
})
- },
+ }
},
{
funcName: "canonical",
@@ -528,8 +561,8 @@ export default class SpecialVisualizations {
{
name: "key",
doc: "The key of the tag to give the canonical text for",
- required: true,
- },
+ required: true
+ }
],
constr: (state, tagSource, args) => {
const key = args[0]
@@ -553,7 +586,7 @@ export default class SpecialVisualizations {
return unit.asHumanLongValue(value, getCountry)
})
)
- },
+ }
},
{
funcName: "export_as_geojson",
@@ -571,9 +604,9 @@ export default class SpecialVisualizations {
construct: (feature: Feature) =>
JSON.stringify(feature, null, " "),
maintext: t.downloadFeatureAsGeojson,
- helpertext: t.downloadGeoJsonHelper,
+ helpertext: t.downloadGeoJsonHelper
})
- },
+ }
},
{
funcName: "open_in_iD",
@@ -583,9 +616,9 @@ export default class SpecialVisualizations {
constr: (state, feature) => {
return new SvelteUIElement(OpenIdEditor, {
mapProperties: state.mapProperties,
- objectId: feature.data.id,
+ objectId: feature.data.id
})
- },
+ }
},
{
funcName: "open_in_josm",
@@ -595,7 +628,7 @@ export default class SpecialVisualizations {
constr: (state) => {
return new SvelteUIElement(OpenJosm, { state })
- },
+ }
},
{
funcName: "clear_location_history",
@@ -610,7 +643,7 @@ export default class SpecialVisualizations {
state.historicalUserLocations.features.setData([])
state.selectedElement.setData(undefined)
})
- },
+ }
},
{
funcName: "visualize_note_comments",
@@ -619,13 +652,13 @@ export default class SpecialVisualizations {
{
name: "commentsKey",
doc: "The property name of the comments, which should be stringified json",
- defaultValue: "comments",
+ defaultValue: "comments"
},
{
name: "start",
doc: "Drop the first 'start' comments",
- defaultValue: "0",
- },
+ defaultValue: "0"
+ }
],
needsUrls: [Constants.osmAuthConfig.url],
constr: (state, tags, args) =>
@@ -645,12 +678,12 @@ export default class SpecialVisualizations {
(comment) =>
new SvelteUIElement(NoteCommentElement, {
comment,
- state,
+ state
})
)
).SetClass("flex flex-col")
})
- ),
+ )
},
{
funcName: "title",
@@ -667,7 +700,7 @@ export default class SpecialVisualizations {
layer: LayerConfig
) => {
return new SvelteUIElement(FeatureTitle, { state, tags, feature, layer })
- },
+ }
},
{
funcName: "maproulette_task",
@@ -711,7 +744,7 @@ export default class SpecialVisualizations {
})
)
},
- docs: "Fetches the metadata of MapRoulette campaign that this task is part of and shows those details (namely `title`, `description` and `instruction`).\n\nThis reads the property `mr_challengeId` to detect the parent campaign.",
+ docs: "Fetches the metadata of MapRoulette campaign that this task is part of and shows those details (namely `title`, `description` and `instruction`).\n\nThis reads the property `mr_challengeId` to detect the parent campaign."
},
{
funcName: "maproulette_set_status",
@@ -722,15 +755,15 @@ export default class SpecialVisualizations {
"\n" +
"```json\n" +
"{\n" +
- ' "id": "mark_duplicate",\n' +
- ' "render": {\n' +
- ' "special": {\n' +
- ' "type": "maproulette_set_status",\n' +
- ' "message": {\n' +
- ' "en": "Mark as not found or false positive"\n' +
+ " \"id\": \"mark_duplicate\",\n" +
+ " \"render\": {\n" +
+ " \"special\": {\n" +
+ " \"type\": \"maproulette_set_status\",\n" +
+ " \"message\": {\n" +
+ " \"en\": \"Mark as not found or false positive\"\n" +
" },\n" +
- ' "status": "2",\n' +
- ' "image": "close"\n' +
+ " \"status\": \"2\",\n" +
+ " \"image\": \"close\"\n" +
" }\n" +
" }\n" +
"}\n" +
@@ -738,32 +771,32 @@ export default class SpecialVisualizations {
args: [
{
name: "message",
- doc: "A message to show to the user",
+ doc: "A message to show to the user"
},
{
name: "image",
doc: "Image to show",
- defaultValue: "confirm",
+ defaultValue: "confirm"
},
{
name: "message_confirm",
- doc: "What to show when the task is closed, either by the user or was already closed.",
+ doc: "What to show when the task is closed, either by the user or was already closed."
},
{
name: "status",
doc: "A statuscode to apply when the button is clicked. 1 = `close`, 2 = `false_positive`, 3 = `skip`, 4 = `deleted`, 5 = `already fixed` (on the map, e.g. for duplicates), 6 = `too hard`",
- defaultValue: "1",
+ defaultValue: "1"
},
{
name: "maproulette_id",
doc: "The property name containing the maproulette id",
- defaultValue: "mr_taskId",
+ defaultValue: "mr_taskId"
},
{
name: "ask_feedback",
doc: "If not an empty string, this will be used as question to ask some additional feedback. A text field will be added",
- defaultValue: "",
- },
+ defaultValue: ""
+ }
],
constr: (state, tagsSource, args) => {
@@ -773,7 +806,7 @@ export default class SpecialVisualizations {
message_closed,
statusToSet,
maproulette_id_key,
- askFeedback,
+ askFeedback
] = args
if (image === "") {
image = "confirm"
@@ -790,9 +823,9 @@ export default class SpecialVisualizations {
message_closed,
statusToSet,
maproulette_id_key,
- askFeedback,
+ askFeedback
})
- },
+ }
},
{
funcName: "statistics",
@@ -819,7 +852,7 @@ export default class SpecialVisualizations {
[state.mapProperties.bounds]
)
)
- },
+ }
},
{
funcName: "send_email",
@@ -828,29 +861,29 @@ export default class SpecialVisualizations {
{
name: "to",
doc: "Who to send the email to?",
- required: true,
+ required: true
},
{
name: "subject",
doc: "The subject of the email",
- required: true,
+ required: true
},
{
name: "body",
doc: "The text in the email",
- required: true,
+ required: true
},
{
name: "button_text",
doc: "The text shown on the button in the UI",
- required: true,
- },
+ required: true
+ }
],
constr(__, tags, args) {
return new SvelteUIElement(SendEmail, { args, tags })
- },
+ }
},
{
funcName: "link",
@@ -859,29 +892,29 @@ export default class SpecialVisualizations {
{
name: "text",
doc: "Text to be shown",
- required: true,
+ required: true
},
{
name: "href",
doc: "The URL to link to. Note that this will be URI-encoded before ",
- required: true,
+ required: true
},
{
name: "class",
- doc: "CSS-classes to add to the element",
+ doc: "CSS-classes to add to the element"
},
{
name: "download",
- doc: "Expects a string which denotes the filename to download the contents of `href` into. If set, this link will act as a download-button.",
+ doc: "Expects a string which denotes the filename to download the contents of `href` into. If set, this link will act as a download-button."
},
{
name: "arialabel",
- doc: "If set, this text will be used as aria-label",
+ doc: "If set, this text will be used as aria-label"
},
{
name: "icon",
- doc: "If set, show this icon next to the link. You might want to combine this with `class: button`",
- },
+ doc: "If set, show this icon next to the link. You might want to combine this with `class: button`"
+ }
],
constr(
@@ -903,9 +936,9 @@ export default class SpecialVisualizations {
download: tagSource.map((tags) => Utils.SubstituteKeys(download, tags)),
ariaLabel: tagSource.map((tags) => Utils.SubstituteKeys(ariaLabel, tags)),
newTab: new ImmutableStore(newTab),
- icon: tagSource.map((tags) => Utils.SubstituteKeys(icon, tags)),
+ icon: tagSource.map((tags) => Utils.SubstituteKeys(icon, tags))
}).setSpan()
- },
+ }
},
{
funcName: "multi",
@@ -919,10 +952,10 @@ export default class SpecialVisualizations {
type: "multi",
key: "_doors_from_building_properties",
tagrendering: {
- en: "The building containing this feature has a door of width {entrance:width}",
- },
- },
- },
+ en: "The building containing this feature has a door of width {entrance:width}"
+ }
+ }
+ }
},
null,
" "
@@ -932,17 +965,17 @@ export default class SpecialVisualizations {
{
name: "key",
doc: "The property to read and to interpret as a list of properties",
- required: true,
+ required: true
},
{
name: "tagrendering",
doc: "An entire tagRenderingConfig",
- required: true,
+ required: true
},
{
name: "classes",
- doc: "CSS-classes to apply on every individual item. Seperated by `space`",
- },
+ doc: "CSS-classes to apply on every individual item. Seperated by `space`"
+ }
],
constr(
state: SpecialVisualizationState,
@@ -978,7 +1011,7 @@ export default class SpecialVisualizations {
tags: new ImmutableStore(property),
state,
feature,
- layer,
+ layer
// clss: classes ?? "",
}).SetClass(classes)
elements.push(subsTr)
@@ -986,7 +1019,7 @@ export default class SpecialVisualizations {
return elements
})
)
- },
+ }
},
{
funcName: "translated",
@@ -996,8 +1029,8 @@ export default class SpecialVisualizations {
{
name: "key",
doc: "The attribute to interpret as json",
- defaultValue: "value",
- },
+ defaultValue: "value"
+ }
],
constr(
state: SpecialVisualizationState,
@@ -1018,7 +1051,7 @@ export default class SpecialVisualizations {
}
})
)
- },
+ }
},
{
funcName: "fediverse_link",
@@ -1027,8 +1060,8 @@ export default class SpecialVisualizations {
{
name: "key",
doc: "The attribute-name containing the link",
- required: true,
- },
+ required: true
+ }
],
constr(
@@ -1040,7 +1073,7 @@ export default class SpecialVisualizations {
): BaseUIElement {
const key = argument[0]
return new SvelteUIElement(FediverseLink, { key, tags, state })
- },
+ }
},
{
funcName: "braced",
@@ -1050,8 +1083,8 @@ export default class SpecialVisualizations {
{
name: "text",
required: true,
- doc: "The value to show",
- },
+ doc: "The value to show"
+ }
],
constr(
state: SpecialVisualizationState,
@@ -1061,7 +1094,7 @@ export default class SpecialVisualizations {
layer: LayerConfig
): BaseUIElement {
return new FixedUiElement("{" + args[0] + "}")
- },
+ }
},
{
funcName: "tags",
@@ -1071,8 +1104,8 @@ export default class SpecialVisualizations {
{
name: "key",
defaultValue: "value",
- doc: "The key to look for the tags",
- },
+ doc: "The key to look for the tags"
+ }
],
constr(
state: SpecialVisualizationState,
@@ -1097,14 +1130,14 @@ export default class SpecialVisualizations {
} catch (e) {
return new FixedUiElement(
"Could not parse this tag: " +
- JSON.stringify(value) +
- " due to " +
- e
+ JSON.stringify(value) +
+ " due to " +
+ e
).SetClass("alert")
}
})
)
- },
+ }
},
{
@@ -1120,7 +1153,7 @@ export default class SpecialVisualizations {
layer: LayerConfig
): BaseUIElement {
return new SvelteUIElement(DirectionIndicator, { state, feature })
- },
+ }
},
{
@@ -1130,8 +1163,8 @@ export default class SpecialVisualizations {
{
name: "key",
doc: "The attribute containing the degrees",
- defaultValue: "_direction:centerpoint",
- },
+ defaultValue: "_direction:centerpoint"
+ }
],
constr(
@@ -1154,7 +1187,7 @@ export default class SpecialVisualizations {
return Translations.t.general.visualFeedback.directionsAbsolute[dir]
})
)
- },
+ }
},
{
funcName: "compare_data",
@@ -1163,18 +1196,18 @@ export default class SpecialVisualizations {
{
name: "url",
required: true,
- doc: "The attribute containing the url where to fetch more data",
+ doc: "The attribute containing the url where to fetch more data"
},
{
name: "host",
required: true,
- doc: "The domain name(s) where data might be fetched from - this is needed to set the CSP. A domain must include 'https', e.g. 'https://example.com'. For multiple domains, separate them with ';'. If you don't know the possible domains, use '*'. ",
+ doc: "The domain name(s) where data might be fetched from - this is needed to set the CSP. A domain must include 'https', e.g. 'https://example.com'. For multiple domains, separate them with ';'. If you don't know the possible domains, use '*'. "
},
{
name: "readonly",
required: false,
- doc: "If 'yes', will not show 'apply'-buttons",
- },
+ doc: "If 'yes', will not show 'apply'-buttons"
+ }
],
docs: "Gives an interactive element which shows a tag comparison between the OSM-object and the upstream object. This allows to copy some or all tags into OSM",
constr(
@@ -1194,9 +1227,9 @@ export default class SpecialVisualizations {
layer,
feature,
readonly,
- externalData,
+ externalData
})
- },
+ }
},
{
funcName: "linked_data_from_website",
@@ -1205,26 +1238,26 @@ export default class SpecialVisualizations {
{
name: "key",
defaultValue: "website",
- doc: "Attempt to load ld+json from the specified URL. This can be in an embedded