Merge master

This commit is contained in:
Pieter Vander Vennet 2023-10-06 02:27:49 +02:00
commit c3041af5f7
50 changed files with 2313 additions and 1152 deletions

View file

@ -21,6 +21,7 @@
+ [description](#description)
+ [payment-options](#payment-options)
+ [payment-options-advanced](#payment-options-advanced)
+ [payment-options-split](#payment-options-split)
+ [opening_hours_24_7](#opening_hours_24_7)
+ [level](#level)
+ [bicycle_rental.*bicycle_rental](#bicycle_rental*bicycle_rental)
@ -46,7 +47,6 @@
+ [opening_hours_by_appointment](#opening_hours_by_appointment)
+ [multilevels](#multilevels)
+ [induction-loop](#induction-loop)
+ [payment-options-split](#payment-options-split)
+ [denominations-coins](#denominations-coins)
+ [check_date](#check_date)
+ [all_tags](#all_tags)
@ -56,6 +56,7 @@
+ [mastodon](#mastodon)
+ [contact](#contact)
+ [etymology.wikipedia-etymology](#etymologywikipedia-etymology)
+ [toilet.relevant-questions](#toiletrelevant-questions)
+ [denominations-notes](#denominations-notes)
+ [single_level](#single_level)
+ [survey_date](#survey_date)
@ -410,6 +411,23 @@
### payment-options-split
- bicycle_tube_vending_machine
- elongated_coin
- parking_ticket_machine
- shower
- ticket_machine
- toilet
- vending_machine
### opening_hours_24_7
@ -753,22 +771,6 @@
### payment-options-split
- elongated_coin
- parking_ticket_machine
- shower
- ticket_machine
- toilet
- vending_machine
### denominations-coins
@ -866,6 +868,17 @@
- indoors
### toilet.relevant-questions
- indoors

View file

@ -47,7 +47,7 @@ this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/id#values) [id](https://wiki.openstreetmap.org/wiki/Key:id) | Multiple choice |
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/vending#values) [vending](https://wiki.openstreetmap.org/wiki/Key:vending) | [string](../SpecialInputElements.md#string) | [drinks](https://wiki.openstreetmap.org/wiki/Tag:vending%3Ddrinks) [sweets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dsweets) [food](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dfood) [cigarettes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcigarettes) [condoms](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcondoms) [coffee](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcoffee) [water](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dwater) [newspapers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dnewspapers) [bicycle_tube](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_tube) [milk](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmilk) [bread](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbread) [eggs](https://wiki.openstreetmap.org/wiki/Tag:vending%3Deggs) [cheese](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcheese) [honey](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dhoney) [potatoes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpotatoes) [flowers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dflowers) [parking_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dparking_tickets) [elongated_coin](https://wiki.openstreetmap.org/wiki/Tag:vending%3Delongated_coin) [public_transport_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpublic_transport_tickets) [meat](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmeat)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/vending#values) [vending](https://wiki.openstreetmap.org/wiki/Key:vending) | [string](../SpecialInputElements.md#string) | [drinks](https://wiki.openstreetmap.org/wiki/Tag:vending%3Ddrinks) [sweets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dsweets) [food](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dfood) [cigarettes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcigarettes) [condoms](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcondoms) [coffee](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcoffee) [water](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dwater) [newspapers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dnewspapers) [bicycle_tube](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_tube) [milk](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmilk) [bread](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbread) [eggs](https://wiki.openstreetmap.org/wiki/Tag:vending%3Deggs) [cheese](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcheese) [honey](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dhoney) [potatoes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpotatoes) [meat](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmeat) [flowers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dflowers) [parking_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dparking_tickets) [elongated_coin](https://wiki.openstreetmap.org/wiki/Tag:vending%3Delongated_coin) [public_transport_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpublic_transport_tickets) [bicycle_light](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_light) [gloves](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dgloves) [bicycle_repair_kit](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_repair_kit) [bicycle_pump](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_pump) [bicycle_lock](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_lock)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/payment:coins:denominations#values) [payment:coins:denominations](https://wiki.openstreetmap.org/wiki/Key:payment:coins:denominations) | Multiple choice | [0.01 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.01 EUR) [0.02 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.02 EUR) [0.05 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.05 EUR) [0.10 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.10 EUR) [0.20 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.20 EUR) [0.50 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.50 EUR) [1 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D1 EUR) [2 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D2 EUR) [0.05 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.05 CHF) [0.10 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.10 CHF) [0.20 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.20 CHF) [0.50 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.50 CHF) [1 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D1 CHF) [2 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D2 CHF) [5 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D5 CHF)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/payment:notes:denominations#values) [payment:notes:denominations](https://wiki.openstreetmap.org/wiki/Key:payment:notes:denominations) | Multiple choice | [5 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D5 EUR) [10 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D10 EUR) [20 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D20 EUR) [50 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D50 EUR) [100 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D100 EUR) [200 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D200 EUR) [500 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D500 EUR) [10 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D10 CHF) [20 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D20 CHF) [50 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D50 CHF) [100 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D100 CHF) [200 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D200 CHF) [1000 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D1000 CHF)
@ -119,11 +119,16 @@ This is rendered with `This vending machine sells {vending}`
- *Cheese is sold* corresponds with `vending=cheese`
- *Honey is sold* corresponds with `vending=honey`
- *Potatoes are sold* corresponds with `vending=potatoes`
- *Meat is sold* corresponds with `vending=meat`
- *Flowers are sold* corresponds with `vending=flowers`
- *Parking tickets are sold* corresponds with `vending=parking_tickets`
- *Pressed pennies are sold* corresponds with `vending=elongated_coin`
- *Public transport tickets are sold* corresponds with `vending=public_transport_tickets`
- *Meat products are being sold* corresponds with `vending=meat`
- *Bicycle lights are sold* corresponds with `vending=bicycle_light`
- *Gloves are sold* corresponds with `vending=gloves`
- *Bicycle repair kits are sold* corresponds with `vending=bicycle_repair_kit`
- *Bicycle pumps are sold* corresponds with `vending=bicycle_pump`
- *Bicycle locks are sold* corresponds with `vending=bicycle_lock`
@ -429,11 +434,16 @@ vending.12 | Sale of eggs | vending~^(.*eggs.*)$
vending.13 | Sale of cheese | vending~^(.*cheese.*)$
vending.14 | Sale of honey | vending~^(.*honey.*)$
vending.15 | Sale of potatoes | vending~^(.*potatoes.*)$
vending.16 | Sale of flowers | vending~^(.*flowers.*)$
vending.17 | Sale of parking | vending~^(.*parking_tickets.*)$
vending.18 | Sale of pressed pennies | vending=elongated_coin
vending.19 | Sale of public transport tickets | vending~^(.*public_transport_tickets.*)$
vending.20 | Sale of meat products | vending=meat
vending.16 | Sale of meat | vending~^(.*meat.*)$
vending.17 | Sale of flowers | vending~^(.*flowers.*)$
vending.18 | Sale of parking tickets | vending~^(.*parking_tickets.*)$
vending.19 | Sale of pressed pennies | vending=elongated_coin
vending.20 | Sale of public transport tickets | vending~^(.*public_transport_tickets.*)$
vending.21 | Sale of bicycle lights | vending=bicycle_light
vending.22 | Sale of gloves | vending=gloves
vending.23 | Sale of bicycle repair kits | vending=bicycle_repair_kit
vending.24 | Sale of bicycle pumps | vending=bicycle_pump
vending.25 | Sale of bicycle locks | vending=bicycle_lock
This document is autogenerated from [assets/themes/vending_machine/vending_machine.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/vending_machine/vending_machine.json)

View file

@ -51,6 +51,7 @@ attribute | type | values which are supported by this layer
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/charge#values) [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [string](../SpecialInputElements.md#string) |
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/brand#values) [brand](https://wiki.openstreetmap.org/wiki/Key:brand) | [string](../SpecialInputElements.md#string) | [Continental](https://wiki.openstreetmap.org/wiki/Tag:brand%3DContinental) [Schwalbe](https://wiki.openstreetmap.org/wiki/Tag:brand%3DSchwalbe)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | [Schwalbe](https://wiki.openstreetmap.org/wiki/Tag:operator%3DSchwalbe) [Continental](https://wiki.openstreetmap.org/wiki/Tag:operator%3DContinental)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/vending#values) [vending](https://wiki.openstreetmap.org/wiki/Key:vending) | Multiple choice | [bicycle_tube](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_tube) [bicycle_light](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_light) [gloves](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dgloves) [bicycle_repair_kit](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_repair_kit) [bicycle_pump](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_pump) [bicycle_lock](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_lock)
@ -121,22 +122,32 @@ This is rendered with `A bicycle tube costs {charge}`
### vending-machine-payment-methods
### payment-options-split
The question is *How can one pay at this tube vending machine?*
The question is *Which methods of payment are accepted here?*
- *Payment with coins is possible* corresponds with `payment:coins=yes`
- *Cash is accepted here* corresponds with `payment:cash=yes`
- This option cannot be chosen as answer
- Unselecting this answer will add
- *Payment cards are accepted here* corresponds with `payment:cards=yes`
- This option cannot be chosen as answer
- Unselecting this answer will add
- *Payment by QR-code is possible here* corresponds with `payment:qr_code=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:payment:qr_code' target='_blank'>payment:qr_code</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:payment:qr_code%3Dno' target='_blank'>no</a>
- *Coins are accepted here* corresponds with `payment:coins=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:payment:coins' target='_blank'>payment:coins</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:payment:coins%3Dno' target='_blank'>no</a>
- *Payment with notes is possible* corresponds with `payment:notes=yes`
- *Bank notes are accepted here* corresponds with `payment:notes=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:payment:notes' target='_blank'>payment:notes</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:payment:notes%3Dno' target='_blank'>no</a>
- *Payment with cards is possible* corresponds with `payment:cards=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:payment:cards' target='_blank'>payment:cards</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:payment:cards%3Dno' target='_blank'>no</a>
- *Debit cards are accepted here* corresponds with `payment:debit_cards=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:payment:debit_cards' target='_blank'>payment:debit_cards</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:payment:debit_cards%3Dno' target='_blank'>no</a>
- *Credit cards are accepted here* corresponds with `payment:credit_cards=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:payment:credit_cards' target='_blank'>payment:credit_cards</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:payment:credit_cards%3Dno' target='_blank'>no</a>
@ -181,26 +192,22 @@ This is rendered with `This vending machine is maintained by {operator}`
### bicycle_tube_vending_maching-other-items
### other-items-vending
The question is *Are other bicycle bicycle accessories sold here?*
The question is *Are other biycle accessories sold here?*
- *Bicycle lights are sold here* corresponds with `vending:bicycle_light=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:vending:bicycle_light' target='_blank'>vending:bicycle_light</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:vending:bicycle_light%3Dno' target='_blank'>no</a>
- *Gloves are sold here* corresponds with `vending:gloves=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:vending:gloves' target='_blank'>vending:gloves</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:vending:gloves%3Dno' target='_blank'>no</a>
- *Bicycle repair kits are sold here* corresponds with `vending:bicycle_repair_kit=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:vending:bicycle_repair_kit' target='_blank'>vending:bicycle_repair_kit</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:vending:bicycle_repair_kit%3Dno' target='_blank'>no</a>
- *Bicycle pumps are sold here* corresponds with `vending:bicycle_pump=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:vending:bicycle_pump' target='_blank'>vending:bicycle_pump</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:vending:bicycle_pump%3Dno' target='_blank'>no</a>
- *Bicycle locks are sold here* corresponds with `vending:bicycle_lock=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:vending:bicycle_lock' target='_blank'>vending:bicycle_lock</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:vending:bicycle_lock%3Dno' target='_blank'>no</a>
- *Bicycle inner tubes are sold here* corresponds with `vending=bicycle_tube`
- *Bicycle lights are sold here* corresponds with `vending=bicycle_light`
- *Gloves are sold here* corresponds with `vending=gloves`
- *Bicycle repair kits are sold here* corresponds with `vending=bicycle_repair_kit`
- *Bicycle pumps are sold here* corresponds with `vending=bicycle_pump`
- *Bicycle locks are sold here* corresponds with `vending=bicycle_lock`

View file

@ -55,6 +55,17 @@ attribute | type | values which are supported by this layer
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/room#values) [room](https://wiki.openstreetmap.org/wiki/Key:room) | Multiple choice | [administration](https://wiki.openstreetmap.org/wiki/Tag:room%3Dadministration) [auditorium](https://wiki.openstreetmap.org/wiki/Tag:room%3Dauditorium) [bedroom](https://wiki.openstreetmap.org/wiki/Tag:room%3Dbedroom) [chapel](https://wiki.openstreetmap.org/wiki/Tag:room%3Dchapel) [class](https://wiki.openstreetmap.org/wiki/Tag:room%3Dclass) [computer](https://wiki.openstreetmap.org/wiki/Tag:room%3Dcomputer) [conference](https://wiki.openstreetmap.org/wiki/Tag:room%3Dconference) [crypt](https://wiki.openstreetmap.org/wiki/Tag:room%3Dcrypt) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:room%3Dkitchen) [laboratory](https://wiki.openstreetmap.org/wiki/Tag:room%3Dlaboratory) [library](https://wiki.openstreetmap.org/wiki/Tag:room%3Dlibrary) [locker](https://wiki.openstreetmap.org/wiki/Tag:room%3Dlocker) [nursery](https://wiki.openstreetmap.org/wiki/Tag:room%3Dnursery) [office](https://wiki.openstreetmap.org/wiki/Tag:room%3Doffice) [prison_cell](https://wiki.openstreetmap.org/wiki/Tag:room%3Dprison_cell) [restaurant](https://wiki.openstreetmap.org/wiki/Tag:room%3Drestaurant) [security_check](https://wiki.openstreetmap.org/wiki/Tag:room%3Dsecurity_check) [sport](https://wiki.openstreetmap.org/wiki/Tag:room%3Dsport) [storage](https://wiki.openstreetmap.org/wiki/Tag:room%3Dstorage) [technical](https://wiki.openstreetmap.org/wiki/Tag:room%3Dtechnical) [toilets](https://wiki.openstreetmap.org/wiki/Tag:room%3Dtoilets) [waiting](https://wiki.openstreetmap.org/wiki/Tag:room%3Dwaiting)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/capacity#values) [capacity](https://wiki.openstreetmap.org/wiki/Key:capacity) | [pnat](../SpecialInputElements.md#pnat) |
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/name:etymology:wikidata#values) [name:etymology:wikidata](https://wiki.openstreetmap.org/wiki/Key:name:etymology:wikidata) | [wikidata](../SpecialInputElements.md#wikidata) |
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/access#values) [access](https://wiki.openstreetmap.org/wiki/Key:access) | [string](../SpecialInputElements.md#string) | [yes](https://wiki.openstreetmap.org/wiki/Tag:access%3Dyes) [customers](https://wiki.openstreetmap.org/wiki/Tag:access%3Dcustomers) [no](https://wiki.openstreetmap.org/wiki/Tag:access%3Dno) [key](https://wiki.openstreetmap.org/wiki/Tag:access%3Dkey)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/fee#values) [fee](https://wiki.openstreetmap.org/wiki/Key:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/charge#values) [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [string](../SpecialInputElements.md#string) |
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/wheelchair#values) [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/door:width#values) [door:width](https://wiki.openstreetmap.org/wiki/Key:door:width) | [pfloat](../SpecialInputElements.md#pfloat) |
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:position#values) [toilets:position](https://wiki.openstreetmap.org/wiki/Key:toilets:position) | Multiple choice | [seated](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Dseated) [urinal](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Durinal) [squat](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Dsquat) [seated;urinal](https://wiki.openstreetmap.org/wiki/Tag:toilets:position%3Dseated;urinal)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/changing_table#values) [changing_table](https://wiki.openstreetmap.org/wiki/Key:changing_table) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:changing_table%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:changing_table%3Dno)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/changing_table:location#values) [changing_table:location](https://wiki.openstreetmap.org/wiki/Key:changing_table:location) | [string](../SpecialInputElements.md#string) | [female_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dfemale_toilet) [male_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dmale_toilet) [wheelchair_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dwheelchair_toilet) [dedicated_room](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Ddedicated_room)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:handwashing#values) [toilets:handwashing](https://wiki.openstreetmap.org/wiki/Key:toilets:handwashing) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dno)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:paper_supplied#values) [toilets:paper_supplied](https://wiki.openstreetmap.org/wiki/Key:toilets:paper_supplied) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:paper_supplied%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:paper_supplied%3Dno)
@ -231,6 +242,276 @@ This is rendered with `<h3>Wikipedia article of the name giver</h3>{wikipedia(n
### toilet-access
The question is *Are these toilets publicly accessible?*
This rendering asks information about the property [access](https://wiki.openstreetmap.org/wiki/Key:access)
This is rendered with `Access is {access}`
- *Public access* corresponds with `access=yes`
- *Only access to customers* corresponds with `access=customers`
- *Not accessible* corresponds with `access=no`
- *Accessible, but one has to ask a key to enter* corresponds with `access=key`
- *Public access* corresponds with `access=public`
- This option cannot be chosen as answer
This tagrendering is only visible in the popup if the following condition is met: `amenity=toilets`
This tagrendering has labels `relevant-questions`
### toilets-fee
The question is *Are these toilets free to use?*
- *These are paid toilets* corresponds with `fee=yes`
- *Free to use* corresponds with `fee=no`
This tagrendering is only visible in the popup if the following condition is met: `amenity=toilets&access!=no`
This tagrendering has labels `relevant-questions`
### toilet-charge
The question is *How much does one have to pay for these toilets?*
This rendering asks information about the property [charge](https://wiki.openstreetmap.org/wiki/Key:charge)
This is rendered with `The fee is {charge}`
This tagrendering is only visible in the popup if the following condition is met: `amenity=toilets&fee=yes`
This tagrendering has labels `relevant-questions`
### payment-options-split
The question is *Which methods of payment are accepted here?*
- *Cash is accepted here* corresponds with `payment:cash=yes`
- This option cannot be chosen as answer
- Unselecting this answer will add
- *Payment cards are accepted here* corresponds with `payment:cards=yes`
- This option cannot be chosen as answer
- Unselecting this answer will add
- *Payment by QR-code is possible here* corresponds with `payment:qr_code=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:payment:qr_code' target='_blank'>payment:qr_code</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:payment:qr_code%3Dno' target='_blank'>no</a>
- *Coins are accepted here* corresponds with `payment:coins=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:payment:coins' target='_blank'>payment:coins</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:payment:coins%3Dno' target='_blank'>no</a>
- *Bank notes are accepted here* corresponds with `payment:notes=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:payment:notes' target='_blank'>payment:notes</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:payment:notes%3Dno' target='_blank'>no</a>
- *Debit cards are accepted here* corresponds with `payment:debit_cards=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:payment:debit_cards' target='_blank'>payment:debit_cards</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:payment:debit_cards%3Dno' target='_blank'>no</a>
- *Credit cards are accepted here* corresponds with `payment:credit_cards=yes`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:payment:credit_cards' target='_blank'>payment:credit_cards</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:payment:credit_cards%3Dno' target='_blank'>no</a>
This tagrendering is only visible in the popup if the following condition is met: `amenity=toilets&fee=yes`
This tagrendering has labels `relevant-questions`
### opening_hours_24_7
The question is *When are these toilets opened?*
This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours)
This is rendered with `<h3>Opening hours</h3>{opening_hours_table(opening_hours)}`
- *24/7 opened (including holidays)* corresponds with `opening_hours=24/7`
This tagrendering is only visible in the popup if the following condition is met: `amenity=toilets&access!=no`
This tagrendering has labels `relevant-questions`
### toilets-wheelchair
The question is *Is there a dedicated toilet for wheelchair users?*
- *There is a dedicated toilet for wheelchair users* corresponds with `wheelchair=yes`
- *No wheelchair access* corresponds with `wheelchair=no`
- *There is only a dedicated toilet for wheelchair users* corresponds with `wheelchair=designated`
This tagrendering is only visible in the popup if the following condition is met: `amenity=toilets`
This tagrendering has labels `relevant-questions`
### wheelchair-door-width
The question is *What is the width of the door to the wheelchair accessible toilet?*
This rendering asks information about the property [door:width](https://wiki.openstreetmap.org/wiki/Key:door:width)
This is rendered with `The door to the wheelchair-accessible toilet is {canonical(door:width)} wide`
This tagrendering is only visible in the popup if the following condition is met: `amenity=toilets&wheelchair=yes|wheelchair=designated`
This tagrendering has labels `relevant-questions`
### toilets-type
The question is *Which kind of toilets are this?*
- *There are only seated toilets* corresponds with `toilets:position=seated`
- *There are only urinals here* corresponds with `toilets:position=urinal`
- *There are only squat toilets here* corresponds with `toilets:position=squat`
- *Both seated toilets and urinals are available here* corresponds with `toilets:position=seated;urinal`
This tagrendering is only visible in the popup if the following condition is met: `amenity=toilets`
This tagrendering has labels `relevant-questions`
### toilets-changing-table
The question is *Is a changing table (to change diapers) available?*
- *A changing table is available* corresponds with `changing_table=yes`
- *No changing table is available* corresponds with `changing_table=no`
This tagrendering is only visible in the popup if the following condition is met: `amenity=toilets`
This tagrendering has labels `relevant-questions`
### toilet-changing_table:location
The question is *Where is the changing table located?*
This rendering asks information about the property [changing_table:location](https://wiki.openstreetmap.org/wiki/Key:changing_table:location)
This is rendered with `The changing table is located at {changing_table:location}`
- *The changing table is in the toilet for women. * corresponds with `changing_table:location=female_toilet`
- *The changing table is in the toilet for men. * corresponds with `changing_table:location=male_toilet`
- *The changing table is in the toilet for wheelchair users. * corresponds with `changing_table:location=wheelchair_toilet`
- *The changing table is in a dedicated room. * corresponds with `changing_table:location=dedicated_room`
This tagrendering is only visible in the popup if the following condition is met: `amenity=toilets&changing_table=yes`
This tagrendering has labels `relevant-questions`
### toilet-handwashing
The question is *Do these toilets have a sink to wash your hands?*
- *This toilets have a sink to wash your hands* corresponds with `toilets:handwashing=yes`
- *This toilets <b>don't</b> have a sink to wash your hands* corresponds with `toilets:handwashing=no`
This tagrendering is only visible in the popup if the following condition is met: `amenity=toilets`
This tagrendering has labels `relevant-questions`
### toilet-has-paper
The question is *Does one have to bring their own toilet paper to this toilet?*
- *This toilet is equipped with toilet paper* corresponds with `toilets:paper_supplied=yes`
- *You have to bring your own toilet paper to this toilet* corresponds with `toilets:paper_supplied=no`
This tagrendering is only visible in the popup if the following condition is met: `amenity=toilets&toilets:position!=urinal`
This tagrendering has labels `relevant-questions`
### leftover-questions

View file

@ -161,6 +161,8 @@ This is rendered with `Access is {access}`
- This option cannot be chosen as answer
This tagrendering has labels `relevant-questions`
### toilets-fee
@ -177,6 +179,8 @@ The question is *Are these toilets free to use?*
- *Free to use* corresponds with `fee=no`
This tagrendering has labels `relevant-questions`
### toilet-charge
@ -193,6 +197,8 @@ This is rendered with `The fee is {charge}`
This tagrendering is only visible in the popup if the following condition is met: `fee=yes`
This tagrendering has labels `relevant-questions`
### payment-options-split
@ -225,6 +231,8 @@ The question is *Which methods of payment are accepted here?*
This tagrendering is only visible in the popup if the following condition is met: `fee=yes`
This tagrendering has labels `relevant-questions`
### opening_hours_24_7
@ -244,6 +252,8 @@ This is rendered with `<h3>Opening hours</h3>{opening_hours_table(opening_hours
- *24/7 opened (including holidays)* corresponds with `opening_hours=24/7`
This tagrendering has labels `relevant-questions`
### toilets-wheelchair
@ -261,6 +271,8 @@ The question is *Is there a dedicated toilet for wheelchair users?*
- *There is only a dedicated toilet for wheelchair users* corresponds with `wheelchair=designated`
This tagrendering has labels `relevant-questions`
### wheelchair-door-width
@ -277,6 +289,8 @@ This is rendered with `The door to the wheelchair-accessible toilet is {canonic
This tagrendering is only visible in the popup if the following condition is met: `wheelchair=yes|wheelchair=designated`
This tagrendering has labels `relevant-questions`
### toilets-type
@ -295,6 +309,8 @@ The question is *Which kind of toilets are this?*
- *Both seated toilets and urinals are available here* corresponds with `toilets:position=seated;urinal`
This tagrendering has labels `relevant-questions`
### toilets-changing-table
@ -311,6 +327,8 @@ The question is *Is a changing table (to change diapers) available?*
- *No changing table is available* corresponds with `changing_table=no`
This tagrendering has labels `relevant-questions`
### toilet-changing_table:location
@ -335,6 +353,8 @@ This is rendered with `The changing table is located at {changing_table:locatio
This tagrendering is only visible in the popup if the following condition is met: `changing_table=yes`
This tagrendering has labels `relevant-questions`
### toilet-handwashing
@ -351,6 +371,8 @@ The question is *Do these toilets have a sink to wash your hands?*
- *This toilets <b>don't</b> have a sink to wash your hands* corresponds with `toilets:handwashing=no`
This tagrendering has labels `relevant-questions`
### toilet-has-paper
@ -367,6 +389,8 @@ The question is *Does one have to bring their own toilet paper to this toilet?*
- *You have to bring your own toilet paper to this toilet* corresponds with `toilets:paper_supplied=no`
This tagrendering has labels `relevant-questions`
### description

View file

@ -255,6 +255,8 @@ The question is *Which kind of toilets are this?*
- *Both seated toilets and urinals are available here* corresponds with `toilets:position=seated;urinal`
This tagrendering has labels `relevant-questions`
### toilets-changing-table
@ -271,6 +273,8 @@ The question is *Is a changing table (to change diapers) available?*
- *No changing table is available* corresponds with `changing_table=no`
This tagrendering has labels `relevant-questions`
### toilet-changing_table:location
@ -295,6 +299,8 @@ This is rendered with `The changing table is located at {changing_table:locatio
This tagrendering is only visible in the popup if the following condition is met: `changing_table=yes`
This tagrendering has labels `relevant-questions`
### toilet-handwashing
@ -311,6 +317,8 @@ The question is *Do these toilets have a sink to wash your hands?*
- *This toilets <b>don't</b> have a sink to wash your hands* corresponds with `toilets:handwashing=no`
This tagrendering has labels `relevant-questions`
### toilet-has-paper
@ -327,6 +335,8 @@ The question is *Does one have to bring their own toilet paper to this toilet?*
- *You have to bring your own toilet paper to this toilet* corresponds with `toilets:paper_supplied=no`
This tagrendering has labels `relevant-questions`
### description

View file

@ -47,7 +47,7 @@ this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/id#values) [id](https://wiki.openstreetmap.org/wiki/Key:id) | Multiple choice |
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/vending#values) [vending](https://wiki.openstreetmap.org/wiki/Key:vending) | [string](../SpecialInputElements.md#string) | [drinks](https://wiki.openstreetmap.org/wiki/Tag:vending%3Ddrinks) [sweets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dsweets) [food](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dfood) [cigarettes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcigarettes) [condoms](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcondoms) [coffee](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcoffee) [water](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dwater) [newspapers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dnewspapers) [bicycle_tube](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_tube) [milk](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmilk) [bread](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbread) [eggs](https://wiki.openstreetmap.org/wiki/Tag:vending%3Deggs) [cheese](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcheese) [honey](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dhoney) [potatoes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpotatoes) [flowers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dflowers) [parking_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dparking_tickets) [elongated_coin](https://wiki.openstreetmap.org/wiki/Tag:vending%3Delongated_coin) [public_transport_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpublic_transport_tickets) [meat](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmeat)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/vending#values) [vending](https://wiki.openstreetmap.org/wiki/Key:vending) | [string](../SpecialInputElements.md#string) | [drinks](https://wiki.openstreetmap.org/wiki/Tag:vending%3Ddrinks) [sweets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dsweets) [food](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dfood) [cigarettes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcigarettes) [condoms](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcondoms) [coffee](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcoffee) [water](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dwater) [newspapers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dnewspapers) [bicycle_tube](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_tube) [milk](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmilk) [bread](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbread) [eggs](https://wiki.openstreetmap.org/wiki/Tag:vending%3Deggs) [cheese](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcheese) [honey](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dhoney) [potatoes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpotatoes) [meat](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmeat) [flowers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dflowers) [parking_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dparking_tickets) [elongated_coin](https://wiki.openstreetmap.org/wiki/Tag:vending%3Delongated_coin) [public_transport_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpublic_transport_tickets) [bicycle_light](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_light) [gloves](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dgloves) [bicycle_repair_kit](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_repair_kit) [bicycle_pump](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_pump) [bicycle_lock](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_lock)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/payment:coins:denominations#values) [payment:coins:denominations](https://wiki.openstreetmap.org/wiki/Key:payment:coins:denominations) | Multiple choice | [0.01 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.01 EUR) [0.02 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.02 EUR) [0.05 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.05 EUR) [0.10 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.10 EUR) [0.20 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.20 EUR) [0.50 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.50 EUR) [1 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D1 EUR) [2 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D2 EUR) [0.05 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.05 CHF) [0.10 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.10 CHF) [0.20 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.20 CHF) [0.50 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.50 CHF) [1 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D1 CHF) [2 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D2 CHF) [5 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D5 CHF)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/payment:notes:denominations#values) [payment:notes:denominations](https://wiki.openstreetmap.org/wiki/Key:payment:notes:denominations) | Multiple choice | [5 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D5 EUR) [10 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D10 EUR) [20 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D20 EUR) [50 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D50 EUR) [100 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D100 EUR) [200 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D200 EUR) [500 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D500 EUR) [10 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D10 CHF) [20 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D20 CHF) [50 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D50 CHF) [100 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D100 CHF) [200 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D200 CHF) [1000 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D1000 CHF)
@ -119,11 +119,16 @@ This is rendered with `This vending machine sells {vending}`
- *Cheese is sold* corresponds with `vending=cheese`
- *Honey is sold* corresponds with `vending=honey`
- *Potatoes are sold* corresponds with `vending=potatoes`
- *Meat is sold* corresponds with `vending=meat`
- *Flowers are sold* corresponds with `vending=flowers`
- *Parking tickets are sold* corresponds with `vending=parking_tickets`
- *Pressed pennies are sold* corresponds with `vending=elongated_coin`
- *Public transport tickets are sold* corresponds with `vending=public_transport_tickets`
- *Meat products are being sold* corresponds with `vending=meat`
- *Bicycle lights are sold* corresponds with `vending=bicycle_light`
- *Gloves are sold* corresponds with `vending=gloves`
- *Bicycle repair kits are sold* corresponds with `vending=bicycle_repair_kit`
- *Bicycle pumps are sold* corresponds with `vending=bicycle_pump`
- *Bicycle locks are sold* corresponds with `vending=bicycle_lock`
@ -429,11 +434,16 @@ vending.12 | Sale of eggs | vending~^(.*eggs.*)$
vending.13 | Sale of cheese | vending~^(.*cheese.*)$
vending.14 | Sale of honey | vending~^(.*honey.*)$
vending.15 | Sale of potatoes | vending~^(.*potatoes.*)$
vending.16 | Sale of flowers | vending~^(.*flowers.*)$
vending.17 | Sale of parking | vending~^(.*parking_tickets.*)$
vending.18 | Sale of pressed pennies | vending=elongated_coin
vending.19 | Sale of public transport tickets | vending~^(.*public_transport_tickets.*)$
vending.20 | Sale of meat products | vending=meat
vending.16 | Sale of meat | vending~^(.*meat.*)$
vending.17 | Sale of flowers | vending~^(.*flowers.*)$
vending.18 | Sale of parking tickets | vending~^(.*parking_tickets.*)$
vending.19 | Sale of pressed pennies | vending=elongated_coin
vending.20 | Sale of public transport tickets | vending~^(.*public_transport_tickets.*)$
vending.21 | Sale of bicycle lights | vending=bicycle_light
vending.22 | Sale of gloves | vending=gloves
vending.23 | Sale of bicycle repair kits | vending=bicycle_repair_kit
vending.24 | Sale of bicycle pumps | vending=bicycle_pump
vending.25 | Sale of bicycle locks | vending=bicycle_lock
This document is autogenerated from [assets/layers/vending_machine/vending_machine.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/vending_machine/vending_machine.json)

View file

@ -49,7 +49,7 @@ this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/id#values) [id](https://wiki.openstreetmap.org/wiki/Key:id) | Multiple choice |
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/waste#values) [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)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/waste#values) [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) [paper](https://wiki.openstreetmap.org/wiki/Tag:waste%3Dpaper)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/vending#values) [vending](https://wiki.openstreetmap.org/wiki/Key:vending) | Multiple choice | [dog_excrement_bag](https://wiki.openstreetmap.org/wiki/Tag:vending%3Ddog_excrement_bag) [](https://wiki.openstreetmap.org/wiki/Tag:vending%3D)
@ -104,6 +104,7 @@ The question is *What kind of waste basket is this?*
- *A waste basket for drugs* corresponds with `waste=drugs`
- *A waste basket for needles and other sharp objects* corresponds with `waste=sharps`
- *A waste basket for plastic* corresponds with `waste=plastic`
- *A waste basket for paper* corresponds with `waste=paper`

View file

@ -988,18 +988,38 @@
"description": "Layer 'Bicycle tube vending machine' shows and asks freeform values for key 'charge' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')"
},
{
"key": "payment:coins",
"description": "Layer 'Bicycle tube vending machine' shows payment:coins=yes with a fixed text, namely 'Payment with coins is possible' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
},
{
"key": "payment:notes",
"description": "Layer 'Bicycle tube vending machine' shows payment:notes=yes with a fixed text, namely 'Payment with notes is possible' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"key": "payment:cash",
"description": "Layer 'Bicycle tube vending machine' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
},
{
"key": "payment:cards",
"description": "Layer 'Bicycle tube vending machine' shows payment:cards=yes with a fixed text, namely 'Payment with cards is possible' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"description": "Layer 'Bicycle tube vending machine' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
},
{
"key": "payment:qr_code",
"description": "Layer 'Bicycle tube vending machine' shows payment:qr_code=yes with a fixed text, namely 'Payment by QR-code is possible here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
},
{
"key": "payment:coins",
"description": "Layer 'Bicycle tube vending machine' shows payment:coins=yes with a fixed text, namely 'Coins are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
},
{
"key": "payment:notes",
"description": "Layer 'Bicycle tube vending machine' shows payment:notes=yes with a fixed text, namely 'Bank notes are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
},
{
"key": "payment:debit_cards",
"description": "Layer 'Bicycle tube vending machine' shows payment:debit_cards=yes with a fixed text, namely 'Debit cards are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
},
{
"key": "payment:credit_cards",
"description": "Layer 'Bicycle tube vending machine' shows payment:credit_cards=yes with a fixed text, namely 'Credit cards are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
},
{
@ -1031,29 +1051,34 @@
"value": "Continental"
},
{
"key": "vending:bicycle_light",
"description": "Layer 'Bicycle tube vending machine' shows vending:bicycle_light=yes with a fixed text, namely 'Bicycle lights are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
"key": "vending",
"description": "Layer 'Bicycle tube vending machine' shows vending=bicycle_tube with a fixed text, namely 'Bicycle inner tubes are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "bicycle_tube"
},
{
"key": "vending:gloves",
"description": "Layer 'Bicycle tube vending machine' shows vending:gloves=yes with a fixed text, namely 'Gloves are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
"key": "vending",
"description": "Layer 'Bicycle tube vending machine' shows vending=bicycle_light with a fixed text, namely 'Bicycle lights are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "bicycle_light"
},
{
"key": "vending:bicycle_repair_kit",
"description": "Layer 'Bicycle tube vending machine' shows vending:bicycle_repair_kit=yes with a fixed text, namely 'Bicycle repair kits are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
"key": "vending",
"description": "Layer 'Bicycle tube vending machine' shows vending=gloves with a fixed text, namely 'Gloves are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "gloves"
},
{
"key": "vending:bicycle_pump",
"description": "Layer 'Bicycle tube vending machine' shows vending:bicycle_pump=yes with a fixed text, namely 'Bicycle pumps are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
"key": "vending",
"description": "Layer 'Bicycle tube vending machine' shows vending=bicycle_repair_kit with a fixed text, namely 'Bicycle repair kits are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "bicycle_repair_kit"
},
{
"key": "vending:bicycle_lock",
"description": "Layer 'Bicycle tube vending machine' shows vending:bicycle_lock=yes with a fixed text, namely 'Bicycle locks are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "yes"
"key": "vending",
"description": "Layer 'Bicycle tube vending machine' shows vending=bicycle_pump with a fixed text, namely 'Bicycle pumps are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "bicycle_pump"
},
{
"key": "vending",
"description": "Layer 'Bicycle tube vending machine' shows vending=bicycle_lock with a fixed text, namely 'Bicycle locks are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
"value": "bicycle_lock"
},
{
"key": "amenity",

View file

@ -215,6 +215,186 @@
"key": "name:etymology:wikidata",
"description": "Layer 'Indoors' shows and asks freeform values for key 'name:etymology:wikidata' (in the mapcomplete.org theme 'Indoors') (This is only shown if name:etymology!=unknown)"
},
{
"key": "access",
"description": "Layer 'Indoors' shows and asks freeform values for key 'access' (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)"
},
{
"key": "access",
"description": "Layer 'Indoors' shows access=yes with a fixed text, namely 'Public access' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "yes"
},
{
"key": "access",
"description": "Layer 'Indoors' shows access=customers with a fixed text, namely 'Only access to customers' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "customers"
},
{
"key": "access",
"description": "Layer 'Indoors' shows access=no with a fixed text, namely 'Not accessible' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "no"
},
{
"key": "access",
"description": "Layer 'Indoors' shows access=key with a fixed text, namely 'Accessible, but one has to ask a key to enter' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "key"
},
{
"key": "access",
"description": "Layer 'Indoors' shows access=public with a fixed text, namely 'Public access' (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "public"
},
{
"key": "fee",
"description": "Layer 'Indoors' shows fee=yes with a fixed text, namely 'These are paid toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&access!=no)",
"value": "yes"
},
{
"key": "fee",
"description": "Layer 'Indoors' shows fee=no with a fixed text, namely 'Free to use' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&access!=no)",
"value": "no"
},
{
"key": "charge",
"description": "Layer 'Indoors' shows and asks freeform values for key 'charge' (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&fee=yes)"
},
{
"key": "payment:cash",
"description": "Layer 'Indoors' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "payment:cards",
"description": "Layer 'Indoors' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "payment:qr_code",
"description": "Layer 'Indoors' shows payment:qr_code=yes with a fixed text, namely 'Payment by QR-code is possible here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "payment:coins",
"description": "Layer 'Indoors' shows payment:coins=yes with a fixed text, namely 'Coins are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "payment:notes",
"description": "Layer 'Indoors' shows payment:notes=yes with a fixed text, namely 'Bank notes are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "payment:debit_cards",
"description": "Layer 'Indoors' shows payment:debit_cards=yes with a fixed text, namely 'Debit cards are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "payment:credit_cards",
"description": "Layer 'Indoors' shows payment:credit_cards=yes with a fixed text, namely 'Credit cards are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "opening_hours",
"description": "Layer 'Indoors' shows and asks freeform values for key 'opening_hours' (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&access!=no)"
},
{
"key": "opening_hours",
"description": "Layer 'Indoors' shows opening_hours=24/7 with a fixed text, namely '24/7 opened (including holidays)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&access!=no)",
"value": "24/7"
},
{
"key": "wheelchair",
"description": "Layer 'Indoors' shows wheelchair=yes with a fixed text, namely 'There is a dedicated toilet for wheelchair users' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "yes"
},
{
"key": "wheelchair",
"description": "Layer 'Indoors' shows wheelchair=no with a fixed text, namely 'No wheelchair access' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "no"
},
{
"key": "wheelchair",
"description": "Layer 'Indoors' shows wheelchair=designated with a fixed text, namely 'There is only a dedicated toilet for wheelchair users' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "designated"
},
{
"key": "door:width",
"description": "Layer 'Indoors' shows and asks freeform values for key 'door:width' (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&wheelchair=yes|wheelchair=designated)"
},
{
"key": "toilets:position",
"description": "Layer 'Indoors' shows toilets:position=seated with a fixed text, namely 'There are only seated toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "seated"
},
{
"key": "toilets:position",
"description": "Layer 'Indoors' shows toilets:position=urinal with a fixed text, namely 'There are only urinals here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "urinal"
},
{
"key": "toilets:position",
"description": "Layer 'Indoors' shows toilets:position=squat with a fixed text, namely 'There are only squat toilets here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "squat"
},
{
"key": "toilets:position",
"description": "Layer 'Indoors' shows toilets:position=seated;urinal with a fixed text, namely 'Both seated toilets and urinals are available here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "seated;urinal"
},
{
"key": "changing_table",
"description": "Layer 'Indoors' shows changing_table=yes with a fixed text, namely 'A changing table is available' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "yes"
},
{
"key": "changing_table",
"description": "Layer 'Indoors' shows changing_table=no with a fixed text, namely 'No changing table is available' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "no"
},
{
"key": "changing_table:location",
"description": "Layer 'Indoors' shows and asks freeform values for key 'changing_table:location' (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&changing_table=yes)"
},
{
"key": "changing_table:location",
"description": "Layer 'Indoors' shows changing_table:location=female_toilet with a fixed text, namely 'The changing table is in the toilet for women. ' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&changing_table=yes)",
"value": "female_toilet"
},
{
"key": "changing_table:location",
"description": "Layer 'Indoors' shows changing_table:location=male_toilet with a fixed text, namely 'The changing table is in the toilet for men. ' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&changing_table=yes)",
"value": "male_toilet"
},
{
"key": "changing_table:location",
"description": "Layer 'Indoors' shows changing_table:location=wheelchair_toilet with a fixed text, namely 'The changing table is in the toilet for wheelchair users. ' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&changing_table=yes)",
"value": "wheelchair_toilet"
},
{
"key": "changing_table:location",
"description": "Layer 'Indoors' shows changing_table:location=dedicated_room with a fixed text, namely 'The changing table is in a dedicated room. ' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&changing_table=yes)",
"value": "dedicated_room"
},
{
"key": "toilets:handwashing",
"description": "Layer 'Indoors' shows toilets:handwashing=yes with a fixed text, namely 'This toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "yes"
},
{
"key": "toilets:handwashing",
"description": "Layer 'Indoors' shows toilets:handwashing=no with a fixed text, namely 'This toilets <b>don't</b> have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets)",
"value": "no"
},
{
"key": "toilets:paper_supplied",
"description": "Layer 'Indoors' shows toilets:paper_supplied=yes with a fixed text, namely 'This toilet is equipped with toilet paper' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&toilets:position!=urinal)",
"value": "yes"
},
{
"key": "toilets:paper_supplied",
"description": "Layer 'Indoors' shows toilets:paper_supplied=no with a fixed text, namely 'You have to bring your own toilet paper to this toilet' and allows to pick this as a default answer (in the mapcomplete.org theme 'Indoors') (This is only shown if amenity=toilets&toilets:position!=urinal)",
"value": "no"
},
{
"key": "highway",
"description": "The MapComplete theme Indoors has a layer Pedestrian paths showing features with this tag",

View file

@ -1514,18 +1514,38 @@
"description": "Layer 'Bicycle tube vending machine' shows and asks freeform values for key 'charge' (in the mapcomplete.org theme 'Personal theme')"
},
{
"key": "payment:coins",
"description": "Layer 'Bicycle tube vending machine' shows payment:coins=yes with a fixed text, namely 'Payment with coins is possible' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
},
{
"key": "payment:notes",
"description": "Layer 'Bicycle tube vending machine' shows payment:notes=yes with a fixed text, namely 'Payment with notes is possible' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"key": "payment:cash",
"description": "Layer 'Bicycle tube vending machine' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
},
{
"key": "payment:cards",
"description": "Layer 'Bicycle tube vending machine' shows payment:cards=yes with a fixed text, namely 'Payment with cards is possible' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"description": "Layer 'Bicycle tube vending machine' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
},
{
"key": "payment:qr_code",
"description": "Layer 'Bicycle tube vending machine' shows payment:qr_code=yes with a fixed text, namely 'Payment by QR-code is possible here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
},
{
"key": "payment:coins",
"description": "Layer 'Bicycle tube vending machine' shows payment:coins=yes with a fixed text, namely 'Coins are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
},
{
"key": "payment:notes",
"description": "Layer 'Bicycle tube vending machine' shows payment:notes=yes with a fixed text, namely 'Bank notes are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
},
{
"key": "payment:debit_cards",
"description": "Layer 'Bicycle tube vending machine' shows payment:debit_cards=yes with a fixed text, namely 'Debit cards are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
},
{
"key": "payment:credit_cards",
"description": "Layer 'Bicycle tube vending machine' shows payment:credit_cards=yes with a fixed text, namely 'Credit cards are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
},
{
@ -1557,29 +1577,34 @@
"value": "Continental"
},
{
"key": "vending:bicycle_light",
"description": "Layer 'Bicycle tube vending machine' shows vending:bicycle_light=yes with a fixed text, namely 'Bicycle lights are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
"key": "vending",
"description": "Layer 'Bicycle tube vending machine' shows vending=bicycle_tube with a fixed text, namely 'Bicycle inner tubes are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "bicycle_tube"
},
{
"key": "vending:gloves",
"description": "Layer 'Bicycle tube vending machine' shows vending:gloves=yes with a fixed text, namely 'Gloves are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
"key": "vending",
"description": "Layer 'Bicycle tube vending machine' shows vending=bicycle_light with a fixed text, namely 'Bicycle lights are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "bicycle_light"
},
{
"key": "vending:bicycle_repair_kit",
"description": "Layer 'Bicycle tube vending machine' shows vending:bicycle_repair_kit=yes with a fixed text, namely 'Bicycle repair kits are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
"key": "vending",
"description": "Layer 'Bicycle tube vending machine' shows vending=gloves with a fixed text, namely 'Gloves are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "gloves"
},
{
"key": "vending:bicycle_pump",
"description": "Layer 'Bicycle tube vending machine' shows vending:bicycle_pump=yes with a fixed text, namely 'Bicycle pumps are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
"key": "vending",
"description": "Layer 'Bicycle tube vending machine' shows vending=bicycle_repair_kit with a fixed text, namely 'Bicycle repair kits are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "bicycle_repair_kit"
},
{
"key": "vending:bicycle_lock",
"description": "Layer 'Bicycle tube vending machine' shows vending:bicycle_lock=yes with a fixed text, namely 'Bicycle locks are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
"key": "vending",
"description": "Layer 'Bicycle tube vending machine' shows vending=bicycle_pump with a fixed text, namely 'Bicycle pumps are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "bicycle_pump"
},
{
"key": "vending",
"description": "Layer 'Bicycle tube vending machine' shows vending=bicycle_lock with a fixed text, namely 'Bicycle locks are sold here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "bicycle_lock"
},
{
"key": "amenity",
@ -8548,6 +8573,186 @@
"key": "name:etymology:wikidata",
"description": "Layer 'Indoors' shows and asks freeform values for key 'name:etymology:wikidata' (in the mapcomplete.org theme 'Personal theme') (This is only shown if name:etymology!=unknown)"
},
{
"key": "access",
"description": "Layer 'Indoors' shows and asks freeform values for key 'access' (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)"
},
{
"key": "access",
"description": "Layer 'Indoors' shows access=yes with a fixed text, namely 'Public access' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "yes"
},
{
"key": "access",
"description": "Layer 'Indoors' shows access=customers with a fixed text, namely 'Only access to customers' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "customers"
},
{
"key": "access",
"description": "Layer 'Indoors' shows access=no with a fixed text, namely 'Not accessible' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "no"
},
{
"key": "access",
"description": "Layer 'Indoors' shows access=key with a fixed text, namely 'Accessible, but one has to ask a key to enter' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "key"
},
{
"key": "access",
"description": "Layer 'Indoors' shows access=public with a fixed text, namely 'Public access' (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "public"
},
{
"key": "fee",
"description": "Layer 'Indoors' shows fee=yes with a fixed text, namely 'These are paid toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&access!=no)",
"value": "yes"
},
{
"key": "fee",
"description": "Layer 'Indoors' shows fee=no with a fixed text, namely 'Free to use' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&access!=no)",
"value": "no"
},
{
"key": "charge",
"description": "Layer 'Indoors' shows and asks freeform values for key 'charge' (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&fee=yes)"
},
{
"key": "payment:cash",
"description": "Layer 'Indoors' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "payment:cards",
"description": "Layer 'Indoors' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "payment:qr_code",
"description": "Layer 'Indoors' shows payment:qr_code=yes with a fixed text, namely 'Payment by QR-code is possible here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "payment:coins",
"description": "Layer 'Indoors' shows payment:coins=yes with a fixed text, namely 'Coins are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "payment:notes",
"description": "Layer 'Indoors' shows payment:notes=yes with a fixed text, namely 'Bank notes are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "payment:debit_cards",
"description": "Layer 'Indoors' shows payment:debit_cards=yes with a fixed text, namely 'Debit cards are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "payment:credit_cards",
"description": "Layer 'Indoors' shows payment:credit_cards=yes with a fixed text, namely 'Credit cards are accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&fee=yes)",
"value": "yes"
},
{
"key": "opening_hours",
"description": "Layer 'Indoors' shows and asks freeform values for key 'opening_hours' (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&access!=no)"
},
{
"key": "opening_hours",
"description": "Layer 'Indoors' shows opening_hours=24/7 with a fixed text, namely '24/7 opened (including holidays)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&access!=no)",
"value": "24/7"
},
{
"key": "wheelchair",
"description": "Layer 'Indoors' shows wheelchair=yes with a fixed text, namely 'There is a dedicated toilet for wheelchair users' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "yes"
},
{
"key": "wheelchair",
"description": "Layer 'Indoors' shows wheelchair=no with a fixed text, namely 'No wheelchair access' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "no"
},
{
"key": "wheelchair",
"description": "Layer 'Indoors' shows wheelchair=designated with a fixed text, namely 'There is only a dedicated toilet for wheelchair users' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "designated"
},
{
"key": "door:width",
"description": "Layer 'Indoors' shows and asks freeform values for key 'door:width' (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&wheelchair=yes|wheelchair=designated)"
},
{
"key": "toilets:position",
"description": "Layer 'Indoors' shows toilets:position=seated with a fixed text, namely 'There are only seated toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "seated"
},
{
"key": "toilets:position",
"description": "Layer 'Indoors' shows toilets:position=urinal with a fixed text, namely 'There are only urinals here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "urinal"
},
{
"key": "toilets:position",
"description": "Layer 'Indoors' shows toilets:position=squat with a fixed text, namely 'There are only squat toilets here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "squat"
},
{
"key": "toilets:position",
"description": "Layer 'Indoors' shows toilets:position=seated;urinal with a fixed text, namely 'Both seated toilets and urinals are available here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "seated;urinal"
},
{
"key": "changing_table",
"description": "Layer 'Indoors' shows changing_table=yes with a fixed text, namely 'A changing table is available' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "yes"
},
{
"key": "changing_table",
"description": "Layer 'Indoors' shows changing_table=no with a fixed text, namely 'No changing table is available' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "no"
},
{
"key": "changing_table:location",
"description": "Layer 'Indoors' shows and asks freeform values for key 'changing_table:location' (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&changing_table=yes)"
},
{
"key": "changing_table:location",
"description": "Layer 'Indoors' shows changing_table:location=female_toilet with a fixed text, namely 'The changing table is in the toilet for women. ' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&changing_table=yes)",
"value": "female_toilet"
},
{
"key": "changing_table:location",
"description": "Layer 'Indoors' shows changing_table:location=male_toilet with a fixed text, namely 'The changing table is in the toilet for men. ' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&changing_table=yes)",
"value": "male_toilet"
},
{
"key": "changing_table:location",
"description": "Layer 'Indoors' shows changing_table:location=wheelchair_toilet with a fixed text, namely 'The changing table is in the toilet for wheelchair users. ' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&changing_table=yes)",
"value": "wheelchair_toilet"
},
{
"key": "changing_table:location",
"description": "Layer 'Indoors' shows changing_table:location=dedicated_room with a fixed text, namely 'The changing table is in a dedicated room. ' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&changing_table=yes)",
"value": "dedicated_room"
},
{
"key": "toilets:handwashing",
"description": "Layer 'Indoors' shows toilets:handwashing=yes with a fixed text, namely 'This toilets have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "yes"
},
{
"key": "toilets:handwashing",
"description": "Layer 'Indoors' shows toilets:handwashing=no with a fixed text, namely 'This toilets <b>don't</b> have a sink to wash your hands' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets)",
"value": "no"
},
{
"key": "toilets:paper_supplied",
"description": "Layer 'Indoors' shows toilets:paper_supplied=yes with a fixed text, namely 'This toilet is equipped with toilet paper' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&toilets:position!=urinal)",
"value": "yes"
},
{
"key": "toilets:paper_supplied",
"description": "Layer 'Indoors' shows toilets:paper_supplied=no with a fixed text, namely 'You have to bring your own toilet paper to this toilet' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if amenity=toilets&toilets:position!=urinal)",
"value": "no"
},
{
"key": "information",
"description": "The MapComplete theme Personal theme has a layer Information boards showing features with this tag",
@ -14229,6 +14434,11 @@
"description": "Layer 'Vending Machines' shows vending=potatoes with a fixed text, namely 'Potatoes are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "potatoes"
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=meat with a fixed text, namely 'Meat is sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "meat"
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=flowers with a fixed text, namely 'Flowers are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
@ -14251,8 +14461,28 @@
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=meat with a fixed text, namely 'Meat products are being sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "meat"
"description": "Layer 'Vending Machines' shows vending=bicycle_light with a fixed text, namely 'Bicycle lights are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "bicycle_light"
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=gloves with a fixed text, namely 'Gloves are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "gloves"
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=bicycle_repair_kit with a fixed text, namely 'Bicycle repair kits are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "bicycle_repair_kit"
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=bicycle_pump with a fixed text, namely 'Bicycle pumps are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "bicycle_pump"
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=bicycle_lock with a fixed text, namely 'Bicycle locks are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "bicycle_lock"
},
{
"key": "opening_hours",
@ -14587,6 +14817,11 @@
"description": "Layer 'Waste Basket' shows waste=plastic with a fixed text, namely 'A waste basket for plastic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "plastic"
},
{
"key": "waste",
"description": "Layer 'Waste Basket' shows waste=paper with a fixed text, namely 'A waste basket for paper' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "paper"
},
{
"key": "vending",
"description": "Layer 'Waste Basket' shows vending=dog_excrement_bag with a fixed text, namely 'This waste basket has a dispenser for (dog) excrement bags' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if waste=dog_excrement|waste=trash|)",

View file

@ -114,6 +114,11 @@
"description": "Layer 'Vending Machines' shows vending=potatoes with a fixed text, namely 'Potatoes are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Vending Machines')",
"value": "potatoes"
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=meat with a fixed text, namely 'Meat is sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Vending Machines')",
"value": "meat"
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=flowers with a fixed text, namely 'Flowers are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Vending Machines')",
@ -136,8 +141,28 @@
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=meat with a fixed text, namely 'Meat products are being sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Vending Machines')",
"value": "meat"
"description": "Layer 'Vending Machines' shows vending=bicycle_light with a fixed text, namely 'Bicycle lights are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Vending Machines')",
"value": "bicycle_light"
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=gloves with a fixed text, namely 'Gloves are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Vending Machines')",
"value": "gloves"
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=bicycle_repair_kit with a fixed text, namely 'Bicycle repair kits are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Vending Machines')",
"value": "bicycle_repair_kit"
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=bicycle_pump with a fixed text, namely 'Bicycle pumps are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Vending Machines')",
"value": "bicycle_pump"
},
{
"key": "vending",
"description": "Layer 'Vending Machines' shows vending=bicycle_lock with a fixed text, namely 'Bicycle locks are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Vending Machines')",
"value": "bicycle_lock"
},
{
"key": "opening_hours",

View file

@ -70,6 +70,11 @@
"description": "Layer 'Waste Basket' shows waste=plastic with a fixed text, namely 'A waste basket for plastic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Waste')",
"value": "plastic"
},
{
"key": "waste",
"description": "Layer 'Waste Basket' shows waste=paper with a fixed text, namely 'A waste basket for paper' and allows to pick this as a default answer (in the mapcomplete.org theme 'Waste')",
"value": "paper"
},
{
"key": "vending",
"description": "Layer 'Waste Basket' shows vending=dog_excrement_bag with a fixed text, namely 'This waste basket has a dispenser for (dog) excrement bags' and allows to pick this as a default answer (in the mapcomplete.org theme 'Waste') (This is only shown if waste=dog_excrement|waste=trash|)",

View file

@ -70,6 +70,11 @@
"description": "Layer 'Waste Basket' shows waste=plastic with a fixed text, namely 'A waste basket for plastic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Waste Basket')",
"value": "plastic"
},
{
"key": "waste",
"description": "Layer 'Waste Basket' shows waste=paper with a fixed text, namely 'A waste basket for paper' and allows to pick this as a default answer (in the mapcomplete.org theme 'Waste Basket')",
"value": "paper"
},
{
"key": "vending",
"description": "Layer 'Waste Basket' shows vending=dog_excrement_bag with a fixed text, namely 'This waste basket has a dispenser for (dog) excrement bags' and allows to pick this as a default answer (in the mapcomplete.org theme 'Waste Basket') (This is only shown if waste=dog_excrement|waste=trash|)",

View file

@ -293,10 +293,13 @@
"internet-ssid",
"reviews"
],
"minzoom": 12,
"filter": [
"open_now",
"accepts_cash",
"accepts_cards"
"accepts_cards",
"has_internet",
"has_electricity"
],
"deletion": {
"softDeletionTags": {

View file

@ -147,7 +147,8 @@
"fr": "<h3>Contient {_contained_climbing_routes_count} voies</h3> <ul>{_contained_climbing_routes}</ul>",
"it": "<h3>Contiene {_contained_climbing_routes_count} vie</h3> <ul>{_contained_climbing_routes}</ul>",
"de": "<h3> Enthält {_contained_climbing_routes_count} Routen</h3> <ul>{_contained_climbing_routes}</ul>",
"nl": "<h3>Bevat {_contained_climbing_routes_count} routes</h3> <ul>{_contained_climbing_routes}</ul>"
"nl": "<h3>Bevat {_contained_climbing_routes_count} routes</h3> <ul>{_contained_climbing_routes}</ul>",
"ca": "<h3>Conté {_contained_climbing_routes_count} rutes</h3> <ul>{_contained_climbing_routes}</ul>"
},
"condition": "_contained_climbing_routes~*",
"id": "Contained_climbing_routes"
@ -206,7 +207,8 @@
"fr": "Rocher descalade, rocher avec une ou peu de voie permettant descalader sans corde",
"de": "Ein Kletterfelsen - ein einzelner Felsen oder eine Klippe mit einer oder wenigen Kletterrouten, die ohne Seil sicher bestiegen werden können",
"it": "Un masso per arrampicata (una singola roccia o falesia con una o poche vie di arrampicata che possono essere scalate in sicurezza senza una corda)",
"nl": "Een klimboulder - een enkele rots of klif met één of enkele klimroutes die veilig zonder touw kunnen worden beklommen"
"nl": "Een klimboulder - een enkele rots of klif met één of enkele klimroutes die veilig zonder touw kunnen worden beklommen",
"ca": "Una roca d'escalada: una única roca o penya-segat amb una o unes quantes vies d'escalada que es poden escalar amb seguretat sense corda"
}
},
{
@ -256,7 +258,8 @@
"de": "Kalkstein",
"it": "Calcare",
"pa_PK": "چونہ پتھر",
"eu": "Kareharria"
"eu": "Kareharria",
"ca": "Calcària"
}
}
],

View file

@ -272,6 +272,33 @@
"osmTags": "dog=no"
}
]
},
{
"id": "has_internet",
"options": [
{
"question": {
"en": "Offers internet"
},
"osmTags": {
"or": [
"internet_access=wlan",
"internet_access=yes",
"internet_access=wired"
]
}
}
]
},
{"id": "has_electricity",
"options": [
{
"question": {
"en": "Offers electricity"
},
"osmTags": "service:electricity=yes"
}
]
}
]
}

View file

@ -250,7 +250,8 @@
"it": "Piazzata in data {start_date}",
"fr": "Placé le {start_date}",
"ru": "Установлен {start_date}",
"de": "Aufgestellt am {start_date}"
"de": "Aufgestellt am {start_date}",
"ca": "Col·locat el {start_date}"
},
"freeform": {
"key": "start_date",

View file

@ -342,7 +342,9 @@
"en": "These are toilets"
},
"icon": "./assets/layers/indoors/room_toilets.svg",
"addExtraTags": ["amenity=toilets"]
"addExtraTags": [
"amenity=toilets"
]
},
{
"if": "room=waiting",
@ -384,7 +386,9 @@
"builtin": "toilet.relevant-questions",
"override": {
"condition": {
"+and": ["amenity=toilets"]
"+and": [
"amenity=toilets"
]
}
}
}

View file

@ -47,6 +47,7 @@
"minzoom": 13,
"tagRenderings": [
"images",
"reviews",
{
"id": "name",
"freeform": {

View file

@ -51,7 +51,8 @@
"en": "{sport} is played here",
"it": "Qui si gioca a {sport}",
"de": "Hier wird {sport} gespielt",
"es": "Aquí se juega al {sport}"
"es": "Aquí se juega al {sport}",
"ca": "{sport} es juga aquí"
},
"freeform": {
"key": "sport"
@ -62,7 +63,8 @@
"en": "Which sport can be played here?",
"it": "Quale sport si gioca qui?",
"de": "Welche Sportarten können hier gespielt werden?",
"es": "¿Qué deporte se practica aquí?"
"es": "¿Qué deporte se puede practicar aquí?",
"ca": "Quin esport es pot practicar aquí?"
},
"multiAnswer": true,
"mappings": [
@ -172,7 +174,8 @@
"then": {
"en": "This is a skatepark",
"nl": "Dit is een skatepark",
"de": "Dies ist ein Skatepark"
"de": "Dies ist ein Skatepark",
"ca": "Açò és un skatepark"
}
}
],
@ -235,7 +238,8 @@
"ru": "Поверхность - <b>{surface}</b>",
"it": "La superficie è <b>{surface}</b>",
"de": "Der Belag ist <b>{surface}</b>",
"es": "La superficie es <b>{surface}</b>"
"es": "La superficie es <b>{surface}</b>",
"ca": "La superfícies és <b>{surface}</b>"
},
"freeform": {
"key": "surface"

View file

@ -2,11 +2,13 @@
"id": "sports_centre",
"name": {
"en": "Sports centres",
"de": "Sportzentren"
"de": "Sportzentren",
"ca": "Centres esportius"
},
"description": {
"en": "Indoor and outdoor sports centres can be found on this layer",
"de": "Hallen- und Freiluftsportzentren sind auf dieser Ebene zu finden"
"de": "Hallen- und Freiluftsportzentren sind auf dieser Ebene zu finden",
"ca": "En aquesta capa es poden trobar centres esportius interiors i exteriors"
},
"minzoom": 12,
"source": {
@ -15,7 +17,8 @@
"title": {
"render": {
"en": "Sports centre",
"de": "Sportzentrum"
"de": "Sportzentrum",
"ca": "Centre esportiu"
},
"mappings": [
{
@ -36,7 +39,8 @@
{
"title": {
"en": "a sports centre",
"de": "ein Sportzentrum"
"de": "ein Sportzentrum",
"ca": "un centre esportiu"
},
"tags": [
"leisure=sports_centre"

View file

@ -9,7 +9,8 @@
"description": {
"en": "Layer showing stairs and escalators",
"de": "Ebene mit Treppen und Rolltreppen",
"nl": "Laag met trappen en roltrappen"
"nl": "Laag met trappen en roltrappen",
"ca": "Capa que mostra escales i escales mecàniques"
},
"title": {
"render": {

View file

@ -349,7 +349,8 @@
"fr": "À quel niveau se trouve cette caméra ?",
"it": "A che piano si trova questa videocamera?",
"de": "Auf welcher Ebene befindet sich diese Kamera?",
"es": "¿A qué nivel está colocada esta cámara?"
"es": "¿A qué nivel está colocada esta cámara?",
"ca": "A quina planta es troba aquesta càmera?"
},
"render": {
"en": "Located on level {level}",

View file

@ -5,7 +5,8 @@
"nl": "Universiteiten en hogescholen",
"de": "Hochschulen und Universitäten",
"fr": "Collèges et universités",
"da": "Gymnasier og universiteter"
"da": "Gymnasier og universiteter",
"ca": "Instituts superiors i universitats"
},
"description": "Layer with all tertiary education institutes (ISCED:2011 levels 6,7 and 8)",
"source": {
@ -42,7 +43,8 @@
"nl": "Hogeschool",
"de": "(Fach)hochschule",
"fr": "Établissement d'enseignement supérieur non universitaire",
"pa_PK": "کالج"
"pa_PK": "کالج",
"ca": "Institut superior"
}
},
{
@ -64,7 +66,8 @@
"nl": "Onderwijsinstelling die tertiair onderwijs geeft",
"de": "Schule mit tertiärem Bildungsangebot",
"fr": "École dispensant un enseignement supérieur",
"da": "Skole, der udbyder videregående uddannelser"
"da": "Skole, der udbyder videregående uddannelser",
"ca": "Escola que imparteix educació terciària"
}
}
]
@ -88,7 +91,8 @@
"nl": "Dit is een onderwijsinstelling waar post-secundair, niet-tertiair onderwijs wordt gegeven. Om dit onderwijs te volgen, moet je je secundair onderwijs afgewerkt hebben maar de opleiding behaalt niet het niveau van van een bachelor.",
"de": "Es handelt sich um eine postsekundäre, nicht-tertiäre Bildungseinrichtung. Man muss die Sekundarstufe abgeschlossen haben, um sich hier einzuschreiben, aber es werden keine Bachelor-Abschlüsse (oder höhere Abschlüsse) verliehen",
"fr": "C'est un établissement d'enseignement post-secondaire, non tertiaire. Il faut avoir terminé l'enseignement secondaire pour s'inscrire ici, mais aucun baccalauréat (ou diplôme supérieur) n'est délivré ici",
"da": "Dette er en institution for post-gymnasial, ikke-tertiær uddannelse. Man skal have gennemført en ungdomsuddannelse for at tilmelde sig her, men her uddeles ingen bachelor (eller højere) grader"
"da": "Dette er en institution for post-gymnasial, ikke-tertiær uddannelse. Man skal have gennemført en ungdomsuddannelse for at tilmelde sig her, men her uddeles ingen bachelor (eller højere) grader",
"ca": "Aquesta és una institució d'educació postsecundària i no terciària. S'ha d'haver completat l'educació secundària per matricular-se aquí, però aquí no s'obtenen títols de batxillerat (o superiors)"
}
},
{
@ -202,7 +206,8 @@
"en": "An institute where tertiary education is given (at the level equivalent of a bachelors degree or higher). A single point per campus is enough - buildings and faculties should not be mapped with different university points.",
"nl": "Een onderwijsinstelling waar tertiair onderwijs wordt gegeven - dit is onderwijs waarvan het niveau overeenkomt met een bachelor of hoger is. Eén enkel punt per campus is genoeg - gebouwen en faculteiten worden hier niet op aangeduid.",
"de": "Eine Einrichtung, an der tertiäre Bildung vermittelt wird (auf dem Niveau eines Bachelor-Abschlusses oder höher). Ein einziger Punkt pro Campus ist ausreichend - Gebäude und Fakultäten sollten nicht mit Universitätspunkten gekennzeichnet werden.",
"fr": "Un institut où l'on dispense un enseignement supérieur (au niveau équivalent à un bachelor ou plus). Un simple point par campus est suffisant - les bâtiments et les facultés ne doivent pas être cartographiés avec différents points d'université."
"fr": "Un institut où l'on dispense un enseignement supérieur (au niveau équivalent à un bachelor ou plus). Un simple point par campus est suffisant - les bâtiments et les facultés ne doivent pas être cartographiés avec différents points d'université.",
"ca": "Un institut on s'imparteix ensenyament terciari (al nivell equivalent de batxillerat o superior). N'hi ha prou amb un únic punt per campus: els edificis i les facultats no s'han de cartografiar amb diferents punts universitaris."
},
"tags": [
"amenity=university",

View file

@ -530,7 +530,9 @@
"ca": "El cambiador està a {changing_table:location}"
},
"condition": {
"and":["changing_table=yes"]
"and": [
"changing_table=yes"
]
},
"freeform": {
"key": "changing_table:location",

View file

@ -14,7 +14,8 @@
"render": {
"en": "Toilet at amenity",
"de": "Toilette in Einrichtung",
"nl": "Toilet in een voorziening"
"nl": "Toilet in een voorziening",
"ca": "Lavabo a la instal·lació"
},
"mappings": [
{
@ -22,7 +23,8 @@
"then": {
"en": "Toilet at {name}",
"de": "Toilette in {name}",
"nl": "Toilet bij {name}"
"nl": "Toilet bij {name}",
"ca": "Bany a {name}"
}
}
]
@ -197,7 +199,8 @@
"condition": "toilets:access!=no",
"question": {
"en": "When is the amenity where these toilets are located open?",
"de": "Wann ist der Ort, an dem sich diese Toiletten befinden, geöffnet?"
"de": "Wann ist der Ort, an dem sich diese Toiletten befinden, geöffnet?",
"ca": "Quan està oberta la instal·lació on es troben aquests lavabos?"
}
}
},
@ -273,7 +276,8 @@
"nl": "De deur naar de rolstoeltoegankelijke toilet is {canonical(toilets:door:width)} wide",
"fr": "La porte des toilettes accessibles aux fauteuils roulants a une large de {canonical(toilets:door:width)}",
"de": "Die Tür zur rollstuhlgerechten Toilette ist {canonical(toilets:door:width)} breit",
"da": "Døren til det kørestolsvenlige toilet er {canonical(toilets:door:width)} bred"
"da": "Døren til det kørestolsvenlige toilet er {canonical(toilets:door:width)} bred",
"ca": "La porta del vàter accessible amb cadira de rodes és {canonical(toilets:door:width)} d'ample"
},
"freeform": {
"key": "toilets:door:width",
@ -329,7 +333,8 @@
"nl": "Gratis toegankelijk",
"de": "Nutzung kostenlos",
"fr": "Utilisation gratuite",
"da": "Gratis at bruge"
"da": "Gratis at bruge",
"ca": "Ús gratuït"
},
"osmTags": {
"or": [

View file

@ -10,7 +10,8 @@
"description": {
"en": "Layer showing different types of transit stops.",
"de": "Ebene mit verschiedenen Arten von Haltestellen.",
"da": "Lag, der viser forskellige typer transitstop."
"da": "Lag, der viser forskellige typer transitstop.",
"ca": "Capa que mostra diferents tipus de parades de transport públic"
},
"source": {
"osmTags": {
@ -25,7 +26,8 @@
"en": "Transit Stop",
"de": "Haltestelle",
"da": "Transit Stop",
"nl": "Bushalte"
"nl": "Bushalte",
"ca": "Parada de transport públic"
},
"mappings": [
{
@ -53,13 +55,6 @@
"label": "<div style=\"background: white; display: block\">{name}</div>"
}
],
"calculatedTags": [
"_routes=feat.memberships()",
"_contained_routes_properties=feat.memberships().map(p => {return {id: p.relation.id, name: p.relation.properties.name} }).filter((v,i,a)=>a.findIndex(t=>(JSON.stringify(t) === JSON.stringify(v)))===i)",
"_contained_route_ids=JSON.parse(feat.properties._contained_routes_properties ?? '[]').map(p => p.id)",
"_contained_routes=JSON.parse(feat.properties._contained_routes_properties ?? '[]').map(p => `<li><a href='#relation/${p.id}'>${p.name ?? 'bus route'}</a></li>`).join('')",
"_contained_routes_count=JSON.parse(feat.properties._contained_routes_properties ?? '[]').length"
],
"tagRenderings": [
{
"id": "stop_name",

View file

@ -915,7 +915,7 @@
"nl": "Verkoop van bloemen",
"de": "Verkauf von Blumen",
"fr": "Vente de fleurs",
"ca": "Venda de flors"
"ca": "Venda d'aparcament"
},
"osmTags": "vending~i~.*flowers.*"
},
@ -923,21 +923,21 @@
"osmTags": "vending~i~.*parking_tickets.*",
"question": {
"en": "Sale of parking tickets",
"ca": "Venda d'aparcament"
"ca": "Venda de monedes premsades"
}
},
{
"osmTags": "vending=elongated_coin",
"question": {
"en": "Sale of pressed pennies",
"ca": "Venda de monedes premsades"
"ca": "Venda de bitllets de transport públic"
}
},
{
"osmTags": "vending~i~.*public_transport_tickets.*",
"question": {
"en": "Sale of public transport tickets",
"ca": "Venda de bitllets de transport públic"
"ca": "Venda de productes carnis"
}
},
{

View file

@ -461,8 +461,12 @@
]
}
},
"drinking_water",
"toilet"
{
"builtin": ["toilet","drinking_water"],
"override": {
"minzoom": 15
}
}
],
"credits": "Christian Neumann <christian@utopicode.de>"
}
}

View file

@ -197,6 +197,7 @@
"example": "Exemple",
"examples": "Exemples",
"fewChangesBefore": "Contesta unes quantes preguntes sobre elements existents abans d'afegir-ne un de nou.",
"geopermissionDenied": "Es va denegar l'ús de la geolocalització",
"getStartedLogin": "Entra a OpenStreetMap per començar",
"getStartedNewAccount": " o <a href=\"https://www.openstreetmap.org/user/new\" target=\"_blank\">crea un nou compte</a>",
"goToInbox": "Obrir missatges",
@ -556,11 +557,16 @@
"reviews": {
"affiliated_reviewer_warning": "(Ressenya afiliada)",
"attribution": "Les ressenyes funcionen gràcies a <a href=\"https://mangrove.reviews/\" target=\"_blank\">Mangrove Reviews</a> i estan disponibles sota <a href=\"https://mangrove.reviews/terms#8-licensing-of-content\" target=\"_blank\">CC-BY 4.0</a>.",
"i_am_affiliated": "<span>Tinc alguna filiació amb aquest objecte</span><br/><span class='subtle'>Marca-ho si n'ets cap, creador, treballador, …</span>",
"i_am_affiliated": "Tinc alguna filiació amb aquest objecte",
"i_am_affiliated_explanation": "Marqueu si sou propietari, creador, empleat,…",
"name_required": "És requerit un nom per mostrar i crear revisions",
"no_reviews_yet": "No hi ha revisions encara. Sigues el primer a escriure'n una i ajuda al negoci i a les dades lliures!",
"question": "Com valoraries {title()}?",
"question_opinion": "Com va ser la vostra experiència?",
"reviewing_as": "Ressenyant com a {nickname}",
"reviewing_as_anonymous": "Ressenyant com a anònim",
"save": "Desar",
"saved": "<span class=\"thanks\">Revisió compartida. Gràcies per compartir!</span>",
"saved": "Ressenya compartida. Gràcies per compartir!",
"saving_review": "Desant…",
"title": "{count} revisions",
"title_singular": "Una revisió",

View file

@ -1,4 +1,7 @@
{
"advanced": {
"title": "Pokročilé funkce"
},
"centerMessage": {
"loadingData": "Načítání dat…",
"ready": "Hotovo!",

View file

@ -197,6 +197,7 @@
"example": "Beispiel",
"examples": "Beispiele",
"fewChangesBefore": "Bitte beantworten Sie einige Fragen zu bestehenden Objekten, bevor Sie ein neues Objekt hinzufügen.",
"geopermissionDenied": "Die Verwendung der Standortbestimmung wurde verweigert",
"getStartedLogin": "Bei OpenStreetMap anmelden, um loszulegen",
"getStartedNewAccount": " oder <a href=\"https://www.openstreetmap.org/user/new\" target=\"_blank\">ein neues Konto anlegen</a>",
"goToInbox": "Posteingang öffnen",
@ -417,7 +418,20 @@
"respectPrivacy": "Bitte respektieren Sie die Privatsphäre. Fotografieren Sie weder Personen noch Nummernschilder. Benutzen Sie keine urheberrechtlich geschützten Quellen wie z.B. Google Maps oder Google Streetview.",
"toBig": "Ihr Bild ist mit {actual_size} zu groß. Die maximale Bildgröße ist {max_size}",
"upload": {
"failReasons": "Keine Internetverbindung"
"failReasons": "Keine Internetverbindung",
"failReasonsAdvanced": "Alternativ dazu können Sie einstellen, dass Ihr Browser und Ihre Erweiterungen die APIs von Drittanbietern nicht blockieren.",
"multiple": {
"done": "{count} Bilder erfolgreich hochgeladen. Vielen Dank!",
"partiallyDone": "{count} Bilder werden hochgeladen, {done} Bilder erledigt…",
"someFailed": "Entschuldigung, {count} Bilder konnten nicht hochgeladen werden",
"uploading": "{count} Bilder werden hochgeladen…"
},
"one": {
"done": "Bild erfolgreich hochgeladen. Vielen Dank!",
"failed": "Entschuldigung, das Bild konnte nicht hochgeladen werden",
"retrying": "Das Bild wird wiederholt hochgeladen…",
"uploading": "Das Bild wird hochgeladen…"
}
},
"uploadDone": "Ihr Bild wurde hinzugefügt. Vielen Dank für Ihre Hilfe!",
"uploadFailed": "Das Bild konnte nicht hochladen werden. Haben Sie eine aktive Internetverbindung und sind APIs von Dritten erlaubt? Der Brave Browser oder UMatrix blockieren diese eventuell.",
@ -504,7 +518,9 @@
},
"plantDetection": {
"back": "Zurück zur Artenübersicht",
"button": "Automatische Erkennung der Pflanzenart durch die KI von Plantnet.org",
"confirm": "Arten auswählen",
"done": "Die Art wurde übernommen",
"error": "Bei der Erkennung der Baumart ist ein Fehler aufgetreten: {error}",
"howTo": {
"intro": "Für optimale Ergebnisse,",
@ -521,7 +537,8 @@
"poweredByPlantnet": "Bereitgestellt von <a href='https://plantnet.org' target='_blank'>plantnet.org</a>",
"querying": "Abfrage bei plantnet.org mit {length} Fotos",
"seeInfo": "Weitere Informationen über diese Art",
"takeImages": "Machen Sie Fotos vom Baum, um die Baumart automatisch zu erkennen"
"takeImages": "Machen Sie Fotos vom Baum, um die Baumart automatisch zu erkennen",
"tryAgain": "Wähle eine andere Art"
},
"privacy": {
"editing": "Ihre Änderungen werden auf OpenStreetMap gespeichert und sind öffentlich zugänglich. Ein mit MapComplete erstellter Änderungssatz enthält folgende Daten: <ul><li>Ihre Änderungen</li><li>Ihren Benutzernamen</li><li>Den Zeitpunkt Ihrer Änderungen</li><li>Das bei Ihren Änderungen verwendete MapComplete-Thema</li><li>Die Sprache Ihrer Benutzeroberfläche</li><li>Ihre Entfernung zu den geänderten Objekten. Dadurch kann festgestellt werden, ob die Änderungen vor Ort gespeichert wurden</li></ul> Ausführliche Informationen finden Sie in <a href=\"https://wiki.osmfoundation.org/wiki/Privacy_Policy\" target=\"_blank\">den Datenschutzbestimmungen auf OpenStreetMap.org</a>. Wir möchten Sie daran erinnern, dass Sie zur Anmeldung einen fiktiven Namen verwenden können.",
@ -540,11 +557,16 @@
"reviews": {
"affiliated_reviewer_warning": "(Partner-Rezension)",
"attribution": "Rezensionen von <a href=\"https://mangrove.reviews/\" target=\"_blank\">Mangrove Reviews</a> sind unter <a href=\"https://mangrove.reviews/terms#8-licensing-of-content\" target=\"_blank\">CC-BY 4.0</a> verfügbar.",
"i_am_affiliated": "<span>Ich bin an diesem Objekt beteiligt</span><br/><span class='subtle'>Auswählen, wenn Sie Eigentümer, Ersteller, Angestellter … sind</span>",
"i_am_affiliated": "Ich bin mit diesem Objekt vertraut",
"i_am_affiliated_explanation": "Prüfung, ob Sie der Eigentümer, Ersteller, Angestellter, … sind",
"name_required": "Der Name des Objekts ist erforderlich, um Bewertungen zu erstellen und anzuzeigen",
"no_reviews_yet": "Es gibt noch keine Bewertungen. Hilf mit der ersten Bewertung dem Geschäft und der Open Data Bewegung!",
"question": "Wie bewerten Sie {title()}?",
"question_opinion": "Wie war Ihre Erfahrung?",
"reviewing_as": "Als {nickname} bewerten",
"reviewing_as_anonymous": "Anonym bewerten",
"save": "Speichern",
"saved": "<span class=\"thanks\">Bewertung gespeichert. Danke fürs Teilen!</span>",
"saved": "Bewertung gespeichert. Danke fürs Teilen!",
"saving_review": "Speichern…",
"title": "{count} Rezensionen",
"title_singular": "Eine Rezension",

View file

@ -2396,10 +2396,25 @@
}
},
"tagRenderings": {
"Contained_climbing_routes": {
"render": "<h3>Conté {_contained_climbing_routes_count} rutes</h3> <ul>{_contained_climbing_routes}</ul>"
},
"Rock type (crag/rock/cliff only)": {
"mappings": {
"0": {
"then": "Calcària"
}
},
"question": "Quin és el tipus de roca aquí?",
"render": "El tipus de roca és {rock}"
},
"Type": {
"mappings": {
"0": {
"then": "Una roca d'escalada: una única roca o penya-segat amb una o unes quantes vies d'escalada que es poden escalar amb seguretat sense corda"
}
}
},
"name": {
"render": "<strong>{name}</strong>"
}
@ -4424,7 +4439,8 @@
}
},
"ghost_bike-start_date": {
"question": "Quan es va instal·lar aquesta bicicleta Ghost?"
"question": "Quan es va instal·lar aquesta bicicleta Ghost?",
"render": "Col·locat el {start_date}"
}
},
"title": {
@ -7451,8 +7467,13 @@
},
"4": {
"then": "Aquí es juga al corfbol"
},
"6": {
"then": "Açò és un skatepark"
}
}
},
"question": "Quin esport es pot practicar aquí?",
"render": "{sport} es juga aquí"
},
"sport_pitch-surface": {
"mappings": {
@ -7472,14 +7493,28 @@
"then": "La superfície és <b>formigó</b>"
}
},
"question": "Quina és la superfície d'aquest camp esportiu?"
"question": "Quina és la superfície d'aquest camp esportiu?",
"render": "La superfícies és <b>{surface}</b>"
}
},
"title": {
"render": "Camp d'esports"
}
},
"sports_centre": {
"description": "En aquesta capa es poden trobar centres esportius interiors i exteriors",
"name": "Centres esportius",
"presets": {
"0": {
"title": "un centre esportiu"
}
},
"title": {
"render": "Centre esportiu"
}
},
"stairs": {
"description": "Capa que mostra escales i escales mecàniques",
"name": "Escales",
"tagRenderings": {
"conveying": {
@ -7746,6 +7781,7 @@
"question": "Quin tipus de càmera és aquesta?"
},
"Level": {
"question": "A quina planta es troba aquesta càmera?",
"render": "Ubicat a la planta {level}"
},
"Operator": {
@ -7852,14 +7888,19 @@
}
},
"tertiary_education": {
"name": "Instituts superiors i universitats",
"presets": {
"0": {
"description": "Un institut on s'imparteix ensenyament terciari (al nivell equivalent de batxillerat o superior). N'hi ha prou amb un únic punt per campus: els edificis i les facultats no s'han de cartografiar amb diferents punts universitaris.",
"title": "una universitat"
}
},
"tagRenderings": {
"institution-kind": {
"mappings": {
"0": {
"then": "Aquesta és una institució d'educació postsecundària i no terciària. S'ha d'haver completat l'educació secundària per matricular-se aquí, però aquí no s'obtenen títols de batxillerat (o superiors)"
},
"1": {
"then": "Açò és una universitat, una institució d'educació terciaria on s'imparteixen carreres universitàries o superior."
}
@ -7883,8 +7924,14 @@
},
"title": {
"mappings": {
"1": {
"then": "Institut superior"
},
"2": {
"then": "Universitat"
},
"3": {
"then": "Escola que imparteix educació terciària"
}
}
}
@ -8147,10 +8194,22 @@
"question": "Accessible amb cadira de rodes"
}
}
},
"2": {
"options": {
"0": {
"question": "Ús gratuït"
}
}
}
},
"name": "Lavabos a altres instal·lacions",
"tagRenderings": {
"opening_hours": {
"override": {
"question": "Quan està oberta la instal·lació on es troben aquests lavabos?"
}
},
"toilet-access": {
"mappings": {
"0": {
@ -8202,9 +8261,18 @@
"question": "Hi ha un lavabo específic per a usuaris amb cadira de rodes?"
},
"wheelchair-door-width": {
"question": "Quina és l'amplada de la porta del lavabo accessible per a cadira de rodes?"
"question": "Quina és l'amplada de la porta del lavabo accessible per a cadira de rodes?",
"render": "La porta del vàter accessible amb cadira de rodes és {canonical(toilets:door:width)} d'ample"
}
},
"title": {
"mappings": {
"0": {
"then": "Bany a {name}"
}
},
"render": "Lavabo a la instal·lació"
},
"units": {
"0": {
"applicableUnits": {
@ -8290,6 +8358,7 @@
}
},
"transit_stops": {
"description": "Capa que mostra diferents tipus de parades de transport públic",
"filter": {
"0": {
"options": {
@ -8422,7 +8491,8 @@
"0": {
"then": "Parada {name}"
}
}
},
"render": "Parada de transport públic"
}
},
"tree_node": {
@ -8812,6 +8882,12 @@
"16": {
"question": "Venda de productes carnis"
},
"17": {
"question": "Venda d'aparcament"
},
"18": {
"question": "Venda de monedes premsades"
},
"19": {
"question": "Venda de flors"
},
@ -9261,4 +9337,4 @@
}
}
}
}
}

View file

@ -3170,6 +3170,9 @@
},
"6": {
"then": "En affaldskurv til plast"
},
"7": {
"then": "En affaldskurv til papir"
}
},
"question": "Hvad er det for en affaldskurv?"

View file

@ -35,6 +35,16 @@
"1": {
"title": "eine freistehende Posterbox"
},
"10": {
"description": "Verwendet für Werbeschilder, Leuchtreklamen, Logos und institutionelle Eingangsschilder",
"title": "ein Schild"
},
"11": {
"title": "eine Skulptur"
},
"12": {
"title": "eine Wandmalerei"
},
"2": {
"title": "eine wandmontierte Posterbox"
},
@ -61,16 +71,6 @@
},
"9": {
"title": "ein Totem"
},
"10": {
"description": "Verwendet für Werbeschilder, Leuchtreklamen, Logos und institutionelle Eingangsschilder",
"title": "ein Schild"
},
"11": {
"title": "eine Skulptur"
},
"12": {
"title": "eine Wandmalerei"
}
},
"tagRenderings": {
@ -165,6 +165,9 @@
"1": {
"then": "Dies ist ein Brett"
},
"10": {
"then": "Dies ist eine Wandmalerei"
},
"2": {
"then": "Dies ist eine Litfaßsäule"
},
@ -188,9 +191,6 @@
},
"9": {
"then": "Dies ist ein Totem"
},
"10": {
"then": "Dies ist eine Wandmalerei"
}
},
"question": "Welche Art von Werbung ist das?",
@ -205,6 +205,9 @@
"1": {
"then": "Brett"
},
"10": {
"then": "Wandmalerei"
},
"2": {
"then": "Posterbox"
},
@ -228,9 +231,6 @@
},
"9": {
"then": "Totem"
},
"10": {
"then": "Wandmalerei"
}
}
}
@ -312,6 +312,15 @@
"1": {
"then": "Wandbild"
},
"10": {
"then": "Azulejo (spanische dekorative Fliesenarbeit)"
},
"11": {
"then": "Fliesenarbeit"
},
"12": {
"then": "Holzschnitzerei"
},
"2": {
"then": "Malerei"
},
@ -335,15 +344,6 @@
},
"9": {
"then": "Relief"
},
"10": {
"then": "Azulejo (spanische dekorative Fliesenarbeit)"
},
"11": {
"then": "Fliesenarbeit"
},
"12": {
"then": "Holzschnitzerei"
}
},
"question": "Um welche Art Kunstwerk handelt es sich?",
@ -1837,6 +1837,27 @@
"1": {
"question": "Verfügt über einen <div style='display: inline-block'><b><b>Schuko-Stecker</b> ohne Erdungsstift (CEE7/4 Typ F)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div>"
},
"10": {
"question": "Hat einen <div style='display: inline-block'><b><b>Typ 2</b> (Mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> Anschluss mit Kabel"
},
"11": {
"question": "Hat einen <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (Typ 2 CSS vonTesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> Anschluss"
},
"12": {
"question": "Hat einen <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> Anschluss"
},
"13": {
"question": "Hat einen <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Typ 2 von Tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> Anschluss mit Kabel"
},
"14": {
"question": "Hat einen <div style='display: inline-block'><b><b>USB</b>-Anschluss zum Aufladen von Telefonen und kleinen Elektrogeräten</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div>"
},
"15": {
"question": "Hat einen <div style='display: inline-block'><b><b>Bosch Active Connect Anschluss mit 3 Pins</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-3pin.svg'/></div> und Kabel"
},
"16": {
"question": "Hat einen <div style='display: inline-block'><b><b>Bosch Active Connect Anschluss mit 5 Pins</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-5pin.svg'/></div> und Kabel"
},
"2": {
"question": "Verfügt über einen <div style='display: inline-block'><b><b>europäischen Netzstecker</b> mit Erdungsstift (CEE7/4 Typ E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div> Anschluss"
},
@ -1860,27 +1881,6 @@
},
"9": {
"question": "Hat einen <div style='display: inline-block'><b><b>Typ 2 CCS</b> (Mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> Anschluss"
},
"10": {
"question": "Hat einen <div style='display: inline-block'><b><b>Typ 2</b> (Mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> Anschluss mit Kabel"
},
"11": {
"question": "Hat einen <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (Typ 2 CSS vonTesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> Anschluss"
},
"12": {
"question": "Hat einen <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> Anschluss"
},
"13": {
"question": "Hat einen <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Typ 2 von Tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> Anschluss mit Kabel"
},
"14": {
"question": "Hat einen <div style='display: inline-block'><b><b>USB</b>-Anschluss zum Aufladen von Telefonen und kleinen Elektrogeräten</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div>"
},
"15": {
"question": "Hat einen <div style='display: inline-block'><b><b>Bosch Active Connect Anschluss mit 3 Pins</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-3pin.svg'/></div> und Kabel"
},
"16": {
"question": "Hat einen <div style='display: inline-block'><b><b>Bosch Active Connect Anschluss mit 5 Pins</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-5pin.svg'/></div> und Kabel"
}
}
}
@ -1936,30 +1936,6 @@
"1": {
"then": "<b>Schuko-Stecker</b> ohne Erdungsstift (CEE7/4 Typ F)"
},
"2": {
"then": "<b>Europäischer Netzstecker</b> mit Erdungsstift (CEE7/4 Typ E)"
},
"3": {
"then": "<b>Europäischer Netzstecker</b> mit Erdungsstift (CEE7/4 Typ E)"
},
"4": {
"then": "<b>Chademo-Anschluss</b>"
},
"5": {
"then": "<b>Chademo-Anschluss</b>"
},
"6": {
"then": "<b>Typ 1 mit Kabel</b> (J1772)"
},
"7": {
"then": "<b>Typ 1 mit Kabel</b> (J1772)"
},
"8": {
"then": "<b>Typ 1 <i>ohne</i> Kabel</b> (J1772)"
},
"9": {
"then": "<b> Typ 1 <i>ohne </i> Kabel</b> (J1772)"
},
"10": {
"then": "<b>Typ 1 CCS</b> (Typ 1 Combo)"
},
@ -1990,6 +1966,9 @@
"19": {
"then": "<b>Typ 2 mit Kabel</b> (mennekes)"
},
"2": {
"then": "<b>Europäischer Netzstecker</b> mit Erdungsstift (CEE7/4 Typ E)"
},
"20": {
"then": "<b>Tesla Supercharger CCS</b> (Typ 2 CSS von Tesla)"
},
@ -2020,11 +1999,32 @@
"29": {
"then": "<b> Bosch Active Connect mit 3 Pins </b> und Kabel"
},
"3": {
"then": "<b>Europäischer Netzstecker</b> mit Erdungsstift (CEE7/4 Typ E)"
},
"30": {
"then": "<b>Bosch Active Connect mit 5 Pins</b> und Kabel"
},
"31": {
"then": "<b> Bosch Active Connect mit 5 Pins </b> und Kabel"
},
"4": {
"then": "<b>Chademo-Anschluss</b>"
},
"5": {
"then": "<b>Chademo-Anschluss</b>"
},
"6": {
"then": "<b>Typ 1 mit Kabel</b> (J1772)"
},
"7": {
"then": "<b>Typ 1 mit Kabel</b> (J1772)"
},
"8": {
"then": "<b>Typ 1 <i>ohne</i> Kabel</b> (J1772)"
},
"9": {
"then": "<b> Typ 1 <i>ohne </i> Kabel</b> (J1772)"
}
},
"question": "Welche Ladeanschlüsse gibt es hier?"
@ -3562,6 +3562,15 @@
"1": {
"then": "Dieser Radweg hat einen festen Belag"
},
"10": {
"then": "Dieser Radweg besteht aus feinem Schotter"
},
"11": {
"then": "Der Radweg ist aus Kies"
},
"12": {
"then": "Dieser Radweg besteht aus Rohboden"
},
"2": {
"then": "Der Radweg ist aus Asphalt"
},
@ -3585,15 +3594,6 @@
},
"9": {
"then": "Der Radweg ist aus Schotter"
},
"10": {
"then": "Dieser Radweg besteht aus feinem Schotter"
},
"11": {
"then": "Der Radweg ist aus Kies"
},
"12": {
"then": "Dieser Radweg besteht aus Rohboden"
}
},
"question": "Was ist der Belag dieses Radwegs?",
@ -3642,6 +3642,15 @@
"1": {
"then": "Dieser Radweg hat einen festen Belag"
},
"10": {
"then": "Dieser Radweg besteht aus feinem Schotter"
},
"11": {
"then": "Der Radweg ist aus Kies"
},
"12": {
"then": "Dieser Radweg besteht aus Rohboden"
},
"2": {
"then": "Der Radweg ist aus Asphalt"
},
@ -3665,15 +3674,6 @@
},
"9": {
"then": "Der Radweg ist aus Schotter"
},
"10": {
"then": "Dieser Radweg besteht aus feinem Schotter"
},
"11": {
"then": "Der Radweg ist aus Kies"
},
"12": {
"then": "Dieser Radweg besteht aus Rohboden"
}
},
"question": "Was ist der Belag dieser Straße?",
@ -4217,6 +4217,17 @@
"question": "Verfügt der Aufzug über eine Sprachausgabe?",
"questionHint": "Z.B. werden Stockwerke angesagt"
},
"tactile_writing_available": {
"mappings": {
"0": {
"then": "Dieser Aufzug hat eine taktile Schrift in Brailleschrift"
},
"1": {
"then": "Dieser Aufzug hat keine taktile Schrift"
}
},
"question": "Hat dieser Aufzug taktile Schrift?"
},
"tactile_writing_language": {
"render": {
"special": {
@ -4561,6 +4572,19 @@
}
}
},
"10": {
"options": {
"0": {
"question": "Keine Bevorzugung von Hunden"
},
"1": {
"question": "Hunde erlaubt"
},
"2": {
"question": "Keine Hunde erlaubt"
}
}
},
"2": {
"options": {
"0": {
@ -4750,30 +4774,6 @@
"1": {
"then": "Die Fitness-Station hat ein Schild mit Anweisungen für eine bestimmte Übung."
},
"2": {
"then": "Die Fitness-Station hat eine Einrichtung für Sit-ups."
},
"3": {
"then": "Die Fitness-Station hat eine Vorrichtung für Liegestütze. In der Regel eine oder mehrere niedrige Reckstangen."
},
"4": {
"then": "Die Fitness-Station hat Stangen zum Dehnen."
},
"5": {
"then": "Die Fitness-Station hat eine Vorrichtung für Rückenstrecker (Hyperextensions)."
},
"6": {
"then": "Die Fitness-Station hat Ringe für Gymnastikübungen."
},
"7": {
"then": "Die Fitness-Station hat eine horizontale Leiter (Monkey Bars)."
},
"8": {
"then": "Die Fitness-Station hat eine Sprossenwand zum Klettern."
},
"9": {
"then": "Die Fitness-Station hat Pfosten für Slalomübungen."
},
"10": {
"then": "Die Fitness-Station hat Trittsteine."
},
@ -4804,6 +4804,9 @@
"19": {
"then": "Die Fitness-Station hat Kampfseile (battle ropes)."
},
"2": {
"then": "Die Fitness-Station hat eine Einrichtung für Sit-ups."
},
"20": {
"then": "Die Fitness-Station hat ein Fahrradergometer."
},
@ -4818,6 +4821,27 @@
},
"24": {
"then": "Die Fitness-Station hat eine Slackline."
},
"3": {
"then": "Die Fitness-Station hat eine Vorrichtung für Liegestütze. In der Regel eine oder mehrere niedrige Reckstangen."
},
"4": {
"then": "Die Fitness-Station hat Stangen zum Dehnen."
},
"5": {
"then": "Die Fitness-Station hat eine Vorrichtung für Rückenstrecker (Hyperextensions)."
},
"6": {
"then": "Die Fitness-Station hat Ringe für Gymnastikübungen."
},
"7": {
"then": "Die Fitness-Station hat eine horizontale Leiter (Monkey Bars)."
},
"8": {
"then": "Die Fitness-Station hat eine Sprossenwand zum Klettern."
},
"9": {
"then": "Die Fitness-Station hat Pfosten für Slalomübungen."
}
},
"question": "Welche Übungsgeräte gibt es an dieser Fitness-Station?"
@ -4880,6 +4904,9 @@
},
"2": {
"options": {
"0": {
"question": "Restaurants und Schnellimbissbetriebe"
},
"1": {
"question": "Nur Fastfood-Geschäfte"
},
@ -4888,6 +4915,13 @@
}
}
},
"3": {
"options": {
"0": {
"question": "Hat ein vegetarisches Menü"
}
}
},
"4": {
"options": {
"0": {
@ -4927,6 +4961,21 @@
"1": {
"then": "Dies ist eine Pommesbude"
},
"10": {
"then": "Hier werden chinesische Gerichte serviert"
},
"11": {
"then": "Hier werden griechische Gerichte serviert"
},
"12": {
"then": "Hier werden indische Gerichte serviert"
},
"13": {
"then": "Hier werden türkische Gerichte serviert"
},
"14": {
"then": "Hier werden thailändische Gerichte serviert"
},
"2": {
"then": "Bietet vorwiegend Pastagerichte an"
},
@ -4950,21 +4999,6 @@
},
"9": {
"then": "Hier werden französische Gerichte serviert"
},
"10": {
"then": "Hier werden chinesische Gerichte serviert"
},
"11": {
"then": "Hier werden griechische Gerichte serviert"
},
"12": {
"then": "Hier werden indische Gerichte serviert"
},
"13": {
"then": "Hier werden türkische Gerichte serviert"
},
"14": {
"then": "Hier werden thailändische Gerichte serviert"
}
},
"question": "Was für Essen gibt es hier?",
@ -5532,6 +5566,61 @@
},
"question": "Wie lautet die Nummer dieses Raums?",
"render": "Dieser Raum hat die Raumnummer {ref}"
},
"room-capacity": {
"question": "Wie viele Personen passen höchstens in diesen Raum?"
},
"room-type": {
"mappings": {
"0": {
"then": "Dies ist ein Verwaltungsraum"
},
"1": {
"then": "Dies ist ein Auditorium"
},
"10": {
"then": "Dies ist ein Labor"
},
"11": {
"then": "Dies ist eine Bibliothek"
},
"12": {
"then": "Dies ist ein Umkleideraum"
},
"14": {
"then": "Dies ist ein Büro"
},
"15": {
"then": "Dies ist eine Gefängniszelle"
},
"16": {
"then": "Dies ist ein Restaurant"
},
"2": {
"then": "Dies ist ein Schlafzimmer"
},
"3": {
"then": "Dies ist eine Kapelle"
},
"4": {
"then": "Dies ist ein Klassenzimmer"
},
"5": {
"then": "Dies ist ein Klassenzimmer"
},
"6": {
"then": "Dies ist ein Computerraum"
},
"7": {
"then": "Dies ist ein Konferenzraum"
},
"8": {
"then": "Dies ist eine Krypta"
},
"9": {
"then": "Dies ist eine Küche"
}
}
}
},
"title": {
@ -6183,6 +6272,19 @@
}
}
},
"10": {
"options": {
"0": {
"question": "Alle Notizen"
},
"1": {
"question": "Importnotizen ausblenden"
},
"2": {
"question": "Nur Importnotizen anzeigen"
}
}
},
"2": {
"options": {
"0": {
@ -6238,19 +6340,6 @@
"question": "Nur offene Notizen anzeigen"
}
}
},
"10": {
"options": {
"0": {
"question": "Alle Notizen"
},
"1": {
"question": "Importnotizen ausblenden"
},
"2": {
"question": "Nur Importnotizen anzeigen"
}
}
}
},
"name": "OpenStreetMap-Hinweise",
@ -6579,6 +6668,21 @@
"1": {
"then": "Dies ist ein normaler Stellplatz."
},
"10": {
"then": "Dies ist ein Stellplatz, der für Eltern mit Kindern reserviert ist."
},
"11": {
"then": "Dies ist ein Stellplatz, der für das Personal reserviert ist."
},
"12": {
"then": "Dies ist ein Stellplatz, der für Taxis reserviert ist."
},
"13": {
"then": "Dies ist ein Stellplatz, der für Fahrzeuge mit Anhänger reserviert ist."
},
"14": {
"then": "Dies ist ein Stellplatz, der für Carsharing reserviert ist."
},
"2": {
"then": "Dies ist ein Behindertenstellplatz."
},
@ -6602,21 +6706,6 @@
},
"9": {
"then": "Dies ist ein Stellplatz, der für Motorräder reserviert ist."
},
"10": {
"then": "Dies ist ein Stellplatz, der für Eltern mit Kindern reserviert ist."
},
"11": {
"then": "Dies ist ein Stellplatz, der für das Personal reserviert ist."
},
"12": {
"then": "Dies ist ein Stellplatz, der für Taxis reserviert ist."
},
"13": {
"then": "Dies ist ein Stellplatz, der für Fahrzeuge mit Anhänger reserviert ist."
},
"14": {
"then": "Dies ist ein Stellplatz, der für Carsharing reserviert ist."
}
},
"question": "Welche Art von Stellplatz ist dies?"
@ -7629,30 +7718,6 @@
"1": {
"question": "Recycling von Batterien"
},
"2": {
"question": "Recycling von Getränkekartons"
},
"3": {
"question": "Recycling von Dosen"
},
"4": {
"question": "Recycling von Kleidung"
},
"5": {
"question": "Recycling von Speiseöl"
},
"6": {
"question": "Recycling von Motoröl"
},
"7": {
"question": "Recycling von Leuchtstoffröhren"
},
"8": {
"question": "Recycling von Grünabfällen"
},
"9": {
"question": "Recycling von Glasflaschen"
},
"10": {
"question": "Recycling von Glas"
},
@ -7683,11 +7748,35 @@
"19": {
"question": "Recycling von Restabfällen"
},
"2": {
"question": "Recycling von Getränkekartons"
},
"20": {
"question": "Recycling von Druckerpatronen"
},
"21": {
"question": "Recycling von Fahrrädern"
},
"3": {
"question": "Recycling von Dosen"
},
"4": {
"question": "Recycling von Kleidung"
},
"5": {
"question": "Recycling von Speiseöl"
},
"6": {
"question": "Recycling von Motoröl"
},
"7": {
"question": "Recycling von Leuchtstoffröhren"
},
"8": {
"question": "Recycling von Grünabfällen"
},
"9": {
"question": "Recycling von Glasflaschen"
}
}
},
@ -7755,30 +7844,6 @@
"1": {
"then": "Getränkekartons können hier recycelt werden"
},
"2": {
"then": "Dosen können hier recycelt werden"
},
"3": {
"then": "Kleidung kann hier recycelt werden"
},
"4": {
"then": "Speiseöl kann hier recycelt werden"
},
"5": {
"then": "Motoröl kann hier recycelt werden"
},
"6": {
"then": "Hier können Leuchtstoffröhren recycelt werden"
},
"7": {
"then": "Grünabfälle können hier recycelt werden"
},
"8": {
"then": "Bio-Abfall kann hier recycelt werden"
},
"9": {
"then": "Glasflaschen können hier recycelt werden"
},
"10": {
"then": "Glas kann hier recycelt werden"
},
@ -7809,6 +7874,9 @@
"19": {
"then": "Schuhe können hier recycelt werden"
},
"2": {
"then": "Dosen können hier recycelt werden"
},
"20": {
"then": "Elektrokleingeräte können hier recycelt werden"
},
@ -7823,6 +7891,27 @@
},
"24": {
"then": "Fahrräder können hier recycelt werden"
},
"3": {
"then": "Kleidung kann hier recycelt werden"
},
"4": {
"then": "Speiseöl kann hier recycelt werden"
},
"5": {
"then": "Motoröl kann hier recycelt werden"
},
"6": {
"then": "Hier können Leuchtstoffröhren recycelt werden"
},
"7": {
"then": "Grünabfälle können hier recycelt werden"
},
"8": {
"then": "Bio-Abfall kann hier recycelt werden"
},
"9": {
"then": "Glasflaschen können hier recycelt werden"
}
},
"question": "Was kann hier recycelt werden?"
@ -8626,6 +8715,12 @@
"1": {
"then": "Diese Straßenlaterne verwendet LEDs"
},
"10": {
"then": "Diese Straßenlaterne verwendet Hochdruck-Natriumdampflampen (orange mit weiß)"
},
"11": {
"then": "Diese Straßenlaterne wird mit Gas beleuchtet"
},
"2": {
"then": "Diese Straßenlaterne verwendet Glühlampenlicht"
},
@ -8649,12 +8744,6 @@
},
"9": {
"then": "Diese Straßenlaterne verwendet Niederdruck-Natriumdampflampen (einfarbig orange)"
},
"10": {
"then": "Diese Straßenlaterne verwendet Hochdruck-Natriumdampflampen (orange mit weiß)"
},
"11": {
"then": "Diese Straßenlaterne wird mit Gas beleuchtet"
}
},
"question": "Mit welcher Art von Beleuchtung arbeitet diese Straßenlaterne?"
@ -9748,6 +9837,27 @@
"1": {
"question": "Verkauf von Getränken"
},
"10": {
"question": "Verkauf von Milch"
},
"11": {
"question": "Verkauf von Brot"
},
"12": {
"question": "Verkauf von Eiern"
},
"13": {
"question": "Verkauf von Käse"
},
"14": {
"question": "Verkauf von Honig"
},
"15": {
"question": "Verkauf von Kartoffeln"
},
"16": {
"question": "Verkauf von Blumen"
},
"2": {
"question": "Verkauf von Süßigkeiten"
},
@ -9835,30 +9945,6 @@
"1": {
"then": "Süßigkeiten werden verkauft"
},
"2": {
"then": "Lebensmittel werden verkauft"
},
"3": {
"then": "Zigaretten werden verkauft"
},
"4": {
"then": "Kondome werden verkauft"
},
"5": {
"then": "Kaffee wird verkauft"
},
"6": {
"then": "Trinkwasser wird verkauft"
},
"7": {
"then": "Zeitungen werden verkauft"
},
"8": {
"then": "Fahrradschläuche werden verkauft"
},
"9": {
"then": "Milch wird verkauft"
},
"10": {
"then": "Brot wird verkauft"
},
@ -9882,6 +9968,30 @@
},
"21": {
"then": "Fahrscheine werden verkauft"
},
"2": {
"then": "Lebensmittel werden verkauft"
},
"3": {
"then": "Zigaretten werden verkauft"
},
"4": {
"then": "Kondome werden verkauft"
},
"5": {
"then": "Kaffee wird verkauft"
},
"6": {
"then": "Trinkwasser wird verkauft"
},
"7": {
"then": "Zeitungen werden verkauft"
},
"8": {
"then": "Fahrradschläuche werden verkauft"
},
"9": {
"then": "Milch wird verkauft"
}
},
"question": "Was wird in diesem Automaten verkauft?",

View file

@ -4193,7 +4193,7 @@
"then": "Aquí se juega al baloncesto"
}
},
"question": "¿Qué deporte se practica aquí?",
"question": "¿Qué deporte se puede practicar aquí?",
"render": "Aquí se juega al {sport}"
},
"sport_pitch-surface": {

View file

@ -775,6 +775,9 @@
},
"6": {
"then": "Keranjang sampah untuk plastik"
},
"7": {
"then": "Keranjang sampah untuk kertas"
}
},
"question": "Keranjang sampah macam apa ini?"

View file

@ -2731,6 +2731,9 @@
},
"6": {
"then": "Un cestino rifiuti per la plastica"
},
"7": {
"then": "Un cestino rifiuti per la carta"
}
},
"question": "Che tipo di cestino dei rifiuti è questo?"

View file

@ -55,10 +55,14 @@ export class NewGeometryFromChangesFeatureSource implements WritableFeatureSourc
* @private
*/
private handleChange(change: ChangeDescription): boolean {
const backend = this._backend
const allElementStorage = this._allElementStorage
if (change.changes === undefined) {
// The geometry is not described - not a new point or geometry change, but probably a tagchange to a newly created point
// Not something that should be handled here
return false
}
console.log("Handling pending change")
const allElementStorage = this._allElementStorage
console.log("Handling pending change", change)
if (change.id > 0) {
// This is an already existing object
// In _most_ of the cases, this means that this _isn't_ a new object
@ -86,10 +90,6 @@ export class NewGeometryFromChangesFeatureSource implements WritableFeatureSourc
this._featureProperties.trackFeature(feature)
this.addNewFeature(feature)
return true
} else if (change.changes === undefined) {
// The geometry is not described - not a new point or geometry change, but probably a tagchange to a newly created point
// Not something that should be handled here
return false
}
try {
@ -151,7 +151,7 @@ export class NewGeometryFromChangesFeatureSource implements WritableFeatureSourc
continue
}
somethingChanged ||= this.handleChange(change)
somethingChanged = this.handleChange(change) || somethingChanged // important: _first_ evaluate the method, to avoid shortcutting
}
if (somethingChanged) {
this.features.ping()

View file

@ -525,11 +525,14 @@ export class Changes {
pending = pending.map((ch) => ChangeDescriptionTools.rewriteIds(ch, remappings))
console.log("Result is", pending)
}
const changes: {
newObjects: OsmObject[]
modifiedObjects: OsmObject[]
deletedObjects: OsmObject[]
} = self.CreateChangesetObjects(pending, objects)
return Changes.createChangesetFor("" + csId, changes)
},
metatags,
@ -558,19 +561,8 @@ export class Changes {
const successes = await Promise.all(
Array.from(pendingPerTheme, async ([theme, pendingChanges]) => {
try {
const openChangeset = this.state.osmConnection
.GetPreference("current-open-changeset-" + theme)
.sync(
(str) => {
const n = Number(str)
if (isNaN(n)) {
return undefined
}
return n
},
[],
(n) => "" + n
)
const openChangeset = UIEventSource.asInt(this.state.osmConnection
.GetPreference("current-open-changeset-" + theme))
console.log(
"Using current-open-changeset-" +
theme +

View file

@ -1,9 +1,14 @@
import { UIEventSource } from "../UIEventSource"
import UserDetails, { OsmConnection } from "./OsmConnection"
import { Utils } from "../../Utils"
import { LocalStorageSource } from "../Web/LocalStorageSource";
export class OsmPreferences {
public preferences = new UIEventSource<Record<string, string>>({}, "all-osm-preferences")
/**
* A dictionary containing all the preferences. The 'preferenceSources' will be initialized from this
* We keep a local copy of them, to init mapcomplete with the previous choices and to be able to get the open changesets right away
*/
public preferences = LocalStorageSource.GetParsed<Record<string, string>>( "all-osm-preferences", {})
private readonly preferenceSources = new Map<string, UIEventSource<string>>()
private auth: any
private userDetails: UIEventSource<UserDetails>

View file

@ -165,7 +165,7 @@ export default class FeatureSwitchState extends OsmConnectionFeatureSwitches {
(urls) => urls?.join(",")
)
this.overpassTimeout = UIEventSource.asFloat(
this.overpassTimeout = UIEventSource.asInt(
QueryParameters.GetQueryParameter(
"overpassTimeout",
"" + layoutToUse?.overpassTimeout,
@ -181,7 +181,7 @@ export default class FeatureSwitchState extends OsmConnectionFeatureSwitches {
)
)
this.osmApiTileSize = UIEventSource.asFloat(
this.osmApiTileSize = UIEventSource.asInt(
QueryParameters.GetQueryParameter(
"osmApiTileSize",
"" + layoutToUse?.osmApiTileSize,

View file

@ -1,28 +1,28 @@
import { Utils } from "../Utils"
import { Readable, Subscriber, Unsubscriber, Updater, Writable } from "svelte/store"
import { Utils } from "../Utils";
import { Readable, Subscriber, Unsubscriber, Updater, Writable } from "svelte/store";
/**
* Various static utils
*/
export class Stores {
public static Chronic(millis: number, asLong: () => boolean = undefined): Store<Date> {
const source = new UIEventSource<Date>(undefined)
const source = new UIEventSource<Date>(undefined);
function run() {
source.setData(new Date())
source.setData(new Date());
if (asLong === undefined || asLong()) {
window.setTimeout(run, millis)
window.setTimeout(run, millis);
}
}
run()
return source
run();
return source;
}
public static FromPromiseWithErr<T>(
promise: Promise<T>
): Store<{ success: T } | { error: any }> {
return UIEventSource.FromPromiseWithErr(promise)
return UIEventSource.FromPromiseWithErr(promise);
}
/**
@ -32,14 +32,14 @@ export class Stores {
* @constructor
*/
public static FromPromise<T>(promise: Promise<T>): Store<T> {
const src = new UIEventSource<T>(undefined)
promise?.then((d) => src.setData(d))
promise?.catch((err) => console.warn("Promise failed:", err))
return src
const src = new UIEventSource<T>(undefined);
promise?.then((d) => src.setData(d));
promise?.catch((err) => console.warn("Promise failed:", err));
return src;
}
public static flatten<X>(source: Store<Store<X>>, possibleSources?: Store<any>[]): Store<X> {
return UIEventSource.flatten(source, possibleSources)
return UIEventSource.flatten(source, possibleSources);
}
/**
@ -57,39 +57,39 @@ export class Stores {
* @constructor
*/
public static ListStabilized<T>(src: Store<T[]>): Store<T[]> {
const stable = new UIEventSource<T[]>(undefined)
const stable = new UIEventSource<T[]>(undefined);
src.addCallbackAndRun((list) => {
if (list === undefined) {
stable.setData(undefined)
return
stable.setData(undefined);
return;
}
if (Utils.sameList(stable.data, list)) {
return
return;
}
stable.setData(list)
})
return stable
stable.setData(list);
});
return stable;
}
}
export abstract class Store<T> implements Readable<T> {
abstract readonly data: T
abstract readonly data: T;
/**
* Optional value giving a title to the UIEventSource, mainly used for debugging
*/
public readonly tag: string | undefined
public readonly tag: string | undefined;
constructor(tag: string = undefined) {
this.tag = tag
this.tag = tag;
if (tag === undefined || tag === "") {
let createStack = Utils.runningFromConsole
let createStack = Utils.runningFromConsole;
if (!Utils.runningFromConsole) {
createStack = window.location.hostname === "127.0.0.1"
createStack = window.location.hostname === "127.0.0.1";
}
if (createStack) {
const callstack = new Error().stack.split("\n")
this.tag = callstack[1]
const callstack = new Error().stack.split("\n");
this.tag = callstack[1];
}
}
}
@ -100,13 +100,13 @@ export abstract class Store<T> implements Readable<T> {
public mapD<J>(f: (t: T) => J, extraStoresToWatch?: Store<any>[]): Store<J> {
return this.map((t) => {
if (t === undefined) {
return undefined
return undefined;
}
if (t === null) {
return null
return null;
}
return f(t)
}, extraStoresToWatch)
return f(t);
}, extraStoresToWatch);
}
/**
@ -135,17 +135,17 @@ export abstract class Store<T> implements Readable<T> {
public withEqualityStabilized(
comparator: (t: T | undefined, t1: T | undefined) => boolean
): Store<T> {
let oldValue = undefined
let oldValue = undefined;
return this.map((v) => {
if (v == oldValue) {
return oldValue
return oldValue;
}
if (comparator(oldValue, v)) {
return oldValue
return oldValue;
}
oldValue = v
return v
})
oldValue = v;
return v;
});
}
/**
@ -195,49 +195,49 @@ export abstract class Store<T> implements Readable<T> {
* lastValue // => "def"
*/
public bind<X>(f: (t: T) => Store<X>): Store<X> {
const mapped = this.map(f)
const sink = new UIEventSource<X>(undefined)
const seenEventSources = new Set<Store<X>>()
const mapped = this.map(f);
const sink = new UIEventSource<X>(undefined);
const seenEventSources = new Set<Store<X>>();
mapped.addCallbackAndRun((newEventSource) => {
if (newEventSource === null) {
sink.setData(null)
sink.setData(null);
} else if (newEventSource === undefined) {
sink.setData(undefined)
sink.setData(undefined);
} else if (!seenEventSources.has(newEventSource)) {
seenEventSources.add(newEventSource)
seenEventSources.add(newEventSource);
newEventSource.addCallbackAndRun((resultData) => {
if (mapped.data === newEventSource) {
sink.setData(resultData)
sink.setData(resultData);
}
})
});
} else {
// Already seen, so we don't have to add a callback, just update the value
sink.setData(newEventSource.data)
sink.setData(newEventSource.data);
}
})
});
return sink
return sink;
}
public stabilized(millisToStabilize): Store<T> {
if (Utils.runningFromConsole) {
return this
return this;
}
const newSource = new UIEventSource<T>(this.data)
const newSource = new UIEventSource<T>(this.data);
const self = this
const self = this;
this.addCallback((latestData) => {
window.setTimeout(() => {
if (self.data == latestData) {
// compare by reference.
// Note that 'latestData' and 'self.data' are both from the same UIEVentSource, but both are dereferenced at a different time
newSource.setData(latestData)
newSource.setData(latestData);
}
}, millisToStabilize)
})
}, millisToStabilize);
});
return newSource
return newSource;
}
/**
@ -247,23 +247,23 @@ export abstract class Store<T> implements Readable<T> {
* @constructor
*/
public AsPromise(condition?: (t: T) => boolean): Promise<T> {
const self = this
condition = condition ?? ((t) => t !== undefined)
const self = this;
condition = condition ?? ((t) => t !== undefined);
return new Promise((resolve) => {
const data = self.data
const data = self.data;
if (condition(data)) {
resolve(data)
resolve(data);
} else {
self.addCallbackD((data) => {
if (condition(data)) {
resolve(data)
return true // return true to unregister as we only need to be called once
resolve(data);
return true; // return true to unregister as we only need to be called once
} else {
return false // We didn't resolve yet, wait for the next ping
return false; // We didn't resolve yet, wait for the next ping
}
})
});
}
})
});
}
/**
@ -275,50 +275,51 @@ export abstract class Store<T> implements Readable<T> {
// Note: run is wrapped in an anonymous function. 'Run' returns the value. If this value happens to be true, it would unsubscribe
return this.addCallbackAndRun((v) => {
run(v)
})
run(v);
});
}
}
export class ImmutableStore<T> extends Store<T> {
public readonly data: T
public readonly data: T;
constructor(data: T) {
super()
this.data = data
super();
this.data = data;
}
private static readonly pass: () => void = () => {}
private static readonly pass: () => void = () => {
};
addCallback(_: (data: T) => void): () => void {
// pass: data will never change
return ImmutableStore.pass
return ImmutableStore.pass;
}
addCallbackAndRun(callback: (data: T) => void): () => void {
callback(this.data)
callback(this.data);
// no callback registry: data will never change
return ImmutableStore.pass
return ImmutableStore.pass;
}
addCallbackAndRunD(callback: (data: T) => void): () => void {
if (this.data !== undefined) {
callback(this.data)
callback(this.data);
}
// no callback registry: data will never change
return ImmutableStore.pass
return ImmutableStore.pass;
}
addCallbackD(_: (data: T) => void): () => void {
// pass: data will never change
return ImmutableStore.pass
return ImmutableStore.pass;
}
map<J>(f: (t: T) => J, extraStores: Store<any>[] = undefined): ImmutableStore<J> {
if (extraStores?.length > 0) {
return new MappedStore(this, f, extraStores, undefined, f(this.data))
return new MappedStore(this, f, extraStores, undefined, f(this.data));
}
return new ImmutableStore<J>(f(this.data))
return new ImmutableStore<J>(f(this.data));
}
}
@ -326,8 +327,8 @@ export class ImmutableStore<T> extends Store<T> {
* Keeps track of the callback functions
*/
class ListenerTracker<T> {
public pingCount = 0
private readonly _callbacks: ((t: T) => boolean | void | any)[] = []
public pingCount = 0;
private readonly _callbacks: ((t: T) => boolean | void | any)[] = [];
/**
* Adds a callback which can be called; a function to unregister is returned
@ -335,17 +336,17 @@ class ListenerTracker<T> {
public addCallback(callback: (t: T) => boolean | void | any): () => void {
if (callback === console.log) {
// This ^^^ actually works!
throw "Don't add console.log directly as a callback - you'll won't be able to find it afterwards. Wrap it in a lambda instead."
throw "Don't add console.log directly as a callback - you'll won't be able to find it afterwards. Wrap it in a lambda instead.";
}
this._callbacks.push(callback)
this._callbacks.push(callback);
// Give back an unregister-function!
return () => {
const index = this._callbacks.indexOf(callback)
const index = this._callbacks.indexOf(callback);
if (index >= 0) {
this._callbacks.splice(index, 1)
this._callbacks.splice(index, 1);
}
}
};
}
/**
@ -353,40 +354,40 @@ class ListenerTracker<T> {
* Returns the number of registered callbacks
*/
public ping(data: T): number {
this.pingCount++
let toDelete = undefined
let startTime = new Date().getTime() / 1000
this.pingCount++;
let toDelete = undefined;
let startTime = new Date().getTime() / 1000;
for (const callback of this._callbacks) {
try {
if (callback(data) === true) {
// This callback wants to be deleted
// Note: it has to return precisely true in order to avoid accidental deletions
if (toDelete === undefined) {
toDelete = [callback]
toDelete = [callback];
} else {
toDelete.push(callback)
toDelete.push(callback);
}
}
} catch (e) {
console.error("Got an error while running a callback:", e)
console.error("Got an error while running a callback:", e);
}
}
let endTime = new Date().getTime() / 1000
let endTime = new Date().getTime() / 1000;
if (endTime - startTime > 500) {
console.trace(
"Warning: a ping took more then 500ms; this is probably a performance issue"
)
);
}
if (toDelete !== undefined) {
for (const toDeleteElement of toDelete) {
this._callbacks.splice(this._callbacks.indexOf(toDeleteElement), 1)
this._callbacks.splice(this._callbacks.indexOf(toDeleteElement), 1);
}
}
return this._callbacks.length
return this._callbacks.length;
}
length() {
return this._callbacks.length
return this._callbacks.length;
}
}
@ -394,16 +395,16 @@ class ListenerTracker<T> {
* The mapped store is a helper type which does the mapping of a function.
*/
class MappedStore<TIn, T> extends Store<T> {
private static readonly pass: () => {}
private readonly _upstream: Store<TIn>
private readonly _upstreamCallbackHandler: ListenerTracker<TIn> | undefined
private _upstreamPingCount: number = -1
private _unregisterFromUpstream: () => void
private readonly _f: (t: TIn) => T
private readonly _extraStores: Store<any>[] | undefined
private _unregisterFromExtraStores: (() => void)[] | undefined
private _callbacks: ListenerTracker<T> = new ListenerTracker<T>()
private _callbacksAreRegistered = false
private static readonly pass: () => {};
private readonly _upstream: Store<TIn>;
private readonly _upstreamCallbackHandler: ListenerTracker<TIn> | undefined;
private _upstreamPingCount: number = -1;
private _unregisterFromUpstream: () => void;
private readonly _f: (t: TIn) => T;
private readonly _extraStores: Store<any>[] | undefined;
private _unregisterFromExtraStores: (() => void)[] | undefined;
private _callbacks: ListenerTracker<T> = new ListenerTracker<T>();
private _callbacksAreRegistered = false;
constructor(
upstream: Store<TIn>,
@ -413,20 +414,20 @@ class MappedStore<TIn, T> extends Store<T> {
initialState: T,
onDestroy?: (f: () => void) => void
) {
super()
this._upstream = upstream
this._upstreamCallbackHandler = upstreamListenerHandler
this._f = f
this._data = initialState
this._upstreamPingCount = upstreamListenerHandler?.pingCount
this._extraStores = extraStores
this.registerCallbacksToUpstream()
super();
this._upstream = upstream;
this._upstreamCallbackHandler = upstreamListenerHandler;
this._f = f;
this._data = initialState;
this._upstreamPingCount = upstreamListenerHandler?.pingCount;
this._extraStores = extraStores;
this.registerCallbacksToUpstream();
if (onDestroy !== undefined) {
onDestroy(() => this.unregisterFromUpstream())
onDestroy(() => this.unregisterFromUpstream());
}
}
private _data: T
private _data: T;
/**
* Gets the current data from the store
@ -442,27 +443,27 @@ class MappedStore<TIn, T> extends Store<T> {
// Callbacks are not registered, so we haven't been listening for updates from the upstream which might have changed
if (this._upstreamCallbackHandler?.pingCount != this._upstreamPingCount) {
// Upstream has pinged - let's update our data first
this._data = this._f(this._upstream.data)
this._data = this._f(this._upstream.data);
}
return this._data
return this._data;
}
return this._data
return this._data;
}
map<J>(f: (t: T) => J, extraStores: Store<any>[] = undefined): Store<J> {
let stores: Store<any>[] = undefined
let stores: Store<any>[] = undefined;
if (extraStores?.length > 0 || this._extraStores?.length > 0) {
stores = []
stores = [];
}
if (extraStores?.length > 0) {
stores.push(...extraStores)
stores.push(...extraStores);
}
if (this._extraStores?.length > 0) {
this._extraStores?.forEach((store) => {
if (stores.indexOf(store) < 0) {
stores.push(store)
stores.push(store);
}
})
});
}
return new MappedStore(
this,
@ -470,111 +471,111 @@ class MappedStore<TIn, T> extends Store<T> {
stores,
this._callbacks,
f(this.data)
)
);
}
addCallback(callback: (data: T) => any | boolean | void): () => void {
if (!this._callbacksAreRegistered) {
// This is the first callback that is added
// We register this 'map' to the upstream object and all the streams
this.registerCallbacksToUpstream()
this.registerCallbacksToUpstream();
}
const unregister = this._callbacks.addCallback(callback)
const unregister = this._callbacks.addCallback(callback);
return () => {
unregister()
unregister();
if (this._callbacks.length() == 0) {
this.unregisterFromUpstream()
this.unregisterFromUpstream();
}
}
};
}
addCallbackAndRun(callback: (data: T) => any | boolean | void): () => void {
const unregister = this.addCallback(callback)
const doRemove = callback(this.data)
const unregister = this.addCallback(callback);
const doRemove = callback(this.data);
if (doRemove === true) {
unregister()
return MappedStore.pass
unregister();
return MappedStore.pass;
}
return unregister
return unregister;
}
addCallbackAndRunD(callback: (data: T) => any | boolean | void): () => void {
return this.addCallbackAndRun((data) => {
if (data !== undefined) {
return callback(data)
return callback(data);
}
})
});
}
addCallbackD(callback: (data: T) => any | boolean | void): () => void {
return this.addCallback((data) => {
if (data !== undefined) {
return callback(data)
return callback(data);
}
})
});
}
private unregisterFromUpstream() {
console.debug("Unregistering callbacks for", this.tag)
this._callbacksAreRegistered = false
this._unregisterFromUpstream()
this._unregisterFromExtraStores?.forEach((unr) => unr())
console.debug("Unregistering callbacks for", this.tag);
this._callbacksAreRegistered = false;
this._unregisterFromUpstream();
this._unregisterFromExtraStores?.forEach((unr) => unr());
}
private registerCallbacksToUpstream() {
const self = this
const self = this;
this._unregisterFromUpstream = this._upstream.addCallback((_) => self.update())
this._unregisterFromUpstream = this._upstream.addCallback((_) => self.update());
this._unregisterFromExtraStores = this._extraStores?.map((store) =>
store?.addCallback((_) => self.update())
)
this._callbacksAreRegistered = true
);
this._callbacksAreRegistered = true;
}
private update(): void {
const newData = this._f(this._upstream.data)
this._upstreamPingCount = this._upstreamCallbackHandler?.pingCount
const newData = this._f(this._upstream.data);
this._upstreamPingCount = this._upstreamCallbackHandler?.pingCount;
if (this._data == newData) {
return
return;
}
this._data = newData
this._callbacks.ping(this._data)
this._data = newData;
this._callbacks.ping(this._data);
}
}
export class UIEventSource<T> extends Store<T> implements Writable<T> {
private static readonly pass: () => {}
public data: T
_callbacks: ListenerTracker<T> = new ListenerTracker<T>()
private static readonly pass: () => {};
public data: T;
_callbacks: ListenerTracker<T> = new ListenerTracker<T>();
constructor(data: T, tag: string = "") {
super(tag)
this.data = data
super(tag);
this.data = data;
}
public static flatten<X>(
source: Store<Store<X>>,
possibleSources?: Store<any>[]
): UIEventSource<X> {
const sink = new UIEventSource<X>(source.data?.data)
const sink = new UIEventSource<X>(source.data?.data);
source.addCallback((latestData) => {
sink.setData(latestData?.data)
sink.setData(latestData?.data);
latestData.addCallback((data) => {
if (source.data !== latestData) {
return true
return true;
}
sink.setData(data)
})
})
sink.setData(data);
});
});
for (const possibleSource of possibleSources ?? []) {
possibleSource?.addCallback(() => {
sink.setData(source.data?.data)
})
sink.setData(source.data?.data);
});
}
return sink
return sink;
}
/**
@ -585,16 +586,16 @@ export class UIEventSource<T> extends Store<T> implements Writable<T> {
promise: Promise<T>,
onError: (e: any) => void = undefined
): UIEventSource<T> {
const src = new UIEventSource<T>(undefined)
promise?.then((d) => src.setData(d))
const src = new UIEventSource<T>(undefined);
promise?.then((d) => src.setData(d));
promise?.catch((err) => {
if (onError !== undefined) {
onError(err)
onError(err);
} else {
console.warn("Promise failed:", err)
console.warn("Promise failed:", err);
}
})
return src
});
return src;
}
/**
@ -606,26 +607,68 @@ export class UIEventSource<T> extends Store<T> implements Writable<T> {
public static FromPromiseWithErr<T>(
promise: Promise<T>
): UIEventSource<{ success: T } | { error: any }> {
const src = new UIEventSource<{ success: T } | { error: any }>(undefined)
promise?.then((d) => src.setData({ success: d }))
promise?.catch((err) => src.setData({ error: err }))
return src
const src = new UIEventSource<{ success: T } | { error: any }>(undefined);
promise?.then((d) => src.setData({ success: d }));
promise?.catch((err) => src.setData({ error: err }));
return src;
}
public static asFloat(source: UIEventSource<string>): UIEventSource<number> {
/**
*
* @param source
* UIEventSource.asInt(new UIEventSource("123")).data // => 123
* UIEventSource.asInt(new UIEventSource("123456789")).data // => 123456789
*
* const srcStr = new UIEventSource("123456789"))
* const srcInt = UIEventSource.asInt(srcStr)
* srcInt.setData(987654321)
* srcStr.data // => "987654321"
*/
public static asInt(source: UIEventSource<string>): UIEventSource<number> {
return source.sync(
(str) => {
let parsed = parseFloat(str)
return isNaN(parsed) ? undefined : parsed
let parsed = parseInt(str);
return isNaN(parsed) ? undefined : parsed;
},
[],
(fl) => {
if (fl === undefined || isNaN(fl)) {
return undefined
return undefined;
}
return ("" + fl).substr(0, 8)
return ("" + fl);
}
)
);
}
/**
* UIEventSource.asFloat(new UIEventSource("123")).data // => 123
* UIEventSource.asFloat(new UIEventSource("123456789")).data // => 123456789
* UIEventSource.asFloat(new UIEventSource("0.5")).data // => 0.5
* UIEventSource.asFloat(new UIEventSource("0.125")).data // => 0.125
* UIEventSource.asFloat(new UIEventSource("0.0000000001")).data // => 0.0000000001
*
*
* const srcStr = new UIEventSource("123456789"))
* const srcInt = UIEventSource.asFloat(srcStr)
* srcInt.setData(987654321)
* srcStr.data // => "987654321"
* @param source
*/
public static asFloat(source: UIEventSource<string>): UIEventSource<number> {
return source.sync(
(str) => {
let parsed = parseFloat(str);
return isNaN(parsed) ? undefined : parsed;
},
[],
(fl) => {
if (fl === undefined || isNaN(fl)) {
return undefined;
}
return ("" + fl);
}
);
}
static asBoolean(stringUIEventSource: UIEventSource<string>) {
@ -633,7 +676,7 @@ export class UIEventSource<T> extends Store<T> implements Writable<T> {
(str) => str === "true",
[],
(b) => "" + b
)
);
}
/**
@ -641,9 +684,9 @@ export class UIEventSource<T> extends Store<T> implements Writable<T> {
* However, this value can be overriden without affecting source
*/
static feedFrom<T>(store: Store<T>): UIEventSource<T> {
const src = new UIEventSource(store.data)
store.addCallback((t) => src.setData(t))
return src
const src = new UIEventSource(store.data);
store.addCallback((t) => src.setData(t));
return src;
}
/**
@ -653,46 +696,46 @@ export class UIEventSource<T> extends Store<T> implements Writable<T> {
* @param callback
*/
public addCallback(callback: (latestData: T) => boolean | void | any): () => void {
return this._callbacks.addCallback(callback)
return this._callbacks.addCallback(callback);
}
public addCallbackAndRun(callback: (latestData: T) => boolean | void | any): () => void {
const doDeleteCallback = callback(this.data)
const doDeleteCallback = callback(this.data);
if (doDeleteCallback !== true) {
return this.addCallback(callback)
return this.addCallback(callback);
} else {
return UIEventSource.pass
return UIEventSource.pass;
}
}
public addCallbackAndRunD(callback: (data: T) => void): () => void {
return this.addCallbackAndRun((data) => {
if (data !== undefined && data !== null) {
return callback(data)
return callback(data);
}
})
});
}
public addCallbackD(callback: (data: T) => void): () => void {
return this.addCallback((data) => {
if (data !== undefined && data !== null) {
return callback(data)
return callback(data);
}
})
});
}
public setData(t: T): UIEventSource<T> {
if (this.data == t) {
// MUST COMPARE BY REFERENCE!
return
return;
}
this.data = t
this._callbacks.ping(t)
return this
this.data = t;
this._callbacks.ping(t);
return this;
}
public ping(): void {
this._callbacks.ping(this.data)
this._callbacks.ping(this.data);
}
/**
@ -724,7 +767,7 @@ export class UIEventSource<T> extends Store<T> implements Writable<T> {
extraSources: Store<any>[] = [],
onDestroy?: (f: () => void) => void
): Store<J> {
return new MappedStore(this, f, extraSources, this._callbacks, f(this.data), onDestroy)
return new MappedStore(this, f, extraSources, this._callbacks, f(this.data), onDestroy);
}
/**
@ -736,14 +779,14 @@ export class UIEventSource<T> extends Store<T> implements Writable<T> {
this,
(t) => {
if (t === undefined) {
return undefined
return undefined;
}
return f(t)
return f(t);
},
extraSources,
this._callbacks,
this.data === undefined ? undefined : f(this.data)
)
);
}
/**
@ -760,53 +803,53 @@ export class UIEventSource<T> extends Store<T> implements Writable<T> {
g: (j: J, t: T) => T,
allowUnregister = false
): UIEventSource<J> {
const self = this
const self = this;
const stack = new Error().stack.split("\n")
const callee = stack[1]
const stack = new Error().stack.split("\n");
const callee = stack[1];
const newSource = new UIEventSource<J>(f(this.data), "map(" + this.tag + ")@" + callee)
const newSource = new UIEventSource<J>(f(this.data), "map(" + this.tag + ")@" + callee);
const update = function () {
newSource.setData(f(self.data))
return allowUnregister && newSource._callbacks.length() === 0
}
const update = function() {
newSource.setData(f(self.data));
return allowUnregister && newSource._callbacks.length() === 0;
};
this.addCallback(update)
this.addCallback(update);
for (const extraSource of extraSources) {
extraSource?.addCallback(update)
extraSource?.addCallback(update);
}
if (g !== undefined) {
newSource.addCallback((latest) => {
self.setData(g(latest, self.data))
})
self.setData(g(latest, self.data));
});
}
return newSource
return newSource;
}
public syncWith(otherSource: UIEventSource<T>, reverseOverride = false): UIEventSource<T> {
this.addCallback((latest) => otherSource.setData(latest))
const self = this
otherSource.addCallback((latest) => self.setData(latest))
this.addCallback((latest) => otherSource.setData(latest));
const self = this;
otherSource.addCallback((latest) => self.setData(latest));
if (reverseOverride) {
if (otherSource.data !== undefined) {
this.setData(otherSource.data)
this.setData(otherSource.data);
}
} else if (this.data === undefined) {
this.setData(otherSource.data)
this.setData(otherSource.data);
} else {
otherSource.setData(this.data)
otherSource.setData(this.data);
}
return this
return this;
}
set(value: T): void {
this.setData(value)
this.setData(value);
}
update(f: Updater<T> & ((value: T) => T)): void {
this.setData(f(this.data))
this.setData(f(this.data));
}
}

View file

@ -1,21 +1,21 @@
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource";
import type { Map as MlMap } from "maplibre-gl";
import { GeoJSONSource, Marker } from "maplibre-gl";
import { ShowDataLayerOptions } from "./ShowDataLayerOptions";
import { GeoOperations } from "../../Logic/GeoOperations";
import LayerConfig from "../../Models/ThemeConfig/LayerConfig";
import PointRenderingConfig from "../../Models/ThemeConfig/PointRenderingConfig";
import { OsmTags } from "../../Models/OsmFeature";
import { FeatureSource, FeatureSourceForLayer } from "../../Logic/FeatureSource/FeatureSource";
import { BBox } from "../../Logic/BBox";
import { Feature, Point } from "geojson";
import LineRenderingConfig from "../../Models/ThemeConfig/LineRenderingConfig";
import { Utils } from "../../Utils";
import * as range_layer from "../../../assets/layers/range/range.json";
import { LayerConfigJson } from "../../Models/ThemeConfig/Json/LayerConfigJson";
import PerLayerFeatureSourceSplitter from "../../Logic/FeatureSource/PerLayerFeatureSourceSplitter";
import FilteredLayer from "../../Models/FilteredLayer";
import SimpleFeatureSource from "../../Logic/FeatureSource/Sources/SimpleFeatureSource";
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
import type { Map as MlMap } from "maplibre-gl"
import { GeoJSONSource, Marker } from "maplibre-gl"
import { ShowDataLayerOptions } from "./ShowDataLayerOptions"
import { GeoOperations } from "../../Logic/GeoOperations"
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
import PointRenderingConfig from "../../Models/ThemeConfig/PointRenderingConfig"
import { OsmTags } from "../../Models/OsmFeature"
import { FeatureSource, FeatureSourceForLayer } from "../../Logic/FeatureSource/FeatureSource"
import { BBox } from "../../Logic/BBox"
import { Feature, Point } from "geojson"
import LineRenderingConfig from "../../Models/ThemeConfig/LineRenderingConfig"
import { Utils } from "../../Utils"
import * as range_layer from "../../../assets/layers/range/range.json"
import { LayerConfigJson } from "../../Models/ThemeConfig/Json/LayerConfigJson"
import PerLayerFeatureSourceSplitter from "../../Logic/FeatureSource/PerLayerFeatureSourceSplitter"
import FilteredLayer from "../../Models/FilteredLayer"
import SimpleFeatureSource from "../../Logic/FeatureSource/Sources/SimpleFeatureSource"
class PointRenderingLayer {
private readonly _config: PointRenderingConfig
@ -289,16 +289,16 @@ class LineRenderingLayer {
{
// Add source to the map or update the feature source
if (src === undefined) {
this.currentSourceData = features;
this.currentSourceData = features
map.addSource(this._layername, {
type: "geojson",
data: {
type: "FeatureCollection",
features
features,
},
promoteId: "id"
});
const linelayer = this._layername + "_line";
promoteId: "id",
})
const linelayer = this._layername + "_line"
map.addLayer({
source: this._layername,
id: linelayer,
@ -307,12 +307,12 @@ class LineRenderingLayer {
"line-color": ["feature-state", "color"],
"line-opacity": ["feature-state", "color-opacity"],
"line-width": ["feature-state", "width"],
"line-offset": ["feature-state", "offset"]
"line-offset": ["feature-state", "offset"],
},
layout: {
"line-cap": "round"
}
});
"line-cap": "round",
},
})
for (const feature of features) {
if(!feature.properties.id){
@ -327,10 +327,10 @@ class LineRenderingLayer {
map.on("click", linelayer, (e) => {
// line-layer-listener
e.originalEvent["consumed"] = true;
this._onClick(e.features[0]);
});
const polylayer = this._layername + "_polygon";
e.originalEvent["consumed"] = true
this._onClick(e.features[0])
})
const polylayer = this._layername + "_polygon"
map.addLayer({
source: this._layername,
@ -340,40 +340,40 @@ class LineRenderingLayer {
layout: {},
paint: {
"fill-color": ["feature-state", "fillColor"],
"fill-opacity": ["feature-state", "fillColor-opacity"]
}
});
"fill-opacity": ["feature-state", "fillColor-opacity"],
},
})
if (this._onClick) {
map.on("click", polylayer, (e) => {
// polygon-layer-listener
if (e.originalEvent["consumed"]) {
// This is a polygon beneath a marker, we can ignore it
return;
return
}
e.originalEvent["consumed"] = true;
this._onClick(e.features[0]);
});
e.originalEvent["consumed"] = true
this._onClick(e.features[0])
})
}
this._visibility?.addCallbackAndRunD((visible) => {
try {
map.setLayoutProperty(linelayer, "visibility", visible ? "visible" : "none");
map.setLayoutProperty(polylayer, "visibility", visible ? "visible" : "none");
map.setLayoutProperty(linelayer, "visibility", visible ? "visible" : "none")
map.setLayoutProperty(polylayer, "visibility", visible ? "visible" : "none")
} catch (e) {
console.warn(
"Error while setting visibility of layers ",
linelayer,
polylayer,
e
);
)
}
});
})
} else {
this.currentSourceData = features;
this.currentSourceData = features
src.setData({
type: "FeatureCollection",
features: this.currentSourceData
});
features: this.currentSourceData,
})
}
}
for (let i = 0; i < features.length; i++) {
@ -407,7 +407,7 @@ class LineRenderingLayer {
this.calculatePropsFor(feature.properties)
)
tags.addCallbackD((properties) => {
if(!map.getLayer(this._layername)){
if (!map.getLayer(this._layername)) {
return
}
map.setFeatureState(

View file

@ -50,6 +50,9 @@
$: isHardDelete = changedProperties[DeleteConfig.deleteReasonKey] !== undefined
async function onDelete() {
if(selectedTags === undefined){
return
}
currentState = "applying"
let actionToTake: OsmChangeAction
const changedProperties = TagUtils.changeAsProperties(selectedTags.asChange(tags?.data ?? {}))

File diff suppressed because it is too large Load diff

View file

@ -1,11 +1,11 @@
{
"contributors": [
{
"commits": 6039,
"commits": 6055,
"contributor": "Pieter Vander Vennet"
},
{
"commits": 408,
"commits": 414,
"contributor": "Robin van der Linde"
},
{
@ -52,6 +52,10 @@
"commits": 24,
"contributor": "Ward"
},
{
"commits": 21,
"contributor": "dependabot[bot]"
},
{
"commits": 21,
"contributor": "wjtje"
@ -60,10 +64,6 @@
"commits": 21,
"contributor": "AlexanderRebai"
},
{
"commits": 20,
"contributor": "dependabot[bot]"
},
{
"commits": 19,
"contributor": "Niels Elgaard Larsen"
@ -106,11 +106,11 @@
},
{
"commits": 11,
"contributor": "RobJN"
"contributor": "Thibault Molleman"
},
{
"commits": 10,
"contributor": "Thibault Molleman"
"commits": 11,
"contributor": "RobJN"
},
{
"commits": 10,

View file

@ -1,7 +1,7 @@
{
"contributors": [
{
"commits": 306,
"commits": 308,
"contributor": "kjon"
},
{
@ -9,7 +9,7 @@
"contributor": "Pieter Vander Vennet"
},
{
"commits": 171,
"commits": 176,
"contributor": "paunofu"
},
{

View file

@ -1,15 +1,8 @@
import LayoutConfig from "./Models/ThemeConfig/LayoutConfig"
import * as theme from "./assets/generated/themes/bookcases.json"
import ThemeViewState from "./Models/ThemeViewState"
import Combine from "./UI/Base/Combine"
import SpecialVisualizations from "./UI/SpecialVisualizations"
import ValidatedInput from "./UI/InputElement/ValidatedInput.svelte"
import SvelteUIElement from "./UI/Base/SvelteUIElement"
import { UIEventSource } from "./Logic/UIEventSource"
import { Unit } from "./Models/Unit"
import { Denomination } from "./Models/Denomination"
import { VariableUiElement } from "./UI/Base/VariableUIElement"
import { FixedUiElement } from "./UI/Base/FixedUiElement"
import LayoutConfig from "./Models/ThemeConfig/LayoutConfig";
import * as theme from "./assets/generated/themes/bookcases.json";
import ThemeViewState from "./Models/ThemeViewState";
import Combine from "./UI/Base/Combine";
import SpecialVisualizations from "./UI/SpecialVisualizations";
function testspecial() {
const layout = new LayoutConfig(<any>theme, true) // qp.data === "" ? : new AllKnownLayoutsLazy().get(qp.data)