Merge branch 'master' into develop
Some checks failed
/ deploy_on_hosted (push) Has been cancelled

This commit is contained in:
Pieter Vander Vennet 2025-05-04 03:02:10 +02:00
commit 8e3d1001cc
19 changed files with 146 additions and 131 deletions

View file

@ -2,6 +2,19 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [0.51.4](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.52.3-b...v0.51.4) (2025-05-04)
### Bug Fixes
* fix 'flyto' when clicking a previously visited element ([22b377a](https://source.mapcomplete.org/MapComplete/MapComplete/commits/22b377a37f68b8bc50f2757c10ccf64cd32714a7))
* fix build, use correct path ([7324f71](https://source.mapcomplete.org/MapComplete/MapComplete/commits/7324f71ee306d07b18bd3d1cc41a3d55b2b832bd))
### Theme improvements
* fix faulty builtin question for wikipedia: actually show the article if one exists ([097e07c](https://source.mapcomplete.org/MapComplete/MapComplete/commits/097e07c74726fa830172c01fe775aa46eaf99db3))
### [0.51.3](https://source.mapcomplete.org/MapComplete/MapComplete/compare/v0.51.2...v0.51.3) (2025-05-03)

View file

@ -76,7 +76,7 @@ This is a special layer - data is not sourced from OpenStreetMap
- [seating](#seating)
- [maxstay](#maxstay)
- [name](#name)
3. [Filters](#filters)
- [has_toilets](#has_toilets)
## Supported attributes
@ -119,64 +119,66 @@ This is a special layer - data is not sourced from OpenStreetMap
| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/indoor#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/indoor/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [indoor](https://wiki.openstreetmap.org/wiki/Key:indoor) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:indoor%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:indoor%3Dno) |
| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/maxstay#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/maxstay/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [maxstay](https://wiki.openstreetmap.org/wiki/Key:maxstay) | [pfloat](../SpecialInputElements.md#pfloat) | [unlimited](https://wiki.openstreetmap.org/wiki/Tag:maxstay%3Dunlimited) |
| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/name#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/name/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | |
| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/toilets#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/toilets/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [toilets](https://wiki.openstreetmap.org/wiki/Key:toilets) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dno) [separate](https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dseparate) |
## Featureview elements and TagRenderings
| id | question | labels | freeform key |
-----|-----|-----|----- |
| [questions](#questions) | _{questions()}_ | | _Multiple choice only_ |
| [images](#images) | _{image_carousel()}{image_upload()}_ | | _Multiple choice only_ |
| [images_no_blur](#images_no_blur) | _{image_carousel()}{image_upload(,,,true)}_ | | _Multiple choice only_ |
| [mapillary](#mapillary) | _{mapillary_link()}_ | | _Multiple choice only_ |
| [export_as_gpx](#export_as_gpx) | _{export_as_gpx()}_ | | _Multiple choice only_ |
| [export_as_geojson](#export_as_geojson) | _{export_as_geojson()}_ | | _Multiple choice only_ |
| [wikipedia](#wikipedia) | What is the corresponding Wikidata entity?<br/>_{wikipedia():max-height:25rem}_<br/>2 options | | *[wikidata](https://wiki.osm.org/wiki/Key:wikidata)* ([wikidata](../SpecialInputElements.md#wikidata)) |
| [reviews](#reviews) | _{create_review()}{list_reviews()}_ | | _Multiple choice only_ |
| [phone](#phone) | What is the phone number of ?<br/>_{link(&LBRACEphone&RBRACE,tel:&LBRACEphone&RBRACE,,,,)}_<br/>1 options | contact | *[phone](https://wiki.osm.org/wiki/Key:phone)* ([phone](../SpecialInputElements.md#phone)) |
| [mastodon](#mastodon) | What is the Mastodon-handle of ?<br/>_{fediverse_link(contact:mastodon)}_ | | *[contact:mastodon](https://wiki.osm.org/wiki/Key:contact:mastodon)* ([fediverse](../SpecialInputElements.md#fediverse)) |
| [facebook](#facebook) | What is the facebook page of of ?<br/>_{link(Facebook page,&LBRACEcontact:facebook&RBRACE,,,,)}<div class='subtle text-sm'>Facebook is known to harm mental health, manipulate public opinion and cause hate. Try to use healthier alternatives</div>_ | | *[contact:facebook](https://wiki.osm.org/wiki/Key:contact:facebook)* ([url](../SpecialInputElements.md#url)) |
| [osmlink](#osmlink) | _<a href='https://openstreetmap.org/{id}' target='_blank' rel='noopener'F><img src='./assets/svg/osm-logo-us.svg'/></a>_<br/>1 options | | _Multiple choice only_ |
| [email](#email) | What is the email address of ?<br/>_<a href='mailto:{email}' target='_blank' rel='noopener'>{email}</a>_<br/>2 options | contact | *[email](https://wiki.osm.org/wiki/Key:email)* ([email](../SpecialInputElements.md#email)) |
| [website](#website) | What is the website of ?<br/>_<a href='{website}' rel='nofollow noopener noreferrer' target='_blank'>{website}</a>_<br/>1 options | contact | *[website](https://wiki.osm.org/wiki/Key:website)* ([url](../SpecialInputElements.md#url)) |
| [wheelchair-access](#wheelchair-access) | Is this place accessible with a wheelchair?<br/>4 options | | _Multiple choice only_ |
| [dog-access](#dog-access) | Are dogs allowed in this business?<br/>5 options | | _Multiple choice only_ |
| [description](#description) | Is there still some relevant info that the previous questions did not cover? Feel free to add it here.<br/>_{description}_ | | *[description](https://wiki.osm.org/wiki/Key:description)* ([text](../SpecialInputElements.md#text)) |
| [opening_hours](#opening_hours) | What are the opening hours of ?<br/>_<h3>Opening hours</h3>{opening_hours_table(opening_hours)}_<br/>1 options | | *[opening_hours](https://wiki.osm.org/wiki/Key:opening_hours)* ([opening_hours](../SpecialInputElements.md#opening_hours)) |
| [opening_hours_24_7](#opening_hours_24_7) <br/> _(Original in [questions](./BuiltinQuestions.md#opening_hours))_ | What are the opening hours of ?<br/>_<h3>Opening hours</h3>{opening_hours_table(opening_hours)}_<br/>2 options | | *[opening_hours](https://wiki.osm.org/wiki/Key:opening_hours)* ([opening_hours](../SpecialInputElements.md#opening_hours)) |
| [opening_hours_24_7_default](#opening_hours_24_7_default) <br/> _(Original in [questions](./BuiltinQuestions.md#opening_hours_24_7))_ | What are the opening hours of ?<br/>_<h3>Opening hours</h3>{opening_hours_table(opening_hours)}_<br/>2 options | | *[opening_hours](https://wiki.osm.org/wiki/Key:opening_hours)* ([opening_hours](../SpecialInputElements.md#opening_hours)) |
| [opening_hours_by_appointment](#opening_hours_by_appointment) <br/> _(Original in [questions](./BuiltinQuestions.md#opening_hours))_ | What are the opening hours of ?<br/>_<h3>Opening hours</h3>{opening_hours_table(opening_hours)}_<br/>3 options | | *[opening_hours](https://wiki.osm.org/wiki/Key:opening_hours)* ([opening_hours](../SpecialInputElements.md#opening_hours)) |
| [service:electricity](#service:electricity) | Does this amenity have electrical outlets, available to customers when they are inside?<br/>4 options | | _Multiple choice only_ |
| [payment-options](#payment-options) | Which methods of payment are accepted here?<br/>3 options | | _Multiple choice only_ |
| [payment-options-split](#payment-options-split) <br/> _(Original in [questions](./BuiltinQuestions.md#payment-options))_ | Which methods of payment are accepted here?<br/>7 options | | _Multiple choice only_ |
| [payment-options-advanced](#payment-options-advanced) <br/> _(Original in [questions](./BuiltinQuestions.md#payment-options))_ | Which methods of payment are accepted here?<br/>5 options | | _Multiple choice only_ |
| [denominations-coins](#denominations-coins) | What coins can you use to pay here?<br/>15 options | | _Multiple choice only_ |
| [denominations-notes](#denominations-notes) | what notes can you use to pay here?<br/>13 options | | _Multiple choice only_ |
| [all_tags](#all_tags) | _{all_tags()}_ | | _Multiple choice only_ |
| [multilevels](#multilevels) <br/> _(Original in [questions](./BuiltinQuestions.md#single_level))_ | What levels does this elevator go to?<br/>_This elevator goes to floors {level}_<br/>5 options | | *[level](https://wiki.osm.org/wiki/Key:level)* ([string](../SpecialInputElements.md#string)) |
| [repeated](#repeated) | _Multiple, identical objects can be found on floors {repeat_on}._ | level | _Multiple choice only_ |
| [single_level](#single_level) | On what level is this feature located?<br/>_Located on the {level}th floor_<br/>5 options | level | *[level](https://wiki.osm.org/wiki/Key:level)* ([float](../SpecialInputElements.md#float)) |
| [smoking](#smoking) | Is smoking allowed at ?<br/>3 options | | _Multiple choice only_ |
| [induction-loop](#induction-loop) | Does this place have an audio induction loop for people with reduced hearing?<br/>2 options | | _Multiple choice only_ |
| [internet](#internet) | Does this place offer internet access?<br/>6 options | internet-all | _Multiple choice only_ |
| [internet-fee](#internet-fee) | Is there a fee for internet access?<br/>3 options | internet-all | _Multiple choice only_ |
| [internet-ssid](#internet-ssid) | What is the network name for the wireless internet access?<br/>_The network name is <b>{internet_access:ssid}</b>_<br/>1 options | internet-all | *[internet_access:ssid](https://wiki.osm.org/wiki/Key:internet_access:ssid)* ([string](../SpecialInputElements.md#string)) |
| [luminous_or_lit](#luminous_or_lit) | Is this object lit or does it emit light?<br/>4 options | | _Multiple choice only_ |
| [survey_date](#survey_date) | When was this object last surveyed?<br/>_This object was last surveyed on <b>{survey:date}</b>_<br/>1 options | | *[survey:date](https://wiki.osm.org/wiki/Key:survey:date)* ([date](../SpecialInputElements.md#date)) |
| [check_date](#check_date) | When was this object last checked?<br/>_This object was last checked on <b>{check_date}</b>_<br/>1 options | | *[check_date](https://wiki.osm.org/wiki/Key:check_date)* ([date](../SpecialInputElements.md#date)) |
| [sugar_free](#sugar_free) | Does this shop have a sugar free offering?<br/>4 options | diets | _Multiple choice only_ |
| [lactose_free](#lactose_free) | Does have a lactose-free offering?<br/>4 options | diets | _Multiple choice only_ |
| [gluten_free](#gluten_free) | Does this shop have a gluten free offering?<br/>4 options | diets | _Multiple choice only_ |
| [vegan](#vegan) | Does this place offer a vegan option?<br/>4 options | diets | _Multiple choice only_ |
| [lod](#lod) | _{linked_data_from_website()}_ | added_by_default | _Multiple choice only_ |
| [split_button](#split_button) | _{split_button()}_ | | _Multiple choice only_ |
| [seasonal](#seasonal) | Is available all around the year?<br/>3 options | | _Multiple choice only_ |
| [shower](#shower) | Does this facility offer showers?<br/>4 options | | _Multiple choice only_ |
| [preset_description](#preset_description) | _{preset_description()}_ | | _Multiple choice only_ |
| [brand](#brand) | Is part of a bigger brand?<br/>_Part of {brand}_<br/>1 options | | *[brand](https://wiki.osm.org/wiki/Key:brand)* ([string](../SpecialInputElements.md#string)) |
| [indoor](#indoor) | Is this object located indoors?<br/>2 options | | _Multiple choice only_ |
| [seating](#seating) | What kind of seating does have?<br/>2 options | | _Multiple choice only_ |
| [maxstay](#maxstay) | What is the maximum amount of time one is allowed to stay here?<br/>_One can stay at most <b>{canonical(maxstay)}</b>_<br/>1 options | | *[maxstay](https://wiki.osm.org/wiki/Key:maxstay)* ([pfloat](../SpecialInputElements.md#pfloat)) |
| [name](#name) | What is the name of this place?<br/>_<b>{name}</b>_ | | *[name](https://wiki.osm.org/wiki/Key:name)* ([string](../SpecialInputElements.md#string)) |
| [questions](#questions) <br/> _(Original in [questions](./BuiltinQuestions.md#questions))_ | _{questions()}_ | | _Multiple choice only_ |
| [images](#images) <br/> _(Original in [questions](./BuiltinQuestions.md#images))_ | _{image_carousel()}{image_upload()}_ | | _Multiple choice only_ |
| [images_no_blur](#images_no_blur) <br/> _(Original in [questions](./BuiltinQuestions.md#images_no_blur))_ | _{image_carousel()}{image_upload(,,,true)}_ | | _Multiple choice only_ |
| [mapillary](#mapillary) <br/> _(Original in [questions](./BuiltinQuestions.md#mapillary))_ | _{mapillary_link()}_ | | _Multiple choice only_ |
| [export_as_gpx](#export_as_gpx) <br/> _(Original in [questions](./BuiltinQuestions.md#export_as_gpx))_ | _{export_as_gpx()}_ | | _Multiple choice only_ |
| [export_as_geojson](#export_as_geojson) <br/> _(Original in [questions](./BuiltinQuestions.md#export_as_geojson))_ | _{export_as_geojson()}_ | | _Multiple choice only_ |
| [wikipedia](#wikipedia) <br/> _(Original in [questions](./BuiltinQuestions.md#wikipedia))_ | What is the corresponding Wikidata entity?<br/>_{wikipedia():max-height:25rem}_<br/>2 options | | *[wikidata](https://wiki.osm.org/wiki/Key:wikidata)* ([wikidata](../SpecialInputElements.md#wikidata)) |
| [reviews](#reviews) <br/> _(Original in [questions](./BuiltinQuestions.md#reviews))_ | _{create_review()}{list_reviews()}_ | | _Multiple choice only_ |
| [phone](#phone) <br/> _(Original in [questions](./BuiltinQuestions.md#phone))_ | What is the phone number of ?<br/>_{link(&LBRACEphone&RBRACE,tel:&LBRACEphone&RBRACE,,,,)}_<br/>1 options | contact | *[phone](https://wiki.osm.org/wiki/Key:phone)* ([phone](../SpecialInputElements.md#phone)) |
| [mastodon](#mastodon) <br/> _(Original in [questions](./BuiltinQuestions.md#mastodon))_ | What is the Mastodon-handle of ?<br/>_{fediverse_link(contact:mastodon)}_ | | *[contact:mastodon](https://wiki.osm.org/wiki/Key:contact:mastodon)* ([fediverse](../SpecialInputElements.md#fediverse)) |
| [facebook](#facebook) <br/> _(Original in [questions](./BuiltinQuestions.md#facebook))_ | What is the facebook page of of ?<br/>_{link(Facebook page,&LBRACEcontact:facebook&RBRACE,,,,)}<div class='subtle text-sm'>Facebook is known to harm mental health, manipulate public opinion and cause hate. Try to use healthier alternatives</div>_ | | *[contact:facebook](https://wiki.osm.org/wiki/Key:contact:facebook)* ([url](../SpecialInputElements.md#url)) |
| [osmlink](#osmlink) <br/> _(Original in [questions](./BuiltinQuestions.md#osmlink))_ | _<a href='https://openstreetmap.org/{id}' target='_blank' rel='noopener'F><img src='./assets/svg/osm-logo-us.svg'/></a>_<br/>1 options | | _Multiple choice only_ |
| [email](#email) <br/> _(Original in [questions](./BuiltinQuestions.md#email))_ | What is the email address of ?<br/>_<a href='mailto:{email}' target='_blank' rel='noopener'>{email}</a>_<br/>2 options | contact | *[email](https://wiki.osm.org/wiki/Key:email)* ([email](../SpecialInputElements.md#email)) |
| [website](#website) <br/> _(Original in [questions](./BuiltinQuestions.md#website))_ | What is the website of ?<br/>_<a href='{website}' rel='nofollow noopener noreferrer' target='_blank'>{website}</a>_<br/>1 options | contact | *[website](https://wiki.osm.org/wiki/Key:website)* ([url](../SpecialInputElements.md#url)) |
| [wheelchair-access](#wheelchair-access) <br/> _(Original in [questions](./BuiltinQuestions.md#wheelchair-access))_ | Is this place accessible with a wheelchair?<br/>4 options | | _Multiple choice only_ |
| [dog-access](#dog-access) <br/> _(Original in [questions](./BuiltinQuestions.md#dog-access))_ | Are dogs allowed in this business?<br/>5 options | | _Multiple choice only_ |
| [description](#description) <br/> _(Original in [questions](./BuiltinQuestions.md#description))_ | Is there still some relevant info that the previous questions did not cover? Feel free to add it here.<br/>_{description}_ | | *[description](https://wiki.osm.org/wiki/Key:description)* ([text](../SpecialInputElements.md#text)) |
| [opening_hours](#opening_hours) <br/> _(Original in [questions](./BuiltinQuestions.md#opening_hours))_ | What are the opening hours of ?<br/>_<h3>Opening hours</h3>{opening_hours_table(opening_hours)}_<br/>1 options | | *[opening_hours](https://wiki.osm.org/wiki/Key:opening_hours)* ([opening_hours](../SpecialInputElements.md#opening_hours)) |
| [opening_hours_24_7](#opening_hours_24_7) <br/> _(Original in [questions](./BuiltinQuestions.md#opening_hours_24_7))_ | What are the opening hours of ?<br/>_<h3>Opening hours</h3>{opening_hours_table(opening_hours)}_<br/>2 options | | *[opening_hours](https://wiki.osm.org/wiki/Key:opening_hours)* ([opening_hours](../SpecialInputElements.md#opening_hours)) |
| [opening_hours_24_7_default](#opening_hours_24_7_default) <br/> _(Original in [questions](./BuiltinQuestions.md#opening_hours_24_7_default))_ | What are the opening hours of ?<br/>_<h3>Opening hours</h3>{opening_hours_table(opening_hours)}_<br/>2 options | | *[opening_hours](https://wiki.osm.org/wiki/Key:opening_hours)* ([opening_hours](../SpecialInputElements.md#opening_hours)) |
| [opening_hours_by_appointment](#opening_hours_by_appointment) <br/> _(Original in [questions](./BuiltinQuestions.md#opening_hours_by_appointment))_ | What are the opening hours of ?<br/>_<h3>Opening hours</h3>{opening_hours_table(opening_hours)}_<br/>3 options | | *[opening_hours](https://wiki.osm.org/wiki/Key:opening_hours)* ([opening_hours](../SpecialInputElements.md#opening_hours)) |
| [service:electricity](#service:electricity) <br/> _(Original in [questions](./BuiltinQuestions.md#service:electricity))_ | Does this amenity have electrical outlets, available to customers when they are inside?<br/>4 options | | _Multiple choice only_ |
| [payment-options](#payment-options) <br/> _(Original in [questions](./BuiltinQuestions.md#payment-options))_ | Which methods of payment are accepted here?<br/>3 options | | _Multiple choice only_ |
| [payment-options-split](#payment-options-split) <br/> _(Original in [questions](./BuiltinQuestions.md#payment-options-split))_ | Which methods of payment are accepted here?<br/>7 options | | _Multiple choice only_ |
| [payment-options-advanced](#payment-options-advanced) <br/> _(Original in [questions](./BuiltinQuestions.md#payment-options-advanced))_ | Which methods of payment are accepted here?<br/>5 options | | _Multiple choice only_ |
| [denominations-coins](#denominations-coins) <br/> _(Original in [questions](./BuiltinQuestions.md#denominations-coins))_ | What coins can you use to pay here?<br/>15 options | | _Multiple choice only_ |
| [denominations-notes](#denominations-notes) <br/> _(Original in [questions](./BuiltinQuestions.md#denominations-notes))_ | what notes can you use to pay here?<br/>13 options | | _Multiple choice only_ |
| [all_tags](#all_tags) <br/> _(Original in [questions](./BuiltinQuestions.md#all_tags))_ | _{all_tags()}_ | | _Multiple choice only_ |
| [multilevels](#multilevels) <br/> _(Original in [questions](./BuiltinQuestions.md#multilevels))_ | What levels does this elevator go to?<br/>_This elevator goes to floors {level}_<br/>5 options | | *[level](https://wiki.osm.org/wiki/Key:level)* ([string](../SpecialInputElements.md#string)) |
| [repeated](#repeated) <br/> _(Original in [questions](./BuiltinQuestions.md#repeated))_ | _Multiple, identical objects can be found on floors {repeat_on}._ | level | _Multiple choice only_ |
| [single_level](#single_level) <br/> _(Original in [questions](./BuiltinQuestions.md#single_level))_ | On what level is this feature located?<br/>_Located on the {level}th floor_<br/>5 options | level | *[level](https://wiki.osm.org/wiki/Key:level)* ([float](../SpecialInputElements.md#float)) |
| [smoking](#smoking) <br/> _(Original in [questions](./BuiltinQuestions.md#smoking))_ | Is smoking allowed at ?<br/>3 options | | _Multiple choice only_ |
| [induction-loop](#induction-loop) <br/> _(Original in [questions](./BuiltinQuestions.md#induction-loop))_ | Does this place have an audio induction loop for people with reduced hearing?<br/>2 options | | _Multiple choice only_ |
| [internet](#internet) <br/> _(Original in [questions](./BuiltinQuestions.md#internet))_ | Does this place offer internet access?<br/>6 options | internet-all | _Multiple choice only_ |
| [internet-fee](#internet-fee) <br/> _(Original in [questions](./BuiltinQuestions.md#internet-fee))_ | Is there a fee for internet access?<br/>3 options | internet-all | _Multiple choice only_ |
| [internet-ssid](#internet-ssid) <br/> _(Original in [questions](./BuiltinQuestions.md#internet-ssid))_ | What is the network name for the wireless internet access?<br/>_The network name is <b>{internet_access:ssid}</b>_<br/>1 options | internet-all | *[internet_access:ssid](https://wiki.osm.org/wiki/Key:internet_access:ssid)* ([string](../SpecialInputElements.md#string)) |
| [luminous_or_lit](#luminous_or_lit) <br/> _(Original in [questions](./BuiltinQuestions.md#luminous_or_lit))_ | Is this object lit or does it emit light?<br/>4 options | | _Multiple choice only_ |
| [survey_date](#survey_date) <br/> _(Original in [questions](./BuiltinQuestions.md#survey_date))_ | When was this object last surveyed?<br/>_This object was last surveyed on <b>{survey:date}</b>_<br/>1 options | | *[survey:date](https://wiki.osm.org/wiki/Key:survey:date)* ([date](../SpecialInputElements.md#date)) |
| [check_date](#check_date) <br/> _(Original in [questions](./BuiltinQuestions.md#check_date))_ | When was this object last checked?<br/>_This object was last checked on <b>{check_date}</b>_<br/>1 options | | *[check_date](https://wiki.osm.org/wiki/Key:check_date)* ([date](../SpecialInputElements.md#date)) |
| [sugar_free](#sugar_free) <br/> _(Original in [questions](./BuiltinQuestions.md#sugar_free))_ | Does this shop have a sugar free offering?<br/>4 options | diets | _Multiple choice only_ |
| [lactose_free](#lactose_free) <br/> _(Original in [questions](./BuiltinQuestions.md#lactose_free))_ | Does have a lactose-free offering?<br/>4 options | diets | _Multiple choice only_ |
| [gluten_free](#gluten_free) <br/> _(Original in [questions](./BuiltinQuestions.md#gluten_free))_ | Does this shop have a gluten free offering?<br/>4 options | diets | _Multiple choice only_ |
| [vegan](#vegan) <br/> _(Original in [questions](./BuiltinQuestions.md#vegan))_ | Does this place offer a vegan option?<br/>4 options | diets | _Multiple choice only_ |
| [lod](#lod) <br/> _(Original in [questions](./BuiltinQuestions.md#lod))_ | _{linked_data_from_website()}_ | added_by_default | _Multiple choice only_ |
| [split_button](#split_button) <br/> _(Original in [questions](./BuiltinQuestions.md#split_button))_ | _{split_button()}_ | | _Multiple choice only_ |
| [seasonal](#seasonal) <br/> _(Original in [questions](./BuiltinQuestions.md#seasonal))_ | Is available all around the year?<br/>3 options | | _Multiple choice only_ |
| [shower](#shower) <br/> _(Original in [questions](./BuiltinQuestions.md#shower))_ | Does this facility offer showers?<br/>4 options | | _Multiple choice only_ |
| [preset_description](#preset_description) <br/> _(Original in [questions](./BuiltinQuestions.md#preset_description))_ | _{preset_description()}_ | | _Multiple choice only_ |
| [brand](#brand) <br/> _(Original in [questions](./BuiltinQuestions.md#brand))_ | Is part of a bigger brand?<br/>_Part of {brand}_<br/>1 options | | *[brand](https://wiki.osm.org/wiki/Key:brand)* ([string](../SpecialInputElements.md#string)) |
| [indoor](#indoor) <br/> _(Original in [questions](./BuiltinQuestions.md#indoor))_ | Is this object located indoors?<br/>2 options | | _Multiple choice only_ |
| [seating](#seating) <br/> _(Original in [questions](./BuiltinQuestions.md#seating))_ | What kind of seating does have?<br/>2 options | | _Multiple choice only_ |
| [maxstay](#maxstay) <br/> _(Original in [questions](./BuiltinQuestions.md#maxstay))_ | What is the maximum amount of time one is allowed to stay here?<br/>_One can stay at most <b>{canonical(maxstay)}</b>_<br/>1 options | | *[maxstay](https://wiki.osm.org/wiki/Key:maxstay)* ([pfloat](../SpecialInputElements.md#pfloat)) |
| [name](#name) <br/> _(Original in [questions](./BuiltinQuestions.md#name))_ | What is the name of this place?<br/>_<b>{name}</b>_ | | *[name](https://wiki.osm.org/wiki/Key:name)* ([string](../SpecialInputElements.md#string)) |
| [has_toilets](#has_toilets) <br/> _(Original in [questions](./BuiltinQuestions.md#has_toilets))_ | Has toilets?<br/>3 options | | _Multiple choice only_ |
### questions
Show the questions block at this location
@ -213,7 +215,7 @@ Shows a wikipedia box with the corresponding wikipedia article; the wikidata-ite
The question is `What is the corresponding Wikidata entity?`
*{wikipedia():max-height:25rem}* is shown if `wikidata` is set
- *No Wikipedia page has been linked yet* is shown if with wikipedia~.+. _This option cannot be chosen as answer_
- *{wikipedia():max-height:25rem}* is shown if with wikipedia~.+. _This option cannot be chosen as answer_
- *No Wikipedia page has been linked yet* is shown if with wikidata=. _This option cannot be chosen as answer_
### reviews
@ -636,41 +638,13 @@ The question is `What is the maximum amount of time one is allowed to stay here?
The question is `What is the name of this place?`
*<b>{name}</b>* is shown if `name` is set
## Filters
### has_toilets
| id | question | osmTags |
-----|-----|----- |
| dogs.0 | *No preference towards dogs* (default) | |
| dogs.1 | Dogs allowed | dog=unleashed | dog=yes |
| dogs.2 | No dogs allowed | dog=no |
The question is `Has {title()} toilets?`
| id | question | osmTags |
-----|-----|----- |
| open_now.0 | Now open | _isOpen=yes |
| id | question | osmTags |
-----|-----|----- |
| accepts_cash.0 | Accepts cash | payment:cash=yes |
| id | question | osmTags |
-----|-----|----- |
| accepts_cards.0 | Accepts payment cards | payment:cards=yes |
| id | question | osmTags |
-----|-----|----- |
| has_internet.0 | Offers internet | internet_access=wlan | internet_access=yes | internet_access=wired |
| id | question | osmTags |
-----|-----|----- |
| sugar_free.0 | Has a sugar-free offering | diet:sugar_free=yes | diet:sugar_free=only | diet:sugar_free=limited |
| id | question | osmTags |
-----|-----|----- |
| lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited |
| id | question | osmTags |
-----|-----|----- |
| gluten_free.0 | Has a gluten free offering | diet:gluten_free=yes | diet:gluten_free=only | diet:gluten_free=limited |
- *Has toilets* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets' target='_blank'>toilets</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dyes' target='_blank'>yes</a>
- *Has no toilets* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets' target='_blank'>toilets</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dno' target='_blank'>no</a>
- *The toilets are marked separately on the map* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:toilets' target='_blank'>toilets</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dseparate' target='_blank'>separate</a>

View file

@ -419,7 +419,7 @@ The default value is _false_
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#L451)
This documentation is defined in the source code at [generateDocs.ts](ervdvn/git2/MapComplete/scripts/generateDocs.ts#L452)
The default value is _map_

4
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "mapcomplete",
"version": "0.51.3",
"version": "0.51.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "mapcomplete",
"version": "0.51.3",
"version": "0.51.4",
"hasInstallScript": true,
"license": "GPL-3.0-or-later",
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "mapcomplete",
"version": "0.51.3",
"version": "0.51.4",
"repository": "https://source.mapcomplete.org/MapComplete/MapComplete",
"description": "A small website to edit OSM easily",
"bugs": "hhttps://source.mapcomplete.org/MapComplete/MapComplete/issues",

View file

@ -26,7 +26,6 @@ fi
cp node_modules/name-suggestion-index/dist/nsi.min.json public/assets/data/nsi
cp node_modules/name-suggestion-index/dist/wikidata.min.json public/assets/data/nsi
vite-node scripts/nsiLogos.ts -- patch
export NODE_OPTIONS=--max-old-space-size=32000
which vite

View file

@ -11,7 +11,7 @@ import themeOverview from "../src/assets/generated/theme_overview.json"
import ThemeConfig from "../src/Models/ThemeConfig/ThemeConfig"
import bookcases from "../public/assets/generated/themes/bookcases.json"
import fakedom from "fake-dom"
import unit from "../src/assets/generated/layers/unit.json"
import unit from "../public/assets/generated/layers/unit.json"
import Hotkeys from "../src/UI/Base/Hotkeys"
import { QueryParameters } from "../src/Logic/Web/QueryParameters"
import Constants from "../src/Models/Constants"
@ -20,7 +20,7 @@ import DependencyCalculator from "../src/Models/ThemeConfig/DependencyCalculator
import { AllSharedLayers } from "../src/Customizations/AllSharedLayers"
import ThemeViewState from "../src/Models/ThemeViewState"
import Validators from "../src/UI/InputElement/Validators"
import questions from "../src/assets/generated/layers/questions.json"
import questions from "../public/assets/generated/layers/questions.json"
import { LayerConfigJson } from "../src/Models/ThemeConfig/Json/LayerConfigJson"
import { Utils } from "../src/Utils"
import { TagUtils } from "../src/Logic/Tags/TagUtils"
@ -32,6 +32,7 @@ import { parse as parse_html } from "node-html-parser"
import { AvailableRasterLayers } from "../src/Models/RasterLayers"
import { ImmutableStore } from "../src/Logic/UIEventSource"
import * as unitUsage from "../Docs/Schemas/UnitConfigJson.schema.json"
import { ThemeConfigJson } from "../src/Models/ThemeConfig/Json/ThemeConfigJson"
/**
* Converts a markdown-file into a .json file, which a walkthrough/slideshow element can use
@ -261,14 +262,17 @@ export class GenerateDocs extends Script {
}
private generateHotkeyDocs() {
new ThemeViewState(new ThemeConfig(<any>bookcases), new ImmutableStore(new Set()))
new ThemeViewState(
new ThemeConfig(<ThemeConfigJson>(<unknown>bookcases)),
new ImmutableStore(new Set())
)
this.WriteMarkdownFile("./Docs/Hotkeys.md", Hotkeys.generateDocumentation(), [
"src/UI/Base/Hotkeys.ts",
])
}
private generateBuiltinUnits() {
const layer = new LayerConfig(<LayerConfigJson>unit, "units", true)
const layer = new LayerConfig(<LayerConfigJson>(<unknown>unit), "units", true)
const els: string[] = [
"# Units",
"## How to use",
@ -462,7 +466,11 @@ export class GenerateDocs extends Script {
}
private generateBuiltinQuestions() {
const qLayer = new LayerConfig(<LayerConfigJson>questions, "questions.json", true)
const qLayer = new LayerConfig(
<LayerConfigJson>(<unknown>questions),
"questions.json",
true
)
this.WriteMarkdownFile(
"./Docs/BuiltinQuestions.md",
qLayer.generateDocumentation([], new Map(), []),

View file

@ -90,8 +90,8 @@ export default class PerLayerFeatureSourceSplitter<T extends FeatureSource = Fea
for (let i = 0; i < layers.length; i++) {
const layer = layers[i]
const id = layer.layerDef.id
const features = featuresPerLayer.get(id)
if (features === undefined) {
const featuresForLayer = featuresPerLayer.get(id)
if (featuresForLayer === undefined) {
// No such features for this layer
continue
}
@ -101,8 +101,7 @@ export default class PerLayerFeatureSourceSplitter<T extends FeatureSource = Fea
// We can safely assume that no changes were made
continue
}
layerSources.get(id).setData(features)
layerSources.get(id).setData(featuresForLayer)
}
layerIndexes = newIndices

View file

@ -14,7 +14,6 @@ import {
} from "geojson"
import { Tiles } from "../Models/TileRange"
import { Utils } from "../Utils"
;("use strict")
export class GeoOperations {

View file

@ -31,7 +31,7 @@ export abstract class OsmObject {
const objects: OsmObject[] = []
const allNodes: Map<number, OsmNode> = new Map<number, OsmNode>()
for (const element of elements) {
for (const element of elements ?? []) {
const type = element.type
const idN = element.id
let osmObject: OsmObject = null

View file

@ -244,7 +244,7 @@ export default class OsmObjectDownloader {
return "deleted"
}
// A full query might contain more than just the requested object (e.g. nodes that are part of a way, where we only want the way)
const parsed = OsmObject.ParseObjects(rawData["content"].elements)
const parsed = OsmObject.ParseObjects(rawData?.["content"]?.elements)
// Let us fetch the object we need
for (const osmObject of parsed) {
if (osmObject.type !== type) {
@ -256,6 +256,6 @@ export default class OsmObjectDownloader {
// Found the one!
return osmObject
}
throw "PANIC: requested object is not part of the response"
throw `PANIC: requested object ${type}/${idN} is not part of the response`
}
}

View file

@ -9,6 +9,7 @@ import { FeatureSource, IndexedFeatureSource } from "../../Logic/FeatureSource/F
import { Tag } from "../../Logic/Tags/Tag"
import Hotkeys from "../../UI/Base/Hotkeys"
import Translations from "../../UI/i18n/Translations"
import { Feature } from "geojson"
export class WithLayoutSourceState extends WithSelectedElementState {
readonly layerState: LayerState
@ -127,4 +128,10 @@ export class WithLayoutSourceState extends WithSelectedElementState {
this.featureProperties.trackFeature(feature)
this.selectedElement.setData(feature)
}
protected setSelectedElement(feature: Feature) {
// The given feature might be a partial one from the cache
feature = this.indexedFeatures.featuresById.data?.get(feature.properties.id) ?? feature
super.setSelectedElement(feature)
}
}

View file

@ -121,7 +121,7 @@ export class WithSpecialLayers extends WithChangesState {
new ShowDataLayer(this.map, {
features: source,
layer: new LayerConfig(<LayerConfigJson>summaryLayer, "summaryLayer"),
layer: new LayerConfig(<LayerConfigJson>(<unknown>summaryLayer), "summaryLayer"),
// doShowLayer: this.mapProperties.zoom.map((z) => z < maxzoom),
selectedElement: this.selectedElement,
})
@ -147,7 +147,7 @@ export class WithSpecialLayers extends WithChangesState {
private drawLastClick() {
const source = this.lastClickObject
const lastClickLayerConfig = new LayerConfig(
<LayerConfigJson>last_click_layerconfig,
<LayerConfigJson>(<unknown>last_click_layerconfig),
"last_click"
)
const lastClickFiltered =
@ -185,7 +185,9 @@ export class WithSpecialLayers extends WithChangesState {
const src = new StaticFeatureSource(
this.selectedElement.map((f) => (f === undefined ? [] : [f]))
)
ShowDataLayer.showMultipleLayers(this.map, src, this.theme.layers)
ShowDataLayer.showMultipleLayers(this.map, src, this.theme.layers, {
prefix: "selected_element_",
})
}
private drawSpecialLayers() {

View file

@ -277,7 +277,7 @@ class LineRenderingLayer {
updateNeededSrc.set(false)
}
})
features.features.addCallbackAndRunD(() => {
features.features.addCallbackAndRunD(async (feats) => {
console.log("New features!", this._layername, features.features.data.length)
updateNeededSrc.set(true)
})
@ -377,6 +377,7 @@ class LineRenderingLayer {
private async update(features: Feature[]) {
const map = this._map
await this.awaitStyleLoaded()
const src = <GeoJSONSource>map.getSource(this._layername)
{
// Add source to the map or update the feature source
@ -626,23 +627,32 @@ export default class ShowDataLayer {
}
private initDrawFeatures(map: MlMap) {
const { features, doShowLayer, fetchStore, selectedElement } = this._options
const {
features,
doShowLayer,
fetchStore,
selectedElement,
layer,
drawLines,
drawMarkers,
} = this._options
let onClick = this._options.onClick
if (!onClick && selectedElement) {
onClick =
this._options.layer.title === undefined
? undefined
: (feature: Feature) => {
selectedElement?.setData(feature)
}
if (!onClick && selectedElement && layer.title !== undefined) {
onClick = (feature: Feature) => {
selectedElement?.setData(feature)
}
}
if (this._options.drawLines !== false) {
for (let i = 0; i < this._options.layer.lineRendering.length; i++) {
const lineRenderingConfig = this._options.layer.lineRendering[i]
if (drawLines !== false) {
for (let i = 0; i < layer.lineRendering.length; i++) {
const lineRenderingConfig = layer.lineRendering[i]
const l = new LineRenderingLayer(
map,
features,
"mapcomplete_" + this._options.layer.id + "_linerendering_" + i,
"mapcomplete_" +
(this._options.prefix ?? "") +
layer.id +
"_linerendering_" +
i,
lineRenderingConfig,
doShowLayer,
fetchStore,
@ -651,11 +661,11 @@ export default class ShowDataLayer {
this.onDestroy.push(l.destruct)
}
}
if (this._options.drawMarkers !== false) {
for (const pointRenderingConfig of this._options.layer.mapRendering) {
if (drawMarkers !== false) {
for (const pointRenderingConfig of layer.mapRendering) {
new PointRenderingLayer(
map,
this._options.layer,
layer,
features,
pointRenderingConfig,
this._options.metaTags,

View file

@ -1,6 +1,5 @@
import { FeatureSource } from "../../Logic/FeatureSource/FeatureSource"
import { Store, UIEventSource } from "../../Logic/UIEventSource"
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
import { Feature } from "geojson"
export interface ShowDataLayerOptions {
@ -31,4 +30,6 @@ export interface ShowDataLayerOptions {
onClick?: (feature: Feature) => void
metaTags?: Store<Record<string, string>>
prefix?: string
}

View file

@ -14,7 +14,7 @@
</script>
{#if tags?.length > 0}
<div class="flex gap-x-4 flex-wrap">
<div class="flex flex-wrap gap-x-4">
{#each tags as tag}
<div class="break-words" style="word-break: break-word">
{#if tag["value"] === ""}

View file

@ -84,8 +84,11 @@
</DotMenu>
</div>
{#each $recentlySeen as entry (entry)}
<GeocodeResultSvelte {entry} {state}
on:select={(select) => state.searchState.applyGeocodeResult(select.detail)} />
<GeocodeResultSvelte
{entry}
{state}
on:select={(select) => state.searchState.applyGeocodeResult(select.detail)}
/>
{/each}
</SidebarUnit>
{/if}

View file

@ -24,7 +24,7 @@ import { ConversionContext } from "../../Models/ThemeConfig/Conversion/Conversio
import { LocalStorageSource } from "../../Logic/Web/LocalStorageSource"
import { TagRenderingConfigJson } from "../../Models/ThemeConfig/Json/TagRenderingConfigJson"
import { ValidateTheme } from "../../Models/ThemeConfig/Conversion/ValidateTheme"
import * as questions from "../../assets/generated/layers/questions.json"
import * as questions from "../../../public/assets/generated/layers/questions.json"
export interface HighlightedTagRendering {
path: ReadonlyArray<string | number>

View file

@ -1,7 +1,7 @@
{
"contributors": [
{
"commits": 9687,
"commits": 9694,
"contributor": "Pieter Vander Vennet"
},
{