diff --git a/.github/workflows/deploy_pietervdvn.yml b/.github/workflows/deploy_pietervdvn.yml
index 9c566a61ee..8f149957b6 100644
--- a/.github/workflows/deploy_pietervdvn.yml
+++ b/.github/workflows/deploy_pietervdvn.yml
@@ -8,6 +8,7 @@ on:
jobs:
build:
runs-on: ubuntu-latest
+ if: ${{ github.actor != 'weblate' }}
steps:
- uses: actions/checkout@v2
diff --git a/.github/workflows/validate_translations.yml b/.github/workflows/validate_translations.yml
new file mode 100644
index 0000000000..6f07d343a3
--- /dev/null
+++ b/.github/workflows/validate_translations.yml
@@ -0,0 +1,37 @@
+name: Deployment on pietervdvn
+on:
+ pull_request
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ if: ${{ github.actor == 'weblate' }}
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: "16"
+ cache: "npm"
+ cache-dependency-path: package-lock.json
+
+ - name: install deps
+ run: npm ci
+ shell: bash
+
+ - name: create generated dir
+ run: mkdir ./assets/generated
+ shell: bash
+
+ - name: sync translations
+ run: npm run generate:translations
+ shell: bash
+
+ - name: generate layeroverview
+ run: npm run reset:layeroverview
+ shell: bash
+
+ - name: run tests
+ run: npm run test
+ shell: bash
diff --git a/Docs/BuiltinIndex.md b/Docs/BuiltinIndex.md
index a32b1db3c1..9e9d188f4c 100644
--- a/Docs/BuiltinIndex.md
+++ b/Docs/BuiltinIndex.md
@@ -33,6 +33,7 @@
+ [internet-fee](#internet-fee)
+ [internet-ssid](#internet-ssid)
+ [reviews](#reviews)
+ + [questions](#questions)
+ [climbing.website](#climbingwebsite)
+ [climbing.fee](#climbingfee)
+ [climbing.bouldering](#climbingbouldering)
@@ -45,7 +46,6 @@
+ [opening_hours_by_appointment](#opening_hours_by_appointment)
+ [multilevels](#multilevels)
+ [induction-loop](#induction-loop)
- + [questions](#questions)
+ [all_tags](#all_tags)
+ [export_as_gpx](#export_as_gpx)
+ [export_as_geojson](#export_as_geojson)
@@ -145,6 +145,7 @@
- reception_desk
- recycling
- shops
+ - shower
- slow_roads
- sport_pitch
- sports_centre
@@ -225,6 +226,7 @@
- pharmacy
- postoffices
- shops
+ - shower
- sports_centre
- toilet_at_amenity
- veterinary
@@ -431,6 +433,7 @@
- railway_platforms
- reception_desk
- shops
+ - shower
- ticket_machine
- ticket_validator
- toilet
@@ -578,6 +581,23 @@
+### questions
+
+
+
+
+
+ - charging_station
+ - etymology
+ - hackerspace
+ - play_forest
+ - playground
+ - shops
+ - sport_pitch
+
+
+
+
### climbing.website
@@ -715,22 +735,6 @@
-### questions
-
-
-
-
-
- - etymology
- - hackerspace
- - play_forest
- - playground
- - shops
- - sport_pitch
-
-
-
-
### all_tags
@@ -793,6 +797,7 @@
- parking_ticket_machine
+ - shower
- ticket_machine
- toilet
diff --git a/Docs/Layers/charging_station.md b/Docs/Layers/charging_station.md
index acbdaf098b..7a96658b13 100644
--- a/Docs/Layers/charging_station.md
+++ b/Docs/Layers/charging_station.md
@@ -2013,6 +2013,8 @@ The question is *Does one have to pay a parking fee while charging?*
+Show the images block at this location
+
This tagrendering has no question and is thus read-only
@@ -2029,16 +2031,6 @@ This tagrendering has no question and is thus read-only
-### leftover-questions
-
-
-
-This tagrendering has no question and is thus read-only
-
-
-
-
-
### minimap
diff --git a/Docs/Layers/charging_station_ebikes.md b/Docs/Layers/charging_station_ebikes.md
index 6dcb574f9a..51609f548d 100644
--- a/Docs/Layers/charging_station_ebikes.md
+++ b/Docs/Layers/charging_station_ebikes.md
@@ -2011,6 +2011,8 @@ The question is *Does one have to pay a parking fee while charging?*
+Show the images block at this location
+
This tagrendering has no question and is thus read-only
@@ -2027,16 +2029,6 @@ This tagrendering has no question and is thus read-only
-### leftover-questions
-
-
-
-This tagrendering has no question and is thus read-only
-
-
-
-
-
### minimap
diff --git a/Docs/Layers/parking_ticket_machine.md b/Docs/Layers/parking_ticket_machine.md
index f2ffe3c095..daa78df0c1 100644
--- a/Docs/Layers/parking_ticket_machine.md
+++ b/Docs/Layers/parking_ticket_machine.md
@@ -108,7 +108,7 @@ The question is *Which methods of payment are accepted here?*
- *Bank notes are accepted here* corresponds with `payment:notes=yes`
- Unselecting this answer will add payment:notes=no
- *Debit cards are accepted here* corresponds with `payment:debit_cards=yes`
- - Unselecting this answer will add payment_debit_cards=no
+ - Unselecting this answer will add payment:debit_cards=no
- *Credit cards are accepted here* corresponds with `payment:credit_cards=yes`
- Unselecting this answer will add payment:credit_cards=no
diff --git a/Docs/Layers/public_bookcase.md b/Docs/Layers/public_bookcase.md
index b28df90fc5..999205c7a3 100644
--- a/Docs/Layers/public_bookcase.md
+++ b/Docs/Layers/public_bookcase.md
@@ -14,7 +14,7 @@ A streetside cabinet with books, accessible to anyone
- - This layer is shown at zoomlevel **10** and higher
+ - This layer is shown at zoomlevel **7** and higher
@@ -338,14 +338,14 @@ This tagrendering has no question and is thus read-only
id | question | osmTags
---- | ---------- | ---------
-kid-books.0 | Kinderboeken aanwezig? | books~^(.*children.*)$
+kid-books.0 | Has children books | books~^(.*children.*)$
id | question | osmTags
---- | ---------- | ---------
-adult-books.0 | Boeken voor volwassenen aanwezig? | books~^(.*adults.*)$
+adult-books.0 | Has books for adults | books~^(.*adults.*)$
@@ -353,8 +353,17 @@ adult-books.0 | Boeken voor volwassenen aanwezig? | books~^(.*adults.*)$
id | question | osmTags
---- | ---------- | ---------
inside.0 | Indoor or outdoor (default) |
-inside.1 | Binnen? | indoor=yes
-inside.2 | Buiten? | indoor=no\|
+inside.1 | Located indoors | indoor=yes
+inside.2 | Located outdoors | indoor=no\|
+
+
+
+
+id | question | osmTags
+---- | ---------- | ---------
+has_image.0 | With and without images (default) |
+has_image.1 | Has at least one image | image~.+\|image:0~.+|image:1~.+|image:2~.+|image:3~.+|mapillary~.+
+has_image.2 | Probably does not have an image |
This document is autogenerated from [assets/layers/public_bookcase/public_bookcase.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/public_bookcase/public_bookcase.json)
diff --git a/Docs/Layers/shower.md b/Docs/Layers/shower.md
new file mode 100644
index 0000000000..8ab8206b6b
--- /dev/null
+++ b/Docs/Layers/shower.md
@@ -0,0 +1,319 @@
+[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
+
+ shower
+========
+
+
+
+
+
+A layer showing (public) showers
+
+
+
+
+
+
+ - This layer is shown at zoomlevel **12** and higher
+
+
+
+
+#### Themes using this layer
+
+
+
+
+
+ - [personal](https://mapcomplete.osm.be/personal)
+ - [toilets](https://mapcomplete.osm.be/toilets)
+
+
+This is a special layer - data is not sourced from OpenStreetMap
+
+
+
+ Supported attributes
+----------------------
+
+
+
+Warning:
+
+this quick overview is incomplete
+
+
+
+attribute | type | values which are supported by this layer
+----------- | ------ | ------------------------------------------
+[
](https://taginfo.openstreetmap.org/keys/id#values) [id](https://wiki.openstreetmap.org/wiki/Key:id) | Multiple choice |
+[
](https://taginfo.openstreetmap.org/keys/level#values) [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1)
+[
](https://taginfo.openstreetmap.org/keys/access#values) [access](https://wiki.openstreetmap.org/wiki/Key:access) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:access%3Dyes) [customers](https://wiki.openstreetmap.org/wiki/Tag:access%3Dcustomers) [key](https://wiki.openstreetmap.org/wiki/Tag:access%3Dkey)
+[
](https://taginfo.openstreetmap.org/keys/fee#values) [fee](https://wiki.openstreetmap.org/wiki/Key:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno)
+[
](https://taginfo.openstreetmap.org/keys/charge#values) [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [string](../SpecialInputElements.md#string) |
+[
](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) |
+[
](https://taginfo.openstreetmap.org/keys/hot_water#values) [hot_water](https://wiki.openstreetmap.org/wiki/Key:hot_water) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:hot_water%3Dyes) [fee](https://wiki.openstreetmap.org/wiki/Tag:hot_water%3Dfee) [no](https://wiki.openstreetmap.org/wiki/Tag:hot_water%3Dno)
+
+
+
+
+### just_created
+
+
+
+This element shows a 'thank you' that the contributor has recently created this element
+
+This tagrendering has no question and is thus read-only
+
+
+
+
+
+ - *You just created this element! Thanks for sharing this info with the world and helping people worldwide.* corresponds with `id~.+`
+
+
+This tagrendering is only visible in the popup if the following condition is met: `_backend~.+&_last_edit:passed_time<300&|_version_number=1`
+
+
+
+### images
+
+
+
+This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata`
+
+This tagrendering has no question and is thus read-only
+
+
+
+
+
+### level
+
+
+
+The question is *On what level is this feature located?*
+
+This rendering asks information about the property [level](https://wiki.openstreetmap.org/wiki/Key:level)
+
+This is rendered with `Located on the {level}th floor`
+
+
+
+
+
+ - *Located underground* corresponds with `location=underground`
+ - This option cannot be chosen as answer
+ - *Located on the ground floor* corresponds with `level=0`
+ - *Located on the ground floor* corresponds with ``
+ - This option cannot be chosen as answer
+ - *Located on the first floor* corresponds with `level=1`
+ - *Located on the first basement level* corresponds with `level=-1`
+
+
+
+
+### access
+
+
+
+The question is *Who can use this shower?*
+
+
+
+
+
+ - *Anyone can use this shower* corresponds with `access=yes`
+ - *Only customers can use this shower* corresponds with `access=customers`
+ - *Accesible, but one has to ask for a key* corresponds with `access=key`
+
+
+
+
+### fee
+
+
+
+The question is *Is there a fee for using this shower?*
+
+
+
+
+
+ - *There is a fee for using this shower* corresponds with `fee=yes`
+ - *This shower is free to use* corresponds with `fee=no`
+
+
+
+
+### charge
+
+
+
+The question is *How much does it cost to use this shower?*
+
+This rendering asks information about the property [charge](https://wiki.openstreetmap.org/wiki/Key:charge)
+
+This is rendered with `It costs {charge} to use this shower`
+
+
+
+This tagrendering is only visible in the popup if the following condition is met: `fee=yes`
+
+
+
+### opening_hours
+
+
+
+The question is *What are the opening hours of {title()}?*
+
+This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours)
+
+This is rendered with `
Opening hours
{opening_hours_table(opening_hours)}`
+
+
+
+
+
+### hot_water
+
+
+
+The question is *Does this shower have hot water available?*
+
+
+
+
+
+ - *Hot water is available here* corresponds with `hot_water=yes`
+ - *Hot water is available here, but there is a fee* corresponds with `hot_water=fee`
+ - *There is no hot water available here* corresponds with `hot_water=no`
+
+
+
+
+### payment-options-split
+
+
+
+The question is *Which methods of payment are accepted here?*
+
+
+
+
+
+ - *Cash is accepted here* corresponds with `payment:cash=yes`
+ - This option cannot be chosen as answer
+ - Unselecting this answer will add
+ - *Payment cards are accepted here* corresponds with `payment:cards=yes`
+ - This option cannot be chosen as answer
+ - Unselecting this answer will add
+ - *Payment by QR-code is possible here* corresponds with `payment:qr_code=yes`
+ - Unselecting this answer will add payment:qr_code=no
+ - *Coins are accepted here* corresponds with `payment:coins=yes`
+ - Unselecting this answer will add payment:coins=no
+ - *Bank notes are accepted here* corresponds with `payment:notes=yes`
+ - Unselecting this answer will add payment:notes=no
+ - *Debit cards are accepted here* corresponds with `payment:debit_cards=yes`
+ - Unselecting this answer will add payment:debit_cards=no
+ - *Credit cards are accepted here* corresponds with `payment:credit_cards=yes`
+ - Unselecting this answer will add payment:credit_cards=no
+
+
+This tagrendering is only visible in the popup if the following condition is met: `fee=yes|hot_water=fee`
+
+
+
+### leftover-questions
+
+
+
+This tagrendering has no question and is thus read-only
+
+
+
+
+
+### minimap
+
+
+
+Shows a small map with the feature. Added by default to every popup
+
+This tagrendering has no question and is thus read-only
+
+
+
+
+
+### move-button
+
+
+
+This tagrendering has no question and is thus read-only
+
+
+
+
+
+### delete-button
+
+
+
+This tagrendering has no question and is thus read-only
+
+
+
+
+
+### last_edit
+
+
+
+Gives some metainfo about the last edit and who did edit it - rendering only
+
+This tagrendering has no question and is thus read-only
+
+
+
+This tagrendering is only visible in the popup if the following condition is met: `_last_edit:contributor~.+&_last_edit:changeset~.+`
+
+
+
+### all-tags
+
+
+
+This tagrendering has no question and is thus read-only
+
+
+
+
+
+#### Filters
+
+
+
+
+
+id | question | osmTags
+---- | ---------- | ---------
+free.0 | Free to use | fee=no\|fee=0|charge=0
+
+
+
+
+id | question | osmTags
+---- | ---------- | ---------
+hot-water.0 | Hot water available | hot_water=yes\|hot_water=fee
+
+
+
+
+id | question | osmTags
+---- | ---------- | ---------
+open_now.0 | Open now | _isOpen=yes
+
+
+This document is autogenerated from [assets/layers/shower/shower.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/shower/shower.json)
diff --git a/Docs/Layers/sport_pitch.md b/Docs/Layers/sport_pitch.md
index 86931f50e0..c847d6c3e1 100644
--- a/Docs/Layers/sport_pitch.md
+++ b/Docs/Layers/sport_pitch.md
@@ -49,6 +49,7 @@ attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[
](https://taginfo.openstreetmap.org/keys/id#values) [id](https://wiki.openstreetmap.org/wiki/Key:id) | Multiple choice |
[
](https://taginfo.openstreetmap.org/keys/sport#values) [sport](https://wiki.openstreetmap.org/wiki/Key:sport) | [string](../SpecialInputElements.md#string) | [basketball](https://wiki.openstreetmap.org/wiki/Tag:sport%3Dbasketball) [soccer](https://wiki.openstreetmap.org/wiki/Tag:sport%3Dsoccer) [table_tennis](https://wiki.openstreetmap.org/wiki/Tag:sport%3Dtable_tennis) [tennis](https://wiki.openstreetmap.org/wiki/Tag:sport%3Dtennis) [korfball](https://wiki.openstreetmap.org/wiki/Tag:sport%3Dkorfball) [skateboard](https://wiki.openstreetmap.org/wiki/Tag:sport%3Dskateboard)
+[
](https://taginfo.openstreetmap.org/keys/hoops#values) [hoops](https://wiki.openstreetmap.org/wiki/Key:hoops) | Multiple choice | [1](https://wiki.openstreetmap.org/wiki/Tag:hoops%3D1) [2](https://wiki.openstreetmap.org/wiki/Tag:hoops%3D2) [4](https://wiki.openstreetmap.org/wiki/Tag:hoops%3D4)
[
](https://taginfo.openstreetmap.org/keys/surface#values) [surface](https://wiki.openstreetmap.org/wiki/Key:surface) | [string](../SpecialInputElements.md#string) | [grass](https://wiki.openstreetmap.org/wiki/Tag:surface%3Dgrass) [sand](https://wiki.openstreetmap.org/wiki/Tag:surface%3Dsand) [paving_stones](https://wiki.openstreetmap.org/wiki/Tag:surface%3Dpaving_stones) [asphalt](https://wiki.openstreetmap.org/wiki/Tag:surface%3Dasphalt) [concrete](https://wiki.openstreetmap.org/wiki/Tag:surface%3Dconcrete)
[
](https://taginfo.openstreetmap.org/keys/access#values) [access](https://wiki.openstreetmap.org/wiki/Key:access) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:access%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:access%3Dlimited) [members](https://wiki.openstreetmap.org/wiki/Tag:access%3Dmembers) [private](https://wiki.openstreetmap.org/wiki/Tag:access%3Dprivate)
[
](https://taginfo.openstreetmap.org/keys/reservation#values) [reservation](https://wiki.openstreetmap.org/wiki/Key:reservation) | Multiple choice | [required](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drequired) [recommended](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drecommended) [yes](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dno)
@@ -116,6 +117,25 @@ This is rendered with `{sport} is played here`
+### basketball-hoops
+
+
+
+The question is *How much basketball hoops does this pitch have?*
+
+
+
+
+
+ - *This basketball pitch has a single hoop* corresponds with `hoops=1`
+ - *This basketball pitch has two hoops* corresponds with `hoops=2`
+ - *This basketball pitch has four hoops* corresponds with `hoops=4`
+ - *This basketball pitch has {hoops} hoops* corresponds with `hoops~.+`
+ - This option cannot be chosen as answer
+
+
+
+
### sport_pitch-surface
diff --git a/Docs/Layers/ticket_machine.md b/Docs/Layers/ticket_machine.md
index 697ffda89a..cdd92135c3 100644
--- a/Docs/Layers/ticket_machine.md
+++ b/Docs/Layers/ticket_machine.md
@@ -141,7 +141,7 @@ The question is *Which methods of payment are accepted here?*
- *Bank notes are accepted here* corresponds with `payment:notes=yes`
- Unselecting this answer will add payment:notes=no
- *Debit cards are accepted here* corresponds with `payment:debit_cards=yes`
- - Unselecting this answer will add payment_debit_cards=no
+ - Unselecting this answer will add payment:debit_cards=no
- *Credit cards are accepted here* corresponds with `payment:credit_cards=yes`
- Unselecting this answer will add payment:credit_cards=no
diff --git a/Docs/Layers/toilet.md b/Docs/Layers/toilet.md
index 2c8abfb7f5..ad7140888c 100644
--- a/Docs/Layers/toilet.md
+++ b/Docs/Layers/toilet.md
@@ -201,7 +201,7 @@ The question is *Which methods of payment are accepted here?*
- *Bank notes are accepted here* corresponds with `payment:notes=yes`
- Unselecting this answer will add payment:notes=no
- *Debit cards are accepted here* corresponds with `payment:debit_cards=yes`
- - Unselecting this answer will add payment_debit_cards=no
+ - Unselecting this answer will add payment:debit_cards=no
- *Credit cards are accepted here* corresponds with `payment:credit_cards=yes`
- Unselecting this answer will add payment:credit_cards=no
diff --git a/Docs/Layers/toilet_at_amenity.md b/Docs/Layers/toilet_at_amenity.md
index c19e12dee5..26d7012685 100644
--- a/Docs/Layers/toilet_at_amenity.md
+++ b/Docs/Layers/toilet_at_amenity.md
@@ -5,7 +5,7 @@
-
+
A layer showing (public) toilets located at different places.
diff --git a/Docs/TagInfo/mapcomplete_ghostbikes.json b/Docs/TagInfo/mapcomplete_ghostbikes.json
index de995f40a0..2f8f730fcf 100644
--- a/Docs/TagInfo/mapcomplete_ghostbikes.json
+++ b/Docs/TagInfo/mapcomplete_ghostbikes.json
@@ -2,7 +2,7 @@
"data_format": 1,
"project": {
"name": "MapComplete Ghost bikes",
- "description": "A ghost bike is a memorial for a cyclist who died in a traffic accident, in the form of a white bicycle placed permanently near the accident location",
+ "description": "A ",
"project_url": "https://mapcomplete.osm.be/ghostbikes",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/ghostbikes/logo.svg",
@@ -57,4 +57,4 @@
"description": "Layer 'Ghost bikes' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'Ghost bikes')"
}
]
-}
+}
\ No newline at end of file
diff --git a/Docs/TagInfo/mapcomplete_personal.json b/Docs/TagInfo/mapcomplete_personal.json
index 573072e463..462cd5817d 100644
--- a/Docs/TagInfo/mapcomplete_personal.json
+++ b/Docs/TagInfo/mapcomplete_personal.json
@@ -11448,6 +11448,143 @@
"description": "Layer 'Shop' shows organic=no with a fixed text, namely 'This shop does not offer organic products' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') (This is only shown if shop=supermarket|shop=convenience|shop=farm|shop=greengrocer|shop=health_food|shop=clothes|shop=shoes|shop=butcher|shop=cosmetics|shop=deli|shop=bakery|shop=alcohol|shop=seafood|shop=beverages|shop=florist)",
"value": "no"
},
+ {
+ "key": "amenity",
+ "description": "The MapComplete theme Personal theme has a layer Shower showing features with this tag",
+ "value": "shower"
+ },
+ {
+ "key": "id",
+ "description": "Layer 'Shower' 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.osm.be theme 'Personal theme') (This is only shown if _backend~.+&_last_edit:passed_time<300&|_version_number=1)"
+ },
+ {
+ "key": "image",
+ "description": "The layer 'Shower 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 'Shower 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 'Shower 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 'Shower 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": "level",
+ "description": "Layer 'Shower' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Personal theme')"
+ },
+ {
+ "key": "location",
+ "description": "Layer 'Shower' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "underground"
+ },
+ {
+ "key": "level",
+ "description": "Layer 'Shower' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "0"
+ },
+ {
+ "key": "level",
+ "description": "Layer 'Shower' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key level.",
+ "value": ""
+ },
+ {
+ "key": "level",
+ "description": "Layer 'Shower' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "1"
+ },
+ {
+ "key": "level",
+ "description": "Layer 'Shower' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "-1"
+ },
+ {
+ "key": "access",
+ "description": "Layer 'Shower' shows access=yes with a fixed text, namely 'Anyone can use this shower' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "yes"
+ },
+ {
+ "key": "access",
+ "description": "Layer 'Shower' shows access=customers with a fixed text, namely 'Only customers can use this shower' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "customers"
+ },
+ {
+ "key": "access",
+ "description": "Layer 'Shower' shows access=key with a fixed text, namely 'Accesible, but one has to ask for a key' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "key"
+ },
+ {
+ "key": "fee",
+ "description": "Layer 'Shower' shows fee=yes with a fixed text, namely 'There is a fee for using this shower' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "yes"
+ },
+ {
+ "key": "fee",
+ "description": "Layer 'Shower' shows fee=no with a fixed text, namely 'This shower is free to use' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "no"
+ },
+ {
+ "key": "charge",
+ "description": "Layer 'Shower' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Personal theme') (This is only shown if fee=yes)"
+ },
+ {
+ "key": "opening_hours",
+ "description": "Layer 'Shower' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')"
+ },
+ {
+ "key": "hot_water",
+ "description": "Layer 'Shower' shows hot_water=yes with a fixed text, namely 'Hot water is available here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "yes"
+ },
+ {
+ "key": "hot_water",
+ "description": "Layer 'Shower' shows hot_water=fee with a fixed text, namely 'Hot water is available here, but there is a fee' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "fee"
+ },
+ {
+ "key": "hot_water",
+ "description": "Layer 'Shower' shows hot_water=no with a fixed text, namely 'There is no hot water available here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "no"
+ },
+ {
+ "key": "payment:cash",
+ "description": "Layer 'Shower' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' (in the MapComplete.osm.be theme 'Personal theme') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
+ {
+ "key": "payment:cards",
+ "description": "Layer 'Shower' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' (in the MapComplete.osm.be theme 'Personal theme') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
+ {
+ "key": "payment:qr_code",
+ "description": "Layer 'Shower' shows payment:qr_code=yes with a fixed text, namely 'Payment by QR-code is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
+ {
+ "key": "payment:coins",
+ "description": "Layer 'Shower' shows payment:coins=yes with a fixed text, namely 'Coins are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
+ {
+ "key": "payment:notes",
+ "description": "Layer 'Shower' shows payment:notes=yes with a fixed text, namely 'Bank notes are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
+ {
+ "key": "payment:debit_cards",
+ "description": "Layer 'Shower' shows payment:debit_cards=yes with a fixed text, namely 'Debit cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
+ {
+ "key": "payment:credit_cards",
+ "description": "Layer 'Shower' shows payment:credit_cards=yes with a fixed text, namely 'Credit cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
{
"key": "highway",
"description": "The MapComplete theme Personal theme has a layer Speed Camera showing features with this tag",
@@ -11542,6 +11679,25 @@
"description": "Layer 'Sport pitches' shows sport=skateboard with a fixed text, namely 'This is a skatepark' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
"value": "skateboard"
},
+ {
+ "key": "hoops",
+ "description": "Layer 'Sport pitches' shows hoops=1 with a fixed text, namely 'This basketball pitch has a single hoop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "1"
+ },
+ {
+ "key": "hoops",
+ "description": "Layer 'Sport pitches' shows hoops=2 with a fixed text, namely 'This basketball pitch has two hoops' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "2"
+ },
+ {
+ "key": "hoops",
+ "description": "Layer 'Sport pitches' shows hoops=4 with a fixed text, namely 'This basketball pitch has four hoops' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+ "value": "4"
+ },
+ {
+ "key": "hoops",
+ "description": "Layer 'Sport pitches' shows hoops~.+ with a fixed text, namely 'This basketball pitch has {hoops} hoops' (in the MapComplete.osm.be theme 'Personal theme')"
+ },
{
"key": "surface",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Personal theme')"
diff --git a/Docs/TagInfo/mapcomplete_sport_pitches.json b/Docs/TagInfo/mapcomplete_sport_pitches.json
index ad8e95df13..6e5dd6038b 100644
--- a/Docs/TagInfo/mapcomplete_sport_pitches.json
+++ b/Docs/TagInfo/mapcomplete_sport_pitches.json
@@ -74,6 +74,25 @@
"description": "Layer 'Sport pitches' shows sport=skateboard with a fixed text, namely 'This is a skatepark' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sport pitches')",
"value": "skateboard"
},
+ {
+ "key": "hoops",
+ "description": "Layer 'Sport pitches' shows hoops=1 with a fixed text, namely 'This basketball pitch has a single hoop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sport pitches')",
+ "value": "1"
+ },
+ {
+ "key": "hoops",
+ "description": "Layer 'Sport pitches' shows hoops=2 with a fixed text, namely 'This basketball pitch has two hoops' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sport pitches')",
+ "value": "2"
+ },
+ {
+ "key": "hoops",
+ "description": "Layer 'Sport pitches' shows hoops=4 with a fixed text, namely 'This basketball pitch has four hoops' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sport pitches')",
+ "value": "4"
+ },
+ {
+ "key": "hoops",
+ "description": "Layer 'Sport pitches' shows hoops~.+ with a fixed text, namely 'This basketball pitch has {hoops} hoops' (in the MapComplete.osm.be theme 'Sport pitches')"
+ },
{
"key": "surface",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Sport pitches')"
diff --git a/Docs/TagInfo/mapcomplete_sports.json b/Docs/TagInfo/mapcomplete_sports.json
index 9919279b82..02d8f7650e 100644
--- a/Docs/TagInfo/mapcomplete_sports.json
+++ b/Docs/TagInfo/mapcomplete_sports.json
@@ -74,6 +74,25 @@
"description": "Layer 'Sport pitches' shows sport=skateboard with a fixed text, namely 'This is a skatepark' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "skateboard"
},
+ {
+ "key": "hoops",
+ "description": "Layer 'Sport pitches' shows hoops=1 with a fixed text, namely 'This basketball pitch has a single hoop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
+ "value": "1"
+ },
+ {
+ "key": "hoops",
+ "description": "Layer 'Sport pitches' shows hoops=2 with a fixed text, namely 'This basketball pitch has two hoops' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
+ "value": "2"
+ },
+ {
+ "key": "hoops",
+ "description": "Layer 'Sport pitches' shows hoops=4 with a fixed text, namely 'This basketball pitch has four hoops' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
+ "value": "4"
+ },
+ {
+ "key": "hoops",
+ "description": "Layer 'Sport pitches' shows hoops~.+ with a fixed text, namely 'This basketball pitch has {hoops} hoops' (in the MapComplete.osm.be theme 'Sports')"
+ },
{
"key": "surface",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Sports')"
diff --git a/Docs/TagInfo/mapcomplete_toilets.json b/Docs/TagInfo/mapcomplete_toilets.json
index 189919c1b4..b5a7a7c008 100644
--- a/Docs/TagInfo/mapcomplete_toilets.json
+++ b/Docs/TagInfo/mapcomplete_toilets.json
@@ -445,6 +445,143 @@
{
"key": "toilets:description",
"description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'toilets:description' (in the MapComplete.osm.be theme 'Public toilets')"
+ },
+ {
+ "key": "amenity",
+ "description": "The MapComplete theme Public toilets has a layer Shower showing features with this tag",
+ "value": "shower"
+ },
+ {
+ "key": "id",
+ "description": "Layer 'Shower' 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.osm.be theme 'Public toilets') (This is only shown if _backend~.+&_last_edit:passed_time<300&|_version_number=1)"
+ },
+ {
+ "key": "image",
+ "description": "The layer 'Shower 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 'Shower 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 'Shower 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 'Shower 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": "level",
+ "description": "Layer 'Shower' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Public toilets')"
+ },
+ {
+ "key": "location",
+ "description": "Layer 'Shower' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Public toilets')",
+ "value": "underground"
+ },
+ {
+ "key": "level",
+ "description": "Layer 'Shower' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets')",
+ "value": "0"
+ },
+ {
+ "key": "level",
+ "description": "Layer 'Shower' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Public toilets') Picking this answer will delete the key level.",
+ "value": ""
+ },
+ {
+ "key": "level",
+ "description": "Layer 'Shower' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets')",
+ "value": "1"
+ },
+ {
+ "key": "level",
+ "description": "Layer 'Shower' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets')",
+ "value": "-1"
+ },
+ {
+ "key": "access",
+ "description": "Layer 'Shower' shows access=yes with a fixed text, namely 'Anyone can use this shower' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets')",
+ "value": "yes"
+ },
+ {
+ "key": "access",
+ "description": "Layer 'Shower' shows access=customers with a fixed text, namely 'Only customers can use this shower' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets')",
+ "value": "customers"
+ },
+ {
+ "key": "access",
+ "description": "Layer 'Shower' shows access=key with a fixed text, namely 'Accesible, but one has to ask for a key' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets')",
+ "value": "key"
+ },
+ {
+ "key": "fee",
+ "description": "Layer 'Shower' shows fee=yes with a fixed text, namely 'There is a fee for using this shower' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets')",
+ "value": "yes"
+ },
+ {
+ "key": "fee",
+ "description": "Layer 'Shower' shows fee=no with a fixed text, namely 'This shower is free to use' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets')",
+ "value": "no"
+ },
+ {
+ "key": "charge",
+ "description": "Layer 'Shower' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Public toilets') (This is only shown if fee=yes)"
+ },
+ {
+ "key": "opening_hours",
+ "description": "Layer 'Shower' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Public toilets')"
+ },
+ {
+ "key": "hot_water",
+ "description": "Layer 'Shower' shows hot_water=yes with a fixed text, namely 'Hot water is available here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets')",
+ "value": "yes"
+ },
+ {
+ "key": "hot_water",
+ "description": "Layer 'Shower' shows hot_water=fee with a fixed text, namely 'Hot water is available here, but there is a fee' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets')",
+ "value": "fee"
+ },
+ {
+ "key": "hot_water",
+ "description": "Layer 'Shower' shows hot_water=no with a fixed text, namely 'There is no hot water available here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets')",
+ "value": "no"
+ },
+ {
+ "key": "payment:cash",
+ "description": "Layer 'Shower' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' (in the MapComplete.osm.be theme 'Public toilets') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
+ {
+ "key": "payment:cards",
+ "description": "Layer 'Shower' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' (in the MapComplete.osm.be theme 'Public toilets') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
+ {
+ "key": "payment:qr_code",
+ "description": "Layer 'Shower' shows payment:qr_code=yes with a fixed text, namely 'Payment by QR-code is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
+ {
+ "key": "payment:coins",
+ "description": "Layer 'Shower' shows payment:coins=yes with a fixed text, namely 'Coins are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
+ {
+ "key": "payment:notes",
+ "description": "Layer 'Shower' shows payment:notes=yes with a fixed text, namely 'Bank notes are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
+ {
+ "key": "payment:debit_cards",
+ "description": "Layer 'Shower' shows payment:debit_cards=yes with a fixed text, namely 'Debit cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
+ },
+ {
+ "key": "payment:credit_cards",
+ "description": "Layer 'Shower' shows payment:credit_cards=yes with a fixed text, namely 'Credit cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Public toilets') (This is only shown if fee=yes|hot_water=fee)",
+ "value": "yes"
}
]
}
\ No newline at end of file
diff --git a/Docs/Themes/personal.md b/Docs/Themes/personal.md
index 52347532e5..9235359c82 100644
--- a/Docs/Themes/personal.md
+++ b/Docs/Themes/personal.md
@@ -90,6 +90,7 @@ This theme contains the following layers:
- [school](../Layers/school.md)
- [shelter](../Layers/shelter.md)
- [shops](../Layers/shops.md)
+ - [shower](../Layers/shower.md)
- [speed_camera](../Layers/speed_camera.md)
- [speed_display](../Layers/speed_display.md)
- [sport_pitch](../Layers/sport_pitch.md)
diff --git a/Docs/Themes/toilets.md b/Docs/Themes/toilets.md
index dd11daf16c..0e0cf69bb7 100644
--- a/Docs/Themes/toilets.md
+++ b/Docs/Themes/toilets.md
@@ -13,6 +13,7 @@ This theme contains the following layers:
- [toilet](../Layers/toilet.md)
- [toilet_at_amenity](../Layers/toilet_at_amenity.md)
+ - [shower](../Layers/shower.md)
- [selected_element](../Layers/selected_element.md)
- [gps_location](../Layers/gps_location.md)
- [gps_location_history](../Layers/gps_location_history.md)
diff --git a/Logic/Osm/OsmObject.ts b/Logic/Osm/OsmObject.ts
index 1531b7adb3..44b8091906 100644
--- a/Logic/Osm/OsmObject.ts
+++ b/Logic/Osm/OsmObject.ts
@@ -1,8 +1,8 @@
-import { Utils } from "../../Utils";
-import polygon_features from "../../assets/polygon-features.json";
-import { OsmFeature, OsmId, OsmTags, WayId } from "../../Models/OsmFeature";
-import OsmToGeoJson from "osmtogeojson";
-import { Feature, LineString, Polygon } from "geojson";
+import { Utils } from "../../Utils"
+import polygon_features from "../../assets/polygon-features.json"
+import { OsmFeature, OsmId, OsmTags, WayId } from "../../Models/OsmFeature"
+import OsmToGeoJson from "osmtogeojson"
+import { Feature, LineString, Polygon } from "geojson"
export abstract class OsmObject {
private static defaultBackend = "https://www.openstreetmap.org/"
diff --git a/UI/InputElement/Helpers/DirectionInput.svelte b/UI/InputElement/Helpers/DirectionInput.svelte
index 6158bf7e1e..c598bb911a 100644
--- a/UI/InputElement/Helpers/DirectionInput.svelte
+++ b/UI/InputElement/Helpers/DirectionInput.svelte
@@ -56,7 +56,10 @@
on:mouseup={() => {
isDown = false
}}
- on:touchmove={(e) =>{ onPosChange(e.touches[0].clientX, e.touches[0].clientY); e.preventDefault() }}
+ on:touchmove={(e) => {
+ onPosChange(e.touches[0].clientX, e.touches[0].clientY)
+ e.preventDefault()
+ }}
on:touchstart={(e) => onPosChange(e.touches[0].clientX, e.touches[0].clientY)}
>
diff --git a/UI/InputElement/Helpers/LocationInput.svelte b/UI/InputElement/Helpers/LocationInput.svelte
index f94e819ebb..eb0a2089cc 100644
--- a/UI/InputElement/Helpers/LocationInput.svelte
+++ b/UI/InputElement/Helpers/LocationInput.svelte
@@ -83,7 +83,7 @@
-
+
export let attribution = false
- export let center: Readable<{ lng: number ,lat : number }> = writable({lng: 0, lat: 0})
+ export let center: Readable<{ lng: number; lat: number }> = writable({ lng: 0, lat: 0 })
onMount(() => {
$map.on("load", function () {
diff --git a/UI/NotFound.svelte b/UI/NotFound.svelte
index 34c6ab212e..d7e0534cf4 100644
--- a/UI/NotFound.svelte
+++ b/UI/NotFound.svelte
@@ -1,14 +1,20 @@
+
-
|
-
{window.location = "index.html"}}>
+
+ {
+ window.location = "index.html"
+ }}
+ >
-
+
diff --git a/UI/ThemeViewGUI.svelte b/UI/ThemeViewGUI.svelte
index 76d8972b0b..a74e57c7f7 100644
--- a/UI/ThemeViewGUI.svelte
+++ b/UI/ThemeViewGUI.svelte
@@ -49,8 +49,9 @@
import MapillaryLink from "./BigComponents/MapillaryLink.svelte"
import OpenIdEditor from "./BigComponents/OpenIdEditor.svelte"
import OpenBackgroundSelectorButton from "./BigComponents/OpenBackgroundSelectorButton.svelte"
- import Loading from "./Base/Loading.svelte"
import StateIndicator from "./BigComponents/StateIndicator.svelte"
+ import LanguagePicker from "./LanguagePicker"
+ import Locale from "./i18n/Locale"
export let state: ThemeViewState
let layout = state.layout
@@ -392,7 +393,8 @@
-
+ new LanguagePicker(layout.language, Locale.language)} />
+
{name}",
"nl": "Sportwinkel {name}",
- "fr": "Magasin de sport {name}",
+ "fr": "Magasin d'équipements de sport {name}",
"it": "Negozio di articoli sportivi {name}",
"ru": "Магазин спортивного инвентаря {name}",
"de": "Sportartikelgeschäft {name}",
@@ -112,7 +112,7 @@
"then": {
"nl": "Fietsverhuur {name}",
"en": "Bicycle rental shop {name}",
- "fr": "Location de vélo {name}",
+ "fr": "Magasin de location de vélo {name}",
"it": "Noleggio di biciclette {name}",
"ru": "Прокат велосипедов {name}",
"de": "Fahrradverleih {name}",
@@ -865,7 +865,8 @@
"nl": "Verkoopt tweedehands fietsen",
"it": "Vende biciclette usate",
"ca": "Ven bicicletes de segona mà",
- "cs": "Prodává použitá jízdní kola"
+ "cs": "Prodává použitá jízdní kola",
+ "fr": "Vend des vélos usagés"
},
"osmTags": {
"or": [
@@ -885,7 +886,8 @@
"de": "Bietet Selbstreparatur an",
"nl": "Biedt doe-het-zelfreparaties aan",
"it": "Offre riparazioni fai da te",
- "cs": "Nabízí opravy kol \"Udělej si sám\""
+ "cs": "Nabízí opravy kol \"Udělej si sám\"",
+ "fr": "Offre des services DIY"
},
"osmTags": {
"or": [
diff --git a/assets/layers/shower/shower.json b/assets/layers/shower/shower.json
index 4831bd6633..75ee14201c 100644
--- a/assets/layers/shower/shower.json
+++ b/assets/layers/shower/shower.json
@@ -1,7 +1,8 @@
{
"id": "shower",
"name": {
- "en": "Shower"
+ "en": "Shower",
+ "de": "Dusche"
},
"minzoom": 12,
"source": {
@@ -9,16 +10,19 @@
},
"title": {
"render": {
- "en": "Shower"
+ "en": "Shower",
+ "de": "Dusche"
}
},
"presets": [
{
"title": {
- "en": "a shower"
+ "en": "a shower",
+ "de": "eine Dusche"
},
"description": {
- "en": "A (public) shower"
+ "en": "A (public) shower",
+ "de": "Eine (öffentliche) Dusche"
},
"tags": [
"amenity=shower"
@@ -31,25 +35,29 @@
{
"id": "access",
"question": {
- "en": "Who can use this shower?"
+ "en": "Who can use this shower?",
+ "de": "Wer darf diese Dusche nutzen?"
},
"mappings": [
{
"if": "access=yes",
"then": {
- "en": "Anyone can use this shower"
+ "en": "Anyone can use this shower",
+ "de": "Jeder darf diese Dusche nutzen"
}
},
{
"if": "access=customers",
"then": {
- "en": "Only customers can use this shower"
+ "en": "Only customers can use this shower",
+ "de": "Nur Kunden dürfen diese Dusche nutzen"
}
},
{
"if": "access=key",
"then": {
- "en": "Accesible, but one has to ask for a key"
+ "en": "Accesible, but one has to ask for a key",
+ "de": "Zugänglich, aber man muss nach einem Schlüssel fragen"
}
}
]
@@ -57,19 +65,22 @@
{
"id": "fee",
"question": {
- "en": "Is there a fee for using this shower?"
+ "en": "Is there a fee for using this shower?",
+ "de": "Ist die Nutzung der Dusche kostenpflichtig?"
},
"mappings": [
{
"if": "fee=yes",
"then": {
- "en": "There is a fee for using this shower"
+ "en": "There is a fee for using this shower",
+ "de": "Die Nutzung der Dusche ist kostenpflichtig"
}
},
{
"if": "fee=no",
"then": {
- "en": "This shower is free to use"
+ "en": "This shower is free to use",
+ "de": "Die Nutzung der Dusche ist kostenlos"
},
"addExtraTags": [
"charge="
@@ -81,42 +92,49 @@
"id": "charge",
"condition": "fee=yes",
"question": {
- "en": "How much does it cost to use this shower?"
+ "en": "How much does it cost to use this shower?",
+ "de": "Wie viel kostet es, diese Dusche zu nutzen?"
},
"freeform": {
"key": "charge",
"type": "string",
"placeholder": {
- "en": "e.g. 1.50 EUR"
+ "en": "e.g. 1.50 EUR",
+ "de": "z.B. 1,50 EUR"
}
},
"render": {
- "en": "It costs {charge} to use this shower"
+ "en": "It costs {charge} to use this shower",
+ "de": "Es kostet {charge} um diese Dusche zu nutzen"
}
},
"opening_hours",
{
"id": "hot_water",
"question": {
- "en": "Does this shower have hot water available?"
+ "en": "Does this shower have hot water available?",
+ "de": "Verfügt diese Dusche über Warmwasser?"
},
"mappings": [
{
"if": "hot_water=yes",
"then": {
- "en": "Hot water is available here"
+ "en": "Hot water is available here",
+ "de": "Warmwasser ist hier verfügbar"
}
},
{
"if": "hot_water=fee",
"then": {
- "en": "Hot water is available here, but there is a fee"
+ "en": "Hot water is available here, but there is a fee",
+ "de": "Warmes Wasser ist hier verfügbar, aber kostenpflichtig"
}
},
{
"if": "hot_water=no",
"then": {
- "en": "There is no hot water available here"
+ "en": "There is no hot water available here",
+ "de": "Hier gibt es kein warmes Wasser"
}
}
]
@@ -140,7 +158,8 @@
"options": [
{
"question": {
- "en": "Hot water available"
+ "en": "Hot water available",
+ "de": "Warmwasser verfügbar"
},
"osmTags": {
"or": [
@@ -182,6 +201,7 @@
}
],
"description": {
- "en": "A layer showing (public) showers"
+ "en": "A layer showing (public) showers",
+ "de": "Eine Ebene mit (öffentlichen) Duschen"
}
}
\ No newline at end of file
diff --git a/assets/layers/sport_pitch/sport_pitch.json b/assets/layers/sport_pitch/sport_pitch.json
index 206e715bf9..8ad88f522d 100644
--- a/assets/layers/sport_pitch/sport_pitch.json
+++ b/assets/layers/sport_pitch/sport_pitch.json
@@ -181,31 +181,36 @@
{
"id": "basketball-hoops",
"question": {
- "en": "How much basketball hoops does this pitch have?"
+ "en": "How much basketball hoops does this pitch have?",
+ "de": "Wie viele Basketballkörbe hat das Spielfeld?"
},
"mappings": [
{
"if": "hoops=1",
"then": {
- "en": "This basketball pitch has a single hoop"
+ "en": "This basketball pitch has a single hoop",
+ "de": "Dieses Basketballfeld hat einen einzigen Korb"
}
},
{
"if": "hoops=2",
"then": {
- "en": "This basketball pitch has two hoops"
+ "en": "This basketball pitch has two hoops",
+ "de": "Dieses Basketballfeld hat zwei Körbe"
}
},
{
"if": "hoops=4",
"then": {
- "en": "This basketball pitch has four hoops"
+ "en": "This basketball pitch has four hoops",
+ "de": "Dieses Basketballfeld hat vier Körbe"
}
},
{
"if": "hoops~*",
"then": {
- "en": "This basketball pitch has {hoops} hoops"
+ "en": "This basketball pitch has {hoops} hoops",
+ "de": "Dieses Basketballfeld hat {hoops} Körbe"
},
"hideInAnswer": true
}
diff --git a/assets/layers/toilet/toilet.json b/assets/layers/toilet/toilet.json
index 85f7bc2e66..2432bd198c 100644
--- a/assets/layers/toilet/toilet.json
+++ b/assets/layers/toilet/toilet.json
@@ -244,7 +244,8 @@
"type": "string",
"placeholder": {
"en": "e.g. 0.50 EUR",
- "nl": "bijv. 0.50 EUR"
+ "nl": "bijv. 0.50 EUR",
+ "de": "z.B. 0.50 EUR"
}
},
"id": "toilet-charge"
diff --git a/assets/layers/usersettings/usersettings.json b/assets/layers/usersettings/usersettings.json
index 9882944292..0d604510df 100644
--- a/assets/layers/usersettings/usersettings.json
+++ b/assets/layers/usersettings/usersettings.json
@@ -10,7 +10,8 @@
"render": {
"en": "Settings",
"nl": "Instellingen",
- "de": "Einstellungen"
+ "de": "Einstellungen",
+ "fr": "Paramètres"
}
},
"source": "special",
@@ -150,7 +151,8 @@
"id": "show_tags",
"question": {
"en": "Show the raw OpenStreetMap-tags?",
- "de": "Rohe OpenStreetMap-Tags anzeigen?"
+ "de": "Rohe OpenStreetMap-Tags anzeigen?",
+ "fr": "Afficher les attributs OpenStreetMap bruts ?"
},
"questionHint": {
"en": "Tags are attributes that every element has. This is the technical data that is stored in the database. You don't need this information to edit with MapComplete, but advanced users might want to use this as reference.",
diff --git a/assets/themes/atm/atm.json b/assets/themes/atm/atm.json
index af18997e4e..ee9c746539 100644
--- a/assets/themes/atm/atm.json
+++ b/assets/themes/atm/atm.json
@@ -84,7 +84,8 @@
"text": {
"en": "Import this ATM",
"de": "Diesen Geldautomaten importieren",
- "zh_Hant": "匯入這座 ATM"
+ "zh_Hant": "匯入這座 ATM",
+ "nl": "Voeg deze ATM toe"
},
"icon": "./assets/svg/addSmall.svg"
}
diff --git a/assets/translators.json b/assets/translators.json
index 1bb60be246..da7505c38e 100644
--- a/assets/translators.json
+++ b/assets/translators.json
@@ -1,11 +1,11 @@
{
"contributors": [
{
- "commits": 279,
+ "commits": 283,
"contributor": "kjon"
},
{
- "commits": 274,
+ "commits": 275,
"contributor": "Pieter Vander Vennet"
},
{
@@ -36,6 +36,10 @@
"commits": 32,
"contributor": "Babos Gábor"
},
+ {
+ "commits": 31,
+ "contributor": "Supaplex"
+ },
{
"commits": 30,
"contributor": "Jiří Podhorecký"
@@ -44,14 +48,14 @@
"commits": 29,
"contributor": "Artem"
},
- {
- "commits": 28,
- "contributor": "Supaplex"
- },
{
"commits": 25,
"contributor": "Reza Almanda"
},
+ {
+ "commits": 23,
+ "contributor": "Lucas"
+ },
{
"commits": 22,
"contributor": "Marco"
@@ -60,21 +64,17 @@
"commits": 21,
"contributor": "SC"
},
- {
- "commits": 19,
- "contributor": "Lucas"
- },
{
"commits": 18,
"contributor": "el_libre como el chaval"
},
{
- "commits": 15,
- "contributor": "WaldiS"
+ "commits": 16,
+ "contributor": "mcliquid"
},
{
- "commits": 14,
- "contributor": "mcliquid"
+ "commits": 15,
+ "contributor": "WaldiS"
},
{
"commits": 14,
@@ -100,6 +100,10 @@
"commits": 11,
"contributor": "Túllio Franca"
},
+ {
+ "commits": 10,
+ "contributor": "brunnerpaul"
+ },
{
"commits": 10,
"contributor": "pdassori"
@@ -324,6 +328,10 @@
"commits": 3,
"contributor": "SiegbjornSitumeang"
},
+ {
+ "commits": 2,
+ "contributor": "Emory Shaw"
+ },
{
"commits": 2,
"contributor": "lmagreault"
diff --git a/langs/de.json b/langs/de.json
index 47ed513caa..779cf83d3e 100644
--- a/langs/de.json
+++ b/langs/de.json
@@ -60,7 +60,7 @@
"intro": "Der Benutzer wird von einer Karte mit Objekten begrüßt. Wenn er eines auswählt, werden Informationen über das Objekt angezeigt.",
"title": "Wie sieht die Benutzeroberfläche aus?"
},
- "examples": "Es gibt viele thematische Karten, von denen hier einige dargestellt sind.\n\nEs gibt noch viele weitere thematische Karten online: über das Gesundheitswesen, Indoor-Navigation, Zugänglichkeit für Rollstuhlfahrer, Abfallentsorgungsanlagen, öffentliche Bücherschränke, Fußgängerüberwege mit Regenbogenmalerei,... Entdecken Sie sie alle auf mapcomplete.osm.be",
+ "examples": "Es gibt viele thematische Karten, von denen hier einige dargestellt sind.\n\nEs gibt noch viele weitere thematische Karten online: über das Gesundheitswesen, Indoor-Navigation, Zugänglichkeit für Rollstuhlfahrer, Abfallentsorgungsanlagen, öffentliche Bücherschränke, Fußgängerüberwege mit Regenbogenmalerei,… Entdecken Sie sie alle auf mapcomplete.osm.be",
"fakeui": {
"add_images": "Bilder mit ein paar Klicks hinzufügen",
"attributes": "Zeigt Attribute in einer freundlichen Art und Weise",
@@ -92,6 +92,7 @@
"whatIsOsm": "Was ist OpenStreetMap?"
},
"general": {
+ "404": "Diese Seite existiert nicht",
"about": "OpenStreetMap für ein bestimmtes Thema einfach bearbeiten und hinzufügen",
"aboutMapComplete": {
"intro": "Nutze MapComplete, um Daten zu einem bestimmten Thema auf OpenStreetMap einzutragen. Beantworte Frage, und in wenigen Minuten sind die Beiträge überall verfügbar. In den meisten Themen kannst Du Bilder hinzufügen oder sogar eine Bewertung hinterlassen. Die Themen-Ersteller*innen definieren Objekte, Fragen und Begriffe für das jeweilige Thema."
diff --git a/langs/fr.json b/langs/fr.json
index 73846ee81b..30b02c9ac7 100644
--- a/langs/fr.json
+++ b/langs/fr.json
@@ -1,4 +1,7 @@
{
+ "advanced": {
+ "title": "Fonctionnalités avancées"
+ },
"centerMessage": {
"loadingData": "Chargement des données…",
"ready": "Fini !",
@@ -208,6 +211,8 @@
"pickLanguage": "Choisir la langue : ",
"poweredByOsm": "Propulsé par OpenStreetMap",
"questionBox": {
+ "answeredMultipleSkippedMultiple": "Vous avez répondu à {answered} questions et passé {skipped} questions",
+ "done": "Pas d'autre question ! Merci !",
"reactivate": "Réactiver les questions passées"
},
"questions": {
@@ -451,6 +456,7 @@
"missing": "{count} segments non traduits"
},
"userinfo": {
+ "editDescription": "Modifier ton profil",
"gotoInbox": "Ouvrir sa boite de réception",
"gotoSettings": "Paramètres sur OpenStreetMap.org"
},
diff --git a/langs/layers/de.json b/langs/layers/de.json
index 72609026fb..cbb6b22610 100644
--- a/langs/layers/de.json
+++ b/langs/layers/de.json
@@ -129,7 +129,7 @@
"then": "Wahlwerbung"
},
"4": {
- "then": "Informationen über Theater, Konzerte, ..."
+ "then": "Informationen über Theater, Konzerte, …"
},
"5": {
"then": "Nachricht von gemeinnützigen Organisationen"
@@ -731,7 +731,7 @@
}
},
"question": "Hat diese Bank eine Inschrift?",
- "questionHint": "Z.B. auf einer angebrachten Plakette, in der Rückenlehne, ...",
+ "questionHint": "Z.B. auf einer angebrachten Plakette, in der Rückenlehne, …",
"render": "Diese Bank hat folgende Inschrift:
{inscription}
"
},
"bench-material": {
@@ -7542,6 +7542,76 @@
"render": "Geschäft"
}
},
+ "shower": {
+ "description": "Eine Ebene mit (öffentlichen) Duschen",
+ "filter": {
+ "1": {
+ "options": {
+ "0": {
+ "question": "Warmwasser verfügbar"
+ }
+ }
+ }
+ },
+ "name": "Dusche",
+ "presets": {
+ "0": {
+ "description": "Eine (öffentliche) Dusche",
+ "title": "eine Dusche"
+ }
+ },
+ "tagRenderings": {
+ "access": {
+ "mappings": {
+ "0": {
+ "then": "Jeder darf diese Dusche nutzen"
+ },
+ "1": {
+ "then": "Nur Kunden dürfen diese Dusche nutzen"
+ },
+ "2": {
+ "then": "Zugänglich, aber man muss nach einem Schlüssel fragen"
+ }
+ },
+ "question": "Wer darf diese Dusche nutzen?"
+ },
+ "charge": {
+ "freeform": {
+ "placeholder": "z.B. 1,50 EUR"
+ },
+ "question": "Wie viel kostet es, diese Dusche zu nutzen?",
+ "render": "Es kostet {charge} um diese Dusche zu nutzen"
+ },
+ "fee": {
+ "mappings": {
+ "0": {
+ "then": "Die Nutzung der Dusche ist kostenpflichtig"
+ },
+ "1": {
+ "then": "Die Nutzung der Dusche ist kostenlos"
+ }
+ },
+ "question": "Ist die Nutzung der Dusche kostenpflichtig?"
+ },
+ "hot_water": {
+ "mappings": {
+ "0": {
+ "then": "Warmwasser ist hier verfügbar"
+ },
+ "1": {
+ "then": "Warmes Wasser ist hier verfügbar, aber kostenpflichtig"
+ },
+ "2": {
+ "then": "Hier gibt es kein warmes Wasser"
+ }
+ },
+ "question": "Verfügt diese Dusche über Warmwasser?"
+ }
+ },
+ "title": {
+ "render": "Dusche"
+ }
+ },
"slow_roads": {
"description": "Alle autofreien Straßen",
"tagRenderings": {
@@ -7696,6 +7766,23 @@
}
},
"tagRenderings": {
+ "basketball-hoops": {
+ "mappings": {
+ "0": {
+ "then": "Dieses Basketballfeld hat einen einzigen Korb"
+ },
+ "1": {
+ "then": "Dieses Basketballfeld hat zwei Körbe"
+ },
+ "2": {
+ "then": "Dieses Basketballfeld hat vier Körbe"
+ },
+ "3": {
+ "then": "Dieses Basketballfeld hat {hoops} Körbe"
+ }
+ },
+ "question": "Wie viele Basketballkörbe hat das Spielfeld?"
+ },
"sport-pitch-access": {
"mappings": {
"0": {
@@ -8347,6 +8434,9 @@
"render": "Die Wickeltabelle befindet sich in {changing_table:location}"
},
"toilet-charge": {
+ "freeform": {
+ "placeholder": "z.B. 0.50 EUR"
+ },
"question": "Wie viel muss man für die Nutzung bezahlen?",
"render": "Die Gebühr beträgt {charge}"
},
diff --git a/langs/layers/fr.json b/langs/layers/fr.json
index 61f7825380..8599d11ea2 100644
--- a/langs/layers/fr.json
+++ b/langs/layers/fr.json
@@ -1293,6 +1293,22 @@
},
"bike_shop": {
"description": "Un magasin vendant spécifiquement des vélos ou des objets en lien",
+ "filter": {
+ "1": {
+ "options": {
+ "0": {
+ "question": "Vend des vélos usagés"
+ }
+ }
+ },
+ "2": {
+ "options": {
+ "0": {
+ "question": "Offre des services DIY"
+ }
+ }
+ }
+ },
"name": "Magasin ou réparateur de vélo",
"presets": {
"0": {
@@ -1414,13 +1430,13 @@
"title": {
"mappings": {
"0": {
- "then": "Magasin de sport {name}"
+ "then": "Magasin d'équipements de sport {name}"
},
"1": {
"then": "Magasin"
},
"2": {
- "then": "Location de vélo {name}"
+ "then": "Magasin de location de vélo {name}"
},
"3": {
"then": "Réparateur de vélo {name}"
@@ -5604,6 +5620,9 @@
}
}
},
+ "show_tags": {
+ "question": "Afficher les attributs OpenStreetMap bruts ?"
+ },
"translation-completeness": {
"render": "Les traductions pour {_theme} en {_language} sont à {_translation_percentage} % : {_translation_translated_count} chaînes traduites sur {_translation_total}"
},
@@ -5635,6 +5654,9 @@
}
}
}
+ },
+ "title": {
+ "render": "Paramètres"
}
},
"veterinary": {
diff --git a/langs/themes/nl.json b/langs/themes/nl.json
index 24a118a32c..4004e04985 100644
--- a/langs/themes/nl.json
+++ b/langs/themes/nl.json
@@ -14,6 +14,21 @@
},
"atm": {
"description": "Deze kaart toont geldautomaten waar je geld kunt afhalen of geld op de bank kan zetten",
+ "layers": {
+ "3": {
+ "override": {
+ "=tagRenderings": {
+ "0": {
+ "render": {
+ "special": {
+ "text": "Voeg deze ATM toe"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"title": "Geldautomaten"
},
"bag": {
diff --git a/package-lock.json b/package-lock.json
index 0699a585cd..ab465fb351 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "mapcomplete",
- "version": "0.30.6",
+ "version": "0.30.9",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "mapcomplete",
- "version": "0.30.6",
+ "version": "0.30.9",
"license": "GPL-3.0-or-later",
"dependencies": {
"@onsvisual/svelte-maps": "^1.1.6",
@@ -4475,9 +4475,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001492",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001492.tgz",
- "integrity": "sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw==",
+ "version": "1.0.30001516",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001516.tgz",
+ "integrity": "sha512-Wmec9pCBY8CWbmI4HsjBeQLqDTqV91nFVR83DnZpYyRnPI1wePDsTg0bGLPC5VU/3OIZV1fmxEea1b+tFKe86g==",
"dev": true,
"funding": [
{
@@ -15512,9 +15512,9 @@
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
},
"caniuse-lite": {
- "version": "1.0.30001492",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001492.tgz",
- "integrity": "sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw==",
+ "version": "1.0.30001516",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001516.tgz",
+ "integrity": "sha512-Wmec9pCBY8CWbmI4HsjBeQLqDTqV91nFVR83DnZpYyRnPI1wePDsTg0bGLPC5VU/3OIZV1fmxEea1b+tFKe86g==",
"dev": true
},
"canvg": {