Housekeeping: formatting

This commit is contained in:
Pieter Vander Vennet 2024-02-20 13:33:38 +01:00
parent 9d53a45f9a
commit 1528dfaae1
168 changed files with 3332 additions and 4560 deletions

View file

@ -72,6 +72,8 @@
+ [toilet.toilet-changing_table:location](#toilettoilet-changing_table:location) + [toilet.toilet-changing_table:location](#toilettoilet-changing_table:location)
+ [toilet.toilet-handwashing](#toilettoilet-handwashing) + [toilet.toilet-handwashing](#toilettoilet-handwashing)
+ [toilet.toilet-has-paper](#toilettoilet-has-paper) + [toilet.toilet-has-paper](#toilettoilet-has-paper)
+ [toilet.menstrual_products](#toiletmenstrual_products)
+ [toilet.menstrual_products_location](#toiletmenstrual_products_location)
@ -1099,6 +1101,28 @@
- toilet_at_amenity
### toilet.menstrual_products
- toilet_at_amenity
### toilet.menstrual_products_location
- toilet_at_amenity - toilet_at_amenity

View file

@ -15,7 +15,6 @@ A financial institution to deposit money
- This layer is shown at zoomlevel **14** and higher - This layer is shown at zoomlevel **14** and higher
- Not visible in the layer selection by default. If you want to make this layer toggable, override `name`

View file

@ -15,7 +15,6 @@ Bicycle rental stations
- This layer is shown at zoomlevel **14** and higher - This layer is shown at zoomlevel **14** and higher
- Not visible in the layer selection by default. If you want to make this layer toggable, override `name`

View file

@ -154,6 +154,18 @@ This rendering asks information about the property [start_date](https://wiki.op
### wikidata
This tagrendering has no question and is thus read-only
This tagrendering is only visible in the popup if the following condition is met: `subject:wikidata~.+`
### leftover-questions ### leftover-questions

View file

@ -68,6 +68,9 @@ 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/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/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/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/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/gender_segregated#values) [gender_segregated](https://wiki.openstreetmap.org/wiki/Key:gender_segregated) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:gender_segregated%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:gender_segregated%3Dno)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:menstrual_products#values) [toilets:menstrual_products](https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dno)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:menstrual_products:location#values) [toilets:menstrual_products:location](https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products:location) | [string](../SpecialInputElements.md#string) | [female_toilet](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dfemale_toilet) [male_toilet](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dmale_toilet) [wheelchair_toilet](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dwheelchair_toilet)
[<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#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/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: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)
@ -305,6 +308,58 @@ This tagrendering has labels `relevant-questions`
### gender_segregated
The question is *Are these toilets gender-segregated?*
- *There is a separate, signposted area for men and women* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:gender_segregated' target='_blank'>gender_segregated</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:gender_segregated%3Dyes' target='_blank'>yes</a>
- *There is no separate, signposted area for men and women* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:gender_segregated' target='_blank'>gender_segregated</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:gender_segregated%3Dno' target='_blank'>no</a>
### menstrual_products
The question is *Are free, menstrual products distributed here?*
- *Free menstrual products are available to all visitors of these toilets* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products' target='_blank'>toilets:menstrual_products</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dyes' target='_blank'>yes</a>
- *Free menstrual products are available to some visitors of these toilets* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products' target='_blank'>toilets:menstrual_products</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dlimited' target='_blank'>limited</a>
- *No free menstrual products are available here* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products' target='_blank'>toilets:menstrual_products</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dno' target='_blank'>no</a>
### menstrual_products_location
The question is *Where are the free menstrual products located?*
This rendering asks information about the property [toilets:menstrual_products:location](https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products:location) This is rendered with `The menstrual products are located in {toilets:menstrual_products:location}`
- *The free, menstrual products are located in the toilet for women* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products:location' target='_blank'>toilets:menstrual_products:location</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dfemale_toilet' target='_blank'>female_toilet</a>
- *The free, menstrual products are located in the toilet for men* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products:location' target='_blank'>toilets:menstrual_products:location</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dmale_toilet' target='_blank'>male_toilet</a>
- *The free, menstrual products are located in the toilet for wheelchair users* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products:location' target='_blank'>toilets:menstrual_products:location</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dwheelchair_toilet' target='_blank'>wheelchair_toilet</a>
This tagrendering is only visible in the popup if the following condition is met: `<a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products' target='_blank'>toilets:menstrual_products</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dlimited' target='_blank'>limited</a> | toilets:menstrual_products:location~.+`
### toilets-changing-table ### toilets-changing-table

View file

@ -68,6 +68,8 @@ 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/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/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: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) [<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)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:menstrual_products#values) [toilets:menstrual_products](https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dno)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:menstrual_products:location#values) [toilets:menstrual_products:location](https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products:location) | [string](../SpecialInputElements.md#string) | [female_toilet](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dfemale_toilet) [male_toilet](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dmale_toilet) [wheelchair_toilet](https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dwheelchair_toilet)
[<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:description#values) [toilets:description](https://wiki.openstreetmap.org/wiki/Key:toilets:description) | [string](../SpecialInputElements.md#string) | [<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:description#values) [toilets:description](https://wiki.openstreetmap.org/wiki/Key:toilets:description) | [string](../SpecialInputElements.md#string) |
@ -326,6 +328,42 @@ This tagrendering has labels `relevant-questions`
### menstrual_products
The question is *Are free, menstrual products distributed here?*
- *Free menstrual products are available to all visitors of these toilets* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products' target='_blank'>toilets:menstrual_products</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dyes' target='_blank'>yes</a>
- *Free menstrual products are available to some visitors of these toilets* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products' target='_blank'>toilets:menstrual_products</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dlimited' target='_blank'>limited</a>
- *No free menstrual products are available here* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products' target='_blank'>toilets:menstrual_products</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dno' target='_blank'>no</a>
### menstrual_products_location
The question is *Where are the free menstrual products located?*
This rendering asks information about the property [toilets:menstrual_products:location](https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products:location) This is rendered with `The menstrual products are located in {toilets:menstrual_products:location}`
- *The free, menstrual products are located in the toilet for women* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products:location' target='_blank'>toilets:menstrual_products:location</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dfemale_toilet' target='_blank'>female_toilet</a>
- *The free, menstrual products are located in the toilet for men* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products:location' target='_blank'>toilets:menstrual_products:location</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dmale_toilet' target='_blank'>male_toilet</a>
- *The free, menstrual products are located in the toilet for wheelchair users* corresponds with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products:location' target='_blank'>toilets:menstrual_products:location</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products:location%3Dwheelchair_toilet' target='_blank'>wheelchair_toilet</a>
This tagrendering is only visible in the popup if the following condition is met: `<a href='https://wiki.openstreetmap.org/wiki/Key:toilets:menstrual_products' target='_blank'>toilets:menstrual_products</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:menstrual_products%3Dlimited' target='_blank'>limited</a> | toilets:menstrual_products:location~.+`
### description ### description

View file

@ -172,6 +172,8 @@ In other words: use `{ "before": ..., "after": ..., "special": {"type": ..., "ar
* [Example usage of direction_absolute](#example-usage-of-direction_absolute) * [Example usage of direction_absolute](#example-usage-of-direction_absolute)
+ [compare_data](#compare_data) + [compare_data](#compare_data)
* [Example usage of compare_data](#example-usage-of-compare_data) * [Example usage of compare_data](#example-usage-of-compare_data)
+ [login_button](#login_button)
* [Example usage of login_button](#example-usage-of-login_button)
+ [auto_apply](#auto_apply) + [auto_apply](#auto_apply)
* [Example usage of auto_apply](#example-usage-of-auto_apply) * [Example usage of auto_apply](#example-usage-of-auto_apply)
@ -982,6 +984,7 @@ image | confirm | Image to show
message_confirm | _undefined_ | What to show when the task is closed, either by the user or was already closed. message_confirm | _undefined_ | What to show when the task is closed, either by the user or was already closed.
status | 1 | A statuscode to apply when the button is clicked. 1 = `close`, 2 = `false_positive`, 3 = `skip`, 4 = `deleted`, 5 = `already fixed` (on the map, e.g. for duplicates), 6 = `too hard` status | 1 | A statuscode to apply when the button is clicked. 1 = `close`, 2 = `false_positive`, 3 = `skip`, 4 = `deleted`, 5 = `already fixed` (on the map, e.g. for duplicates), 6 = `too hard`
maproulette_id | mr_taskId | The property name containing the maproulette id maproulette_id | mr_taskId | The property name containing the maproulette id
ask_feedback | _empty string_ | If not an empty string, this will be used as question to ask some additional feedback. A text field will be added
#### Example usage of maproulette_set_status #### Example usage of maproulette_set_status
@ -1041,9 +1044,9 @@ button_text | _undefined_ | The text shown on the button in the UI
name | default | description name | default | description
------ | --------- | ------------- ------ | --------- | -------------
text | _undefined_ | Text to be shown text | _undefined_ | Text to be shown
href | _undefined_ | The URL to link to href | _undefined_ | The URL to link to. Note that this will be URI-encoded before
class | _undefined_ | CSS-classes to add to the element class | _undefined_ | CSS-classes to add to the element
download | _undefined_ | If set, this link will act as a download-button. The contents of `href` will be offered for download; this parameter will act as the proposed filename download | _undefined_ | Expects a string which denotes the filename to download the contents of `href` into. If set, this link will act as a download-button.
arialabel | _undefined_ | If set, this text will be used as aria-label arialabel | _undefined_ | If set, this text will be used as aria-label
@ -1240,6 +1243,16 @@ readonly | _undefined_ | If 'yes', will not show 'apply'-buttons
### login_button
Show a login button
#### Example usage of login_button
`{login_button()}`
### auto_apply ### auto_apply
A button to run many actions for many features at once. To effectively use this button, you'll need some ingredients: A button to run many actions for many features at once. To effectively use this button, you'll need some ingredients:

View file

@ -132,6 +132,11 @@
"description": "The MapComplete theme ATM Machines has a layer Banks showing features with this tag", "description": "The MapComplete theme ATM Machines has a layer Banks showing features with this tag",
"value": "bank" "value": "bank"
}, },
{
"key": "atm",
"description": "The MapComplete theme ATM Machines has a layer Banks showing features with this tag",
"value": "yes"
},
{ {
"key": "id", "key": "id",
"description": "Layer 'Banks' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'ATM Machines') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))" "description": "Layer 'Banks' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'ATM Machines') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))"
@ -340,179 +345,6 @@
"description": "Layer 'Post offices' shows atm=no with a fixed text, namely 'This post office does <b>not</b> have an ATM' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')", "description": "Layer 'Post offices' shows atm=no with a fixed text, namely 'This post office does <b>not</b> have an ATM' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "no" "value": "no"
}, },
{
"key": "atm",
"description": "Layer 'Post offices' shows atm=separate with a fixed text, namely 'This post office does have an ATM, but it is mapped as a different icon' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "separate"
},
{
"key": "amenity",
"description": "The MapComplete theme ATM Machines has a layer Post offices showing features with this tag",
"value": "post_office"
},
{
"key": "post_office",
"description": "The MapComplete theme ATM Machines has a layer Post offices showing features with this tag",
"value": "post_partner"
},
{
"key": "id",
"description": "Layer 'Post offices' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'ATM Machines') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))"
},
{
"key": "image",
"description": "The layer 'Post offices allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "mapillary",
"description": "The layer 'Post offices allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikidata",
"description": "The layer 'Post offices allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikipedia",
"description": "The layer 'Post offices allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "opening_hours",
"description": "Layer 'Post offices' shows and asks freeform values for key 'opening_hours' (in the mapcomplete.org theme 'ATM Machines')"
},
{
"key": "post_office",
"description": "Layer 'Post offices' shows post_office=post_partner with a fixed text, namely 'This shop is a post partner' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines') (This is only shown if post_office=post_partner)",
"value": "post_partner"
},
{
"key": "post_office",
"description": "Layer 'Post offices' shows post_office= with a fixed text, namely 'This shop is not a post partner' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines') Picking this answer will delete the key post_office. (This is only shown if post_office=post_partner)",
"value": ""
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows and asks freeform values for key 'post_office:brand' (in the mapcomplete.org theme 'ATM Machines') (This is only shown if post_office=post_partner)"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=DHL with a fixed text, namely 'This location offers services for DHL' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines') (This is only shown if post_office=post_partner)",
"value": "DHL"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=DPD with a fixed text, namely 'This location offers services for DPD' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines') (This is only shown if post_office=post_partner)",
"value": "DPD"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=GLS with a fixed text, namely 'This location offers services for GLS' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines') (This is only shown if post_office=post_partner)",
"value": "GLS"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=UPS with a fixed text, namely 'This location offers services for UPS' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines') (This is only shown if post_office=post_partner)",
"value": "UPS"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=DHL Paketshop with a fixed text, namely 'This location is a DHL Paketshop' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines') (This is only shown if post_office=post_partner)",
"value": "DHL Paketshop"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=Hermes PaketShop with a fixed text, namely 'This location is a Hermes PaketShop' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines') (This is only shown if post_office=post_partner)",
"value": "Hermes PaketShop"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=PostNL with a fixed text, namely 'This location is a PostNL-point' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines') (This is only shown if post_office=post_partner)",
"value": "PostNL"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=bpost with a fixed text, namely 'This location offers services for bpost' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines') (This is only shown if post_office=post_partner)",
"value": "bpost"
},
{
"key": "post_office:letter_from",
"description": "Layer 'Post offices' shows and asks freeform values for key 'post_office:letter_from' (in the mapcomplete.org theme 'ATM Machines')"
},
{
"key": "post_office:letter_from",
"description": "Layer 'Post offices' shows post_office:letter_from=yes with a fixed text, namely 'You can post letters here' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "yes"
},
{
"key": "post_office:letter_from",
"description": "Layer 'Post offices' shows post_office:letter_from=no with a fixed text, namely 'You can't post letters here' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "no"
},
{
"key": "post_office:parcel_from",
"description": "Layer 'Post offices' shows and asks freeform values for key 'post_office:parcel_from' (in the mapcomplete.org theme 'ATM Machines')"
},
{
"key": "post_office:parcel_from",
"description": "Layer 'Post offices' shows post_office:parcel_from=yes with a fixed text, namely 'You can send parcels here' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "yes"
},
{
"key": "post_office:parcel_from",
"description": "Layer 'Post offices' shows post_office:parcel_from=no with a fixed text, namely 'You can't send parcels here' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "no"
},
{
"key": "post_office:parcel_pickup",
"description": "Layer 'Post offices' shows and asks freeform values for key 'post_office:parcel_pickup' (in the mapcomplete.org theme 'ATM Machines')"
},
{
"key": "post_office:parcel_pickup",
"description": "Layer 'Post offices' shows post_office:parcel_pickup=yes with a fixed text, namely 'You can pick up missed parcels here' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "yes"
},
{
"key": "post_office:parcel_pickup",
"description": "Layer 'Post offices' shows post_office:parcel_pickup=no with a fixed text, namely 'You can't pick up missed parcels here' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "no"
},
{
"key": "post_office:parcel_to",
"description": "Layer 'Post offices' shows and asks freeform values for key 'post_office:parcel_to' (in the mapcomplete.org theme 'ATM Machines')"
},
{
"key": "post_office:parcel_to",
"description": "Layer 'Post offices' shows post_office:parcel_to=yes with a fixed text, namely 'You can send parcels to here for pickup' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "yes"
},
{
"key": "post_office:parcel_to",
"description": "Layer 'Post offices' shows post_office:parcel_to=no with a fixed text, namely 'You can't send parcels to here for pickup' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "no"
},
{
"key": "post_office:stamps",
"description": "Layer 'Post offices' shows and asks freeform values for key 'post_office:stamps' (in the mapcomplete.org theme 'ATM Machines')"
},
{
"key": "post_office:stamps",
"description": "Layer 'Post offices' shows post_office:stamps=yes with a fixed text, namely 'You can buy stamps here' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "yes"
},
{
"key": "post_office:stamps",
"description": "Layer 'Post offices' shows post_office:stamps=no with a fixed text, namely 'You can't buy stamps here' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "no"
},
{
"key": "atm",
"description": "Layer 'Post offices' shows atm=yes with a fixed text, namely 'This post office has an ATM' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "yes"
},
{
"key": "atm",
"description": "Layer 'Post offices' shows atm=no with a fixed text, namely 'This post office does <b>not</b> have an ATM' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",
"value": "no"
},
{ {
"key": "atm", "key": "atm",
"description": "Layer 'Post offices' shows atm=separate with a fixed text, namely 'This post office does have an ATM, but it is mapped as a different icon' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')", "description": "Layer 'Post offices' shows atm=separate with a fixed text, namely 'This post office does have an ATM, but it is mapped as a different icon' and allows to pick this as a default answer (in the mapcomplete.org theme 'ATM Machines')",

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1189,6 +1189,50 @@
"description": "Layer 'Toilets' 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 'Into nature')", "description": "Layer 'Toilets' 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 'Into nature')",
"value": "seated;urinal" "value": "seated;urinal"
}, },
{
"key": "gender_segregated",
"description": "Layer 'Toilets' shows gender_segregated=yes with a fixed text, namely 'There is a separate, signposted area for men and women' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if toilets:position!=urinal)",
"value": "yes"
},
{
"key": "gender_segregated",
"description": "Layer 'Toilets' shows gender_segregated=no with a fixed text, namely 'There is no separate, signposted area for men and women' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if toilets:position!=urinal)",
"value": "no"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=yes with a fixed text, namely 'Free menstrual products are available to all visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')",
"value": "yes"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=limited with a fixed text, namely 'Free menstrual products are available to some visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')",
"value": "limited"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=no with a fixed text, namely 'No free menstrual products are available here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')",
"value": "no"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows and asks freeform values for key 'toilets:menstrual_products:location' (in the mapcomplete.org theme 'Into nature') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=female_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for women' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "female_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=male_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for men' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "male_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=wheelchair_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for wheelchair users' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "wheelchair_toilet"
},
{ {
"key": "changing_table", "key": "changing_table",
"description": "Layer 'Toilets' 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 'Into nature')", "description": "Layer 'Toilets' 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 'Into nature')",

View file

@ -2608,6 +2608,50 @@
"description": "Layer 'Toilets' 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 'OnWheels')", "description": "Layer 'Toilets' 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 'OnWheels')",
"value": "seated;urinal" "value": "seated;urinal"
}, },
{
"key": "gender_segregated",
"description": "Layer 'Toilets' shows gender_segregated=yes with a fixed text, namely 'There is a separate, signposted area for men and women' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if toilets:position!=urinal)",
"value": "yes"
},
{
"key": "gender_segregated",
"description": "Layer 'Toilets' shows gender_segregated=no with a fixed text, namely 'There is no separate, signposted area for men and women' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if toilets:position!=urinal)",
"value": "no"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=yes with a fixed text, namely 'Free menstrual products are available to all visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')",
"value": "yes"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=limited with a fixed text, namely 'Free menstrual products are available to some visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')",
"value": "limited"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=no with a fixed text, namely 'No free menstrual products are available here' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')",
"value": "no"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows and asks freeform values for key 'toilets:menstrual_products:location' (in the mapcomplete.org theme 'OnWheels') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=female_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for women' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "female_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=male_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for men' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "male_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=wheelchair_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for wheelchair users' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "wheelchair_toilet"
},
{ {
"key": "changing_table", "key": "changing_table",
"description": "Layer 'Toilets' 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 'OnWheels')", "description": "Layer 'Toilets' 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 'OnWheels')",

View file

@ -14828,6 +14828,50 @@
"description": "Layer 'Toilets' 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')", "description": "Layer 'Toilets' 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')",
"value": "seated;urinal" "value": "seated;urinal"
}, },
{
"key": "gender_segregated",
"description": "Layer 'Toilets' shows gender_segregated=yes with a fixed text, namely 'There is a separate, signposted area for men and women' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if toilets:position!=urinal)",
"value": "yes"
},
{
"key": "gender_segregated",
"description": "Layer 'Toilets' shows gender_segregated=no with a fixed text, namely 'There is no separate, signposted area for men and women' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if toilets:position!=urinal)",
"value": "no"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=yes with a fixed text, namely 'Free menstrual products are available to all visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=limited with a fixed text, namely 'Free menstrual products are available to some visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "limited"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=no with a fixed text, namely 'No free menstrual products are available here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "no"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows and asks freeform values for key 'toilets:menstrual_products:location' (in the mapcomplete.org theme 'Personal theme') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=female_toilet with a fixed text, namely 'The free, menstrual products are located 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 toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "female_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=male_toilet with a fixed text, namely 'The free, menstrual products are located 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 toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "male_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=wheelchair_toilet with a fixed text, namely 'The free, menstrual products are located 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 toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "wheelchair_toilet"
},
{ {
"key": "changing_table", "key": "changing_table",
"description": "Layer 'Toilets' 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')", "description": "Layer 'Toilets' 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')",
@ -15080,6 +15124,40 @@
"description": "Layer 'Toilets at other amenities' 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 toilets:position!=urinal)", "description": "Layer 'Toilets at other amenities' 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 toilets:position!=urinal)",
"value": "no" "value": "no"
}, },
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets at other amenities' shows toilets:menstrual_products=yes with a fixed text, namely 'Free menstrual products are available to all visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "yes"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets at other amenities' shows toilets:menstrual_products=limited with a fixed text, namely 'Free menstrual products are available to some visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "limited"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets at other amenities' shows toilets:menstrual_products=no with a fixed text, namely 'No free menstrual products are available here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "no"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'toilets:menstrual_products:location' (in the mapcomplete.org theme 'Personal theme') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets at other amenities' shows toilets:menstrual_products:location=female_toilet with a fixed text, namely 'The free, menstrual products are located 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 toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "female_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets at other amenities' shows toilets:menstrual_products:location=male_toilet with a fixed text, namely 'The free, menstrual products are located 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 toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "male_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets at other amenities' shows toilets:menstrual_products:location=wheelchair_toilet with a fixed text, namely 'The free, menstrual products are located 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 toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "wheelchair_toilet"
},
{ {
"key": "toilets:description", "key": "toilets:description",
"description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'toilets:description' (in the mapcomplete.org theme 'Personal theme')" "description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'toilets:description' (in the mapcomplete.org theme 'Personal theme')"

View file

@ -565,6 +565,50 @@
"description": "Layer 'Toilets' 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 'Ski pistes and aerialways')", "description": "Layer 'Toilets' 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 'Ski pistes and aerialways')",
"value": "seated;urinal" "value": "seated;urinal"
}, },
{
"key": "gender_segregated",
"description": "Layer 'Toilets' shows gender_segregated=yes with a fixed text, namely 'There is a separate, signposted area for men and women' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if toilets:position!=urinal)",
"value": "yes"
},
{
"key": "gender_segregated",
"description": "Layer 'Toilets' shows gender_segregated=no with a fixed text, namely 'There is no separate, signposted area for men and women' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if toilets:position!=urinal)",
"value": "no"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=yes with a fixed text, namely 'Free menstrual products are available to all visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')",
"value": "yes"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=limited with a fixed text, namely 'Free menstrual products are available to some visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')",
"value": "limited"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=no with a fixed text, namely 'No free menstrual products are available here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')",
"value": "no"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows and asks freeform values for key 'toilets:menstrual_products:location' (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=female_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for women' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "female_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=male_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for men' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "male_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=wheelchair_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for wheelchair users' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "wheelchair_toilet"
},
{ {
"key": "changing_table", "key": "changing_table",
"description": "Layer 'Toilets' 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 'Ski pistes and aerialways')", "description": "Layer 'Toilets' 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 'Ski pistes and aerialways')",

View file

@ -190,6 +190,50 @@
"description": "Layer 'Toilets' 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 'Public toilets')", "description": "Layer 'Toilets' 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 'Public toilets')",
"value": "seated;urinal" "value": "seated;urinal"
}, },
{
"key": "gender_segregated",
"description": "Layer 'Toilets' shows gender_segregated=yes with a fixed text, namely 'There is a separate, signposted area for men and women' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:position!=urinal)",
"value": "yes"
},
{
"key": "gender_segregated",
"description": "Layer 'Toilets' shows gender_segregated=no with a fixed text, namely 'There is no separate, signposted area for men and women' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:position!=urinal)",
"value": "no"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=yes with a fixed text, namely 'Free menstrual products are available to all visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets')",
"value": "yes"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=limited with a fixed text, namely 'Free menstrual products are available to some visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets')",
"value": "limited"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets' shows toilets:menstrual_products=no with a fixed text, namely 'No free menstrual products are available here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets')",
"value": "no"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows and asks freeform values for key 'toilets:menstrual_products:location' (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=female_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for women' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "female_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=male_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for men' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "male_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets' shows toilets:menstrual_products:location=wheelchair_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for wheelchair users' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "wheelchair_toilet"
},
{ {
"key": "changing_table", "key": "changing_table",
"description": "Layer 'Toilets' 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 'Public toilets')", "description": "Layer 'Toilets' 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 'Public toilets')",
@ -442,6 +486,40 @@
"description": "Layer 'Toilets at other amenities' 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 'Public toilets') (This is only shown if toilets:position!=urinal)", "description": "Layer 'Toilets at other amenities' 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 'Public toilets') (This is only shown if toilets:position!=urinal)",
"value": "no" "value": "no"
}, },
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets at other amenities' shows toilets:menstrual_products=yes with a fixed text, namely 'Free menstrual products are available to all visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets')",
"value": "yes"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets at other amenities' shows toilets:menstrual_products=limited with a fixed text, namely 'Free menstrual products are available to some visitors of these toilets' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets')",
"value": "limited"
},
{
"key": "toilets:menstrual_products",
"description": "Layer 'Toilets at other amenities' shows toilets:menstrual_products=no with a fixed text, namely 'No free menstrual products are available here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets')",
"value": "no"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'toilets:menstrual_products:location' (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets at other amenities' shows toilets:menstrual_products:location=female_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for women' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "female_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets at other amenities' shows toilets:menstrual_products:location=male_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for men' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "male_toilet"
},
{
"key": "toilets:menstrual_products:location",
"description": "Layer 'Toilets at other amenities' shows toilets:menstrual_products:location=wheelchair_toilet with a fixed text, namely 'The free, menstrual products are located in the toilet for wheelchair users' and allows to pick this as a default answer (in the mapcomplete.org theme 'Public toilets') (This is only shown if toilets:menstrual_products=limited | toilets:menstrual_products:location~.+)",
"value": "wheelchair_toilet"
},
{ {
"key": "toilets:description", "key": "toilets:description",
"description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'toilets:description' (in the mapcomplete.org theme 'Public toilets')" "description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'toilets:description' (in the mapcomplete.org theme 'Public toilets')"

View file

@ -30,6 +30,8 @@ Available languages:
- en - en
- it - it
- de
- es
This document is autogenerated from [assets/themes/disaster_response/disaster_response.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/disaster_response/disaster_response.json) This document is autogenerated from [assets/themes/disaster_response/disaster_response.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/disaster_response/disaster_response.json)

View file

@ -28,6 +28,8 @@ Available languages:
- en - en
- de
- es
This document is autogenerated from [assets/themes/mapcomplete-changes/mapcomplete-changes.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/mapcomplete-changes/mapcomplete-changes.json) This document is autogenerated from [assets/themes/mapcomplete-changes/mapcomplete-changes.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/mapcomplete-changes/mapcomplete-changes.json)

View file

@ -36,6 +36,8 @@ Available languages:
- en - en
- de
- es
This document is autogenerated from [assets/themes/openlovemap/openlovemap.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/openlovemap/openlovemap.json) This document is autogenerated from [assets/themes/openlovemap/openlovemap.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/openlovemap/openlovemap.json)

View file

@ -37,6 +37,8 @@ Available languages:
- en - en
- de
- es
This document is autogenerated from [assets/themes/ski/ski.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/ski/ski.json) This document is autogenerated from [assets/themes/ski/ski.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/ski/ski.json)

View file

@ -33,6 +33,7 @@ Available languages:
- en - en
- nl - nl
- de - de
- es
This document is autogenerated from [assets/themes/walkingnodes/walkingnodes.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/walkingnodes/walkingnodes.json) This document is autogenerated from [assets/themes/walkingnodes/walkingnodes.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/walkingnodes/walkingnodes.json)

View file

@ -464,7 +464,7 @@ This documentation is defined in the source code at [FilteredLayer.ts](/src/Mode
The mode the application starts in, e.g. 'map', 'dashboard' or 'statistics' The mode the application starts in, e.g. 'map', 'dashboard' or 'statistics'
This documentation is defined in the source code at [generateDocs.ts](ervdvn/git2/MapComplete/scripts/generateDocs.ts#L420) This documentation is defined in the source code at [generateDocs.ts](ervdvn/git/MapComplete/scripts/generateDocs.ts#L420)
The default value is _map_ The default value is _map_

View file

@ -238,7 +238,7 @@
{{service_item {{service_item
|name= [https://mapcomplete.org/disaster_response disaster_response] |name= [https://mapcomplete.org/disaster_response disaster_response]
|region= Worldwide |region= Worldwide
|lang= {{#language:en|en}}, {{#language:it|en}} |lang= {{#language:en|en}}, {{#language:it|en}}, {{#language:de|en}}, {{#language:es|en}}
|descr= A MapComplete theme: This map contains elements meant for disaster preparedness and response |descr= A MapComplete theme: This map contains elements meant for disaster preparedness and response
|material= {{yes|[https://mapcomplete.org/ Yes]}} |material= {{yes|[https://mapcomplete.org/ Yes]}}
|image= MapComplete_Screenshot.png |image= MapComplete_Screenshot.png
@ -474,7 +474,7 @@ The position of a signpost can be used by a hiker/biker/rider/s…
{{service_item {{service_item
|name= [https://mapcomplete.org/ski ski] |name= [https://mapcomplete.org/ski ski]
|region= Worldwide |region= Worldwide
|lang= {{#language:en|en}} |lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:es|en}}
|descr= A MapComplete theme: Everything you need to go skiing |descr= A MapComplete theme: Everything you need to go skiing
|material= {{yes|[https://mapcomplete.org/ Yes]}} |material= {{yes|[https://mapcomplete.org/ Yes]}}
|image= MapComplete_Screenshot.png |image= MapComplete_Screenshot.png

View file

@ -21,7 +21,8 @@
"zgh": "ⴰⵏⵙⵉⵡⵏ ⵉⵜⵜⵡⴰⵙⵙⵏⵏ ⴳ OSM", "zgh": "ⴰⵏⵙⵉⵡⵏ ⵉⵜⵜⵡⴰⵙⵙⵏⵏ ⴳ OSM",
"pt_BR": "Endereços conhecidos no OSM", "pt_BR": "Endereços conhecidos no OSM",
"eu": "OSMko helbide ezagunak", "eu": "OSMko helbide ezagunak",
"pl": "Znane adresy w OSM" "pl": "Znane adresy w OSM",
"it": "Indirizzo presente su OSM"
}, },
"description": { "description": {
"en": "Addresses", "en": "Addresses",
@ -45,7 +46,8 @@
"zgh": "ⴰⵏⵙⵉⵡⵏ", "zgh": "ⴰⵏⵙⵉⵡⵏ",
"pt_BR": "Endereços", "pt_BR": "Endereços",
"he": "כתובות", "he": "כתובות",
"eu": "Helbideak" "eu": "Helbideak",
"it": "Indirizzi"
}, },
"source": { "source": {
"osmTags": { "osmTags": {
@ -81,7 +83,8 @@
"pt": "Endereço conhecido", "pt": "Endereço conhecido",
"pt_BR": "Endereço conhecido", "pt_BR": "Endereço conhecido",
"he": "כתובת ידועה", "he": "כתובת ידועה",
"eu": "Helbide ezaguna" "eu": "Helbide ezaguna",
"it": "Indirizzo conosciuto"
} }
}, },
"pointRendering": [ "pointRendering": [
@ -166,7 +169,8 @@
"ca": "El número de porta és <b>{addr:housenumber}</b>", "ca": "El número de porta és <b>{addr:housenumber}</b>",
"pt_BR": "O número da casa é <b>{addr:housenumber}</b>", "pt_BR": "O número da casa é <b>{addr:housenumber}</b>",
"he": "מספר הבית הוא <b>{addr:housenumber}</b>", "he": "מספר הבית הוא <b>{addr:housenumber}</b>",
"eu": "Etxearen zenbakia <b>{addr:housenumber}</b> da" "eu": "Etxearen zenbakia <b>{addr:housenumber}</b> da",
"it": "Il numero civico della casa è <b>{addr:housenumber}</b>"
}, },
"question": { "question": {
"en": "What is the number of this house?", "en": "What is the number of this house?",
@ -186,7 +190,8 @@
"ca": "Quin és el número d'aquesta casa?", "ca": "Quin és el número d'aquesta casa?",
"pt_BR": "Qual é o número desta casa?", "pt_BR": "Qual é o número desta casa?",
"he": "מה המספר של הבית הזה?", "he": "מה המספר של הבית הזה?",
"eu": "Zein da etxe honen zenbakia?" "eu": "Zein da etxe honen zenbakia?",
"it": "Qual è il numero civico di questa casa?"
}, },
"freeform": { "freeform": {
"key": "addr:housenumber", "key": "addr:housenumber",
@ -223,7 +228,8 @@
"ca": "Aquest edifici no té número", "ca": "Aquest edifici no té número",
"pt_BR": "Este prédio não tem número", "pt_BR": "Este prédio não tem número",
"he": "למבנה זה אין מספר בית", "he": "למבנה זה אין מספר בית",
"eu": "Eraikin honek ez du etxe zenbakirik" "eu": "Eraikin honek ez du etxe zenbakirik",
"it": "Questo edificio non ha indirizzo"
} }
} }
] ]
@ -246,7 +252,8 @@
"pt": "Este endereço é na rua <b>{addr:street}</b>", "pt": "Este endereço é na rua <b>{addr:street}</b>",
"pt_BR": "Este endereço fica na rua <b>{addr:street}</b>", "pt_BR": "Este endereço fica na rua <b>{addr:street}</b>",
"he": "כתובת זו נמצאת ברחוב <b>{addr:street}</b>", "he": "כתובת זו נמצאת ברחוב <b>{addr:street}</b>",
"eu": "Helbide hau <b>{addr:street}</b> kalean dago" "eu": "Helbide hau <b>{addr:street}</b> kalean dago",
"it": "Lindirizzo è in via <b>{addr:street}</b>"
}, },
"question": { "question": {
"en": "What street is this address located in?", "en": "What street is this address located in?",
@ -265,7 +272,8 @@
"pt": "Em que rua fica esse endereço?", "pt": "Em que rua fica esse endereço?",
"pt_BR": "Em que rua fica esse endereço?", "pt_BR": "Em que rua fica esse endereço?",
"he": "באיזה רחוב נמצאת הכתובת הזו?", "he": "באיזה רחוב נמצאת הכתובת הזו?",
"eu": "Zein kaletan dago helbide hori?" "eu": "Zein kaletan dago helbide hori?",
"it": "Qual è la via in cui si trova?"
}, },
"freeform": { "freeform": {
"key": "addr:street" "key": "addr:street"
@ -314,7 +322,8 @@
"ca": "Què shauria de corregir aquí? Exposa-ho", "ca": "Què shauria de corregir aquí? Exposa-ho",
"pt_BR": "O que deve ser corrigido aqui? Explique", "pt_BR": "O que deve ser corrigido aqui? Explique",
"he": "מה צריך לתקן כאן? אנא הסבר", "he": "מה צריך לתקן כאן? אנא הסבר",
"eu": "Zer konpondu behar da hemen? Azaldu mesedez" "eu": "Zer konpondu behar da hemen? Azaldu mesedez",
"it": "Indica cosa deve essere corretto qui"
}, },
"freeform": { "freeform": {
"key": "fixme" "key": "fixme"

View file

@ -12,7 +12,8 @@
"eu": "Iragarri", "eu": "Iragarri",
"pl": "Reklama", "pl": "Reklama",
"pt_BR": "Anunciar", "pt_BR": "Anunciar",
"zh_Hans": "广告" "zh_Hans": "广告",
"it": "Pubblicità"
}, },
"description": { "description": {
"ca": "Completarem les dades dels elements publicitaris amb referència, operador i il·luminació", "ca": "Completarem les dades dels elements publicitaris amb referència, operador i il·luminació",
@ -23,7 +24,8 @@
"pt": "Iremos completar os dados das funcionalidades publicitárias com referência, operador e iluminado", "pt": "Iremos completar os dados das funcionalidades publicitárias com referência, operador e iluminado",
"eu": "Publizitate-ezaugarrien datuak osatuko ditugu erreferentziarekin, operadorearekin eta argiztatuarekin.", "eu": "Publizitate-ezaugarrien datuak osatuko ditugu erreferentziarekin, operadorearekin eta argiztatuarekin.",
"pl": "Uzupełnimy dane z obiektów reklamowych o referencję, operatora i oświetlenie", "pl": "Uzupełnimy dane z obiektów reklamowych o referencję, operatora i oświetlenie",
"pt_BR": "Completaremos os dados das características de publicidade com referência, operador e iluminação" "pt_BR": "Completaremos os dados das características de publicidade com referência, operador e iluminação",
"it": "Completeremo i dati da caratteristiche pubblicitarie, con referenza, operatore e illuminazione"
}, },
"source": { "source": {
"osmTags": "advertising~*" "osmTags": "advertising~*"
@ -395,7 +397,8 @@
"eu": "iragarki panela", "eu": "iragarki panela",
"pl": "bilbord", "pl": "bilbord",
"pt_BR": "um outdoor", "pt_BR": "um outdoor",
"zh_Hans": "一块广告牌" "zh_Hans": "一块广告牌",
"it": "un cartellone"
}, },
"description": { "description": {
"en": "A large outdoor advertising structure, typically found in high-traffic areas such as alongside busy roads", "en": "A large outdoor advertising structure, typically found in high-traffic areas such as alongside busy roads",
@ -408,7 +411,8 @@
"he": "מבנה פרסום חוצות גדול, שנמצא בדרך כלל באזורים עתירי תנועה כמו לצד כבישים סואנים", "he": "מבנה פרסום חוצות גדול, שנמצא בדרך כלל באזורים עתירי תנועה כמו לצד כבישים סואנים",
"eu": "Atari zabaleko publizitate-egitura handia, trafiko handiko eremuetan egon ohi dena, adibidez errepideen ondoan", "eu": "Atari zabaleko publizitate-egitura handia, trafiko handiko eremuetan egon ohi dena, adibidez errepideen ondoan",
"pl": "Duża struktura reklamowa na dworze, zwykle znajdująca się w obszarach z dużym ruchem, np. w pobliżu ruchliwych dróg", "pl": "Duża struktura reklamowa na dworze, zwykle znajdująca się w obszarach z dużym ruchem, np. w pobliżu ruchliwych dróg",
"pt_BR": "Uma grande estrutura de publicidade outdoor, geralmente encontrada em áreas com alto tráfego, como ao longo de estradas movimentadas" "pt_BR": "Uma grande estrutura de publicidade outdoor, geralmente encontrada em áreas com alto tráfego, como ao longo de estradas movimentadas",
"it": "Grande struttura pubblicitaria all'aperto, trovata normalmente in aree ad alto traffico come accanto a strade molto trafficate"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/KFC_Billboard.jpg", "./assets/themes/advertising/KFC_Billboard.jpg",
@ -429,7 +433,8 @@
"pt": "uma caixa de pôster independente", "pt": "uma caixa de pôster independente",
"fr": "un panneau à affiches scellé au sol", "fr": "un panneau à affiches scellé au sol",
"pl": "wolnostojąca skrzynka plakatowa", "pl": "wolnostojąca skrzynka plakatowa",
"pt_BR": "uma caixa expositora independente" "pt_BR": "uma caixa expositora independente",
"it": "un cartellone pubblicitario fissato a terra"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/Mupi_spain.jpg", "./assets/themes/advertising/Mupi_spain.jpg",
@ -450,7 +455,8 @@
"fr": "un panneau à affiches monté sur un mur", "fr": "un panneau à affiches monté sur un mur",
"pl": "skrzynka plakatowa montowana na ścianie", "pl": "skrzynka plakatowa montowana na ścianie",
"pt_BR": "uma caixa de pôster montada em uma parede", "pt_BR": "uma caixa de pôster montada em uma parede",
"zh_Hans": "安装在墙上的海报盒子" "zh_Hans": "安装在墙上的海报盒子",
"it": "un cartellone pubblicitario fissato al muro"
}, },
"snapToLayer": [ "snapToLayer": [
"walls_and_buildings" "walls_and_buildings"
@ -470,7 +476,8 @@
"fr": "un petit panneau", "fr": "un petit panneau",
"pt": "a bordo", "pt": "a bordo",
"pl": "tablica", "pl": "tablica",
"pt_BR": "um painel publicitário" "pt_BR": "um painel publicitário",
"it": "un piccolo pannello"
}, },
"description": { "description": {
"en": "Small billboard for neighbourhood advertising, generally intended for pedestrians", "en": "Small billboard for neighbourhood advertising, generally intended for pedestrians",
@ -482,7 +489,8 @@
"nl": "Een klein uithangbord voor buurtadvertenties, meestal gericht op voetgangers", "nl": "Een klein uithangbord voor buurtadvertenties, meestal gericht op voetgangers",
"pt": "Pequeno outdoor para publicidade de bairro, geralmente destinado a pedestres", "pt": "Pequeno outdoor para publicidade de bairro, geralmente destinado a pedestres",
"pl": "Mały bilbord dla reklam lokalnych, przeznaczony głównie dla pieszych", "pl": "Mały bilbord dla reklam lokalnych, przeznaczony głównie dla pieszych",
"pt_BR": "Pequeno outdoor para publicidade local, geralmente destinado a pedestres" "pt_BR": "Pequeno outdoor para publicidade local, geralmente destinado a pedestres",
"it": "PIccolo pannello per la pubblicità di vicinanza, generalmente destinato ai pedoni"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/local_Board.jpg", "./assets/themes/advertising/local_Board.jpg",
@ -504,7 +512,8 @@
"fr": "une colonne", "fr": "une colonne",
"pt": "uma coluna", "pt": "uma coluna",
"pl": "kolumna", "pl": "kolumna",
"pt_BR": "uma coluna" "pt_BR": "uma coluna",
"it": "una colonna"
}, },
"description": { "description": {
"en": "A cylindrical outdoor structure which shows advertisements", "en": "A cylindrical outdoor structure which shows advertisements",
@ -516,7 +525,8 @@
"nl": "Een cylindervormige structuur die buiten staat waarop advertenties staan", "nl": "Een cylindervormige structuur die buiten staat waarop advertenties staan",
"pt": "Uma estrutura exterior cilíndrica que mostra anúncios", "pt": "Uma estrutura exterior cilíndrica que mostra anúncios",
"pl": "Cylindryczna konstrukcja zewnętrzna, na której pokazywane są reklamy", "pl": "Cylindryczna konstrukcja zewnętrzna, na której pokazywane są reklamy",
"pt_BR": "Uma estrutura cilíndrica ao ar livre que exibe anúncios" "pt_BR": "Uma estrutura cilíndrica ao ar livre que exibe anúncios",
"it": "Una struttura cilindrica all'esterno con affissa della pubblicità"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/AdvertisingColumn_001.jpg", "./assets/themes/advertising/AdvertisingColumn_001.jpg",
@ -539,7 +549,8 @@
"pt": "uma bandeira", "pt": "uma bandeira",
"pl": "flaga", "pl": "flaga",
"pt_BR": "uma bandeira", "pt_BR": "uma bandeira",
"zh_Hans": "一个旗子" "zh_Hans": "一个旗子",
"it": "una bandiera"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/Advertising_flag.jpg", "./assets/themes/advertising/Advertising_flag.jpg",
@ -561,7 +572,8 @@
"pt": "uma tela", "pt": "uma tela",
"pl": "ekran", "pl": "ekran",
"pt_BR": "uma tela", "pt_BR": "uma tela",
"zh_Hans": "一块屏幕" "zh_Hans": "一块屏幕",
"it": "uno schermo"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/Screen_poster_box.jpg", "./assets/themes/advertising/Screen_poster_box.jpg",
@ -583,7 +595,8 @@
"pt": "uma tela montada em uma parede", "pt": "uma tela montada em uma parede",
"pl": "ekran zamontowany na ścianie", "pl": "ekran zamontowany na ścianie",
"pt_BR": "uma tela montada em uma parede", "pt_BR": "uma tela montada em uma parede",
"zh_Hans": "一块挂在墙上的屏幕" "zh_Hans": "一块挂在墙上的屏幕",
"it": "uno schermo fissato al muro"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/Subway_screen.jpg", "./assets/themes/advertising/Subway_screen.jpg",
@ -610,7 +623,8 @@
"pt": "uma lona", "pt": "uma lona",
"pl": "plandeka", "pl": "plandeka",
"pt_BR": "uma lona", "pt_BR": "uma lona",
"zh_Hans": "防水布" "zh_Hans": "防水布",
"it": "un telone"
}, },
"description": { "description": {
"en": "A piece of waterproof textile with a printed message, permanently anchored on a wall", "en": "A piece of waterproof textile with a printed message, permanently anchored on a wall",
@ -622,7 +636,8 @@
"pt": "Uma peça de tecido impermeável com uma mensagem impressa, permanentemente ancorada na parede", "pt": "Uma peça de tecido impermeável com uma mensagem impressa, permanentemente ancorada na parede",
"fr": "Une pièce de textile imperméable avec un message imprimé, ancrée de façon permanente sur un mur.", "fr": "Une pièce de textile imperméable avec un message imprimé, ancrée de façon permanente sur un mur.",
"pl": "Kawałek wodoodpornej tkaniny z nadrukowanym przesłaniem, trwale przymocowany do ściany", "pl": "Kawałek wodoodpornej tkaniny z nadrukowanym przesłaniem, trwale przymocowany do ściany",
"pt_BR": "Um pedaço de tecido impermeável com uma mensagem impressa, permanentemente fixado a uma parede" "pt_BR": "Um pedaço de tecido impermeável com uma mensagem impressa, permanentemente fixado a uma parede",
"it": "Un telo impermeabile con un messaggio stampato, fissato in modo permanente al muro"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/tarp_feder.jpg", "./assets/themes/advertising/tarp_feder.jpg",
@ -647,7 +662,8 @@
"pt": "um totem", "pt": "um totem",
"pl": "totem", "pl": "totem",
"pt_BR": "um totem", "pt_BR": "um totem",
"zh_Hans": "图腾" "zh_Hans": "图腾",
"it": "un totem"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/AdvertisingTotem_004.jpg", "./assets/themes/advertising/AdvertisingTotem_004.jpg",
@ -670,7 +686,8 @@
"pt_BR": "uma placa", "pt_BR": "uma placa",
"eu": "letrero bat", "eu": "letrero bat",
"pl": "znak", "pl": "znak",
"zh_Hans": "标志" "zh_Hans": "标志",
"it": "un'insegna"
}, },
"description": { "description": {
"en": "Used for advertising signs, neon signs, logos & institutional entrance signs", "en": "Used for advertising signs, neon signs, logos & institutional entrance signs",
@ -682,7 +699,8 @@
"pt": "Usado para sinais publicitários, sinais de néon, logotipos e sinais de entrada institucionais", "pt": "Usado para sinais publicitários, sinais de néon, logotipos e sinais de entrada institucionais",
"eu": "Iragarki publizitarioetarako, neon-karteletarako, logotipoetarako eta erakundeen sarrera-seinaleetarako erabiltzen da", "eu": "Iragarki publizitarioetarako, neon-karteletarako, logotipoetarako eta erakundeen sarrera-seinaleetarako erabiltzen da",
"pl": "Używany do znaków reklamowych, neonów, logo i znaków wejściowych do instytucji", "pl": "Używany do znaków reklamowych, neonów, logo i znaków wejściowych do instytucji",
"pt_BR": "Usado para placas de publicidade, letreiros de neon, logotipos e placas de entrada institucionais" "pt_BR": "Usado para placas de publicidade, letreiros de neon, logotipos e placas de entrada institucionais",
"it": "Utilizzato per insegna pubblicitaria, un'insegna al neon, i loghi o le indicazioni d'entrata"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/Waitrose_sign.jpg", "./assets/themes/advertising/Waitrose_sign.jpg",
@ -709,7 +727,8 @@
"eu": "eskultura bat", "eu": "eskultura bat",
"pl": "rzeźba", "pl": "rzeźba",
"pt_BR": "uma escultura", "pt_BR": "uma escultura",
"zh_Hans": "雕像" "zh_Hans": "雕像",
"it": "una scultura"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/Aircraft_Sculpture.jpg", "./assets/themes/advertising/Aircraft_Sculpture.jpg",
@ -733,7 +752,8 @@
"eu": "pareta margotu bat", "eu": "pareta margotu bat",
"pl": "mural ścienny", "pl": "mural ścienny",
"pt_BR": "uma pintura mural", "pt_BR": "uma pintura mural",
"zh_Hans": "墙上的画" "zh_Hans": "墙上的画",
"it": "un murales"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/Capitol_wall.jpg", "./assets/themes/advertising/Capitol_wall.jpg",
@ -1490,7 +1510,8 @@
"eu": "Objektu honek iragarkiak ditu alde bakar batean", "eu": "Objektu honek iragarkiak ditu alde bakar batean",
"pl": "Ten obiekt ma reklamy po jednej stronie", "pl": "Ten obiekt ma reklamy po jednej stronie",
"pt_BR": "Este objeto tem anúncios em um único lado", "pt_BR": "Este objeto tem anúncios em um único lado",
"zh_Hans": "该物体单面有广告" "zh_Hans": "该物体单面有广告",
"it": "Questo oggetto ha la pubblicità solo da un lato"
} }
}, },
{ {

View file

@ -18,7 +18,8 @@
], ],
"label": { "label": {
"render": { "render": {
"en": "{name}" "en": "{name}",
"de": "{name}"
}, },
"condition": "name~*", "condition": "name~*",
"classes": "bg-white p-1 px-2 rounded" "classes": "bg-white p-1 px-2 rounded"
@ -30,78 +31,90 @@
"images", "images",
{ {
"question": { "question": {
"en": "What type of aerialway is this?" "en": "What type of aerialway is this?",
"de": "Um welchen Seilbahntyp handelt es sich?"
}, },
"id": "type", "id": "type",
"mappings": [ "mappings": [
{ {
"if": "aerialway=cable_car", "if": "aerialway=cable_car",
"then": { "then": {
"en": "This is a cable car where the car goes up and down again on the same cable." "en": "This is a cable car where the car goes up and down again on the same cable.",
"de": "Es handelt sich um eine Seilbahn, bei der die Kabine auf demselben Seil nach oben und wieder nach unten fährt."
}, },
"icon": "./assets/layers/aerialway/cable_car.svg" "icon": "./assets/layers/aerialway/cable_car.svg"
}, },
{ {
"if": "aerialway=gondola", "if": "aerialway=gondola",
"then": { "then": {
"en": "This is a gondola where the cars go around in continuous circles" "en": "This is a gondola where the cars go around in continuous circles",
"de": "Es handelt sich um eine Seilbahn, bei der die Kabinen in ständigen Kreisen fahren"
}, },
"icon": "./assets/layers/aerialway/gondola_lift.svg" "icon": "./assets/layers/aerialway/gondola_lift.svg"
}, },
{ {
"if": "aerialway=chair_lift", "if": "aerialway=chair_lift",
"then": { "then": {
"en": "An open chairlift with seats to sit on and open to the outside air." "en": "An open chairlift with seats to sit on and open to the outside air.",
"de": "Ein offener Sessellift mit Sitzgelegenheiten und Zugang zur Außenluft."
}, },
"icon": "./assets/layers/aerialway/chair_lift.svg" "icon": "./assets/layers/aerialway/chair_lift.svg"
}, },
{ {
"if": "aerialway=mixed", "if": "aerialway=mixed",
"then": { "then": {
"en": "An aerialway which has both chairs and gondolas in the same continuous track" "en": "An aerialway which has both chairs and gondolas in the same continuous track",
"de": "Eine Seilbahn, die sowohl offene Sessel als auch geschlossene Gondeln auf einer durchgehenden Bahn hat"
} }
}, },
{ {
"if": "aerialway=drag_lift", "if": "aerialway=drag_lift",
"then": { "then": {
"en": "A drag lift" "en": "A drag lift",
"de": "Ein Schlepplift"
}, },
"hideInAnswer": true "hideInAnswer": true
}, },
{ {
"if": "aerialway=t-bar", "if": "aerialway=t-bar",
"then": { "then": {
"en": "A drag lift with T-shaped carriers for two passengers at a time" "en": "A drag lift with T-shaped carriers for two passengers at a time",
"de": "Ein Schlepplift mit T-förmigen Trägern für jeweils zwei Passagiere"
} }
}, },
{ {
"if": "aerialway=j-bar", "if": "aerialway=j-bar",
"then": { "then": {
"en": "A drag lift with L-shaped bars for a single passenger at a time" "en": "A drag lift with L-shaped bars for a single passenger at a time",
"de": "Ein Schlepplift mit L-förmigen Trägern für jeweils einen Passagier"
} }
}, },
{ {
"if": "aerialway=platter", "if": "aerialway=platter",
"then": { "then": {
"en": "A drag lift with a platter to drag a single passenger at a time" "en": "A drag lift with a platter to drag a single passenger at a time",
"de": "Ein Schlepplift mit einem Teller für jeweils einen Passagier"
} }
}, },
{ {
"if": "aerialway=rope_tow", "if": "aerialway=rope_tow",
"then": { "then": {
"en": "A tow line which which drags skieers" "en": "A tow line which which drags skieers",
"de": "Eine Schleppleine, die Skifahrer mit sich zieht"
} }
}, },
{ {
"if": "aerialway=magic_carpet", "if": "aerialway=magic_carpet",
"then": { "then": {
"en": "A magic carpet (a conveyor belt on the ground)" "en": "A magic carpet (a conveyor belt on the ground)",
"de": "Ein magic carpet (ein Förderband auf dem Boden)"
} }
}, },
{ {
"if": "aerialway=zip_line", "if": "aerialway=zip_line",
"then": { "then": {
"en": "A zip line. (A touristical attraction where adventurous people go down at high speeds) " "en": "A zip line. (A touristical attraction where adventurous people go down at high speeds) ",
"de": "Eine Seilrutsche. (Eine Touristenattraktion, bei der abenteuerlustige Menschen mit hoher Geschwindigkeit hinunterfahren) "
} }
} }
] ]
@ -109,16 +122,19 @@
{ {
"id": "duration", "id": "duration",
"question": { "question": {
"en": "How long takes a single journey with this elevator?" "en": "How long takes a single journey with this elevator?",
"de": "Wie lange dauert eine Fahrt mit diesem Aufzug?"
}, },
"questionHint": { "questionHint": {
"en": "This excludes the waiting time." "en": "This excludes the waiting time.",
"de": "Dies schließt die Wartezeit aus."
}, },
"freeform": { "freeform": {
"key": "duration" "key": "duration"
}, },
"render": { "render": {
"en": "A single journey takes {duration} minutes" "en": "A single journey takes {duration} minutes",
"de": "Eine Fahrt dauert {duration} Minuten"
} }
}, },
{ {
@ -127,10 +143,12 @@
"key": "aerialway:occupancy" "key": "aerialway:occupancy"
}, },
"question": { "question": {
"en": "How many people fit a single carriage?" "en": "How many people fit a single carriage?",
"de": "Wie viele Leute passen in eine Kabine?"
}, },
"render": { "render": {
"en": "{aerialway:occupancy} people fit a single carriage" "en": "{aerialway:occupancy} people fit a single carriage",
"de": "{aerialway:occupancy} Leute passen in eine Kabine"
} }
}, },
"opening_hours", "opening_hours",
@ -151,14 +169,15 @@
"if": "oneway=no", "if": "oneway=no",
"then": { "then": {
"en": "This aerialway can be taken in both directions" "en": "This aerialway can be taken in both directions"
} }
} }
] ]
}, },
{ {
"id": "length", "id": "length",
"render": { "render": {
"en": "This aerialway is {_length:km} kilometer long" "en": "This aerialway is {_length:km} kilometer long",
"de": "Die Seilbahn hat eine Länge von {_length:km} km"
} }
} }
], ],
@ -166,27 +185,31 @@
{ {
"width": "4", "width": "4",
"color": "black", "color": "black",
"imageAlongWay": [ { "imageAlongWay": [
"if": "oneway=no", {
"then": "./assets/png/twoway.png" "if": "oneway=no",
},{ "then": "./assets/png/twoway.png"
"if": {
"or": [
"oneway=yes",
"oneway="
]
}, },
"then": "./assets/png/oneway.png" {
} "if": {
"or": [
"oneway=yes",
"oneway="
]
},
"then": "./assets/png/oneway.png"
}
] ]
} }
], ],
"id": "aerialway", "id": "aerialway",
"name": { "name": {
"en": "Aerialways" "en": "Aerialways",
"de": "Seilbahnen"
}, },
"description": { "description": {
"en": "Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines. " "en": "Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines. ",
"de": "Alle Arten von seil- oder drahtgestütztem Personen- oder Gütertransport, wie Seilbahnen, Gondeln, Sessellifte, Schlepplifte. "
}, },
"source": { "source": {
"osmTags": { "osmTags": {
@ -199,7 +222,8 @@
}, },
"title": { "title": {
"render": { "render": {
"en": "Aerialway {name}" "en": "Aerialway {name}",
"de": "Seilbahn {name}"
} }
} }
} }

View file

@ -5,11 +5,13 @@
}, },
"name": { "name": {
"en": "Emergency assembly points", "en": "Emergency assembly points",
"it": "Punti di raccolta per emergenze" "it": "Punti di raccolta per emergenze",
"de": "Notfallsammelplätze"
}, },
"description": { "description": {
"en": "This layer contains assembly points and waiting areas where all employees, passengers or a large crowd assemble in case of an emergency.", "en": "This layer contains assembly points and waiting areas where all employees, passengers or a large crowd assemble in case of an emergency.",
"it": "Questo livello contiene punti di raccolta e aree di attesa in cui tutti i dipendenti, i passeggeri o una grande folla si riuniscono in caso di emergenza." "it": "Questo livello contiene punti di raccolta e aree di attesa in cui tutti i dipendenti, i passeggeri o una grande folla si riuniscono in caso di emergenza.",
"de": "Diese Ebene enthält Sammelplätze und Wartebereiche, in denen sich alle Mitarbeiter, Fahrgäste oder eine große Menschenmenge im Notfall versammeln."
}, },
"docs": "https://wiki.openstreetmap.org/wiki/Tag:emergency%3Dassembly_point", "docs": "https://wiki.openstreetmap.org/wiki/Tag:emergency%3Dassembly_point",
"id": "assembly_point", "id": "assembly_point",
@ -40,7 +42,8 @@
{ {
"title": { "title": {
"en": "an assembly point", "en": "an assembly point",
"it": "un punto di raccolta" "it": "un punto di raccolta",
"de": "ein Sammelplatz"
}, },
"tags": [ "tags": [
"emergency=assembly_point" "emergency=assembly_point"
@ -49,7 +52,8 @@
], ],
"title": { "title": {
"render": { "render": {
"en": "Assembly point during emergencies" "en": "Assembly point during emergencies",
"de": "Sammelplatz bei Notfällen"
} }
}, },
"tagRenderings": [ "tagRenderings": [
@ -61,22 +65,26 @@
}, },
"question": { "question": {
"en": "What is the name of this assembly point?", "en": "What is the name of this assembly point?",
"it": "Qual è il nome di questo punto di raccolta?" "it": "Qual è il nome di questo punto di raccolta?",
"de": "Wie lautet der Name dieser Sammelstelle?"
}, },
"render": { "render": {
"en": "This assembly point is named <b>{name}</b>", "en": "This assembly point is named <b>{name}</b>",
"it": "Questo punto di raccolta si chiama <b>{name}</b>" "it": "Questo punto di raccolta si chiama <b>{name}</b>",
"de": "Diese Sammelstelle hat den Namen <b>{name}</b>"
} }
}, },
{ {
"id": "assembly_point_operator", "id": "assembly_point_operator",
"render": { "render": {
"en": "This assembly point is operated by <b>{operator}</b>", "en": "This assembly point is operated by <b>{operator}</b>",
"it": "Questo punto di raccolta è gestita da <b>{operator}</b>" "it": "Questo punto di raccolta è gestita da <b>{operator}</b>",
"de": "Diese Sammelstelle wird von <b>{operator}</b> betrieben"
}, },
"question": { "question": {
"en": "What organization operates this assembly point?", "en": "What organization operates this assembly point?",
"it": "Quale organizzazione gestisce questo punto di raccolta?" "it": "Quale organizzazione gestisce questo punto di raccolta?",
"de": "Welche Organisation betreibt diese Sammelstelle?"
}, },
"freeform": { "freeform": {
"key": "operator", "key": "operator",
@ -87,7 +95,8 @@
"id": "disaster_type", "id": "disaster_type",
"question": { "question": {
"en": "For which disaster type is this assembly point meant?", "en": "For which disaster type is this assembly point meant?",
"it": "Per quali tipi di disastro è pensato questo punto di raccolta?" "it": "Per quali tipi di disastro è pensato questo punto di raccolta?",
"de": "Für welche Art von Katastrophe ist diese Sammelstelle gedacht?"
}, },
"multiAnswer": true, "multiAnswer": true,
"mappings": [ "mappings": [
@ -96,7 +105,8 @@
"ifnot": "assembly_point:earthquake=", "ifnot": "assembly_point:earthquake=",
"then": { "then": {
"en": "Earthquake", "en": "Earthquake",
"it": "Terremoto" "it": "Terremoto",
"de": "Erdbeben"
}, },
"icon": { "icon": {
"path": "./assets/layers/assembly_point/earthquake.svg", "path": "./assets/layers/assembly_point/earthquake.svg",
@ -108,7 +118,8 @@
"ifnot": "assembly_point:flood=", "ifnot": "assembly_point:flood=",
"then": { "then": {
"en": "Flood", "en": "Flood",
"it": "Alluvione" "it": "Alluvione",
"de": "Flut"
}, },
"icon": { "icon": {
"path": "./assets/layers/assembly_point/flood.svg", "path": "./assets/layers/assembly_point/flood.svg",
@ -120,7 +131,8 @@
"ifnot": "assembly_point:fire=", "ifnot": "assembly_point:fire=",
"then": { "then": {
"en": "Fire", "en": "Fire",
"it": "Incendio" "it": "Incendio",
"de": "Feuer"
}, },
"icon": { "icon": {
"path": "./assets/layers/assembly_point/fire.svg", "path": "./assets/layers/assembly_point/fire.svg",
@ -132,7 +144,8 @@
"ifnot": "assembly_point:landslide=", "ifnot": "assembly_point:landslide=",
"then": { "then": {
"en": "Landslide", "en": "Landslide",
"it": "Frana" "it": "Frana",
"de": "Erdrutsch"
}, },
"icon": { "icon": {
"path": "./assets/layers/assembly_point/landslide.svg", "path": "./assets/layers/assembly_point/landslide.svg",

View file

@ -639,14 +639,16 @@
"id": "fee", "id": "fee",
"question": { "question": {
"en": "Are these bicycle parkings free to use?", "en": "Are these bicycle parkings free to use?",
"nl": "Is deze fietsenstalling gratis te gebruiken?" "nl": "Is deze fietsenstalling gratis te gebruiken?",
"de": "Sind die Fahrradparkplätze kostenlos zu benutzen?"
}, },
"mappings": [ "mappings": [
{ {
"if": "fee=yes", "if": "fee=yes",
"then": { "then": {
"en": "One has to <b>pay</b> to use this bicycle parking", "en": "One has to <b>pay</b> to use this bicycle parking",
"nl": "<b>Betalende</b> fietsparking" "nl": "<b>Betalende</b> fietsparking",
"de": "Man muss <b>zahlen</b>, um den Fahrradparkplatz zu nutzen"
} }
}, },
{ {
@ -654,7 +656,8 @@
"alsoShowIf": "fee=", "alsoShowIf": "fee=",
"then": { "then": {
"en": "Free to use", "en": "Free to use",
"nl": "Gratis te gebruiken" "nl": "Gratis te gebruiken",
"de": "Die Nutzung ist kostenlos"
} }
} }
] ]
@ -673,11 +676,13 @@
"id": "operator_phone", "id": "operator_phone",
"question": { "question": {
"en": "What is the phone number of the operator of this bicycle parking?", "en": "What is the phone number of the operator of this bicycle parking?",
"nl": "Wat is het telefoonnummer van de operator van deze fietsenstalling?" "nl": "Wat is het telefoonnummer van de operator van deze fietsenstalling?",
"de": "Wie lautet die Telefonnummer des Betreibers dieses Fahrradparkplatzes?"
}, },
"questionHint": { "questionHint": {
"en": "One might be able to call this number in case of problems, e.g. to remove unmaintained bicycles", "en": "One might be able to call this number in case of problems, e.g. to remove unmaintained bicycles",
"nl": "Men kan dit nummer bellen om bv. fietswrakken of defecten te melden" "nl": "Men kan dit nummer bellen om bv. fietswrakken of defecten te melden",
"de": "Man könnte diese Nummer anrufen, wenn es Probleme gibt, z. B. um nicht gewartete Fahrräder zu entfernen"
}, },
"icon": "./assets/layers/questions/phone.svg", "icon": "./assets/layers/questions/phone.svg",
"freeform": { "freeform": {

View file

@ -1,10 +1,12 @@
{ {
"id": "brothel", "id": "brothel",
"name": { "name": {
"en": "Brothels" "en": "Brothels",
"de": "Bordelle"
}, },
"description": { "description": {
"en": "An establishment specifically dedicated to prostitution. " "en": "An establishment specifically dedicated to prostitution. ",
"de": "Eine Einrichtung, die speziell der Prostitution gewidmet ist. "
}, },
"source": { "source": {
"osmTags": "amenity=brothel" "osmTags": "amenity=brothel"
@ -12,7 +14,8 @@
"minzoom": 6, "minzoom": 6,
"title": { "title": {
"render": { "render": {
"en": "Brothel" "en": "Brothel",
"de": "Bordell"
}, },
"mappings": [ "mappings": [
{ {
@ -57,7 +60,8 @@
"presets": [ "presets": [
{ {
"title": { "title": {
"en": "a brothel" "en": "a brothel",
"de": "ein Bordell"
}, },
"tags": [ "tags": [
"amenity=brothel" "amenity=brothel"
@ -75,10 +79,12 @@
"key": "name" "key": "name"
}, },
"question": { "question": {
"en": "What is the name of this brothel?" "en": "What is the name of this brothel?",
"de": "Wie lautet der Name des Bordells?"
}, },
"render": { "render": {
"en": "This brothel is named <b>{name}</b>" "en": "This brothel is named <b>{name}</b>",
"de": "Der Name des Bordells lautet <b>{name}</b>"
} }
}, },
"opening_hours", "opening_hours",

View file

@ -1,10 +1,12 @@
{ {
"id": "cinema", "id": "cinema",
"name": { "name": {
"en": "Cinema" "en": "Cinema",
"de": "Kino"
}, },
"description": { "description": {
"en": " A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US" "en": " A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US",
"de": " Ein Ort, an dem Filme gezeigt werden, die der Öffentlichkeit gegen Gebühr zugänglich sind"
}, },
"source": { "source": {
"osmTags": "amenity=cinema" "osmTags": "amenity=cinema"
@ -20,7 +22,8 @@
} }
], ],
"render": { "render": {
"en": "Cinema" "en": "Cinema",
"de": "Kino"
} }
}, },
"pointRendering": [ "pointRendering": [
@ -49,19 +52,22 @@
{ {
"id": "cinema_type", "id": "cinema_type",
"question": { "question": {
"en": "What type of cinema is this?" "en": "What type of cinema is this?",
"de": "Um welche Art von Kino handelt es sich?"
}, },
"mappings": [ "mappings": [
{ {
"if": "cinema=", "if": "cinema=",
"then": { "then": {
"en": "This is a normal cinema showing movies for all ages" "en": "This is a normal cinema showing movies for all ages",
"de": "Dies ist ein normales Kino, das Filme für alle Altersgruppen zeigt"
} }
}, },
{ {
"if": "cinema=erotic", "if": "cinema=erotic",
"then": { "then": {
"en": "This is an erotic cinema showing adult movies" "en": "This is an erotic cinema showing adult movies",
"de": "Dies ist ein Sex-Kino, das Erwachsenenfilme zeigt"
} }
} }
] ]

View file

@ -15,7 +15,8 @@
"ca": "Capa amb rellotges públics", "ca": "Capa amb rellotges públics",
"fr": "Couche avec les horloges publiques", "fr": "Couche avec les horloges publiques",
"cs": "Vrstva s veřejnými hodinami", "cs": "Vrstva s veřejnými hodinami",
"pl": "Warstwa z zegarami publicznymi" "pl": "Warstwa z zegarami publicznymi",
"es": "Capa con relojes públicos"
}, },
"source": { "source": {
"osmTags": "amenity=clock" "osmTags": "amenity=clock"

View file

@ -343,7 +343,7 @@
"then": { "then": {
"en": "There is a lane next to the road (separated with paint)", "en": "There is a lane next to the road (separated with paint)",
"nl": "Er is een fietspad aangrenzend aan de weg (gescheiden met verf)", "nl": "Er is een fietspad aangrenzend aan de weg (gescheiden met verf)",
"de": "Es gibt eine Spur neben der Straße (getrennt durch eine Straßenmarkierung)", "de": "Es gibt einen Radfahrstreifen neben der Straße (getrennt durch eine Straßenmarkierung)",
"es": "Hay un carril a lado de la carretera (separado con pintura)", "es": "Hay un carril a lado de la carretera (separado con pintura)",
"fr": "Il y a une piste cyclable separée de la route", "fr": "Il y a une piste cyclable separée de la route",
"ca": "Hi ha un carril al costat de la carretera (separat amb pintura)", "ca": "Hi ha un carril al costat de la carretera (separat amb pintura)",

View file

@ -3,15 +3,18 @@
"title": { "title": {
"render": { "render": {
"en": "Disaster response organization", "en": "Disaster response organization",
"it": "Organizzazione per la risposta ai disastri" "it": "Organizzazione per la risposta ai disastri",
"de": "Katastrophenschutzorganisation"
} }
}, },
"name": { "name": {
"en": "Disaster response organizations" "en": "Disaster response organizations",
"de": "Katastrophenschutzorganisationen"
}, },
"description": { "description": {
"en": "This layer contains organizations that have the main objective to help the civil population during and after natural or anthropogenic disasters by working in the affected area.", "en": "This layer contains organizations that have the main objective to help the civil population during and after natural or anthropogenic disasters by working in the affected area.",
"it": "Questo livello contiene organizzazioni che hanno come obiettivo principale quello di aiutare la popolazione civile durante e dopo disastri naturali o antropogenici, lavorando nell'area colpita." "it": "Questo livello contiene organizzazioni che hanno come obiettivo principale quello di aiutare la popolazione civile durante e dopo disastri naturali o antropogenici, lavorando nell'area colpita.",
"de": "Diese Ebene umfasst Organisationen, deren Hauptziel es ist, der Zivilbevölkerung während und nach Natur- oder anthropogenen Katastrophen zu helfen, indem sie in dem betroffenen Gebiet tätig sind."
}, },
"docs": "https://wiki.openstreetmap.org/wiki/Tag:emergency%3Ddisaster_response", "docs": "https://wiki.openstreetmap.org/wiki/Tag:emergency%3Ddisaster_response",
"minzoom": 10, "minzoom": 10,
@ -25,7 +28,8 @@
{ {
"title": { "title": {
"en": "a disaster response organization", "en": "a disaster response organization",
"it": "un'organizzazione per la risposta ai disastri" "it": "un'organizzazione per la risposta ai disastri",
"de": "eine Katastrophenschutzorganisation"
}, },
"tags": [ "tags": [
"emergency=disaster_response" "emergency=disaster_response"
@ -64,11 +68,13 @@
}, },
"question": { "question": {
"en": "What is the name of this organization?", "en": "What is the name of this organization?",
"it": "Qual è il nome di questa organizzazione?" "it": "Qual è il nome di questa organizzazione?",
"de": "Wie lautet der Name dieser Organisation?"
}, },
"render": { "render": {
"en": "This organization is named <b>{name}</b>", "en": "This organization is named <b>{name}</b>",
"it": "Questa organizzazione si chiama <b>{name}</b>" "it": "Questa organizzazione si chiama <b>{name}</b>",
"de": "Diese Organisation heißt <b>{name}</b>"
} }
} }
] ]

View file

@ -301,7 +301,7 @@
}, },
"id": "ghost_bike-start_date" "id": "ghost_bike-start_date"
}, },
{ {
"id": "wikidata", "id": "wikidata",
"render": { "render": {
"special": { "special": {

View file

@ -433,7 +433,8 @@
"if": "service:device-key=limited", "if": "service:device-key=limited",
"then": { "then": {
"en": "There is a limited {negative-name} available at this hackerspace", "en": "There is a limited {negative-name} available at this hackerspace",
"nl": "Er is een beperkte {negative-name} beschikbaar in deze hackerspace" "nl": "Er is een beperkte {negative-name} beschikbaar in deze hackerspace",
"de": "Es gibt einen limitierten {negative-name} in diesem Hackerspace"
}, },
"hideInAnswer": "{hide_limited}" "hideInAnswer": "{hide_limited}"
} }

View file

@ -14,7 +14,8 @@
"nl": "Een basis voor indoor-navigatie: toont binnenruimtes", "nl": "Een basis voor indoor-navigatie: toont binnenruimtes",
"cs": "Základní mapování interiérů: zobrazuje obrysy místností", "cs": "Základní mapování interiérů: zobrazuje obrysy místností",
"ca": "Mapeig interior bàsic: mostra els contorns de les habitacions", "ca": "Mapeig interior bàsic: mostra els contorns de les habitacions",
"pl": "Podstawowe mapowanie wnętrz: pokazuje kontury pomieszczeń" "pl": "Podstawowe mapowanie wnętrz: pokazuje kontury pomieszczeń",
"es": "Cartografía básica en interiores: muestra esquemas de espacio"
}, },
"source": { "source": {
"osmTags": { "osmTags": {

View file

@ -1,10 +1,12 @@
{ {
"id": "love_hotel", "id": "love_hotel",
"name": { "name": {
"en": "Love hotels" "en": "Love hotels",
"de": "Love Hotels"
}, },
"description": { "description": {
"en": "A love hotel is a type of short-stay hotel found around the world operated primarily for the purpose of allowing guests privacy for sexual activities" "en": "A love hotel is a type of short-stay hotel found around the world operated primarily for the purpose of allowing guests privacy for sexual activities",
"de": "Ein Love Hotel ist eine Art Kurzzeithotel, das in erster Linie zu dem Zweck betrieben wird, den Gästen Privatsphäre für sexuelle Aktivitäten zu bieten"
}, },
"source": { "source": {
"osmTags": "amenity=love_hotel" "osmTags": "amenity=love_hotel"
@ -12,7 +14,8 @@
"minzoom": 10, "minzoom": 10,
"title": { "title": {
"render": { "render": {
"en": "Love Hotel <i>{name}</i>" "en": "Love Hotel <i>{name}</i>",
"de": "Love Hotel <i>{name}</i>"
} }
}, },
"pointRendering": [ "pointRendering": [
@ -49,10 +52,12 @@
"presets": [ "presets": [
{ {
"title": { "title": {
"en": "a love hotel" "en": "a love hotel",
"de": "ein Love Hotel"
}, },
"description": { "description": {
"en": "A love hotel is a type of short-stay hotel found around the world operated primarily for the purpose of allowing guests privacy for sexual activities." "en": "A love hotel is a type of short-stay hotel found around the world operated primarily for the purpose of allowing guests privacy for sexual activities.",
"de": "Ein Love Hotel ist eine Art Kurzzeithotel, das in erster Linie zu dem Zweck betrieben wird, den Gästen Privatsphäre für sexuelle Aktivitäten zu bieten"
}, },
"tags": [ "tags": [
"amenity=love_hotel" "amenity=love_hotel"
@ -65,10 +70,12 @@
{ {
"id": "name", "id": "name",
"question": { "question": {
"en": "What is the name of this love hotel?" "en": "What is the name of this love hotel?",
"de": "Wie lautet der Name des Love Hotels?"
}, },
"render": { "render": {
"en": "This love hotel is named <b>{name}</b>" "en": "This love hotel is named <b>{name}</b>",
"de": "Der Name des Love Hotels lautet <b>{name}</b>"
}, },
"freeform": { "freeform": {
"key": "name" "key": "name"

View file

@ -14,7 +14,8 @@
"nl": "Laag met alle taken uit MapRoulette", "nl": "Laag met alle taken uit MapRoulette",
"ca": "Capa que mostra totes les tasques de MapRoulette", "ca": "Capa que mostra totes les tasques de MapRoulette",
"pl": "Warstwa pokazująca wszystkie zadania w MapRoulette", "pl": "Warstwa pokazująca wszystkie zadania w MapRoulette",
"cs": "Vrstva zobrazující všechny úlohy v MapRoulette" "cs": "Vrstva zobrazující všechny úlohy v MapRoulette",
"es": "Capa mostrando todas las tareas en MapRoulette"
}, },
"source": { "source": {
"geoJson": "https://maproulette.org/api/v2/tasks/box/{x_min}/{y_min}/{x_max}/{y_max}", "geoJson": "https://maproulette.org/api/v2/tasks/box/{x_min}/{y_min}/{x_max}/{y_max}",

View file

@ -17,7 +17,8 @@
"cs": "Zobrazuje povolenou rychlost pro každou silnici", "cs": "Zobrazuje povolenou rychlost pro každou silnici",
"ca": "Mostra la velocitat permesa per a cada carretera", "ca": "Mostra la velocitat permesa per a cada carretera",
"fr": "Affiche les vitesses autorisées sur toutes les routes", "fr": "Affiche les vitesses autorisées sur toutes les routes",
"pl": "Pokazuje dozwoloną prędkość na każdej drodze" "pl": "Pokazuje dozwoloną prędkość na każdej drodze",
"es": "Muestra la velocidad permitida para cada carretera"
}, },
"source": { "source": {
"osmTags": { "osmTags": {

View file

@ -21,7 +21,7 @@
"id": "Layer yang memperlihatkan kotak pos.", "id": "Layer yang memperlihatkan kotak pos.",
"hu": "Postaládákat megjelenítő réteg.", "hu": "Postaládákat megjelenítő réteg.",
"nl": "Deze laag toont brievenbussen.", "nl": "Deze laag toont brievenbussen.",
"es": "La capa que mostrando buzones de correo.", "es": "La capa muestra buzones de correo.",
"fr": "Le calque montrant les boîtes à lettres.", "fr": "Le calque montrant les boîtes à lettres.",
"ca": "La capa que mostra bústies de correus.", "ca": "La capa que mostra bústies de correus.",
"cs": "Vrstva zobrazující poštovní schránky.", "cs": "Vrstva zobrazující poštovní schránky.",

View file

@ -13,7 +13,8 @@
"fr": "Une couche affichant les passages piétons avec des peintures arc-en-ciel", "fr": "Une couche affichant les passages piétons avec des peintures arc-en-ciel",
"ca": "Una capa que mostra els passos de vianants pintats amb de l'arc de Sant Martí", "ca": "Una capa que mostra els passos de vianants pintats amb de l'arc de Sant Martí",
"cs": "Vrstva zobrazující přechody pro chodce s duhovými malbami", "cs": "Vrstva zobrazující přechody pro chodce s duhovými malbami",
"pl": "Warstwa przedstawiająca przejścia dla pieszych z tęczowym malowaniem" "pl": "Warstwa przedstawiająca przejścia dla pieszych z tęczowym malowaniem",
"es": "Una capa que muestra cruces peatonales con pinturas arco iris"
}, },
"source": { "source": {
"osmTags": { "osmTags": {

View file

@ -218,7 +218,7 @@
"cs": "Přidat nový obchod", "cs": "Přidat nový obchod",
"de": "Sie können später angeben, was das Geschäft verkauft.", "de": "Sie können später angeben, was das Geschäft verkauft.",
"eo": "Enmeti novan butikon", "eo": "Enmeti novan butikon",
"es": "Añadir una nueva tienda", "es": "Puedes especificar más adelante lo que vende esta tienda.",
"fr": "Ajouter un nouveau magasin", "fr": "Ajouter un nouveau magasin",
"ja": "新しい店を追加する", "ja": "新しい店を追加する",
"nl": "Voeg een nieuwe winkel toe", "nl": "Voeg een nieuwe winkel toe",

View file

@ -16,7 +16,8 @@
"images", "images",
{ {
"question": { "question": {
"en": "What is the difficulty of this piste?" "en": "What is the difficulty of this piste?",
"de": "Was ist der Schwierigkeitsgrad der Piste?"
}, },
"id": "piste_difficulty", "id": "piste_difficulty",
"condition": "piste:type!=connection", "condition": "piste:type!=connection",
@ -24,37 +25,43 @@
{ {
"if": "piste:difficulty=novice", "if": "piste:difficulty=novice",
"then": { "then": {
"en": "Novice (green)" "en": "Novice (green)",
"de": "Anfänger (grün)"
} }
}, },
{ {
"if": "piste:difficulty=easy", "if": "piste:difficulty=easy",
"then": { "then": {
"en": "Easy (blue)" "en": "Easy (blue)",
"de": "Einfach (blau)"
} }
}, },
{ {
"if": "piste:difficulty=intermediate", "if": "piste:difficulty=intermediate",
"then": { "then": {
"en": "Intermediate (red)" "en": "Intermediate (red)",
"de": "Mittel (rot)"
} }
}, },
{ {
"if": "piste:difficulty=advanced", "if": "piste:difficulty=advanced",
"then": { "then": {
"en": "Advanced (black)" "en": "Advanced (black)",
"de": "Fortgeschritten (schwarz)"
} }
}, },
{ {
"if": "piste:difficulty=expert", "if": "piste:difficulty=expert",
"then": { "then": {
"en": "Expert (orange/double black)" "en": "Expert (orange/double black)",
"de": "Experte (orange/doppel schwarz)"
} }
}, },
{ {
"if": "piste:difficulty=freeride", "if": "piste:difficulty=freeride",
"then": { "then": {
"en": "Freeride" "en": "Freeride",
"de": "Freeride"
} }
} }
] ]
@ -62,7 +69,8 @@
{ {
"id": "length", "id": "length",
"render": { "render": {
"en": "This part of the ski piste is {_length:km} kilometer long" "en": "This part of the ski piste is {_length:km} kilometer long",
"de": "Dieser Teil der Skipiste hat eine Länge von {_length:km} km"
} }
} }
], ],
@ -102,10 +110,12 @@
], ],
"id": "ski_piste", "id": "ski_piste",
"name": { "name": {
"en": "Ski and snowboard pistes" "en": "Ski and snowboard pistes",
"de": "Ski- und Snowboardpisten"
}, },
"description": { "description": {
"en": "Ski and snowboard pistes" "en": "Ski and snowboard pistes",
"de": "Ski- und Snowboardpisten"
}, },
"source": { "source": {
"osmTags": { "osmTags": {
@ -122,7 +132,8 @@
}, },
"title": { "title": {
"render": { "render": {
"en": "Ski piste {name}" "en": "Ski piste {name}",
"de": "Skipiste {name}"
} }
} }
} }

View file

@ -21,7 +21,8 @@
"en": "Sports centre", "en": "Sports centre",
"de": "Sportzentrum", "de": "Sportzentrum",
"ca": "Centre esportiu", "ca": "Centre esportiu",
"cs": "Sportovní centrum" "cs": "Sportovní centrum",
"id": "Pusat olahraga"
}, },
"mappings": [ "mappings": [
{ {
@ -65,7 +66,8 @@
"en": "a sports centre", "en": "a sports centre",
"de": "ein Sportzentrum", "de": "ein Sportzentrum",
"ca": "un centre esportiu", "ca": "un centre esportiu",
"cs": "sportovní centra" "cs": "sportovní centra",
"id": "pusat olahraga"
}, },
"tags": [ "tags": [
"leisure=sports_centre" "leisure=sports_centre"

View file

@ -5,14 +5,16 @@
"nl": "Trappen", "nl": "Trappen",
"de": "Treppen", "de": "Treppen",
"ca": "Escales", "ca": "Escales",
"cs": "Schody" "cs": "Schody",
"id": "Tangga"
}, },
"description": { "description": {
"en": "Layer showing stairs and escalators", "en": "Layer showing stairs and escalators",
"de": "Ebene mit Treppen und Rolltreppen", "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", "ca": "Capa que mostra escales i escales mecàniques",
"cs": "Vrstva zobrazující schody a eskalátory" "cs": "Vrstva zobrazující schody a eskalátory",
"id": "Lapisan ini menunjukkan tangga dan eskalator"
}, },
"source": { "source": {
"osmTags": "highway=steps" "osmTags": "highway=steps"
@ -93,7 +95,8 @@
"nl": "Dit is een roltrap", "nl": "Dit is een roltrap",
"de": "Das ist eine Rolltreppe", "de": "Das ist eine Rolltreppe",
"ca": "Açò és una escala mecànica", "ca": "Açò és una escala mecànica",
"cs": "Jedná se o eskalátor" "cs": "Jedná se o eskalátor",
"id": "Ini adalah eskalator"
} }
}, },
{ {
@ -103,7 +106,8 @@
"nl": "Dit is geen roltrap", "nl": "Dit is geen roltrap",
"de": "Das ist keine Rolltreppe", "de": "Das ist keine Rolltreppe",
"ca": "Açò no és una escala mecànica", "ca": "Açò no és una escala mecànica",
"cs": "Nejedná se o eskalátor" "cs": "Nejedná se o eskalátor",
"id": "Ini bukan eskalator"
} }
}, },
{ {
@ -113,7 +117,8 @@
"nl": "Dit is geen roltrap", "nl": "Dit is geen roltrap",
"de": "Das ist keine Rolltreppe", "de": "Das ist keine Rolltreppe",
"ca": "Això no és una escala mecànica", "ca": "Això no és una escala mecànica",
"cs": "Nejedná se o eskalátor" "cs": "Nejedná se o eskalátor",
"id": "Ini bukan eskalator"
}, },
"hideInAnswer": true "hideInAnswer": true
} }
@ -126,7 +131,8 @@
"nl": "Heeft deze trap een leuning?", "nl": "Heeft deze trap een leuning?",
"de": "Hat die Treppe einen Handlauf?", "de": "Hat die Treppe einen Handlauf?",
"ca": "Aquestes escales tenen un passamà?", "ca": "Aquestes escales tenen un passamà?",
"cs": "Má toto schodiště zábradlí?" "cs": "Má toto schodiště zábradlí?",
"id": "Apakah tangga ini memiliki pegangan?"
}, },
"mappings": [ "mappings": [
{ {
@ -136,7 +142,8 @@
"nl": "Deze trap heeft een leuning", "nl": "Deze trap heeft een leuning",
"de": "Die Treppe hat einen Handlauf", "de": "Die Treppe hat einen Handlauf",
"ca": "Aquestes escales tenen barana", "ca": "Aquestes escales tenen barana",
"cs": "Tyto schody mají zábradlí" "cs": "Tyto schody mají zábradlí",
"id": "Tangga ini memiliki pegangan tangan"
} }
}, },
{ {
@ -146,7 +153,8 @@
"nl": "Deze trap heeft <b>geen</b> leuning", "nl": "Deze trap heeft <b>geen</b> leuning",
"de": "Die Treppe hat <b>keinen</b> Handlauf", "de": "Die Treppe hat <b>keinen</b> Handlauf",
"ca": "Aquestes escales <b>no</b> tenen un passamà", "ca": "Aquestes escales <b>no</b> tenen un passamà",
"cs": "Tyto schody <b>nemají</b> zábradlí" "cs": "Tyto schody <b>nemají</b> zábradlí",
"id": "Tangga ini <b>tidak </b>memiliki pegangan tangan"
} }
} }
], ],
@ -295,7 +303,8 @@
"render": { "render": {
"en": "These stairs have an incline of {incline}", "en": "These stairs have an incline of {incline}",
"ca": "Aquestes escales tenen una inclinació de {incline}", "ca": "Aquestes escales tenen una inclinació de {incline}",
"de": "Die Treppe hat eine Steigung von {incline}" "de": "Die Treppe hat eine Steigung von {incline}",
"id": "Tangga ini memiliki kemiringan sebesar {incline}"
}, },
"freeform": { "freeform": {
"key": "incline", "key": "incline",
@ -304,7 +313,8 @@
"question": { "question": {
"en": "What is the incline of these stairs?", "en": "What is the incline of these stairs?",
"ca": "Quina és la inclinació d'aquestes escales?", "ca": "Quina és la inclinació d'aquestes escales?",
"de": "Welche Steigung hat die Treppe?" "de": "Welche Steigung hat die Treppe?",
"id": "Berapa kemiringan tangga ini?"
}, },
"mappings": [ "mappings": [
{ {
@ -312,7 +322,8 @@
"then": { "then": {
"en": "The upward direction is {direction_absolute()}", "en": "The upward direction is {direction_absolute()}",
"ca": "La direcció ascendent és {direction_absolute()}", "ca": "La direcció ascendent és {direction_absolute()}",
"de": "Die Aufwärtsrichtung ist {direction_absolute()}" "de": "Die Aufwärtsrichtung ist {direction_absolute()}",
"id": "Arah ke atas adalah {direction_absolute()}"
}, },
"hideInAnswer": true "hideInAnswer": true
}, },
@ -321,7 +332,8 @@
"then": { "then": {
"en": "The downward direction is {direction_absolute()}", "en": "The downward direction is {direction_absolute()}",
"ca": "La direcció descendent és {direction_absolute()}", "ca": "La direcció descendent és {direction_absolute()}",
"de": "Die Abwärtsrichtung ist {direction_absolute()}" "de": "Die Abwärtsrichtung ist {direction_absolute()}",
"id": "Arah ke bawah adalah {direction_absolute()}"
}, },
"hideInAnswer": true "hideInAnswer": true
} }

View file

@ -1,10 +1,12 @@
{ {
"id": "stripclub", "id": "stripclub",
"name": { "name": {
"en": "Stripclubs" "en": "Stripclubs",
"de": "Stripclubs"
}, },
"description": { "description": {
"en": "A venue where erotic dance, striptease, or lap dances are performed commercially. " "en": "A venue where erotic dance, striptease, or lap dances are performed commercially. ",
"de": "Ein Ort, an dem erotische Tanz-, Striptease- oder Lapdances kommerziell durchgeführt werden. "
}, },
"source": { "source": {
"osmTags": "amenity=stripclub", "osmTags": "amenity=stripclub",
@ -13,7 +15,8 @@
"minzoom": 6, "minzoom": 6,
"title": { "title": {
"render": { "render": {
"en": "Stripclub" "en": "Stripclub",
"de": "Stripclub"
}, },
"mappings": [ "mappings": [
{ {
@ -56,7 +59,8 @@
"presets": [ "presets": [
{ {
"title": { "title": {
"en": "a stripclub" "en": "a stripclub",
"de": "ein Stripclub"
}, },
"tags": [ "tags": [
"amenity=stripclub" "amenity=stripclub"
@ -74,10 +78,12 @@
"key": "name" "key": "name"
}, },
"question": { "question": {
"en": "What is the name of this stripclub?" "en": "What is the name of this stripclub?",
"de": "Wie lautet der Name des Stripclubs?"
}, },
"render": { "render": {
"en": "This stripclub is named <b>{name}</b>" "en": "This stripclub is named <b>{name}</b>",
"de": "Der Name des Stripclubs lautet <b>{name}</b>"
} }
}, },
"opening_hours", "opening_hours",

View file

@ -786,7 +786,7 @@
"fr": "La table à langer est dans un espace dédié. ", "fr": "La table à langer est dans un espace dédié. ",
"nl": "Er bevindt zich een luiertafel in een daartoe voorziene kamer ", "nl": "Er bevindt zich een luiertafel in een daartoe voorziene kamer ",
"it": "Il fasciatoio è in una stanza dedicata. ", "it": "Il fasciatoio è in una stanza dedicata. ",
"es": "El cambiador está en una habitación dedicada ", "es": "El cambiador está en una habitación dedicada",
"da": "Vuggestuen står i et særligt rum. ", "da": "Vuggestuen står i et særligt rum. ",
"ca": "El canviador està en una habitació dedicada. ", "ca": "El canviador està en una habitació dedicada. ",
"cs": "Přebalovací pult je ve vyhrazené místnosti. " "cs": "Přebalovací pult je ve vyhrazené místnosti. "

View file

@ -1,2 +1,2 @@
SPDX-FileCopyrightText: Pieter Vander Vennet SPDX-FileCopyrightText: Pieter Vander Vennet
SPDX-License-Identifier: CC0 SPDX-License-Identifier: CC0-1.0

View file

@ -1,2 +1,2 @@
SPDX-FileCopyrightText: Pieter Vander Vennet SPDX-FileCopyrightText: Pieter Vander Vennet
SPDX-License-Identifier: CC0 SPDX-License-Identifier: CC0-1.0

View file

@ -1,7 +1,9 @@
{ {
"description": { "description": {
"en": "This map contains elements meant for disaster preparedness and response.", "en": "This map contains elements meant for disaster preparedness and response.",
"it": "Questa mappa contiene elementi pensati per la preparazione e risposta ai disastri." "it": "Questa mappa contiene elementi pensati per la preparazione e risposta ai disastri.",
"de": "Diese Karte enthält Elemente, die der Katastrophenvorsorge und dem Katastrophenschutz dienen.",
"es": "Este mapa contiene elementos destinados a la preparación y respuesta ante desastres."
}, },
"docs": "https://wiki.openstreetmap.org/wiki/Emergency_facilities_and_amenities", "docs": "https://wiki.openstreetmap.org/wiki/Emergency_facilities_and_amenities",
"icon": "./assets/themes/disaster_response/CivilDefence.svg", "icon": "./assets/themes/disaster_response/CivilDefence.svg",
@ -9,7 +11,9 @@
"socialImage": "./assets/themes/disaster_response/social.svg", "socialImage": "./assets/themes/disaster_response/social.svg",
"title": { "title": {
"en": "Disaster response", "en": "Disaster response",
"it": "Risposta ai disastri" "it": "Risposta ai disastri",
"de": "Katastrophenschutz",
"es": "Respuesta ante desastres"
}, },
"layers": [ "layers": [
"hospital", "hospital",

View file

@ -13,7 +13,7 @@
"ca": "Espai per a hackers", "ca": "Espai per a hackers",
"pa_PK": "ہیکر دے تھاں", "pa_PK": "ہیکر دے تھاں",
"cs": "Hackerspaces", "cs": "Hackerspaces",
"es": "Hackerspaces and makerspaces", "es": "Hackerspaces y makerspaces",
"eu": "Hackerspace", "eu": "Hackerspace",
"pl": "Hackerspace'y" "pl": "Hackerspace'y"
}, },

View file

@ -1,10 +1,14 @@
{ {
"id": "openlovemap", "id": "openlovemap",
"title": { "title": {
"en": "Open Love Map" "en": "Open Love Map",
"de": "Open Love Map",
"es": "Open Love Map"
}, },
"description": { "description": {
"en": "<p><i>Love in the palm of your hand</i></p>Open Love Map lists various adult entries, such as brothels, erotic stores and stripclubs." "en": "<p><i>Love in the palm of your hand</i></p>Open Love Map lists various adult entries, such as brothels, erotic stores and stripclubs.",
"de": "<p><i>Liebe in der Hand</i></p>Open Love Map listet verschiedene Einträge für Erwachsene, wie Bordelle, Erotikshops und Stripclubs.",
"es": "<p><i>Amor en la palma de tu mano</i></p>Open Love Map lista varias entradas para adultos, como burdeles, tiendas eróticas y clubs de striptease."
}, },
"icon": "./assets/layers/stripclub/stripclub.svg", "icon": "./assets/layers/stripclub/stripclub.svg",
"hideFromOverview": true, "hideFromOverview": true,
@ -23,12 +27,16 @@
"open_now" "open_now"
], ],
"name": { "name": {
"en": "Erotic shops" "en": "Erotic shops",
"de": "Erotikgeschäfte",
"es": "Tiendas eróticas"
}, },
"=presets": [ "=presets": [
{ {
"title": { "title": {
"en": "an erotic shop" "en": "an erotic shop",
"de": "ein Erotikgeschäft",
"es": "una tienda erótica"
}, },
"tags": [ "tags": [
"shop=erotic" "shop=erotic"
@ -100,7 +108,9 @@
"=presets": [ "=presets": [
{ {
"title": { "title": {
"en": "a condom vending machine" "en": "a condom vending machine",
"de": "ein Kondomautomat",
"es": "una máquina de venta de condones"
}, },
"tags": [ "tags": [
"amenity=vending_machine", "amenity=vending_machine",
@ -176,7 +186,9 @@
"=presets": [ "=presets": [
{ {
"title": { "title": {
"en": "an erotic cinema" "en": "an erotic cinema",
"de": "Ein Sex-Kino",
"es": "un cine erótico"
}, },
"tags": [ "tags": [
"amenity=cinema", "amenity=cinema",
@ -203,7 +215,9 @@
{ {
"id": "hotel-type", "id": "hotel-type",
"question": { "question": {
"en": "What type of hotel is this?" "en": "What type of hotel is this?",
"de": "Welche Art von Hotel ist das?",
"es": "¿Qué tipo de hotel es este?"
}, },
"mappings": [ "mappings": [
{ {
@ -232,10 +246,14 @@
{ {
"id": "has_video_booth", "id": "has_video_booth",
"question": { "question": {
"en": "Does {title()} have a private video booth?" "en": "Does {title()} have a private video booth?",
"de": "Hat {title()} eine private Videokabine?",
"es": "¿Este {título()} tiene una cabina de video privada?"
}, },
"questionHint": { "questionHint": {
"en": "This is for use by a single person." "en": "This is for use by a single person.",
"de": "Dies ist für die Nutzung durch eine einzelne Person vorgesehen.",
"es": "Esto es para uso de una sola persona."
}, },
"mappings": [ "mappings": [
{ {

View file

@ -1,10 +1,14 @@
{ {
"id": "ski", "id": "ski",
"title": { "title": {
"en": "Ski pistes and aerialways" "en": "Ski pistes and aerialways",
"de": "Skipisten und Seilbahnen",
"es": "Pistas de esquí y vías aéreas"
}, },
"description": { "description": {
"en": "Everything you need to go skiing" "en": "Everything you need to go skiing",
"de": "Alles, was Sie zum Skifahren brauchen",
"es": "Todo lo que necesitas para esquiar"
}, },
"icon": "./assets/layers/aerialway/chair_lift.svg", "icon": "./assets/layers/aerialway/chair_lift.svg",
"enableTerrain": true, "enableTerrain": true,

View file

@ -169,7 +169,6 @@
"ask_feedback": { "ask_feedback": {
"en": "Is this point incorrect or is it difficult to solve? Please provide some feedback below", "en": "Is this point incorrect or is it difficult to solve? Please provide some feedback below",
"nl": "Is dit punt foutief of te moeilijk? Gelieve wat feedback te geven" "nl": "Is dit punt foutief of te moeilijk? Gelieve wat feedback te geven"
} }
} }
} }

View file

@ -3,13 +3,15 @@
"title": { "title": {
"en": "Walking Node Networks", "en": "Walking Node Networks",
"nl": "Wandelknooppuntnetwerken", "nl": "Wandelknooppuntnetwerken",
"de": "Netzwerke von Wanderknoten" "de": "Netzwerke von Wanderknoten",
"es": "Redes de nodos de senderismo"
}, },
"description": { "description": {
"en": "This map shows walking node networks and allows you to add new nodes easily", "en": "This map shows walking node networks and allows you to add new nodes easily",
"nl": "Deze kaart toont wandelknooppunten en laat je toe om eenvoudigweg nieuwe knooppunten toe te voegen", "nl": "Deze kaart toont wandelknooppunten en laat je toe om eenvoudigweg nieuwe knooppunten toe te voegen",
"de": "Diese Karte zeigt Wandernetzwerke und ermöglicht es Ihnen, einfach neue Knoten hinzuzufügen", "de": "Diese Karte zeigt Wandernetzwerke und ermöglicht es Ihnen, einfach neue Knoten hinzuzufügen",
"cs": "Tato mapa zobrazuje sítě uzlových bodů a umožňuje snadné přidávání nových uzlů" "cs": "Tato mapa zobrazuje sítě uzlových bodů a umožňuje snadné přidávání nových uzlů",
"es": "Este mapa muestra las redes de nodos de senderismo y le permite añadir nuevos nodos fácilmente"
}, },
"icon": "./assets/themes/walkingnodes/logo.svg", "icon": "./assets/themes/walkingnodes/logo.svg",
"startZoom": 11, "startZoom": 11,
@ -168,7 +170,8 @@
"render": { "render": {
"en": "Walking node", "en": "Walking node",
"nl": "Wandelknooppunt", "nl": "Wandelknooppunt",
"de": "Wanderknoten" "de": "Wanderknoten",
"es": "Nodo de senderismo"
}, },
"mappings": [ "mappings": [
{ {
@ -176,7 +179,8 @@
"then": { "then": {
"en": "Walking node <strong>{rwn_ref}</strong>", "en": "Walking node <strong>{rwn_ref}</strong>",
"nl": "Wandelknooppunt <strong>{rwn_ref}</strong>", "nl": "Wandelknooppunt <strong>{rwn_ref}</strong>",
"de": "Wanderknoten <strong>{rwn_ref}</strong>" "de": "Wanderknoten <strong>{rwn_ref}</strong>",
"es": "Nodo de senderismo <strong>{rwn_ref}</strong>"
} }
}, },
{ {
@ -184,7 +188,8 @@
"then": { "then": {
"en": "Proposed walking node <strong>{proposed:rwn_ref}</strong>", "en": "Proposed walking node <strong>{proposed:rwn_ref}</strong>",
"nl": "Voorgesteld wandelknooppunt <strong>{proposed:rwn_ref}</strong>", "nl": "Voorgesteld wandelknooppunt <strong>{proposed:rwn_ref}</strong>",
"de": "Vorgeschlagener Wanderknoten <strong>{proposed:rwn_ref}</strong>" "de": "Vorgeschlagener Wanderknoten <strong>{proposed:rwn_ref}</strong>",
"es": "Nodo de senderismo propuesto <strong>{proposed:rwn_ref}</strong>"
} }
} }
] ]
@ -196,7 +201,8 @@
"en": "What is the reference number of this walking node?", "en": "What is the reference number of this walking node?",
"nl": "Wat is het referentienummer van dit wandelknooppunt?", "nl": "Wat is het referentienummer van dit wandelknooppunt?",
"de": "Was ist die Referenznummer dieses Wanderknotens?", "de": "Was ist die Referenznummer dieses Wanderknotens?",
"cs": "Jaké je referenční číslo tohoto pěšího uzlu?" "cs": "Jaké je referenční číslo tohoto pěšího uzlu?",
"es": "¿Cuál es el número de referencia de este nodo de senderismo?"
}, },
"freeform": { "freeform": {
"key": "rwn_ref", "key": "rwn_ref",
@ -205,13 +211,15 @@
"en": "e.g. 1", "en": "e.g. 1",
"nl": "bijv. 1", "nl": "bijv. 1",
"de": "z.B. 1", "de": "z.B. 1",
"cs": "e.g. 1" "cs": "e.g. 1",
"es": "Por ejemplo, 1"
} }
}, },
"render": { "render": {
"en": "This walking node has reference number {rwn_ref}", "en": "This walking node has reference number {rwn_ref}",
"nl": "Dit wandelknooppunt heeft referentienummer {rwn_ref}", "nl": "Dit wandelknooppunt heeft referentienummer {rwn_ref}",
"de": "Dieser Wanderknoten hat die Referenznummer {rwn_ref}" "de": "Dieser Wanderknoten hat die Referenznummer {rwn_ref}",
"es": "Este nodo de senderismo tiene la referencia número {rwn_ref}"
}, },
"condition": "rwn_ref~*" "condition": "rwn_ref~*"
}, },
@ -221,12 +229,14 @@
"question": { "question": {
"en": "When was this walking node last surveyed?", "en": "When was this walking node last surveyed?",
"nl": "Wanneer is dit wandelknooppunt het laatst gesurveyed?", "nl": "Wanneer is dit wandelknooppunt het laatst gesurveyed?",
"de": "Wann wurde dieser Wanderknoten zuletzt überprüft?" "de": "Wann wurde dieser Wanderknoten zuletzt überprüft?",
"es": "¿Cuándo fue la última revisión de este nodo de senderismo?"
}, },
"render": { "render": {
"en": "This walking node was last surveyed on {survey:date}", "en": "This walking node was last surveyed on {survey:date}",
"nl": "Dit wandelknooppunt werd het laatst gesurveyed op {survey:date}", "nl": "Dit wandelknooppunt werd het laatst gesurveyed op {survey:date}",
"de": "Dieser Wanderknoten wurde zuletzt am {survey:date} überprüft" "de": "Dieser Wanderknoten wurde zuletzt am {survey:date} überprüft",
"es": "Este nodo de senderismo fue revisado por última vez en {survey:date}"
} }
} }
}, },
@ -235,12 +245,14 @@
"en": "How many other walking nodes does this node link to?", "en": "How many other walking nodes does this node link to?",
"nl": "Met hoeveel andere wandelknooppunten heeft dit knooppunt een verbinding?", "nl": "Met hoeveel andere wandelknooppunten heeft dit knooppunt een verbinding?",
"de": "Mit wie vielen anderen Wanderknoten ist dieser Knoten verbunden?", "de": "Mit wie vielen anderen Wanderknoten ist dieser Knoten verbunden?",
"cs": "S kolika dalšími pěšími uzly je tento uzel propojen?" "cs": "S kolika dalšími pěšími uzly je tento uzel propojen?",
"es": "¿A cuántos otros nodos de senderismo conecta este nodo?"
}, },
"render": { "render": {
"en": "This node links to {expected_rwn_route_relations} other walking nodes.", "en": "This node links to {expected_rwn_route_relations} other walking nodes.",
"nl": "Dit knooppunt verbindt met {expected_rwn_route_relations} andere wandelknooppunten.", "nl": "Dit knooppunt verbindt met {expected_rwn_route_relations} andere wandelknooppunten.",
"de": "Dieser Knoten ist mit {expected_rwn_route_relations} anderen Wanderknoten verbunden." "de": "Dieser Knoten ist mit {expected_rwn_route_relations} anderen Wanderknoten verbunden.",
"es": "Este nodo se vincula a {expected_rwn_route_relations} otros nodos de senderismo."
}, },
"freeform": { "freeform": {
"key": "expected_rwn_route_relations", "key": "expected_rwn_route_relations",
@ -249,7 +261,8 @@
"en": "e.g. 3", "en": "e.g. 3",
"nl": "bijv. 3", "nl": "bijv. 3",
"de": "z.B. 3", "de": "z.B. 3",
"cs": "e.g. 3" "cs": "e.g. 3",
"es": "Por ejemplo, 3"
} }
}, },
"id": "node-expected_rwn_route_relations" "id": "node-expected_rwn_route_relations"
@ -265,7 +278,8 @@
"title": { "title": {
"en": "a walking node", "en": "a walking node",
"nl": "een wandelknooppunt", "nl": "een wandelknooppunt",
"de": "ein Wanderknoten" "de": "ein Wanderknoten",
"es": "un nodo de senderismo"
}, },
"snapToLayer": [ "snapToLayer": [
"cycleways_and_roads" "cycleways_and_roads"
@ -298,12 +312,14 @@
], ],
"name": { "name": {
"en": "Hiking guideposts", "en": "Hiking guideposts",
"de": "Wanderwegweiser" "de": "Wanderwegweiser",
"es": "Postes guías de senderismo"
}, },
"title": { "title": {
"render": { "render": {
"en": "Hiking guidepost", "en": "Hiking guidepost",
"de": "Wanderwegweiser" "de": "Wanderwegweiser",
"es": "Poste guía de senderismo"
} }
} }
}, },
@ -334,7 +350,8 @@
], ],
"title": { "title": {
"en": "a route marker for a node to node link", "en": "a route marker for a node to node link",
"de": "Eine Routenmarkierung für eine Verbindung von Knoten zu Knoten" "de": "Eine Routenmarkierung für eine Verbindung von Knoten zu Knoten",
"es": "un marcador de ruta para un enlace de nodo a nodo"
}, },
"=exampleImages": [ "=exampleImages": [
"./assets/layers/route_marker/walking_route_marker.jpg" "./assets/layers/route_marker/walking_route_marker.jpg"

View file

@ -8422,6 +8422,23 @@
"render": "Arbre" "render": "Arbre"
} }
}, },
"trolley_bay": {
"tagRenderings": {
"denominations": {
"mappings": {
"0": {
"then": "S'accepten monedes de 50 cèntims"
},
"1": {
"then": "S'accepten monedes de 1 euro"
},
"2": {
"then": "S'accepten monedes de 2 euros"
}
}
}
}
},
"unit": { "unit": {
"units": { "units": {
"0": { "0": {

View file

@ -8711,6 +8711,23 @@
"render": "Strom" "render": "Strom"
} }
}, },
"trolley_bay": {
"tagRenderings": {
"denominations": {
"mappings": {
"0": {
"then": "Jsou přijímány mince v hodnotě 50 centů"
},
"1": {
"then": "Jsou přijímány mince v hodnotě 1 eura"
},
"2": {
"then": "Jsou přijímány mince v hodnotě 2 euro"
}
}
}
}
},
"unit": { "unit": {
"units": { "units": {
"0": { "0": {

File diff suppressed because it is too large Load diff

View file

@ -258,6 +258,17 @@
"question": "How many people fit a single carriage?", "question": "How many people fit a single carriage?",
"render": "{aerialway:occupancy} people fit a single carriage" "render": "{aerialway:occupancy} people fit a single carriage"
}, },
"oneway": {
"mappings": {
"0": {
"then": "This aerialway can only be taken to the top"
},
"1": {
"then": "This aerialway can be taken in both directions"
}
},
"question": "In what direction can this aerialway be taken?"
},
"type": { "type": {
"mappings": { "mappings": {
"0": { "0": {
@ -5101,6 +5112,11 @@
"ghost_bike-start_date": { "ghost_bike-start_date": {
"question": "When was this Ghost bike installed?", "question": "When was this Ghost bike installed?",
"render": "Placed on {start_date}" "render": "Placed on {start_date}"
},
"wikidata": {
"render": {
"before": "<h3>Wikipedia page about the deceased person</h3>"
}
} }
}, },
"title": { "title": {
@ -6108,6 +6124,18 @@
"render": "Memorial plaque" "render": "Memorial plaque"
} }
}, },
"mountain_rescue": {
"description": "A building where first aid responders store material and might be on watch",
"name": "Mountain rescue stations",
"presets": {
"0": {
"title": "a mountain rescue station"
}
},
"title": {
"render": "Mountain rescue station"
}
},
"nature_reserve": { "nature_reserve": {
"description": "A nature reserve is an area where nature can take its course", "description": "A nature reserve is an area where nature can take its course",
"filter": { "filter": {
@ -6685,6 +6713,9 @@
"mappings": { "mappings": {
"0": { "0": {
"then": "Disabled Parking Space" "then": "Disabled Parking Space"
},
"1": {
"then": "Electric Vehicle Charging Parking Space"
} }
}, },
"render": "Parking Space" "render": "Parking Space"
@ -9327,6 +9358,48 @@
} }
}, },
"tagRenderings": { "tagRenderings": {
"gender_segregated": {
"mappings": {
"0": {
"then": "There is a separate, signposted area for men and women"
},
"1": {
"then": "There is no separate, signposted area for men and women"
}
},
"question": "Are these toilets gender-segregated?",
"questionHint": "Are there separate stalls or separate areas for men and women and are they signposted as such?"
},
"menstrual_products": {
"mappings": {
"0": {
"then": "Free menstrual products are available to all visitors of these toilets"
},
"1": {
"then": "Free menstrual products are available to some visitors of these toilets"
},
"2": {
"then": "No free menstrual products are available here"
}
},
"question": "Are free, menstrual products distributed here?",
"questionHint": "This is only about menstrual products that are free of charge. If e.g. a vending machine is available which charges for menstrual products, ignore it for this question."
},
"menstrual_products_location": {
"mappings": {
"0": {
"then": "The free, menstrual products are located in the toilet for women"
},
"1": {
"then": "The free, menstrual products are located in the toilet for men"
},
"2": {
"then": "The free, menstrual products are located in the toilet for wheelchair users"
}
},
"question": "Where are the free menstrual products located?",
"render": "The menstrual products are located in {toilets:menstrual_products:location}"
},
"opening_hours_24_7": { "opening_hours_24_7": {
"override": { "override": {
"question": "When are these toilets opened?" "question": "When are these toilets opened?"
@ -9924,6 +9997,78 @@
"render": "Tree" "render": "Tree"
} }
}, },
"trolley_bay": {
"description": "Find trolley bays for shopping trolleys.",
"name": "Trolley Bays",
"presets": {
"0": {
"description": "A trolley bay for parking shopping carts.",
"title": "a trolley bay"
}
},
"tagRenderings": {
"cart_types": {
"mappings": {
"0": {
"then": "Trolleys with a magnifier are available"
},
"1": {
"then": "Trolleys for wheelchair users are available"
},
"2": {
"then": "Trolleys for children are available"
},
"3": {
"then": "Trolleys with seats for children are available"
},
"4": {
"then": "Trolleys with a flatbed are available"
},
"5": {
"then": "Vertical trolleys for sheet-like goods are available"
}
},
"question": "What kind of special trolleys are available?"
},
"covered": {
"mappings": {
"0": {
"then": "This trolley bay is covered"
},
"1": {
"then": "This trolley bay is not covered"
}
},
"question": "Is this trolley bay covered?"
},
"denominations": {
"mappings": {
"0": {
"then": "50 cent coins are accepted"
},
"1": {
"then": "1 euro coins are accepted"
},
"2": {
"then": "2 euro coins are accepted"
}
},
"question": "What coins are accepted for the deposit?"
},
"deposit": {
"mappings": {
"0": {
"then": "A deposit is required for the trolleys"
},
"1": {
"then": "No deposit is required for the trolleys"
}
},
"question": "Is a deposit (e.g. a coin) required for the trolleys?"
}
},
"title": "Trolley Bay"
},
"unit": { "unit": {
"description": "Library layer with all common units. Units can _only_ be imported from this file.", "description": "Library layer with all common units. Units can _only_ be imported from this file.",
"units": { "units": {

View file

@ -35,16 +35,6 @@
"1": { "1": {
"title": "un mupi" "title": "un mupi"
}, },
"10": {
"description": "Se utiliza para carteles publicitarios, letreros de neón, logotipos y carteles en entradas institucionales",
"title": "un señal"
},
"11": {
"title": "una escultura"
},
"12": {
"title": "una pared pintada"
},
"2": { "2": {
"title": "un mupi sobre la pared" "title": "un mupi sobre la pared"
}, },
@ -71,6 +61,16 @@
}, },
"9": { "9": {
"title": "un tótem" "title": "un tótem"
},
"10": {
"description": "Se utiliza para carteles publicitarios, letreros de neón, logotipos y carteles en entradas institucionales",
"title": "un señal"
},
"11": {
"title": "una escultura"
},
"12": {
"title": "una pared pintada"
} }
}, },
"tagRenderings": { "tagRenderings": {
@ -165,9 +165,6 @@
"1": { "1": {
"then": "Esto es un tablón de anuncios" "then": "Esto es un tablón de anuncios"
}, },
"10": {
"then": "Esto es una pared pintada"
},
"2": { "2": {
"then": "Esto es una columna" "then": "Esto es una columna"
}, },
@ -191,6 +188,9 @@
}, },
"9": { "9": {
"then": "Esto es un tótem" "then": "Esto es un tótem"
},
"10": {
"then": "Esto es una pared pintada"
} }
}, },
"question": "¿Qué tipo de elemento publicitario es?", "question": "¿Qué tipo de elemento publicitario es?",
@ -205,9 +205,6 @@
"1": { "1": {
"then": "Tablon de anuncios" "then": "Tablon de anuncios"
}, },
"10": {
"then": "Pared Pintada"
},
"2": { "2": {
"then": "Mupi" "then": "Mupi"
}, },
@ -231,6 +228,9 @@
}, },
"9": { "9": {
"then": "Tótem" "then": "Tótem"
},
"10": {
"then": "Pared Pintada"
} }
} }
} }
@ -353,15 +353,6 @@
"1": { "1": {
"then": "Mural" "then": "Mural"
}, },
"10": {
"then": "Azulejo (Baldosas decorativas Españolas y Portuguesas)"
},
"11": {
"then": "Cerámica"
},
"12": {
"then": "Tallado en madera"
},
"2": { "2": {
"then": "Pintura" "then": "Pintura"
}, },
@ -385,6 +376,15 @@
}, },
"9": { "9": {
"then": "Relieve" "then": "Relieve"
},
"10": {
"then": "Azulejo (Baldosas decorativas Españolas y Portuguesas)"
},
"11": {
"then": "Cerámica"
},
"12": {
"then": "Tallado en madera"
} }
}, },
"question": "¿Qué tipo de obra es esta pieza?", "question": "¿Qué tipo de obra es esta pieza?",
@ -1952,12 +1952,6 @@
"1": { "1": {
"then": "Este carril bici está pavimentado" "then": "Este carril bici está pavimentado"
}, },
"10": {
"then": "Este carril bici está hecho de gravilla"
},
"12": {
"then": "Este carril bici está hecho de tierra natural"
},
"2": { "2": {
"then": "Este carril bici está hecho de asfalto" "then": "Este carril bici está hecho de asfalto"
}, },
@ -1972,6 +1966,12 @@
}, },
"9": { "9": {
"then": "Este carril bici está hecho de grava" "then": "Este carril bici está hecho de grava"
},
"10": {
"then": "Este carril bici está hecho de gravilla"
},
"12": {
"then": "Este carril bici está hecho de tierra natural"
} }
}, },
"question": "¿De qué superficie está hecho este carril bici?", "question": "¿De qué superficie está hecho este carril bici?",
@ -2017,9 +2017,6 @@
"1": { "1": {
"then": "Este carril bici está pavimentado" "then": "Este carril bici está pavimentado"
}, },
"10": {
"then": "Este carril bici está hecho de gravilla"
},
"2": { "2": {
"then": "Este carril bici está hecho de asfalto" "then": "Este carril bici está hecho de asfalto"
}, },
@ -2031,6 +2028,9 @@
}, },
"9": { "9": {
"then": "Este carril bici está hecho de grava" "then": "Este carril bici está hecho de grava"
},
"10": {
"then": "Este carril bici está hecho de gravilla"
} }
}, },
"question": "¿De qué esta hecha la superficie de esta calle?", "question": "¿De qué esta hecha la superficie de esta calle?",
@ -2672,18 +2672,6 @@
"0": { "0": {
"then": "Esto es una pizzería" "then": "Esto es una pizzería"
}, },
"10": {
"then": "Aquí se sirven platos Chinos"
},
"11": {
"then": "Aquí se sirven platos Griegos"
},
"12": {
"then": "Aquí se sirven platos Indios"
},
"13": {
"then": "Aquí se sirven platos Turcos"
},
"2": { "2": {
"then": "Principalmente sirve pasta" "then": "Principalmente sirve pasta"
}, },
@ -2704,6 +2692,18 @@
}, },
"9": { "9": {
"then": "Aquí se sirven platos Franceses" "then": "Aquí se sirven platos Franceses"
},
"10": {
"then": "Aquí se sirven platos Chinos"
},
"11": {
"then": "Aquí se sirven platos Griegos"
},
"12": {
"then": "Aquí se sirven platos Indios"
},
"13": {
"then": "Aquí se sirven platos Turcos"
} }
}, },
"question": "¿Qué tipo de comida sirven aquí?", "question": "¿Qué tipo de comida sirven aquí?",
@ -3095,19 +3095,6 @@
} }
} }
}, },
"10": {
"options": {
"0": {
"question": "Todas las notas"
},
"1": {
"question": "Ocultar las notas de importación"
},
"2": {
"question": "Solo mostrar las notas de importación"
}
}
},
"2": { "2": {
"options": { "options": {
"0": { "0": {
@ -3163,6 +3150,19 @@
"question": "Solo mostrar las notas abiertas" "question": "Solo mostrar las notas abiertas"
} }
} }
},
"10": {
"options": {
"0": {
"question": "Todas las notas"
},
"1": {
"question": "Ocultar las notas de importación"
},
"2": {
"question": "Solo mostrar las notas de importación"
}
}
} }
}, },
"name": "Notas de OpenStreetMap", "name": "Notas de OpenStreetMap",
@ -3772,6 +3772,24 @@
"1": { "1": {
"question": "Reciclaje de baterías" "question": "Reciclaje de baterías"
}, },
"3": {
"question": "Reciclaje de latas"
},
"4": {
"question": "Reciclaje de ropa"
},
"5": {
"question": "Reciclaje de aceite de cocina"
},
"6": {
"question": "Reciclaje de aceite de motor"
},
"8": {
"question": "Reciclaje de residuos orgánicos"
},
"9": {
"question": "Reciclaje de botellas de cristal"
},
"10": { "10": {
"question": "Reciclaje de cristal" "question": "Reciclaje de cristal"
}, },
@ -3798,24 +3816,6 @@
}, },
"18": { "18": {
"question": "Reciclaje de pequeños electrodomésticos" "question": "Reciclaje de pequeños electrodomésticos"
},
"3": {
"question": "Reciclaje de latas"
},
"4": {
"question": "Reciclaje de ropa"
},
"5": {
"question": "Reciclaje de aceite de cocina"
},
"6": {
"question": "Reciclaje de aceite de motor"
},
"8": {
"question": "Reciclaje de residuos orgánicos"
},
"9": {
"question": "Reciclaje de botellas de cristal"
} }
} }
} }
@ -3858,6 +3858,27 @@
"0": { "0": {
"then": "Aquí se pueden reciclar baterías" "then": "Aquí se pueden reciclar baterías"
}, },
"2": {
"then": "Aquí se pueden reciclar latas"
},
"3": {
"then": "Aquí se puede reciclar ropa"
},
"4": {
"then": "Aquí se puede reciclar aceite de cocina"
},
"5": {
"then": "Aquí se puede reciclar aceite de motor"
},
"7": {
"then": "Los residuos orgánicos pueden reciclarse aquí"
},
"8": {
"then": "Aquí se pueden reciclar residuos orgánicos"
},
"9": {
"then": "Aquí se pueden reciclar botellas de cristal"
},
"10": { "10": {
"then": "Aquí se puede reciclar cristal" "then": "Aquí se puede reciclar cristal"
}, },
@ -3884,27 +3905,6 @@
}, },
"19": { "19": {
"then": "El calzado se puede reciclar aquí" "then": "El calzado se puede reciclar aquí"
},
"2": {
"then": "Aquí se pueden reciclar latas"
},
"3": {
"then": "Aquí se puede reciclar ropa"
},
"4": {
"then": "Aquí se puede reciclar aceite de cocina"
},
"5": {
"then": "Aquí se puede reciclar aceite de motor"
},
"7": {
"then": "Los residuos orgánicos pueden reciclarse aquí"
},
"8": {
"then": "Aquí se pueden reciclar residuos orgánicos"
},
"9": {
"then": "Aquí se pueden reciclar botellas de cristal"
} }
}, },
"question": "¿Qué se puede reciclar aquí?" "question": "¿Qué se puede reciclar aquí?"
@ -4225,12 +4225,6 @@
"1": { "1": {
"then": "Esta lámpara utiliza LEDs" "then": "Esta lámpara utiliza LEDs"
}, },
"10": {
"then": "Esta lámpara utiliza lámparas de sodio de alta presión (naranja con blanco)"
},
"11": {
"then": "Esta lampara se ilumina con gas"
},
"2": { "2": {
"then": "Esta lámpara utiliza iluminación incandescente" "then": "Esta lámpara utiliza iluminación incandescente"
}, },
@ -4251,6 +4245,12 @@
}, },
"9": { "9": {
"then": "Esta lámpara utiliza lámparas de sodio de baja presión (naranja monocromo)" "then": "Esta lámpara utiliza lámparas de sodio de baja presión (naranja monocromo)"
},
"10": {
"then": "Esta lámpara utiliza lámparas de sodio de alta presión (naranja con blanco)"
},
"11": {
"then": "Esta lampara se ilumina con gas"
} }
}, },
"question": "¿Qué tipo de iluminación utiliza esta lámpara?" "question": "¿Qué tipo de iluminación utiliza esta lámpara?"
@ -4712,6 +4712,23 @@
"render": "Árbol" "render": "Árbol"
} }
}, },
"trolley_bay": {
"tagRenderings": {
"denominations": {
"mappings": {
"0": {
"then": "Se aceptan monedas de 50 céntimos"
},
"1": {
"then": "Se aceptan monedas de 1 euro"
},
"2": {
"then": "Se aceptan monedas de 2 euros"
}
}
}
}
},
"unit": { "unit": {
"units": { "units": {
"3": { "3": {
@ -4848,4 +4865,4 @@
} }
} }
} }
} }

View file

@ -6278,6 +6278,23 @@
"render": "Arbre" "render": "Arbre"
} }
}, },
"trolley_bay": {
"tagRenderings": {
"denominations": {
"mappings": {
"0": {
"then": "Les pièces de 50 cents sont acceptées"
},
"1": {
"then": "Les pièces de 1 euro sont acceptées"
},
"2": {
"then": "Les pièces de 2 euros sont acceptées"
}
}
}
}
},
"unit": { "unit": {
"units": { "units": {
"0": { "0": {

View file

@ -54,9 +54,6 @@
"1": { "1": {
"then": "Mural" "then": "Mural"
}, },
"10": {
"then": "Azulejo (ubin dekoratif Spanyol)"
},
"2": { "2": {
"then": "Lukisan" "then": "Lukisan"
}, },
@ -74,6 +71,9 @@
}, },
"9": { "9": {
"then": "Relief" "then": "Relief"
},
"10": {
"then": "Azulejo (ubin dekoratif Spanyol)"
} }
}, },
"question": "Apa jenis karya seni ini?", "question": "Apa jenis karya seni ini?",
@ -191,15 +191,6 @@
"1": { "1": {
"then": "Jalur sepeda ini diaspal" "then": "Jalur sepeda ini diaspal"
}, },
"10": {
"then": "Jalur sepeda ini terbuat dari kerikil halus"
},
"11": {
"then": "Jalur sepeda ini terbuat dari batu kerikil"
},
"12": {
"then": "Jalur sepeda ini terbuat dari tanah alami"
},
"2": { "2": {
"then": "Jalur sepeda ini terbuat dari aspal" "then": "Jalur sepeda ini terbuat dari aspal"
}, },
@ -220,6 +211,15 @@
}, },
"9": { "9": {
"then": "Jalur sepeda ini terbuat dari kerikil" "then": "Jalur sepeda ini terbuat dari kerikil"
},
"10": {
"then": "Jalur sepeda ini terbuat dari kerikil halus"
},
"11": {
"then": "Jalur sepeda ini terbuat dari batu kerikil"
},
"12": {
"then": "Jalur sepeda ini terbuat dari tanah alami"
} }
}, },
"question": "Permukaan jalannya terbuat dari apa?", "question": "Permukaan jalannya terbuat dari apa?",
@ -733,6 +733,17 @@
} }
} }
}, },
"trolley_bay": {
"tagRenderings": {
"denominations": {
"mappings": {
"0": {
"then": "Koin 50 sen diterima"
}
}
}
}
},
"unit": { "unit": {
"units": { "units": {
"0": { "0": {
@ -931,4 +942,4 @@
"render": "turbin angin" "render": "turbin angin"
} }
} }
} }

View file

@ -35,16 +35,6 @@
"1": { "1": {
"title": "un cartellone pubblicitario fissato a terra" "title": "un cartellone pubblicitario fissato a terra"
}, },
"10": {
"description": "Utilizzato per insegna pubblicitaria, un'insegna al neon, i loghi o le indicazioni d'entrata",
"title": "un'insegna"
},
"11": {
"title": "una scultura"
},
"12": {
"title": "un murales"
},
"2": { "2": {
"title": "un cartellone pubblicitario fissato al muro" "title": "un cartellone pubblicitario fissato al muro"
}, },
@ -71,6 +61,16 @@
}, },
"9": { "9": {
"title": "un totem" "title": "un totem"
},
"10": {
"description": "Utilizzato per insegna pubblicitaria, un'insegna al neon, i loghi o le indicazioni d'entrata",
"title": "un'insegna"
},
"11": {
"title": "una scultura"
},
"12": {
"title": "un murales"
} }
}, },
"tagRenderings": { "tagRenderings": {
@ -153,15 +153,6 @@
"1": { "1": {
"then": "Murale" "then": "Murale"
}, },
"10": {
"then": "Azulejo (ornamento decorativo piastrellato spagnolo)"
},
"11": {
"then": "Mosaico di piastrelle"
},
"12": {
"then": "Scultura in legno"
},
"2": { "2": {
"then": "Dipinto" "then": "Dipinto"
}, },
@ -185,6 +176,15 @@
}, },
"9": { "9": {
"then": "Rilievo" "then": "Rilievo"
},
"10": {
"then": "Azulejo (ornamento decorativo piastrellato spagnolo)"
},
"11": {
"then": "Mosaico di piastrelle"
},
"12": {
"then": "Scultura in legno"
} }
}, },
"question": "Che tipo di opera darte è questo?", "question": "Che tipo di opera darte è questo?",
@ -2129,6 +2129,27 @@
"1": { "1": {
"question": "Riciclo di batterie" "question": "Riciclo di batterie"
}, },
"2": {
"question": "Riciclo di confezioni per bevande"
},
"3": {
"question": "Riciclo di lattine"
},
"4": {
"question": "Riciclo di abiti"
},
"5": {
"question": "Riciclo di olio da cucina"
},
"6": {
"question": "Riciclo di olio da motore"
},
"8": {
"question": "Riciclo di umido"
},
"9": {
"question": "Riciclo di bottiglie di vetro"
},
"10": { "10": {
"question": "Riciclo di vetro" "question": "Riciclo di vetro"
}, },
@ -2156,29 +2177,8 @@
"19": { "19": {
"question": "Riciclo di secco" "question": "Riciclo di secco"
}, },
"2": {
"question": "Riciclo di confezioni per bevande"
},
"20": { "20": {
"question": "Riciclo di secco" "question": "Riciclo di secco"
},
"3": {
"question": "Riciclo di lattine"
},
"4": {
"question": "Riciclo di abiti"
},
"5": {
"question": "Riciclo di olio da cucina"
},
"6": {
"question": "Riciclo di olio da motore"
},
"8": {
"question": "Riciclo di umido"
},
"9": {
"question": "Riciclo di bottiglie di vetro"
} }
} }
}, },
@ -2231,6 +2231,27 @@
"1": { "1": {
"then": "Cartoni per bevande" "then": "Cartoni per bevande"
}, },
"2": {
"then": "Lattine"
},
"3": {
"then": "Abiti"
},
"4": {
"then": "Olio da cucina"
},
"5": {
"then": "Olio di motore"
},
"7": {
"then": "Verde"
},
"8": {
"then": "Umido"
},
"9": {
"then": "Bottiglie di vetro"
},
"10": { "10": {
"then": "Vetro" "then": "Vetro"
}, },
@ -2255,9 +2276,6 @@
"19": { "19": {
"then": "Scarpe" "then": "Scarpe"
}, },
"2": {
"then": "Lattine"
},
"20": { "20": {
"then": "Piccoli elettrodomestici" "then": "Piccoli elettrodomestici"
}, },
@ -2269,24 +2287,6 @@
}, },
"23": { "23": {
"then": "Secco" "then": "Secco"
},
"3": {
"then": "Abiti"
},
"4": {
"then": "Olio da cucina"
},
"5": {
"then": "Olio di motore"
},
"7": {
"then": "Verde"
},
"8": {
"then": "Umido"
},
"9": {
"then": "Bottiglie di vetro"
} }
}, },
"question": "Cosa si può riciclare qui?" "question": "Cosa si può riciclare qui?"
@ -3087,4 +3087,4 @@
"render": "pala eolica" "render": "pala eolica"
} }
} }
} }

View file

@ -802,6 +802,23 @@
} }
} }
}, },
"trolley_bay": {
"tagRenderings": {
"denominations": {
"mappings": {
"0": {
"then": "50-cent mynter aksepteres"
},
"1": {
"then": "1-euro mynter aksepteres"
},
"2": {
"then": "2-euro mynter aksepteres"
}
}
}
}
},
"unit": { "unit": {
"units": { "units": {
"0": { "0": {

View file

@ -5770,6 +5770,9 @@
"mappings": { "mappings": {
"0": { "0": {
"then": "Parkeerplek voor gehandicapten" "then": "Parkeerplek voor gehandicapten"
},
"1": {
"then": "Parkeerplek voor opladen van elektrische voertuigen"
} }
}, },
"render": "Parkeerplek" "render": "Parkeerplek"
@ -7954,6 +7957,48 @@
} }
}, },
"tagRenderings": { "tagRenderings": {
"gender_segregated": {
"mappings": {
"0": {
"then": "Er zijn aparte ruimtes of toiletten voor mannen en vrouwen"
},
"1": {
"then": "Mannen en vrouwen gebruiken dezelfde ruimtes en toiletten"
}
},
"question": "Zijn deze toiletten gescheiden op basis van geslacht?",
"questionHint": "Is er een aparte ruimte voor mannen en vrouwen en zijn deze ruimtes ook expliciet aangegeven?"
},
"menstrual_products": {
"mappings": {
"0": {
"then": "Er zijn gratis menstruatieprocten beschikbaar voor alle bezoekers van deze toiletten"
},
"1": {
"then": "De gratis menstruatieproducten zijn enkel beschikbaar in een deel van de toiletten"
},
"2": {
"then": "Er zijn geen gratis menstruatieproducten beschikbaar"
}
},
"question": "Zijn er gratis menstruatieproducten beschikbaar?",
"questionHint": "Dit gaat enkel over menstruatieproducten die gratis geschikbaar zijn. Indien er bv. een verkoopautomaat met menstruatieproducten is, negeer deze dan"
},
"menstrual_products_location": {
"mappings": {
"0": {
"then": "De gratis menstruatieproducten bevinden zich in het vrouwentoilet"
},
"1": {
"then": "De gratis menstruatieproducten bevinden zich in het mannentoilet"
},
"2": {
"then": "De gratis menstruatieproducten bevinden zich in het rolstoeltoegankelijke toilet"
}
},
"question": "Waar bevinden de gratis menstruatieproducten zich?",
"render": "De menstruatieproducten bevinden zich in {toilets:menstrual_products:location}"
},
"opening_hours_24_7": { "opening_hours_24_7": {
"override": { "override": {
"question": "Wanneer zijn deze toiletten open?" "question": "Wanneer zijn deze toiletten open?"
@ -8499,6 +8544,23 @@
"render": "Boom" "render": "Boom"
} }
}, },
"trolley_bay": {
"tagRenderings": {
"denominations": {
"mappings": {
"0": {
"then": "Munten van 50 cent worden geaccepteerd"
},
"1": {
"then": "Munten van 1 euro worden geaccepteerd"
},
"2": {
"then": "Munten van 2 euro worden geaccepteerd"
}
}
}
}
},
"unit": { "unit": {
"units": { "units": {
"0": { "0": {

View file

@ -2633,6 +2633,23 @@
"render": "Szkoła <i>{name}</i>" "render": "Szkoła <i>{name}</i>"
} }
}, },
"trolley_bay": {
"tagRenderings": {
"denominations": {
"mappings": {
"0": {
"then": "Akceptowane są monety 50-centowe"
},
"1": {
"then": "Akceptowane są monety 1 euro"
},
"2": {
"then": "Akceptowane są monety 2 euro"
}
}
}
}
},
"unit": { "unit": {
"units": { "units": {
"3": { "3": {

View file

@ -922,13 +922,6 @@
} }
} }
}, },
"10": {
"options": {
"0": {
"question": "Etymologie-Thema ausschließen"
}
}
},
"2": { "2": {
"options": { "options": {
"0": { "0": {
@ -984,6 +977,13 @@
"question": "GRB-Thema ausschließen" "question": "GRB-Thema ausschließen"
} }
} }
},
"10": {
"options": {
"0": {
"question": "Etymologie-Thema ausschließen"
}
}
} }
}, },
"name": "Zentrum der Änderungssätze", "name": "Zentrum der Änderungssätze",
@ -1060,33 +1060,6 @@
"onwheels": { "onwheels": {
"description": "Auf dieser Karte können Sie öffentlich zugängliche Orte für Rollstuhlfahrer ansehen, bearbeiten oder hinzufügen", "description": "Auf dieser Karte können Sie öffentlich zugängliche Orte für Rollstuhlfahrer ansehen, bearbeiten oder hinzufügen",
"layers": { "layers": {
"19": {
"override": {
"=title": {
"render": "Statistik"
}
}
},
"20": {
"override": {
"+tagRenderings": {
"0": {
"render": {
"special": {
"text": "Import"
}
}
},
"1": {
"render": {
"special": {
"message": "Alle vorgeschlagenen Tags hinzufügen"
}
}
}
}
}
},
"4": { "4": {
"override": { "override": {
"filter": { "filter": {
@ -1129,6 +1102,33 @@
"override": { "override": {
"name": "Barrierefreie Parkplätze" "name": "Barrierefreie Parkplätze"
} }
},
"19": {
"override": {
"=title": {
"render": "Statistik"
}
}
},
"20": {
"override": {
"+tagRenderings": {
"0": {
"render": {
"special": {
"text": "Import"
}
}
},
"1": {
"render": {
"special": {
"message": "Alle vorgeschlagenen Tags hinzufügen"
}
}
}
}
}
} }
}, },
"title": "Auf Rädern" "title": "Auf Rädern"
@ -1344,6 +1344,10 @@
"stations": { "stations": {
"description": "Bahnhofsdetails ansehen, bearbeiten und hinzufügen", "description": "Bahnhofsdetails ansehen, bearbeiten und hinzufügen",
"layers": { "layers": {
"3": {
"description": "Ebene mit Bahnhöfen",
"name": "Bahnhöfe"
},
"16": { "16": {
"description": "Anzeigen der Züge, die von diesem Bahnhof abfahren", "description": "Anzeigen der Züge, die von diesem Bahnhof abfahren",
"name": "Abfahrtstafeln", "name": "Abfahrtstafeln",
@ -1375,10 +1379,6 @@
"title": { "title": {
"render": "Abfahrtstafel" "render": "Abfahrtstafel"
} }
},
"3": {
"description": "Ebene mit Bahnhöfen",
"name": "Bahnhöfe"
} }
}, },
"title": "Bahnhöfe" "title": "Bahnhöfe"
@ -1557,4 +1557,4 @@
"shortDescription": "Eine Karte mit Abfalleimern", "shortDescription": "Eine Karte mit Abfalleimern",
"title": "Abfalleimer" "title": "Abfalleimer"
} }
} }

View file

@ -922,13 +922,6 @@
} }
} }
}, },
"10": {
"options": {
"0": {
"question": "Excluir el tema de la etimología"
}
}
},
"2": { "2": {
"options": { "options": {
"0": { "0": {
@ -984,6 +977,13 @@
"question": "Excluir el tema del GRB" "question": "Excluir el tema del GRB"
} }
} }
},
"10": {
"options": {
"0": {
"question": "Excluir el tema de la etimología"
}
}
} }
}, },
"name": "Centro del conjunto de cambios", "name": "Centro del conjunto de cambios",
@ -1060,33 +1060,6 @@
"onwheels": { "onwheels": {
"description": "En este mapa se muestran los lugares accesibles al público en silla de ruedas, que pueden añadirse fácilmente", "description": "En este mapa se muestran los lugares accesibles al público en silla de ruedas, que pueden añadirse fácilmente",
"layers": { "layers": {
"19": {
"override": {
"=title": {
"render": "Estadísticas"
}
}
},
"20": {
"override": {
"+tagRenderings": {
"0": {
"render": {
"special": {
"text": "Importar"
}
}
},
"1": {
"render": {
"special": {
"message": "Añadir todas las etiquetas sugeridas"
}
}
}
}
}
},
"4": { "4": {
"override": { "override": {
"filter": { "filter": {
@ -1129,6 +1102,33 @@
"override": { "override": {
"name": "Plazas de aparcamiento para discapacitados" "name": "Plazas de aparcamiento para discapacitados"
} }
},
"19": {
"override": {
"=title": {
"render": "Estadísticas"
}
}
},
"20": {
"override": {
"+tagRenderings": {
"0": {
"render": {
"special": {
"text": "Importar"
}
}
},
"1": {
"render": {
"special": {
"message": "Añadir todas las etiquetas sugeridas"
}
}
}
}
}
} }
}, },
"title": "Sobre ruedas" "title": "Sobre ruedas"
@ -1344,6 +1344,10 @@
"stations": { "stations": {
"description": "Ver, editar y añadir detalles a una estación de tren", "description": "Ver, editar y añadir detalles a una estación de tren",
"layers": { "layers": {
"3": {
"description": "Capa que muestra las estaciones de tren",
"name": "Estación de Tren"
},
"16": { "16": {
"description": "Pantallas que muestran los trenes que saldrán de esta estación", "description": "Pantallas que muestran los trenes que saldrán de esta estación",
"name": "Tableros de salidas", "name": "Tableros de salidas",
@ -1375,10 +1379,6 @@
"title": { "title": {
"render": "Tablero de salidas" "render": "Tablero de salidas"
} }
},
"3": {
"description": "Capa que muestra las estaciones de tren",
"name": "Estación de Tren"
} }
}, },
"title": "Estaciones de tren" "title": "Estaciones de tren"
@ -1557,4 +1557,4 @@
"shortDescription": "Un mapa con papeleras", "shortDescription": "Un mapa con papeleras",
"title": "Papeleras" "title": "Papeleras"
} }
} }

16
package-lock.json generated
View file

@ -1,12 +1,12 @@
{ {
"name": "mapcomplete", "name": "mapcomplete",
"version": "0.37.0", "version": "0.38.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "mapcomplete", "name": "mapcomplete",
"version": "0.37.0", "version": "0.38.0",
"license": "GPL-3.0-or-later", "license": "GPL-3.0-or-later",
"dependencies": { "dependencies": {
"@rgossiaux/svelte-headlessui": "^1.0.2", "@rgossiaux/svelte-headlessui": "^1.0.2",
@ -5343,9 +5343,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001579", "version": "1.0.30001588",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz",
"integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", "integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -17656,9 +17656,9 @@
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
}, },
"caniuse-lite": { "caniuse-lite": {
"version": "1.0.30001579", "version": "1.0.30001588",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz",
"integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", "integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==",
"dev": true "dev": true
}, },
"canvg": { "canvg": {

View file

@ -205,7 +205,7 @@ function extractHintsFrom(
layers: AllSharedLayers.sharedLayers, layers: AllSharedLayers.sharedLayers,
themes: AllKnownLayouts.allKnownLayouts, themes: AllKnownLayouts.allKnownLayouts,
validators: Validators, validators: Validators,
Constants: Constants Constants: Constants,
}) })
} }
return hints return hints

View file

@ -289,15 +289,21 @@ async function generateCsp(
apiUrls.push(...(sv.needsUrls ?? [])) apiUrls.push(...(sv.needsUrls ?? []))
}) })
const usedSpecialVisualisations = [].concat(...layoutJson.layers.map(l => ValidationUtils.getAllSpecialVisualisations(<QuestionableTagRenderingConfigJson[]> (<LayerConfigJson>l).tagRenderings ?? []))) const usedSpecialVisualisations = [].concat(
...layoutJson.layers.map((l) =>
ValidationUtils.getAllSpecialVisualisations(
<QuestionableTagRenderingConfigJson[]>(<LayerConfigJson>l).tagRenderings ?? []
)
)
)
for (const usedSpecialVisualisation of usedSpecialVisualisations) { for (const usedSpecialVisualisation of usedSpecialVisualisations) {
if (typeof usedSpecialVisualisation === "string") { if (typeof usedSpecialVisualisation === "string") {
continue continue
} }
const neededUrls = usedSpecialVisualisation.func.needsUrls ?? [] const neededUrls = usedSpecialVisualisation.func.needsUrls ?? []
if (typeof neededUrls === "function") { if (typeof neededUrls === "function") {
let needed: string | string[] = neededUrls(usedSpecialVisualisation.args) let needed: string | string[] = neededUrls(usedSpecialVisualisation.args)
if(typeof needed === "string"){ if (typeof needed === "string") {
needed = [needed] needed = [needed]
} }
apiUrls.push(...needed) apiUrls.push(...needed)
@ -317,8 +323,8 @@ async function generateCsp(
continue continue
} }
try { try {
if(!connectSource.startsWith("http")){ if (!connectSource.startsWith("http")) {
connectSource = "https://"+connectSource connectSource = "https://" + connectSource
} }
const url = new URL(connectSource) const url = new URL(connectSource)
hosts.add("https://" + url.host) hosts.add("https://" + url.host)
@ -349,7 +355,7 @@ async function generateCsp(
"default-src": "'self'", "default-src": "'self'",
"child-src": "'self' blob: ", "child-src": "'self' blob: ",
"img-src": "* data:", // maplibre depends on 'data:' to load "img-src": "* data:", // maplibre depends on 'data:' to load
"connect-src": "'self' "+connectSrc.join(" "), "connect-src": "'self' " + connectSrc.join(" "),
"report-to": "https://report.mapcomplete.org/csp", "report-to": "https://report.mapcomplete.org/csp",
"worker-src": "'self' blob:", // Vite somehow loads the worker via a 'blob' "worker-src": "'self' blob:", // Vite somehow loads the worker via a 'blob'
"style-src": "'self' 'unsafe-inline'", // unsafe-inline is needed to change the default background pin colours "style-src": "'self' 'unsafe-inline'", // unsafe-inline is needed to change the default background pin colours

View file

@ -5,45 +5,60 @@ import { GeoOperations } from "../../src/Logic/GeoOperations"
import * as os from "os" import * as os from "os"
// vite-node scripts/velopark/compare.ts -- scripts/velopark/velopark_all_2024-02-14T12\:18\:41.772Z.geojson ~/Projecten/OSM/Fietsberaad/2024-02-02\ Fietsenstallingen_OSM_met_velopark_ref.geojson // vite-node scripts/velopark/compare.ts -- scripts/velopark/velopark_all_2024-02-14T12\:18\:41.772Z.geojson ~/Projecten/OSM/Fietsberaad/2024-02-02\ Fietsenstallingen_OSM_met_velopark_ref.geojson
class Compare extends Script { class Compare extends Script {
compare(
compare(veloId: string, osmParking: Feature, veloParking: Feature): {distance: number, ref: string, osmid: string, diffs: { veloId: string,
osm: string, velopark: string, key: string osmParking: Feature,
}[] }{ veloParking: Feature
): {
distance: number
ref: string
osmid: string
diffs: {
osm: string
velopark: string
key: string
}[]
} {
const osmCenterpoint = GeoOperations.centerpointCoordinates(osmParking) const osmCenterpoint = GeoOperations.centerpointCoordinates(osmParking)
const veloparkCenterpoint = GeoOperations.centerpointCoordinates(veloParking) const veloparkCenterpoint = GeoOperations.centerpointCoordinates(veloParking)
const distance = Math.round(GeoOperations.distanceBetween(osmCenterpoint, veloparkCenterpoint)) const distance = Math.round(
const diffs: { osm: string, velopark: string, key: string}[] = [] GeoOperations.distanceBetween(osmCenterpoint, veloparkCenterpoint)
)
const diffs: { osm: string; velopark: string; key: string }[] = []
const allKeys = new Set<string>(Object.keys(osmParking.properties).concat(Object.keys(veloParking.properties))) const allKeys = new Set<string>(
Object.keys(osmParking.properties).concat(Object.keys(veloParking.properties))
)
for (const key of allKeys) { for (const key of allKeys) {
if(osmParking.properties[key] === veloParking.properties[key]){ if (osmParking.properties[key] === veloParking.properties[key]) {
continue continue
} }
if(Number(osmParking.properties[key]) === veloParking.properties[key]){ if (Number(osmParking.properties[key]) === veloParking.properties[key]) {
continue continue
} }
if(veloParking.properties[key] === undefined){ if (veloParking.properties[key] === undefined) {
continue continue
} }
diffs.push({ diffs.push({
key, key,
osm: osmParking.properties[key], osm: osmParking.properties[key],
velopark: veloParking.properties[key] velopark: veloParking.properties[key],
}) })
} }
return { return {
ref: veloId, ref: veloId,
osmid: osmParking.properties["@id"], osmid: osmParking.properties["@id"],
distance, diffs distance,
diffs,
} }
} }
async main(args: string[]): Promise<void> { async main(args: string[]): Promise<void> {
let [velopark, osm, key] = args let [velopark, osm, key] = args
key ??= "ref:velopark" key ??= "ref:velopark"
const veloparkData: FeatureCollection = JSON.parse(fs.readFileSync(velopark, "utf-8")) const veloparkData: FeatureCollection = JSON.parse(fs.readFileSync(velopark, "utf-8"))
const osmData : FeatureCollection = JSON.parse(fs.readFileSync(osm, "utf-8")) const osmData: FeatureCollection = JSON.parse(fs.readFileSync(osm, "utf-8"))
const veloparkById : Record<string, Feature> = {} const veloparkById: Record<string, Feature> = {}
for (const parking of veloparkData.features) { for (const parking of veloparkData.features) {
veloparkById[parking.properties[key]] = parking veloparkById[parking.properties[key]] = parking
} }
@ -52,21 +67,20 @@ class Compare extends Script {
for (const parking of osmData.features) { for (const parking of osmData.features) {
const veloId = parking.properties[key] const veloId = parking.properties[key]
const veloparking = veloparkById[veloId] const veloparking = veloparkById[veloId]
if(veloparking === undefined){ if (veloparking === undefined) {
console.error("No velopark entry found for", veloId) console.error("No velopark entry found for", veloId)
continue continue
} }
diffs.push(this.compare(veloId, parking, veloparking)) diffs.push(this.compare(veloId, parking, veloparking))
} }
fs.writeFileSync("report_diff.json",JSON.stringify(diffs)) fs.writeFileSync("report_diff.json", JSON.stringify(diffs))
} }
constructor() { constructor() {
super("Compares a velopark geojson with OSM geojson. Usage: `compare velopark.geojson osm.geojson [key-to-compare-on]`. If key-to-compare-on is not given, `ref:velopark` will be used") super(
"Compares a velopark geojson with OSM geojson. Usage: `compare velopark.geojson osm.geojson [key-to-compare-on]`. If key-to-compare-on is not given, `ref:velopark` will be used"
)
} }
} }
new Compare().run() new Compare().run()

View file

@ -15,9 +15,9 @@ class VeloParkToGeojson extends Script {
) )
} }
exportTo(filename: string, features){ exportTo(filename: string, features) {
fs.writeFileSync( fs.writeFileSync(
filename+"_" + new Date().toISOString() + ".geojson", filename + "_" + new Date().toISOString() + ".geojson",
JSON.stringify( JSON.stringify(
{ {
type: "FeatureCollection", type: "FeatureCollection",
@ -60,7 +60,7 @@ class VeloParkToGeojson extends Script {
for (const feature of features) { for (const feature of features) {
Object.keys(feature.properties).forEach((k) => allProperties.add(k)) Object.keys(feature.properties).forEach((k) => allProperties.add(k))
} }
this.exportTo("velopark_noncynced",features) this.exportTo("velopark_noncynced", features)
allProperties.delete("ref:velopark") allProperties.delete("ref:velopark")
for (const feature of features) { for (const feature of features) {
allProperties.forEach((k) => { allProperties.forEach((k) => {

View file

@ -45,12 +45,7 @@ export default class LayoutSource extends FeatureSourceMerger {
}) })
) )
const overpassSource = LayoutSource.setupOverpass( const overpassSource = LayoutSource.setupOverpass(osmLayers, bounds, zoom, featureSwitches)
osmLayers,
bounds,
zoom,
featureSwitches
)
const osmApiSource = LayoutSource.setupOsmApiSource( const osmApiSource = LayoutSource.setupOsmApiSource(
osmLayers, osmLayers,

View file

@ -156,7 +156,7 @@ export class GeoOperations {
const intersection = GeoOperations.calculateIntersection( const intersection = GeoOperations.calculateIntersection(
feature, feature,
otherFeature, otherFeature,
featureBBox, featureBBox
) )
if (intersection === null) { if (intersection === null) {
continue continue
@ -195,7 +195,7 @@ export class GeoOperations {
console.error( console.error(
"Could not correctly calculate the overlap of ", "Could not correctly calculate the overlap of ",
feature, feature,
": unsupported type", ": unsupported type"
) )
return result return result
} }
@ -224,7 +224,7 @@ export class GeoOperations {
*/ */
public static inside( public static inside(
pointCoordinate: [number, number] | Feature<Point>, pointCoordinate: [number, number] | Feature<Point>,
feature: Feature, feature: Feature
): boolean { ): boolean {
// ray-casting algorithm based on // ray-casting algorithm based on
// http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
@ -302,7 +302,7 @@ export class GeoOperations {
*/ */
public static nearestPoint( public static nearestPoint(
way: Feature<LineString>, way: Feature<LineString>,
point: [number, number], point: [number, number]
): Feature< ): Feature<
Point, Point,
{ {
@ -324,11 +324,11 @@ export class GeoOperations {
public static forceLineString(way: Feature<LineString | Polygon>): Feature<LineString> public static forceLineString(way: Feature<LineString | Polygon>): Feature<LineString>
public static forceLineString( public static forceLineString(
way: Feature<MultiLineString | MultiPolygon>, way: Feature<MultiLineString | MultiPolygon>
): Feature<MultiLineString> ): Feature<MultiLineString>
public static forceLineString( public static forceLineString(
way: Feature<LineString | MultiLineString | Polygon | MultiPolygon>, way: Feature<LineString | MultiLineString | Polygon | MultiPolygon>
): Feature<LineString | MultiLineString> { ): Feature<LineString | MultiLineString> {
if (way.geometry.type === "Polygon") { if (way.geometry.type === "Polygon") {
way = { ...way } way = { ...way }
@ -345,9 +345,12 @@ export class GeoOperations {
return <any>way return <any>way
} }
public static toCSV(features: Feature[] | FeatureCollection, options?: { public static toCSV(
ignoreTags?: RegExp features: Feature[] | FeatureCollection,
}): string { options?: {
ignoreTags?: RegExp
}
): string {
const headerValuesSeen = new Set<string>() const headerValuesSeen = new Set<string>()
const headerValuesOrdered: string[] = [] const headerValuesOrdered: string[] = []
@ -455,7 +458,7 @@ export class GeoOperations {
*/ */
public static LineIntersections( public static LineIntersections(
feature: Feature<LineString | MultiLineString | Polygon | MultiPolygon>, feature: Feature<LineString | MultiLineString | Polygon | MultiPolygon>,
otherFeature: Feature<LineString | MultiLineString | Polygon | MultiPolygon>, otherFeature: Feature<LineString | MultiLineString | Polygon | MultiPolygon>
): [number, number][] { ): [number, number][] {
return turf return turf
.lineIntersect(feature, otherFeature) .lineIntersect(feature, otherFeature)
@ -492,7 +495,7 @@ export class GeoOperations {
locations: locations:
| Feature<LineString> | Feature<LineString>
| Feature<Point, { date?: string; altitude?: number | string }>[], | Feature<Point, { date?: string; altitude?: number | string }>[],
title?: string, title?: string
) { ) {
title = title?.trim() title = title?.trim()
if (title === undefined || title === "") { if (title === undefined || title === "") {
@ -513,7 +516,7 @@ export class GeoOperations {
type: "Point", type: "Point",
coordinates: p, coordinates: p,
}, },
}, }
) )
} }
for (const l of locationsWithMeta) { for (const l of locationsWithMeta) {
@ -528,7 +531,7 @@ export class GeoOperations {
trackPoints.push(trkpt) trackPoints.push(trkpt)
} }
const header = const header =
"<gpx version=\"1.1\" creator=\"mapcomplete.org\" xmlns=\"http://www.topografix.com/GPX/1/1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">" '<gpx version="1.1" creator="mapcomplete.org" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">'
return ( return (
header + header +
"\n<name>" + "\n<name>" +
@ -546,7 +549,7 @@ export class GeoOperations {
*/ */
public static toGpxPoints( public static toGpxPoints(
locations: Feature<Point, { date?: string; altitude?: number | string }>[], locations: Feature<Point, { date?: string; altitude?: number | string }>[],
title?: string, title?: string
) { ) {
title = title?.trim() title = title?.trim()
if (title === undefined || title === "") { if (title === undefined || title === "") {
@ -567,7 +570,7 @@ export class GeoOperations {
trackPoints.push(trkpt) trackPoints.push(trkpt)
} }
const header = const header =
"<gpx version=\"1.1\" creator=\"mapcomplete.org\" xmlns=\"http://www.topografix.com/GPX/1/1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">" '<gpx version="1.1" creator="mapcomplete.org" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">'
return ( return (
header + header +
"\n<name>" + "\n<name>" +
@ -655,7 +658,7 @@ export class GeoOperations {
}, },
}, },
distanceMeter, distanceMeter,
{ units: "meters" }, { units: "meters" }
).geometry.coordinates ).geometry.coordinates
} }
@ -690,7 +693,7 @@ export class GeoOperations {
*/ */
static completelyWithin( static completelyWithin(
feature: Feature<Geometry, any>, feature: Feature<Geometry, any>,
possiblyEnclosingFeature: Feature<Polygon | MultiPolygon, any>, possiblyEnclosingFeature: Feature<Polygon | MultiPolygon, any>
): boolean { ): boolean {
return booleanWithin(feature, possiblyEnclosingFeature) return booleanWithin(feature, possiblyEnclosingFeature)
} }
@ -746,7 +749,14 @@ export class GeoOperations {
*/ */
public static featureToCoordinateWithRenderingType( public static featureToCoordinateWithRenderingType(
feature: Feature, feature: Feature,
location: "point" | "centroid" | "start" | "end" | "projected_centerpoint" | "polygon_centerpoint" | string, location:
| "point"
| "centroid"
| "start"
| "end"
| "projected_centerpoint"
| "polygon_centerpoint"
| string
): [number, number] | undefined { ): [number, number] | undefined {
switch (location) { switch (location) {
case "point": case "point":
@ -772,7 +782,7 @@ export class GeoOperations {
const centerpoint = GeoOperations.centerpointCoordinates(feature) const centerpoint = GeoOperations.centerpointCoordinates(feature)
const projected = GeoOperations.nearestPoint( const projected = GeoOperations.nearestPoint(
<Feature<LineString>>feature, <Feature<LineString>>feature,
centerpoint, centerpoint
) )
return <[number, number]>projected.geometry.coordinates return <[number, number]>projected.geometry.coordinates
} }
@ -949,7 +959,7 @@ export class GeoOperations {
* GeoOperations.bearingToHuman(46) // => "NE" * GeoOperations.bearingToHuman(46) // => "NE"
*/ */
public static bearingToHuman( public static bearingToHuman(
bearing: number, bearing: number
): "N" | "NE" | "E" | "SE" | "S" | "SW" | "W" | "NW" { ): "N" | "NE" | "E" | "SE" | "S" | "SW" | "W" | "NW" {
while (bearing < 0) { while (bearing < 0) {
bearing += 360 bearing += 360
@ -975,7 +985,7 @@ export class GeoOperations {
* *
*/ */
public static bearingToHumanRelative( public static bearingToHumanRelative(
bearing: number, bearing: number
): ):
| "straight" | "straight"
| "slight_right" | "slight_right"
@ -1000,12 +1010,12 @@ export class GeoOperations {
private static pointInPolygonCoordinates( private static pointInPolygonCoordinates(
x: number, x: number,
y: number, y: number,
coordinates: [number, number][][], coordinates: [number, number][][]
): boolean { ): boolean {
const inside = GeoOperations.pointWithinRing( const inside = GeoOperations.pointWithinRing(
x, x,
y, y,
/*This is the outer ring of the polygon */ coordinates[0], /*This is the outer ring of the polygon */ coordinates[0]
) )
if (!inside) { if (!inside) {
return false return false
@ -1014,7 +1024,7 @@ export class GeoOperations {
const inHole = GeoOperations.pointWithinRing( const inHole = GeoOperations.pointWithinRing(
x, x,
y, y,
coordinates[i], /* These are inner rings, aka holes*/ coordinates[i] /* These are inner rings, aka holes*/
) )
if (inHole) { if (inHole) {
return false return false
@ -1052,7 +1062,7 @@ export class GeoOperations {
feature, feature,
otherFeature, otherFeature,
featureBBox: BBox, featureBBox: BBox,
otherFeatureBBox?: BBox, otherFeatureBBox?: BBox
): number { ): number {
if (feature.geometry.type === "LineString") { if (feature.geometry.type === "LineString") {
otherFeatureBBox = otherFeatureBBox ?? BBox.get(otherFeature) otherFeatureBBox = otherFeatureBBox ?? BBox.get(otherFeature)
@ -1101,7 +1111,7 @@ export class GeoOperations {
let intersection = turf.lineSlice( let intersection = turf.lineSlice(
turf.point(intersectionPointsArray[0]), turf.point(intersectionPointsArray[0]),
turf.point(intersectionPointsArray[1]), turf.point(intersectionPointsArray[1]),
feature, feature
) )
if (intersection == null) { if (intersection == null) {
@ -1122,7 +1132,7 @@ export class GeoOperations {
otherFeature, otherFeature,
feature, feature,
otherFeatureBBox, otherFeatureBBox,
featureBBox, featureBBox
) )
} }
@ -1142,7 +1152,7 @@ export class GeoOperations {
console.log("Applying fallback intersection...") console.log("Applying fallback intersection...")
const intersection = turf.intersect( const intersection = turf.intersect(
turf.truncate(feature), turf.truncate(feature),
turf.truncate(otherFeature), turf.truncate(otherFeature)
) )
if (intersection == null) { if (intersection == null) {
return null return null

View file

@ -364,7 +364,7 @@ export default class UserRelatedState {
[translationMode] [translationMode]
) )
this.mangroveIdentity.getKeyId().addCallbackAndRun(kid => { this.mangroveIdentity.getKeyId().addCallbackAndRun((kid) => {
amendedPrefs.data["mangrove_kid"] = kid amendedPrefs.data["mangrove_kid"] = kid
amendedPrefs.ping() amendedPrefs.ping()
}) })

View file

@ -1,14 +1,42 @@
import { Utils } from "../../Utils" import { Utils } from "../../Utils"
/** This code is autogenerated - do not edit. Edit ./assets/layers/usersettings/usersettings.json instead */ /** This code is autogenerated - do not edit. Edit ./assets/layers/usersettings/usersettings.json instead */
export class ThemeMetaTagging { export class ThemeMetaTagging {
public static readonly themeName = "usersettings" public static readonly themeName = "usersettings"
public metaTaggging_for_usersettings(feat: {properties: Record<string, string>}) { public metaTaggging_for_usersettings(feat: { properties: Record<string, string> }) {
Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_md', () => feat.properties._description.match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)?.at(1) ) Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_md", () =>
Utils.AddLazyProperty(feat.properties, '_d', () => feat.properties._description?.replace(/&lt;/g,'<')?.replace(/&gt;/g,'>') ?? '' ) feat.properties._description
Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_a', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.href.match(/mastodon|en.osm.town/) !== null)[0]?.href }) (feat) ) .match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)
Utils.AddLazyProperty(feat.properties, '_mastodon_link', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.getAttribute("rel")?.indexOf('me') >= 0)[0]?.href})(feat) ) ?.at(1)
Utils.AddLazyProperty(feat.properties, '_mastodon_candidate', () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a ) )
feat.properties['__current_backgroun'] = 'initial_value' Utils.AddLazyProperty(
} feat.properties,
} "_d",
() => feat.properties._description?.replace(/&lt;/g, "<")?.replace(/&gt;/g, ">") ?? ""
)
Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_a", () =>
((feat) => {
const e = document.createElement("div")
e.innerHTML = feat.properties._d
return Array.from(e.getElementsByTagName("a")).filter(
(a) => a.href.match(/mastodon|en.osm.town/) !== null
)[0]?.href
})(feat)
)
Utils.AddLazyProperty(feat.properties, "_mastodon_link", () =>
((feat) => {
const e = document.createElement("div")
e.innerHTML = feat.properties._d
return Array.from(e.getElementsByTagName("a")).filter(
(a) => a.getAttribute("rel")?.indexOf("me") >= 0
)[0]?.href
})(feat)
)
Utils.AddLazyProperty(
feat.properties,
"_mastodon_candidate",
() => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a
)
feat.properties["__current_backgroun"] = "initial_value"
}
}

View file

@ -432,6 +432,6 @@ export class And extends TagsFilter {
} }
asMapboxExpression(): ExpressionSpecification { asMapboxExpression(): ExpressionSpecification {
return ["all", ...this.and.map(t => t.asMapboxExpression())] return ["all", ...this.and.map((t) => t.asMapboxExpression())]
} }
} }

View file

@ -13,7 +13,7 @@ export default class ComparingTag implements TagsFilter {
key: string, key: string,
predicate: (value: string | undefined) => boolean, predicate: (value: string | undefined) => boolean,
representation: "<" | ">" | "<=" | ">=", representation: "<" | ">" | "<=" | ">=",
boundary: string, boundary: string
) { ) {
this._key = key this._key = key
this._predicate = predicate this._predicate = predicate

View file

@ -291,6 +291,6 @@ export class Or extends TagsFilter {
} }
asMapboxExpression(): ExpressionSpecification { asMapboxExpression(): ExpressionSpecification {
return ["any", ...this.or.map(t => t.asMapboxExpression())] return ["any", ...this.or.map((t) => t.asMapboxExpression())]
} }
} }

View file

@ -360,8 +360,8 @@ export class RegexTag extends TagsFilter {
} }
asMapboxExpression(): ExpressionSpecification { asMapboxExpression(): ExpressionSpecification {
if(typeof this.key=== "string" && typeof this.value === "string" ) { if (typeof this.key === "string" && typeof this.value === "string") {
return [this.invert ? "!=" : "==", ["get",this.key], this.value] return [this.invert ? "!=" : "==", ["get", this.key], this.value]
} }
throw "TODO" throw "TODO"
} }

View file

@ -65,7 +65,7 @@ export class Tag extends TagsFilter {
asOverpass(): string[] { asOverpass(): string[] {
if (this.value === "") { if (this.value === "") {
// NOT having this key // NOT having this key
return ["[!\"" + this.key + "\"]"] return ['[!"' + this.key + '"]']
} }
return [`["${this.key}"="${this.value}"]`] return [`["${this.key}"="${this.value}"]`]
} }
@ -83,7 +83,7 @@ export class Tag extends TagsFilter {
asHumanString( asHumanString(
linkToWiki?: boolean, linkToWiki?: boolean,
shorten?: boolean, shorten?: boolean,
currentProperties?: Record<string, string>, currentProperties?: Record<string, string>
) { ) {
let v = this.value let v = this.value
if (typeof v !== "string") { if (typeof v !== "string") {
@ -170,12 +170,7 @@ export class Tag extends TagsFilter {
asMapboxExpression(): ExpressionSpecification { asMapboxExpression(): ExpressionSpecification {
if (this.value === "") { if (this.value === "") {
return [ return ["any", ["!", ["has", this.key]], ["==", ["get", this.key], ""]]
"any",
["!", ["has", this.key]],
["==", ["get", this.key], ""],
]
} }
return ["==", ["get", this.key], this.value] return ["==", ["get", this.key], this.value]
} }

View file

@ -24,8 +24,6 @@ export class MangroveIdentity {
const pem = await MangroveReviews.publicToPem(keypair.publicKey) const pem = await MangroveReviews.publicToPem(keypair.publicKey)
key_id.setData(pem) key_id.setData(pem)
}) })
} }
/** /**
@ -48,7 +46,7 @@ export class MangroveIdentity {
* Only called to create a review. * Only called to create a review.
*/ */
async getKeypair(): Promise<CryptoKeyPair> { async getKeypair(): Promise<CryptoKeyPair> {
if(this.keypair.data ?? "" === ""){ if (this.keypair.data ?? "" === "") {
// We want to create a review, but it seems like no key has been setup at this moment // We want to create a review, but it seems like no key has been setup at this moment
// We create the key // We create the key
try { try {
@ -66,33 +64,36 @@ export class MangroveIdentity {
return this.key_id return this.key_id
} }
private allReviewsById : UIEventSource<(Review & {kid: string, signature: string})[]>= undefined private allReviewsById: UIEventSource<(Review & { kid: string; signature: string })[]> =
undefined
/** /**
* Gets all reviews that are made for the current identity. * Gets all reviews that are made for the current identity.
*/ */
public getAllReviews(): Store<(Review & {kid: string, signature: string})[]>{ public getAllReviews(): Store<(Review & { kid: string; signature: string })[]> {
if(this.allReviewsById !== undefined){ if (this.allReviewsById !== undefined) {
return this.allReviewsById return this.allReviewsById
} }
this.allReviewsById = new UIEventSource( []) this.allReviewsById = new UIEventSource([])
this.key_id.map(pem => { this.key_id.map((pem) => {
if(pem === undefined){ if (pem === undefined) {
return [] return []
} }
MangroveReviews.getReviews({ MangroveReviews.getReviews({
kid: pem kid: pem,
}).then(allReviews => { }).then((allReviews) => {
this.allReviewsById.setData(allReviews.reviews.map(r => ({ this.allReviewsById.setData(
...r, ...r.payload allReviews.reviews.map((r) => ({
}))) ...r,
...r.payload,
}))
)
}) })
}) })
return this.allReviewsById return this.allReviewsById
} }
addReview(review: Review & {kid, signature}) { addReview(review: Review & { kid; signature }) {
this.allReviewsById?.setData(this.allReviewsById?.data?.concat([review])) this.allReviewsById?.setData(this.allReviewsById?.data?.concat([review]))
} }
} }
@ -225,8 +226,15 @@ export default class FeatureReviews {
* The given review is uploaded to mangrove.reviews and added to the list of known reviews * The given review is uploaded to mangrove.reviews and added to the list of known reviews
*/ */
public async createReview(review: Omit<Review, "sub">): Promise<void> { public async createReview(review: Omit<Review, "sub">): Promise<void> {
if(review.opinion !== undefined && review.opinion.length > FeatureReviews .REVIEW_OPINION_MAX_LENGTH){ if (
throw "Opinion too long, should be at most "+FeatureReviews.REVIEW_OPINION_MAX_LENGTH+" characters long" review.opinion !== undefined &&
review.opinion.length > FeatureReviews.REVIEW_OPINION_MAX_LENGTH
) {
throw (
"Opinion too long, should be at most " +
FeatureReviews.REVIEW_OPINION_MAX_LENGTH +
" characters long"
)
} }
const r: Review = { const r: Review = {
sub: this.subjectUri.data, sub: this.subjectUri.data,
@ -242,13 +250,11 @@ export default class FeatureReviews {
signature: jwt, signature: jwt,
madeByLoggedInUser: new ImmutableStore(true), madeByLoggedInUser: new ImmutableStore(true),
} }
this._reviews.data.push( reviewWithKid) this._reviews.data.push(reviewWithKid)
this._reviews.ping() this._reviews.ping()
this._identity.addReview(reviewWithKid) this._identity.addReview(reviewWithKid)
} }
/** /**
* Adds given reviews to the 'reviews'-UI-eventsource * Adds given reviews to the 'reviews'-UI-eventsource
* @param reviews * @param reviews

View file

@ -52,7 +52,9 @@ export class AvailableRasterLayers {
type: "Feature", type: "Feature",
properties: { properties: {
name: "MapTiler", name: "MapTiler",
url: "https://api.maptiler.com/maps/15cc8f61-0353-4be6-b8da-13daea5f7432/style.json?key="+Constants.maptilerApiKey, url:
"https://api.maptiler.com/maps/15cc8f61-0353-4be6-b8da-13daea5f7432/style.json?key=" +
Constants.maptilerApiKey,
category: "osmbasedmap", category: "osmbasedmap",
id: "maptiler", id: "maptiler",
type: "vector", type: "vector",

View file

@ -565,25 +565,39 @@ class PostvalidateTheme extends DesugaringStep<LayoutConfigJson> {
convert(json: LayoutConfigJson, context: ConversionContext): LayoutConfigJson { convert(json: LayoutConfigJson, context: ConversionContext): LayoutConfigJson {
for (const l of json.layers) { for (const l of json.layers) {
const layer = <LayerConfigJson> l const layer = <LayerConfigJson>l
const basedOn = <string> layer["_basedOn"] const basedOn = <string>layer["_basedOn"]
const basedOnDef = this._state.sharedLayers.get(basedOn) const basedOnDef = this._state.sharedLayers.get(basedOn)
if(!basedOn){ if (!basedOn) {
continue continue
} }
if(layer["name"] === null){ if (layer["name"] === null) {
continue continue
} }
const sameBasedOn = <LayerConfigJson[]> json.layers.filter(l => l["_basedOn"] === layer["_basedOn"] && l["id"] !== layer.id) const sameBasedOn = <LayerConfigJson[]>(
const minZoomAll = Math.min(...sameBasedOn.map(sbo => sbo.minzoom)) json.layers.filter(
(l) => l["_basedOn"] === layer["_basedOn"] && l["id"] !== layer.id
)
)
const minZoomAll = Math.min(...sameBasedOn.map((sbo) => sbo.minzoom))
const sameNameDetected = sameBasedOn.some( same => JSON.stringify(layer["name"]) === JSON.stringify(same["name"])) const sameNameDetected = sameBasedOn.some(
if(!sameNameDetected){ (same) => JSON.stringify(layer["name"]) === JSON.stringify(same["name"])
)
if (!sameNameDetected) {
// The name is unique, so it'll won't be confusing // The name is unique, so it'll won't be confusing
continue continue
} }
if(minZoomAll < layer.minzoom){ if (minZoomAll < layer.minzoom) {
context.err("There are multiple layers based on "+basedOn+". The layer with id "+layer.id+" has a minzoom of "+layer.minzoom+", and has a name set. Another similar layer has a lower minzoom. As such, the layer selection might show 'zoom in to see features' even though some of the features are already visible. Set `\"name\": null` for this layer and eventually remove the 'name':null for the other layer.") context.err(
"There are multiple layers based on " +
basedOn +
". The layer with id " +
layer.id +
" has a minzoom of " +
layer.minzoom +
", and has a name set. Another similar layer has a lower minzoom. As such, the layer selection might show 'zoom in to see features' even though some of the features are already visible. Set `\"name\": null` for this layer and eventually remove the 'name':null for the other layer."
)
} }
} }

View file

@ -907,8 +907,12 @@ class MiscTagRenderingChecks extends DesugaringStep<TagRenderingConfigJson> {
) )
} }
if(json.icon?.["size"]){ if (json.icon?.["size"]) {
context.enters("icon","size").err("size is not a valid attribute. Did you mean 'class'? Class can be one of `small`, `medium` or `large`") context
.enters("icon", "size")
.err(
"size is not a valid attribute. Did you mean 'class'? Class can be one of `small`, `medium` or `large`"
)
} }
if (json.freeform) { if (json.freeform) {

View file

@ -82,5 +82,5 @@ export default interface LineRenderingConfigJson {
* suggestions: [{if: "./assets/png/oneway.png", then: "Show a oneway error"}] * suggestions: [{if: "./assets/png/oneway.png", then: "Show a oneway error"}]
* type: image * type: image
*/ */
imageAlongWay?: {if: TagConfigJson, then: string}[] | string imageAlongWay?: { if: TagConfigJson; then: string }[] | string
} }

View file

@ -30,7 +30,15 @@ export default interface PointRenderingConfigJson {
* multianswer: true * multianswer: true
* suggestions: return [{if: "value=point",then: "Show an icon for point (node) objects"},{if: "value=centroid",then: "Show an icon for line or polygon (way) objects at their centroid location"}, {if: "value=start",then: "Show an icon for line (way) objects at the start"},{if: "value=end",then: "Show an icon for line (way) object at the end"},{if: "value=projected_centerpoint",then: "Show an icon for line (way) object near the centroid location, but moved onto the line. Does not show an item on polygons"}, ,{if: "value=polygon_centroid",then: "Show an icon at a polygon centroid (but not if it is a way)"}] * suggestions: return [{if: "value=point",then: "Show an icon for point (node) objects"},{if: "value=centroid",then: "Show an icon for line or polygon (way) objects at their centroid location"}, {if: "value=start",then: "Show an icon for line (way) objects at the start"},{if: "value=end",then: "Show an icon for line (way) object at the end"},{if: "value=projected_centerpoint",then: "Show an icon for line (way) object near the centroid location, but moved onto the line. Does not show an item on polygons"}, ,{if: "value=polygon_centroid",then: "Show an icon at a polygon centroid (but not if it is a way)"}]
*/ */
location: ("point" | "centroid" | "start" | "end" | "projected_centerpoint" | "polygon_centroid" | string)[] location: (
| "point"
| "centroid"
| "start"
| "end"
| "projected_centerpoint"
| "polygon_centroid"
| string
)[]
/** /**
* The marker for an element. * The marker for an element.

View file

@ -467,7 +467,7 @@ export default class LayerConfig extends WithContextLoader {
new Link( new Link(
Utils.runningFromConsole Utils.runningFromConsole
? "<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>" ? "<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>"
: new SvelteUIElement(Statistics, {class: "w-4 h-4 mr-2"}), : new SvelteUIElement(Statistics, { class: "w-4 h-4 mr-2" }),
"https://taginfo.openstreetmap.org/keys/" + values.key + "#values", "https://taginfo.openstreetmap.org/keys/" + values.key + "#values",
true true
), ),

View file

@ -13,7 +13,7 @@ export default class LineRenderingConfig extends WithContextLoader {
public readonly fill: TagRenderingConfig public readonly fill: TagRenderingConfig
public readonly fillColor: TagRenderingConfig public readonly fillColor: TagRenderingConfig
public readonly leftRightSensitive: boolean public readonly leftRightSensitive: boolean
public readonly imageAlongWay: { if?: TagsFilter, then: string }[] public readonly imageAlongWay: { if?: TagsFilter; then: string }[]
constructor(json: LineRenderingConfigJson, context: string) { constructor(json: LineRenderingConfigJson, context: string) {
super(json, context) super(json, context)
@ -33,15 +33,13 @@ export default class LineRenderingConfig extends WithContextLoader {
for (let i = 0; i < json.imageAlongWay.length; i++) { for (let i = 0; i < json.imageAlongWay.length; i++) {
const imgAlong = json.imageAlongWay[i] const imgAlong = json.imageAlongWay[i]
const ctx = context + ".imageAlongWay[" + i + "]" const ctx = context + ".imageAlongWay[" + i + "]"
if(!imgAlong.then.endsWith(".png")){ if (!imgAlong.then.endsWith(".png")) {
throw "An imageAlongWay should always be a PNG image" throw "An imageAlongWay should always be a PNG image"
} }
this.imageAlongWay.push( this.imageAlongWay.push({
{ if: TagUtils.Tag(imgAlong.if, ctx),
if: TagUtils.Tag(imgAlong.if, ctx), then: imgAlong.then,
then: imgAlong.then, })
},
)
} }
} }
} }

View file

@ -38,10 +38,16 @@ export default class PointRenderingConfig extends WithContextLoader {
"start", "start",
"end", "end",
"projected_centerpoint", "projected_centerpoint",
"polygon_centroid" "polygon_centroid",
]) ])
public readonly location: Set< public readonly location: Set<
"point" | "centroid" | "start" | "end" | "projected_centerpoint" | "polygon_centroid" | string | "point"
| "centroid"
| "start"
| "end"
| "projected_centerpoint"
| "polygon_centroid"
| string
> >
public readonly marker: IconConfig[] public readonly marker: IconConfig[]

View file

@ -77,7 +77,7 @@ export class Orientation {
} }
private update(event: DeviceOrientationEvent) { private update(event: DeviceOrientationEvent) {
if(event.alpha === null || event.beta === null || event.gamma === null){ if (event.alpha === null || event.beta === null || event.gamma === null) {
return return
} }
this.gotMeasurement.setData(true) this.gotMeasurement.setData(true)

View file

@ -56,7 +56,11 @@
.filter((key) => key.startsWith(prefix)) .filter((key) => key.startsWith(prefix))
.map((key) => key.substring(prefix.length, key.length - "-enabled".length)) .map((key) => key.substring(prefix.length, key.length - "-enabled".length))
) )
return hiddenThemes.filter((theme) => knownIds.has(theme.id) || state.osmConnection.userDetails.data.name === "Pieter Vander Vennet") return hiddenThemes.filter(
(theme) =>
knownIds.has(theme.id) ||
state.osmConnection.userDetails.data.name === "Pieter Vander Vennet"
)
}) })
} }
</script> </script>

View file

@ -39,9 +39,9 @@
let relativeDirections = Translations.t.general.visualFeedback.directionsRelative let relativeDirections = Translations.t.general.visualFeedback.directionsRelative
let absoluteDirections = Translations.t.general.visualFeedback.directionsAbsolute let absoluteDirections = Translations.t.general.visualFeedback.directionsAbsolute
function round10(n :number){ function round10(n: number) {
if(n < 50){ if (n < 50) {
return n return n
} }
return Math.round(n / 10) * 10 return Math.round(n / 10) * 10
@ -132,7 +132,10 @@
so we use a 'div' and add on:click manually so we use a 'div' and add on:click manually
--> -->
<div <div
class={twMerge("soft relative flex justify-center items-center border border-black rounded-full cursor-pointer p-1", size)} class={twMerge(
"soft relative flex cursor-pointer items-center justify-center rounded-full border border-black p-1",
size
)}
on:click={() => focusMap()} on:click={() => focusMap()}
use:ariaLabelStore={label} use:ariaLabelStore={label}
> >
@ -140,18 +143,18 @@
</div> </div>
{:else} {:else}
<div <div
class={twMerge("soft relative rounded-full border-black border", size)} class={twMerge("soft relative rounded-full border border-black", size)}
on:click={() => focusMap()} on:click={() => focusMap()}
use:ariaLabelStore={label} use:ariaLabelStore={label}
> >
<div <div
class={twMerge( class={twMerge(
"absolute top-0 left-0 flex items-center justify-center break-words text-xs cursor-pointer", "absolute top-0 left-0 flex cursor-pointer items-center justify-center break-words text-xs",
size size
)} )}
> >
<div aria-hidden="true"> <div aria-hidden="true">
{GeoOperations.distanceToHuman($bearingAndDistGps?.dist)} {GeoOperations.distanceToHuman($bearingAndDistGps?.dist)}
</div> </div>
<div class="offscreen"> <div class="offscreen">
{$label} {$label}
@ -170,11 +173,11 @@
<style> <style>
.offscreen { .offscreen {
clip: rect(1px, 1px, 1px, 1px); clip: rect(1px, 1px, 1px, 1px);
height: 1px; height: 1px;
overflow: hidden; overflow: hidden;
position: absolute; position: absolute;
white-space: nowrap; /* added line */ white-space: nowrap; /* added line */
width: 1px; width: 1px;
} }
</style> </style>

View file

@ -16,19 +16,22 @@
if (e.target["id"] == id) { if (e.target["id"] == id) {
return return
} }
if(formElement.contains(e.target) || document.getElementsByClassName("selected-element-view")[0]?.contains(e.target)){ if (
formElement.contains(e.target) ||
document.getElementsByClassName("selected-element-view")[0]?.contains(e.target)
) {
e.preventDefault() e.preventDefault()
if(e.type === "drop"){ if (e.type === "drop") {
console.log("Got a 'drop'", e) console.log("Got a 'drop'", e)
drawAttention = false drawAttention = false
dispatcher("submit", e.dataTransfer.files) dispatcher("submit", e.dataTransfer.files)
return return
} }
drawAttention = true drawAttention = true
e.dataTransfer.dropEffect = "copy" e.dataTransfer.dropEffect = "copy"
return return
/* /*
drawAttention = false drawAttention = false
@ -50,7 +53,6 @@
window.removeEventListener("dragover", handleDragEvent) window.removeEventListener("dragover", handleDragEvent)
window.removeEventListener("drop", handleDragEvent) window.removeEventListener("drop", handleDragEvent)
}) })
</script> </script>
<form <form

View file

@ -28,7 +28,7 @@
style="z-index: 21" style="z-index: 21"
use:trapFocus use:trapFocus
> >
<div class="h-full content normal-background" on:click|stopPropagation={() => {}}> <div class="content normal-background h-full" on:click|stopPropagation={() => {}}>
<div class="h-full rounded-xl"> <div class="h-full rounded-xl">
<slot /> <slot />
</div> </div>

View file

@ -9,7 +9,7 @@
</script> </script>
<button class={clss} on:click={() => osmConnection.AttemptLogin()} style="margin-left: 0"> <button class={clss} on:click={() => osmConnection.AttemptLogin()} style="margin-left: 0">
<Login class="w-12 m-1" /> <Login class="m-1 w-12" />
<slot> <slot>
<Tr t={Translations.t.general.loginWithOpenStreetMap} /> <Tr t={Translations.t.general.loginWithOpenStreetMap} />
</slot> </slot>

View file

@ -8,7 +8,7 @@
onMount(() => { onMount(() => {
const uiElem = typeof construct === "function" ? construct() : construct const uiElem = typeof construct === "function" ? construct() : construct
html = uiElem?.ConstructElement() html = uiElem?.ConstructElement()
if (html !== undefined) { if (html !== undefined) {
elem?.replaceWith(html) elem?.replaceWith(html)
} }

View file

@ -1,120 +1,120 @@
<script lang="ts"> <script lang="ts">
import type { SpecialVisualizationState } from "../SpecialVisualization" import type { SpecialVisualizationState } from "../SpecialVisualization"
import LocationInput from "../InputElement/Helpers/LocationInput.svelte" import LocationInput from "../InputElement/Helpers/LocationInput.svelte"
import { UIEventSource } from "../../Logic/UIEventSource" import { UIEventSource } from "../../Logic/UIEventSource"
import { Tiles } from "../../Models/TileRange" import { Tiles } from "../../Models/TileRange"
import { Map as MlMap } from "maplibre-gl" import { Map as MlMap } from "maplibre-gl"
import { BBox } from "../../Logic/BBox" import { BBox } from "../../Logic/BBox"
import type { MapProperties } from "../../Models/MapProperties" import type { MapProperties } from "../../Models/MapProperties"
import ShowDataLayer from "../Map/ShowDataLayer" import ShowDataLayer from "../Map/ShowDataLayer"
import type { import type {
FeatureSource, FeatureSource,
FeatureSourceForLayer, FeatureSourceForLayer,
} from "../../Logic/FeatureSource/FeatureSource" } from "../../Logic/FeatureSource/FeatureSource"
import SnappingFeatureSource from "../../Logic/FeatureSource/Sources/SnappingFeatureSource" import SnappingFeatureSource from "../../Logic/FeatureSource/Sources/SnappingFeatureSource"
import FeatureSourceMerger from "../../Logic/FeatureSource/Sources/FeatureSourceMerger" import FeatureSourceMerger from "../../Logic/FeatureSource/Sources/FeatureSourceMerger"
import LayerConfig from "../../Models/ThemeConfig/LayerConfig" import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
import { Utils } from "../../Utils" import { Utils } from "../../Utils"
import { createEventDispatcher } from "svelte" import { createEventDispatcher } from "svelte"
import Move_arrows from "../../assets/svg/Move_arrows.svelte" import Move_arrows from "../../assets/svg/Move_arrows.svelte"
/** /**
* An advanced location input, which has support to: * An advanced location input, which has support to:
* - Show more layers * - Show more layers
* - Snap to layers * - Snap to layers
* *
* This one is mostly used to insert new points, including when importing * This one is mostly used to insert new points, including when importing
*/ */
export let state: SpecialVisualizationState export let state: SpecialVisualizationState
/** /**
* The start coordinate * The start coordinate
*/ */
export let coordinate: { lon: number; lat: number } export let coordinate: { lon: number; lat: number }
/** /**
* The center of the map at all times * The center of the map at all times
* If undefined at the beginning, 'coordinate' will be used * If undefined at the beginning, 'coordinate' will be used
*/ */
export let value: UIEventSource<{ lon: number; lat: number }> export let value: UIEventSource<{ lon: number; lat: number }>
if (value.data === undefined) { if (value.data === undefined) {
value.setData(coordinate) value.setData(coordinate)
}
if (coordinate === undefined) {
coordinate = value.data
}
export let snapToLayers: string[] | undefined
export let targetLayer: LayerConfig | undefined
export let maxSnapDistance: number = undefined
export let snappedTo: UIEventSource<string | undefined>
let preciseLocation: UIEventSource<{ lon: number; lat: number }> = new UIEventSource<{
lon: number
lat: number
}>(undefined)
const dispatch = createEventDispatcher<{ click: { lon: number; lat: number } }>()
const xyz = Tiles.embedded_tile(coordinate.lat, coordinate.lon, 16)
const map: UIEventSource<MlMap> = new UIEventSource<MlMap>(undefined)
let initialMapProperties: Partial<MapProperties> & { location } = {
zoom: new UIEventSource<number>(19),
maxbounds: new UIEventSource(undefined),
/*If no snapping needed: the value is simply the map location;
* If snapping is needed: the value will be set later on by the snapping feature source
* */
location:
snapToLayers?.length > 0
? new UIEventSource<{ lon: number; lat: number }>(coordinate)
: value,
bounds: new UIEventSource<BBox>(undefined),
allowMoving: new UIEventSource<boolean>(true),
allowZooming: new UIEventSource<boolean>(true),
minzoom: new UIEventSource<number>(18),
rasterLayer: UIEventSource.feedFrom(state.mapProperties.rasterLayer),
}
if (targetLayer) {
const featuresForLayer = state.perLayer.get(targetLayer.id)
if (featuresForLayer) {
new ShowDataLayer(map, {
layer: targetLayer,
features: featuresForLayer,
})
} }
if (coordinate === undefined) { }
coordinate = value.data
if (snapToLayers?.length > 0) {
const snapSources: FeatureSource[] = []
for (const layerId of snapToLayers ?? []) {
const layer: FeatureSourceForLayer = state.perLayer.get(layerId)
snapSources.push(layer)
if (layer.features === undefined) {
continue
}
new ShowDataLayer(map, {
layer: layer.layer.layerDef,
zoomToFeatures: false,
features: layer,
})
} }
export let snapToLayers: string[] | undefined const snappedLocation = new SnappingFeatureSource(
export let targetLayer: LayerConfig | undefined new FeatureSourceMerger(...Utils.NoNull(snapSources)),
export let maxSnapDistance: number = undefined // We snap to the (constantly updating) map location
initialMapProperties.location,
{
maxDistance: maxSnapDistance ?? 15,
allowUnsnapped: true,
snappedTo,
snapLocation: value,
}
)
export let snappedTo: UIEventSource<string | undefined> new ShowDataLayer(map, {
layer: targetLayer,
let preciseLocation: UIEventSource<{ lon: number; lat: number }> = new UIEventSource<{ features: snappedLocation,
lon: number })
lat: number }
}>(undefined)
const dispatch = createEventDispatcher<{ click: { lon: number; lat: number } }>()
const xyz = Tiles.embedded_tile(coordinate.lat, coordinate.lon, 16)
const map: UIEventSource<MlMap> = new UIEventSource<MlMap>(undefined)
let initialMapProperties: Partial<MapProperties> & {location} = {
zoom: new UIEventSource<number>(19),
maxbounds: new UIEventSource(undefined),
/*If no snapping needed: the value is simply the map location;
* If snapping is needed: the value will be set later on by the snapping feature source
* */
location:
snapToLayers?.length > 0
? new UIEventSource<{ lon: number; lat: number }>(coordinate)
: value,
bounds: new UIEventSource<BBox>(undefined),
allowMoving: new UIEventSource<boolean>(true),
allowZooming: new UIEventSource<boolean>(true),
minzoom: new UIEventSource<number>(18),
rasterLayer: UIEventSource.feedFrom(state.mapProperties.rasterLayer),
}
if (targetLayer) {
const featuresForLayer = state.perLayer.get(targetLayer.id)
if (featuresForLayer) {
new ShowDataLayer(map, {
layer: targetLayer,
features: featuresForLayer,
})
}
}
if (snapToLayers?.length > 0) {
const snapSources: FeatureSource[] = []
for (const layerId of snapToLayers ?? []) {
const layer: FeatureSourceForLayer = state.perLayer.get(layerId)
snapSources.push(layer)
if (layer.features === undefined) {
continue
}
new ShowDataLayer(map, {
layer: layer.layer.layerDef,
zoomToFeatures: false,
features: layer,
})
}
const snappedLocation = new SnappingFeatureSource(
new FeatureSourceMerger(...Utils.NoNull(snapSources)),
// We snap to the (constantly updating) map location
initialMapProperties.location,
{
maxDistance: maxSnapDistance ?? 15,
allowUnsnapped: true,
snappedTo,
snapLocation: value,
}
)
new ShowDataLayer(map, {
layer: targetLayer,
features: snappedLocation,
})
}
</script> </script>
<LocationInput <LocationInput

View file

@ -28,7 +28,7 @@
<h5>{t.noMatchingThemes.toString()}</h5> <h5>{t.noMatchingThemes.toString()}</h5>
<div class="flex justify-center"> <div class="flex justify-center">
<button on:click={() => search.setData("")}> <button on:click={() => search.setData("")}>
<Search_disable class="w-6 mr-2" /> <Search_disable class="mr-2 w-6" />
<Tr t={t.noSearch} /> <Tr t={t.noSearch} />
</button> </button>
</div> </div>

View file

@ -20,7 +20,7 @@
let result = await Geocoding.reverse( let result = await Geocoding.reverse(
mapProperties.location.data, mapProperties.location.data,
mapProperties.zoom.data, mapProperties.zoom.data,
Locale.language.data, Locale.language.data
) )
let properties = result.features[0].properties let properties = result.features[0].properties
currentLocation = properties.display_name currentLocation = properties.display_name
@ -44,7 +44,7 @@
() => { () => {
displayLocation() displayLocation()
}, },
[Translations.t.hotkeyDocumentation.shakePhone], [Translations.t.hotkeyDocumentation.shakePhone]
) )
Motion.singleton.startListening() Motion.singleton.startListening()

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