diff --git a/.github/workflows/deploy_hosted.yml b/.forgejo/workflows/deploy_hosted.yml similarity index 57% rename from .github/workflows/deploy_hosted.yml rename to .forgejo/workflows/deploy_hosted.yml index f71225bf07..2c6f058b0d 100644 --- a/.github/workflows/deploy_hosted.yml +++ b/.forgejo/workflows/deploy_hosted.yml @@ -1,11 +1,13 @@ name: Deploy develop on dev.mapcomplete.org on: - - push - - pull_request + push: + branches-ignore: + - build/* + pull_request: jobs: - build: - runs-on: ubuntu-latest + deploy_on_hosted: + runs-on: [ubuntu-latest, hetzner-access] steps: - uses: actions/checkout@v3 @@ -15,7 +17,7 @@ jobs: node-version: "20" cache: "npm" cache-dependency-path: package-lock.json - + - name: install deps run: npm ci shell: bash @@ -32,34 +34,34 @@ jobs: run: npm run generate:translations shell: bash - - - name: Prepare deploy - run: npm run prepare-deploy + - name: Prepare build + run: npm run generate:service-worker && ./scripts/prepare-build.sh shell: bash - - name: run tests + - name: Run tests run: | - pwd - ls # This is the same as `npm run test`, but `vitest` doesn't want to run within npm :shrug: export NODE_OPTIONS="--max-old-space-size=8192" npm run clean:tests npm run generate:doctests 2>&1 | grep -v "No doctests found in" - if which vitest - then - vitest --run test - else - npm run test - fi - + vitest --run test npm run clean:tests shell: bash - - name: Upload artefact + + - name: Build files + run: npm run build + + - name: Zipping dist file run: | - ssh hetzner "mkdir -p /root/staging/${{ github.ref_name }}" - scp -r dist/* hetzner:/root/staging/${{ github.ref_name }}/ - ssh hetzner "rm -rf /root/public/${{ github.ref_name }} && mv /root/staging/${{ github.ref_name }}/ /root/public/" - + mv dist ${{ github.ref_name }} + zip ${{ github.ref_name }}.zip -r ${{ github.ref_name }}/* + + - name: uploading file + run: scp ${{ github.ref_name }}.zip hetzner:/root/staging/ + + - name: unzipping remote file + run: ssh hetzner "cd /root/staging && unzip ${{ github.ref_name }}.zip && rm -rf /root/public/${{ github.ref_name }} && mv /root/staging/${{ github.ref_name }}/ /root/public/ && rm ${{ github.ref_name }}.zip" + diff --git a/.forgejo/workflows/deploy_single_theme.yml b/.forgejo/workflows/deploy_single_theme.yml new file mode 100644 index 0000000000..2d7d662fbe --- /dev/null +++ b/.forgejo/workflows/deploy_single_theme.yml @@ -0,0 +1,57 @@ +name: Deploy develop on theme.mapcomplete.org +on: + push: + branches: + - build/* + +jobs: + deploy_on_hetzner_single: + runs-on: [ ubuntu-latest, hetzner-access ] + steps: + - uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: "20" + 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: create dependencies + run: npm run generate:licenses; npm run generate:images; npm run generate:charging-stations; npm run generate:service-worker; npm run download:editor-layer-index + shell: bash + + - name: sync translations + run: npm run generate:translations + shell: bash + + - name: Prepare build + run: | + BRANCH=${{ github.ref_name }} + THEME=${BRANCH:6} + npm run generate:service-worker && ./scripts/single_build.sh $THEME + shell: bash + + - name: Zipping dist file + run: | + BRANCH=${{ github.ref_name }} + THEME=${BRANCH:6} + mv "dist_$THEME" ${{ github.ref_name }} + zip ${{ github.ref_name }}.zip -r ${{ github.ref_name }}/* + + - name: uploading file + run: scp ${{ github.ref_name }}.zip hetzner:/root/staging/ + + - name: unzipping remote file + run: ssh hetzner "cd /root/staging && unzip ${{ github.ref_name }}.zip && rm -rf /root/single_theme_builds/${{ github.ref_name }} && mv /root/staging/${{ github.ref_name }}/ /root/single_theme_builds/ && rm ${{ github.ref_name }}.zip" + + + diff --git a/.github/actions/setup-and-validate/action.yml b/.github/actions/setup-and-validate/action.yml deleted file mode 100644 index 651ff087bc..0000000000 --- a/.github/actions/setup-and-validate/action.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: "Theme Validation" -description: "Validate the themes" -runs: - using: "composite" - steps: - - name: Set up Node.js - uses: actions/setup-node@v3 - with: - node-version: "20" - cache: "npm" - cache-dependency-path: package-lock.json - - - name: print actor - shell: bash - run: echo ${{ github.actor }} - - - name: install deps - run: npm ci - shell: bash - - - name: REUSE compliance check - uses: fsfe/reuse-action@952281636420dd0b691786c93e9d3af06032f138 - - - name: create generated dir - run: mkdir ./assets/generated - shell: bash - - - name: create dependencies - run: npm run generate:licenses; npm run generate:images; npm run generate:charging-stations; npm run generate:service-worker - 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 - - - name: Prepare deploy - run: npm run prepare-deploy - shell: bash diff --git a/.github/workflows/deploy_dev.yml b/.github/workflows/deploy_dev.yml deleted file mode 100644 index 21ee96e203..0000000000 --- a/.github/workflows/deploy_dev.yml +++ /dev/null @@ -1,77 +0,0 @@ -name: Deploy develop on dev.mapcomplete.org -on: - push: - branches: - - develop - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Set up Node.js - uses: actions/setup-node@v3 - with: - node-version: "20" - 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: create dependencies - run: npm run generate:licenses; npm run generate:images; npm run generate:charging-stations; npm run generate:service-worker; npm run download:editor-layer-index - shell: bash - - - name: sync translations - run: npm run generate:translations - shell: bash - - - name: Prepare deploy - run: npm run prepare-deploy - shell: bash - - - name: run tests - run: npm run test - shell: bash - - - name: Clone deployment repo - env: - DEPLOY_KEY_PIETERVDVN: ${{ secrets.DEPLOY_KEY_PIETERVDVN }} - run: | - echo "Cloning destination repo" - git config --global user.email "pietervdvn@posteo.net" - git config --global user.name "pietervdvn" - git clone --depth 1 --single-branch --branch main "https://x-access-token:$DEPLOY_KEY_PIETERVDVN@github.com/MapComplete/mapcomplete-dev.git" - echo "Destination repo is cloned" - - - name: Sync repo - env: - DEPLOY_KEY_PIETERVDVN: ${{ secrets.DEPLOY_KEY_PIETERVDVN }} - run: | - cd mapcomplete-dev - git pull - - - name: "Copying files" - run: | - echo "Deploying" - rm -rf mapcomplete-dev/* - cp -r dist/* mapcomplete-dev/ - cd mapcomplete-dev/ - echo "dev.mapcomplete.org" > CNAME - touch .nojekyll - git add * - if git status | grep -q "Changes to be committed" - then - git commit -am "Deploying a new version" - git push - else - echo "No changes to commit" - fi - diff --git a/.github/workflows/deploy_pietervdvn.yml b/.github/workflows/deploy_pietervdvn.yml deleted file mode 100644 index 284f948901..0000000000 --- a/.github/workflows/deploy_pietervdvn.yml +++ /dev/null @@ -1,98 +0,0 @@ -name: Deployment on pietervdvn -on: - push: - branches: - - feature/* - - theme/* - - refactoring/* -jobs: - build: - runs-on: ubuntu-latest - if: ${{ github.actor != 'weblate' }} - steps: - - uses: actions/checkout@v2 - - - name: print actor - shell: bash - run: echo ${{ github.actor }} - - - name: Set up Node.js - uses: actions/setup-node@v3 - with: - node-version: "20" - 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: create dependencies - run: npm run generate:licenses; npm run generate:images; npm run generate:charging-stations; npm run generate:service-worker; npm run download:editor-layer-index - 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 - - - name: Prepare deploy - run: npm run prepare-deploy - shell: bash - - - name: Clone deployment repo - env: - DEPLOY_KEY_PIETERVDVN: ${{ secrets.DEPLOY_KEY_PIETERVDVN }} - run: | - echo "Cloning destination repo" - git config --global user.email "pietervdvn@posteo.net" - git config --global user.name "pietervdvn" - git clone --depth 1 --single-branch --branch master "https://x-access-token:$DEPLOY_KEY_PIETERVDVN@github.com/pietervdvn/pietervdvn.github.io.git" - echo "Destination repo is cloned" - - - name: Sync repo - env: - DEPLOY_KEY_PIETERVDVN: ${{ secrets.DEPLOY_KEY_PIETERVDVN }} - run: | - cd pietervdvn.github.io - git pull - - - name: get branch name - run: echo TARGET_BRANCH=${GITHUB_REF:11} >> $GITHUB_ENV - - - name: "Copying files" - run: | - echo "Deploying" - rm -rf pietervdvn.github.io/mc/${{ env.TARGET_BRANCH }}/* - mkdir -p pietervdvn.github.io/mc/${{ env.TARGET_BRANCH }}/ - cp -r dist/* pietervdvn.github.io/mc/${{ env.TARGET_BRANCH }}/ - cd pietervdvn.github.io/ - git add * - if git status | grep -q "Changes to be committed" - then - git commit -am "Deploying a new version of mapcomplete" - git push - else - echo "No changes to commit" - fi - env: - TARGET_BRANCH: ${{ env.TARGET_BRANCH }} - - - uses: mshick/add-pr-comment@a96c578acba98b60f16c6866d5f20478dc4ef68b - name: Comment the PR with the review URL - if: ${{ success() && github.ref != 'refs/heads/develop' && github.ref != 'refs/heads/master' }} - with: - message: | - [🚀 Preview Branch](https://pietervdvn.github.io/mc/${{ env.TARGET_BRANCH }}) - repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.versionrc.json b/.versionrc.json index 00287e8f9a..56c4e8220a 100644 --- a/.versionrc.json +++ b/.versionrc.json @@ -20,6 +20,6 @@ {"type": "perf", "hidden": true}, {"type": "test", "hidden": true} ], - "commitUrlFormat": "https://github.com/pietervdvn/mapcomplete/commits{{hash}}", + "commitUrlFormat": "https://github.com/pietervdvn/mapcomplete/commits/{{hash}}", "compareUrlFormat": "https://github.com/pietervdvn/mapcomplete/compare/{{previousTag}}...{{currentTag}}" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 84d77cf9a8..a82db39037 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,289 +2,345 @@ 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.47.13](https://github.com/pietervdvn/mapcomplete/compare/v0.47.12...v0.47.13) (2024-12-17) + + +### Bug Fixes + +* attributed image doesn't open fullscreen if no ID given ([b272c1c](https://github.com/pietervdvn/mapcomplete/commits/b272c1cda7352a4a78e4f61dbd39fe2f80ae204d)) +* don't report an unneeded error ([79314e1](https://github.com/pietervdvn/mapcomplete/commits/79314e1747ee74544975948ba35fb499c203a061)) +* fix [#2309](https://github.com/pietervdvn/MapComplete/issues/2309) ([83a9184](https://github.com/pietervdvn/mapcomplete/commits/83a918477f24fd86bc2783e266ac59a4c687020f)) +* fix [#2309](https://github.com/pietervdvn/MapComplete/issues/2309) ([fe2a6ca](https://github.com/pietervdvn/mapcomplete/commits/fe2a6ca065b8ace2f466a6cac549f6d84ee35044)) +* fix changelog links ([0471fd7](https://github.com/pietervdvn/mapcomplete/commits/0471fd7779329da051400a62d16162bd21dc0324)) +* fix possible failing upload (error report postmortem) ([22c348a](https://github.com/pietervdvn/mapcomplete/commits/22c348af27677cd97f124dc45f63276d91b40152)) +* linked data vis for velopark does no longer rely on country codes ([c26b9ae](https://github.com/pietervdvn/mapcomplete/commits/c26b9ae7f7fa3de69d499451db14be61e4698721)) +* **linkeddata:** velopark deals with sections, fix image loading ([ef1d2c9](https://github.com/pietervdvn/mapcomplete/commits/ef1d2c9f56fc07f87255c557b05daf5e0451fdc5)) +* remove 'id' attribute ([926ea0b](https://github.com/pietervdvn/mapcomplete/commits/926ea0b6e46f9966d1b1b9a4157c6ca6708b82fa)) +* server config (CORS) ([2c877dd](https://github.com/pietervdvn/mapcomplete/commits/2c877dd52532b24066907a5ae9676e26371e48f0)) +* typing ([565e92a](https://github.com/pietervdvn/mapcomplete/commits/565e92a37dde751e21d7f3e2abc69fa57b27d30f)) + +### [0.47.12](https://github.com/pietervdvn/mapcomplete/compare/v0.47.11...v0.47.12) (2024-12-11) + + +### Bug Fixes + +* add ignored file ([a6d07c5](https://github.com/pietervdvn/mapcomplete/commits/a6d07c50a1d11bbe8a2d78201ad85bb5f2e606e5)) +* attempt to add more EXIF-fields, see [#2296](https://github.com/pietervdvn/MapComplete/issues/2296) ([a87e9e2](https://github.com/pietervdvn/mapcomplete/commits/a87e9e2e98f0a703e3b50570183edfa5ad858719)) +* attempt to get runners working ([a7e729a](https://github.com/pietervdvn/mapcomplete/commits/a7e729a2dee0dd4e961067f62e52662b085ad161)) +* attempt to get runners working ([4a6efe8](https://github.com/pietervdvn/mapcomplete/commits/4a6efe8bfb35215aa7d2763bd8b906052a0341a3)) +* attempt to get runners working ([221c136](https://github.com/pietervdvn/mapcomplete/commits/221c13679a90b688867be4a83f43614cff3a8b93)) +* attempt to get runners working ([142cf9a](https://github.com/pietervdvn/mapcomplete/commits/142cf9a1174fd7006ccfdd141d2b051de0b28348)) +* don't show tags in filter view if not logged in ([a07c792](https://github.com/pietervdvn/mapcomplete/commits/a07c79289b7f6c5d3f14101d15b985c931a42b44)) +* don't show walls-and-buildings if the layer is disabled ([130ede8](https://github.com/pietervdvn/mapcomplete/commits/130ede896cdeea39bf9ca17d4a451d3d861905af)) +* Enable recycling:waste option [#2280](https://github.com/pietervdvn/MapComplete/issues/2280) ([673322d](https://github.com/pietervdvn/mapcomplete/commits/673322d15bab4789b6d62facbc9d96dce7997480)) +* fix [#2304](https://github.com/pietervdvn/MapComplete/issues/2304) ([0a001d3](https://github.com/pietervdvn/mapcomplete/commits/0a001d3c7d337a2838c3f2b7493d4a3b218fe9a5)) +* fix [#2306](https://github.com/pietervdvn/MapComplete/issues/2306) by using a cutoff of 150m ([9ab8d99](https://github.com/pietervdvn/mapcomplete/commits/9ab8d99e56d8ae9653921c21e2f3559d69cc675f)) +* fix [#2306](https://github.com/pietervdvn/MapComplete/issues/2306) by using a cutoff of 150m ([73f0fff](https://github.com/pietervdvn/mapcomplete/commits/73f0ffff5d21703bb1e24ba920d65994e3993100)) +* image upload will now fail less for newly created points ([b91bd78](https://github.com/pietervdvn/mapcomplete/commits/b91bd78762f6eb3bd6555cc0fb3bfb244fe3340b)) +* improve typing and probably fix broken settings (https://source.mapcomplete.org/MapComplete/MapComplete/issues/2281) ([4b121e4](https://github.com/pietervdvn/mapcomplete/commits/4b121e474ce6998f03e9743e4b52e2de1288b71a)) +* linking images is not possible for notes or non-openstreetmap elements ([7f9f7e7](https://github.com/pietervdvn/mapcomplete/commits/7f9f7e753443e779b16a544bc6312214ae26dab4)) +* Missing import ([c4c93bc](https://github.com/pietervdvn/mapcomplete/commits/c4c93bc49bd10b7043e81227ea5d1113e7c75ede)) + + +### Theme improvements + +* new [insect hotels theme](https://mapcomplete.org/insects.html) ([07a53e9](https://github.com/pietervdvn/mapcomplete/commits/07a53e9373f7341fc03f32c2815538f72afa6fdb)) +* **blind_osm:** Differentiate escalators more ([#2247](https://github.com/pietervdvn/MapComplete/issues/2247)) ([d19b2de](https://github.com/pietervdvn/mapcomplete/commits/d19b2de1cdb32388229d6ae2eb432cd59b58abad)) +* **climbing:** Add auto belay tags ([9b8235e](https://github.com/pietervdvn/mapcomplete/commits/9b8235e51f3b115bdd3788dc9dfe3e3e99a4a1e4)) +* **climbing:** Add auto belay tags ([026825a](https://github.com/pietervdvn/mapcomplete/commits/026825aa3d37650b8b0121e2a5d39c6d55d42d63)) +* **climbing:** Change conditions for gear rental questions ([a424398](https://github.com/pietervdvn/mapcomplete/commits/a4243986eab087128ab09032319b3f8f699a1f0a)) +* **climbing:** Clarify questions about gear rental ([12f0ec9](https://github.com/pietervdvn/mapcomplete/commits/12f0ec98fbcf540626328e97b5c2cf4e87cbd4be)) +* **climbing:** Recognize leisure=sports_hall ([2a135f9](https://github.com/pietervdvn/mapcomplete/commits/2a135f9eef5164c2b2af9ae46bb9608b764d1654)) +* **cyclofix:** don't count shops in overview ([b615c34](https://github.com/pietervdvn/mapcomplete/commits/b615c3487947eafe2a0ce555fe380101323f66ab)) +* **cyclofix:** show shops which sell second-hand bicycles in bicycle layer, see https://source.mapcomplete.org/MapComplete/MapComplete/issues/2279 ([67aba6d](https://github.com/pietervdvn/mapcomplete/commits/67aba6d034a6673d8c7efedef0d26d88c723d12b)) +* **etymology:** add parks, fix [#2292](https://github.com/pietervdvn/MapComplete/issues/2292) ([ceadd9f](https://github.com/pietervdvn/mapcomplete/commits/ceadd9fdefa9843cf766935368aa01b3c96dbe76)) +* **food:** Add question about drive-through ([9e5ace0](https://github.com/pietervdvn/mapcomplete/commits/9e5ace07d46959dbc3972a5f0948dc989c2b73f6)) +* **food:** Add question about seating ([#1976](https://github.com/pietervdvn/MapComplete/issues/1976)) ([a50d1eb](https://github.com/pietervdvn/mapcomplete/commits/a50d1ebe7de1fcbdf6d90136adf4b66f109f824d)) +* **note:** don't show notes which have _no_ comments; these are probably redacted. Fix [#2299](https://github.com/pietervdvn/MapComplete/issues/2299) ([ec7b166](https://github.com/pietervdvn/mapcomplete/commits/ec7b16638da2475e4cbca097ce08f566e46ba054)) + ### [0.47.11](https://github.com/pietervdvn/mapcomplete/compare/v0.47.10...v0.47.11) (2024-11-28) ### Features -* allow to disable questions (and to enable them again), fix [#256](https://github.com/pietervdvn/MapComplete/issues/256) ([93ebdd8](https://github.com/pietervdvn/mapcomplete/commits93ebdd8e1688d2424f0e67d03271d46b4c6640b9)) +* allow to disable questions (and to enable them again), fix [#256](https://github.com/pietervdvn/MapComplete/issues/256) ([93ebdd8](https://github.com/pietervdvn/mapcomplete/commits/93ebdd8e1688d2424f0e67d03271d46b4c6640b9)) ### Bug Fixes -* add prevent-defaults ([afce4cb](https://github.com/pietervdvn/mapcomplete/commitsafce4cb5ba6c77c3e076b5390640eb5ed505cf64)) -* allow to move items more then 50 meter if relocated ([f63f886](https://github.com/pietervdvn/mapcomplete/commitsf63f886ea57d5ca2fca352b455a4d833537422a5)) -* apply refactoring ([140e966](https://github.com/pietervdvn/mapcomplete/commits140e966de12689b374acc1ec7feaf69065bb1250)) -* attempt to fix image upload on stripped coordinates, see [#2202](https://github.com/pietervdvn/MapComplete/issues/2202) ([a94a7ec](https://github.com/pietervdvn/mapcomplete/commitsa94a7ecd7162b5f49f689d77c5e40219ae7fda05)) -* don't show all items if favourites is shown ([3292307](https://github.com/pietervdvn/mapcomplete/commits32923072081961b5ef9b899267be99b354265d59)) -* fix [#2254](https://github.com/pietervdvn/MapComplete/issues/2254); an image carousel with a different key would not show up due to caching ([c0b11a8](https://github.com/pietervdvn/mapcomplete/commitsc0b11a81e91db1c4eb130db1a722e20211f4ba5e)) -* fix [#2272](https://github.com/pietervdvn/MapComplete/issues/2272) : correct link ([44355f5](https://github.com/pietervdvn/mapcomplete/commits44355f566762a234942b678a21b8686341b2087b)) -* fix [#2278](https://github.com/pietervdvn/MapComplete/issues/2278) ([540e2c2](https://github.com/pietervdvn/mapcomplete/commits540e2c227e5327a501c8ab46fc8c56d0d4bc27bc)) -* fix [#2281](https://github.com/pietervdvn/MapComplete/issues/2281) ([8ef7af6](https://github.com/pietervdvn/mapcomplete/commits8ef7af613f20f265386ccb3d301c43ff49108cb1)) +* add prevent-defaults ([afce4cb](https://github.com/pietervdvn/mapcomplete/commits/afce4cb5ba6c77c3e076b5390640eb5ed505cf64)) +* allow to move items more then 50 meter if relocated ([f63f886](https://github.com/pietervdvn/mapcomplete/commits/f63f886ea57d5ca2fca352b455a4d833537422a5)) +* apply refactoring ([140e966](https://github.com/pietervdvn/mapcomplete/commits/140e966de12689b374acc1ec7feaf69065bb1250)) +* attempt to fix image upload on stripped coordinates, see [#2202](https://github.com/pietervdvn/MapComplete/issues/2202) ([a94a7ec](https://github.com/pietervdvn/mapcomplete/commits/a94a7ecd7162b5f49f689d77c5e40219ae7fda05)) +* don't show all items if favourites is shown ([3292307](https://github.com/pietervdvn/mapcomplete/commits/32923072081961b5ef9b899267be99b354265d59)) +* fix [#2254](https://github.com/pietervdvn/MapComplete/issues/2254); an image carousel with a different key would not show up due to caching ([c0b11a8](https://github.com/pietervdvn/mapcomplete/commits/c0b11a81e91db1c4eb130db1a722e20211f4ba5e)) +* fix [#2272](https://github.com/pietervdvn/MapComplete/issues/2272) : correct link ([44355f5](https://github.com/pietervdvn/mapcomplete/commits/44355f566762a234942b678a21b8686341b2087b)) +* fix [#2278](https://github.com/pietervdvn/MapComplete/issues/2278) ([540e2c2](https://github.com/pietervdvn/mapcomplete/commits/540e2c227e5327a501c8ab46fc8c56d0d4bc27bc)) +* fix [#2281](https://github.com/pietervdvn/MapComplete/issues/2281) ([8ef7af6](https://github.com/pietervdvn/mapcomplete/commits/8ef7af613f20f265386ccb3d301c43ff49108cb1)) ### Theme improvements -* **maps:** add tactile maps and tactile models to map theme, fix [#2277](https://github.com/pietervdvn/MapComplete/issues/2277) ([12926e1](https://github.com/pietervdvn/mapcomplete/commits12926e1e9cc3fef81811b6df011f83e2013d3ad5)) -* **stairs:** fix [#2248](https://github.com/pietervdvn/MapComplete/issues/2248) ([a0c63b2](https://github.com/pietervdvn/mapcomplete/commitsa0c63b273423bef6a3aba1106880015b135e4542)) -* **surveillance:** fix tagging ([208d7ec](https://github.com/pietervdvn/mapcomplete/commits208d7ecf4e4386ddbd9d58a71a0b6e4fcb26beaa)) +* **maps:** add tactile maps and tactile models to map theme, fix [#2277](https://github.com/pietervdvn/MapComplete/issues/2277) ([12926e1](https://github.com/pietervdvn/mapcomplete/commits/12926e1e9cc3fef81811b6df011f83e2013d3ad5)) +* **stairs:** fix [#2248](https://github.com/pietervdvn/MapComplete/issues/2248) ([a0c63b2](https://github.com/pietervdvn/mapcomplete/commits/a0c63b273423bef6a3aba1106880015b135e4542)) +* **surveillance:** fix tagging ([208d7ec](https://github.com/pietervdvn/mapcomplete/commits/208d7ecf4e4386ddbd9d58a71a0b6e4fcb26beaa)) ### [0.47.10](https://github.com/pietervdvn/mapcomplete/compare/v0.47.9...v0.47.10) (2024-11-14) ### Bug Fixes -* actually download all OSM-data when downloading as geojson or CSV ([05298c2](https://github.com/pietervdvn/mapcomplete/commits05298c2498bb908860f49f057b7466f4a8feb5ba)) -* don't show `maxstay=30 days` in velopark, this is actually 'unknown' ([d2237cf](https://github.com/pietervdvn/mapcomplete/commitsd2237cf26c1e3af034f0c3b72bd5ffa878ef1c64)) -* fix image upload ([f1106ad](https://github.com/pietervdvn/mapcomplete/commitsf1106ad4a816c9fb84a92974cb7d88e9aae7633b)) +* actually download all OSM-data when downloading as geojson or CSV ([05298c2](https://github.com/pietervdvn/mapcomplete/commits/05298c2498bb908860f49f057b7466f4a8feb5ba)) +* don't show `maxstay=30 days` in velopark, this is actually 'unknown' ([d2237cf](https://github.com/pietervdvn/mapcomplete/commits/d2237cf26c1e3af034f0c3b72bd5ffa878ef1c64)) +* fix image upload ([f1106ad](https://github.com/pietervdvn/mapcomplete/commits/f1106ad4a816c9fb84a92974cb7d88e9aae7633b)) ### Theme improvements -* **surveillance:** add doorbell as option ([88a4bd5](https://github.com/pietervdvn/mapcomplete/commits88a4bd561952b3d9d0cd8e4ebaab123b739909e8)) +* **surveillance:** add doorbell as option ([88a4bd5](https://github.com/pietervdvn/mapcomplete/commits/88a4bd561952b3d9d0cd8e4ebaab123b739909e8)) ### [0.47.9](https://github.com/pietervdvn/mapcomplete/compare/v0.47.8...v0.47.9) (2024-11-07) ### Features -* **filters:** show tags that are filtered on, deal with multi-answer tags to allow having this option with auto-filters ([69a6ec6](https://github.com/pietervdvn/mapcomplete/commits69a6ec6b0291bf1a5ec0bdcece605c7cf9f6ea0a)) +* **filters:** show tags that are filtered on, deal with multi-answer tags to allow having this option with auto-filters ([69a6ec6](https://github.com/pietervdvn/mapcomplete/commits/69a6ec6b0291bf1a5ec0bdcece605c7cf9f6ea0a)) ### Bug Fixes -* better support for complicated regex tags ([b4817f7](https://github.com/pietervdvn/mapcomplete/commitsb4817f7a7faafffe716619a4d6908c013d58efd6)) -* build ([70612f1](https://github.com/pietervdvn/mapcomplete/commits70612f1c12ef69209205a29828694c16a9bbc177)) -* build by fixing licenses ([62936b9](https://github.com/pietervdvn/mapcomplete/commits62936b916b238f7ddf4edb841383d4e2cb1bf3da)) -* deal with dashes in the path ([5127609](https://github.com/pietervdvn/mapcomplete/commits51276091203d48cecb154271e69be0ce784ed01d)) -* fix build by having correct regextag.asJson() ([0dd96f4](https://github.com/pietervdvn/mapcomplete/commits0dd96f469b8ed7fd83da4543998b0b473bcc2206)) -* fix fediverse link ([3683780](https://github.com/pietervdvn/mapcomplete/commits3683780f9d19016ee0972cffb6ee55997a0b60c5)) -* hide items if the layer is disabled and favourites is enabled ([7bdd308](https://github.com/pietervdvn/mapcomplete/commits7bdd30879b870406cf5ebf3a23edfc3fbeb52a47)) -* increase timeout when opening a new POI ([e8e4ae1](https://github.com/pietervdvn/mapcomplete/commitse8e4ae1f47514b1b7769e701bdf5a7581c231aa8)) -* show favourites in loaded layers if favourites are enabled ([e65f61d](https://github.com/pietervdvn/mapcomplete/commitse65f61d2962eba8301afa51e27f0e085e8db2ff7)) -* when using Chronic, check the `aslong` condition before actually running instead of using it to reset the clock. ([10e9416](https://github.com/pietervdvn/mapcomplete/commits10e9416f8f1abe4cda334242821157bd7c486986)) +* better support for complicated regex tags ([b4817f7](https://github.com/pietervdvn/mapcomplete/commits/b4817f7a7faafffe716619a4d6908c013d58efd6)) +* build ([70612f1](https://github.com/pietervdvn/mapcomplete/commits/70612f1c12ef69209205a29828694c16a9bbc177)) +* build by fixing licenses ([62936b9](https://github.com/pietervdvn/mapcomplete/commits/62936b916b238f7ddf4edb841383d4e2cb1bf3da)) +* deal with dashes in the path ([5127609](https://github.com/pietervdvn/mapcomplete/commits/51276091203d48cecb154271e69be0ce784ed01d)) +* fix build by having correct regextag.asJson() ([0dd96f4](https://github.com/pietervdvn/mapcomplete/commits/0dd96f469b8ed7fd83da4543998b0b473bcc2206)) +* fix fediverse link ([3683780](https://github.com/pietervdvn/mapcomplete/commits/3683780f9d19016ee0972cffb6ee55997a0b60c5)) +* hide items if the layer is disabled and favourites is enabled ([7bdd308](https://github.com/pietervdvn/mapcomplete/commits/7bdd30879b870406cf5ebf3a23edfc3fbeb52a47)) +* increase timeout when opening a new POI ([e8e4ae1](https://github.com/pietervdvn/mapcomplete/commits/e8e4ae1f47514b1b7769e701bdf5a7581c231aa8)) +* show favourites in loaded layers if favourites are enabled ([e65f61d](https://github.com/pietervdvn/mapcomplete/commits/e65f61d2962eba8301afa51e27f0e085e8db2ff7)) +* when using Chronic, check the `aslong` condition before actually running instead of using it to reset the clock. ([10e9416](https://github.com/pietervdvn/mapcomplete/commits/10e9416f8f1abe4cda334242821157bd7c486986)) ### Theme improvements -* **education:** add images, move contact information up ([d77bb7e](https://github.com/pietervdvn/mapcomplete/commitsd77bb7e22525aef3b64ce3a9aa57a39351ebb441)) -* **memorial:** add filter on type of memorial, remove obsolete 'memorial:type=stolperstein' ([1415fcd](https://github.com/pietervdvn/mapcomplete/commits1415fcdfecb4be757ea9611b08a1b473e5d50be7)) -* **playgrounds:** don't show counts for small POI, only for playgrounds; make icons smaller ([f3335c9](https://github.com/pietervdvn/mapcomplete/commitsf3335c93711bd224ad3dfa611b95a40039596746)) -* **postboxes:** add contact info, add condition for post partner ([8fcc747](https://github.com/pietervdvn/mapcomplete/commits8fcc747370fab69e93fac2e00c1886261cb6e08f)) -* **postboxes:** add option to snap to wall and rendering, add "operator" to post boxes ([f7b5db9](https://github.com/pietervdvn/mapcomplete/commitsf7b5db9ec34676f834a3b2d8966649f09b34c1b1)) +* **education:** add images, move contact information up ([d77bb7e](https://github.com/pietervdvn/mapcomplete/commits/d77bb7e22525aef3b64ce3a9aa57a39351ebb441)) +* **memorial:** add filter on type of memorial, remove obsolete 'memorial:type=stolperstein' ([1415fcd](https://github.com/pietervdvn/mapcomplete/commits/1415fcdfecb4be757ea9611b08a1b473e5d50be7)) +* **playgrounds:** don't show counts for small POI, only for playgrounds; make icons smaller ([f3335c9](https://github.com/pietervdvn/mapcomplete/commits/f3335c93711bd224ad3dfa611b95a40039596746)) +* **postboxes:** add contact info, add condition for post partner ([8fcc747](https://github.com/pietervdvn/mapcomplete/commits/8fcc747370fab69e93fac2e00c1886261cb6e08f)) +* **postboxes:** add option to snap to wall and rendering, add "operator" to post boxes ([f7b5db9](https://github.com/pietervdvn/mapcomplete/commits/f7b5db9ec34676f834a3b2d8966649f09b34c1b1)) ### [0.47.8](https://github.com/pietervdvn/mapcomplete/compare/v0.47.7...v0.47.8) (2024-11-01) ### Bug Fixes -* fix uploading images in the 'notes' theme ([5fd0314](https://github.com/pietervdvn/mapcomplete/commits5fd03144080aa32fe500333b64575069e93e8b79)) +* fix uploading images in the 'notes' theme ([5fd0314](https://github.com/pietervdvn/mapcomplete/commits/5fd03144080aa32fe500333b64575069e93e8b79)) ### [0.47.7](https://github.com/pietervdvn/mapcomplete/compare/v0.47.6...v0.47.7) (2024-10-28) ### Features -* add script to upload images to panoramax and remove 'imgur'-links ([4233bd7](https://github.com/pietervdvn/mapcomplete/commits4233bd7618e69e71c00ef027bbb4afc199c29fa9)) -* panoramax uploads in testmode are sent to a different sequence ([834b6b1](https://github.com/pietervdvn/mapcomplete/commits834b6b18ff985cd1a79e725af915e307525d221e)) -* remove possibility to load a custom theme via the hash, no longer necessary with a theme server ([a016a8f](https://github.com/pietervdvn/mapcomplete/commitsa016a8f771ca3cfb210b5f5f92b136a011d08543)) -* update update script ([d27c38d](https://github.com/pietervdvn/mapcomplete/commitsd27c38d0e48d653675ffa44bc3812e6f8e05f5f8)) -* upload to specified panoramax instance ([3df0f9c](https://github.com/pietervdvn/mapcomplete/commits3df0f9ca94f8df6314322359edbfb4276c971419)) +* add script to upload images to panoramax and remove 'imgur'-links ([4233bd7](https://github.com/pietervdvn/mapcomplete/commits/4233bd7618e69e71c00ef027bbb4afc199c29fa9)) +* panoramax uploads in testmode are sent to a different sequence ([834b6b1](https://github.com/pietervdvn/mapcomplete/commits/834b6b18ff985cd1a79e725af915e307525d221e)) +* remove possibility to load a custom theme via the hash, no longer necessary with a theme server ([a016a8f](https://github.com/pietervdvn/mapcomplete/commits/a016a8f771ca3cfb210b5f5f92b136a011d08543)) +* update update script ([d27c38d](https://github.com/pietervdvn/mapcomplete/commits/d27c38d0e48d653675ffa44bc3812e6f8e05f5f8)) +* upload to specified panoramax instance ([3df0f9c](https://github.com/pietervdvn/mapcomplete/commits/3df0f9ca94f8df6314322359edbfb4276c971419)) ### Bug Fixes -* add missing import ([9bf013c](https://github.com/pietervdvn/mapcomplete/commits9bf013cd47468c88bbc9ad90376f9240d0e921c0)) -* attempt to fix build ([571791d](https://github.com/pietervdvn/mapcomplete/commits571791d06349cc9a409ddede0737f04824186210)) -* attempt to fix panoramax upload, see [#2202](https://github.com/pietervdvn/MapComplete/issues/2202) ([07c1cc0](https://github.com/pietervdvn/mapcomplete/commits07c1cc0beea816d4f328adaa9ac15d32676380c4)) -* bing layer, see [#2222](https://github.com/pietervdvn/MapComplete/issues/2222) ([51608fb](https://github.com/pietervdvn/mapcomplete/commits51608fb22348a79b7459a7d3558202edb68ec773)) -* build ([01c8d63](https://github.com/pietervdvn/mapcomplete/commits01c8d63943c0df74892e2ae02720a469bf3bdb89)) -* don't index 'all_streets' ([c1c2390](https://github.com/pietervdvn/mapcomplete/commitsc1c2390694ab145524dae96cd7dff5a866e4b865)) -* fix [#2212](https://github.com/pietervdvn/MapComplete/issues/2212). ([91f5c8f](https://github.com/pietervdvn/mapcomplete/commits91f5c8f1669a448c36876e0fda374165f5b60886)) -* fix [#2213](https://github.com/pietervdvn/MapComplete/issues/2213), remove image-license from usersettings.json ([90a34ab](https://github.com/pietervdvn/mapcomplete/commits90a34ab31f23be942e27ba4cbcd60528c591f7df)) -* fix [#2222](https://github.com/pietervdvn/MapComplete/issues/2222), restore global background layers which were not included in the connect-src ([905f176](https://github.com/pietervdvn/mapcomplete/commits905f1768f2b994fa83af31224447c96003ab70ce)) -* **panoramax:** stabilize loading images ([8480f94](https://github.com/pietervdvn/mapcomplete/commits8480f9417c6fa11ab21bc06d15e4a5a5baeaa1f4)) -* see [#2212](https://github.com/pietervdvn/MapComplete/issues/2212): actually save custom themes as visited ([9427083](https://github.com/pietervdvn/mapcomplete/commits9427083939bb6958b07e6fd48f5356101f06e681)) -* special quicksearch for osmcha ([01cfc5f](https://github.com/pietervdvn/mapcomplete/commits01cfc5fe4db17362b3e3317f0eba7e0bf954a689)) -* translations ([d10f894](https://github.com/pietervdvn/mapcomplete/commitsd10f89469a7de5e91bc613ae4527054c502b966a)) -* translations ([ab8835b](https://github.com/pietervdvn/mapcomplete/commitsab8835b279a9c3aecf04a367464cc1bde25ac1d8)) -* Use alternative way to read coordinates from exif data ([6257c24](https://github.com/pietervdvn/mapcomplete/commits6257c2415a6fff2859168bb671f54e700f0b3152)) -* use popup when in an iframe ([63162c5](https://github.com/pietervdvn/mapcomplete/commits63162c58e147aaf9c1c4c77d5187b13aaa8cf13a)) +* add missing import ([9bf013c](https://github.com/pietervdvn/mapcomplete/commits/9bf013cd47468c88bbc9ad90376f9240d0e921c0)) +* attempt to fix build ([571791d](https://github.com/pietervdvn/mapcomplete/commits/571791d06349cc9a409ddede0737f04824186210)) +* attempt to fix panoramax upload, see [#2202](https://github.com/pietervdvn/MapComplete/issues/2202) ([07c1cc0](https://github.com/pietervdvn/mapcomplete/commits/07c1cc0beea816d4f328adaa9ac15d32676380c4)) +* bing layer, see [#2222](https://github.com/pietervdvn/MapComplete/issues/2222) ([51608fb](https://github.com/pietervdvn/mapcomplete/commits/51608fb22348a79b7459a7d3558202edb68ec773)) +* build ([01c8d63](https://github.com/pietervdvn/mapcomplete/commits/01c8d63943c0df74892e2ae02720a469bf3bdb89)) +* don't index 'all_streets' ([c1c2390](https://github.com/pietervdvn/mapcomplete/commits/c1c2390694ab145524dae96cd7dff5a866e4b865)) +* fix [#2212](https://github.com/pietervdvn/MapComplete/issues/2212). ([91f5c8f](https://github.com/pietervdvn/mapcomplete/commits/91f5c8f1669a448c36876e0fda374165f5b60886)) +* fix [#2213](https://github.com/pietervdvn/MapComplete/issues/2213), remove image-license from usersettings.json ([90a34ab](https://github.com/pietervdvn/mapcomplete/commits/90a34ab31f23be942e27ba4cbcd60528c591f7df)) +* fix [#2222](https://github.com/pietervdvn/MapComplete/issues/2222), restore global background layers which were not included in the connect-src ([905f176](https://github.com/pietervdvn/mapcomplete/commits/905f1768f2b994fa83af31224447c96003ab70ce)) +* **panoramax:** stabilize loading images ([8480f94](https://github.com/pietervdvn/mapcomplete/commits/8480f9417c6fa11ab21bc06d15e4a5a5baeaa1f4)) +* see [#2212](https://github.com/pietervdvn/MapComplete/issues/2212): actually save custom themes as visited ([9427083](https://github.com/pietervdvn/mapcomplete/commits/9427083939bb6958b07e6fd48f5356101f06e681)) +* special quicksearch for osmcha ([01cfc5f](https://github.com/pietervdvn/mapcomplete/commits/01cfc5fe4db17362b3e3317f0eba7e0bf954a689)) +* translations ([d10f894](https://github.com/pietervdvn/mapcomplete/commits/d10f89469a7de5e91bc613ae4527054c502b966a)) +* translations ([ab8835b](https://github.com/pietervdvn/mapcomplete/commits/ab8835b279a9c3aecf04a367464cc1bde25ac1d8)) +* Use alternative way to read coordinates from exif data ([6257c24](https://github.com/pietervdvn/mapcomplete/commits/6257c2415a6fff2859168bb671f54e700f0b3152)) +* use popup when in an iframe ([63162c5](https://github.com/pietervdvn/mapcomplete/commits/63162c58e147aaf9c1c4c77d5187b13aaa8cf13a)) ### Theme improvements -* **bike_parking:** add lean_and_stick type ([9e1bd7f](https://github.com/pietervdvn/mapcomplete/commits9e1bd7fa9d9e3b2d5242fbe7b073234b7fa04cbd)) -* **bikeparking:** update text of access=private, sync translation ([4ce5a40](https://github.com/pietervdvn/mapcomplete/commits4ce5a40eb4b3b3d350873ff2bf9a2a7d9b3a5d15)) -* **cycle_infra:** add minzoom for all layers ([94bc478](https://github.com/pietervdvn/mapcomplete/commits94bc478b9e5cfdbbb9e062b3950433984bfd752b)) -* **items_with_image:** include 'panoramax' and 'mapillary' as tags for items with image, fix [#2225](https://github.com/pietervdvn/MapComplete/issues/2225) ([899312b](https://github.com/pietervdvn/mapcomplete/commits899312ba7cb2b9b00fc8c4483ffe57955f08cdf2)) -* **shops:** support `shop=sports` together with 'shop=sport' ([98470ef](https://github.com/pietervdvn/mapcomplete/commits98470ef8ac1c38cb54cdbae1bd07cbab825be795)) -* **velopark:** hide NMBS-maproulette items ([0a0d0a1](https://github.com/pietervdvn/mapcomplete/commits0a0d0a15cb546dd390bd2c388fafb43d13bda327)) -* **velopark:** properly hide NMBS-maproulette items with a filter ([4840816](https://github.com/pietervdvn/mapcomplete/commits4840816b1768cd3c4d43ef01d07c852cd32f1d3e)) +* **bike_parking:** add lean_and_stick type ([9e1bd7f](https://github.com/pietervdvn/mapcomplete/commits/9e1bd7fa9d9e3b2d5242fbe7b073234b7fa04cbd)) +* **bikeparking:** update text of access=private, sync translation ([4ce5a40](https://github.com/pietervdvn/mapcomplete/commits/4ce5a40eb4b3b3d350873ff2bf9a2a7d9b3a5d15)) +* **cycle_infra:** add minzoom for all layers ([94bc478](https://github.com/pietervdvn/mapcomplete/commits/94bc478b9e5cfdbbb9e062b3950433984bfd752b)) +* **items_with_image:** include 'panoramax' and 'mapillary' as tags for items with image, fix [#2225](https://github.com/pietervdvn/MapComplete/issues/2225) ([899312b](https://github.com/pietervdvn/mapcomplete/commits/899312ba7cb2b9b00fc8c4483ffe57955f08cdf2)) +* **shops:** support `shop=sports` together with 'shop=sport' ([98470ef](https://github.com/pietervdvn/mapcomplete/commits/98470ef8ac1c38cb54cdbae1bd07cbab825be795)) +* **velopark:** hide NMBS-maproulette items ([0a0d0a1](https://github.com/pietervdvn/mapcomplete/commits/0a0d0a15cb546dd390bd2c388fafb43d13bda327)) +* **velopark:** properly hide NMBS-maproulette items with a filter ([4840816](https://github.com/pietervdvn/mapcomplete/commits/4840816b1768cd3c4d43ef01d07c852cd32f1d3e)) ### [0.47.6](https://github.com/pietervdvn/mapcomplete/compare/v0.47.5...v0.47.6) (2024-10-15) ### Features -* remove 'noteImportLayer', they are not used enough for the big performance and maintenance impact they have ([e35df65](https://github.com/pietervdvn/mapcomplete/commitse35df654d7f2a0ef7c12c0ceef27cb3a1a7a1027)) +* remove 'noteImportLayer', they are not used enough for the big performance and maintenance impact they have ([e35df65](https://github.com/pietervdvn/mapcomplete/commits/e35df654d7f2a0ef7c12c0ceef27cb3a1a7a1027)) ### Bug Fixes -* add error reporting when image upload fails, see [#2202](https://github.com/pietervdvn/MapComplete/issues/2202) ([368d785](https://github.com/pietervdvn/mapcomplete/commits368d7857a055c92109ec6d5155078aabaef230ac)) -* add nvm path ([7d83cb1](https://github.com/pietervdvn/mapcomplete/commits7d83cb1a7fdaad23d4a1343edb75145f60bf771f)) -* add spaces to opening hours picker for PH ([8a8b2e2](https://github.com/pietervdvn/mapcomplete/commits8a8b2e20aebe8019af86aca02e6bcc4d90896b4f)) -* attempt to workaround for [#2202](https://github.com/pietervdvn/MapComplete/issues/2202) ([66465fd](https://github.com/pietervdvn/mapcomplete/commits66465fdc9893fa4c3f0c1f5b8279a51c33a1e407)) -* bug in error reporting ([4794032](https://github.com/pietervdvn/mapcomplete/commits4794032e49a4b5b2d3fdceac8a2b8a75994e94ea)) -* build: add generated file which is needed for some steps ([016908f](https://github.com/pietervdvn/mapcomplete/commits016908fb940a65dc863cddca5be8d681b9370c49)) -* explicitly use version number in update script ([977c6ff](https://github.com/pietervdvn/mapcomplete/commits977c6ff9fb30267f47c39aa55fb0a0f2e6028564)) -* fix [#2207](https://github.com/pietervdvn/MapComplete/issues/2207) ([ca17d3d](https://github.com/pietervdvn/mapcomplete/commitsca17d3da1b772e4976414b54406816a68ef0e175)) -* fix [#2209](https://github.com/pietervdvn/MapComplete/issues/2209), remove lingering incorrect translations ([fbcbdc5](https://github.com/pietervdvn/mapcomplete/commitsfbcbdc571edd848106885f9148e473c816990a67)) -* fix loading of preferences ([7060f7c](https://github.com/pietervdvn/mapcomplete/commits7060f7cf6cac807877efb8babc8586eabfc79351)) -* remove truly unrecoverable changes from report logging ([f2b681c](https://github.com/pietervdvn/mapcomplete/commitsf2b681caa59a419c4c217e705ad6d1a7ac271128)) -* reset translations ([6a4166f](https://github.com/pietervdvn/mapcomplete/commits6a4166febb5ce386beac8bbb06cd7527b90c6a12)) -* set max image size (100 MB) ([cc6ce3c](https://github.com/pietervdvn/mapcomplete/commitscc6ce3c271475759a7a2062b1ca7e4668ca4a230)) -* some fixes to studio ([c795e74](https://github.com/pietervdvn/mapcomplete/commitsc795e74037ca1aa222fdba6eb2cc4a32a78a8eb7)) -* tests ([c95999b](https://github.com/pietervdvn/mapcomplete/commitsc95999b50b84d294476783573baf21d46318cb16)) +* add error reporting when image upload fails, see [#2202](https://github.com/pietervdvn/MapComplete/issues/2202) ([368d785](https://github.com/pietervdvn/mapcomplete/commits/368d7857a055c92109ec6d5155078aabaef230ac)) +* add nvm path ([7d83cb1](https://github.com/pietervdvn/mapcomplete/commits/7d83cb1a7fdaad23d4a1343edb75145f60bf771f)) +* add spaces to opening hours picker for PH ([8a8b2e2](https://github.com/pietervdvn/mapcomplete/commits/8a8b2e20aebe8019af86aca02e6bcc4d90896b4f)) +* attempt to workaround for [#2202](https://github.com/pietervdvn/MapComplete/issues/2202) ([66465fd](https://github.com/pietervdvn/mapcomplete/commits/66465fdc9893fa4c3f0c1f5b8279a51c33a1e407)) +* bug in error reporting ([4794032](https://github.com/pietervdvn/mapcomplete/commits/4794032e49a4b5b2d3fdceac8a2b8a75994e94ea)) +* build: add generated file which is needed for some steps ([016908f](https://github.com/pietervdvn/mapcomplete/commits/016908fb940a65dc863cddca5be8d681b9370c49)) +* explicitly use version number in update script ([977c6ff](https://github.com/pietervdvn/mapcomplete/commits/977c6ff9fb30267f47c39aa55fb0a0f2e6028564)) +* fix [#2207](https://github.com/pietervdvn/MapComplete/issues/2207) ([ca17d3d](https://github.com/pietervdvn/mapcomplete/commits/ca17d3da1b772e4976414b54406816a68ef0e175)) +* fix [#2209](https://github.com/pietervdvn/MapComplete/issues/2209), remove lingering incorrect translations ([fbcbdc5](https://github.com/pietervdvn/mapcomplete/commits/fbcbdc571edd848106885f9148e473c816990a67)) +* fix loading of preferences ([7060f7c](https://github.com/pietervdvn/mapcomplete/commits/7060f7cf6cac807877efb8babc8586eabfc79351)) +* remove truly unrecoverable changes from report logging ([f2b681c](https://github.com/pietervdvn/mapcomplete/commits/f2b681caa59a419c4c217e705ad6d1a7ac271128)) +* reset translations ([6a4166f](https://github.com/pietervdvn/mapcomplete/commits/6a4166febb5ce386beac8bbb06cd7527b90c6a12)) +* set max image size (100 MB) ([cc6ce3c](https://github.com/pietervdvn/mapcomplete/commits/cc6ce3c271475759a7a2062b1ca7e4668ca4a230)) +* some fixes to studio ([c795e74](https://github.com/pietervdvn/mapcomplete/commits/c795e74037ca1aa222fdba6eb2cc4a32a78a8eb7)) +* tests ([c95999b](https://github.com/pietervdvn/mapcomplete/commits/c95999b50b84d294476783573baf21d46318cb16)) ### Theme improvements -* don't do face blurring for some layers (artwork, memorials, ghost_bikes) ([15176a1](https://github.com/pietervdvn/mapcomplete/commits15176a16825d52e26a52f92567cf3977382ce213)) -* **food:** fix vegan questions, show vegan/vegetarian badge if `=only`, fix shops layer ([f8ef32f](https://github.com/pietervdvn/mapcomplete/commitsf8ef32f123340cb9db0060cdca7f4622cd55c228)) +* don't do face blurring for some layers (artwork, memorials, ghost_bikes) ([15176a1](https://github.com/pietervdvn/mapcomplete/commits/15176a16825d52e26a52f92567cf3977382ce213)) +* **food:** fix vegan questions, show vegan/vegetarian badge if `=only`, fix shops layer ([f8ef32f](https://github.com/pietervdvn/mapcomplete/commits/f8ef32f123340cb9db0060cdca7f4622cd55c228)) ### [0.47.5](https://github.com/pietervdvn/mapcomplete/compare/v0.47.4...v0.47.5) (2024-10-08) ### Features -* add DWG-block support ([c28baaa](https://github.com/pietervdvn/mapcomplete/commitsc28baaab62585838a4f6a652b922d170b4cfff02)) -* add panoramax link to 'browse nearby images' ([06363e8](https://github.com/pietervdvn/mapcomplete/commits06363e808ff16fae528d620e16a0972f9f8b5053)) -* add panoramax to status page ([9e9d5e8](https://github.com/pietervdvn/mapcomplete/commits9e9d5e80d891e41c77ded60c59e122ef734ed31d)) +* add DWG-block support ([c28baaa](https://github.com/pietervdvn/mapcomplete/commits/c28baaab62585838a4f6a652b922d170b4cfff02)) +* add panoramax link to 'browse nearby images' ([06363e8](https://github.com/pietervdvn/mapcomplete/commits/06363e808ff16fae528d620e16a0972f9f8b5053)) +* add panoramax to status page ([9e9d5e8](https://github.com/pietervdvn/mapcomplete/commits/9e9d5e80d891e41c77ded60c59e122ef734ed31d)) ### Bug Fixes -* actually use prefix and postfix ([0461ca1](https://github.com/pietervdvn/mapcomplete/commits0461ca176de3f1aad222105a1393882264bb8f80)) -* fix [#2197](https://github.com/pietervdvn/MapComplete/issues/2197) ([c2f7b1e](https://github.com/pietervdvn/mapcomplete/commitsc2f7b1e8c11dcc844131da4d368cc114c99e7601)) -* fix download panel ([fb3bf98](https://github.com/pietervdvn/mapcomplete/commitsfb3bf98f1923db4bbba02728d23360a12319a08c)) -* fix filters in statistics.html ([5048da5](https://github.com/pietervdvn/mapcomplete/commits5048da58e7cb6446716ca143b93e98e946f940b8)) -* mention license of panoramax ([86af270](https://github.com/pietervdvn/mapcomplete/commits86af270aa0a0bcb49843eb009fccee47a54012cd)) -* should improve 2193 ([15856d7](https://github.com/pietervdvn/mapcomplete/commits15856d7047e05f29f3e37dc8f9c9eb47ae81d9f7)) -* tests ([ba46736](https://github.com/pietervdvn/mapcomplete/commitsba46736ed9cf51161c8da99cb85f5d307e90e084)) -* use textContent instead of inntertext, fixes tests ([591e992](https://github.com/pietervdvn/mapcomplete/commits591e992839592d3037f31e6e0d33f7f7f19d0aa4)) +* actually use prefix and postfix ([0461ca1](https://github.com/pietervdvn/mapcomplete/commits/0461ca176de3f1aad222105a1393882264bb8f80)) +* fix [#2197](https://github.com/pietervdvn/MapComplete/issues/2197) ([c2f7b1e](https://github.com/pietervdvn/mapcomplete/commits/c2f7b1e8c11dcc844131da4d368cc114c99e7601)) +* fix download panel ([fb3bf98](https://github.com/pietervdvn/mapcomplete/commits/fb3bf98f1923db4bbba02728d23360a12319a08c)) +* fix filters in statistics.html ([5048da5](https://github.com/pietervdvn/mapcomplete/commits/5048da58e7cb6446716ca143b93e98e946f940b8)) +* mention license of panoramax ([86af270](https://github.com/pietervdvn/mapcomplete/commits/86af270aa0a0bcb49843eb009fccee47a54012cd)) +* should improve 2193 ([15856d7](https://github.com/pietervdvn/mapcomplete/commits/15856d7047e05f29f3e37dc8f9c9eb47ae81d9f7)) +* tests ([ba46736](https://github.com/pietervdvn/mapcomplete/commits/ba46736ed9cf51161c8da99cb85f5d307e90e084)) +* use textContent instead of inntertext, fixes tests ([591e992](https://github.com/pietervdvn/mapcomplete/commits/591e992839592d3037f31e6e0d33f7f7f19d0aa4)) ### Theme improvements -* **charging stations:** add keywords in search ([e502c15](https://github.com/pietervdvn/mapcomplete/commitse502c1519d2f9a021c01ebd7fcfa7ad289a30d01)) -* **fritures:** Add 'diet:vegan=only' and 'diet:vegetarian=only' options to fritures, fix [#2191](https://github.com/pietervdvn/MapComplete/issues/2191) ([17e95ca](https://github.com/pietervdvn/mapcomplete/commits17e95ca5946782894304cf4d9d811bb4c9dd3bec)) -* **shops:** add labels to icecream, refactor label for shps ([1ade2ed](https://github.com/pietervdvn/mapcomplete/commits1ade2ed45b1fdd2e4fa6acccc889f939f68c4fa2)) +* **charging stations:** add keywords in search ([e502c15](https://github.com/pietervdvn/mapcomplete/commits/e502c1519d2f9a021c01ebd7fcfa7ad289a30d01)) +* **fritures:** Add 'diet:vegan=only' and 'diet:vegetarian=only' options to fritures, fix [#2191](https://github.com/pietervdvn/MapComplete/issues/2191) ([17e95ca](https://github.com/pietervdvn/mapcomplete/commits/17e95ca5946782894304cf4d9d811bb4c9dd3bec)) +* **shops:** add labels to icecream, refactor label for shps ([1ade2ed](https://github.com/pietervdvn/mapcomplete/commits/1ade2ed45b1fdd2e4fa6acccc889f939f68c4fa2)) ### [0.47.4](https://github.com/pietervdvn/mapcomplete/compare/v0.46.12...v0.47.4) (2024-09-30) ### Features -* **studio:** add possibility to directly write into the theme files ([0be7c64](https://github.com/pietervdvn/mapcomplete/commits0be7c64ea1dae928ef658b0ef91ad6ad662f0f36)) +* **studio:** add possibility to directly write into the theme files ([0be7c64](https://github.com/pietervdvn/mapcomplete/commits/0be7c64ea1dae928ef658b0ef91ad6ad662f0f36)) ### Bug Fixes -* enable summary server again ([d6eca37](https://github.com/pietervdvn/mapcomplete/commitsd6eca3717a7fb3ac8d17d20861870d17a0da44bb)) -* fix [#2183](https://github.com/pietervdvn/MapComplete/issues/2183) by updating wikidata-sdk to latest wikibase-sdk ([021e5f2](https://github.com/pietervdvn/mapcomplete/commits021e5f2734c46de3d51860f6c717b667dd8d1427)) +* enable summary server again ([d6eca37](https://github.com/pietervdvn/mapcomplete/commits/d6eca3717a7fb3ac8d17d20861870d17a0da44bb)) +* fix [#2183](https://github.com/pietervdvn/MapComplete/issues/2183) by updating wikidata-sdk to latest wikibase-sdk ([021e5f2](https://github.com/pietervdvn/mapcomplete/commits/021e5f2734c46de3d51860f6c717b667dd8d1427)) ### Theme improvements -* **bicycle_counter:** add images, fix center location ([ea133c5](https://github.com/pietervdvn/mapcomplete/commitsea133c5effeaad3f5e09e6e2991f0f1f6a12bbc4)) -* **police:** add jail and checkpoint icons ([169ee29](https://github.com/pietervdvn/mapcomplete/commits169ee2941498e9968dfbf42f65c8504b6bcb7f37)) -* **shops:** make 'shops' only appear on zoomlevel 15 ([c4ae41e](https://github.com/pietervdvn/mapcomplete/commitsc4ae41e0e1fffa925f293f2a65c277979308a694)) -* tighten minzooms ([1aef862](https://github.com/pietervdvn/mapcomplete/commits1aef862b11dfcb1a359144c70cd7d26db51dd6f2)) +* **bicycle_counter:** add images, fix center location ([ea133c5](https://github.com/pietervdvn/mapcomplete/commits/ea133c5effeaad3f5e09e6e2991f0f1f6a12bbc4)) +* **police:** add jail and checkpoint icons ([169ee29](https://github.com/pietervdvn/mapcomplete/commits/169ee2941498e9968dfbf42f65c8504b6bcb7f37)) +* **shops:** make 'shops' only appear on zoomlevel 15 ([c4ae41e](https://github.com/pietervdvn/mapcomplete/commits/c4ae41e0e1fffa925f293f2a65c277979308a694)) +* tighten minzooms ([1aef862](https://github.com/pietervdvn/mapcomplete/commits/1aef862b11dfcb1a359144c70cd7d26db51dd6f2)) ### [0.47.2](https://github.com/pietervdvn/mapcomplete/compare/v0.47.1...v0.47.2) (2024-09-24) ### Bug Fixes -* correctly apply previous refactoring ([2a53f99](https://github.com/pietervdvn/mapcomplete/commits2a53f99dd50695768ff9b625665ca69bf0bec4c1)) -* delete entry from 'localStorage' ([22c8a45](https://github.com/pietervdvn/mapcomplete/commits22c8a45012be60dad215f8b0d72501133665454e)) -* don't add buildings to database, reevaluate builddb script ([ce87edf](https://github.com/pietervdvn/mapcomplete/commitsce87edf80009bd65c9f185d9ff68b023c5486adc)) -* fix wrong location in theme ([8b0b24b](https://github.com/pietervdvn/mapcomplete/commits8b0b24b01eefa5dbe86d97ac9c3baf38fd2fad0d)) -* remove stray word ([a6598fd](https://github.com/pietervdvn/mapcomplete/commitsa6598fd52d588ba7a5a6b05e2df8ff8ae460a37b)) -* use 'isCounted' instead of 'doCount', add check for this ([3a8fc42](https://github.com/pietervdvn/mapcomplete/commits3a8fc4248b7aa6a9cea8c2529a02a7cc11325cc8)) +* correctly apply previous refactoring ([2a53f99](https://github.com/pietervdvn/mapcomplete/commits/2a53f99dd50695768ff9b625665ca69bf0bec4c1)) +* delete entry from 'localStorage' ([22c8a45](https://github.com/pietervdvn/mapcomplete/commits/22c8a45012be60dad215f8b0d72501133665454e)) +* don't add buildings to database, reevaluate builddb script ([ce87edf](https://github.com/pietervdvn/mapcomplete/commits/ce87edf80009bd65c9f185d9ff68b023c5486adc)) +* fix wrong location in theme ([8b0b24b](https://github.com/pietervdvn/mapcomplete/commits/8b0b24b01eefa5dbe86d97ac9c3baf38fd2fad0d)) +* remove stray word ([a6598fd](https://github.com/pietervdvn/mapcomplete/commits/a6598fd52d588ba7a5a6b05e2df8ff8ae460a37b)) +* use 'isCounted' instead of 'doCount', add check for this ([3a8fc42](https://github.com/pietervdvn/mapcomplete/commits/3a8fc4248b7aa6a9cea8c2529a02a7cc11325cc8)) ### [0.47.1](https://github.com/pietervdvn/mapcomplete/compare/v0.47.0...v0.47.1) (2024-09-19) ### Bug Fixes -* actually read preferences ([a5b3342](https://github.com/pietervdvn/mapcomplete/commitsa5b3342415e843d5a33b1d3eb2dce4a95b14932a)) -* use correct overflow ([c668698](https://github.com/pietervdvn/mapcomplete/commitsc668698b1eb16f0d96c5ae0e4e7e79209b6abd95)) +* actually read preferences ([a5b3342](https://github.com/pietervdvn/mapcomplete/commits/a5b3342415e843d5a33b1d3eb2dce4a95b14932a)) +* use correct overflow ([c668698](https://github.com/pietervdvn/mapcomplete/commits/c668698b1eb16f0d96c5ae0e4e7e79209b6abd95)) ### Theme improvements -* **food:** add search keywords ([53b7597](https://github.com/pietervdvn/mapcomplete/commits53b75973f6734bcad6d1081299e826d2e00e0551)) -* **sport:** add sport pitches filter on sports, fix [#2159](https://github.com/pietervdvn/MapComplete/issues/2159) ([58cec96](https://github.com/pietervdvn/mapcomplete/commits58cec96fb50284dca79716ffe43d0a75b4cb6597)) +* **food:** add search keywords ([53b7597](https://github.com/pietervdvn/mapcomplete/commits/53b75973f6734bcad6d1081299e826d2e00e0551)) +* **sport:** add sport pitches filter on sports, fix [#2159](https://github.com/pietervdvn/MapComplete/issues/2159) ([58cec96](https://github.com/pietervdvn/mapcomplete/commits/58cec96fb50284dca79716ffe43d0a75b4cb6597)) ## [0.47.0](https://github.com/pietervdvn/mapcomplete/compare/v0.46.9...v0.47.0) (2024-09-17) ### Features -* add download as json to 'allTags'-panel (for debugging) ([af2905d](https://github.com/pietervdvn/mapcomplete/commitsaf2905dc6d1cbbcfb2d9cd2583369eebd90ced70)) +* add download as json to 'allTags'-panel (for debugging) ([af2905d](https://github.com/pietervdvn/mapcomplete/commits/af2905dc6d1cbbcfb2d9cd2583369eebd90ced70)) ### Bug Fixes -* actually search for keywords in theme view ([cdc1e05](https://github.com/pietervdvn/mapcomplete/commitscdc1e05499ffc41d093503ccd24defa347eea50e)) +* actually search for keywords in theme view ([cdc1e05](https://github.com/pietervdvn/mapcomplete/commits/cdc1e05499ffc41d093503ccd24defa347eea50e)) ### Theme improvements -* allow to disable auto filters ([b349293](https://github.com/pietervdvn/mapcomplete/commitsb3492930b8e5090e9a9d3449d6e9abc365fc1780)) -* **healthcare:** add payment options to pharmacy layer ([6c5b619](https://github.com/pietervdvn/mapcomplete/commits6c5b61924a63e8bb82afd2dc963cc4fe38caa9ad)) -* **shop:** 'open_now' filter is introduced automatically ([ed2bec1](https://github.com/pietervdvn/mapcomplete/commitsed2bec139cf4e4094973aba2f4734522802898f3)) -* **shop:** don't show trolley bay on low zoom levels ([cdb62df](https://github.com/pietervdvn/mapcomplete/commitscdb62dfe58f5a6264c17e9d88bb590ea3f984b09)) -* some tweaks for the search feature ([bc52c05](https://github.com/pietervdvn/mapcomplete/commitsbc52c05a9b47ba6dbf8c3f79a131f8281b8c5197)) -* **waste:** add filter for 'recycling centre' ([5da63bf](https://github.com/pietervdvn/mapcomplete/commits5da63bf83aa7d8b230c8dbc082be3fba33344289)) +* allow to disable auto filters ([b349293](https://github.com/pietervdvn/mapcomplete/commits/b3492930b8e5090e9a9d3449d6e9abc365fc1780)) +* **healthcare:** add payment options to pharmacy layer ([6c5b619](https://github.com/pietervdvn/mapcomplete/commits/6c5b61924a63e8bb82afd2dc963cc4fe38caa9ad)) +* **shop:** 'open_now' filter is introduced automatically ([ed2bec1](https://github.com/pietervdvn/mapcomplete/commits/ed2bec139cf4e4094973aba2f4734522802898f3)) +* **shop:** don't show trolley bay on low zoom levels ([cdb62df](https://github.com/pietervdvn/mapcomplete/commits/cdb62dfe58f5a6264c17e9d88bb590ea3f984b09)) +* some tweaks for the search feature ([bc52c05](https://github.com/pietervdvn/mapcomplete/commits/bc52c05a9b47ba6dbf8c3f79a131f8281b8c5197)) +* **waste:** add filter for 'recycling centre' ([5da63bf](https://github.com/pietervdvn/mapcomplete/commits/5da63bf83aa7d8b230c8dbc082be3fba33344289)) ### [0.47.2](https://github.com/pietervdvn/mapcomplete/compare/v0.47.1...v0.47.2) (2024-09-24) ### Bug Fixes -* correctly apply previous refactoring ([2a53f99](https://github.com/pietervdvn/mapcomplete/commits2a53f99dd50695768ff9b625665ca69bf0bec4c1)) -* delete entry from 'localStorage' ([22c8a45](https://github.com/pietervdvn/mapcomplete/commits22c8a45012be60dad215f8b0d72501133665454e)) -* don't add buildings to database, reevaluate builddb script ([ce87edf](https://github.com/pietervdvn/mapcomplete/commitsce87edf80009bd65c9f185d9ff68b023c5486adc)) -* filtering for dates now works again ([bea9f66](https://github.com/pietervdvn/mapcomplete/commitsbea9f66b9aac9d2f13bca74b7a35cde7dd217e12)) -* fix wrong location in theme ([8b0b24b](https://github.com/pietervdvn/mapcomplete/commits8b0b24b01eefa5dbe86d97ac9c3baf38fd2fad0d)) -* remove stray word ([a6598fd](https://github.com/pietervdvn/mapcomplete/commitsa6598fd52d588ba7a5a6b05e2df8ff8ae460a37b)) -* studio now handles arrays better (might fix [#2102](https://github.com/pietervdvn/MapComplete/issues/2102)) ([0c9e41a](https://github.com/pietervdvn/mapcomplete/commits0c9e41a6ce4508ba3bc767f5eb5bd3cdb88201b2)) -* use 'isCounted' instead of 'doCount', add check for this ([3a8fc42](https://github.com/pietervdvn/mapcomplete/commits3a8fc4248b7aa6a9cea8c2529a02a7cc11325cc8)) +* correctly apply previous refactoring ([2a53f99](https://github.com/pietervdvn/mapcomplete/commits/2a53f99dd50695768ff9b625665ca69bf0bec4c1)) +* delete entry from 'localStorage' ([22c8a45](https://github.com/pietervdvn/mapcomplete/commits/22c8a45012be60dad215f8b0d72501133665454e)) +* don't add buildings to database, reevaluate builddb script ([ce87edf](https://github.com/pietervdvn/mapcomplete/commits/ce87edf80009bd65c9f185d9ff68b023c5486adc)) +* filtering for dates now works again ([bea9f66](https://github.com/pietervdvn/mapcomplete/commits/bea9f66b9aac9d2f13bca74b7a35cde7dd217e12)) +* fix wrong location in theme ([8b0b24b](https://github.com/pietervdvn/mapcomplete/commits/8b0b24b01eefa5dbe86d97ac9c3baf38fd2fad0d)) +* remove stray word ([a6598fd](https://github.com/pietervdvn/mapcomplete/commits/a6598fd52d588ba7a5a6b05e2df8ff8ae460a37b)) +* studio now handles arrays better (might fix [#2102](https://github.com/pietervdvn/MapComplete/issues/2102)) ([0c9e41a](https://github.com/pietervdvn/mapcomplete/commits/0c9e41a6ce4508ba3bc767f5eb5bd3cdb88201b2)) +* use 'isCounted' instead of 'doCount', add check for this ([3a8fc42](https://github.com/pietervdvn/mapcomplete/commits/3a8fc4248b7aa6a9cea8c2529a02a7cc11325cc8)) ### Theme improvements -* **ghostsigns:** streamline ghostsigns theme, fix [#2168](https://github.com/pietervdvn/MapComplete/issues/2168), fix [#2167](https://github.com/pietervdvn/MapComplete/issues/2167) ([392fe3b](https://github.com/pietervdvn/mapcomplete/commits392fe3b190975b9e3c5cb4aadb4d1543aa686d9e)) -* **vending_machine:** add better 'fixme' if freeform for 'vending' is used ([dfce217](https://github.com/pietervdvn/mapcomplete/commitsdfce217288957be2b27c198d640fd2dd5d53c9fb)) +* **ghostsigns:** streamline ghostsigns theme, fix [#2168](https://github.com/pietervdvn/MapComplete/issues/2168), fix [#2167](https://github.com/pietervdvn/MapComplete/issues/2167) ([392fe3b](https://github.com/pietervdvn/mapcomplete/commits/392fe3b190975b9e3c5cb4aadb4d1543aa686d9e)) +* **vending_machine:** add better 'fixme' if freeform for 'vending' is used ([dfce217](https://github.com/pietervdvn/mapcomplete/commits/dfce217288957be2b27c198d640fd2dd5d53c9fb)) ### [0.47.1](https://github.com/pietervdvn/mapcomplete/compare/v0.47.0...v0.47.1) (2024-09-19) ### Bug Fixes -* actually read preferences ([a5b3342](https://github.com/pietervdvn/mapcomplete/commitsa5b3342415e843d5a33b1d3eb2dce4a95b14932a)) -* fix loading images for CSP, fix [#2161](https://github.com/pietervdvn/MapComplete/issues/2161) ([2569d0c](https://github.com/pietervdvn/mapcomplete/commits2569d0cb66e411228d9d25cf50dc3278a83d0de5)) -* use correct overflow ([c668698](https://github.com/pietervdvn/mapcomplete/commitsc668698b1eb16f0d96c5ae0e4e7e79209b6abd95)) +* actually read preferences ([a5b3342](https://github.com/pietervdvn/mapcomplete/commits/a5b3342415e843d5a33b1d3eb2dce4a95b14932a)) +* fix loading images for CSP, fix [#2161](https://github.com/pietervdvn/MapComplete/issues/2161) ([2569d0c](https://github.com/pietervdvn/mapcomplete/commits/2569d0cb66e411228d9d25cf50dc3278a83d0de5)) +* use correct overflow ([c668698](https://github.com/pietervdvn/mapcomplete/commits/c668698b1eb16f0d96c5ae0e4e7e79209b6abd95)) ### Theme improvements -* **food:** add search keywords ([53b7597](https://github.com/pietervdvn/mapcomplete/commits53b75973f6734bcad6d1081299e826d2e00e0551)) -* **sport:** add sport pitches filter on sports, fix [#2159](https://github.com/pietervdvn/MapComplete/issues/2159) ([58cec96](https://github.com/pietervdvn/mapcomplete/commits58cec96fb50284dca79716ffe43d0a75b4cb6597)) +* **food:** add search keywords ([53b7597](https://github.com/pietervdvn/mapcomplete/commits/53b75973f6734bcad6d1081299e826d2e00e0551)) +* **sport:** add sport pitches filter on sports, fix [#2159](https://github.com/pietervdvn/MapComplete/issues/2159) ([58cec96](https://github.com/pietervdvn/mapcomplete/commits/58cec96fb50284dca79716ffe43d0a75b4cb6597)) ## [0.47.0](https://github.com/pietervdvn/MapComplete/compare/v0.46.9...v0.47.0) (2024-09-17) diff --git a/Docs/BuiltinIndex.md b/Docs/BuiltinIndex.md index b3e1681976..c51f4f9b3c 100644 --- a/Docs/BuiltinIndex.md +++ b/Docs/BuiltinIndex.md @@ -16,6 +16,7 @@ - bank - barrier - bbq + - beehive - bench - bench_at_pt - bicycle_counter @@ -68,6 +69,7 @@ - ice_cream - indoors - information_board + - insect_hotel - item_with_image - kerbs - lighthouse @@ -452,6 +454,11 @@ - cafe_pub - food + ### seating + + - cafe_pub + - food + ### dog-access - cafe_pub @@ -490,6 +497,11 @@ - playground - sport_pitch + ### maxstay + + - charging_station + - parking + ### climbing.website - climbing_area diff --git a/Docs/BuiltinQuestions.md b/Docs/BuiltinQuestions.md index bd5bd9bfc4..3390fe074b 100644 --- a/Docs/BuiltinQuestions.md +++ b/Docs/BuiltinQuestions.md @@ -68,6 +68,9 @@ This is a special layer - data is not sourced from OpenStreetMap - [preset_description](#preset_description) - [brand](#brand) - [indoor](#indoor) + - [seating](#seating) + - [maxstay](#maxstay) + - [name](#name) 2. [Filters](#filters) ## Supported attributes @@ -109,6 +112,8 @@ This is a special layer - data is not sourced from OpenStreetMap | [shower](https://wiki.openstreetmap.org/wiki/Key:shower) | Multiple choice | [hot](https://wiki.openstreetmap.org/wiki/Tag:shower%3Dhot) [cold](https://wiki.openstreetmap.org/wiki/Tag:shower%3Dcold) [yes](https://wiki.openstreetmap.org/wiki/Tag:shower%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:shower%3Dno) | | [brand](https://wiki.openstreetmap.org/wiki/Key:brand) | [string](../SpecialInputElements.md#string) | | | [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) | +| [maxstay](https://wiki.openstreetmap.org/wiki/Key:maxstay) | [pfloat](../SpecialInputElements.md#pfloat) | [unlimited](https://wiki.openstreetmap.org/wiki/Tag:maxstay%3Dunlimited) | +| [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | | ### questions Show the questions block at this location @@ -549,6 +554,25 @@ The question is `Is this object located indoors?` - *This object is located indoors* is shown if with indoor=yes - *This object is located outdoors* is shown if with indoor=no +### seating + +The question is `What kind of seating does {title()} have?` + + - *This place has outdoor seating* is shown if with outdoor_seating=yes. Unselecting this answer will add outdoor_seating=no + - *This place has indoor seating* is shown if with indoor_seating=yes. Unselecting this answer will add indoor_seating=no + +### maxstay + +The question is `What is the maximum amount of time one is allowed to stay here?` +*One can stay at most {canonical(maxstay)}* is shown if `maxstay` is set + + - *There is no limit to the amount of time one can stay here* is shown if with maxstay=unlimited + +### name + +The question is `What is the name of this place?` +*{name}* is shown if `name` is set + ## Filters | id | question | osmTags | diff --git a/Docs/ELI-overview.md b/Docs/ELI-overview.md index d68ac40f70..cdb2394e3e 100644 --- a/Docs/ELI-overview.md +++ b/Docs/ELI-overview.md @@ -309,6 +309,8 @@ This table gives a summary of ids, names and other metainformation. [See the onl | Tours-Orthophoto-2008_2010 | Tours - Orthophotos 2008-2010 | historicphoto | | Orthophoto Tour(s) Plus 2008 | | fr.dpt.84.2010 | Vaucluse 2010 | historicphoto | | ORTHO 2010 © PACA-04-05-84 | | Vercors-Orthophotos-1999 | Vercors (Réserve naturelle des Hauts-Plateaux du Vercors) - Orthophoto - 1999 - 1 m | historicphoto | | Parc Naturel Régional du Vercors | +| EA_LIDAR_DSM_1m_2022 | EA LiDAR Digital Surface Model 1m (2022) | elevation | | Environment Agency | +| EA_LIDAR_DTM_1m_2022 | EA LiDAR Digital Terrain Model 1m (2022) | elevation | | Environment Agency | | Hampshire-Aerial-FCIR | Hampshire Aerial FCIR | photo | | | | Hampshire-Aerial-RGB | Hampshire Aerial RGB | photo | | | | NLS-OS-NatGrid-11250-1940-60 | NLS - OS 1:1,250 National Grid Maps, 1940s-1960s | historicmap | | National Library of Scotland Historic Maps | @@ -519,6 +521,7 @@ This table gives a summary of ids, names and other metainformation. [See the onl | UkraineVinnytsiaTG2021 | Ukraine - Vinnytsia TG 2021 | photo | | © Вінницька міська рада | | Canvec_French | Canvec - French | map | | | | Canvec | Canvec - English | map | | | +| Toronto-Imagery-Most-Current-Year | Toronto Latest Orthoimagery | photo | | Contains information licensed under the Open Government Licence – Toronto | | Geobase_Roads_French | Geobase Roads - French | other | | | | Geobase_Roads | Geobase Roads - English | other | | | | canaan_drone_red_cross_201712 | Canaan - American Red Cross, Dec-2017 | photo | | American Red Cross | @@ -791,7 +794,7 @@ This table gives a summary of ids, names and other metainformation. [See the onl | DVRPC_2020_MontgomeryPA | DVRPC Orthoimagery 2020 - Montgomery County (1ft) | photo | | Delaware Valley Regional Planning Commission | | DVRPC_2020_PhiladelphiaPA | DVRPC Orthoimagery 2020 - Philadelphia County (1ft) | photo | | Delaware Valley Regional Planning Commission | | PEMA_Orthoimagery | PEMA Orthoimagery (2018-2020) | historicphoto | | Pennsylvania Emergency Management Agency | -| PEMA_Orthoimagery_2022 | PEMA Orthoimagery (Western) [2022] | photo | ⭐ | Pennsylvania Emergency Management Agency | +| PEMA_Orthoimagery_2023 | PEMA Orthoimagery Cycle 2 (2021-2023) | photo | | Pennsylvania Emergency Management Agency | | Philadelphia_Ortho_2020 | Philadelphia Orthoimagery 2020 (3in) | historicphoto | | City of Philadelphia | | Philadelphia_Ortho_2022 | Philadelphia Orthoimagery 2022 (2in) | historicphoto | | City of Philadelphia | | Philadelphia_Ortho_2023 | Philadelphia Orthoimagery 2023 | photo | ⭐ | City of Philadelphia | diff --git a/Docs/Layers/aerialway.md b/Docs/Layers/aerialway.md index b814842ad8..049a486cca 100644 --- a/Docs/Layers/aerialway.md +++ b/Docs/Layers/aerialway.md @@ -2,7 +2,7 @@ # aerialway -Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines. +Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines. - This layer is shown at zoomlevel **11** and higher @@ -67,9 +67,9 @@ The question is `What type of aerialway is this?` - *A drag lift with T-shaped carriers for two passengers at a time* is shown if with aerialway=t-bar - *A drag lift with L-shaped bars for a single passenger at a time* is shown if with aerialway=j-bar - *A drag lift with a platter to drag a single passenger at a time* is shown if with aerialway=platter - - *A tow line which which drags skieers* is shown if with aerialway=rope_tow + - *A tow line which skiers hold on to or attach themselves onto* is shown if with aerialway=rope_tow - *A magic carpet (a conveyor belt on the ground)* is shown if with aerialway=magic_carpet - - *A zip line. (A touristical attraction where adventurous people go down at high speeds) * is shown if with aerialway=zip_line + - *A zip line. (A touristic attraction where adventurous people go down at high speeds)* is shown if with aerialway=zip_line ### duration diff --git a/Docs/Layers/animal_shelter.md b/Docs/Layers/animal_shelter.md index 46c7cb81ba..aa41fd60b2 100644 --- a/Docs/Layers/animal_shelter.md +++ b/Docs/Layers/animal_shelter.md @@ -2,7 +2,7 @@ # animal_shelter -An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres. +An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres. - This layer is shown at zoomlevel **0** and higher diff --git a/Docs/Layers/assisted_repair.md b/Docs/Layers/assisted_repair.md index 65afedb66b..78f0b02451 100644 --- a/Docs/Layers/assisted_repair.md +++ b/Docs/Layers/assisted_repair.md @@ -2,7 +2,7 @@ # assisted_repair -A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles. +A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles. - This layer is shown at zoomlevel **1** and higher diff --git a/Docs/Layers/bbq.md b/Docs/Layers/bbq.md index f74231d3cb..e008f4ac0c 100644 --- a/Docs/Layers/bbq.md +++ b/Docs/Layers/bbq.md @@ -57,30 +57,30 @@ _This tagrendering has no question and is thus read-only_ ### access -The question is `What is the permitted access?` +The question is `Who is allowed to use this barbecue?` - - *Public* is shown if with access=yes - - *No access* is shown if with access=no - - *Private* is shown if with access=private - - *Access until revoked* is shown if with access=permissive - - *Access only for customers* is shown if with access=customers - - *Access only for authorized persons* is shown if with access=permit + - *This barbecue can be used by anyone* is shown if with access=yes + - *This barbecue can't be used by anyone* is shown if with access=no + - *This barbecue is private* is shown if with access=private + - *This barbecue can be used by anyone, but the owner can revoke access at any time* is shown if with access=permissive + - *This barbecue can only be used by customers* is shown if with access=customers + - *This barbecue can only be used by authorized persons* is shown if with access=permit ### covered -The question is `Is the grill covered?` +The question is `Is this barbecue covered?` - - *The grill is not covered* is shown if with covered=no - - *The grill is covered* is shown if with covered=yes + - *This barbecue is not covered* is shown if with covered=no + - *This barbecue is covered* is shown if with covered=yes ### fuel -The question is `How ist the grill fueled?` +The question is `How is this barbecue fuelled?` - - *Wood* is shown if with fuel=wood - - *Charcoal* is shown if with fuel=charcoal - - *Electric* is shown if with fuel=electric - - *Gas* is shown if with fuel=gas + - *This barbecue uses wood as fuel* is shown if with fuel=wood + - *This barbecue uses charcoal as fuel* is shown if with fuel=charcoal + - *This barbecue is powered by electricity* is shown if with fuel=electric + - *This barbecue uses gas as fuel* is shown if with fuel=gas ### leftover-questions diff --git a/Docs/Layers/beehive.md b/Docs/Layers/beehive.md new file mode 100644 index 0000000000..847f70d698 --- /dev/null +++ b/Docs/Layers/beehive.md @@ -0,0 +1,83 @@ +[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources) + +# beehive + +Layer showing beehives + + - This layer is shown at zoomlevel **11** and higher + +## Table of contents + +1. [Themes using this layer](#themes-using-this-layer) +2. [Presets](#presets) +3. [Basic tags for this layer](#basic-tags-for-this-layer) +4. [Supported attributes](#supported-attributes) + - [images](#images) + - [capacity](#capacity) + - [leftover-questions](#leftover-questions) + - [move-button](#move-button) + - [delete-button](#delete-button) + - [lod](#lod) + +## Themes using this layer + + - [insects](https://mapcomplete.org/insects) + - [personal](https://mapcomplete.org/personal) + +## Presets + +The following options to create new points are included: + + - **a beehive** which has the following tags:man_made=beehive + +## Basic tags for this layer + +Elements must match the expression **man_made=beehive** + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22man_made%22%3D%22beehive%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + +## Supported attributes + +**Warning:**,this quick overview is incomplete, + +| attribute | type | values which are supported by this layer | +-----|-----|----- | +| [capacity](https://wiki.openstreetmap.org/wiki/Key:capacity) | [pnat](../SpecialInputElements.md#pnat) | [1](https://wiki.openstreetmap.org/wiki/Tag:capacity%3D1) | + +### images +This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images +_This tagrendering has no question and is thus read-only_ +*{image_carousel()}{image_upload()}* + +### capacity + +The question is `How many beehives are there?` +*There are {capacity} beehives* is shown if `capacity` is set + + - *There is 1 beehive* is shown if with capacity=1 + +### leftover-questions + +_This tagrendering has no question and is thus read-only_ +*{questions( ,)}* + +### move-button + +_This tagrendering has no question and is thus read-only_ +*{move_button()}* + +### delete-button + +_This tagrendering has no question and is thus read-only_ +*{delete_button()}* + +### lod + +_This tagrendering has no question and is thus read-only_ +*{linked_data_from_website()}* + +This tagrendering has labels +`added_by_default` + + +This document is autogenerated from [assets/layers/beehive/beehive.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/beehive/beehive.json) diff --git a/Docs/Layers/bicycle_assisted_repair_workshop.md b/Docs/Layers/bicycle_assisted_repair_workshop.md index b3e51ff63e..b3f95eae3a 100644 --- a/Docs/Layers/bicycle_assisted_repair_workshop.md +++ b/Docs/Layers/bicycle_assisted_repair_workshop.md @@ -4,7 +4,7 @@ This layer is based on [assisted_repair](../Layers/assisted_repair.md) -A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles. +A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles. - This layer is shown at zoomlevel **11** and higher diff --git a/Docs/Layers/bike_shop.md b/Docs/Layers/bike_shop.md index d6b539c3f1..820f472233 100644 --- a/Docs/Layers/bike_shop.md +++ b/Docs/Layers/bike_shop.md @@ -76,10 +76,11 @@ Elements must match **any** of the following expressions: - service:bicycle:repair=yes - service:bicycle:retail=yes + - service:bicycle:second_hand=yes - shop=bicycle - shop=sports & (sport=bicycle | sport=cycling | sport=) & service:bicycle:retail!=no & service:bicycle:repair!=no -[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22service%3Abicycle%3Arepair%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22service%3Abicycle%3Aretail%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22bicycle%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B%22sport%22%3D%22bicycle%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B%22sport%22%3D%22cycling%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B!%22sport%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22service%3Abicycle%3Arepair%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22service%3Abicycle%3Aretail%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22service%3Abicycle%3Asecond_hand%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22bicycle%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B%22sport%22%3D%22bicycle%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B%22sport%22%3D%22cycling%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B!%22sport%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) ## Supported attributes diff --git a/Docs/Layers/brothel.md b/Docs/Layers/brothel.md index 4b01042701..223ef5c408 100644 --- a/Docs/Layers/brothel.md +++ b/Docs/Layers/brothel.md @@ -2,7 +2,7 @@ # brothel -An establishment specifically dedicated to prostitution. +An establishment specifically dedicated to prostitution. - This layer is shown at zoomlevel **6** and higher diff --git a/Docs/Layers/cafe_pub.md b/Docs/Layers/cafe_pub.md index e28effae91..22d9f11ed8 100644 --- a/Docs/Layers/cafe_pub.md +++ b/Docs/Layers/cafe_pub.md @@ -26,6 +26,7 @@ A layer showing cafés and pubs where one can gather around a drink. The layer a - [wheelchair-access](#wheelchair-access) - [smoking](#smoking) - [service:electricity](#serviceelectricity) + - [seating](#seating) - [dog-access](#dog-access) - [internet](#internet) - [internet-fee](#internet-fee) @@ -202,6 +203,13 @@ The question is `Does this amenity have electrical outlets, available to custome - *There are no sockets available indoors to customers, but charging might be possible if the staff is asked* is shown if with service:electricity=ask - *There are a no domestic sockets available to customers seated indoors* is shown if with service:electricity=no +### seating + +The question is `What kind of seating does {title()} have?` + + - *This place has outdoor seating* is shown if with outdoor_seating=yes. Unselecting this answer will add outdoor_seating=no + - *This place has indoor seating* is shown if with indoor_seating=yes. Unselecting this answer will add indoor_seating=no + ### dog-access The question is `Are dogs allowed in this business?` @@ -299,6 +307,14 @@ This tagrendering has labels -----|-----|----- | | has_electricity.0 | Offers electricity | service:electricity=yes | +| id | question | osmTags | +-----|-----|----- | +| outdoor_seating.0 | Has outdoor seating | outdoor_seating=yes | + +| id | question | osmTags | +-----|-----|----- | +| indoor_seating.0 | Has indoor seating | indoor_seating=yes | + | id | question | osmTags | -----|-----|----- | | dogs.0 | *No preference towards dogs* (default) | | diff --git a/Docs/Layers/charging_station.md b/Docs/Layers/charging_station.md index 49c4f42cbc..2fc10525b6 100644 --- a/Docs/Layers/charging_station.md +++ b/Docs/Layers/charging_station.md @@ -1262,9 +1262,9 @@ This tagrendering is only visible in the popup if the following condition is met The question is `What is the maximum amount of time one is allowed to stay here?` *One can stay at most {canonical(maxstay)}* is shown if `maxstay` is set - - *No timelimit on leaving your vehicle here* is shown if with maxstay=unlimited + - *There is no limit to the amount of time one can stay here* is shown if with maxstay=unlimited -This tagrendering is only visible in the popup if the following condition is met: bus=yes | hgv=yes | motorcar=yes | maxstay~.+ +This tagrendering is only visible in the popup if the following condition is met: bus=yes | hgv=yes | motorcar=yes ### Network diff --git a/Docs/Layers/charging_station_ebikes.md b/Docs/Layers/charging_station_ebikes.md index 54325ea57d..584938b15f 100644 --- a/Docs/Layers/charging_station_ebikes.md +++ b/Docs/Layers/charging_station_ebikes.md @@ -1251,9 +1251,9 @@ This tagrendering is only visible in the popup if the following condition is met The question is `What is the maximum amount of time one is allowed to stay here?` *One can stay at most {canonical(maxstay)}* is shown if `maxstay` is set - - *No timelimit on leaving your vehicle here* is shown if with maxstay=unlimited + - *There is no limit to the amount of time one can stay here* is shown if with maxstay=unlimited -This tagrendering is only visible in the popup if the following condition is met: bus=yes | hgv=yes | motorcar=yes | maxstay~.+ +This tagrendering is only visible in the popup if the following condition is met: bus=yes | hgv=yes | motorcar=yes ### Network diff --git a/Docs/Layers/cinema.md b/Docs/Layers/cinema.md index 5ea4055fbf..f893b8e6d4 100644 --- a/Docs/Layers/cinema.md +++ b/Docs/Layers/cinema.md @@ -2,7 +2,7 @@ # cinema - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US +A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US. - This layer is shown at zoomlevel **10** and higher diff --git a/Docs/Layers/climbing_gym.md b/Docs/Layers/climbing_gym.md index fe3ac70c8a..7d9cdfaa49 100644 --- a/Docs/Layers/climbing_gym.md +++ b/Docs/Layers/climbing_gym.md @@ -27,6 +27,8 @@ A climbing gym - [toprope](#toprope) - [shoe_rental](#shoe_rental) - [harness_rental](#harness_rental) + - [auto_belay_toprope](#auto_belay_toprope) + - [auto_belay_lead](#auto_belay_lead) - [belay_device_rental](#belay_device_rental) - [rope_rental](#rope_rental) - [average_length](#average_length) @@ -59,9 +61,9 @@ The following options to create new points are included: Elements must match **all** of the following expressions: 0. sport=climbing -1. leisure=sports_centre +1. leisure=sports_centre | leisure=sports_hall -[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22sport%22%3D%22climbing%22%5D%5B%22leisure%22%3D%22sports_centre%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22sport%22%3D%22climbing%22%5D%5B%22leisure%22%3D%22sports_centre%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22sport%22%3D%22climbing%22%5D%5B%22leisure%22%3D%22sports_hall%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) ## Supported attributes @@ -80,6 +82,8 @@ Elements must match **all** of the following expressions: | [climbing:toprope](https://wiki.openstreetmap.org/wiki/Key:climbing:toprope) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:climbing:toprope%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:climbing:toprope%3Dno) | | [service:climbing_shoes:rental](https://wiki.openstreetmap.org/wiki/Key:service:climbing_shoes:rental) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:climbing_shoes:rental%3Dyes) [yes](https://wiki.openstreetmap.org/wiki/Tag:service:climbing_shoes:rental%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:climbing_shoes:rental%3Dno) | | [service:climbing_harness:rental](https://wiki.openstreetmap.org/wiki/Key:service:climbing_harness:rental) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:climbing_harness:rental%3Dyes) [yes](https://wiki.openstreetmap.org/wiki/Tag:service:climbing_harness:rental%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:climbing_harness:rental%3Dno) | +| [climbing:autobelay:toprope](https://wiki.openstreetmap.org/wiki/Key:climbing:autobelay:toprope) | [nat](../SpecialInputElements.md#nat) | [no](https://wiki.openstreetmap.org/wiki/Tag:climbing:autobelay:toprope%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:climbing:autobelay:toprope%3Dyes) [all](https://wiki.openstreetmap.org/wiki/Tag:climbing:autobelay:toprope%3Dall) [only](https://wiki.openstreetmap.org/wiki/Tag:climbing:autobelay:toprope%3Donly) | +| [climbing:autobelay:sport](https://wiki.openstreetmap.org/wiki/Key:climbing:autobelay:sport) | [nat](../SpecialInputElements.md#nat) | [no](https://wiki.openstreetmap.org/wiki/Tag:climbing:autobelay:sport%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:climbing:autobelay:sport%3Dyes) [all](https://wiki.openstreetmap.org/wiki/Tag:climbing:autobelay:sport%3Dall) | | [service:climbing_rope:rental](https://wiki.openstreetmap.org/wiki/Key:service:climbing_rope:rental) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:climbing_rope:rental%3Dyes) [yes](https://wiki.openstreetmap.org/wiki/Tag:service:climbing_rope:rental%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:climbing_rope:rental%3Dno) | | [climbing:length](https://wiki.openstreetmap.org/wiki/Key:climbing:length) | [pfloat](../SpecialInputElements.md#pfloat) | | | [climbing:grade:french:min](https://wiki.openstreetmap.org/wiki/Key:climbing:grade:french:min) | [string](../SpecialInputElements.md#string) | | @@ -187,7 +191,7 @@ The question is `Is toprope climbing possible here?` ### shoe_rental -The question is `Can one rent climbing shoes here?` +The question is `Can one rent climbing shoes here to use in the gym?` - *Climbing shoes can be borrowed for free here* is shown if with service:climbing_shoes:rental=yes & service:climbing_shoes:rental:fee=no - *Climbing shoes can be rented here for {service:climbing_shoes:rental:charge}* is shown if with service:climbing_shoes:rental=yes & service:climbing_shoes:rental:charge~.+. _This option cannot be chosen as answer_ @@ -196,16 +200,41 @@ The question is `Can one rent climbing shoes here?` ### harness_rental -The question is `Can one rent a climbing harness here?` +The question is `Can one rent a climbing harness here to use in the gym?` - *A climbing harness can be borrowed for free here* is shown if with service:climbing_harness:rental=yes & service:climbing_harness:rental:fee=no - *A climbing harness can be rented here for {service:climbing_harness:rental:charge}* is shown if with service:climbing_harness:rental=yes & service:climbing_harness:rental:charge~.+. _This option cannot be chosen as answer_ - *A climbing harness can be rented here* is shown if with service:climbing_harness:rental=yes - *A climbing harness can not be rented here* is shown if with service:climbing_harness:rental=no +This tagrendering is only visible in the popup if the following condition is met: (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no) | (climbing:speed~.+ & climbing:speed!=no) + +### auto_belay_toprope + +The question is `Are there auto belays for top roping here?` +*There are {climbing:autobelay:toprope} auto belay devices for top roping* is shown if `climbing:autobelay:toprope` is set + + - *There are no auto belays for top roping* is shown if with climbing:autobelay:toprope=no + - *There are a number of auto belays for top roping* is shown if with climbing:autobelay:toprope=yes + - *There is an auto belay for every top rope route but manual belaying is also possible* is shown if with climbing:autobelay:toprope=all + - *Top rope routes can only be climbed on auto belay* is shown if with climbing:autobelay:toprope=only + +This tagrendering is only visible in the popup if the following condition is met: climbing:toprope~.+ & climbing:toprope!=no + +### auto_belay_lead + +The question is `Are there auto belays for lead climbing here?` +*There are {climbing:autobelay:sport} auto belays for lead climbing* is shown if `climbing:autobelay:sport` is set + + - *There are no auto belays for lead climbing* is shown if with climbing:autobelay:sport=no + - *There is a number of auto belays for lead climbing* is shown if with climbing:autobelay:sport=yes + - *There is an auto belay for every lead climbing route* is shown if with climbing:autobelay:sport=all + +This tagrendering is only visible in the popup if the following condition is met: climbing:sport~.+ & climbing:sport!=no + ### belay_device_rental -The question is `Can one rent a belay device here?` +The question is `Can one rent a belay device here to use in the gym?` - *Belay devices are provided at each rope* is shown if with service:climbing_belay_device:provided_at_each_rope=yes - *A belay device can be borrowed for free here* is shown if with service:climbing_belay_device:rental=yes & service:climbing_belay_device:rental:fee=no @@ -213,9 +242,11 @@ The question is `Can one rent a belay device here?` - *A belay device can be rented here* is shown if with service:climbing_belay_device:rental=yes - *A belay device can not be rented here* is shown if with service:climbing_belay_device:rental=no +This tagrendering is only visible in the popup if the following condition is met: (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no) + ### rope_rental -The question is `Can one rent a climbing rope here?` +The question is `Can one rent a climbing rope here to use in the gym?` - *A climbing rope can be borrowed for free here* is shown if with service:climbing_rope:rental=yes & service:climbing_rope:rental:fee=no - *A climbing rope can be rented here for {service:climbing_rope:rental:charge}* is shown if with service:climbing_rope:rental=yes & service:climbing_rope:rental:charge~.+. _This option cannot be chosen as answer_ @@ -242,7 +273,7 @@ This tagrendering is only visible in the popup if the following condition is met ### max_bolts The question is `How many bolts do routes in {title()} have at most?` -*The sport climbing routes here have at most {climbing:bolts:max} bolts.
This is without relays and indicates how much quickdraws a climber needs
* is shown if `climbing:bolts:max` is set +*The sport climbing routes here have at most {climbing:bolts:max} bolts.
This is without belay stations and indicates how much quickdraws a climber needs.
* is shown if `climbing:bolts:max` is set ### Speed climbing? diff --git a/Docs/Layers/climbing_route.md b/Docs/Layers/climbing_route.md index 5eb5d803c2..6bf5b5f7fd 100644 --- a/Docs/Layers/climbing_route.md +++ b/Docs/Layers/climbing_route.md @@ -80,7 +80,7 @@ The question is `What is the grade of this climbing route according to the frenc ### bolts The question is `How many bolts does this route have before reaching the anchor?` -*This route has {climbing:bolts} bolts
This is without relays and indicates how much quickdraws a climber needs
* is shown if `climbing:bolts` is set +*This route has {climbing:bolts} bolts.
This is without belay stations and indicates how much quickdraws a climber needs.
* is shown if `climbing:bolts` is set - *This route is not bolted* is shown if with climbing:bolted=no diff --git a/Docs/Layers/dogfoodb.md b/Docs/Layers/dogfoodb.md index 20bb598761..72fdc6bfc4 100644 --- a/Docs/Layers/dogfoodb.md +++ b/Docs/Layers/dogfoodb.md @@ -33,6 +33,9 @@ A layer showing restaurants and fast-food amenities (with a special rendering fo - [Reservation](#reservation) - [Takeaway](#takeaway) - [delivery](#delivery) + - [drive-through](#drive-through) + - [drive-through-opening_hours](#drive-through-opening_hours) + - [Drive-through opening hours](#drive-through-opening-hours) - [Vegetarian (no friture)](#vegetarian-(no-friture)) - [Vegan (no friture)](#vegan-(no-friture)) - [halal (no friture)](#halal-(no-friture)) @@ -47,6 +50,7 @@ A layer showing restaurants and fast-food amenities (with a special rendering fo - [lactose_free](#lactose_free) - [smoking](#smoking) - [service:electricity](#serviceelectricity) + - [seating](#seating) - [dog-access](#dog-access) - [internet](#internet) - [internet-fee](#internet-fee) @@ -89,6 +93,8 @@ Elements must match **all** of the following expressions: | [reservation](https://wiki.openstreetmap.org/wiki/Key:reservation) | Multiple choice | [required](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drequired) [recommended](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drecommended) [yes](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dno) | | [takeaway](https://wiki.openstreetmap.org/wiki/Key:takeaway) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dno) | | [delivery](https://wiki.openstreetmap.org/wiki/Key:delivery) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dno) | +| [drive_through](https://wiki.openstreetmap.org/wiki/Key:drive_through) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dno) | +| [opening_hours:drive_through](https://wiki.openstreetmap.org/wiki/Key:opening_hours:drive_through) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://wiki.openstreetmap.org/wiki/Tag:opening_hours:drive_through%3D) | | [diet:vegetarian](https://wiki.openstreetmap.org/wiki/Key:diet:vegetarian) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Don_demand) | | [diet:vegan](https://wiki.openstreetmap.org/wiki/Key:diet:vegan) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Don_demand) | | [diet:halal](https://wiki.openstreetmap.org/wiki/Key:diet:halal) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Donly) | @@ -272,6 +278,24 @@ The question is `Does {title()} deliver food to your home?` - *This business does home delivery (possibly via a third party)* is shown if with delivery=yes - *This business does not deliver at home* is shown if with delivery=no +### drive-through + +The question is `Does this fast-food restaurant have a drive-through?` + + - *This fast-food restaurant has a drive-through* is shown if with drive_through=yes + - *This fast-food restaurant does not have a drive-through* is shown if with drive_through=no + +This tagrendering is only visible in the popup if the following condition is met: amenity=fast_food + +### drive-through-opening_hours + +The question is `What are the opening hours of the drive-through?` +*

Drive-through opening hours

{opening_hours_table(opening_hours:drive_through)}* is shown if `opening_hours:drive_through` is set + + - *The opening hours of the drive-through are the same as the restaurant* is shown if with opening_hours:drive_through= + +This tagrendering is only visible in the popup if the following condition is met: drive_through=yes + ### Vegetarian (no friture) The question is `Does this restaurant have a vegetarian option?` @@ -413,6 +437,13 @@ The question is `Does this amenity have electrical outlets, available to custome - *There are no sockets available indoors to customers, but charging might be possible if the staff is asked* is shown if with service:electricity=ask - *There are a no domestic sockets available to customers seated indoors* is shown if with service:electricity=no +### seating + +The question is `What kind of seating does {title()} have?` + + - *This place has outdoor seating* is shown if with outdoor_seating=yes. Unselecting this answer will add outdoor_seating=no + - *This place has indoor seating* is shown if with indoor_seating=yes. Unselecting this answer will add indoor_seating=no + ### dog-access The question is `Are dogs allowed in this business?` @@ -527,6 +558,14 @@ This tagrendering has labels -----|-----|----- | | lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited | +| id | question | osmTags | +-----|-----|----- | +| outdoor_seating.0 | Has outdoor seating | outdoor_seating=yes | + +| id | question | osmTags | +-----|-----|----- | +| indoor_seating.0 | Has indoor seating | indoor_seating=yes | + | id | question | osmTags | -----|-----|----- | | accepts_cash.0 | Accepts cash | payment:cash=yes | diff --git a/Docs/Layers/food.md b/Docs/Layers/food.md index 26775681dc..0bc7b65564 100644 --- a/Docs/Layers/food.md +++ b/Docs/Layers/food.md @@ -32,6 +32,9 @@ A layer showing restaurants and fast-food amenities (with a special rendering fo - [Reservation](#reservation) - [Takeaway](#takeaway) - [delivery](#delivery) + - [drive-through](#drive-through) + - [drive-through-opening_hours](#drive-through-opening_hours) + - [Drive-through opening hours](#drive-through-opening-hours) - [Vegetarian (no friture)](#vegetarian-(no-friture)) - [Vegan (no friture)](#vegan-(no-friture)) - [halal (no friture)](#halal-(no-friture)) @@ -46,6 +49,7 @@ A layer showing restaurants and fast-food amenities (with a special rendering fo - [lactose_free](#lactose_free) - [smoking](#smoking) - [service:electricity](#serviceelectricity) + - [seating](#seating) - [dog-access](#dog-access) - [internet](#internet) - [internet-fee](#internet-fee) @@ -104,6 +108,8 @@ Elements must match **any** of the following expressions: | [reservation](https://wiki.openstreetmap.org/wiki/Key:reservation) | Multiple choice | [required](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drequired) [recommended](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drecommended) [yes](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dno) | | [takeaway](https://wiki.openstreetmap.org/wiki/Key:takeaway) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dno) | | [delivery](https://wiki.openstreetmap.org/wiki/Key:delivery) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dno) | +| [drive_through](https://wiki.openstreetmap.org/wiki/Key:drive_through) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dno) | +| [opening_hours:drive_through](https://wiki.openstreetmap.org/wiki/Key:opening_hours:drive_through) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://wiki.openstreetmap.org/wiki/Tag:opening_hours:drive_through%3D) | | [diet:vegetarian](https://wiki.openstreetmap.org/wiki/Key:diet:vegetarian) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Don_demand) | | [diet:vegan](https://wiki.openstreetmap.org/wiki/Key:diet:vegan) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Don_demand) | | [diet:halal](https://wiki.openstreetmap.org/wiki/Key:diet:halal) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Donly) | @@ -287,6 +293,24 @@ The question is `Does {title()} deliver food to your home?` - *This business does home delivery (possibly via a third party)* is shown if with delivery=yes - *This business does not deliver at home* is shown if with delivery=no +### drive-through + +The question is `Does this fast-food restaurant have a drive-through?` + + - *This fast-food restaurant has a drive-through* is shown if with drive_through=yes + - *This fast-food restaurant does not have a drive-through* is shown if with drive_through=no + +This tagrendering is only visible in the popup if the following condition is met: amenity=fast_food + +### drive-through-opening_hours + +The question is `What are the opening hours of the drive-through?` +*

Drive-through opening hours

{opening_hours_table(opening_hours:drive_through)}* is shown if `opening_hours:drive_through` is set + + - *The opening hours of the drive-through are the same as the restaurant* is shown if with opening_hours:drive_through= + +This tagrendering is only visible in the popup if the following condition is met: drive_through=yes + ### Vegetarian (no friture) The question is `Does this restaurant have a vegetarian option?` @@ -428,6 +452,13 @@ The question is `Does this amenity have electrical outlets, available to custome - *There are no sockets available indoors to customers, but charging might be possible if the staff is asked* is shown if with service:electricity=ask - *There are a no domestic sockets available to customers seated indoors* is shown if with service:electricity=no +### seating + +The question is `What kind of seating does {title()} have?` + + - *This place has outdoor seating* is shown if with outdoor_seating=yes. Unselecting this answer will add outdoor_seating=no + - *This place has indoor seating* is shown if with indoor_seating=yes. Unselecting this answer will add indoor_seating=no + ### dog-access The question is `Are dogs allowed in this business?` @@ -542,6 +573,14 @@ This tagrendering has labels -----|-----|----- | | lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited | +| id | question | osmTags | +-----|-----|----- | +| outdoor_seating.0 | Has outdoor seating | outdoor_seating=yes | + +| id | question | osmTags | +-----|-----|----- | +| indoor_seating.0 | Has indoor seating | indoor_seating=yes | + | id | question | osmTags | -----|-----|----- | | accepts_cash.0 | Accepts cash | payment:cash=yes | diff --git a/Docs/Layers/food_glutenfree.md b/Docs/Layers/food_glutenfree.md index 27a11100dc..1bd4c62b9f 100644 --- a/Docs/Layers/food_glutenfree.md +++ b/Docs/Layers/food_glutenfree.md @@ -34,6 +34,9 @@ A layer showing restaurants and fast-food amenities (with a special rendering fo - [Reservation](#reservation) - [Takeaway](#takeaway) - [delivery](#delivery) + - [drive-through](#drive-through) + - [drive-through-opening_hours](#drive-through-opening_hours) + - [Drive-through opening hours](#drive-through-opening-hours) - [Vegetarian (no friture)](#vegetarian-(no-friture)) - [Vegan (no friture)](#vegan-(no-friture)) - [halal (no friture)](#halal-(no-friture)) @@ -47,6 +50,7 @@ A layer showing restaurants and fast-food amenities (with a special rendering fo - [lactose_free](#lactose_free) - [smoking](#smoking) - [service:electricity](#serviceelectricity) + - [seating](#seating) - [dog-access](#dog-access) - [internet](#internet) - [internet-fee](#internet-fee) @@ -91,6 +95,8 @@ Elements must match **all** of the following expressions: | [reservation](https://wiki.openstreetmap.org/wiki/Key:reservation) | Multiple choice | [required](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drequired) [recommended](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drecommended) [yes](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dno) | | [takeaway](https://wiki.openstreetmap.org/wiki/Key:takeaway) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dno) | | [delivery](https://wiki.openstreetmap.org/wiki/Key:delivery) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dno) | +| [drive_through](https://wiki.openstreetmap.org/wiki/Key:drive_through) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dno) | +| [opening_hours:drive_through](https://wiki.openstreetmap.org/wiki/Key:opening_hours:drive_through) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://wiki.openstreetmap.org/wiki/Tag:opening_hours:drive_through%3D) | | [diet:vegetarian](https://wiki.openstreetmap.org/wiki/Key:diet:vegetarian) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Don_demand) | | [diet:vegan](https://wiki.openstreetmap.org/wiki/Key:diet:vegan) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Don_demand) | | [diet:halal](https://wiki.openstreetmap.org/wiki/Key:diet:halal) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Donly) | @@ -285,6 +291,24 @@ The question is `Does {title()} deliver food to your home?` - *This business does home delivery (possibly via a third party)* is shown if with delivery=yes - *This business does not deliver at home* is shown if with delivery=no +### drive-through + +The question is `Does this fast-food restaurant have a drive-through?` + + - *This fast-food restaurant has a drive-through* is shown if with drive_through=yes + - *This fast-food restaurant does not have a drive-through* is shown if with drive_through=no + +This tagrendering is only visible in the popup if the following condition is met: amenity=fast_food + +### drive-through-opening_hours + +The question is `What are the opening hours of the drive-through?` +*

Drive-through opening hours

{opening_hours_table(opening_hours:drive_through)}* is shown if `opening_hours:drive_through` is set + + - *The opening hours of the drive-through are the same as the restaurant* is shown if with opening_hours:drive_through= + +This tagrendering is only visible in the popup if the following condition is met: drive_through=yes + ### Vegetarian (no friture) The question is `Does this restaurant have a vegetarian option?` @@ -414,6 +438,13 @@ The question is `Does this amenity have electrical outlets, available to custome - *There are no sockets available indoors to customers, but charging might be possible if the staff is asked* is shown if with service:electricity=ask - *There are a no domestic sockets available to customers seated indoors* is shown if with service:electricity=no +### seating + +The question is `What kind of seating does {title()} have?` + + - *This place has outdoor seating* is shown if with outdoor_seating=yes. Unselecting this answer will add outdoor_seating=no + - *This place has indoor seating* is shown if with indoor_seating=yes. Unselecting this answer will add indoor_seating=no + ### dog-access The question is `Are dogs allowed in this business?` @@ -528,6 +559,14 @@ This tagrendering has labels -----|-----|----- | | lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited | +| id | question | osmTags | +-----|-----|----- | +| outdoor_seating.0 | Has outdoor seating | outdoor_seating=yes | + +| id | question | osmTags | +-----|-----|----- | +| indoor_seating.0 | Has indoor seating | indoor_seating=yes | + | id | question | osmTags | -----|-----|----- | | accepts_cash.0 | Accepts cash | payment:cash=yes | diff --git a/Docs/Layers/food_lactosefree.md b/Docs/Layers/food_lactosefree.md index 03886768d0..2634e2fe04 100644 --- a/Docs/Layers/food_lactosefree.md +++ b/Docs/Layers/food_lactosefree.md @@ -34,6 +34,9 @@ A layer showing restaurants and fast-food amenities (with a special rendering fo - [Reservation](#reservation) - [Takeaway](#takeaway) - [delivery](#delivery) + - [drive-through](#drive-through) + - [drive-through-opening_hours](#drive-through-opening_hours) + - [Drive-through opening hours](#drive-through-opening-hours) - [Vegetarian (no friture)](#vegetarian-(no-friture)) - [Vegan (no friture)](#vegan-(no-friture)) - [halal (no friture)](#halal-(no-friture)) @@ -47,6 +50,7 @@ A layer showing restaurants and fast-food amenities (with a special rendering fo - [gluten_free](#gluten_free) - [smoking](#smoking) - [service:electricity](#serviceelectricity) + - [seating](#seating) - [dog-access](#dog-access) - [internet](#internet) - [internet-fee](#internet-fee) @@ -91,6 +95,8 @@ Elements must match **all** of the following expressions: | [reservation](https://wiki.openstreetmap.org/wiki/Key:reservation) | Multiple choice | [required](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drequired) [recommended](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drecommended) [yes](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dno) | | [takeaway](https://wiki.openstreetmap.org/wiki/Key:takeaway) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dno) | | [delivery](https://wiki.openstreetmap.org/wiki/Key:delivery) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dno) | +| [drive_through](https://wiki.openstreetmap.org/wiki/Key:drive_through) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dno) | +| [opening_hours:drive_through](https://wiki.openstreetmap.org/wiki/Key:opening_hours:drive_through) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://wiki.openstreetmap.org/wiki/Tag:opening_hours:drive_through%3D) | | [diet:vegetarian](https://wiki.openstreetmap.org/wiki/Key:diet:vegetarian) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Don_demand) | | [diet:vegan](https://wiki.openstreetmap.org/wiki/Key:diet:vegan) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Don_demand) | | [diet:halal](https://wiki.openstreetmap.org/wiki/Key:diet:halal) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Donly) | @@ -285,6 +291,24 @@ The question is `Does {title()} deliver food to your home?` - *This business does home delivery (possibly via a third party)* is shown if with delivery=yes - *This business does not deliver at home* is shown if with delivery=no +### drive-through + +The question is `Does this fast-food restaurant have a drive-through?` + + - *This fast-food restaurant has a drive-through* is shown if with drive_through=yes + - *This fast-food restaurant does not have a drive-through* is shown if with drive_through=no + +This tagrendering is only visible in the popup if the following condition is met: amenity=fast_food + +### drive-through-opening_hours + +The question is `What are the opening hours of the drive-through?` +*

Drive-through opening hours

{opening_hours_table(opening_hours:drive_through)}* is shown if `opening_hours:drive_through` is set + + - *The opening hours of the drive-through are the same as the restaurant* is shown if with opening_hours:drive_through= + +This tagrendering is only visible in the popup if the following condition is met: drive_through=yes + ### Vegetarian (no friture) The question is `Does this restaurant have a vegetarian option?` @@ -414,6 +438,13 @@ The question is `Does this amenity have electrical outlets, available to custome - *There are no sockets available indoors to customers, but charging might be possible if the staff is asked* is shown if with service:electricity=ask - *There are a no domestic sockets available to customers seated indoors* is shown if with service:electricity=no +### seating + +The question is `What kind of seating does {title()} have?` + + - *This place has outdoor seating* is shown if with outdoor_seating=yes. Unselecting this answer will add outdoor_seating=no + - *This place has indoor seating* is shown if with indoor_seating=yes. Unselecting this answer will add indoor_seating=no + ### dog-access The question is `Are dogs allowed in this business?` @@ -528,6 +559,14 @@ This tagrendering has labels -----|-----|----- | | lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited | +| id | question | osmTags | +-----|-----|----- | +| outdoor_seating.0 | Has outdoor seating | outdoor_seating=yes | + +| id | question | osmTags | +-----|-----|----- | +| indoor_seating.0 | Has indoor seating | indoor_seating=yes | + | id | question | osmTags | -----|-----|----- | | accepts_cash.0 | Accepts cash | payment:cash=yes | diff --git a/Docs/Layers/friture.md b/Docs/Layers/friture.md index a99ab65a60..3cfec03893 100644 --- a/Docs/Layers/friture.md +++ b/Docs/Layers/friture.md @@ -33,6 +33,9 @@ A layer showing restaurants and fast-food amenities (with a special rendering fo - [Reservation](#reservation) - [Takeaway](#takeaway) - [delivery](#delivery) + - [drive-through](#drive-through) + - [drive-through-opening_hours](#drive-through-opening_hours) + - [Drive-through opening hours](#drive-through-opening-hours) - [Vegetarian (no friture)](#vegetarian-(no-friture)) - [Vegan (no friture)](#vegan-(no-friture)) - [halal (no friture)](#halal-(no-friture)) @@ -47,6 +50,7 @@ A layer showing restaurants and fast-food amenities (with a special rendering fo - [lactose_free](#lactose_free) - [smoking](#smoking) - [service:electricity](#serviceelectricity) + - [seating](#seating) - [dog-access](#dog-access) - [internet](#internet) - [internet-fee](#internet-fee) @@ -89,6 +93,8 @@ Elements must match **all** of the following expressions: | [reservation](https://wiki.openstreetmap.org/wiki/Key:reservation) | Multiple choice | [required](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drequired) [recommended](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drecommended) [yes](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dno) | | [takeaway](https://wiki.openstreetmap.org/wiki/Key:takeaway) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dno) | | [delivery](https://wiki.openstreetmap.org/wiki/Key:delivery) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dno) | +| [drive_through](https://wiki.openstreetmap.org/wiki/Key:drive_through) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dno) | +| [opening_hours:drive_through](https://wiki.openstreetmap.org/wiki/Key:opening_hours:drive_through) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://wiki.openstreetmap.org/wiki/Tag:opening_hours:drive_through%3D) | | [diet:vegetarian](https://wiki.openstreetmap.org/wiki/Key:diet:vegetarian) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Don_demand) | | [diet:vegan](https://wiki.openstreetmap.org/wiki/Key:diet:vegan) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Don_demand) | | [diet:halal](https://wiki.openstreetmap.org/wiki/Key:diet:halal) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Donly) | @@ -272,6 +278,24 @@ The question is `Does {title()} deliver food to your home?` - *This business does home delivery (possibly via a third party)* is shown if with delivery=yes - *This business does not deliver at home* is shown if with delivery=no +### drive-through + +The question is `Does this fast-food restaurant have a drive-through?` + + - *This fast-food restaurant has a drive-through* is shown if with drive_through=yes + - *This fast-food restaurant does not have a drive-through* is shown if with drive_through=no + +This tagrendering is only visible in the popup if the following condition is met: amenity=fast_food + +### drive-through-opening_hours + +The question is `What are the opening hours of the drive-through?` +*

Drive-through opening hours

{opening_hours_table(opening_hours:drive_through)}* is shown if `opening_hours:drive_through` is set + + - *The opening hours of the drive-through are the same as the restaurant* is shown if with opening_hours:drive_through= + +This tagrendering is only visible in the popup if the following condition is met: drive_through=yes + ### Vegetarian (no friture) The question is `Does this restaurant have a vegetarian option?` @@ -413,6 +437,13 @@ The question is `Does this amenity have electrical outlets, available to custome - *There are no sockets available indoors to customers, but charging might be possible if the staff is asked* is shown if with service:electricity=ask - *There are a no domestic sockets available to customers seated indoors* is shown if with service:electricity=no +### seating + +The question is `What kind of seating does {title()} have?` + + - *This place has outdoor seating* is shown if with outdoor_seating=yes. Unselecting this answer will add outdoor_seating=no + - *This place has indoor seating* is shown if with indoor_seating=yes. Unselecting this answer will add indoor_seating=no + ### dog-access The question is `Are dogs allowed in this business?` @@ -527,6 +558,14 @@ This tagrendering has labels -----|-----|----- | | lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited | +| id | question | osmTags | +-----|-----|----- | +| outdoor_seating.0 | Has outdoor seating | outdoor_seating=yes | + +| id | question | osmTags | +-----|-----|----- | +| indoor_seating.0 | Has indoor seating | indoor_seating=yes | + | id | question | osmTags | -----|-----|----- | | accepts_cash.0 | Accepts cash | payment:cash=yes | diff --git a/Docs/Layers/insect_hotel.md b/Docs/Layers/insect_hotel.md new file mode 100644 index 0000000000..cf0f7f0f55 --- /dev/null +++ b/Docs/Layers/insect_hotel.md @@ -0,0 +1,70 @@ +[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources) + +# insect_hotel + +Layer showing insect hotels + + - This layer is shown at zoomlevel **11** and higher + +## Table of contents + +1. [Themes using this layer](#themes-using-this-layer) +2. [Presets](#presets) +3. [Basic tags for this layer](#basic-tags-for-this-layer) +4. [Supported attributes](#supported-attributes) + - [images](#images) + - [leftover-questions](#leftover-questions) + - [move-button](#move-button) + - [delete-button](#delete-button) + - [lod](#lod) + +## Themes using this layer + + - [insects](https://mapcomplete.org/insects) + - [nature](https://mapcomplete.org/nature) + - [personal](https://mapcomplete.org/personal) + +## Presets + +The following options to create new points are included: + + - **an insect hotel** which has the following tags:man_made=insect_hotel + +## Basic tags for this layer + +Elements must match the expression **man_made=insect_hotel** + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22man_made%22%3D%22insect_hotel%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + +## Supported attributes + +### images +This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images +_This tagrendering has no question and is thus read-only_ +*{image_carousel()}{image_upload()}* + +### leftover-questions + +_This tagrendering has no question and is thus read-only_ +*{questions( ,)}* + +### move-button + +_This tagrendering has no question and is thus read-only_ +*{move_button()}* + +### delete-button + +_This tagrendering has no question and is thus read-only_ +*{delete_button()}* + +### lod + +_This tagrendering has no question and is thus read-only_ +*{linked_data_from_website()}* + +This tagrendering has labels +`added_by_default` + + +This document is autogenerated from [assets/layers/insect_hotel/insect_hotel.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/insect_hotel/insect_hotel.json) diff --git a/Docs/Layers/note.md b/Docs/Layers/note.md index 5146e9582d..2cc9dff287 100644 --- a/Docs/Layers/note.md +++ b/Docs/Layers/note.md @@ -58,7 +58,7 @@ _This tagrendering has no question and is thus read-only_ ### nearby-images _This tagrendering has no question and is thus read-only_ -*

Nearby images

The pictures below are nearby geotagged images and might be helpful to handle this note.{nearby_images(open,)}* +*

Nearby images

The pictures below are nearby geotagged images and might be helpful to handle this note.{nearby_images(open,yes)}* ### report-contributor diff --git a/Docs/Layers/parking.md b/Docs/Layers/parking.md index 9960841cf0..7ecec16810 100644 --- a/Docs/Layers/parking.md +++ b/Docs/Layers/parking.md @@ -18,6 +18,7 @@ A layer showing car parkings - [parking-type](#parking-type) - [capacity-disabled](#capacity-disabled) - [capacity](#capacity) + - [maxstay](#maxstay) - [leftover-questions](#leftover-questions) - [move-button](#move-button) - [delete-button](#delete-button) @@ -52,6 +53,7 @@ Elements must match the expression ** [parking](https://wiki.openstreetmap.org/wiki/Key:parking) | Multiple choice | [surface](https://wiki.openstreetmap.org/wiki/Tag:parking%3Dsurface) [street_side](https://wiki.openstreetmap.org/wiki/Tag:parking%3Dstreet_side) [underground](https://wiki.openstreetmap.org/wiki/Tag:parking%3Dunderground) [multi-storey](https://wiki.openstreetmap.org/wiki/Tag:parking%3Dmulti-storey) [rooftop](https://wiki.openstreetmap.org/wiki/Tag:parking%3Drooftop) [lane](https://wiki.openstreetmap.org/wiki/Tag:parking%3Dlane) [carports](https://wiki.openstreetmap.org/wiki/Tag:parking%3Dcarports) [garage_boxes](https://wiki.openstreetmap.org/wiki/Tag:parking%3Dgarage_boxes) [layby](https://wiki.openstreetmap.org/wiki/Tag:parking%3Dlayby) [sheds](https://wiki.openstreetmap.org/wiki/Tag:parking%3Dsheds) | | [capacity:disabled](https://wiki.openstreetmap.org/wiki/Key:capacity:disabled) | [pnat](../SpecialInputElements.md#pnat) | [0](https://wiki.openstreetmap.org/wiki/Tag:capacity:disabled%3D0) | | [capacity](https://wiki.openstreetmap.org/wiki/Key:capacity) | [pnat](../SpecialInputElements.md#pnat) | | +| [maxstay](https://wiki.openstreetmap.org/wiki/Key:maxstay) | [pfloat](../SpecialInputElements.md#pfloat) | [unlimited](https://wiki.openstreetmap.org/wiki/Tag:maxstay%3Dunlimited) | ### images This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images @@ -110,6 +112,13 @@ The question is `How many disabled parking spots are there at this parking?` The question is `How many parking spots are there at this parking?` *There are {capacity} parking spots* is shown if `capacity` is set +### maxstay + +The question is `What is the maximum amount of time one is allowed to stay here?` +*One can stay at most {canonical(maxstay)}* is shown if `maxstay` is set + + - *There is no limit to the amount of time one can stay here* is shown if with maxstay=unlimited + ### leftover-questions _This tagrendering has no question and is thus read-only_ diff --git a/Docs/Layers/parks_without_etymology.md b/Docs/Layers/parks_without_etymology.md new file mode 100644 index 0000000000..9dce1d4685 --- /dev/null +++ b/Docs/Layers/parks_without_etymology.md @@ -0,0 +1,110 @@ +[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources) + +# parks_without_etymology + +This layer is based on [etymology](../Layers/etymology.md) + +All objects which have an etymology known + + - This layer is shown at zoomlevel **18** and higher + +## Table of contents + +1. [Themes using this layer](#themes-using-this-layer) +2. [Basic tags for this layer](#basic-tags-for-this-layer) +3. [Supported attributes](#supported-attributes) + - [etymology-images-from-wikipedia](#etymology-images-from-wikipedia) + - [wikipedia-etymology](#wikipedia-etymology) + - [Wikipedia article of the name giver](#wikipedia-article-of-the-name-giver) + - [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) + - [simple etymology](#simple-etymology) + - [questions](#questions) + - [street-name-sign-image](#street-name-sign-image) + - [minimap](#minimap) + - [etymology_multi_apply](#etymology_multi_apply) + - [wikipedia](#wikipedia) + - [lod](#lod) + +## Themes using this layer + + - [etymology](https://mapcomplete.org/etymology) + +## Basic tags for this layer + +Elements must match **all** of the following expressions: + +0. landuse=village_green | landuse=recreation_ground | leisure=park +1. name~.+ + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22landuse%22%3D%22village_green%22%5D%5B%22name%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22landuse%22%3D%22recreation_ground%22%5D%5B%22name%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22leisure%22%3D%22park%22%5D%5B%22name%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + +## Supported attributes + +**Warning:**,this quick overview is incomplete, + +| attribute | type | values which are supported by this layer | +-----|-----|----- | +| [name:etymology:wikidata](https://wiki.openstreetmap.org/wiki/Key:name:etymology:wikidata) | [wikidata](../SpecialInputElements.md#wikidata) | | +| [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology) | [text](../SpecialInputElements.md#text) | [unknown](https://wiki.openstreetmap.org/wiki/Tag:name:etymology%3Dunknown) | + +### etymology-images-from-wikipedia + +_This tagrendering has no question and is thus read-only_ +*{image_carousel(name:etymology:wikidata)}* + +### wikipedia-etymology + +The question is `What is the Wikidata-item that this object is named after?` +*

Wikipedia article of the name giver

{wikipedia(name:etymology:wikidata):max-height:20rem}* is shown if `name:etymology:wikidata` is set + +### zoeken op inventaris onroerend erfgoed + +_This tagrendering has no question and is thus read-only_ +*Search on inventaris onroerend erfgoed* + +This tagrendering is only visible in the popup if the following condition is met: _country=be + +### simple etymology + +The question is `What is this object named after?` +*Named after {name:etymology}* is shown if `name:etymology` is set + + - *The origin of this name is unknown in all literature* is shown if with name:etymology=unknown + +### questions +Show the questions block at this location +_This tagrendering has no question and is thus read-only_ +*{questions()}* + +### street-name-sign-image + +_This tagrendering has no question and is thus read-only_ +*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* + +### minimap + +_This tagrendering has no question and is thus read-only_ +*{minimap(18, id, _same_name_ids):height:10rem}* + +### etymology_multi_apply + +_This tagrendering has no question and is thus read-only_ +*{multi_apply(_same_name_ids, name:etymology:wikidata;name:etymology, Auto-applying data on all segments with the same name, true)}* + +### wikipedia + +_This tagrendering has no question and is thus read-only_ +*A Wikipedia article about this street exists:
{wikipedia():max-height:25rem}* + +This tagrendering is only visible in the popup if the following condition is met: wikidata~.+ + +### lod + +_This tagrendering has no question and is thus read-only_ +*{linked_data_from_website()}* + +This tagrendering has labels +`added_by_default` + + +This document is autogenerated from [assets/themes/etymology/etymology.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/etymology/etymology.json) diff --git a/Docs/Layers/sports_centre.md b/Docs/Layers/sports_centre.md index c46621d7a0..c9307f543f 100644 --- a/Docs/Layers/sports_centre.md +++ b/Docs/Layers/sports_centre.md @@ -138,7 +138,7 @@ The question is `What sports are played at this venue?` - *Canoe* is shown if with sport=canoe - *Chess* is shown if with sport=chess - *Non-competitive diving* is shown if with sport=cliff_diving - - *Rock climbing* is shown if with sport=climbing + - *Climbing* is shown if with sport=climbing - *Climbing Adventure* is shown if with sport=climbing_adventure - *Cockfighting* is shown if with sport=cockfighting - *Cricket* is shown if with sport=cricket diff --git a/Docs/Layers/stairs.md b/Docs/Layers/stairs.md index da587c7bae..c5f9892116 100644 --- a/Docs/Layers/stairs.md +++ b/Docs/Layers/stairs.md @@ -42,7 +42,7 @@ Elements must match the expression ** [level](https://wiki.openstreetmap.org/wiki/Key:level) | [string](../SpecialInputElements.md#string) | [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) | -| [conveying](https://wiki.openstreetmap.org/wiki/Key:conveying) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:conveying%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:conveying%3Dno) | +| [conveying](https://wiki.openstreetmap.org/wiki/Key:conveying) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:conveying%3Dyes) [reversible](https://wiki.openstreetmap.org/wiki/Tag:conveying%3Dreversible) [no](https://wiki.openstreetmap.org/wiki/Tag:conveying%3Dno) | | [handrail](https://wiki.openstreetmap.org/wiki/Key:handrail) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:handrail%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:handrail%3Dno) | | [tactile_writing](https://wiki.openstreetmap.org/wiki/Key:tactile_writing) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_writing%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_writing%3Dno) | | [incline](https://wiki.openstreetmap.org/wiki/Key:incline) | [slope](../SpecialInputElements.md#slope) | | @@ -65,9 +65,11 @@ The question is `Between which levels are these stairs?` ### conveying -_This tagrendering has no question and is thus read-only_ +The question is `Is this an escalator?` - *This is an escalator* is shown if with conveying=yes + - *This is an escalator moving in the direction of the arrows* is shown if with conveying=forward | conveying=backward. _This option cannot be chosen as answer_ + - *This is a reversible escalator* is shown if with conveying=reversible - *This is not an escalator* is shown if with conveying=no - *This is not an escalator* is shown if with conveying=. _This option cannot be chosen as answer_ diff --git a/Docs/Layers/tree_node.md b/Docs/Layers/tree_node.md index f5d02995d7..5df29e7a0d 100644 --- a/Docs/Layers/tree_node.md +++ b/Docs/Layers/tree_node.md @@ -32,6 +32,7 @@ A layer showing trees ## Themes using this layer + - [nature](https://mapcomplete.org/nature) - [personal](https://mapcomplete.org/personal) - [trees](https://mapcomplete.org/trees) diff --git a/Docs/ServerConfig/hetzner/Caddyfile b/Docs/ServerConfig/hetzner/Caddyfile index 2fca43ec59..0746efca57 100644 --- a/Docs/ServerConfig/hetzner/Caddyfile +++ b/Docs/ServerConfig/hetzner/Caddyfile @@ -1,4 +1,4 @@ -hosted.mapcomplete.org { +builds.mapcomplete.org { root * public/ file_server header { @@ -6,6 +6,31 @@ hosted.mapcomplete.org { } } +dev.mapcomplete.org { + root * public/develop/ + file_server + header { + +Permissions-Policy "interest-cohort=()" + } +} + +single.mapcomplete.org { + root * single_theme_builds/ + file_server + header { + +Permissions-Policy "interest-cohort=()" + } +} + + +velopark.mapcomplete.org { + root * single_theme_builds/velopark/ + file_server + header { + +Permissions-Policy "interest-cohort=()" + } +} + app.mapcomplete.org { root * app/ file_server @@ -19,7 +44,7 @@ countrycoder.mapcomplete.org { file_server header { +Permissions-Policy "interest-cohort=()" - +Access-Control-Allow-Origin https://hosted.mapcomplete.org https://dev.mapcomplete.org https://mapcomplete.org + +Access-Control-Allow-Origin * } } @@ -36,5 +61,5 @@ lod.mapcomplete.org { } ipinfo.mapcomplete.org { - reverse_proxy 127.0.0.1:2347 + reverse_proxy 127.0.0.1:2347 } diff --git a/Docs/SettingUpPSQL.md b/Docs/SettingUpPSQL.md index 485c73197a..3c9cb19b7b 100644 --- a/Docs/SettingUpPSQL.md +++ b/Docs/SettingUpPSQL.md @@ -67,8 +67,10 @@ pg_tileserv can be downloaded here: https://github.com/CrunchyData/pg_tileserv In the directory where it is downloaded (e.g. `~/data`), run +First, look up the latest suitable database on https://mapcomplete.org/status + ```` -export DATABASE_URL=postgresql://user:password@localhost:5444/osm-poi +export DATABASE_URL=postgresql://user:password@localhost:5444/osm-poi.{date-of-suitable-database} nohup ./pg_tileserv >> pg_tileserv.log & ```` @@ -84,7 +86,19 @@ map.addSource("drinking_water", { `npm run summary-server` in the git repo +# Connecting to the database + +Setup the SSH-tunnel: + +`ssh folky.me +ssh -L 5444:127.0.0.1:5444 lain` + +Open a second terminal: + +`ssh -L 5444:127.0.0.1:5444 folky.me` ` + +Connect pgAdmin + # Rebooting: -> Restart the docker container --> diff --git a/Docs/SpecialRenderings.md b/Docs/SpecialRenderings.md index 525f1864a6..d067f931d0 100644 --- a/Docs/SpecialRenderings.md +++ b/Docs/SpecialRenderings.md @@ -426,10 +426,11 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | max_snap_distance | 5 | The maximum distance that the imported point will be moved to snap onto a way in an already existing layer (in meters). This is previewed to the contributor, similar to the 'add new point'-action of MapComplete | | note_id | _undefined_ | If given, this key will be read. The corresponding note on OSM will be closed, stating 'imported' | | maproulette_id | _undefined_ | The property name of the maproulette_id - this is probably `mr_taskId`. If given, the maproulette challenge will be marked as fixed. Only use this if part of a maproulette-layer. | +| to_point | _undefined_ | If set, a feature will be converted to a centerpoint | #### Example usage of import_button -`{import_button(,,Import this data into OpenStreetMap,./assets/svg/addSmall.svg,,5,,)}` +`{import_button(,,Import this data into OpenStreetMap,./assets/svg/addSmall.svg,,5,,,)}` ### import_way_button @@ -559,7 +560,7 @@ A component showing nearby images loaded from various online services such as Ma | name | default | description | -----|-----|----- | | mode | closed | Either `open` or `closed`. If `open`, then the image carousel will always be shown | -| readonly | _undefined_ | If 'readonly', will not show the 'link'-button | +| readonly | _undefined_ | If 'readonly' or 'yes', will not show the 'link'-button | #### Example usage of nearby_images diff --git a/Docs/TagInfo/mapcomplete_blind_osm.json b/Docs/TagInfo/mapcomplete_blind_osm.json index f5f406a43e..819356be7e 100644 --- a/Docs/TagInfo/mapcomplete_blind_osm.json +++ b/Docs/TagInfo/mapcomplete_blind_osm.json @@ -1289,17 +1289,32 @@ }, { "key": "conveying", - "description": "Layer 'Stairs' shows conveying=yes with a fixed text, namely 'This is an escalator' (in the mapcomplete.org theme 'OSM for the blind')", + "description": "Layer 'Stairs' shows conveying=yes with a fixed text, namely 'This is an escalator' and allows to pick this as a default answer (in the mapcomplete.org theme 'OSM for the blind')", "value": "yes" }, { "key": "conveying", - "description": "Layer 'Stairs' shows conveying=no with a fixed text, namely 'This is not an escalator' (in the mapcomplete.org theme 'OSM for the blind')", + "description": "Layer 'Stairs' shows conveying=forward | conveying=backward with a fixed text, namely 'This is an escalator moving in the direction of the arrows' (in the mapcomplete.org theme 'OSM for the blind')", + "value": "forward" + }, + { + "key": "conveying", + "description": "Layer 'Stairs' shows conveying=forward | conveying=backward with a fixed text, namely 'This is an escalator moving in the direction of the arrows' (in the mapcomplete.org theme 'OSM for the blind')", + "value": "backward" + }, + { + "key": "conveying", + "description": "Layer 'Stairs' shows conveying=reversible with a fixed text, namely 'This is a reversible escalator' and allows to pick this as a default answer (in the mapcomplete.org theme 'OSM for the blind')", + "value": "reversible" + }, + { + "key": "conveying", + "description": "Layer 'Stairs' shows conveying=no with a fixed text, namely 'This is not an escalator' and allows to pick this as a default answer (in the mapcomplete.org theme 'OSM for the blind')", "value": "no" }, { "key": "conveying", - "description": "Layer 'Stairs' shows conveying= with a fixed text, namely 'This is not an escalator' (in the mapcomplete.org theme 'OSM for the blind')", + "description": "Layer 'Stairs' shows conveying= with a fixed text, namely 'This is not an escalator' (in the mapcomplete.org theme 'OSM for the blind') Picking this answer will delete the key conveying.", "value": "" }, { diff --git a/Docs/TagInfo/mapcomplete_cafes_and_pubs.json b/Docs/TagInfo/mapcomplete_cafes_and_pubs.json index 9ce7fd6aee..c3443bdc80 100644 --- a/Docs/TagInfo/mapcomplete_cafes_and_pubs.json +++ b/Docs/TagInfo/mapcomplete_cafes_and_pubs.json @@ -229,6 +229,16 @@ "description": "Layer 'Cafés and pubs' shows service:electricity=no with a fixed text, namely 'There are a no domestic sockets available to customers seated indoors' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cafés and pubs')", "value": "no" }, + { + "key": "outdoor_seating", + "description": "Layer 'Cafés and pubs' shows outdoor_seating=yes with a fixed text, namely 'This place has outdoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cafés and pubs')", + "value": "yes" + }, + { + "key": "indoor_seating", + "description": "Layer 'Cafés and pubs' shows indoor_seating=yes with a fixed text, namely 'This place has indoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cafés and pubs')", + "value": "yes" + }, { "key": "dog", "description": "Layer 'Cafés and pubs' shows dog=yes with a fixed text, namely 'Dogs are allowed' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cafés and pubs')", diff --git a/Docs/TagInfo/mapcomplete_charging_stations.json b/Docs/TagInfo/mapcomplete_charging_stations.json index 943b3c2758..fd38a749db 100644 --- a/Docs/TagInfo/mapcomplete_charging_stations.json +++ b/Docs/TagInfo/mapcomplete_charging_stations.json @@ -1246,11 +1246,11 @@ }, { "key": "maxstay", - "description": "Layer 'Charging stations' shows and asks freeform values for key 'maxstay' (in the mapcomplete.org theme 'Charging stations') (This is only shown if maxstay~.+ | motorcar=yes | hgv=yes | bus=yes)" + "description": "Layer 'Charging stations' shows and asks freeform values for key 'maxstay' (in the mapcomplete.org theme 'Charging stations') (This is only shown if motorcar=yes | hgv=yes | bus=yes)" }, { "key": "maxstay", - "description": "Layer 'Charging stations' shows maxstay=unlimited with a fixed text, namely 'No timelimit on leaving your vehicle here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Charging stations') (This is only shown if maxstay~.+ | motorcar=yes | hgv=yes | bus=yes)", + "description": "Layer 'Charging stations' shows maxstay=unlimited with a fixed text, namely 'There is no limit to the amount of time one can stay here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Charging stations') (This is only shown if motorcar=yes | hgv=yes | bus=yes)", "value": "unlimited" }, { diff --git a/Docs/TagInfo/mapcomplete_climbing.json b/Docs/TagInfo/mapcomplete_climbing.json index 70fb87b9b7..df913e7c89 100644 --- a/Docs/TagInfo/mapcomplete_climbing.json +++ b/Docs/TagInfo/mapcomplete_climbing.json @@ -112,6 +112,11 @@ "description": "The MapComplete theme Climbing gyms, clubs and spots has a layer Climbing gyms showing features with this tag", "value": "sports_centre" }, + { + "key": "leisure", + "description": "The MapComplete theme Climbing gyms, clubs and spots has a layer Climbing gyms showing features with this tag", + "value": "sports_hall" + }, { "key": "id", "description": "Layer 'Climbing gyms' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))" @@ -294,65 +299,108 @@ }, { "key": "service:climbing_harness:rental", - "description": "Layer 'Climbing gyms' shows service:climbing_harness:rental=yes & service:climbing_harness:rental:fee=no with a fixed text, namely 'A climbing harness can be borrowed for free here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)", + "description": "Layer 'Climbing gyms' shows service:climbing_harness:rental=yes & service:climbing_harness:rental:fee=no with a fixed text, namely 'A climbing harness can be borrowed for free here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no) | (climbing:speed~.+ & climbing:speed!=no))", "value": "yes" }, { "key": "service:climbing_harness:rental:fee", - "description": "Layer 'Climbing gyms' shows service:climbing_harness:rental=yes & service:climbing_harness:rental:fee=no with a fixed text, namely 'A climbing harness can be borrowed for free here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)", + "description": "Layer 'Climbing gyms' shows service:climbing_harness:rental=yes & service:climbing_harness:rental:fee=no with a fixed text, namely 'A climbing harness can be borrowed for free here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no) | (climbing:speed~.+ & climbing:speed!=no))", "value": "no" }, { "key": "service:climbing_harness:rental", - "description": "Layer 'Climbing gyms' shows service:climbing_harness:rental=yes & service:climbing_harness:rental:charge~.+ with a fixed text, namely 'A climbing harness can be rented here for {service:climbing_harness:rental:charge}' (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)", + "description": "Layer 'Climbing gyms' shows service:climbing_harness:rental=yes & service:climbing_harness:rental:charge~.+ with a fixed text, namely 'A climbing harness can be rented here for {service:climbing_harness:rental:charge}' (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no) | (climbing:speed~.+ & climbing:speed!=no))", "value": "yes" }, { "key": "service:climbing_harness:rental:charge", - "description": "Layer 'Climbing gyms' shows service:climbing_harness:rental=yes & service:climbing_harness:rental:charge~.+ with a fixed text, namely 'A climbing harness can be rented here for {service:climbing_harness:rental:charge}' (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)" + "description": "Layer 'Climbing gyms' shows service:climbing_harness:rental=yes & service:climbing_harness:rental:charge~.+ with a fixed text, namely 'A climbing harness can be rented here for {service:climbing_harness:rental:charge}' (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no) | (climbing:speed~.+ & climbing:speed!=no))" }, { "key": "service:climbing_harness:rental", - "description": "Layer 'Climbing gyms' shows service:climbing_harness:rental=yes with a fixed text, namely 'A climbing harness can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)", + "description": "Layer 'Climbing gyms' shows service:climbing_harness:rental=yes with a fixed text, namely 'A climbing harness can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no) | (climbing:speed~.+ & climbing:speed!=no))", "value": "yes" }, { "key": "service:climbing_harness:rental", - "description": "Layer 'Climbing gyms' shows service:climbing_harness:rental=no with a fixed text, namely 'A climbing harness can not be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)", + "description": "Layer 'Climbing gyms' shows service:climbing_harness:rental=no with a fixed text, namely 'A climbing harness can not be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no) | (climbing:speed~.+ & climbing:speed!=no))", "value": "no" }, + { + "key": "climbing:autobelay:toprope", + "description": "Layer 'Climbing gyms' shows and asks freeform values for key 'climbing:autobelay:toprope' (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:toprope~.+ & climbing:toprope!=no)" + }, + { + "key": "climbing:autobelay:toprope", + "description": "Layer 'Climbing gyms' shows climbing:autobelay:toprope=no with a fixed text, namely 'There are no auto belays for top roping' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:toprope~.+ & climbing:toprope!=no)", + "value": "no" + }, + { + "key": "climbing:autobelay:toprope", + "description": "Layer 'Climbing gyms' shows climbing:autobelay:toprope=yes with a fixed text, namely 'There are a number of auto belays for top roping' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:toprope~.+ & climbing:toprope!=no)", + "value": "yes" + }, + { + "key": "climbing:autobelay:toprope", + "description": "Layer 'Climbing gyms' shows climbing:autobelay:toprope=all with a fixed text, namely 'There is an auto belay for every top rope route but manual belaying is also possible' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:toprope~.+ & climbing:toprope!=no)", + "value": "all" + }, + { + "key": "climbing:autobelay:toprope", + "description": "Layer 'Climbing gyms' shows climbing:autobelay:toprope=only with a fixed text, namely 'Top rope routes can only be climbed on auto belay' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:toprope~.+ & climbing:toprope!=no)", + "value": "only" + }, + { + "key": "climbing:autobelay:sport", + "description": "Layer 'Climbing gyms' shows and asks freeform values for key 'climbing:autobelay:sport' (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport~.+ & climbing:sport!=no)" + }, + { + "key": "climbing:autobelay:sport", + "description": "Layer 'Climbing gyms' shows climbing:autobelay:sport=no with a fixed text, namely 'There are no auto belays for lead climbing' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport~.+ & climbing:sport!=no)", + "value": "no" + }, + { + "key": "climbing:autobelay:sport", + "description": "Layer 'Climbing gyms' shows climbing:autobelay:sport=yes with a fixed text, namely 'There is a number of auto belays for lead climbing' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport~.+ & climbing:sport!=no)", + "value": "yes" + }, + { + "key": "climbing:autobelay:sport", + "description": "Layer 'Climbing gyms' shows climbing:autobelay:sport=all with a fixed text, namely 'There is an auto belay for every lead climbing route' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport~.+ & climbing:sport!=no)", + "value": "all" + }, { "key": "service:climbing_belay_device:provided_at_each_rope", - "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:provided_at_each_rope=yes with a fixed text, namely 'Belay devices are provided at each rope' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)", + "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:provided_at_each_rope=yes with a fixed text, namely 'Belay devices are provided at each rope' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no))", "value": "yes" }, { "key": "service:climbing_belay_device:rental", - "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:rental=yes & service:climbing_belay_device:rental:fee=no with a fixed text, namely 'A belay device can be borrowed for free here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)", + "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:rental=yes & service:climbing_belay_device:rental:fee=no with a fixed text, namely 'A belay device can be borrowed for free here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no))", "value": "yes" }, { "key": "service:climbing_belay_device:rental:fee", - "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:rental=yes & service:climbing_belay_device:rental:fee=no with a fixed text, namely 'A belay device can be borrowed for free here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)", + "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:rental=yes & service:climbing_belay_device:rental:fee=no with a fixed text, namely 'A belay device can be borrowed for free here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no))", "value": "no" }, { "key": "service:climbing_belay_device:rental", - "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:rental=yes & service:climbing_belay_device:rental:charge~.+ with a fixed text, namely 'A belay device can be rented here for {service:climbing_belay_device:rental:charge}' (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)", + "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:rental=yes & service:climbing_belay_device:rental:charge~.+ with a fixed text, namely 'A belay device can be rented here for {service:climbing_belay_device:rental:charge}' (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no))", "value": "yes" }, { "key": "service:climbing_belay_device:rental:charge", - "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:rental=yes & service:climbing_belay_device:rental:charge~.+ with a fixed text, namely 'A belay device can be rented here for {service:climbing_belay_device:rental:charge}' (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)" + "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:rental=yes & service:climbing_belay_device:rental:charge~.+ with a fixed text, namely 'A belay device can be rented here for {service:climbing_belay_device:rental:charge}' (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no))" }, { "key": "service:climbing_belay_device:rental", - "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:rental=yes with a fixed text, namely 'A belay device can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)", + "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:rental=yes with a fixed text, namely 'A belay device can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no))", "value": "yes" }, { "key": "service:climbing_belay_device:rental", - "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:rental=no with a fixed text, namely 'A belay device can not be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if climbing:sport!=no | climbing:toprope!=no)", + "description": "Layer 'Climbing gyms' shows service:climbing_belay_device:rental=no with a fixed text, namely 'A belay device can not be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Climbing gyms, clubs and spots') (This is only shown if (climbing:sport~.+ & climbing:sport!=no) | (climbing:toprope~.+ & climbing:toprope!=no))", "value": "no" }, { diff --git a/Docs/TagInfo/mapcomplete_cyclofix.json b/Docs/TagInfo/mapcomplete_cyclofix.json index ae42f740d3..3136d4ef97 100644 --- a/Docs/TagInfo/mapcomplete_cyclofix.json +++ b/Docs/TagInfo/mapcomplete_cyclofix.json @@ -287,6 +287,11 @@ "description": "The MapComplete theme Cyclofix - a map for cyclists has a layer Bike repair/shop showing features with this tag", "value": "yes" }, + { + "key": "service:bicycle:second_hand", + "description": "The MapComplete theme Cyclofix - a map for cyclists has a layer Bike repair/shop showing features with this tag", + "value": "yes" + }, { "key": "shop", "description": "The MapComplete theme Cyclofix - a map for cyclists has a layer Bike repair/shop showing features with this tag", @@ -4123,11 +4128,11 @@ }, { "key": "maxstay", - "description": "Layer 'Charging stations' shows and asks freeform values for key 'maxstay' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if maxstay~.+ | motorcar=yes | hgv=yes | bus=yes)" + "description": "Layer 'Charging stations' shows and asks freeform values for key 'maxstay' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if motorcar=yes | hgv=yes | bus=yes)" }, { "key": "maxstay", - "description": "Layer 'Charging stations' shows maxstay=unlimited with a fixed text, namely 'No timelimit on leaving your vehicle here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if maxstay~.+ | motorcar=yes | hgv=yes | bus=yes)", + "description": "Layer 'Charging stations' shows maxstay=unlimited with a fixed text, namely 'There is no limit to the amount of time one can stay here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if motorcar=yes | hgv=yes | bus=yes)", "value": "unlimited" }, { diff --git a/Docs/TagInfo/mapcomplete_etymology.json b/Docs/TagInfo/mapcomplete_etymology.json index c128e7b443..f0c0459790 100644 --- a/Docs/TagInfo/mapcomplete_etymology.json +++ b/Docs/TagInfo/mapcomplete_etymology.json @@ -615,6 +615,82 @@ { "key": "wikipedia", "description": "The layer 'Sport places without etymology information allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "name", + "description": "The MapComplete theme Etymology - what is a place named after? has a layer Parks without etymology information showing features with this tag" + }, + { + "key": "leisure", + "description": "The MapComplete theme Etymology - what is a place named after? has a layer Parks without etymology information showing features with this tag", + "value": "park" + }, + { + "key": "landuse", + "description": "The MapComplete theme Etymology - what is a place named after? has a layer Parks without etymology information showing features with this tag", + "value": "village_green" + }, + { + "key": "landuse", + "description": "The MapComplete theme Etymology - what is a place named after? has a layer Parks without etymology information showing features with this tag", + "value": "recreation_ground" + }, + { + "key": "id", + "description": "Layer 'Parks without etymology information' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'Etymology - what is a place named after?') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))" + }, + { + "key": "image", + "description": "The layer 'Parks without etymology information shows images based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "panoramax", + "description": "The layer 'Parks without etymology information shows images based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Parks without etymology information shows images based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Parks without etymology information shows images based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Parks without etymology information shows images based on the keys image, image:0, image:1,..., panoramax, panoramax:0, panoramx:1, ... , wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "name:etymology:wikidata", + "description": "Layer 'Parks without etymology information' shows and asks freeform values for key 'name:etymology:wikidata' (in the mapcomplete.org theme 'Etymology - what is a place named after?') (This is only shown if name:etymology!=unknown)" + }, + { + "key": "name:etymology", + "description": "Layer 'Parks without etymology information' shows and asks freeform values for key 'name:etymology' (in the mapcomplete.org theme 'Etymology - what is a place named after?') (This is only shown if name:etymology~.+ | name:etymology:wikidata=)" + }, + { + "key": "name:etymology", + "description": "Layer 'Parks without etymology information' shows name:etymology=unknown with a fixed text, namely 'The origin of this name is unknown in all literature' and allows to pick this as a default answer (in the mapcomplete.org theme 'Etymology - what is a place named after?') (This is only shown if name:etymology~.+ | name:etymology:wikidata=)", + "value": "unknown" + }, + { + "key": "image", + "description": "The layer 'Parks without etymology information allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "panoramax", + "description": "The layer 'Parks without etymology information allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Parks without etymology information allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Parks without etymology information allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Parks without etymology information allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" } ] } \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_fireplace.json b/Docs/TagInfo/mapcomplete_fireplace.json index 26b5eb5df0..2be1955d16 100644 --- a/Docs/TagInfo/mapcomplete_fireplace.json +++ b/Docs/TagInfo/mapcomplete_fireplace.json @@ -115,62 +115,62 @@ }, { "key": "access", - "description": "Layer 'BBQ' shows access=yes with a fixed text, namely 'Public' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", + "description": "Layer 'BBQ' shows access=yes with a fixed text, namely 'This barbecue can be used by anyone' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", "value": "yes" }, { "key": "access", - "description": "Layer 'BBQ' shows access=no with a fixed text, namely 'No access' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", + "description": "Layer 'BBQ' shows access=no with a fixed text, namely 'This barbecue can't be used by anyone' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", "value": "no" }, { "key": "access", - "description": "Layer 'BBQ' shows access=private with a fixed text, namely 'Private' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", + "description": "Layer 'BBQ' shows access=private with a fixed text, namely 'This barbecue is private' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", "value": "private" }, { "key": "access", - "description": "Layer 'BBQ' shows access=permissive with a fixed text, namely 'Access until revoked' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", + "description": "Layer 'BBQ' shows access=permissive with a fixed text, namely 'This barbecue can be used by anyone, but the owner can revoke access at any time' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", "value": "permissive" }, { "key": "access", - "description": "Layer 'BBQ' shows access=customers with a fixed text, namely 'Access only for customers' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", + "description": "Layer 'BBQ' shows access=customers with a fixed text, namely 'This barbecue can only be used by customers' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", "value": "customers" }, { "key": "access", - "description": "Layer 'BBQ' shows access=permit with a fixed text, namely 'Access only for authorized persons' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", + "description": "Layer 'BBQ' shows access=permit with a fixed text, namely 'This barbecue can only be used by authorized persons' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", "value": "permit" }, { "key": "covered", - "description": "Layer 'BBQ' shows covered=no with a fixed text, namely 'The grill is not covered' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", + "description": "Layer 'BBQ' shows covered=no with a fixed text, namely 'This barbecue is not covered' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", "value": "no" }, { "key": "covered", - "description": "Layer 'BBQ' shows covered=yes with a fixed text, namely 'The grill is covered' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", + "description": "Layer 'BBQ' shows covered=yes with a fixed text, namely 'This barbecue is covered' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", "value": "yes" }, { "key": "fuel", - "description": "Layer 'BBQ' shows fuel=wood with a fixed text, namely 'Wood' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", + "description": "Layer 'BBQ' shows fuel=wood with a fixed text, namely 'This barbecue uses wood as fuel' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", "value": "wood" }, { "key": "fuel", - "description": "Layer 'BBQ' shows fuel=charcoal with a fixed text, namely 'Charcoal' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", + "description": "Layer 'BBQ' shows fuel=charcoal with a fixed text, namely 'This barbecue uses charcoal as fuel' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", "value": "charcoal" }, { "key": "fuel", - "description": "Layer 'BBQ' shows fuel=electric with a fixed text, namely 'Electric' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", + "description": "Layer 'BBQ' shows fuel=electric with a fixed text, namely 'This barbecue is powered by electricity' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", "value": "electric" }, { "key": "fuel", - "description": "Layer 'BBQ' shows fuel=gas with a fixed text, namely 'Gas' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", + "description": "Layer 'BBQ' shows fuel=gas with a fixed text, namely 'This barbecue uses gas as fuel' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fireplaces and barbeques')", "value": "gas" } ] diff --git a/Docs/TagInfo/mapcomplete_food.json b/Docs/TagInfo/mapcomplete_food.json index 480da14fe7..f36457364b 100644 --- a/Docs/TagInfo/mapcomplete_food.json +++ b/Docs/TagInfo/mapcomplete_food.json @@ -347,6 +347,25 @@ "description": "Layer 'Restaurants and fast food' shows delivery=no with a fixed text, namely 'This business does not deliver at home' and allows to pick this as a default answer (in the mapcomplete.org theme 'Restaurants and fast food')", "value": "no" }, + { + "key": "drive_through", + "description": "Layer 'Restaurants and fast food' shows drive_through=yes with a fixed text, namely 'This fast-food restaurant has a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'Restaurants and fast food') (This is only shown if amenity=fast_food)", + "value": "yes" + }, + { + "key": "drive_through", + "description": "Layer 'Restaurants and fast food' shows drive_through=no with a fixed text, namely 'This fast-food restaurant does not have a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'Restaurants and fast food') (This is only shown if amenity=fast_food)", + "value": "no" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'opening_hours:drive_through' (in the mapcomplete.org theme 'Restaurants and fast food') (This is only shown if drive_through=yes)" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Restaurants and fast food' shows opening_hours:drive_through= with a fixed text, namely 'The opening hours of the drive-through are the same as the restaurant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Restaurants and fast food') Picking this answer will delete the key opening_hours:drive_through. (This is only shown if drive_through=yes)", + "value": "" + }, { "key": "diet:vegetarian", "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=no with a fixed text, namely 'No vegetarian options are available' and allows to pick this as a default answer (in the mapcomplete.org theme 'Restaurants and fast food') (This is only shown if cuisine!=friture)", @@ -607,6 +626,16 @@ "description": "Layer 'Restaurants and fast food' shows service:electricity=no with a fixed text, namely 'There are a no domestic sockets available to customers seated indoors' and allows to pick this as a default answer (in the mapcomplete.org theme 'Restaurants and fast food')", "value": "no" }, + { + "key": "outdoor_seating", + "description": "Layer 'Restaurants and fast food' shows outdoor_seating=yes with a fixed text, namely 'This place has outdoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Restaurants and fast food')", + "value": "yes" + }, + { + "key": "indoor_seating", + "description": "Layer 'Restaurants and fast food' shows indoor_seating=yes with a fixed text, namely 'This place has indoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Restaurants and fast food')", + "value": "yes" + }, { "key": "dog", "description": "Layer 'Restaurants and fast food' shows dog=yes with a fixed text, namely 'Dogs are allowed' and allows to pick this as a default answer (in the mapcomplete.org theme 'Restaurants and fast food')", diff --git a/Docs/TagInfo/mapcomplete_fritures.json b/Docs/TagInfo/mapcomplete_fritures.json index 1130d67eaf..e857edc85c 100644 --- a/Docs/TagInfo/mapcomplete_fritures.json +++ b/Docs/TagInfo/mapcomplete_fritures.json @@ -351,6 +351,25 @@ "description": "Layer 'Fries shop' shows delivery=no with a fixed text, namely 'This business does not deliver at home' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fries shops')", "value": "no" }, + { + "key": "drive_through", + "description": "Layer 'Fries shop' shows drive_through=yes with a fixed text, namely 'This fast-food restaurant has a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fries shops') (This is only shown if amenity=fast_food)", + "value": "yes" + }, + { + "key": "drive_through", + "description": "Layer 'Fries shop' shows drive_through=no with a fixed text, namely 'This fast-food restaurant does not have a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fries shops') (This is only shown if amenity=fast_food)", + "value": "no" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Fries shop' shows and asks freeform values for key 'opening_hours:drive_through' (in the mapcomplete.org theme 'Fries shops') (This is only shown if drive_through=yes)" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Fries shop' shows opening_hours:drive_through= with a fixed text, namely 'The opening hours of the drive-through are the same as the restaurant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fries shops') Picking this answer will delete the key opening_hours:drive_through. (This is only shown if drive_through=yes)", + "value": "" + }, { "key": "diet:vegetarian", "description": "Layer 'Fries shop' shows diet:vegetarian=no with a fixed text, namely 'No vegetarian options are available' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fries shops') (This is only shown if cuisine!=friture)", @@ -611,6 +630,16 @@ "description": "Layer 'Fries shop' shows service:electricity=no with a fixed text, namely 'There are a no domestic sockets available to customers seated indoors' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fries shops')", "value": "no" }, + { + "key": "outdoor_seating", + "description": "Layer 'Fries shop' shows outdoor_seating=yes with a fixed text, namely 'This place has outdoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fries shops')", + "value": "yes" + }, + { + "key": "indoor_seating", + "description": "Layer 'Fries shop' shows indoor_seating=yes with a fixed text, namely 'This place has indoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fries shops')", + "value": "yes" + }, { "key": "dog", "description": "Layer 'Fries shop' shows dog=yes with a fixed text, namely 'Dogs are allowed' and allows to pick this as a default answer (in the mapcomplete.org theme 'Fries shops')", diff --git a/Docs/TagInfo/mapcomplete_glutenfree.json b/Docs/TagInfo/mapcomplete_glutenfree.json index e167576d2f..52f20feac2 100644 --- a/Docs/TagInfo/mapcomplete_glutenfree.json +++ b/Docs/TagInfo/mapcomplete_glutenfree.json @@ -371,6 +371,25 @@ "description": "Layer 'Restaurants and fast food' shows delivery=no with a fixed text, namely 'This business does not deliver at home' and allows to pick this as a default answer (in the mapcomplete.org theme 'Glutenfree')", "value": "no" }, + { + "key": "drive_through", + "description": "Layer 'Restaurants and fast food' shows drive_through=yes with a fixed text, namely 'This fast-food restaurant has a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'Glutenfree') (This is only shown if amenity=fast_food)", + "value": "yes" + }, + { + "key": "drive_through", + "description": "Layer 'Restaurants and fast food' shows drive_through=no with a fixed text, namely 'This fast-food restaurant does not have a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'Glutenfree') (This is only shown if amenity=fast_food)", + "value": "no" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'opening_hours:drive_through' (in the mapcomplete.org theme 'Glutenfree') (This is only shown if drive_through=yes)" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Restaurants and fast food' shows opening_hours:drive_through= with a fixed text, namely 'The opening hours of the drive-through are the same as the restaurant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Glutenfree') Picking this answer will delete the key opening_hours:drive_through. (This is only shown if drive_through=yes)", + "value": "" + }, { "key": "diet:vegetarian", "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=no with a fixed text, namely 'No vegetarian options are available' and allows to pick this as a default answer (in the mapcomplete.org theme 'Glutenfree') (This is only shown if cuisine!=friture)", @@ -611,6 +630,16 @@ "description": "Layer 'Restaurants and fast food' shows service:electricity=no with a fixed text, namely 'There are a no domestic sockets available to customers seated indoors' and allows to pick this as a default answer (in the mapcomplete.org theme 'Glutenfree')", "value": "no" }, + { + "key": "outdoor_seating", + "description": "Layer 'Restaurants and fast food' shows outdoor_seating=yes with a fixed text, namely 'This place has outdoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Glutenfree')", + "value": "yes" + }, + { + "key": "indoor_seating", + "description": "Layer 'Restaurants and fast food' shows indoor_seating=yes with a fixed text, namely 'This place has indoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Glutenfree')", + "value": "yes" + }, { "key": "dog", "description": "Layer 'Restaurants and fast food' shows dog=yes with a fixed text, namely 'Dogs are allowed' and allows to pick this as a default answer (in the mapcomplete.org theme 'Glutenfree')", diff --git a/Docs/TagInfo/mapcomplete_insects.json b/Docs/TagInfo/mapcomplete_insects.json new file mode 100644 index 0000000000..7bb709b3f0 --- /dev/null +++ b/Docs/TagInfo/mapcomplete_insects.json @@ -0,0 +1,81 @@ +{ + "data_format": 1, + "project": { + "name": "MapComplete Insect Hotels", + "description": "Insect hotels provide shelter for insects", + "project_url": "https://mapcomplete.org/insects", + "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", + "icon_url": "https://mapcomplete.org/assets/layers/insect_hotel/insect_hotel.svg", + "contact_name": "Pieter Vander Vennet", + "contact_email": "pietervdvn@posteo.net" + }, + "tags": [ + { + "key": "man_made", + "description": "The MapComplete theme Insect Hotels has a layer Insect Hotels showing features with this tag", + "value": "insect_hotel" + }, + { + "key": "id", + "description": "Layer 'Insect Hotels' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'Insect Hotels') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))" + }, + { + "key": "image", + "description": "The layer 'Insect Hotels allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "panoramax", + "description": "The layer 'Insect Hotels allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Insect Hotels allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Insect Hotels allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Insect Hotels allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "man_made", + "description": "The MapComplete theme Insect Hotels has a layer Beehives showing features with this tag", + "value": "beehive" + }, + { + "key": "id", + "description": "Layer 'Beehives' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'Insect Hotels') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))" + }, + { + "key": "image", + "description": "The layer 'Beehives allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "panoramax", + "description": "The layer 'Beehives allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Beehives allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Beehives allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Beehives allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "capacity", + "description": "Layer 'Beehives' shows and asks freeform values for key 'capacity' (in the mapcomplete.org theme 'Insect Hotels')" + }, + { + "key": "capacity", + "description": "Layer 'Beehives' shows capacity=1 with a fixed text, namely 'There is 1 beehive' and allows to pick this as a default answer (in the mapcomplete.org theme 'Insect Hotels')", + "value": "1" + } + ] +} \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_lactosefree.json b/Docs/TagInfo/mapcomplete_lactosefree.json index 587cc7677c..d245001a9b 100644 --- a/Docs/TagInfo/mapcomplete_lactosefree.json +++ b/Docs/TagInfo/mapcomplete_lactosefree.json @@ -371,6 +371,25 @@ "description": "Layer 'Restaurants and fast food' shows delivery=no with a fixed text, namely 'This business does not deliver at home' and allows to pick this as a default answer (in the mapcomplete.org theme 'Lactose free shops and restaurants')", "value": "no" }, + { + "key": "drive_through", + "description": "Layer 'Restaurants and fast food' shows drive_through=yes with a fixed text, namely 'This fast-food restaurant has a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'Lactose free shops and restaurants') (This is only shown if amenity=fast_food)", + "value": "yes" + }, + { + "key": "drive_through", + "description": "Layer 'Restaurants and fast food' shows drive_through=no with a fixed text, namely 'This fast-food restaurant does not have a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'Lactose free shops and restaurants') (This is only shown if amenity=fast_food)", + "value": "no" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'opening_hours:drive_through' (in the mapcomplete.org theme 'Lactose free shops and restaurants') (This is only shown if drive_through=yes)" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Restaurants and fast food' shows opening_hours:drive_through= with a fixed text, namely 'The opening hours of the drive-through are the same as the restaurant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Lactose free shops and restaurants') Picking this answer will delete the key opening_hours:drive_through. (This is only shown if drive_through=yes)", + "value": "" + }, { "key": "diet:vegetarian", "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=no with a fixed text, namely 'No vegetarian options are available' and allows to pick this as a default answer (in the mapcomplete.org theme 'Lactose free shops and restaurants') (This is only shown if cuisine!=friture)", @@ -611,6 +630,16 @@ "description": "Layer 'Restaurants and fast food' shows service:electricity=no with a fixed text, namely 'There are a no domestic sockets available to customers seated indoors' and allows to pick this as a default answer (in the mapcomplete.org theme 'Lactose free shops and restaurants')", "value": "no" }, + { + "key": "outdoor_seating", + "description": "Layer 'Restaurants and fast food' shows outdoor_seating=yes with a fixed text, namely 'This place has outdoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Lactose free shops and restaurants')", + "value": "yes" + }, + { + "key": "indoor_seating", + "description": "Layer 'Restaurants and fast food' shows indoor_seating=yes with a fixed text, namely 'This place has indoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Lactose free shops and restaurants')", + "value": "yes" + }, { "key": "dog", "description": "Layer 'Restaurants and fast food' shows dog=yes with a fixed text, namely 'Dogs are allowed' and allows to pick this as a default answer (in the mapcomplete.org theme 'Lactose free shops and restaurants')", diff --git a/Docs/TagInfo/mapcomplete_nature.json b/Docs/TagInfo/mapcomplete_nature.json index f52305c56a..cf12d4fd46 100644 --- a/Docs/TagInfo/mapcomplete_nature.json +++ b/Docs/TagInfo/mapcomplete_nature.json @@ -1511,62 +1511,62 @@ }, { "key": "access", - "description": "Layer 'BBQ' shows access=yes with a fixed text, namely 'Public' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "description": "Layer 'BBQ' shows access=yes with a fixed text, namely 'This barbecue can be used by anyone' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "yes" }, { "key": "access", - "description": "Layer 'BBQ' shows access=no with a fixed text, namely 'No access' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "description": "Layer 'BBQ' shows access=no with a fixed text, namely 'This barbecue can't be used by anyone' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "no" }, { "key": "access", - "description": "Layer 'BBQ' shows access=private with a fixed text, namely 'Private' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "description": "Layer 'BBQ' shows access=private with a fixed text, namely 'This barbecue is private' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "private" }, { "key": "access", - "description": "Layer 'BBQ' shows access=permissive with a fixed text, namely 'Access until revoked' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "description": "Layer 'BBQ' shows access=permissive with a fixed text, namely 'This barbecue can be used by anyone, but the owner can revoke access at any time' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "permissive" }, { "key": "access", - "description": "Layer 'BBQ' shows access=customers with a fixed text, namely 'Access only for customers' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "description": "Layer 'BBQ' shows access=customers with a fixed text, namely 'This barbecue can only be used by customers' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "customers" }, { "key": "access", - "description": "Layer 'BBQ' shows access=permit with a fixed text, namely 'Access only for authorized persons' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "description": "Layer 'BBQ' shows access=permit with a fixed text, namely 'This barbecue can only be used by authorized persons' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "permit" }, { "key": "covered", - "description": "Layer 'BBQ' shows covered=no with a fixed text, namely 'The grill is not covered' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "description": "Layer 'BBQ' shows covered=no with a fixed text, namely 'This barbecue is not covered' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "no" }, { "key": "covered", - "description": "Layer 'BBQ' shows covered=yes with a fixed text, namely 'The grill is covered' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "description": "Layer 'BBQ' shows covered=yes with a fixed text, namely 'This barbecue is covered' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "yes" }, { "key": "fuel", - "description": "Layer 'BBQ' shows fuel=wood with a fixed text, namely 'Wood' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "description": "Layer 'BBQ' shows fuel=wood with a fixed text, namely 'This barbecue uses wood as fuel' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "wood" }, { "key": "fuel", - "description": "Layer 'BBQ' shows fuel=charcoal with a fixed text, namely 'Charcoal' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "description": "Layer 'BBQ' shows fuel=charcoal with a fixed text, namely 'This barbecue uses charcoal as fuel' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "charcoal" }, { "key": "fuel", - "description": "Layer 'BBQ' shows fuel=electric with a fixed text, namely 'Electric' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "description": "Layer 'BBQ' shows fuel=electric with a fixed text, namely 'This barbecue is powered by electricity' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "electric" }, { "key": "fuel", - "description": "Layer 'BBQ' shows fuel=gas with a fixed text, namely 'Gas' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "description": "Layer 'BBQ' shows fuel=gas with a fixed text, namely 'This barbecue uses gas as fuel' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "gas" }, { @@ -1642,6 +1642,207 @@ "key": "seasonal", "description": "Layer 'Firepit' shows seasonal=spring;summer;autumn with a fixed text, namely 'Closed during the winter' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", "value": "spring;summer;autumn" + }, + { + "key": "man_made", + "description": "The MapComplete theme Into nature has a layer Insect Hotels showing features with this tag", + "value": "insect_hotel" + }, + { + "key": "id", + "description": "Layer 'Insect Hotels' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'Into nature') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))" + }, + { + "key": "image", + "description": "The layer 'Insect Hotels allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "panoramax", + "description": "The layer 'Insect Hotels allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Insect Hotels allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Insect Hotels allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Insect Hotels allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "natural", + "description": "The MapComplete theme Into nature has a layer Tree showing features with this tag", + "value": "tree" + }, + { + "key": "id", + "description": "Layer 'Tree' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'Into nature') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))" + }, + { + "key": "image", + "description": "The layer 'Tree allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "panoramax", + "description": "The layer 'Tree allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Tree allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Tree allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Tree allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "species:wikidata", + "description": "Layer 'Tree' shows and asks freeform values for key 'species:wikidata' (in the mapcomplete.org theme 'Into nature')" + }, + { + "key": "circumference", + "description": "Layer 'Tree' shows and asks freeform values for key 'circumference' (in the mapcomplete.org theme 'Into nature')" + }, + { + "key": "height", + "description": "Layer 'Tree' shows and asks freeform values for key 'height' (in the mapcomplete.org theme 'Into nature')" + }, + { + "key": "denotation", + "description": "Layer 'Tree' shows denotation=landmark with a fixed text, namely 'The tree is remarkable due to its size or prominent location. It is useful for navigation.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "value": "landmark" + }, + { + "key": "denotation", + "description": "Layer 'Tree' shows denotation=natural_monument with a fixed text, namely 'The tree is a natural monument, e.g. because it is especially old, or of a valuable species.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "value": "natural_monument" + }, + { + "key": "denotation", + "description": "Layer 'Tree' shows denotation=agricultural with a fixed text, namely 'The tree is used for agricultural purposes, e.g. in an orchard.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "value": "agricultural" + }, + { + "key": "denotation", + "description": "Layer 'Tree' shows denotation=park with a fixed text, namely 'The tree is in a park or similar (cemetery, school grounds, …).' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "value": "park" + }, + { + "key": "denotation", + "description": "Layer 'Tree' shows denotation=garden with a fixed text, namely 'The tree is in a residential garden.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "value": "garden" + }, + { + "key": "denotation", + "description": "Layer 'Tree' shows denotation=avenue with a fixed text, namely 'This is a tree along an avenue.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "value": "avenue" + }, + { + "key": "denotation", + "description": "Layer 'Tree' shows denotation=urban with a fixed text, namely 'The tree is in an urban area.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "value": "urban" + }, + { + "key": "denotation", + "description": "Layer 'Tree' shows denotation=none with a fixed text, namely 'The tree is outside of an urban area.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature')", + "value": "none" + }, + { + "key": "leaf_type", + "description": "Layer 'Tree' shows leaf_type=broadleaved with a fixed text, namely 'Broadleaved' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if species:wikidata=)", + "value": "broadleaved" + }, + { + "key": "leaf_type", + "description": "Layer 'Tree' shows leaf_type=needleleaved with a fixed text, namely 'Needleleaved' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if species:wikidata=)", + "value": "needleleaved" + }, + { + "key": "leaf_type", + "description": "Layer 'Tree' shows leaf_type=leafless with a fixed text, namely 'Permanently leafless' (in the mapcomplete.org theme 'Into nature') (This is only shown if species:wikidata=)", + "value": "leafless" + }, + { + "key": "leaf_cycle", + "description": "Layer 'Tree' shows leaf_cycle=deciduous with a fixed text, namely 'Deciduous: the tree loses its leaves for some time of the year.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if leaf_type!~^(^leafless$)$ & species:wikidata=)", + "value": "deciduous" + }, + { + "key": "leaf_cycle", + "description": "Layer 'Tree' shows leaf_cycle=evergreen with a fixed text, namely 'Evergreen.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if leaf_type!~^(^leafless$)$ & species:wikidata=)", + "value": "evergreen" + }, + { + "key": "name", + "description": "Layer 'Tree' shows and asks freeform values for key 'name' (in the mapcomplete.org theme 'Into nature') (This is only shown if denotation=landmark | denotation=natural_monument | name~.+)" + }, + { + "key": "name", + "description": "Layer 'Tree' shows name= & noname=yes with a fixed text, namely 'The tree does not have a name.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') Picking this answer will delete the key name. (This is only shown if denotation=landmark | denotation=natural_monument | name~.+)", + "value": "" + }, + { + "key": "noname", + "description": "Layer 'Tree' shows name= & noname=yes with a fixed text, namely 'The tree does not have a name.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if denotation=landmark | denotation=natural_monument | name~.+)", + "value": "yes" + }, + { + "key": "heritage", + "description": "Layer 'Tree' shows heritage=4 & heritage:operator=OnroerendErfgoed with a fixed text, namely 'Registered as heritage by Onroerend Erfgoed Flanders' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if denotation=landmark | denotation=natural_monument)", + "value": "4" + }, + { + "key": "heritage:operator", + "description": "Layer 'Tree' shows heritage=4 & heritage:operator=OnroerendErfgoed with a fixed text, namely 'Registered as heritage by Onroerend Erfgoed Flanders' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if denotation=landmark | denotation=natural_monument)", + "value": "OnroerendErfgoed" + }, + { + "key": "heritage", + "description": "Layer 'Tree' shows heritage=4 & heritage:operator=aatl with a fixed text, namely 'Registered as heritage by Direction du Patrimoine culturel Brussels' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if denotation=landmark | denotation=natural_monument)", + "value": "4" + }, + { + "key": "heritage:operator", + "description": "Layer 'Tree' shows heritage=4 & heritage:operator=aatl with a fixed text, namely 'Registered as heritage by Direction du Patrimoine culturel Brussels' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if denotation=landmark | denotation=natural_monument)", + "value": "aatl" + }, + { + "key": "heritage", + "description": "Layer 'Tree' shows heritage=yes & heritage:operator= with a fixed text, namely 'Registered as heritage by a different organisation' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if denotation=landmark | denotation=natural_monument)", + "value": "yes" + }, + { + "key": "heritage:operator", + "description": "Layer 'Tree' shows heritage=yes & heritage:operator= with a fixed text, namely 'Registered as heritage by a different organisation' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') Picking this answer will delete the key heritage:operator. (This is only shown if denotation=landmark | denotation=natural_monument)", + "value": "" + }, + { + "key": "heritage", + "description": "Layer 'Tree' shows heritage=no & heritage:operator= with a fixed text, namely 'Not registered as heritage' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') (This is only shown if denotation=landmark | denotation=natural_monument)", + "value": "no" + }, + { + "key": "heritage:operator", + "description": "Layer 'Tree' shows heritage=no & heritage:operator= with a fixed text, namely 'Not registered as heritage' and allows to pick this as a default answer (in the mapcomplete.org theme 'Into nature') Picking this answer will delete the key heritage:operator. (This is only shown if denotation=landmark | denotation=natural_monument)", + "value": "" + }, + { + "key": "heritage", + "description": "Layer 'Tree' shows heritage~.+ with a fixed text, namely 'Registered as heritage by a different organisation' (in the mapcomplete.org theme 'Into nature') (This is only shown if denotation=landmark | denotation=natural_monument)" + }, + { + "key": "ref:OnroerendErfgoed", + "description": "Layer 'Tree' shows and asks freeform values for key 'ref:OnroerendErfgoed' (in the mapcomplete.org theme 'Into nature') (This is only shown if heritage=4 & heritage:operator=OnroerendErfgoed)" + }, + { + "key": "wikidata", + "description": "Layer 'Tree' shows and asks freeform values for key 'wikidata' (in the mapcomplete.org theme 'Into nature') (This is only shown if denotation=landmark | denotation=natural_monument | wikidata~.+)" } ] } \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_onwheels.json b/Docs/TagInfo/mapcomplete_onwheels.json index 90a65d7a69..da40da5bb5 100644 --- a/Docs/TagInfo/mapcomplete_onwheels.json +++ b/Docs/TagInfo/mapcomplete_onwheels.json @@ -229,6 +229,16 @@ "description": "Layer 'Cafés and pubs' shows service:electricity=no with a fixed text, namely 'There are a no domestic sockets available to customers seated indoors' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", "value": "no" }, + { + "key": "outdoor_seating", + "description": "Layer 'Cafés and pubs' shows outdoor_seating=yes with a fixed text, namely 'This place has outdoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", + "value": "yes" + }, + { + "key": "indoor_seating", + "description": "Layer 'Cafés and pubs' shows indoor_seating=yes with a fixed text, namely 'This place has indoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", + "value": "yes" + }, { "key": "dog", "description": "Layer 'Cafés and pubs' shows dog=yes with a fixed text, namely 'Dogs are allowed' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", @@ -884,6 +894,25 @@ "description": "Layer 'Restaurants and fast food' shows delivery=no with a fixed text, namely 'This business does not deliver at home' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", "value": "no" }, + { + "key": "drive_through", + "description": "Layer 'Restaurants and fast food' shows drive_through=yes with a fixed text, namely 'This fast-food restaurant has a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if amenity=fast_food)", + "value": "yes" + }, + { + "key": "drive_through", + "description": "Layer 'Restaurants and fast food' shows drive_through=no with a fixed text, namely 'This fast-food restaurant does not have a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if amenity=fast_food)", + "value": "no" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'opening_hours:drive_through' (in the mapcomplete.org theme 'OnWheels') (This is only shown if drive_through=yes)" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Restaurants and fast food' shows opening_hours:drive_through= with a fixed text, namely 'The opening hours of the drive-through are the same as the restaurant' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') Picking this answer will delete the key opening_hours:drive_through. (This is only shown if drive_through=yes)", + "value": "" + }, { "key": "diet:vegetarian", "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=no with a fixed text, namely 'No vegetarian options are available' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') (This is only shown if cuisine!=friture)", @@ -1144,6 +1173,16 @@ "description": "Layer 'Restaurants and fast food' shows service:electricity=no with a fixed text, namely 'There are a no domestic sockets available to customers seated indoors' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", "value": "no" }, + { + "key": "outdoor_seating", + "description": "Layer 'Restaurants and fast food' shows outdoor_seating=yes with a fixed text, namely 'This place has outdoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", + "value": "yes" + }, + { + "key": "indoor_seating", + "description": "Layer 'Restaurants and fast food' shows indoor_seating=yes with a fixed text, namely 'This place has indoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", + "value": "yes" + }, { "key": "dog", "description": "Layer 'Restaurants and fast food' shows dog=yes with a fixed text, namely 'Dogs are allowed' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", @@ -1432,6 +1471,15 @@ "key": "capacity", "description": "Layer 'Parking' shows and asks freeform values for key 'capacity' (in the mapcomplete.org theme 'OnWheels')" }, + { + "key": "maxstay", + "description": "Layer 'Parking' shows and asks freeform values for key 'maxstay' (in the mapcomplete.org theme 'OnWheels')" + }, + { + "key": "maxstay", + "description": "Layer 'Parking' shows maxstay=unlimited with a fixed text, namely 'There is no limit to the amount of time one can stay here' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')", + "value": "unlimited" + }, { "key": "parking_space", "description": "The MapComplete theme OnWheels has a layer Disabled parking spaces showing features with this tag", diff --git a/Docs/TagInfo/mapcomplete_parkings.json b/Docs/TagInfo/mapcomplete_parkings.json index 94bfb57e13..e12882565a 100644 --- a/Docs/TagInfo/mapcomplete_parkings.json +++ b/Docs/TagInfo/mapcomplete_parkings.json @@ -141,6 +141,15 @@ "key": "capacity", "description": "Layer 'Parking' shows and asks freeform values for key 'capacity' (in the mapcomplete.org theme 'Parking')" }, + { + "key": "maxstay", + "description": "Layer 'Parking' shows and asks freeform values for key 'maxstay' (in the mapcomplete.org theme 'Parking')" + }, + { + "key": "maxstay", + "description": "Layer 'Parking' shows maxstay=unlimited with a fixed text, namely 'There is no limit to the amount of time one can stay here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Parking')", + "value": "unlimited" + }, { "key": "amenity", "description": "The MapComplete theme Parking has a layer Parking Spaces showing features with this tag", @@ -1699,11 +1708,11 @@ }, { "key": "maxstay", - "description": "Layer 'Charging stations' shows and asks freeform values for key 'maxstay' (in the mapcomplete.org theme 'Parking') (This is only shown if maxstay~.+ | motorcar=yes | hgv=yes | bus=yes)" + "description": "Layer 'Charging stations' shows and asks freeform values for key 'maxstay' (in the mapcomplete.org theme 'Parking') (This is only shown if motorcar=yes | hgv=yes | bus=yes)" }, { "key": "maxstay", - "description": "Layer 'Charging stations' shows maxstay=unlimited with a fixed text, namely 'No timelimit on leaving your vehicle here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Parking') (This is only shown if maxstay~.+ | motorcar=yes | hgv=yes | bus=yes)", + "description": "Layer 'Charging stations' shows maxstay=unlimited with a fixed text, namely 'There is no limit to the amount of time one can stay here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Parking') (This is only shown if motorcar=yes | hgv=yes | bus=yes)", "value": "unlimited" }, { diff --git a/Docs/TagInfo/mapcomplete_pets.json b/Docs/TagInfo/mapcomplete_pets.json index db0f037c4e..b90d82d6b4 100644 --- a/Docs/TagInfo/mapcomplete_pets.json +++ b/Docs/TagInfo/mapcomplete_pets.json @@ -447,6 +447,25 @@ "description": "Layer 'Dog friendly eateries' shows delivery=no with a fixed text, namely 'This business does not deliver at home' and allows to pick this as a default answer (in the mapcomplete.org theme 'Veterinarians, dog parks and other pet-amenities')", "value": "no" }, + { + "key": "drive_through", + "description": "Layer 'Dog friendly eateries' shows drive_through=yes with a fixed text, namely 'This fast-food restaurant has a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'Veterinarians, dog parks and other pet-amenities') (This is only shown if amenity=fast_food)", + "value": "yes" + }, + { + "key": "drive_through", + "description": "Layer 'Dog friendly eateries' shows drive_through=no with a fixed text, namely 'This fast-food restaurant does not have a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'Veterinarians, dog parks and other pet-amenities') (This is only shown if amenity=fast_food)", + "value": "no" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Dog friendly eateries' shows and asks freeform values for key 'opening_hours:drive_through' (in the mapcomplete.org theme 'Veterinarians, dog parks and other pet-amenities') (This is only shown if drive_through=yes)" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Dog friendly eateries' shows opening_hours:drive_through= with a fixed text, namely 'The opening hours of the drive-through are the same as the restaurant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Veterinarians, dog parks and other pet-amenities') Picking this answer will delete the key opening_hours:drive_through. (This is only shown if drive_through=yes)", + "value": "" + }, { "key": "diet:vegetarian", "description": "Layer 'Dog friendly eateries' shows diet:vegetarian=no with a fixed text, namely 'No vegetarian options are available' and allows to pick this as a default answer (in the mapcomplete.org theme 'Veterinarians, dog parks and other pet-amenities') (This is only shown if cuisine!=friture)", @@ -707,6 +726,16 @@ "description": "Layer 'Dog friendly eateries' shows service:electricity=no with a fixed text, namely 'There are a no domestic sockets available to customers seated indoors' and allows to pick this as a default answer (in the mapcomplete.org theme 'Veterinarians, dog parks and other pet-amenities')", "value": "no" }, + { + "key": "outdoor_seating", + "description": "Layer 'Dog friendly eateries' shows outdoor_seating=yes with a fixed text, namely 'This place has outdoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "yes" + }, + { + "key": "indoor_seating", + "description": "Layer 'Dog friendly eateries' shows indoor_seating=yes with a fixed text, namely 'This place has indoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Veterinarians, dog parks and other pet-amenities')", + "value": "yes" + }, { "key": "dog", "description": "Layer 'Dog friendly eateries' shows dog=yes with a fixed text, namely 'Dogs are allowed' and allows to pick this as a default answer (in the mapcomplete.org theme 'Veterinarians, dog parks and other pet-amenities')", diff --git a/Docs/TagInfo/mapcomplete_playgrounds.json b/Docs/TagInfo/mapcomplete_playgrounds.json index ac5167f1e9..298e346afa 100644 --- a/Docs/TagInfo/mapcomplete_playgrounds.json +++ b/Docs/TagInfo/mapcomplete_playgrounds.json @@ -1167,62 +1167,62 @@ }, { "key": "access", - "description": "Layer 'BBQ' shows access=yes with a fixed text, namely 'Public' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "description": "Layer 'BBQ' shows access=yes with a fixed text, namely 'This barbecue can be used by anyone' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", "value": "yes" }, { "key": "access", - "description": "Layer 'BBQ' shows access=no with a fixed text, namely 'No access' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "description": "Layer 'BBQ' shows access=no with a fixed text, namely 'This barbecue can't be used by anyone' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", "value": "no" }, { "key": "access", - "description": "Layer 'BBQ' shows access=private with a fixed text, namely 'Private' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "description": "Layer 'BBQ' shows access=private with a fixed text, namely 'This barbecue is private' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", "value": "private" }, { "key": "access", - "description": "Layer 'BBQ' shows access=permissive with a fixed text, namely 'Access until revoked' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "description": "Layer 'BBQ' shows access=permissive with a fixed text, namely 'This barbecue can be used by anyone, but the owner can revoke access at any time' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", "value": "permissive" }, { "key": "access", - "description": "Layer 'BBQ' shows access=customers with a fixed text, namely 'Access only for customers' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "description": "Layer 'BBQ' shows access=customers with a fixed text, namely 'This barbecue can only be used by customers' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", "value": "customers" }, { "key": "access", - "description": "Layer 'BBQ' shows access=permit with a fixed text, namely 'Access only for authorized persons' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "description": "Layer 'BBQ' shows access=permit with a fixed text, namely 'This barbecue can only be used by authorized persons' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", "value": "permit" }, { "key": "covered", - "description": "Layer 'BBQ' shows covered=no with a fixed text, namely 'The grill is not covered' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "description": "Layer 'BBQ' shows covered=no with a fixed text, namely 'This barbecue is not covered' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", "value": "no" }, { "key": "covered", - "description": "Layer 'BBQ' shows covered=yes with a fixed text, namely 'The grill is covered' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "description": "Layer 'BBQ' shows covered=yes with a fixed text, namely 'This barbecue is covered' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", "value": "yes" }, { "key": "fuel", - "description": "Layer 'BBQ' shows fuel=wood with a fixed text, namely 'Wood' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "description": "Layer 'BBQ' shows fuel=wood with a fixed text, namely 'This barbecue uses wood as fuel' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", "value": "wood" }, { "key": "fuel", - "description": "Layer 'BBQ' shows fuel=charcoal with a fixed text, namely 'Charcoal' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "description": "Layer 'BBQ' shows fuel=charcoal with a fixed text, namely 'This barbecue uses charcoal as fuel' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", "value": "charcoal" }, { "key": "fuel", - "description": "Layer 'BBQ' shows fuel=electric with a fixed text, namely 'Electric' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "description": "Layer 'BBQ' shows fuel=electric with a fixed text, namely 'This barbecue is powered by electricity' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", "value": "electric" }, { "key": "fuel", - "description": "Layer 'BBQ' shows fuel=gas with a fixed text, namely 'Gas' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", + "description": "Layer 'BBQ' shows fuel=gas with a fixed text, namely 'This barbecue uses gas as fuel' and allows to pick this as a default answer (in the mapcomplete.org theme 'Playgrounds')", "value": "gas" } ] diff --git a/Docs/TagInfo/mapcomplete_ski.json b/Docs/TagInfo/mapcomplete_ski.json index b2cfe66397..5055d6f47a 100644 --- a/Docs/TagInfo/mapcomplete_ski.json +++ b/Docs/TagInfo/mapcomplete_ski.json @@ -144,7 +144,7 @@ }, { "key": "aerialway", - "description": "Layer 'Aerialways' shows aerialway=rope_tow with a fixed text, namely 'A tow line which which drags skieers' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", + "description": "Layer 'Aerialways' shows aerialway=rope_tow with a fixed text, namely 'A tow line which skiers hold on to or attach themselves onto' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", "value": "rope_tow" }, { @@ -154,7 +154,7 @@ }, { "key": "aerialway", - "description": "Layer 'Aerialways' shows aerialway=zip_line with a fixed text, namely 'A zip line. (A touristical attraction where adventurous people go down at high speeds) ' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", + "description": "Layer 'Aerialways' shows aerialway=zip_line with a fixed text, namely 'A zip line. (A touristic attraction where adventurous people go down at high speeds)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", "value": "zip_line" }, { @@ -1278,6 +1278,25 @@ "description": "Layer 'Restaurants and fast food' shows delivery=no with a fixed text, namely 'This business does not deliver at home' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", "value": "no" }, + { + "key": "drive_through", + "description": "Layer 'Restaurants and fast food' shows drive_through=yes with a fixed text, namely 'This fast-food restaurant has a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if amenity=fast_food)", + "value": "yes" + }, + { + "key": "drive_through", + "description": "Layer 'Restaurants and fast food' shows drive_through=no with a fixed text, namely 'This fast-food restaurant does not have a drive-through' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if amenity=fast_food)", + "value": "no" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'opening_hours:drive_through' (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if drive_through=yes)" + }, + { + "key": "opening_hours:drive_through", + "description": "Layer 'Restaurants and fast food' shows opening_hours:drive_through= with a fixed text, namely 'The opening hours of the drive-through are the same as the restaurant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') Picking this answer will delete the key opening_hours:drive_through. (This is only shown if drive_through=yes)", + "value": "" + }, { "key": "diet:vegetarian", "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=no with a fixed text, namely 'No vegetarian options are available' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways') (This is only shown if cuisine!=friture)", @@ -1538,6 +1557,16 @@ "description": "Layer 'Restaurants and fast food' shows service:electricity=no with a fixed text, namely 'There are a no domestic sockets available to customers seated indoors' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", "value": "no" }, + { + "key": "outdoor_seating", + "description": "Layer 'Restaurants and fast food' shows outdoor_seating=yes with a fixed text, namely 'This place has outdoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", + "value": "yes" + }, + { + "key": "indoor_seating", + "description": "Layer 'Restaurants and fast food' shows indoor_seating=yes with a fixed text, namely 'This place has indoor seating' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", + "value": "yes" + }, { "key": "dog", "description": "Layer 'Restaurants and fast food' shows dog=yes with a fixed text, namely 'Dogs are allowed' and allows to pick this as a default answer (in the mapcomplete.org theme 'Ski pistes and aerialways')", diff --git a/Docs/TagInfo/mapcomplete_sports.json b/Docs/TagInfo/mapcomplete_sports.json index 82b0c2e97c..9f8d1f200a 100644 --- a/Docs/TagInfo/mapcomplete_sports.json +++ b/Docs/TagInfo/mapcomplete_sports.json @@ -730,7 +730,7 @@ }, { "key": "sport", - "description": "Layer 'Sports centres' shows sport=climbing with a fixed text, namely 'Rock climbing' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sports')", + "description": "Layer 'Sports centres' shows sport=climbing with a fixed text, namely 'Climbing' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sports')", "value": "climbing" }, { diff --git a/Docs/TagInfo/mapcomplete_transit.json b/Docs/TagInfo/mapcomplete_transit.json index f189b9ec98..432d9559eb 100644 --- a/Docs/TagInfo/mapcomplete_transit.json +++ b/Docs/TagInfo/mapcomplete_transit.json @@ -575,6 +575,15 @@ "key": "capacity", "description": "Layer 'Parking' shows and asks freeform values for key 'capacity' (in the mapcomplete.org theme 'Bus routes')" }, + { + "key": "maxstay", + "description": "Layer 'Parking' shows and asks freeform values for key 'maxstay' (in the mapcomplete.org theme 'Bus routes')" + }, + { + "key": "maxstay", + "description": "Layer 'Parking' shows maxstay=unlimited with a fixed text, namely 'There is no limit to the amount of time one can stay here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Bus routes')", + "value": "unlimited" + }, { "key": "amenity", "description": "The MapComplete theme Bus routes has a layer Shelter showing features with this tag", diff --git a/Docs/Themes/cyclofix.md b/Docs/Themes/cyclofix.md index d644ccf3e7..6adf6e6784 100644 --- a/Docs/Themes/cyclofix.md +++ b/Docs/Themes/cyclofix.md @@ -244,7 +244,7 @@ These layers can not be reused in different themes. This layer is based on [assisted_repair](../Layers/assisted_repair.md) -A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles. +A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles. - This layer is shown at zoomlevel **11** and higher @@ -1740,9 +1740,9 @@ This tagrendering is only visible in the popup if the following condition is met The question is `What is the maximum amount of time one is allowed to stay here?` *One can stay at most {canonical(maxstay)}* is shown if `maxstay` is set - - *No timelimit on leaving your vehicle here* is shown if with maxstay=unlimited + - *There is no limit to the amount of time one can stay here* is shown if with maxstay=unlimited -This tagrendering is only visible in the popup if the following condition is met: bus=yes | hgv=yes | motorcar=yes | maxstay~.+ +This tagrendering is only visible in the popup if the following condition is met: bus=yes | hgv=yes | motorcar=yes ### Network diff --git a/Docs/Themes/etymology.md b/Docs/Themes/etymology.md index 13d9530511..fe82ecdd93 100644 --- a/Docs/Themes/etymology.md +++ b/Docs/Themes/etymology.md @@ -16,6 +16,7 @@ This theme contains the following layers: - [toursistic_places_without_etymology (defined in this theme)](#toursistic_places_without_etymology) - [health_and_social_places_without_etymology (defined in this theme)](#health_and_social_places_without_etymology) - [sport_places_without_etymology (defined in this theme)](#sport_places_without_etymology) + - [parks_without_etymology (defined in this theme)](#parks_without_etymology) Available languages: @@ -137,6 +138,20 @@ Available languages: + [etymology_multi_apply](#etymology_multi_apply) + [wikipedia](#wikipedia) + [lod](#lod) +9. [parks_without_etymology](#parks_without_etymology) + - [Basic tags for this layer](#basic-tags-for-this-layer) + - [Supported attributes](#supported-attributes) + + [etymology-images-from-wikipedia](#etymology-images-from-wikipedia) + + [wikipedia-etymology](#wikipedia-etymology) + + [Wikipedia article of the name giver](#wikipedia-article-of-the-name-giver) + + [zoeken op inventaris onroerend erfgoed](#zoeken-op-inventaris-onroerend-erfgoed) + + [simple etymology](#simple-etymology) + + [questions](#questions) + + [street-name-sign-image](#street-name-sign-image) + + [minimap](#minimap) + + [etymology_multi_apply](#etymology_multi_apply) + + [wikipedia](#wikipedia) + + [lod](#lod) # Layers defined in this theme configuration file These layers can not be reused in different themes. @@ -741,6 +756,92 @@ This tagrendering is only visible in the popup if the following condition is met _This tagrendering has no question and is thus read-only_ *{linked_data_from_website()}* +This tagrendering has labels +`added_by_default` +# parks_without_etymology + +This layer is based on [etymology](../Layers/etymology.md) + +All objects which have an etymology known + + - This layer is shown at zoomlevel **18** and higher + +No themes use this layer + +## Basic tags for this layer + +Elements must match **all** of the following expressions: + +0. landuse=village_green | landuse=recreation_ground | leisure=park +1. name~.+ + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22landuse%22%3D%22village_green%22%5D%5B%22name%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22landuse%22%3D%22recreation_ground%22%5D%5B%22name%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22leisure%22%3D%22park%22%5D%5B%22name%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + +## Supported attributes + +**Warning:**,this quick overview is incomplete, + +| attribute | type | values which are supported by this layer | +-----|-----|----- | +| [name:etymology:wikidata](https://wiki.openstreetmap.org/wiki/Key:name:etymology:wikidata) | [wikidata](../SpecialInputElements.md#wikidata) | | +| [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology) | [text](../SpecialInputElements.md#text) | [unknown](https://wiki.openstreetmap.org/wiki/Tag:name:etymology%3Dunknown) | + +### etymology-images-from-wikipedia + +_This tagrendering has no question and is thus read-only_ +*{image_carousel(name:etymology:wikidata)}* + +### wikipedia-etymology + +The question is `What is the Wikidata-item that this object is named after?` +*

Wikipedia article of the name giver

{wikipedia(name:etymology:wikidata):max-height:20rem}* is shown if `name:etymology:wikidata` is set + +### zoeken op inventaris onroerend erfgoed + +_This tagrendering has no question and is thus read-only_ +*Search on inventaris onroerend erfgoed* + +This tagrendering is only visible in the popup if the following condition is met: _country=be + +### simple etymology + +The question is `What is this object named after?` +*Named after {name:etymology}* is shown if `name:etymology` is set + + - *The origin of this name is unknown in all literature* is shown if with name:etymology=unknown + +### questions +Show the questions block at this location +_This tagrendering has no question and is thus read-only_ +*{questions()}* + +### street-name-sign-image + +_This tagrendering has no question and is thus read-only_ +*{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}* + +### minimap + +_This tagrendering has no question and is thus read-only_ +*{minimap(18, id, _same_name_ids):height:10rem}* + +### etymology_multi_apply + +_This tagrendering has no question and is thus read-only_ +*{multi_apply(_same_name_ids, name:etymology:wikidata;name:etymology, Auto-applying data on all segments with the same name, true)}* + +### wikipedia + +_This tagrendering has no question and is thus read-only_ +*A Wikipedia article about this street exists:
{wikipedia():max-height:25rem}* + +This tagrendering is only visible in the popup if the following condition is met: wikidata~.+ + +### lod + +_This tagrendering has no question and is thus read-only_ +*{linked_data_from_website()}* + This tagrendering has labels `added_by_default` diff --git a/Docs/Themes/fritures.md b/Docs/Themes/fritures.md index d920df26fb..28686c53e2 100644 --- a/Docs/Themes/fritures.md +++ b/Docs/Themes/fritures.md @@ -52,6 +52,9 @@ Available languages: + [Reservation](#reservation) + [Takeaway](#takeaway) + [delivery](#delivery) + + [drive-through](#drive-through) + + [drive-through-opening_hours](#drive-through-opening_hours) + + [Drive-through opening hours](#drive-through-opening-hours) + [Vegetarian (no friture)](#vegetarian-(no-friture)) + [Vegan (no friture)](#vegan-(no-friture)) + [halal (no friture)](#halal-(no-friture)) @@ -66,6 +69,7 @@ Available languages: + [lactose_free](#lactose_free) + [smoking](#smoking) + [service:electricity](#serviceelectricity) + + [seating](#seating) + [dog-access](#dog-access) + [internet](#internet) + [internet-fee](#internet-fee) @@ -116,6 +120,8 @@ Elements must match **all** of the following expressions: | [reservation](https://wiki.openstreetmap.org/wiki/Key:reservation) | Multiple choice | [required](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drequired) [recommended](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drecommended) [yes](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dno) | | [takeaway](https://wiki.openstreetmap.org/wiki/Key:takeaway) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dno) | | [delivery](https://wiki.openstreetmap.org/wiki/Key:delivery) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dno) | +| [drive_through](https://wiki.openstreetmap.org/wiki/Key:drive_through) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dno) | +| [opening_hours:drive_through](https://wiki.openstreetmap.org/wiki/Key:opening_hours:drive_through) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://wiki.openstreetmap.org/wiki/Tag:opening_hours:drive_through%3D) | | [diet:vegetarian](https://wiki.openstreetmap.org/wiki/Key:diet:vegetarian) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Don_demand) | | [diet:vegan](https://wiki.openstreetmap.org/wiki/Key:diet:vegan) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Don_demand) | | [diet:halal](https://wiki.openstreetmap.org/wiki/Key:diet:halal) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Donly) | @@ -299,6 +305,24 @@ The question is `Does {title()} deliver food to your home?` - *This business does home delivery (possibly via a third party)* is shown if with delivery=yes - *This business does not deliver at home* is shown if with delivery=no +### drive-through + +The question is `Does this fast-food restaurant have a drive-through?` + + - *This fast-food restaurant has a drive-through* is shown if with drive_through=yes + - *This fast-food restaurant does not have a drive-through* is shown if with drive_through=no + +This tagrendering is only visible in the popup if the following condition is met: amenity=fast_food + +### drive-through-opening_hours + +The question is `What are the opening hours of the drive-through?` +*

Drive-through opening hours

{opening_hours_table(opening_hours:drive_through)}* is shown if `opening_hours:drive_through` is set + + - *The opening hours of the drive-through are the same as the restaurant* is shown if with opening_hours:drive_through= + +This tagrendering is only visible in the popup if the following condition is met: drive_through=yes + ### Vegetarian (no friture) The question is `Does this restaurant have a vegetarian option?` @@ -440,6 +464,13 @@ The question is `Does this amenity have electrical outlets, available to custome - *There are no sockets available indoors to customers, but charging might be possible if the staff is asked* is shown if with service:electricity=ask - *There are a no domestic sockets available to customers seated indoors* is shown if with service:electricity=no +### seating + +The question is `What kind of seating does {title()} have?` + + - *This place has outdoor seating* is shown if with outdoor_seating=yes. Unselecting this answer will add outdoor_seating=no + - *This place has indoor seating* is shown if with indoor_seating=yes. Unselecting this answer will add indoor_seating=no + ### dog-access The question is `Are dogs allowed in this business?` @@ -554,6 +585,14 @@ This tagrendering has labels -----|-----|----- | | lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited | +| id | question | osmTags | +-----|-----|----- | +| outdoor_seating.0 | Has outdoor seating | outdoor_seating=yes | + +| id | question | osmTags | +-----|-----|----- | +| indoor_seating.0 | Has indoor seating | indoor_seating=yes | + | id | question | osmTags | -----|-----|----- | | accepts_cash.0 | Accepts cash | payment:cash=yes | diff --git a/Docs/Themes/glutenfree.md b/Docs/Themes/glutenfree.md index 7b5f541769..4c84db1a29 100644 --- a/Docs/Themes/glutenfree.md +++ b/Docs/Themes/glutenfree.md @@ -57,6 +57,9 @@ Available languages: + [Reservation](#reservation) + [Takeaway](#takeaway) + [delivery](#delivery) + + [drive-through](#drive-through) + + [drive-through-opening_hours](#drive-through-opening_hours) + + [Drive-through opening hours](#drive-through-opening-hours) + [Vegetarian (no friture)](#vegetarian-(no-friture)) + [Vegan (no friture)](#vegan-(no-friture)) + [halal (no friture)](#halal-(no-friture)) @@ -70,6 +73,7 @@ Available languages: + [lactose_free](#lactose_free) + [smoking](#smoking) + [service:electricity](#serviceelectricity) + + [seating](#seating) + [dog-access](#dog-access) + [internet](#internet) + [internet-fee](#internet-fee) @@ -192,6 +196,8 @@ Elements must match **all** of the following expressions: | [reservation](https://wiki.openstreetmap.org/wiki/Key:reservation) | Multiple choice | [required](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drequired) [recommended](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drecommended) [yes](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dno) | | [takeaway](https://wiki.openstreetmap.org/wiki/Key:takeaway) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dno) | | [delivery](https://wiki.openstreetmap.org/wiki/Key:delivery) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dno) | +| [drive_through](https://wiki.openstreetmap.org/wiki/Key:drive_through) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dno) | +| [opening_hours:drive_through](https://wiki.openstreetmap.org/wiki/Key:opening_hours:drive_through) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://wiki.openstreetmap.org/wiki/Tag:opening_hours:drive_through%3D) | | [diet:vegetarian](https://wiki.openstreetmap.org/wiki/Key:diet:vegetarian) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Don_demand) | | [diet:vegan](https://wiki.openstreetmap.org/wiki/Key:diet:vegan) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Don_demand) | | [diet:halal](https://wiki.openstreetmap.org/wiki/Key:diet:halal) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Donly) | @@ -386,6 +392,24 @@ The question is `Does {title()} deliver food to your home?` - *This business does home delivery (possibly via a third party)* is shown if with delivery=yes - *This business does not deliver at home* is shown if with delivery=no +### drive-through + +The question is `Does this fast-food restaurant have a drive-through?` + + - *This fast-food restaurant has a drive-through* is shown if with drive_through=yes + - *This fast-food restaurant does not have a drive-through* is shown if with drive_through=no + +This tagrendering is only visible in the popup if the following condition is met: amenity=fast_food + +### drive-through-opening_hours + +The question is `What are the opening hours of the drive-through?` +*

Drive-through opening hours

{opening_hours_table(opening_hours:drive_through)}* is shown if `opening_hours:drive_through` is set + + - *The opening hours of the drive-through are the same as the restaurant* is shown if with opening_hours:drive_through= + +This tagrendering is only visible in the popup if the following condition is met: drive_through=yes + ### Vegetarian (no friture) The question is `Does this restaurant have a vegetarian option?` @@ -515,6 +539,13 @@ The question is `Does this amenity have electrical outlets, available to custome - *There are no sockets available indoors to customers, but charging might be possible if the staff is asked* is shown if with service:electricity=ask - *There are a no domestic sockets available to customers seated indoors* is shown if with service:electricity=no +### seating + +The question is `What kind of seating does {title()} have?` + + - *This place has outdoor seating* is shown if with outdoor_seating=yes. Unselecting this answer will add outdoor_seating=no + - *This place has indoor seating* is shown if with indoor_seating=yes. Unselecting this answer will add indoor_seating=no + ### dog-access The question is `Are dogs allowed in this business?` @@ -629,6 +660,14 @@ This tagrendering has labels -----|-----|----- | | lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited | +| id | question | osmTags | +-----|-----|----- | +| outdoor_seating.0 | Has outdoor seating | outdoor_seating=yes | + +| id | question | osmTags | +-----|-----|----- | +| indoor_seating.0 | Has indoor seating | indoor_seating=yes | + | id | question | osmTags | -----|-----|----- | | accepts_cash.0 | Accepts cash | payment:cash=yes | diff --git a/Docs/Themes/insects.md b/Docs/Themes/insects.md new file mode 100644 index 0000000000..ae6b7aae65 --- /dev/null +++ b/Docs/Themes/insects.md @@ -0,0 +1,23 @@ +[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources) + +## Insect Hotels ( [insects](https://mapcomplete.org/insects) ) +_This document details some technical information about this MapComplete theme, mostly about the attributes used in the theme. Various links point toward more information about the attributes, e.g. to the OpenStreetMap-wiki, to TagInfo or tools creating statistics_ +The theme introduction reads: + +> Insect hotels provide shelter for insects. + +This theme contains the following layers: + + - [insect_hotel](../Layers/insect_hotel.md) + - [beehive](../Layers/beehive.md) + +Available languages: + + - en + - nl + +# Layers defined in this theme configuration file +These layers can not be reused in different themes. + + +This document is autogenerated from [assets/themes/insects/insects.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/insects/insects.json) diff --git a/Docs/Themes/lactosefree.md b/Docs/Themes/lactosefree.md index f49b25b489..7dec558b68 100644 --- a/Docs/Themes/lactosefree.md +++ b/Docs/Themes/lactosefree.md @@ -54,6 +54,9 @@ Available languages: + [Reservation](#reservation) + [Takeaway](#takeaway) + [delivery](#delivery) + + [drive-through](#drive-through) + + [drive-through-opening_hours](#drive-through-opening_hours) + + [Drive-through opening hours](#drive-through-opening-hours) + [Vegetarian (no friture)](#vegetarian-(no-friture)) + [Vegan (no friture)](#vegan-(no-friture)) + [halal (no friture)](#halal-(no-friture)) @@ -67,6 +70,7 @@ Available languages: + [gluten_free](#gluten_free) + [smoking](#smoking) + [service:electricity](#serviceelectricity) + + [seating](#seating) + [dog-access](#dog-access) + [internet](#internet) + [internet-fee](#internet-fee) @@ -189,6 +193,8 @@ Elements must match **all** of the following expressions: | [reservation](https://wiki.openstreetmap.org/wiki/Key:reservation) | Multiple choice | [required](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drequired) [recommended](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drecommended) [yes](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dno) | | [takeaway](https://wiki.openstreetmap.org/wiki/Key:takeaway) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dno) | | [delivery](https://wiki.openstreetmap.org/wiki/Key:delivery) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dno) | +| [drive_through](https://wiki.openstreetmap.org/wiki/Key:drive_through) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dno) | +| [opening_hours:drive_through](https://wiki.openstreetmap.org/wiki/Key:opening_hours:drive_through) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://wiki.openstreetmap.org/wiki/Tag:opening_hours:drive_through%3D) | | [diet:vegetarian](https://wiki.openstreetmap.org/wiki/Key:diet:vegetarian) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Don_demand) | | [diet:vegan](https://wiki.openstreetmap.org/wiki/Key:diet:vegan) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Don_demand) | | [diet:halal](https://wiki.openstreetmap.org/wiki/Key:diet:halal) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Donly) | @@ -383,6 +389,24 @@ The question is `Does {title()} deliver food to your home?` - *This business does home delivery (possibly via a third party)* is shown if with delivery=yes - *This business does not deliver at home* is shown if with delivery=no +### drive-through + +The question is `Does this fast-food restaurant have a drive-through?` + + - *This fast-food restaurant has a drive-through* is shown if with drive_through=yes + - *This fast-food restaurant does not have a drive-through* is shown if with drive_through=no + +This tagrendering is only visible in the popup if the following condition is met: amenity=fast_food + +### drive-through-opening_hours + +The question is `What are the opening hours of the drive-through?` +*

Drive-through opening hours

{opening_hours_table(opening_hours:drive_through)}* is shown if `opening_hours:drive_through` is set + + - *The opening hours of the drive-through are the same as the restaurant* is shown if with opening_hours:drive_through= + +This tagrendering is only visible in the popup if the following condition is met: drive_through=yes + ### Vegetarian (no friture) The question is `Does this restaurant have a vegetarian option?` @@ -512,6 +536,13 @@ The question is `Does this amenity have electrical outlets, available to custome - *There are no sockets available indoors to customers, but charging might be possible if the staff is asked* is shown if with service:electricity=ask - *There are a no domestic sockets available to customers seated indoors* is shown if with service:electricity=no +### seating + +The question is `What kind of seating does {title()} have?` + + - *This place has outdoor seating* is shown if with outdoor_seating=yes. Unselecting this answer will add outdoor_seating=no + - *This place has indoor seating* is shown if with indoor_seating=yes. Unselecting this answer will add indoor_seating=no + ### dog-access The question is `Are dogs allowed in this business?` @@ -626,6 +657,14 @@ This tagrendering has labels -----|-----|----- | | lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited | +| id | question | osmTags | +-----|-----|----- | +| outdoor_seating.0 | Has outdoor seating | outdoor_seating=yes | + +| id | question | osmTags | +-----|-----|----- | +| indoor_seating.0 | Has indoor seating | indoor_seating=yes | + | id | question | osmTags | -----|-----|----- | | accepts_cash.0 | Accepts cash | payment:cash=yes | diff --git a/Docs/Themes/nature.md b/Docs/Themes/nature.md index 9fa74bf722..ac6f47d6f1 100644 --- a/Docs/Themes/nature.md +++ b/Docs/Themes/nature.md @@ -20,6 +20,8 @@ This theme contains the following layers: - [shelter](../Layers/shelter.md) - [bbq](../Layers/bbq.md) - [firepit](../Layers/firepit.md) + - [insect_hotel](../Layers/insect_hotel.md) + - [tree_node](../Layers/tree_node.md) Available languages: diff --git a/Docs/Themes/openlovemap.md b/Docs/Themes/openlovemap.md index c7abb0cd32..120634cefe 100644 --- a/Docs/Themes/openlovemap.md +++ b/Docs/Themes/openlovemap.md @@ -1293,7 +1293,7 @@ This tagrendering has labels This layer is based on [cinema](../Layers/cinema.md) - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US +A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US. - This layer is shown at zoomlevel **6** and higher diff --git a/Docs/Themes/personal.md b/Docs/Themes/personal.md index e2800de7bf..9e51356e52 100644 --- a/Docs/Themes/personal.md +++ b/Docs/Themes/personal.md @@ -19,6 +19,7 @@ This theme contains the following layers: - [bank](../Layers/bank.md) - [barrier](../Layers/barrier.md) - [bbq](../Layers/bbq.md) + - [beehive](../Layers/beehive.md) - [bench](../Layers/bench.md) - [bench_at_pt](../Layers/bench_at_pt.md) - [bicycle_counter](../Layers/bicycle_counter.md) @@ -75,6 +76,7 @@ This theme contains the following layers: - [ice_cream](../Layers/ice_cream.md) - [indoors](../Layers/indoors.md) - [information_board](../Layers/information_board.md) + - [insect_hotel](../Layers/insect_hotel.md) - [kerbs](../Layers/kerbs.md) - [kindergarten_childcare](../Layers/kindergarten_childcare.md) - [lighthouse](../Layers/lighthouse.md) diff --git a/Docs/Themes/pets.md b/Docs/Themes/pets.md index 30d4d1c73a..b882bc6716 100644 --- a/Docs/Themes/pets.md +++ b/Docs/Themes/pets.md @@ -61,6 +61,9 @@ Available languages: + [Reservation](#reservation) + [Takeaway](#takeaway) + [delivery](#delivery) + + [drive-through](#drive-through) + + [drive-through-opening_hours](#drive-through-opening_hours) + + [Drive-through opening hours](#drive-through-opening-hours) + [Vegetarian (no friture)](#vegetarian-(no-friture)) + [Vegan (no friture)](#vegan-(no-friture)) + [halal (no friture)](#halal-(no-friture)) @@ -75,6 +78,7 @@ Available languages: + [lactose_free](#lactose_free) + [smoking](#smoking) + [service:electricity](#serviceelectricity) + + [seating](#seating) + [dog-access](#dog-access) + [internet](#internet) + [internet-fee](#internet-fee) @@ -174,6 +178,8 @@ Elements must match **all** of the following expressions: | [reservation](https://wiki.openstreetmap.org/wiki/Key:reservation) | Multiple choice | [required](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drequired) [recommended](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Drecommended) [yes](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:reservation%3Dno) | | [takeaway](https://wiki.openstreetmap.org/wiki/Key:takeaway) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:takeaway%3Dno) | | [delivery](https://wiki.openstreetmap.org/wiki/Key:delivery) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:delivery%3Dno) | +| [drive_through](https://wiki.openstreetmap.org/wiki/Key:drive_through) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drive_through%3Dno) | +| [opening_hours:drive_through](https://wiki.openstreetmap.org/wiki/Key:opening_hours:drive_through) | [opening_hours](../SpecialInputElements.md#opening_hours) | [](https://wiki.openstreetmap.org/wiki/Tag:opening_hours:drive_through%3D) | | [diet:vegetarian](https://wiki.openstreetmap.org/wiki/Key:diet:vegetarian) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegetarian%3Don_demand) | | [diet:vegan](https://wiki.openstreetmap.org/wiki/Key:diet:vegan) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Donly) [on_demand](https://wiki.openstreetmap.org/wiki/Tag:diet:vegan%3Don_demand) | | [diet:halal](https://wiki.openstreetmap.org/wiki/Key:diet:halal) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dlimited) [yes](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Dyes) [only](https://wiki.openstreetmap.org/wiki/Tag:diet:halal%3Donly) | @@ -357,6 +363,24 @@ The question is `Does {title()} deliver food to your home?` - *This business does home delivery (possibly via a third party)* is shown if with delivery=yes - *This business does not deliver at home* is shown if with delivery=no +### drive-through + +The question is `Does this fast-food restaurant have a drive-through?` + + - *This fast-food restaurant has a drive-through* is shown if with drive_through=yes + - *This fast-food restaurant does not have a drive-through* is shown if with drive_through=no + +This tagrendering is only visible in the popup if the following condition is met: amenity=fast_food + +### drive-through-opening_hours + +The question is `What are the opening hours of the drive-through?` +*

Drive-through opening hours

{opening_hours_table(opening_hours:drive_through)}* is shown if `opening_hours:drive_through` is set + + - *The opening hours of the drive-through are the same as the restaurant* is shown if with opening_hours:drive_through= + +This tagrendering is only visible in the popup if the following condition is met: drive_through=yes + ### Vegetarian (no friture) The question is `Does this restaurant have a vegetarian option?` @@ -498,6 +522,13 @@ The question is `Does this amenity have electrical outlets, available to custome - *There are no sockets available indoors to customers, but charging might be possible if the staff is asked* is shown if with service:electricity=ask - *There are a no domestic sockets available to customers seated indoors* is shown if with service:electricity=no +### seating + +The question is `What kind of seating does {title()} have?` + + - *This place has outdoor seating* is shown if with outdoor_seating=yes. Unselecting this answer will add outdoor_seating=no + - *This place has indoor seating* is shown if with indoor_seating=yes. Unselecting this answer will add indoor_seating=no + ### dog-access The question is `Are dogs allowed in this business?` @@ -612,6 +643,14 @@ This tagrendering has labels -----|-----|----- | | lactose_free.0 | Has a lactose free offering | diet:lactose_free=yes | diet:lactose_free=only | diet:lactose_free=limited | +| id | question | osmTags | +-----|-----|----- | +| outdoor_seating.0 | Has outdoor seating | outdoor_seating=yes | + +| id | question | osmTags | +-----|-----|----- | +| indoor_seating.0 | Has indoor seating | indoor_seating=yes | + | id | question | osmTags | -----|-----|----- | | accepts_cash.0 | Accepts cash | payment:cash=yes | diff --git a/Docs/Themes/toerisme_vlaanderen.md b/Docs/Themes/toerisme_vlaanderen.md index 0e508c043b..0de078b60c 100644 --- a/Docs/Themes/toerisme_vlaanderen.md +++ b/Docs/Themes/toerisme_vlaanderen.md @@ -1308,9 +1308,9 @@ This tagrendering is only visible in the popup if the following condition is met The question is `What is the maximum amount of time one is allowed to stay here?` *One can stay at most {canonical(maxstay)}* is shown if `maxstay` is set - - *No timelimit on leaving your vehicle here* is shown if with maxstay=unlimited + - *There is no limit to the amount of time one can stay here* is shown if with maxstay=unlimited -This tagrendering is only visible in the popup if the following condition is met: bus=yes | hgv=yes | motorcar=yes | maxstay~.+ +This tagrendering is only visible in the popup if the following condition is met: bus=yes | hgv=yes | motorcar=yes ### Network diff --git a/Docs/Themes/uk_addresses.md b/Docs/Themes/uk_addresses.md index cbcc1e35be..2c26327099 100644 --- a/Docs/Themes/uk_addresses.md +++ b/Docs/Themes/uk_addresses.md @@ -125,7 +125,7 @@ This tagrendering is only visible in the popup if the following condition is met ### uk_addresses_import_button _This tagrendering has no question and is thus read-only_ -*{import_button(address,urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$,Add this address,./assets/themes/uk_addresses/housenumber_add.svg,,,,)}* +*{import_button(address,urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$,Add this address,./assets/themes/uk_addresses/housenumber_add.svg,,,,,)}* ### leftover-questions diff --git a/Docs/Themes/velopark.md b/Docs/Themes/velopark.md index 982513fe9f..7968a77ad5 100644 --- a/Docs/Themes/velopark.md +++ b/Docs/Themes/velopark.md @@ -98,7 +98,7 @@ Maproulette challenge containing velopark data This layer is loaded from an external source, namely -`https://maproulette.org/api/v2/challenge/view/43282` +`https://maproulette.org/api/v2/challenge/view/50552` No themes use this layer @@ -176,7 +176,7 @@ This tagrendering is only visible in the popup if the following condition is met ### import_point _This tagrendering has no question and is thus read-only_ -*{import_button(bike_parking_with_velopark_ref bike_parking,amenity=bicycle_parking;ref:velopark=$ref:velopark,Create a new bicycle parking in OSM. This parking will have the link&COMMA you'll be able to copy the attributes in the next step,,,,,mr_taskId)}* +*{import_button(bike_parking_with_velopark_ref bike_parking,amenity=bicycle_parking;ref:velopark=$ref:velopark,Create a new bicycle parking in OSM. This parking will have the link&COMMA you'll be able to copy the attributes in the next step,,,,,mr_taskId,yes)}* This tagrendering is only visible in the popup if the following condition is met: mr_taskStatus=Created diff --git a/Docs/URL_Parameters.md b/Docs/URL_Parameters.md index a940d9ad87..40cf02c697 100644 --- a/Docs/URL_Parameters.md +++ b/Docs/URL_Parameters.md @@ -35,10 +35,10 @@ This document gives an overview of which URL-parameters can be used to influence 26. [background](#background) + [Selecting a category](#selecting-a-category) + [Selecting a specific layer](#selecting-a-specific-layer) -27. [z](#z) -28. [lat](#lat) -29. [lon](#lon) -30. [oauth_token](#oauth_token) +27. [oauth_token](#oauth_token) +28. [z](#z) +29. [lat](#lat) +30. [lon](#lon) 31. [layer-public_bookcase](#layer-public_bookcase) 32. [filter-public_bookcase-kid-books](#filter-public_bookcase-kid-books) 33. [filter-public_bookcase-adult-books](#filter-public_bookcase-adult-books) @@ -307,8 +307,6 @@ One can use the [ID of an ELI-layer](./ELI-overview.md) or use one of the global - protomaps.black - protomaps.sunny_unlabeled - americana - - maptiler - - maptiler.carto - alidade.smooth - alidade.smooth_dark - stamen.terrain @@ -336,11 +334,19 @@ This documentation is defined in the source code at [FeatureSwitchState.ts](/src No default value set +## oauth_token + +Used to complete the login + +This documentation is defined in the source code at [ThemeViewState.ts](/src/Models/ThemeViewState.ts#L177) + +No default value set + ## z The initial/current zoom level -This documentation is defined in the source code at [InitialMapPositioning.ts](/src/Logic/Actors/InitialMapPositioning.ts#L37) +This documentation is defined in the source code at [InitialMapPositioning.ts](/src/Logic/Actors/InitialMapPositioning.ts#L39) The default value is _1_ @@ -348,7 +354,7 @@ The default value is _1_ The initial/current latitude -This documentation is defined in the source code at [InitialMapPositioning.ts](/src/Logic/Actors/InitialMapPositioning.ts#L37) +This documentation is defined in the source code at [InitialMapPositioning.ts](/src/Logic/Actors/InitialMapPositioning.ts#L39) The default value is _0_ @@ -356,18 +362,10 @@ The default value is _0_ The initial/current longitude of the app -This documentation is defined in the source code at [InitialMapPositioning.ts](/src/Logic/Actors/InitialMapPositioning.ts#L37) +This documentation is defined in the source code at [InitialMapPositioning.ts](/src/Logic/Actors/InitialMapPositioning.ts#L39) The default value is _0_ -## oauth_token - -Used to complete the login - -This documentation is defined in the source code at [ThemeViewState.ts](/src/Models/ThemeViewState.ts#L189) - -No default value set - ## layer-public_bookcase Whether or not layer public_bookcase is shown diff --git a/Docs/wikiIndex.txt b/Docs/wikiIndex.txt index 23b775812a..e9cff085d9 100644 --- a/Docs/wikiIndex.txt +++ b/Docs/wikiIndex.txt @@ -427,6 +427,15 @@ The position of a signpost can be used by a hiker/biker/rider/s… |genre= POI, editor, indoors }} {{service_item +|name= [https://mapcomplete.org/insects insects] +|region= Worldwide +|lang= {{#language:en|en}}, {{#language:nl|en}} +|descr= A MapComplete theme: Insect hotels provide shelter for insects +|material= {{yes|[https://mapcomplete.org/ Yes]}} +|image= MapComplete_Screenshot.png +|genre= POI, editor, insects +}} +{{service_item |name= [https://mapcomplete.org/kerbs_and_crossings kerbs_and_crossings] |region= Worldwide |lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:de|en}}, {{#language:fr|en}}, {{#language:da|en}}, {{#language:cs|en}}, {{#language:nb_NO|en}}, {{#language:es|en}}, {{#language:ca|en}}, {{#language:pl|en}}, {{#language:uk|en}} diff --git a/assets/layers/advertising/advertising.json b/assets/layers/advertising/advertising.json index a666a63c8f..83b7018ba0 100644 --- a/assets/layers/advertising/advertising.json +++ b/assets/layers/advertising/advertising.json @@ -65,7 +65,8 @@ "pt_BR": "Outdoor", "zh_Hans": "广告牌", "pt": "Outdoor", - "uk": "Білборд" + "uk": "Білборд", + "nl": "Billboard" } }, { @@ -104,7 +105,8 @@ "pt_BR": "Caixa de pôster", "zh_Hans": "海报盒", "pt": "Caixa de pôster", - "uk": "Поштова скринька" + "uk": "Поштова скринька", + "nl": "Afficheframe" } }, { @@ -940,7 +942,8 @@ "pt_BR": "Que tipo de recurso de publicitário é este?", "zh_Hans": "这是哪种类型的广告功能?", "pt": "Que tipo de recurso de publicitário é este?", - "uk": "Який це тип рекламного об'єкту?" + "uk": "Який це тип рекламного об'єкту?", + "nl": "Wat voor advertentieobject is dit?" }, "freeform": { "key": "advertising" diff --git a/assets/layers/aerialway/aerialway.json b/assets/layers/aerialway/aerialway.json index ed3fdce9f8..797cbef03f 100644 --- a/assets/layers/aerialway/aerialway.json +++ b/assets/layers/aerialway/aerialway.json @@ -9,12 +9,13 @@ "nl": "Kabelbanen" }, "description": { - "en": "Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines. ", + "en": "Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines.", "de": "Alle Arten von seil- oder drahtgestütztem Personen- oder Gütertransport, wie Seilbahnen, Gondeln, Sessellifte, Schlepplifte. ", "es": "Varias formas de transporte de pasajeros y mercancías que utilizan cables, incluyendo teleféricos, góndolas, telesillas, remontes y tirolinas. ", "pl": "Różne formy transportu dla pasażerów i dóbr, które używają lin, w tym kolejki gondolowe, wyciągi krzesełkowe i orczykowe oraz tyrolki. ", "cs": "Různé formy přepravy osob a zboží, které využívají dráty, včetně lanovek, gondol, sedačkových lanovek, vleků a lanových drah. ", - "ca": "Diverses formes de transport per a passatgers i mercaderies que utilitzen cables, incloent-hi telefèrics, telecabines, telecadires, teleesquís i tiroleses. " + "ca": "Diverses formes de transport per a passatgers i mercaderies que utilitzen cables, incloent-hi telefèrics, telecabines, telecadires, teleesquís i tiroleses. ", + "nl": "Verschillende vormen van passagiers- en goederentransport die gebruikmaken van kabels, waaronder kabelbanen, gondelbanen, sleepliften en tokkelbanen." }, "source": { "osmTags": { @@ -31,7 +32,8 @@ "en": "Aerialway {name}", "de": "Seilbahn {name}", "cs": "Dráha {name}", - "es": "Teleférico {name}" + "es": "Teleférico {name}", + "nl": "Kabelbaan {name}" } }, "pointRendering": [ @@ -96,7 +98,8 @@ "en": "What type of aerialway is this?", "de": "Um welchen Seilbahntyp handelt es sich?", "cs": "O jaký typ dráhy se jedná?", - "es": "¿Qué tipo de teleférico es este?" + "es": "¿Qué tipo de teleférico es este?", + "nl": "Wat voor kabelbaan is dit?" }, "id": "type", "mappings": [ @@ -139,7 +142,8 @@ "en": "An aerialway which has both chairs and gondolas in the same continuous track", "de": "Eine Seilbahn, die sowohl offene Sessel als auch geschlossene Gondeln auf einer durchgehenden Bahn hat", "cs": "Lanová dráha, která má sedačky i gondoly na stejné souvislé dráze", - "es": "Un teleférico que tiene tanto sillas como góndolas en la misma vía continua" + "es": "Un teleférico que tiene tanto sillas como góndolas en la misma vía continua", + "nl": "Een kabelbaan met zowel stoeltjes als gondels in dezelfde baan" } }, { @@ -180,16 +184,18 @@ "en": "A drag lift with a platter to drag a single passenger at a time", "de": "Ein Schlepplift mit einem Teller für jeweils einen Passagier", "cs": "Vlek s talířem, který táhne jednoho cestujícího", - "es": "Un remonte con una plataforma para arrastrar a un solo pasajero a la vez" + "es": "Un remonte con una plataforma para arrastrar a un solo pasajero a la vez", + "nl": "Een sleeplift met stangen om skiërs naar boven te slepen" } }, { "if": "aerialway=rope_tow", "then": { - "en": "A tow line which which drags skieers", + "en": "A tow line which skiers hold on to or attach themselves onto", "de": "Eine Schleppleine, die Skifahrer mit sich zieht", "cs": "Vlečné lano, které táhne lyžaře", - "es": "Un cable de remolque que arrastra a los esquiadores" + "es": "Un cable de remolque que arrastra a los esquiadores", + "nl": "Een sleeplijn waar skiërs zich aan vasthouden of vastmaken" } }, { @@ -204,11 +210,12 @@ { "if": "aerialway=zip_line", "then": { - "en": "A zip line. (A touristical attraction where adventurous people go down at high speeds) ", - "de": "Eine Seilrutsche. (Eine Touristenattraktion, bei der abenteuerlustige Menschen mit hoher Geschwindigkeit hinunterfahren) ", + "en": "A zip line. (A touristic attraction where adventurous people go down at high speeds)", + "de": "Eine Seilrutsche. (Eine Touristenattraktion, bei der abenteuerlustige Menschen mit hoher Geschwindigkeit hinunterfahren)", "pl": "Tyrolka. (Atrakcja turystyczna, która pozwala żądnym przygód zjechać z dużą szybkością) ", "cs": "Lano na visuté dráze. (Turistická atrakce, kde se odvážlivci spouštějí vysokou rychlostí) ", - "es": "Una tirolina. (Una atracción turística donde la gente aventurera baja a altas velocidades) " + "es": "Una tirolina. (Una atracción turística donde la gente aventurera baja a altas velocidades) ", + "nl": "Een tokkelbaan. (Ook bekend als deathride; een toeristische attractie waarbij avontuurlijk mensen aan hoge snelheid afdalen)" } } ] @@ -222,7 +229,8 @@ "pl": "Jak długo trwa pojedynczy przejazd tą windą?", "es": "¿Cuánto dura un viaje sencillo con este ascensor?", "cs": "Jak dlouho trvá jedna jízda tímto výtahem?", - "ca": "Quant de temps triga un trajecte amb aquest ascensor?" + "ca": "Quant de temps triga un trajecte amb aquest ascensor?", + "nl": "Hoe lang duurt een rit met deze lift?" }, "questionHint": { "en": "This excludes the waiting time.", @@ -259,7 +267,8 @@ "pl": "Ile osób może pomieścić jeden wagon?", "es": "¿Cuántas personas caben en una sola cabina?", "ca": "Quantes persones caben a la cabina?", - "cs": "Kolik osob se vejde do jednoho vozu?" + "cs": "Kolik osob se vejde do jednoho vozu?", + "nl": "Hoeveel mensen kunnen in één cabine?" }, "render": { "en": "{aerialway:occupancy} people fit a single carriage", diff --git a/assets/layers/animal_shelter/animal_shelter.json b/assets/layers/animal_shelter/animal_shelter.json index 2821e8481d..54663d9b04 100644 --- a/assets/layers/animal_shelter/animal_shelter.json +++ b/assets/layers/animal_shelter/animal_shelter.json @@ -10,14 +10,16 @@ "pl": "Schroniska dla zwierząt", "fr": "Abri pour animaux", "cs": "Útulky pro zvířata", - "ru": "Приюты для животных" + "ru": "Приюты для животных", + "nl": "Dierenasielen" }, "description": { - "en": "An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres. ", + "en": "An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres.", "es": "Un refugio de animales es una instalación donde se traen animales en problemas y el personal de la instalación (voluntarios o no) los alimenta y cuida, rehabilitándolos y curándolos si es necesario. Esta definición incluye perreras para perros abandonados, gaterías para gatos abandonados, refugios para otras mascotas abandonadas y centros de recuperación de fauna silvestre. ", "zh_Hans": "动物收容所是一个设施,将遇到麻烦的动物带到这里,设施的工作人员(志愿者或非志愿者)喂养并照顾它们,并在必要时使它们康复和治愈。该定义包括被遗弃的狗的狗舍、被遗弃的猫的猫舍、其他被遗弃的宠物的庇护所和野生动物恢复中心。 ", - "de": "Ein Tierheim ist eine Einrichtung, in die notleidende Tiere gebracht werden und wo das Personal (ob freiwillig oder nicht) sie füttert und pflegt, sie rehabilitiert und bei Bedarf heilt. Diese Definition umfasst Zwinger für ausgesetzte Hunde, Katzenheime für ausgesetzte Katzen, Unterkünfte für andere ausgesetzte Haustiere und Wildtier-Auffangstationen. ", - "cs": "Útulek pro zvířata je zařízení, kam se přivážejí zvířata v nesnázích a zaměstnanci zařízení (ať už dobrovolníci, nebo ne) je krmí, starají se o ně a v případě potřeby je rehabilitují a léčí. Tato definice zahrnuje chovné stanice pro opuštěné psy, chovné stanice pro opuštěné kočky, útulky pro jiná opuštěná zvířata a centra pro záchranu volně žijících zvířat. " + "de": "Ein Tierheim ist eine Einrichtung, in die notleidende Tiere gebracht werden und wo das Personal (ob freiwillig oder nicht) sie füttert und pflegt, sie rehabilitiert und bei Bedarf heilt. Diese Definition umfasst Zwinger für ausgesetzte Hunde, Katzenheime für ausgesetzte Katzen, Unterkünfte für andere ausgesetzte Haustiere und Wildtier-Auffangstationen.", + "cs": "Útulek pro zvířata je zařízení, kam se přivážejí zvířata v nesnázích a zaměstnanci zařízení (ať už dobrovolníci, nebo ne) je krmí, starají se o ně a v případě potřeby je rehabilitují a léčí. Tato definice zahrnuje chovné stanice pro opuštěné psy, chovné stanice pro opuštěné kočky, útulky pro jiná opuštěná zvířata a centra pro záchranu volně žijících zvířat. ", + "nl": "Een dierenasiel is een instelling waar dieren in nood binnengebracht worden en door de medewerkers gevoederd en verzorgd worden, eventueel met het oog op uitzetting. Hieronder vallen asielen voor achtergelaten huisdieren en opvangcentra voor wilde dieren." }, "source": { "osmTags": "amenity=animal_shelter" @@ -86,7 +88,8 @@ "ca": "un refugi d'animals", "pl": "schronisko dla zwierząt", "fr": "refuge animalier", - "cs": "útulek pro zvířata" + "cs": "útulek pro zvířata", + "nl": "een dierenasiel" }, "tags": [ "amenity=animal_shelter" @@ -109,7 +112,8 @@ "ca": "Quin nom té aquest refugi d'animals?", "pl": "Jak nazywa się to schronisko dla zwierząt?", "fr": "Quel est le nom de ce refuge animalier ?", - "cs": "Jak se jmenuje tento útulek pro zvířata?" + "cs": "Jak se jmenuje tento útulek pro zvířata?", + "nl": "Wat is de naam van dit dierenasiel?" }, "render": { "en": "This animal shelter is named {name}", @@ -118,7 +122,8 @@ "zh_Hans": "这个动物收容所叫 {name}", "pl": "To schronisko dla zwierząt nazywa się {name}", "fr": "Ce refuge s'appelle {name}", - "cs": "Tento útulek pro zvířata se jmenuje {name}" + "cs": "Tento útulek pro zvířata se jmenuje {name}", + "nl": "De naam van dit dierenasiel is {name}" } }, "website", diff --git a/assets/layers/artwork/artwork.json b/assets/layers/artwork/artwork.json index 2747970621..185eb73f37 100644 --- a/assets/layers/artwork/artwork.json +++ b/assets/layers/artwork/artwork.json @@ -814,7 +814,8 @@ "fr": "Cet œuvre a-t-elle un rôle de mémorial ?", "cs": "Slouží toto dílo jako památník?", "es": "¿Esta obra de arte sirve como monumento?", - "uk": "Чи слугує ця робота меморіалом?" + "uk": "Чи слугує ця робота меморіалом?", + "nl": "Dient dit kunstwerk als gedenkteken?" }, "mappings": [ { @@ -838,7 +839,8 @@ "de": "Dieses Kunstwerk dient nicht als Denkmal", "uk": "Ця робота не є меморіалом", "cs": "Toto umělecké dílo neslouží jako památník", - "es": "Esta obra de arte no sirve como monumento" + "es": "Esta obra de arte no sirve como monumento", + "nl": "Dit kunstwerk fungeert niet als gedenkteken" } } ] diff --git a/assets/layers/assembly_point/assembly_point.json b/assets/layers/assembly_point/assembly_point.json index d23e1cf2b3..1790f9de81 100644 --- a/assets/layers/assembly_point/assembly_point.json +++ b/assets/layers/assembly_point/assembly_point.json @@ -5,7 +5,8 @@ "it": "Punti di raccolta per emergenze", "de": "Notfallsammelplätze", "cs": "Nouzová shromaždiště", - "es": "Puntos de reunión en caso de emergencia" + "es": "Puntos de reunión en caso de emergencia", + "nl": "Noodverzamelplaatsen" }, "description": { "en": "This layer contains assembly points and waiting areas where all employees, passengers or a large crowd assemble in case of an emergency.", @@ -13,7 +14,8 @@ "de": "Diese Ebene enthält Sammelplätze und Wartebereiche, in denen sich alle Mitarbeiter, Fahrgäste oder eine große Menschenmenge im Notfall versammeln.", "pl": "Ta warstwa zawiera punkty zbiórki oraz miejsca oczekiwania, gdzie wszyscy pracownicy, pasażerowie lub duży tłum gromadzą się w przypadku zagrożenia.", "cs": "Tato vrstva obsahuje shromaždiště a čekací prostory, kde se v případě nouze shromažďují všichni zaměstnanci, cestující nebo velký dav lidí.", - "es": "Esta capa contiene puntos de reunión y áreas de espera donde todos los empleados, pasajeros o una gran multitud se reúnen en caso de emergencia." + "es": "Esta capa contiene puntos de reunión y áreas de espera donde todos los empleados, pasajeros o una gran multitud se reúnen en caso de emergencia.", + "nl": "Deze laag bevat verzamelplaatsen en wachtzones waar werknemers, passagiers of menigten verzameld worden in een noodsituatie." }, "source": { "osmTags": { @@ -28,7 +30,8 @@ "en": "Assembly point during emergencies", "de": "Sammelplatz bei Notfällen", "cs": "Shromaždiště při mimořádných událostech", - "es": "Punto de reunión en caso de emergencia" + "es": "Punto de reunión en caso de emergencia", + "nl": "Verzamelpunt voor bij noodsituaties" } }, "pointRendering": [ @@ -54,7 +57,8 @@ "de": "ein Sammelplatz", "pl": "punkt zbiórki", "cs": "shromaždiště", - "es": "un punto de reunión" + "es": "un punto de reunión", + "nl": "een verzamelplaats" }, "tags": [ "emergency=assembly_point" @@ -74,7 +78,8 @@ "de": "Wie lautet der Name dieser Sammelstelle?", "pl": "Jak nazywa się ten punkt zbiórki?", "cs": "Jak se jmenuje toto shromaždiště?", - "es": "¿Cuál es el nombre de este punto de reunión?" + "es": "¿Cuál es el nombre de este punto de reunión?", + "nl": "Wat is de naam van deze verzamelplaats?" }, "render": { "en": "This assembly point is named {name}", @@ -82,7 +87,8 @@ "de": "Diese Sammelstelle hat den Namen {name}", "pl": "Ten punkt zbiórki nazywa się {name}", "cs": "Toto shromaždiště se jmenuje {name}", - "es": "Este punto de reunión se llama {name}" + "es": "Este punto de reunión se llama {name}", + "nl": "De naam van deze verzamelplaats is {name}" } }, { @@ -92,14 +98,16 @@ "it": "Questo punto di raccolta è gestita da {operator}", "de": "Diese Sammelstelle wird von {operator} betrieben", "cs": "Toto shromaždiště provozuje {operator}", - "es": "Este punto de reunión es operado por {operator}" + "es": "Este punto de reunión es operado por {operator}", + "nl": "Dit verzamelpunt wordt beheerd door {operator}" }, "question": { "en": "What organization operates this assembly point?", "it": "Quale organizzazione gestisce questo punto di raccolta?", "de": "Welche Organisation betreibt diese Sammelstelle?", "cs": "Jaká organizace provozuje toto shromaždiště?", - "es": "¿Qué organización opera este punto de reunión?" + "es": "¿Qué organización opera este punto de reunión?", + "nl": "Welke organisatie beheert dit verzamelpunt?" }, "freeform": { "key": "operator", @@ -113,7 +121,8 @@ "it": "Per quali tipi di disastro è pensato questo punto di raccolta?", "de": "Für welche Art von Katastrophe ist diese Sammelstelle gedacht?", "cs": "Pro jaký typ katastrofy je toto shromaždiště určeno?", - "es": "¿Para qué tipo de desastre está destinado este punto de reunión?" + "es": "¿Para qué tipo de desastre está destinado este punto de reunión?", + "nl": "Voor welk soort ramp is dit verzamelpunt bedoeld?" }, "multiAnswer": true, "mappings": [ @@ -126,7 +135,8 @@ "de": "Erdbeben", "pl": "Trzęsienie ziemi", "cs": "Zemětřesení", - "es": "Terremoto" + "es": "Terremoto", + "nl": "Aardbeving" }, "icon": { "path": "./assets/layers/assembly_point/earthquake.svg", @@ -142,7 +152,8 @@ "de": "Flut", "pl": "Powódź", "cs": "Povodně", - "es": "Inundación" + "es": "Inundación", + "nl": "Overstroming" }, "icon": { "path": "./assets/layers/assembly_point/flood.svg", @@ -158,7 +169,8 @@ "de": "Feuer", "pl": "Pożar", "cs": "Požár", - "es": "Incendio" + "es": "Incendio", + "nl": "Brand" }, "icon": { "path": "./assets/layers/assembly_point/fire.svg", @@ -174,7 +186,8 @@ "de": "Erdrutsch", "pl": "Osuwisko", "cs": "Sesuv půdy", - "es": "Deslave" + "es": "Deslave", + "nl": "Aardverschuiving" }, "icon": { "path": "./assets/layers/assembly_point/landslide.svg", diff --git a/assets/layers/assisted_repair/assisted_repair.json b/assets/layers/assisted_repair/assisted_repair.json index d3e159b8e2..bd7729f501 100644 --- a/assets/layers/assisted_repair/assisted_repair.json +++ b/assets/layers/assisted_repair/assisted_repair.json @@ -4,13 +4,15 @@ "en": "Repair cafés and assisted repair workshops", "de": "Repair-Cafés und unterstützte Reparaturwerkstätten", "cs": "Opravárenské kavárny a asistované opravárenské dílny", - "es": "Cafés de reparación y talleres de reparación asistida" + "es": "Cafés de reparación y talleres de reparación asistida", + "nl": "Repair cafés en reparatiewerkplaatsen met ondersteuning" }, "description": { - "en": "A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles.", + "en": "A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles.", "de": "Eine Selbsthilfewerkstatt ist ein Ort, an dem Menschen ihre Gegenstände mit Hilfe von Freiwilligen und den vor Ort verfügbaren Werkzeugen reparieren können. Ein Repair-Café ist eine Art von Veranstaltung, die regelmäßig nach denselben Prinzipien organisiert wird.", "cs": "Svépomocná dílna je místo, kam mohou lidé přijít a opravit si své zboží s pomocí dobrovolníků a nástrojů, které jsou na daném místě k dispozici. Opravárenská kavárna je typ akce, která se pravidelně pořádá na stejných principech.", - "es": "Un taller de reparación asistida es un lugar donde la gente puede venir y reparar sus bienes con la ayuda de voluntarios y con las herramientas disponibles en el lugar. Un café de reparación es un tipo de evento organizado regularmente con los mismos principios." + "es": "Un taller de reparación asistida es un lugar donde la gente puede venir y reparar sus bienes con la ayuda de voluntarios y con las herramientas disponibles en el lugar. Un café de reparación es un tipo de evento organizado regularmente con los mismos principios.", + "nl": "Een zelfondersteunde werkplaats is een locatie waar mensen hun spullen kunnen komen repareren met hulp van vrijwilligers en met het gereedschap dat op de locatie beschikbaar is. Een repair café is een soort evenement dat regelmatig wordt georganiseerd volgens dezelfde principes." }, "source": { "osmTags": "repair=assisted_self_service" @@ -21,7 +23,8 @@ "en": "Workshop for assisted repair", "de": "Werkstatt für unterstützte Reparaturen", "cs": "Dílna pro asistované opravy", - "es": "Taller de reparación asistida" + "es": "Taller de reparación asistida", + "nl": "Werkplaats voor reparatie met ondersteuning" }, "mappings": [ { @@ -30,7 +33,8 @@ "en": "{name}", "de": "{name}", "cs": "{name}", - "es": "{name}" + "es": "{name}", + "nl": "{name}" } } ] @@ -77,7 +81,8 @@ "en": "an assisted repair workshop", "de": "Eine unterstützte Reparaturwerkstatt", "cs": "asistovaná opravárenská dílna", - "es": "un taller de reparación asistida" + "es": "un taller de reparación asistida", + "nl": "een reparatiewerkplaats met ondersteuning" }, "tags": [ "amenity=workshop", @@ -87,7 +92,8 @@ "en": "A location with a permanent workshop where people can come to repair items with the help of volunteers.", "de": "Ein Ort mit einer festen Werkstatt, in der Menschen mit Hilfe von Freiwilligen Gegenstände reparieren können.", "cs": "Místo se stálou dílnou, kam mohou lidé přijít a s pomocí dobrovolníků opravovat předměty.", - "es": "Un lugar con un taller permanente donde la gente puede venir a reparar artículos con la ayuda de voluntarios." + "es": "Un lugar con un taller permanente donde la gente puede venir a reparar artículos con la ayuda de voluntarios.", + "nl": "Een locatie met een permanente werkplaats waar mensen naartoe kunnen komen om spullen te repareren met hulp van vrijwilligers." } } ], @@ -99,14 +105,16 @@ "en": "What is the name of this repair workshop?", "de": "Wie heißt diese Reparaturwerkstatt?", "cs": "Jak se tato opravna jmenuje?", - "es": "¿Cuál es el nombre de este taller de reparación?" + "es": "¿Cuál es el nombre de este taller de reparación?", + "nl": "Wat is de naam van deze reparatiewerkplaats?" }, "id": "name", "render": { "en": "This workshop is called {name}", "de": "Diese Werkstatt heißt {name}", "cs": "Tato dílna se nazývá {name}", - "es": "Este taller se llama {name}" + "es": "Este taller se llama {name}", + "nl": "Deze werkplaats heet {name}" }, "freeform": { "key": "name" @@ -121,7 +129,8 @@ "en": "What type of items are repaired here?", "de": "Welche Art von Gegenständen wird hier repariert?", "cs": "Jaké předměty se zde opravují?", - "es": "¿Qué tipo de artículos se reparan aquí?" + "es": "¿Qué tipo de artículos se reparan aquí?", + "nl": "Wat voor items worden hier gerepareerd?" }, "id": "item:repair", "mappings": [ @@ -136,7 +145,8 @@ "de": "Mobiltelefone werden hier repariert", "cs": "Zde se opravují mobilní telefony", "es": "Aquí se reparan teléfonos móviles", - "uk": "Тут ремонтують мобільні телефони" + "uk": "Тут ремонтують мобільні телефони", + "nl": "Mobiele telefoons worden hier gerepareerd" }, "ifnot": "service:mobile_phone:repair=no" }, @@ -150,7 +160,8 @@ "en": "Computers are repaired here", "de": "Computer werden hier repariert", "cs": "Počítače se opravují zde", - "es": "Aquí se reparan ordenadores" + "es": "Aquí se reparan ordenadores", + "nl": "Computers worden hier gerepareerd" }, "ifnot": "service:computer:repair=no" }, @@ -164,7 +175,8 @@ "en": "Bicycles are repaired here", "de": "Fahrräder werden hier repariert", "cs": "Zde se opravují jízdní kola", - "es": "Aquí se reparan bicicletas" + "es": "Aquí se reparan bicicletas", + "nl": "Fietsen worden hier gerepareerd" }, "ifnot": "service:bicycle:repair=no" }, @@ -178,7 +190,8 @@ "en": "Electronic devices are repaired here", "de": "Elektronische Geräte werden hier repariert", "cs": "Zde se opravují elektronická zařízení", - "es": "Aquí se reparan dispositivos electrónicos" + "es": "Aquí se reparan dispositivos electrónicos", + "nl": "Elektronische apparaten worden hier gerepareerd" }, "ifnot": "service:electronics:repair=no", "icon": "./assets/layers/recycling/small_electrical_appliances.svg" @@ -193,7 +206,8 @@ "en": "Furniture is repaired here", "de": "Möbel werden hier repariert", "cs": "Zde se opravuje nábytek", - "es": "Aquí se reparan muebles" + "es": "Aquí se reparan muebles", + "nl": "Meubels worden hier gerepareerd" }, "ifnot": "service:furniture:repair=no", "icon": "./assets/layers/recycling/furniture.svg" @@ -208,7 +222,8 @@ "en": "Clothes are repaired here", "de": "Kleidung wird hier repariert", "cs": "Zde se opravují oděvy", - "es": "Aquí se repara ropa" + "es": "Aquí se repara ropa", + "nl": "Kleding wordt hier gerepareerd" }, "ifnot": "service:clothes:repair=no", "icon": "./assets/layers/recycling/clothes.svg" diff --git a/assets/layers/bbq/bbq.json b/assets/layers/bbq/bbq.json index c1f81c9e08..4af65ee71e 100644 --- a/assets/layers/bbq/bbq.json +++ b/assets/layers/bbq/bbq.json @@ -4,13 +4,15 @@ "en": "BBQ", "de": "Grillstelle", "cs": "BBQ", - "es": "Barbacoa" + "es": "Barbacoa", + "nl": "Barbecue" }, "description": { "de": "Ein ortsfest installierter Grill, typischerweise öffentlich zugänglich.", "en": "A permanently installed barbecue, typically accessible to the public.", "cs": "Trvale instalovaný gril, obvykle přístupný veřejnosti.", - "es": "Una barbacoa instalada permanentemente, normalmente accesible al público." + "es": "Una barbacoa instalada permanentemente, normalmente accesible al público.", + "nl": "Een permanent geïnstalleerde barbecue, meestal toegankelijk voor iedereen." }, "source": { "osmTags": "amenity=bbq" @@ -21,7 +23,8 @@ "en": "BBQ", "de": "Grillstelle", "cs": "BBQ", - "es": "Barbacoa" + "es": "Barbacoa", + "nl": "BBQ" } }, "pointRendering": [ @@ -49,13 +52,15 @@ "en": "BBQ", "de": "Grillstelle", "cs": "BBQ", - "es": "Barbacoa" + "es": "Barbacoa", + "nl": "Barbecue" }, "description": { "de": "Ein ortsfest installierter Grill, typischerweise öffentlich zugänglich.", "en": "A permanently installed barbecue, typically accessible to the public.", "cs": "Trvale instalovaný gril, obvykle přístupný veřejnosti.", - "es": "Una barbacoa instalada permanentemente, normalmente accesible al público." + "es": "Una barbacoa instalada permanentemente, normalmente accesible al público.", + "nl": "Een permanent geïnstalleerde barbecue, meestal toegankelijk voor iedereen." }, "tags": [ "amenity=bbq" @@ -67,64 +72,71 @@ { "id": "access", "question": { - "en": "What is the permitted access?", + "en": "Who is allowed to use this barbecue?", "de": "Was ist der erlaubte Zugang?", "cs": "Jaký přístup je povolen?", - "es": "¿Cuál es el acceso permitido?" + "es": "¿Cuál es el acceso permitido?", + "nl": "Wie mag deze barbecue gebruiken?" }, "mappings": [ { "if": "access=yes", "then": { "de": "Öffentlich", - "en": "Public", + "en": "This barbecue can be used by anyone", "cs": "Veřejné", - "es": "Público" + "es": "Público", + "nl": "Deze barbecue mag door iedereen worden gebruikt" } }, { "if": "access=no", "then": { "de": "Kein Zugang", - "en": "No access", + "en": "This barbecue can't be used by anyone", "cs": "Zákaz vstupu", - "es": "Sin acceso" + "es": "Sin acceso", + "nl": "Deze barbecue mag door niemand worden gebruikt" } }, { "if": "access=private", "then": { "de": "Privat", - "en": "Private", + "en": "This barbecue is private", "cs": "Soukromé", - "es": "Privado" + "es": "Privado", + "nl": "Deze barbecue is privé" } }, { "if": "access=permissive", "then": { "de": "Zugang bis auf Widerruf", - "en": "Access until revoked", + "en": "This barbecue can be used by anyone, but the owner can revoke access at any time", "cs": "Přístup až do odvolání", - "es": "Acceso hasta que se revoque" + "es": "Acceso hasta que se revoque", + "nl": "Deze barbecue mag door iedereen worden gebruikt, maar de eigenaar kan de toegang op elk moment ontzeggen" } }, { "if": "access=customers", "then": { "de": "Zugang nur für Kunden", - "en": "Access only for customers", + "en": "This barbecue can only be used by customers", "cs": "Přístup pouze pro zákazníky", - "es": "Acceso solo para clientes" + "es": "Acceso solo para clientes", + "nl": "Deze barbecue mag alleen worden gebruikt door klanten" } }, { "if": "access=permit", "then": { "de": "Zugang nur für Berechtigte", - "en": "Access only for authorized persons", + "en": "This barbecue can only be used by authorized persons", "cs": "Přístup pouze pro oprávněné osoby", - "es": "Acceso solo para personas autorizadas" + "es": "Acceso solo para personas autorizadas", + "nl": "Deze barbecue mag alleen worden gebruikt door personen met toestemming" } } ] @@ -132,28 +144,31 @@ { "id": "covered", "question": { - "en": "Is the grill covered?", + "en": "Is this barbecue covered?", "de": "Ist die Grillstelle überdacht?", "cs": "Je gril zakrytý?", - "es": "¿Está cubierta la parrilla?" + "es": "¿Está cubierta la parrilla?", + "nl": "Is deze barbecue overdekt?" }, "mappings": [ { "if": "covered=no", "then": { "de": "Die Grillstelle ist nicht überdacht", - "en": "The grill is not covered", + "en": "This barbecue is not covered", "cs": "Gril není zakrytý", - "es": "La parrilla no está cubierta" + "es": "La parrilla no está cubierta", + "nl": "Deze barbecue is niet overdekt" } }, { "if": "covered=yes", "then": { "de": "Die Grillstelle ist überdacht", - "en": "The grill is covered", + "en": "This barbecue is covered", "cs": "Gril je zakrytý", - "es": "La parrilla está cubierta" + "es": "La parrilla está cubierta", + "nl": "Deze barbecue is overdekt" } } ] @@ -161,46 +176,51 @@ { "id": "fuel", "question": { - "en": "How ist the grill fueled?", + "en": "How is this barbecue fuelled?", "de": "Womit wird der Grill befeuert?", "cs": "Jak je gril napájen?", - "es": "¿Cómo se alimenta la parrilla?" + "es": "¿Cómo se alimenta la parrilla?", + "nl": "Wat voor brandstof gebruikt deze barbecue?" }, "mappings": [ { "if": "fuel=wood", "then": { "de": "Holz", - "en": "Wood", + "en": "This barbecue uses wood as fuel", "cs": "Dřevo", - "es": "Madera" + "es": "Madera", + "nl": "Deze barbecue gebruikt hout als brandstof" } }, { "if": "fuel=charcoal", "then": { "de": "Kohle", - "en": "Charcoal", + "en": "This barbecue uses charcoal as fuel", "cs": "Dřevěné uhlí", - "es": "Carbón" + "es": "Carbón", + "nl": "Deze barbecue gebruikt houtskool als brandstof" } }, { "if": "fuel=electric", "then": { "de": "Elektronisch", - "en": "Electric", + "en": "This barbecue is powered by electricity", "cs": "Elektrický", - "es": "Eléctrica" + "es": "Eléctrica", + "nl": "Deze barbecue werkt op elektriciteit" } }, { "if": "fuel=gas", "then": { "de": "Gas", - "en": "Gas", + "en": "This barbecue uses gas as fuel", "cs": "Plynový", - "es": "Gas" + "es": "Gas", + "nl": "Deze barbecue gebruikt gas als brandstof" } } ] diff --git a/assets/layers/bicycle_counter/bicycle_counter.json b/assets/layers/bicycle_counter/bicycle_counter.json index 1c14665dd6..cf29a2221f 100644 --- a/assets/layers/bicycle_counter/bicycle_counter.json +++ b/assets/layers/bicycle_counter/bicycle_counter.json @@ -4,7 +4,8 @@ "en": "Bicycle counters", "cs": "Počítadla jízdních kol", "de": "Fahrradzählstellen", - "es": "Contadores de bicicletas" + "es": "Contadores de bicicletas", + "nl": "Fietstellers" }, "description": { "en": "Layer showing monitoring stations for bicycle traffic", @@ -26,7 +27,8 @@ "en": "Bicycle counter", "de": "Fahrradzählstelle", "cs": "Počítadlo jízdních kol", - "es": "Contador de bicicletas" + "es": "Contador de bicicletas", + "nl": "Fietsteller" } }, "tagRenderings": [ @@ -37,7 +39,8 @@ "en": "Does this bicycle counter have a display showing the number of passing bicycles?", "cs": "Má tento počítač jízdních kol displej zobrazující počet projíždějících jízdních kol?", "de": "Zeigt die Fahrradzählstelle die Anzahl gezählter Fahrräder an?", - "es": "¿Este contador de bicicletas tiene una pantalla que muestra el número de bicicletas que pasan?" + "es": "¿Este contador de bicicletas tiene una pantalla que muestra el número de bicicletas que pasan?", + "nl": "Heeft deze fietsteller een display dat het aantal passerende fietsen toont?" }, "mappings": [ { @@ -46,7 +49,8 @@ "en": "This counter has a digital display", "cs": "Toto počítadlo má digitální displej", "de": "Die Zählstelle hat eine digitale Anzeige", - "es": "Este contador tiene una pantalla digital" + "es": "Este contador tiene una pantalla digital", + "nl": "Deze teller heeft een digitaal display" } }, { @@ -55,7 +59,8 @@ "en": "This counter has an analog display", "cs": "Toto počítadlo má analogový displej", "de": "Die Zählstelle hat eine analoge Anzeige", - "es": "Este contador tiene una pantalla analógica" + "es": "Este contador tiene una pantalla analógica", + "nl": "Deze teller heeft een analoog display" } }, { @@ -64,7 +69,8 @@ "en": "This counter has no display", "cs": "Toto počítadlo nemá žádný displej", "de": "Die Zählstelle hat keine Anzeige", - "es": "Este contador no tiene pantalla" + "es": "Este contador no tiene pantalla", + "nl": "Deze teller heeft geen display" } } ] @@ -75,7 +81,8 @@ "en": "What is the name of the counted location?", "cs": "Jak se jmenuje započítávaná lokalita?", "de": "Wie lautet der Name des Zählorts?", - "es": "¿Cuál es el nombre del lugar contado?" + "es": "¿Cuál es el nombre del lugar contado?", + "nl": "Wat is de naam van de getelde locatie?" }, "freeform": { "key": "name", @@ -84,14 +91,16 @@ "en": "Name of the counted location", "cs": "Název započítávané lokality", "de": "Name des Zählorts", - "es": "Nombre del lugar contado" + "es": "Nombre del lugar contado", + "nl": "Naam van de getelde locatie" } }, "render": { "en": "Name of the counted location: {name}", "de": "Name des Zählorts: {name}", "cs": "Název započítávaného místa: {name}", - "es": "Nombre del lugar contado: {name}" + "es": "Nombre del lugar contado: {name}", + "nl": "Naam van de getelde locatie: {name}" } }, { @@ -100,7 +109,8 @@ "en": "When did this counter start counting?", "de": "Wann wurde die Zählstelle aufgestellt?", "cs": "Kdy toto počítadlo začalo počítat?", - "es": "¿Cuándo comenzó a contar este contador?" + "es": "¿Cuándo comenzó a contar este contador?", + "nl": "Wanneer is deze teller begonnen met tellen?" }, "freeform": { "key": "start_date", @@ -109,14 +119,16 @@ "en": "Start date of the counter", "de": "Aufstelldatum der Zählstelle", "cs": "Datum spuštění počítadla", - "es": "Fecha de inicio del contador" + "es": "Fecha de inicio del contador", + "nl": "Startdatum van de teller" } }, "render": { "en": "This counter started counting on {start_date}", "de": "Die Zählstelle wurde am {start_date} aufgestellt", "cs": "Toto počítadlo se začalo počítat dne {start_date}", - "es": "Este contador comenzó a contar el {start_date}" + "es": "Este contador comenzó a contar el {start_date}", + "nl": "Deze teller is begonnen met teller op {start_date}" } }, { @@ -125,7 +137,8 @@ "en": "Does this bicycle counter have a clock?", "cs": "Má toto počítadlo kol hodiny?", "de": "Zeigt die Fahrradzählstelle die Uhrzeit an?", - "es": "¿Este contador de bicicletas tiene un reloj?" + "es": "¿Este contador de bicicletas tiene un reloj?", + "nl": "Heeft deze fietsteller een klok?" }, "mappings": [ { @@ -134,7 +147,8 @@ "en": "This counter has a clock", "cs": "Toto počítadlo je vybaveno hodinami", "de": "Die Zählstelle zeigt die Uhrzeit an", - "es": "Este contador tiene un reloj" + "es": "Este contador tiene un reloj", + "nl": "Deze teller heeft een klok" } }, { @@ -143,7 +157,8 @@ "en": "This counter has no clock", "cs": "Toto počítadlo nemá žádné hodiny", "de": "Die Zählstelle zeigt keine Uhrzeit an", - "es": "Este contador no tiene reloj" + "es": "Este contador no tiene reloj", + "nl": "Deze teller heeft geen klok" } } ] @@ -154,7 +169,8 @@ "en": "What is the reference number of this counter?", "de": "Wie lautet die Kennziffer der Zählstelle?", "cs": "Jaké je referenční číslo tohoto počítadla?", - "es": "¿Cuál es el número de referencia de este contador?" + "es": "¿Cuál es el número de referencia de este contador?", + "nl": "Wat is het referentienummer van deze teller?" }, "freeform": { "key": "ref", @@ -163,7 +179,8 @@ "en": "Reference number of the counter", "de": "Kennziffer der Zählstelle", "cs": "Referenční číslo počítadla", - "es": "Número de referencia del contador" + "es": "Número de referencia del contador", + "nl": "Referentienummer van de teller" }, "addExtraTags": [ "noref=" @@ -173,7 +190,8 @@ "en": "Reference number of the counter: {ref}", "de": "Kennziffer der Zählstelle: {ref}", "cs": "Referenční číslo počítadla: {ref}", - "es": "Número de referencia del contador: {ref}" + "es": "Número de referencia del contador: {ref}", + "nl": "Referentienummer van de teller: {ref}" }, "mappings": [ { @@ -182,7 +200,8 @@ "en": "This counter has no reference number", "de": "Die Zählstelle hat keine Kennziffer", "cs": "Toto počítadlo nemá referenční číslo", - "es": "Este contador no tiene número de referencia" + "es": "Este contador no tiene número de referencia", + "nl": "Deze teller heeft geen referentienummer" } } ] @@ -194,7 +213,8 @@ "de": "Gibt es eine Website für die Fahrradzählstelle?", "cs": "Existuje webová stránka tohoto počítadla jízdních kol?", "es": "¿Hay un sitio web para este contador de bicicletas?", - "uk": "Є веб-сайт для цього велосипедного прилавка?" + "uk": "Є веб-сайт для цього велосипедного прилавка?", + "nl": "Is er een website voor deze fietsteller?" }, "freeform": { "key": "website", @@ -204,14 +224,16 @@ "de": "Website der Zählstelle", "cs": "Webové stránky počítadla", "es": "Sitio web del contador", - "uk": "Сайт лічильника" + "uk": "Сайт лічильника", + "nl": "Website van de teller" } }, "render": { "en": "Website of the counter: {website}", "de": "Website der Zählstelle: {website}", "cs": "Webové stránky počítadla: {website}", - "es": "Sitio web del contador: {website}" + "es": "Sitio web del contador: {website}", + "nl": "Website van de teller {website}" } } ], @@ -244,7 +266,8 @@ "en": "a bicycle counter", "cs": "počítadlo jízdních kol", "de": "eine Fahrradzählstelle", - "es": "un contador de bicicletas" + "es": "un contador de bicicletas", + "nl": "een fietsteller" }, "tags": [ "man_made=monitoring_station", diff --git a/assets/layers/bike_shop/bike_shop.json b/assets/layers/bike_shop/bike_shop.json index 14e594f893..8fd7e88477 100644 --- a/assets/layers/bike_shop/bike_shop.json +++ b/assets/layers/bike_shop/bike_shop.json @@ -36,6 +36,7 @@ "shop=bicycle", "service:bicycle:retail=yes", "service:bicycle:repair=yes", + "service:bicycle:second_hand=yes", { "#": "if sport is defined and is not bicycle, it is not matched; if bicycle retail/repair is marked as 'no', it is not shown to too.", "##": "There will be a few false-positives with this. They will get filtered out by people marking both 'not selling bikes' and 'not repairing bikes'. Furthermore, the OSMers will add a sports-subcategory on it", diff --git a/assets/layers/brothel/brothel.json b/assets/layers/brothel/brothel.json index 1fa4ab9906..1f3cf4c9f3 100644 --- a/assets/layers/brothel/brothel.json +++ b/assets/layers/brothel/brothel.json @@ -4,13 +4,15 @@ "en": "Brothels", "de": "Bordelle", "cs": "Nevěstince", - "es": "Burdeles" + "es": "Burdeles", + "nl": "Bordelen" }, "description": { - "en": "An establishment specifically dedicated to prostitution. ", - "de": "Eine Einrichtung, die speziell der Prostitution gewidmet ist. ", - "cs": "Zařízení zaměřené speciálně na prostituci. ", - "es": "Un establecimiento dedicado específicamente a la prostitución " + "en": "An establishment specifically dedicated to prostitution.", + "de": "Eine Einrichtung, die speziell der Prostitution gewidmet ist.", + "cs": "Zařízení zaměřené speciálně na prostituci.", + "es": "Un establecimiento dedicado específicamente a la prostitución.", + "nl": "Een etablissement dat zich specifiek richt op prostitutie." }, "source": { "osmTags": "amenity=brothel" @@ -22,7 +24,8 @@ "de": "Bordell", "ca": "Bordell", "cs": "Nevěstinec", - "es": "Burdel" + "es": "Burdel", + "nl": "Bordeel" }, "mappings": [ { @@ -70,7 +73,8 @@ "en": "a brothel", "de": "ein Bordell", "cs": "nevěstinec", - "es": "un burdel" + "es": "un burdel", + "nl": "een bordeel" }, "tags": [ "amenity=brothel" @@ -92,13 +96,15 @@ "de": "Wie lautet der Name des Bordells?", "ca": "Com es diu aquest bordell?", "cs": "Jak se jmenuje tento nevěstinec?", - "es": "¿Cuál es el nombre de este burdel?" + "es": "¿Cuál es el nombre de este burdel?", + "nl": "Wat is de naam van dit bordeel?" }, "render": { "en": "This brothel is named {name}", "de": "Der Name des Bordells lautet {name}", "cs": "Tento nevěstinec se jmenuje {name}", - "es": "Este burdel se llama {name}" + "es": "Este burdel se llama {name}", + "nl": "Dit bordeel heet {name}" } }, "opening_hours", diff --git a/assets/layers/cafe_pub/cafe_pub.json b/assets/layers/cafe_pub/cafe_pub.json index 1811e39828..866cb56b98 100644 --- a/assets/layers/cafe_pub/cafe_pub.json +++ b/assets/layers/cafe_pub/cafe_pub.json @@ -78,7 +78,8 @@ "de": "Bar", "ca": "Pub", "cs": "Bar", - "es": "Bar" + "es": "Bar", + "nl": "Bar" } }, { @@ -88,7 +89,8 @@ "de": "Café", "ca": "CAfè", "cs": "Kavárna", - "es": "Café" + "es": "Café", + "nl": "Café" } }, { @@ -97,7 +99,8 @@ "en": "Nightclub", "de": "Nachtclub", "cs": "Noční klub", - "es": "Discoteca" + "es": "Discoteca", + "nl": "Nachtclub" } } ] diff --git a/assets/layers/charging_station/charging_station.json b/assets/layers/charging_station/charging_station.json index fb09a0f9c2..e3c65c4907 100644 --- a/assets/layers/charging_station/charging_station.json +++ b/assets/layers/charging_station/charging_station.json @@ -4,6 +4,7 @@ "en": "Charging stations", "nl": "Oplaadpunten", "ca": "Estacions de càrrega", + "cs": "Nabíjecí stanice", "de": "Ladestationen", "es": "Puntos de carga" }, @@ -89,6 +90,7 @@ "en": "Which vehicles are allowed to charge here?", "nl": "Welke voertuigen kunnen hier opgeladen worden?", "ca": "Quins vehicles tenen permesa la càrrega aquí?", + "cs": "Která vozidla zde smí nabíjet?", "de": "Welche Fahrzeuge können hier laden?", "es": "¿Qué vehículos pueden cargar aquí?", "pl": "Jakie pojazdy mogą być tutaj ładowane?" @@ -102,6 +104,7 @@ "en": "Bicycles can be charged here", "nl": "Elektrische fietsen kunnen hier opgeladen worden", "ca": "Aquí es poden carregar bicicletes", + "cs": "Jízdní kola lze nabíjet zde", "de": "Hier können Fahrräder laden", "es": "Aquí se pueden cargar bicicletas", "pl": "Mogą tutaj być ładowane rowery" @@ -114,6 +117,7 @@ "en": "Cars can be charged here", "nl": "Elektrische auto's kunnen hier opgeladen worden", "ca": "Aquí es poden carregar cotxes", + "cs": "Auta lze nabíjet zde", "de": "Hier können Autos laden", "es": "Aquí se pueden cargar coches", "pl": "Mogą tutaj być ładowane samochody" @@ -126,6 +130,7 @@ "en": "Scooters can be charged here", "nl": "Elektrische scooters (snorfiets of bromfiets) kunnen hier opgeladen worden", "ca": "Aquí es poden carregar Scooters", + "cs": "Skútry lze nabíjet zde", "de": "Hier können Roller laden", "es": "Aquí se pueden cargar patinetes", "pl": "Mogą być tutaj ładowane hulajnogi" @@ -138,6 +143,7 @@ "en": "Heavy good vehicles (such as trucks) can be charged here", "nl": "Vrachtwagens kunnen hier opgeladen worden", "ca": "Aquí es poden carregar camions o trailers", + "cs": "Těžká nákladní vozidla (například nákladní automobily) lze nabíjet zde", "de": "Hier können LKW laden", "es": "Aquí se pueden cargar vehículos de mercancías pesadas (como camiones)" } @@ -149,6 +155,7 @@ "en": "Buses can be charged here", "nl": "Bussen kunnen hier opgeladen worden", "ca": "Aquí es poden carregar autobusos", + "cs": "Autobusy lze nabíjet zde", "de": "Hier können Busse laden", "es": "Aquí se pueden cargar autobuses", "pl": "Mogą być tutaj ładowane autobusy" @@ -187,6 +194,7 @@ "en": "Anyone can use this charging station (payment might be needed)", "nl": "Toegankelijk voor iedereen (mogelijks met aanmelden en/of te betalen)", "ca": "Qualsevol persona pot utilitzar aquesta estació de recàrrega (pot ser calgui un pagament)", + "cs": "Tuto nabíjecí stanici může používat kdokoli (může být vyžadována platba)", "de": "Jeder kann die Station nutzen (eventuell gegen Bezahlung)", "es": "Cualquiera puede usar este punto de carga (puede ser necesario el pago)", "pl": "Każdy może używać tej stacji ładowania (opłata może być wymagana)" @@ -198,6 +206,7 @@ "en": "Anyone can use this charging station (payment might be needed)", "nl": "Toegankelijk voor iedereen (mogelijks met aanmelden en/of te betalen)", "ca": "Qualsevol persona pot utilitzar aquesta estació de recàrrega (pot ser calgui un pagament)", + "cs": "Tuto nabíjecí stanici může používat kdokoli (může být vyžadována platba)", "de": "Jeder kann diese Ladestation nutzen (eventuell gegen Bezahlung)", "es": "Cualquiera puede usar este punto de carga (puede ser necesario el pago)", "pl": "Każdy może używać tej stacji ładowania (opłata może być wymagana)" @@ -210,6 +219,7 @@ "en": "Only customers of the place this station belongs to can use this charging station
E.g. a charging station operated by hotel which is only usable by their guests", "nl": "Enkel klanten van de bijhorende plaats mogen dit oplaadpunt gebruiken
Bv. op de parking van een hotel en enkel toegankelijk voor klanten van dit hotel", "ca": "Sols cliente del lloc al que pertany aquest punt de càrrega poden utilitzar-lo
p.e. un punt de càrrega d'un hotel que sols poden utilizar-los els hostes", + "cs": "Tuto nabíjecí stanici mohou používat pouze zákazníci místa, kam tato stanice patří
Např. nabíjecí stanice provozovaná hotelem, kterou mohou používat pouze jeho hosté", "de": "Nur Kunden des Ortes, zu dem diese Station gehört, können diese Ladestation nutzen
Z.B. eine von einem Hotel betriebene Ladestation, die nur von dessen Gästen genutzt werden kann", "es": "Solo los clientes del lugar al que pertenece esta estación pueden usar este punto de carga
Por ejemplo, un punto de carga operado por un hotel que solo pueden usar sus huéspedes" } @@ -274,6 +284,7 @@ "question": { "en": "Which charging connections are available here?", "nl": "Welke aansluitingen zijn hier beschikbaar?", + "cs": "Jaké nabíjecí přípojky jsou zde k dispozici?", "de": "Welche Ladeanschlüsse gibt es hier?", "es": "¿Qué conexiones de carga están disponibles aquí?" }, @@ -286,6 +297,7 @@ "en": "Schuko wall plug without ground pin (CEE7/4 type F)", "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)", "ca": "Endoll de paret Schuko sense pin a terra (CEE7/4 tipus F)", + "cs": "Schuko zásuvka bez zemnícího kolíku (CEE7/4 typ F)", "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)", "es": "Enchufe de pared Schuko sin pin de tierra (tipo CEE7/4 F)" }, @@ -382,6 +394,7 @@ "en": "Schuko wall plug without ground pin (CEE7/4 type F)", "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)", "ca": "Endoll de paret Schuko sense pin a terra (CEE7/4 tipus F)", + "cs": "Schuko zásuvka bez zemnícího kolíku (CEE7/4 typ F)", "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)", "es": "Enchufe de pared Schuko sin pin de tierra (tipo CEE7/4 F)" }, @@ -398,6 +411,7 @@ "en": "European wall plug with ground pin (CEE7/4 type E)", "nl": "Europese stekker met aardingspin (CEE7/4 type E)", "ca": "Endoll de paret Europeu amb pin a terra (CEE7/4 tipus E)", + "cs": "Evropská zásuvka se zemnícím kolíkem (CEE7/4 typ E)", "de": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)", "es": "Enchufe de pared europeo con pin de tierra (tipo CEE7/4 E)" }, @@ -479,6 +493,7 @@ "en": "Chademo", "nl": "Chademo", "ca": "CHAdeMo", + "cs": "Chademo", "de": "Chademo-Anschluss", "es": "Chademo" }, @@ -524,6 +539,7 @@ "en": "Chademo", "nl": "Chademo", "ca": "CHAdeMo", + "cs": "Chademo", "de": "Chademo-Anschluss", "es": "Chademo" }, @@ -540,6 +556,7 @@ "en": "Type 1 with cable (J1772)", "nl": "Type 1 met kabel (J1772)", "ca": "Tipus 1 amb cable", + "cs": "Typ 1 s kabelem (J1772)", "de": "Typ 1 mit Kabel (J1772)", "es": "Tipo 1 con cable (J1772)" }, @@ -585,6 +602,7 @@ "en": "Type 1 with cable (J1772)", "nl": "Type 1 met kabel (J1772)", "ca": "Tipus 1 amb cable", + "cs": "Typ 1 s kabelem (J1772)", "de": "Typ 1 mit Kabel (J1772)", "es": "Tipo 1 con cable (J1772)" }, @@ -601,6 +619,7 @@ "en": "Type 1 without cable (J1772)", "nl": "Type 1 zonder kabel (J1772)", "ca": "Tipus 1 sense cable", + "cs": "Typ 1 bez kabelu (J1772)", "de": "Typ 1 ohne Kabel (J1772)", "es": "Tipo 1 sin cable (J1772)" }, @@ -646,6 +665,7 @@ "en": "Type 1 without cable (J1772)", "nl": "Type 1 zonder kabel (J1772)", "ca": "Tipus 1 sense cable(J1772)", + "cs": "Typ 1 bez kabelu (J1772)", "de": " Typ 1 ohne Kabel (J1772)", "es": "Tipo 1 sin cable (J1772)" }, @@ -662,6 +682,7 @@ "en": "Type 1 CCS (aka Type 1 Combo)", "nl": "Type 1 CCS (ook gekend als Type 1 Combo)", "ca": "CSS Tipus 1 (també conegut com a Tipus 1 Combo)", + "cs": "CCS typu 1 (neboli kombinace typu 1)", "de": "Typ 1 CCS (Typ 1 Combo)", "es": "Tipo 1 CCS (también conocido como Tipo 1 Combo)" }, @@ -707,6 +728,7 @@ "en": "Type 1 CCS (aka Type 1 Combo)", "nl": "Type 1 CCS (ook gekend als Type 1 Combo)", "ca": "CSS Tipus 1 (també conegut com a Tipus 1 Combo)", + "cs": "CCS typu 1 (neboli kombinace typu 1)", "de": " Typ 1 CCS (auch bekannt als Typ 1 Combo)", "es": "Tipo 1 CCS (también conocido como Tipo 1 Combo)" }, @@ -723,6 +745,7 @@ "en": "Tesla Supercharger", "nl": "Tesla Supercharger", "ca": "Supercarregador de Tesla", + "cs": "Tesla Supercharger", "de": "Tesla Supercharger", "es": "Tesla Supercharger" }, @@ -768,6 +791,7 @@ "en": "Tesla Supercharger", "nl": "Tesla Supercharger", "ca": "Supercarregador de Tesla", + "cs": "Tesla Supercharger", "de": "Tesla Supercharger", "es": "Tesla Supercharger" }, @@ -784,6 +808,7 @@ "en": "Type 2 (mennekes)", "nl": "Type 2 (mennekes)", "ca": "Tipus 2 (mennekes)", + "cs": "Typ 2 (mennekes)", "de": "Typ 2 (Mennekes)", "es": "Tipo 2 (mennekes)" }, @@ -829,6 +854,7 @@ "en": "Type 2 (mennekes)", "nl": "Type 2 (mennekes)", "ca": "Tipus 2 (mennekes)", + "cs": "Typ 2 (mennekes)", "de": "Typ 2 (Mennekes)", "es": "Tipo 2 (mennekes)" }, @@ -845,6 +871,7 @@ "en": "Type 2 CCS (mennekes)", "nl": "Type 2 CCS (mennekes)", "ca": "CSS Tipus 2 (mennekes)", + "cs": "Typ 2 CCS (mennekes)", "de": "Typ 2 CCS (Mennekes)", "es": "Tipo 2 CCS (mennekes)" }, @@ -890,6 +917,7 @@ "en": "Type 2 CCS (mennekes)", "nl": "Type 2 CCS (mennekes)", "ca": "CSS Tipus 2 (mennekes)", + "cs": "Typ 2 CCS (mennekes)", "de": "Typ 2 CCS (mennekes)", "es": "Tipo 2 CCS (mennekes)" }, @@ -905,6 +933,7 @@ "then": { "en": "Type 2 with cable (mennekes)", "nl": "Type 2 met kabel (J1772)", + "cs": "Typ 2 s kabelem (mennekes)", "de": "Typ 2 mit Kabel (Mennekes)", "es": "Tipo 2 con cable (mennekes)" }, @@ -949,6 +978,7 @@ "then": { "en": "Type 2 with cable (mennekes)", "nl": "Type 2 met kabel (J1772)", + "cs": "Typ 2 s kabelem (mennekes)", "de": "Typ 2 mit Kabel (mennekes)", "es": "Tipo 2 con cable (mennekes)" }, @@ -964,6 +994,7 @@ "then": { "en": "Tesla Supercharger CCS (a branded type2_css)", "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)", + "cs": "Tesla Supercharger CCS (značkový typ2_css)", "de": "Tesla Supercharger CCS (Typ 2 CSS von Tesla)", "es": "Tesla Supercharger CCS (un tipo2_css de marca)" }, @@ -1008,6 +1039,7 @@ "then": { "en": "Tesla Supercharger CCS (a branded type2_css)", "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)", + "cs": "Tesla Supercharger CCS (značkový typ2_css)", "de": "Tesla Supercharger CCS (ein Markenzeichen von type2_css)", "es": "Tesla Supercharger CCS (un tipo2_css de marca)" }, @@ -1023,6 +1055,7 @@ "then": { "en": "Tesla Supercharger (destination)", "nl": "Tesla Supercharger (destination)", + "cs": "Tesla Supercharger (cíl)", "de": "Tesla Supercharger (Destination)", "es": "Tesla Supercharger (destino)" }, @@ -1073,6 +1106,7 @@ "then": { "en": "Tesla Supercharger (destination)", "nl": "Tesla Supercharger (destination)", + "cs": "Tesla Supercharger (cíl)", "de": "Tesla Supercharger (Destination)", "es": "Tesla Supercharger (destino)" }, @@ -1298,6 +1332,7 @@ "then": { "en": "BS1363 (Type G)", "nl": "BS1363 (VK 3-pin)", + "cs": "BS1363 (Typ G)", "de": "BS1363 (Typ G)", "es": "BS1363 (Tipo G)" }, @@ -1366,6 +1401,7 @@ "then": { "en": "BS1363 (Type G)", "nl": "BS1363 (VK 3-pin)", + "cs": "BS1363 (Typ G)", "de": "BS1363 (Typ G)", "es": "BS1363 (Tipo G)" }, @@ -1381,6 +1417,7 @@ "then": { "en": "NEMA 5-15 (Type B)", "nl": "NEMA 5-15 (VS 3-pin)", + "cs": "NEMA 5-15 (Typ B)", "de": "NEMA 5-15 (Typ B)", "es": "NEMA 5-15 (Tipo B)" }, @@ -1448,6 +1485,7 @@ "then": { "en": "NEMA 5-15 (Type B)", "nl": "NEMA 5-15 (VS 3-pin)", + "cs": "NEMA 5-15 (Typ B)", "de": "NEMA 5-15 (Typ B)", "es": "NEMA 5-15 (Tipo B)" }, @@ -1463,6 +1501,7 @@ "then": { "en": "SEV 1011 T23 (Type J)", "nl": "SEV 1011 T23 (Zwitserse 3-pin)", + "cs": "SEV 1011 T23 (Typ J)", "de": "SEV 1011 T23 (Typ J)", "es": "SEV 1011 T23 (Tipo J)" }, @@ -1506,6 +1545,7 @@ "then": { "en": "AS3112 (Type I)", "nl": "AS3112 (Australische 3-pin)", + "cs": "AS3112 (Typ I)", "de": "AS3112 (Typ I)", "es": "AS3112 (Tipo I)" }, @@ -1546,6 +1586,7 @@ "then": { "en": "AS3112 (Type I)", "nl": "AS3112 (Australische 3-pin)", + "cs": "AS3112 (Typ I)", "de": "AS3112 (Typ I)", "es": "AS3112 (Tipo I)" }, @@ -1561,6 +1602,7 @@ "then": { "en": "NEMA 5-20 (Type B)", "nl": "NEMA 5-20 (VS 3-pin)", + "cs": "NEMA 5-20 (Typ B)", "de": "NEMA 5-20 (Typ B)", "es": "NEMA 5-20 (Tipo B)" }, @@ -1628,6 +1670,7 @@ "then": { "en": "NEMA 5-20 (Type B)", "nl": "NEMA 5-20 (VS 3-pin)", + "cs": "NEMA 5-20 (Typ B)", "de": "NEMA 5-20 (Typ B)", "es": "NEMA 5-20 (Tipo B)" }, @@ -2256,6 +2299,7 @@ "en": "When is this charging station opened?", "nl": "Wanneer is dit oplaadpunt beschikbaar??", "ca": "Quan està oberta aquesta estació de càrrega?", + "cs": "Kdy je tato nabíjecí stanice otevřena?", "de": "Wann ist die Ladestation geöffnet?", "es": "¿Cuándo está abierto este punto de carga?", "pl": "Kiedy jest otwarta ta stacja ładowania?" @@ -2395,6 +2439,7 @@ "en": "What kind of authentication is available at the charging station?", "nl": "Hoe kan men zich aanmelden aan dit oplaadstation?", "ca": "Quin tipus d'autenticació hi ha disponible a l'estació de càrrega?", + "cs": "Jaký druh autentizace je na nabíjecí stanici k dispozici?", "de": "Welche Art der Authentifizierung ist an der Ladestation möglich?", "es": "¿Qué tipo de autenticación está disponible en el punto de carga?" }, @@ -2407,6 +2452,7 @@ "en": "Authentication by a membership card", "nl": "Aanmelden met een lidkaart is mogelijk", "ca": "Autenticació mitjançant una targeta de soci", + "cs": "Autentizace členskou kartou", "de": "Authentifizierung durch eine Mitgliedskarte", "es": "Autenticación mediante tarjeta de socio", "fr": "Authentification par carte de membre" @@ -2419,6 +2465,7 @@ "en": "Authentication by an app", "nl": "Aanmelden via een applicatie is mogelijk", "ca": "Autenticació mitjançant una aplicació", + "cs": "Autentizace pomocí aplikace", "de": "Authentifizierung per App", "es": "Autenticación mediante una aplicación", "fr": "Authentification par une application" @@ -2430,6 +2477,7 @@ "then": { "en": "Authentication via phone call is available", "nl": "Aanmelden door te bellen naar een telefoonnummer is mogelijk", + "cs": "K dispozici je autentizace pomocí telefonního hovoru", "de": "Authentifizierung per Anruf ist möglich", "es": "Hay disponible autenticación por llamada telefónica", "fr": "Authentification possible par appel téléphonique", @@ -2442,6 +2490,7 @@ "then": { "en": "Authentication via SMS is available", "nl": "Aanmelden via SMS is mogelijk", + "cs": "K dispozici je autentizace pomocí SMS", "de": "Authentifizierung per SMS ist möglich", "es": "Hay disponible autenticación por SMS", "fr": "Authentification possible par SMS" @@ -2454,6 +2503,7 @@ "en": "Authentication via NFC is available", "nl": "Aanmelden via NFC is mogelijk", "ca": "L'autenticació mitjançant NFC està disponible", + "cs": "K dispozici je autentizace přes NFC", "de": "Authentifizierung per NFC ist möglich", "es": "Hay disponible autenticación por NFC" } @@ -2465,6 +2515,7 @@ "en": "Authentication via Money Card is available", "nl": "Aanmelden met Money Card is mogelijk", "ca": "L'autenticació mitjançant targeta de pagament està disponible", + "cs": "K dispozici je autentizace prostřednictvím Money Card", "de": "Authentifizierung per Geldkarte ist möglich", "es": "Hay disponible autenticación por tarjeta de crédito" } @@ -2476,6 +2527,7 @@ "en": "Authentication via debit card is available", "nl": "Aanmelden met een betaalkaart is mogelijk", "ca": "L'autenticació mitjançant targeta de debit està disponible", + "cs": "K dispozici je autentizace prostřednictvím debetní karty", "de": "Authentifizierung per Kreditkarte ist möglich", "es": "Hay disponible autenticación por tarjeta de débito" } @@ -2487,6 +2539,7 @@ "en": "Charging here is (also) possible without authentication", "nl": "Hier opladen is (ook) mogelijk zonder aan te melden", "ca": "Carregar aquí (també) és possible sense autenticació", + "cs": "Nabíjení je zde (také) možné bez autentizace", "de": "Das Laden ist hier (auch) ohne Authentifizierung möglich", "es": "La carga aquí también es posible sin autenticación" } @@ -2513,6 +2566,7 @@ "en": "What's the phone number for authentication call or SMS?", "nl": "Wat is het telefoonnummer dat men moet bellen of SMS'en om zich aan te melden?", "ca": "Quin és el número de telèfon per a la trucada d'autenticació o SMS?", + "cs": "Jaké je telefonní číslo pro autentizační hovor nebo SMS?", "de": "Wie lautet die Telefonnummer für den Authentifizierungsanruf oder die SMS?", "es": "¿Cuál es el número de teléfono para la llamada o SMS de autenticación?", "uk": "Який номер телефону для аутентифікаційного дзвінка або SMS?" @@ -2547,6 +2601,7 @@ "en": "Part of the network {network}", "nl": "Maakt deel uit van het {network}-netwerk", "ca": "Part de la xarxa {network}", + "cs": "Část sítě {network}", "de": "Teil des Netzwerks {network}", "es": "Parte de la red {network}", "pl": "Część sieci {network}", @@ -2571,6 +2626,7 @@ "then": { "en": "Not part of a bigger network, e.g. because the charging station is maintained by a local business", "nl": "Maakt geen deel uit van een groter netwerk, een lokale zaak of organisatie beheert dit oplaadpunt", + "cs": "Není součástí větší sítě, např. protože nabíjecí stanici spravuje místní firma", "de": "Nicht Teil eines größeren Netzwerks, z. B. weil die Ladestation von einem lokalen Unternehmen betrieben wird", "es": "No forma parte de una red mayor, por ejemplo, porque el punto de carga es mantenido por un negocio local", "uk": "Не є частиною більшої мережі, наприклад, тому що зарядна станція обслуговується місцевим підприємством" @@ -2633,6 +2689,7 @@ "en": "Who is the operator of this charging station?", "nl": "Wie beheert dit oplaadpunt?", "ca": "Qui és l'operadora d'aquesta estació de càrrega?", + "cs": "Kdo je provozovatelem této nabíjecí stanice?", "de": "Wer ist der Betreiber dieser Ladestation?", "es": "¿Quién es el operador de este punto de carga?" }, @@ -2640,6 +2697,7 @@ "en": "This charging station is operated by {operator}", "nl": "Wordt beheerd door {operator}", "ca": "Aquesta estació de càrrega l'opera {operator}", + "cs": "Tuto nabíjecí stanici provozuje {operator}", "de": "Die Station wird betrieben von {operator}", "es": "Este punto de carga es operado por {operator}", "pl": "Ta stacja ładowania jest obsługiwana przez {operator}" @@ -2658,6 +2716,7 @@ "en": "Actually, {operator} is the network", "nl": "Eigenlijk is {operator} het netwerk waarvan het deel uitmaakt", "ca": "De fet, {operator} és la xarxa", + "cs": "Síť je ve skutečnosti {operator}", "de": "Eigentlich ist {operator} das Netzwerk", "es": "En realidad, {operator} es la red" }, @@ -2767,6 +2826,7 @@ "en": "Is this charging point in use?", "nl": "Is dit oplaadpunt operationeel?", "ca": "Està en ús aquest punt de càrrega?", + "cs": "Používá se tento nabíjecí bod?", "de": "Ist die Station in Betrieb?", "es": "¿Este punto de carga está en uso?" }, @@ -2785,6 +2845,7 @@ "en": "This charging station works", "nl": "Dit oplaadpunt werkt", "ca": "Aquesta estació de càrrega funciona", + "cs": "Tato nabíjecí stanice funguje", "de": "Die Station ist in Betrieb", "es": "Este punto de carga funciona", "fr": "Cette station de recharge fonctionne", @@ -2805,6 +2866,7 @@ "en": "This charging station is broken", "nl": "Dit oplaadpunt is kapot", "ca": "Aquesta estació de carrega està trencada", + "cs": "Tato nabíjecí stanice je rozbitá", "de": "Die Station ist defekt", "es": "Este punto de carga está roto", "pl": "Ta stacja ładowania jest zepsuta" @@ -2824,6 +2886,7 @@ "en": "A charging station is planned here", "nl": "Hier zal binnenkort een oplaadpunt gebouwd worden", "ca": "Aquí està prevista una estació de recàrrega", + "cs": "Plánuje se zde nabíjecí stanice", "de": "Die Station ist erst in Planung", "es": "Aquí se planea un punto de carga", "pl": "Planowana jest tutaj stacja ładowania" @@ -2842,6 +2905,7 @@ "then": { "en": "A charging station is constructed here", "nl": "Hier wordt op dit moment een oplaadpunt gebouwd", + "cs": "Zde je budována dobíjecí stanice", "de": "Die Station ist aktuell im Bau", "es": "Aquí se está construyendo un punto de carga", "pl": "Budowana jest tutaj stacja ładowania" @@ -2861,6 +2925,7 @@ "en": "This charging station has beed permanently disabled and is not in use anymore but is still visible", "nl": "Dit oplaadpunt is niet meer in gebruik maar is wel nog aanwezig", "ca": "Aquesta estació de recàrrega s'ha desactivat permanentment i ja no s'utilitza, però encara és visible", + "cs": "Tato nabíjecí stanice byla trvale deaktivována a již se nepoužívá, ale je stále viditelná", "de": "Die Station ist dauerhaft geschlossen und nicht mehr in Nutzung, aber noch sichtbar", "es": "Este punto de carga ha sido deshabilitado permanentemente y ya no está en uso, pero sigue siendo visible" } @@ -2873,6 +2938,7 @@ "en": "Does one have to pay a parking fee while charging?", "nl": "Moet men parkeergeld betalen tijdens het opladen?", "ca": "Cal pagar una taxa d'aparcament mentre es carrega?", + "cs": "Musí se při nabíjení platit parkovné?", "de": "Muss man während des Ladens eine Parkgebühr bezahlen?", "es": "¿Hay que pagar una tarifa de aparcamiento mientras se carga?" }, @@ -2883,6 +2949,7 @@ "en": "No additional parking cost while charging", "nl": "Geen extra parkeerkost tijdens het opladen", "ca": "No cal pagar una taxa addicional mentres carrega", + "cs": "Žádné další poplatky za parkování během nabíjení", "de": "Keine zusätzlichen Parkkosten während des Ladens", "es": "Sin coste de aparcamiento adicional mientras se carga" } @@ -2893,6 +2960,7 @@ "en": "An additional parking fee should be paid while charging", "nl": "Tijdens het opladen moet er parkeergeld betaald worden", "ca": "Cal pagar una taxa addicional d'aparcament mentres carrega", + "cs": "Při nabíjení je třeba uhradit další poplatek za parkování", "de": "Während des Ladens ist eine zusätzliche Parkgebühr zu entrichten", "es": "Se debe pagar una tarifa de aparcamiento adicional mientras se carga" } @@ -3006,6 +3074,7 @@ "title": { "en": "charging station for electrical bikes", "nl": "oplaadpunt voor elektrische fietsen", + "cs": "nabíjecí stanice pro elektrokola", "de": "Ladestation für Elektrofahrräder", "es": "punto de carga para bicicletas eléctricas" } @@ -3020,6 +3089,7 @@ "en": "charging station for cars", "nl": "oplaadstation voor elektrische auto's", "ca": "estació de càrrega per a cotxes", + "cs": "nabíjecí stanice pro auta", "de": "Ladestation für Autos", "es": "punto de carga para coches" } @@ -3116,6 +3186,7 @@ "en": "Has a
Schuko wall plug without ground pin (CEE7/4 type F)
connector", "nl": "Heeft een
Schuko stekker zonder aardingspin (CEE7/4 type F)
", "ca": "Té un connector
Schuko sense pin de terra (CEE7/4 tipus F)
", + "cs": "Má konektor
nástěnné zástrčky Schuko bez zemnicího kolíku (CEE7/4 typ F)
", "de": "Verfügt über einen
Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
", "es": "Tiene un conector
Enchufe de pared Schuko sin pin de tierra (tipo CEE7/4 F)
" }, @@ -3200,6 +3271,7 @@ "en": "Has a
Type 2 with cable (mennekes)
connector", "nl": "Heeft een
Type 2 met kabel (J1772)
", "ca": "Té un connector
Tipus 2 amb cable (mennekes)
", + "cs": "Má konektor
Typ 2 s kabelem (mennekes)
", "de": "Hat einen
Typ 2 (Mennekes)
Anschluss mit Kabel", "es": "Tiene un conector
Tipo 2 con cable (mennekes)
" }, @@ -3209,6 +3281,7 @@ "question": { "en": "Has a
Tesla Supercharger CCS (a branded type2_css)
connector", "nl": "Heeft een
Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
", + "cs": "Má konektor
Tesla Supercharger CCS (značkový typ2_css)
", "de": "Hat einen
Tesla Supercharger CCS (Typ 2 CSS vonTesla)
Anschluss", "es": "Tiene un conector
Tesla Supercharger CCS (un tipo2_css de marca)
" }, @@ -3218,6 +3291,7 @@ "question": { "en": "Has a
Tesla Supercharger (destination)
connector", "nl": "Heeft een
Tesla Supercharger (destination)
", + "cs": "Má konektor
Tesla Supercharger (destinace)
", "de": "Hat einen
Tesla Supercharger (Destination)
Anschluss", "es": "Tiene un conector
Tesla Supercharger (destino)
" }, diff --git a/assets/layers/cinema/cinema.json b/assets/layers/cinema/cinema.json index 78b9a464fd..e3d96f1b0a 100644 --- a/assets/layers/cinema/cinema.json +++ b/assets/layers/cinema/cinema.json @@ -4,12 +4,14 @@ "en": "Cinema", "de": "Kino", "es": "Cine", - "cs": "Kino" + "cs": "Kino", + "nl": "Bioscoop" }, "description": { - "en": " A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US", - "de": " Ein Ort, an dem Filme gezeigt werden, die der Öffentlichkeit gegen Gebühr zugänglich sind", - "es": " Un lugar donde se proyectan películas (cine), generalmente abierto al público por una tarifa Comúnmente conocido como cine en Estados Unidos" + "en": "A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US.", + "de": "Ein Ort, an dem Filme gezeigt werden, die der Öffentlichkeit gegen Gebühr zugänglich sind.", + "es": "Un lugar donde se proyectan películas (cine), generalmente abierto al público por una tarifa Comúnmente conocido como cine en Estados Unidos.", + "nl": "Een plaats die films toont, meestal open voor het publiek tegen een vergoeding." }, "source": { "osmTags": "amenity=cinema" @@ -28,7 +30,8 @@ "en": "Cinema", "de": "Kino", "es": "Cine", - "cs": "Kino" + "cs": "Kino", + "nl": "Bioscoop" } }, "pointRendering": [ @@ -60,7 +63,8 @@ "en": "What type of cinema is this?", "de": "Um welche Art von Kino handelt es sich?", "es": "¿Qué tipo de cine es este?", - "cs": "O jaký typ kina se jedná?" + "cs": "O jaký typ kina se jedná?", + "nl": "Wat voor type bioscoop is dit?" }, "mappings": [ { @@ -69,7 +73,8 @@ "en": "This is a normal cinema showing movies for all ages", "de": "Dies ist ein normales Kino, das Filme für alle Altersgruppen zeigt", "es": "Este es un cine normal que proyecta películas para todas las edades", - "cs": "Toto je normální kino promítající filmy pro všechny věkové kategorie" + "cs": "Toto je normální kino promítající filmy pro všechny věkové kategorie", + "nl": "Dit is een normale bioscoop met films voor alle leeftijden" } }, { @@ -78,7 +83,8 @@ "en": "This is an erotic cinema showing adult movies", "de": "Dies ist ein Sex-Kino, das Erwachsenenfilme zeigt", "es": "Este es un cine erótico que proyecta películas para adultos", - "cs": "Toto je erotické kino promítající filmy pro dospělé" + "cs": "Toto je erotické kino promítající filmy pro dospělé", + "nl": "Dit is een erotische bioscoop met films voor volwassenen" } } ] diff --git a/assets/layers/climbing/climbing.json b/assets/layers/climbing/climbing.json index 5e8943697b..8a42d60845 100644 --- a/assets/layers/climbing/climbing.json +++ b/assets/layers/climbing/climbing.json @@ -2,7 +2,7 @@ "id": "climbing", "description": { "en": "A dummy layer which contains tagrenderings, shared among the climbing layers", - "nl": "Een dummy-laag die tagrenderings bevat, gedeeld over de verschillende klimsport lagen", + "nl": "Een dummy-laag die tagrenderings bevat, gedeeld over de verschillende klimsportlagen", "de": "Eine Dummy-Ebene, die Tagrenderings enthält, die von den Kletterebenen gemeinsam genutzt werden", "cs": "Falešná vrstva, která obsahuje tagrenderingy sdílené mezi lezeckými vrstvami", "ca": "Una capa fictícia que conté renderització d'etiquetes compartides entre les capes d'escalada", @@ -394,9 +394,9 @@ "es": "¿Cuántos parabolts tienen como máximo las vías en {title()}?" }, "render": { - "en": "The sport climbing routes here have at most {climbing:bolts:max} bolts.
This is without relays and indicates how much quickdraws a climber needs
", + "en": "The sport climbing routes here have at most {climbing:bolts:max} bolts.
This is without belay stations and indicates how much quickdraws a climber needs.
", "de": "Die Sportkletterrouten hier haben maximal {climbing:bolts:max} Haken.
Dies ist ohne Relais und gibt an, wie viel Schnellspanner ein Kletterer braucht
", - "nl": "De sportklimroutes hebben maximaal {climbing:bolts:max} bouten.
Hierbij worden relays niet meegteld. Dit geeft aan hoeveel klimsetjes een klimmer nodig heeft
", + "nl": "De sportklimroutes hebben maximum {climbing:bolts:max} haken.
Hierbij worden standplaatsen niet meegeteld. Dit geeft aan hoeveel setjes een klimmer nodig heeft.
", "es": "Las vías de escalada deportiva aquí tienen como máximo {climbing:bolts:max} parabolts.
Esto es sin reuniones e indica cuántos cintas exprés necesita un escalador
" }, "freeform": { diff --git a/assets/layers/climbing_area/climbing_area.json b/assets/layers/climbing_area/climbing_area.json index 3ff2ead8cd..d0bf2a4544 100644 --- a/assets/layers/climbing_area/climbing_area.json +++ b/assets/layers/climbing_area/climbing_area.json @@ -311,7 +311,8 @@ "then": { "en": "A climbing area with one or more climbing crags and/or boulders", "de": "Ein Klettergebiet mit einem oder meheren Kletter- und/oder Boulderfelsen", - "es": "Un área de escalada con una o más paredes y/o bloques de escalada" + "es": "Un área de escalada con una o más paredes y/o bloques de escalada", + "nl": "Een klimgebied met een of meer klimrotsen en/of boulders" } } ], diff --git a/assets/layers/climbing_gym/climbing_gym.json b/assets/layers/climbing_gym/climbing_gym.json index baa850f4a1..492ecedf35 100644 --- a/assets/layers/climbing_gym/climbing_gym.json +++ b/assets/layers/climbing_gym/climbing_gym.json @@ -28,7 +28,12 @@ "osmTags": { "and": [ "sport=climbing", - "leisure=sports_centre" + { + "or": [ + "leisure=sports_centre", + "leisure=sports_hall" + ] + } ] } }, @@ -118,7 +123,7 @@ }, "question": { "en": "What is the name of this climbing gym?", - "nl": "Wat is de naam van dit Klimzaal?", + "nl": "Wat is de naam van deze klimzaal?", "de": "Wie heißt diese Kletterhalle?", "ja": "このクライミングジムは何という名前ですか?", "fr": "Quel est le nom de la salle d’escalade ?", @@ -147,8 +152,8 @@ { "id": "shoe_rental", "question": { - "en": "Can one rent climbing shoes here?", - "nl": "Kunnen hier klimschoenen gehuurd worden?", + "en": "Can one rent climbing shoes here to use in the gym?", + "nl": "Kunnen hier klimschoenen gehuurd worden voor gebruik in de zaal?", "fr": "Peut-on louer des chaussures d'escalade ici ?", "de": "Kann man hier Kletterschuhe ausleihen?", "pl": "Czy można tutaj wypożyczyć buty do wspinaczki?", @@ -233,8 +238,8 @@ { "id": "harness_rental", "question": { - "en": "Can one rent a climbing harness here?", - "nl": "Kan een klimgordel hier gehuurd worden?", + "en": "Can one rent a climbing harness here to use in the gym?", + "nl": "Kan hier een klimgordel gehuurd worden voor gebruik in de zaal?", "fr": "Peut-on louer un baudrier d'escalade ici ?", "de": "Kann man hier einen Klettergurt ausleihen?", "cs": "Lze si zde zapůjčit horolezecký postroj?", @@ -242,8 +247,24 @@ }, "condition": { "or": [ - "climbing:sport!=no", - "climbing:toprope!=no" + { + "and": [ + "climbing:sport!=", + "climbing:sport!=no" + ] + }, + { + "and": [ + "climbing:toprope!=", + "climbing:toprope!=no" + ] + }, + { + "and": [ + "climbing:speed!=", + "climbing:speed!=no" + ] + } ] }, "mappings": [ @@ -315,11 +336,110 @@ } ] }, + { + "id": "auto_belay_toprope", + "question": { + "en": "Are there auto belays for top roping here?", + "nl": "Zijn hier auto belays voor toprope?" + }, + "questionHint": { + "en": "Excluding auto belays that are only for speed climbing", + "nl": "Autobelays die enkel voor speed zijn, tellen niet mee" + }, + "condition": { + "and": [ + "climbing:toprope!=", + "climbing:toprope!=no" + ] + }, + "freeform": { + "key": "climbing:autobelay:toprope", + "type": "nat" + }, + "mappings": [ + { + "if": "climbing:autobelay:toprope=no", + "then": { + "en": "There are no auto belays for top roping", + "nl": "Er zijn geen autobelays voor toprope" + } + }, + { + "if": "climbing:autobelay:toprope=yes", + "then": { + "en": "There are a number of auto belays for top roping", + "nl": "Er zijn enkele autobelays voor toprope" + } + }, + { + "if": "climbing:autobelay:toprope=all", + "then": { + "en": "There is an auto belay for every top rope route but manual belaying is also possible", + "nl": "Elke toproperoute kan op autobelay geklommen worden maar handmatig zekeren is ook mogelijk" + } + }, + { + "if": "climbing:autobelay:toprope=only", + "then": { + "en": "Top rope routes can only be climbed on auto belay", + "nl": "Toproperoutes kunnen enkel op autobelay geklommen worden" + } + } + ], + "render": { + "en": "There are {climbing:autobelay:toprope} auto belay devices for top roping", + "nl": "Er zijn {climbing:autobelay:toprope} autobelaytoestellen voor toprope" + } + }, + { + "id": "auto_belay_lead", + "question": { + "en": "Are there auto belays for lead climbing here?", + "nl": "Zijn hier autobelays voor voorklimmen?" + }, + "condition": { + "and": [ + "climbing:sport!=", + "climbing:sport!=no" + ] + }, + "freeform": { + "key": "climbing:autobelay:sport", + "type": "nat" + }, + "mappings": [ + { + "if": "climbing:autobelay:sport=no", + "then": { + "en": "There are no auto belays for lead climbing", + "nl": "Er zijn geen autobelays voor voorklimmen" + } + }, + { + "if": "climbing:autobelay:sport=yes", + "then": { + "en": "There is a number of auto belays for lead climbing", + "nl": "Er zijn enkele autobelays voor voorklimmen" + } + }, + { + "if": "climbing:autobelay:sport=all", + "then": { + "en": "There is an auto belay for every lead climbing route", + "nl": "Elke voorklimroute kan op autobelay geklommen worden" + } + } + ], + "render": { + "en": "There are {climbing:autobelay:sport} auto belays for lead climbing", + "nl": "Er zijn {climbing:autobelay:sport} autobelays voor voorklimmen" + } + }, { "id": "belay_device_rental", "question": { - "en": "Can one rent a belay device here?", - "nl": "Kan een zekeringsapparaat hier gehuurd worden?", + "en": "Can one rent a belay device here to use in the gym?", + "nl": "Kan hier een zekeringsapparaat gehuurd worden voor gebruik in de zaal?", "fr": "Peut-on louer un dispositif d'assurage ici ?", "de": "Kann man hier ein Sicherungsgerät ausleihen?", "cs": "Lze si zde půjčit jištění?", @@ -327,8 +447,18 @@ }, "condition": { "or": [ - "climbing:sport!=no", - "climbing:toprope!=no" + { + "and": [ + "climbing:sport!=", + "climbing:sport!=no" + ] + }, + { + "and": [ + "climbing:toprope!=", + "climbing:toprope!=no" + ] + } ] }, "mappings": [ @@ -422,8 +552,8 @@ { "id": "rope_rental", "question": { - "en": "Can one rent a climbing rope here?", - "nl": "Kan een klimtouw hier gehuurd worden?", + "en": "Can one rent a climbing rope here to use in the gym?", + "nl": "Kan hier een klimtouw gehuurd worden voor gebruik in de zaal?", "fr": "Peut-on louer une corde d'escalade ici ?", "de": "Kann man hier ein Kletterseil ausleihen?", "cs": "Lze si zde půjčit lezecké lano?", diff --git a/assets/layers/climbing_opportunity/climbing_opportunity.json b/assets/layers/climbing_opportunity/climbing_opportunity.json index 5fa9ffe98a..aaf85d5e43 100644 --- a/assets/layers/climbing_opportunity/climbing_opportunity.json +++ b/assets/layers/climbing_opportunity/climbing_opportunity.json @@ -161,7 +161,8 @@ "en": "a wall, cliff or rock", "de": "eine Wand, eine Klippe oder einen Felsen", "es": "una pared, un acantilado o una roca", - "cs": "zeď, útes nebo skála" + "cs": "zeď, útes nebo skála", + "nl": "een muur, klif of rots" }, "isCounted": false } diff --git a/assets/layers/climbing_route/climbing_route.json b/assets/layers/climbing_route/climbing_route.json index babac00132..8cde1a80db 100644 --- a/assets/layers/climbing_route/climbing_route.json +++ b/assets/layers/climbing_route/climbing_route.json @@ -249,11 +249,11 @@ "es": "¿Cuántos parabolts tiene esta vía antes de llegar al anclaje?" }, "render": { - "en": "This route has {climbing:bolts} bolts
This is without relays and indicates how much quickdraws a climber needs
", + "en": "This route has {climbing:bolts} bolts.
This is without belay stations and indicates how much quickdraws a climber needs.
", "fr": "Cette voie a {climbing:bolts} prises
C'est sans relai et indique de combien de dégaine un grimpeur a besoin
", "de": "Diese Route hat {climbing:bolts} Haken
Dies ist ohne Relais und gibt an, wie viel Schnellspanner ein Kletterer braucht
", "it": "Questo percorso ha {climbing:bolts} bulloni
Questa è senza collettori e indica di quanti bloccaggi rapidi ha bisogno un arrampicatore
", - "nl": "Deze route heeft {climbing:bolts} klimbouten.
Dit is zonder het relay mee te tellen. Een klimmer heeft dus minstens {climbing:bolts} klimsetjes nodig om boven te raken
", + "nl": "Deze route heeft {climbing:bolts} haken.
Hierbij wordt de standplaats niet meegeteld. Een klimmer heeft normaal gezien dus minstens {climbing:bolts} setjes nodig.
", "es": "Esta vía tiene {climbing:bolts} parabolts
Esto es sin reuniones e indica cuántos cintas exprés necesita un escalador
" }, "freeform": { diff --git a/assets/layers/clock/clock.json b/assets/layers/clock/clock.json index 89add586df..5f9810fd4a 100644 --- a/assets/layers/clock/clock.json +++ b/assets/layers/clock/clock.json @@ -606,7 +606,7 @@ "id": "faces", "question": { "en": "How many faces does this clock have?", - "nl": "Hoeveel klokken heeft deze klok?", + "nl": "Hoeveel wijzerplaten heeft deze klok?", "de": "Wie viele Zifferblätter hat diese Uhr?", "ca": "Quantes cares té aquest rellotge?", "fr": "Combien de faces a cette horloge ?", @@ -619,7 +619,7 @@ "inline": true, "placeholder": { "en": "Number of faces", - "nl": "Aantal klokken", + "nl": "Aantal wijzerplaten", "de": "Anzahl der Zifferblätter", "ca": "Nombre de cares", "fr": "Nombre de faces", @@ -629,7 +629,7 @@ }, "render": { "en": "This clock has {faces} faces", - "nl": "Deze klok heeft {faces} klokken", + "nl": "Deze klok heeft {faces} wijzerplaten", "de": "Diese Uhr hat {faces} Zifferblätter", "ca": "Aquest rellotge té {faces} cares", "fr": "Cette horloge a {faces} faces", @@ -641,7 +641,7 @@ "if": "faces=1", "then": { "en": "This clock has one face", - "nl": "Deze klok heeft één klok", + "nl": "Deze klok heeft één wijzerplaat", "de": "Diese Uhr hat ein Zifferblatt", "ca": "Aquest rellotge té una cara", "fr": "Cette horloge a une face", @@ -653,7 +653,7 @@ "if": "faces=2", "then": { "en": "This clock has two faces", - "nl": "Deze klok heeft twee klokken", + "nl": "Deze klok heeft twee wijzerplaten", "de": "Diese Uhr hat zwei Zifferblätter", "ca": "Aquest rellotge té dues cares", "fr": "Cette horloge a deux faces", @@ -665,7 +665,7 @@ "if": "faces=4", "then": { "en": "This clock has four faces", - "nl": "Deze klok heeft vier klokken", + "nl": "Deze klok heeft vier wijzerplaten", "de": "Diese Uhr hat vier Zifferblätter", "ca": "Aquest rellotge té quatre cares", "fr": "Cette horloge a quatre faces", diff --git a/assets/layers/cycleways_and_roads/cycleways_and_roads.json b/assets/layers/cycleways_and_roads/cycleways_and_roads.json index 1e6c5339d4..60a743c603 100644 --- a/assets/layers/cycleways_and_roads/cycleways_and_roads.json +++ b/assets/layers/cycleways_and_roads/cycleways_and_roads.json @@ -814,12 +814,14 @@ "question": { "en": "Does {title()} have an incline?", "de": "Hat {title()} eine Steigung?", - "es": "¿Tiene {title()} una inclinación?" + "es": "¿Tiene {title()} una inclinación?", + "nl": "Heeft {title()} een helling?" }, "render": { "en": "This road has an slope of {incline}", "de": "Die Straße hat {incline} Steigung", - "es": "Esta carretera tiene una pendiente de {incline}" + "es": "Esta carretera tiene una pendiente de {incline}", + "nl": "Deze weg heeft een helling van {incline}" }, "freeform": { "key": "incline", @@ -847,7 +849,8 @@ "then": { "en": "This road has a slope", "de": "Die Straße hat eine Steigung", - "es": "Esta carretera tiene una pendiente" + "es": "Esta carretera tiene una pendiente", + "nl": "Deze weg heeft een helling" }, "hideInAnswer": true } diff --git a/assets/layers/dentist/dentist.json b/assets/layers/dentist/dentist.json index 6e89d43dff..a0764af7e3 100644 --- a/assets/layers/dentist/dentist.json +++ b/assets/layers/dentist/dentist.json @@ -61,7 +61,8 @@ "en": "{name}", "de": "{name}", "ca": "{name}", - "es": "{name}" + "es": "{name}", + "nl": "{name}" } } ] diff --git a/assets/layers/elevator/elevator.json b/assets/layers/elevator/elevator.json index cd3dc45df0..31c6e1fd9c 100644 --- a/assets/layers/elevator/elevator.json +++ b/assets/layers/elevator/elevator.json @@ -193,7 +193,8 @@ "de": "Welche Form hat dieser Aufzug?", "pl": "Jaki kształt ma ta winda?", "ca": "Quina forma té aquest ascensor?", - "es": "¿Qué forma tiene este ascensor?" + "es": "¿Qué forma tiene este ascensor?", + "nl": "Wat voor vorm heeft deze lift?" }, "mappings": [ { @@ -205,7 +206,8 @@ "fr": "Cet ascenseur est de forme rectangulaire", "pl": "Ta winda ma prostokątny kształt", "ca": "Aquest ascensor té una forma rectangular", - "es": "Este ascensor tiene forma rectangular" + "es": "Este ascensor tiene forma rectangular", + "nl": "Deze lift is rechthoekig" }, "icon": "./assets/svg/square.svg" }, @@ -216,7 +218,8 @@ "de": "Dieser Aufzug hat eine kreisförmige Form", "pl": "Ta winda ma okrągły kształt", "ca": "Aquest ascensor té una forma circular", - "es": "Este ascensor tiene forma circular" + "es": "Este ascensor tiene forma circular", + "nl": "Deze lift is cirkelvormig" }, "icon": "./assets/svg/circle.svg" } @@ -296,12 +299,14 @@ "render": { "en": "This elevator has a diameter of {canonical(diameter)}", "de": "Dieser Aufzug hat einen Durchmesser von {canonical(diameter)}", - "es": "Este ascensor tiene un diámetro de {canonical(diameter)}" + "es": "Este ascensor tiene un diámetro de {canonical(diameter)}", + "nl": "Deze lift heeft een diameter van {canonical(diameter)}" }, "question": { "en": "What is the diameter of this elevator?", "de": "Was ist der Durchmesser dieses Aufzugs?", - "es": "¿Cuál es el diámetro de este ascensor?" + "es": "¿Cuál es el diámetro de este ascensor?", + "nl": "Wat is de diameter van deze lift?" }, "freeform": { "key": "diameter", @@ -381,7 +386,8 @@ "en": "Has this elevator speech output?", "de": "Verfügt der Aufzug über eine Sprachausgabe?", "cs": "Má tento výtah hlasový výstup?", - "es": "¿Tiene este ascensor salida de voz?" + "es": "¿Tiene este ascensor salida de voz?", + "nl": "Heeft deze lift spraakuitvoer?" }, "questionHint": { "en": "E.g. it announces the current floor", @@ -389,7 +395,8 @@ "ca": "P. e. anuncia la planta actual", "cs": "Např. oznamuje aktuální podlaží", "pl": "Np. informuje o aktualnym piętrze", - "es": "Ej. anuncia la planta actual" + "es": "Ej. anuncia la planta actual", + "nl": "Bijv. een aankondiging van de huidige verdieping" }, "mappings": [ { @@ -398,7 +405,8 @@ "en": "This elevator has speech output", "de": "Der Aufzug verfügt über eine Sprachausgabe", "cs": "Tento výtah má hlasový výstup", - "es": "Este ascensor tiene salida de voz" + "es": "Este ascensor tiene salida de voz", + "nl": "Deze lift heeft spraakuitvoer" } }, { @@ -407,7 +415,8 @@ "en": "This elevator does not have speech output", "de": "Der Aufzug verfügt über keine Sprachausgabe", "cs": "Tento výtah nemá hlasový výstup", - "es": "Este ascensor no tiene salida de voz" + "es": "Este ascensor no tiene salida de voz", + "nl": "Deze lift heeft geen spraakuitvoer" } } ] diff --git a/assets/layers/elongated_coin/elongated_coin.json b/assets/layers/elongated_coin/elongated_coin.json index 4e2a6224cf..51c3bd910c 100644 --- a/assets/layers/elongated_coin/elongated_coin.json +++ b/assets/layers/elongated_coin/elongated_coin.json @@ -5,14 +5,16 @@ "de": "Münzprägeautomaten", "es": "Prensa de Monedas", "ca": "Premses de cèntims", - "cs": "Ražby mincí" + "cs": "Ražby mincí", + "nl": "Muntpersen" }, "description": { "en": "Layer showing penny presses.", "de": "Ebene mit Münzprägeautomaten.", "es": "Capa que muestra prensas de monedas.", "ca": "Capa que mostra premses de cèntims.", - "cs": "Vrstva zobrazující ražbu mincí." + "cs": "Vrstva zobrazující ražbu mincí.", + "nl": "Laag met muntpersen." }, "source": { "osmTags": { @@ -62,7 +64,8 @@ "de": "Einen Münzprägeautomaten", "es": "una prensa de monedas", "ca": "una premsa de cèntim", - "cs": "ražba mincí" + "cs": "ražba mincí", + "nl": "een muntpers" }, "tags": [ "amenity=vending_machine", @@ -91,7 +94,8 @@ "de": "Motivanzahl (z.B. 5)", "es": "Número de diseños (ej. 5)", "ca": "Nombre de dissenys (p. e. 5)", - "cs": "Počet vzorů (např. 5)" + "cs": "Počet vzorů (např. 5)", + "nl": "Aantal ontwerpen (bijv. 5)" } }, "render": { @@ -109,7 +113,8 @@ "de": "Der Prägeautomat hat ein Motiv zur Auswahl.", "es": "Esta prensa de monedas tiene un diseño disponible.", "ca": "Esta premsa té un disseny disponible.", - "cs": "Tento lis na peníze má k dispozici jeden design." + "cs": "Tento lis na peníze má k dispozici jeden design.", + "nl": "Deze muntpers heeft één ontwerp beschikbaar." } }, { @@ -119,7 +124,8 @@ "de": "Der Prägeautomat hat zwei Motive zur Auswahl.", "es": "Esta prensa de monedas tiene dos diseños disponibles.", "ca": "Esta premsa té dos dissenys disponibles.", - "cs": "Tento lis na peníze má k dispozici dvě provedení." + "cs": "Tento lis na peníze má k dispozici dvě provedení.", + "nl": "Deze muntpers heeft twee ontwerpen beschikbaar." } }, { @@ -129,7 +135,8 @@ "de": "Der Prägeautomat hat drei Motive zur Auswahl.", "es": "Esta prensa de monedas tiene tres diseños disponibles.", "ca": "Esta premsa té tres dissenys disponibles.", - "cs": "Tento lis na peníze má k dispozici tři provedení." + "cs": "Tento lis na peníze má k dispozici tři provedení.", + "nl": "Deze muntpers heeft drie ontwerpen beschikbaar." } }, { @@ -211,7 +218,8 @@ "de": "Welche Münzen können geprägt werden?", "es": "¿Qué moneda se usa para prensar?", "ca": "Quina moneda s'utilitza per a premsar?", - "cs": "Jaká mince se používá k ražbě?" + "cs": "Jaká mince se používá k ražbě?", + "nl": "Welk muntstuk wordt gebruikt voor het persen?" }, "freeform": { "key": "coin:type", @@ -222,7 +230,8 @@ "es": "Tipo de moneda (ej. 10 céntimos)", "pl": "Rodzaj monety (np. 10 centów)", "ca": "Tipus de moneda (p. e. 10 cèntims)", - "cs": "Typ mince (např. 10 centů)" + "cs": "Typ mince (např. 10 centů)", + "nl": "Munttype (bijv. 10 cent)" } }, "mappings": [ @@ -233,7 +242,8 @@ "de": "Der Automat prägt 2 Cent Münzen.", "es": "Esta prensa de monedas usa una moneda de 2 céntimos para prensar.", "ca": "Esta premsa de cèntims utilitza una moneda de 2 cèntims per a premsar.", - "cs": "Tento lis na haléře používá k lisování minci v hodnotě 2 centů." + "cs": "Tento lis na haléře používá k lisování minci v hodnotě 2 centů.", + "nl": "Deze muntpers gebruikt een muntstuk van 2 cent voor het persen." }, "hideInAnswer": { "and": [ @@ -249,7 +259,8 @@ "de": "Der Automat prägt 5 Cent Münzen.", "es": "Esta prensa de monedas usa una moneda de 5 céntimos para prensar.", "ca": "Esta premsa de cèntims utilitza una moneda de 5 cèntims per a premsar.", - "cs": "Tento lis na haléře používá k lisování minci v hodnotě 5 centů." + "cs": "Tento lis na haléře používá k lisování minci v hodnotě 5 centů.", + "nl": "Deze muntpers gebruikt een muntstuk van 5 cent voor het persen." }, "hideInAnswer": { "and": [ @@ -265,7 +276,8 @@ "de": "Der Automat prägt 10 Cent Münzen.", "es": "Esta prensa de monedas usa una moneda de 10 céntimos para prensar.", "ca": "Esta premsa de cèntims utilitza una moneda de 10 cèntims per a premsar.", - "cs": "Tento lis na haléře používá k lisování minci v hodnotě 10 centů." + "cs": "Tento lis na haléře používá k lisování minci v hodnotě 10 centů.", + "nl": "Deze muntpers gebruikt een muntstuk van 10 cent voor het persen." }, "hideInAnswer": { "and": [ @@ -281,7 +293,8 @@ "de": "Der Automat prägt 25 Cent Münzen.", "es": "Esta prensa de monedas usa una moneda de 25 céntimos para prensar.", "ca": "Esta premsa de cèntims utilitza una moneda de 25 cèntims per a premsar.", - "cs": "Tento lis na haléře používá k lisování minci v hodnotě 25 centů." + "cs": "Tento lis na haléře používá k lisování minci v hodnotě 25 centů.", + "nl": "Deze muntpers gebruikt een muntstuk van 25 cent voor het persen." }, "hideInAnswer": "_currency!~.*USD.*" }, @@ -292,7 +305,8 @@ "de": "Der Automat prägt 50 Cent Münzen.", "es": "Esta prensa de monedas usa una moneda de 50 céntimos para prensar.", "ca": "Esta premsa de cèntims utilitza una moneda de 50 cèntims per a premsar.", - "cs": "Tento lis na haléře používá k lisování minci v hodnotě 50 centů." + "cs": "Tento lis na haléře používá k lisování minci v hodnotě 50 centů.", + "nl": "Deze muntpers gebruikt een muntstuk van 50 cent voor het persen." }, "hideInAnswer": "_currency!~.*USD.*" }, @@ -302,7 +316,8 @@ "en": "This penny press uses a 10 centimes coin for pressing.", "ca": "Esta premsa de cèntims utilitza una moneda de 10 cèntims per a premsar.", "de": "Der Automat prägt 10 Centime Münzen.", - "es": "Esta prensa de monedas usa una moneda de 10 céntimos para prensar." + "es": "Esta prensa de monedas usa una moneda de 10 céntimos para prensar.", + "nl": "Deze muntpers gebruikt een muntstuk van 10 rappen voor het persen." }, "hideInAnswer": "_currency!~.*CHF.*" }, @@ -312,7 +327,8 @@ "en": "This penny press uses a 20 centimes coin for pressing.", "ca": "Esta premsa de cèntims utilitza una moneda de 20 cèntims per a premsar.", "de": "Der Automat prägt 5 Centime Münzen.", - "es": "Esta prensa de monedas usa una moneda de 20 céntimos para prensar." + "es": "Esta prensa de monedas usa una moneda de 20 céntimos para prensar.", + "nl": "Deze muntpers gebruikt een muntstuk van 20 rappen voor het persen." }, "hideInAnswer": "_currency!~.*CHF.*" } @@ -322,7 +338,8 @@ "de": "Der Automat prägt {coin:type} Cent Münzen.", "es": "Esta prensa de monedas usa una moneda de {coin:type} para prensar.", "ca": "Esta premsa de cèntims utilitza una moneda de {coin:type} per a premsar.", - "cs": "Tento lis na centy používá k lisování minci {coin:type}." + "cs": "Tento lis na centy používá k lisování minci {coin:type}.", + "nl": "Deze muntpers gebruikt een muntstuk van {coin:type} voor het persen." } }, "website", @@ -339,7 +356,8 @@ "de": "Wieviel kostet die Prägung einer Münze?", "es": "¿Cuánto cuesta prensar una moneda?", "ca": "Quant costa premsar un cèntim?", - "cs": "Kolik stojí ražba mince?" + "cs": "Kolik stojí ražba mince?", + "nl": "Hoe veel kost het om een munt te persen?" }, "freeform": { "key": "charge", @@ -349,7 +367,8 @@ "fr": "Coût (par ex. 0.50 EUR)", "es": "Costo (ej. 0,50 EUR)", "ca": "Cost (p. e, 0.50 euros)", - "cs": "Cena (např. 0,50 EUR)" + "cs": "Cena (např. 0,50 EUR)", + "nl": "Kosten (bijv. 0.50 EUR)" } }, "mappings": [ @@ -360,7 +379,8 @@ "de": "Die Prägung einer Münze kostet 1,00 €.", "es": "Cuesta 1 euro prensar una moneda.", "ca": "Costa 1 euro premsar un cèntim.", - "cs": "Ražba mince stojí 1 euro." + "cs": "Ražba mince stojí 1 euro.", + "nl": "Het kost 1 euro om een munt te persen." }, "hideInAnswer": "_currency!~.*EUR.*" }, @@ -371,7 +391,8 @@ "de": "Die Prägung einer Münze kostet 2,00 €.", "es": "Cuesta 2 euros prensar una moneda.", "ca": "Costa 2 euros premsar un cèntim.", - "cs": "Ražba mince stojí 2 eura." + "cs": "Ražba mince stojí 2 eura.", + "nl": "Het kost 2 euro om een munt te persen." }, "hideInAnswer": "_currency!~.*EUR.*" }, @@ -382,7 +403,8 @@ "ca": "Costa 2 francs suïssos premsar un cèntim.", "de": "Die Prägung einer Münze kostet 2 Schweizer Franken.", "cs": "Ražba mince stojí 2 Švýcarské franky.", - "es": "Cuesta 2 francos suizos prensar una moneda." + "es": "Cuesta 2 francos suizos prensar una moneda.", + "nl": "Het kost 2 Zwitserse frank om een munt te persen." }, "hideInAnswer": "_currency!~.*CHF.*" }, @@ -393,7 +415,8 @@ "ca": "Costa 1 franc suís premsar un cèntim.", "de": "Die Prägung einer Münze kostet 1 Schweizer Franken.", "cs": "Ražba mince stojí 1 Švýcarský frank.", - "es": "Cuesta 1 franco suizo prensar una moneda." + "es": "Cuesta 1 franco suizo prensar una moneda.", + "nl": "Het kost 1 Zwitserse frank om een munt te persen." }, "hideInAnswer": "_currency!~.*CHF.*" } @@ -403,7 +426,8 @@ "de": "Die Prägung einer Münze kostet {charge}.", "es": "Cuesta {charge} prensar una moneda.", "ca": "Costa {charge} premsar un cèntim.", - "cs": "Ražba mince stojí {charge}." + "cs": "Ražba mince stojí {charge}.", + "nl": "Het kost {charge} om een munt te persen." } }, "denominations-coins", diff --git a/assets/layers/etymology/etymology.json b/assets/layers/etymology/etymology.json index c17d7bd7b6..4fb559b6ae 100644 --- a/assets/layers/etymology/etymology.json +++ b/assets/layers/etymology/etymology.json @@ -120,7 +120,8 @@ "fr": "Quel est l'Item Wikidata auquel l'objet fait référence ?", "cs": "Po jaké položce Wikidat je tento objekt pojmenován?", "da": "Hvilket Wikidata-emne er dette objekt opkaldt efter?", - "es": "¿Cuál es el elemento de Wikidata en honor a el cual se nombra este objeto?" + "es": "¿Cuál es el elemento de Wikidata en honor a el cual se nombra este objeto?", + "uk": "На честь якого елемента Вікіданих названо цей об'єкт?" }, "freeform": { "key": "name:etymology:wikidata", @@ -341,7 +342,8 @@ "ca": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Afegeix una imatge de la placa amb el nom del carrer)}", "cs": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Add image of a street name sign)}", "da": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Tilføj foto af gadenavneskilt)}", - "es": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Agregar imagen de un letrero de nombre de calle)}" + "es": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Agregar imagen de un letrero de nombre de calle)}", + "uk": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Додати зображення таблички з назвою вулиці)}" } }, { @@ -360,7 +362,8 @@ "ca": "{multi_apply(_same_name_ids, name:etymology:wikidata;name:etimology, aplicació automàtica de dades a tots els segments amb el mateix nom, vertader)}", "cs": "{multi_apply(_same_name_ids, name:etymology:wikidata;name:etymology, Auto-applying data on all segments with the same name, true)}", "da": "{multi_apply(_same_name_ids, name:etymology:wikidata;name:etymology, Tilføjer automatisk til alle segmenter med samme navn, true)}", - "es": "{multi_apply(_same_name_ids, name:etymology:wikidata;name:etymology, Aplicando datos automáticamente en todos los segmentos con el mismo nombre, true)}" + "es": "{multi_apply(_same_name_ids, name:etymology:wikidata;name:etymology, Aplicando datos automáticamente en todos los segmentos con el mismo nombre, true)}", + "uk": "{multi_apply(_same_name_ids, name:etymology:wikidata;name:etymology, Автоматичне застосування даних до всіх сегментів з однаковою назвою, true)}" } }, { diff --git a/assets/layers/note/note.json b/assets/layers/note/note.json index b8262f8d44..9182920382 100644 --- a/assets/layers/note/note.json +++ b/assets/layers/note/note.json @@ -133,7 +133,8 @@ }, "special": { "type": "nearby_images", - "mode": "open" + "mode": "open", + "readonly": "yes" } } }, @@ -395,7 +396,8 @@ "cs": "Naposledy upravil přispěvatel {search}", "da": "Senest redigeret af bidragsyder {search}", "fr": "Dernière modification par {search}", - "hu": "Legutóbb {search} felhasználó szerkesztette" + "hu": "Legutóbb {search} felhasználó szerkesztette", + "uk": "Останнє редагування дописувачем {search}" } } ] @@ -414,7 +416,8 @@ "en": "Not edited as last by {search}", "de": "Nicht zuletzt bearbeitet von {search}", "hu": "Legutóbb nem {search} felhasználó szerkesztette", - "es": "No editado por última vez por {search}" + "es": "No editado por última vez por {search}", + "uk": "Не відредаговано як останнє {search}" } } ] @@ -480,7 +483,8 @@ "en": "Last edited before {search}", "de": "Zuletzt bearbeitet vor dem {search}", "hu": "Legutóbb {search} előtt szerkesztették", - "es": "Última edición antes de {search}" + "es": "Última edición antes de {search}", + "uk": "Останнє редагування зроблено до {search}" } } ] @@ -500,7 +504,8 @@ "en": "Last edited after {search}", "de": "Zuletzt bearbeitet nach dem {search}", "hu": "Legutóbb {search} után szerkesztették", - "es": "Última edición después de {search}" + "es": "Última edición después de {search}", + "uk": "Останнє редагування після {search}" } } ] diff --git a/assets/layers/playground_equipment/playground_equipment.json b/assets/layers/playground_equipment/playground_equipment.json index 98f1017c34..00af45c5a7 100644 --- a/assets/layers/playground_equipment/playground_equipment.json +++ b/assets/layers/playground_equipment/playground_equipment.json @@ -298,7 +298,8 @@ "then": { "en": "This is a climbing wall", "de": "Das ist eine Kletterwand", - "es": "Este es un muro de escalada" + "es": "Este es un muro de escalada", + "nl": "Dit is een klimmuur" }, "icon": { "path": "./assets/layers/playground_equipment/Playground_climbingwall.jpg", diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json index 3cb2003104..f2f1f6144f 100644 --- a/assets/layers/questions/questions.json +++ b/assets/layers/questions/questions.json @@ -2926,7 +2926,8 @@ "nl": "Deel deze locatie", "de": "Standort teilen", "es": "Compartir esta ubicación", - "cs": "Sdílet tuto lokalitu" + "cs": "Sdílet tuto lokalitu", + "uk": "Поділіться цією локацією" } } } @@ -2988,7 +2989,8 @@ "cs": "Naposledy upravil {_last_edit:timestamp} {_last_edit:contributor}", "da": "Senest redigeret {_last_edit:timestamp} af {_last_edit:contributor}", "hu": "Legutóbb {_last_edit:contributor} szerkesztette ekkor: {_last_edit:timestamp}", - "es": "Última edición el {_last_edit:timestamp} por {_last_edit:contributor}" + "es": "Última edición el {_last_edit:timestamp} por {_last_edit:contributor}", + "uk": "Востаннє редаговано {_last_edit:timestamp} користувачем {_last_edit:contributor}" }, "class": "subtle font-small" } diff --git a/assets/layers/souvenir_coin/souvenir_coin.json b/assets/layers/souvenir_coin/souvenir_coin.json index d89960efc1..209dfcb5eb 100644 --- a/assets/layers/souvenir_coin/souvenir_coin.json +++ b/assets/layers/souvenir_coin/souvenir_coin.json @@ -3,12 +3,14 @@ "name": { "en": "Souvenir Coin Machines", "de": "Souvenir-Münzautomaten", - "es": "Máquinas de Monedas de Recuerdo" + "es": "Máquinas de Monedas de Recuerdo", + "nl": "Souvenirmuntmachines" }, "description": { "en": "Layer showing machines selling souvenir coins", "de": "Ebene mit Automaten, die Souvenir-Münzen verkaufen", - "es": "Capa que muestra máquinas expendedoras de monedas de recuerdo" + "es": "Capa que muestra máquinas expendedoras de monedas de recuerdo", + "nl": "Laag die machines toont die souvenirmunten verkopen" }, "source": { "osmTags": { @@ -22,7 +24,8 @@ "render": { "en": "Souvenir Coin Machine", "de": "Souvenir-Münzautomat", - "es": "Máquina de Monedas de Recuerdo" + "es": "Máquina de Monedas de Recuerdo", + "nl": "Souvenirmuntmachine" } }, "pointRendering": [ @@ -59,12 +62,14 @@ "title": { "en": "a souvenir coin machine", "de": "ein Souvenir-Münzautomaten", - "es": "una máquina de monedas de recuerdo" + "es": "una máquina de monedas de recuerdo", + "nl": "een souvenirmuntmachine" }, "description": { "en": "Add a machine selling souvenir coins", "de": "Hinzufügen eines Automaten für Souvenirmünzen", - "es": "Añadir una máquina expendedora de monedas de recuerdo" + "es": "Añadir una máquina expendedora de monedas de recuerdo", + "nl": "Voeg een machine toe die souvenirmunten verkoopt" }, "tags": [ "amenity=vending_machine", @@ -82,7 +87,8 @@ "render": { "en": "This machine has {coin:design_count} designs available", "de": "Diese Maschine hat {coin:design_count} Designs verfügbar", - "es": "Esta máquina tiene {coin:design_count} diseños disponibles" + "es": "Esta máquina tiene {coin:design_count} diseños disponibles", + "nl": "Deze machine heeft {coin:design_count} ontwerpen beschikbaar" }, "mappings": [ { @@ -90,7 +96,8 @@ "then": { "en": "This machine has one design available", "de": "Diese Maschine hat ein Design zur Verfügung", - "es": "Esta máquina tiene un diseño disponible" + "es": "Esta máquina tiene un diseño disponible", + "nl": "Deze machine heeft één ontwerp beschikbaar" } }, { @@ -98,7 +105,8 @@ "then": { "en": "This machine has two designs available", "de": "Diese Maschine hat zwei Designs verfügbar", - "es": "Esta máquina tiene dos diseños disponibles" + "es": "Esta máquina tiene dos diseños disponibles", + "nl": "Deze machine heeft twee ontwerpen beschikbaar" } }, { @@ -106,7 +114,8 @@ "then": { "en": "This machine has three designs available", "de": "Diese Maschine hat drei Designs verfügbar", - "es": "Esta máquina tiene tres diseños disponibles" + "es": "Esta máquina tiene tres diseños disponibles", + "nl": "Deze machine heeft drie ontwerpen beschikbaar" } }, { @@ -114,7 +123,8 @@ "then": { "en": "This machine has four designs available", "de": "Diese Maschine hat vier Designs verfügbar", - "es": "Esta máquina tiene cuatro diseños disponibles" + "es": "Esta máquina tiene cuatro diseños disponibles", + "nl": "Deze machine heeft vier ontwerpen beschikbaar" } } ] @@ -126,20 +136,23 @@ "question": { "en": "How much does a souvenir coin cost?", "de": "Wie viel kostet eine Souvenirmünze?", - "es": "¿Cuánto cuesta una moneda de recuerdo?" + "es": "¿Cuánto cuesta una moneda de recuerdo?", + "nl": "Hoeveel kost een souvenirmunt?" }, "id": "charge", "render": { "en": "A souvenir coins costs {charge}", "de": "Eine Souvenirmünze kostet {charge}", - "es": "Una moneda de recuerdo cuesta {charge}" + "es": "Una moneda de recuerdo cuesta {charge}", + "nl": "Een souvenirmunt kost {charge}" }, "freeform": { "key": "charge", "placeholder": { "en": "Cost (e.g. 2 EUR)", "de": "Kosten (z.B. 2 EUR)", - "es": "Coste (ej. 2 EUR)" + "es": "Coste (ej. 2 EUR)", + "nl": "Kosten (bijv. 2 EUR)" } }, "mappings": [ @@ -148,7 +161,8 @@ "then": { "en": "A souvenir coin costs 2 euro", "de": "Eine Souvenirmünze kostet 2 Euro", - "es": "Una moneda de recuerdo cuesta 2 euros" + "es": "Una moneda de recuerdo cuesta 2 euros", + "nl": "Een souvenirmunt kost 2 euro" }, "hideInAnswer": "_currency!~.*EUR.*" } @@ -159,7 +173,8 @@ "question": { "en": "Is this machine located indoors?", "de": "Ist diese Maschine im Innenbereich?", - "es": "¿Está esta máquina ubicada en interiores?" + "es": "¿Está esta máquina ubicada en interiores?", + "nl": "Bevindt deze machine zich binnen?" }, "id": "indoor", "mappings": [ @@ -168,7 +183,8 @@ "then": { "en": "This machine is located indoors.", "de": "Diese Maschine befindet sich im Innenbereich.", - "es": "Esta máquina está ubicada en interiores." + "es": "Esta máquina está ubicada en interiores.", + "nl": "Deze machine bevindt zich binnen." } }, { @@ -176,7 +192,8 @@ "then": { "en": "This machine is located outdoors.", "de": "Diese Maschine befindet sich im Freien.", - "es": "Esta máquina está ubicada en exteriores." + "es": "Esta máquina está ubicada en exteriores.", + "nl": "Deze machine bevindt zich buiten." } } ] diff --git a/assets/layers/souvenir_note/souvenir_note.json b/assets/layers/souvenir_note/souvenir_note.json index c5e01395d3..f3d2cab0d4 100644 --- a/assets/layers/souvenir_note/souvenir_note.json +++ b/assets/layers/souvenir_note/souvenir_note.json @@ -3,12 +3,14 @@ "name": { "en": "Souvenir Banknote Machines", "de": "Souvenir Banknotenmaschinen", - "es": "Máquinas de Billetes de Recuerdo" + "es": "Máquinas de Billetes de Recuerdo", + "nl": "Souvenirbiljetmachines" }, "description": { "en": "Layer showing machines selling souvenir banknotes", "de": "Ebene zeigt Maschinen, die Souvenir-Banknoten verkaufen", - "es": "Capa que muestra máquinas expendedoras de billetes de recuerdo" + "es": "Capa que muestra máquinas expendedoras de billetes de recuerdo", + "nl": "Laag die machines toont die souvenirbiljetten verkopen" }, "source": { "osmTags": { @@ -22,7 +24,8 @@ "render": { "en": "Souvenir Banknote Machine", "de": "Souvenir-Banknotenautomat", - "es": "Máquina de Billetes de Recuerdo" + "es": "Máquina de Billetes de Recuerdo", + "nl": "Souvenirbiljetmachine" } }, "pointRendering": [ @@ -59,12 +62,14 @@ "title": { "en": "a souvenir banknote machine", "de": "eine Souvenir-Banknotenmaschine", - "es": "una máquina de billetes de recuerdo" + "es": "una máquina de billetes de recuerdo", + "nl": "een souvenirbiljetmachine" }, "description": { "en": "Add a machine selling souvenir banknotes", "de": "Hinzufügen eines Automaten, der Souvenir-Banknoten verkauft", - "es": "Añadir una máquina expendedora de billetes de recuerdo" + "es": "Añadir una máquina expendedora de billetes de recuerdo", + "nl": "Voeg een machine toe die souvenirbiljetten verkoopt" }, "tags": [ "amenity=vending_machine", @@ -80,7 +85,8 @@ "question": { "en": "How many designs are available?", "de": "Wie viele Designs sind verfügbar?", - "es": "¿Cuántos diseños están disponibles?" + "es": "¿Cuántos diseños están disponibles?", + "nl": "Hoeveel ontwerpen heeft deze machine beschikbaar?" }, "freeform": { "key": "note:design_count", @@ -90,13 +96,15 @@ "de": "Motivanzahl (z.B. 5)", "es": "Número de diseños (ej. 5)", "ca": "Nombre de dissenys (p. e. 5)", - "cs": "Počet vzorů (např. 5)" + "cs": "Počet vzorů (např. 5)", + "nl": "Aantal ontwerpen (bijv. 5)" } }, "render": { "en": "This machine has {note:design_count} designs available.", "de": "Diese Maschine verfügt über {note:design_count} Designs.", - "es": "Esta máquina tiene {note:design_count} diseños disponibles." + "es": "Esta máquina tiene {note:design_count} diseños disponibles.", + "nl": "Deze machine heeft {note:design_count} ontwerpen beschikbaar." }, "mappings": [ { @@ -104,7 +112,8 @@ "then": { "en": "This machine has one design available.", "de": "Diese Maschine hat ein Design zur Verfügung.", - "es": "Esta máquina tiene un diseño disponible." + "es": "Esta máquina tiene un diseño disponible.", + "nl": "Deze machine heeft één ontwerp beschikbaar." } }, { @@ -112,7 +121,8 @@ "then": { "en": "This machine has two designs available.", "de": "Diese Maschine hat zwei Designs verfügbar.", - "es": "Esta máquina tiene dos diseños disponibles." + "es": "Esta máquina tiene dos diseños disponibles.", + "nl": "Deze machine heeft twee ontwerpen beschikbaar." } }, { @@ -120,7 +130,8 @@ "then": { "en": "This machine has three designs available.", "de": "Diese Maschine hat drei Designs verfügbar.", - "es": "Esta máquina tiene tres diseños disponibles." + "es": "Esta máquina tiene tres diseños disponibles.", + "nl": "Deze machine heeft drie ontwerpen beschikbaar." } }, { @@ -128,7 +139,8 @@ "then": { "en": "This machine has four designs available.", "de": "Diese Maschine hat vier Designs verfügbar.", - "es": "Esta máquina tiene cuatro diseños disponibles." + "es": "Esta máquina tiene cuatro diseños disponibles.", + "nl": "Deze machine heeft vier ontwerpen beschikbaar." } } ] @@ -139,20 +151,23 @@ "question": { "en": "How much does a souvenir note cost?", "de": "Wie viel kostet eine Souvenirnote?", - "es": "¿Cuánto cuesta un billete de recuerdo?" + "es": "¿Cuánto cuesta un billete de recuerdo?", + "nl": "Hoeveel kost een souvenirbiljet?" }, "id": "charge", "render": { "en": "A souvenir note costs {charge}", "de": "Eine Souvenirnote kostet {charge}", - "es": "Un billete de recuerdo cuesta {charge}" + "es": "Un billete de recuerdo cuesta {charge}", + "nl": "Een souvenirbiljet kost {charge}" }, "freeform": { "key": "charge", "placeholder": { "en": "Cost (e.g. 2 EUR)", "de": "Kosten (z.B. 2 EUR)", - "es": "Coste (ej. 2 EUR)" + "es": "Coste (ej. 2 EUR)", + "nl": "Kosten (bijv. 2 EUR)" } }, "mappings": [ @@ -161,7 +176,8 @@ "then": { "en": "A souvenir note costs 2 euro", "de": "Eine Souvenirnote kostet 2 Euro", - "es": "Un billete de recuerdo cuesta 2 euros" + "es": "Un billete de recuerdo cuesta 2 euros", + "nl": "Een souvenirbiljet kost 2 euro" }, "hideInAnswer": "_currency!~.*EUR.*" }, @@ -170,7 +186,8 @@ "then": { "en": "A souvenir note costs 3 euro", "de": "Eine Souvenirnote kostet 3 Euro", - "es": "Un billete de recuerdo cuesta 3 euros" + "es": "Un billete de recuerdo cuesta 3 euros", + "nl": "Een souvenirbiljet kost 3 euro" }, "hideInAnswer": "_currency!~.*EUR.*" } @@ -181,7 +198,8 @@ "question": { "en": "Is this machine located indoors?", "de": "Ist diese Maschine im Innenbereich?", - "es": "¿Está esta máquina ubicada en interiores?" + "es": "¿Está esta máquina ubicada en interiores?", + "nl": "Bevindt deze machine zich binnen?" }, "id": "indoor", "mappings": [ @@ -190,7 +208,8 @@ "then": { "en": "This machine is located indoors.", "de": "Diese Maschine befindet sich im Innenbereich.", - "es": "Esta máquina está ubicada en interiores." + "es": "Esta máquina está ubicada en interiores.", + "nl": "Deze machine bevindt zich binnen." } }, { @@ -198,7 +217,8 @@ "then": { "en": "This machine is located outdoors.", "de": "Diese Maschine befindet sich im Freien.", - "es": "Esta máquina está ubicada en exteriores." + "es": "Esta máquina está ubicada en exteriores.", + "nl": "Deze machine bevindt zich buiten." } } ] diff --git a/assets/layers/sports_centre/sports_centre.json b/assets/layers/sports_centre/sports_centre.json index 0dee940699..af37db088d 100644 --- a/assets/layers/sports_centre/sports_centre.json +++ b/assets/layers/sports_centre/sports_centre.json @@ -251,13 +251,15 @@ { "if": "sport=climbing", "then": { - "en": "Rock climbing" + "en": "Climbing", + "nl": "Klimmen" } }, { "if": "sport=climbing_adventure", "then": { - "en": "Climbing Adventure" + "en": "Climbing Adventure", + "nl": "Hoogteparcours" } }, { diff --git a/assets/layers/usersettings/usersettings.json b/assets/layers/usersettings/usersettings.json index 4e03b0cd9c..660cda4e2c 100644 --- a/assets/layers/usersettings/usersettings.json +++ b/assets/layers/usersettings/usersettings.json @@ -935,7 +935,7 @@ "es": "Al realizar cambios, ¿se debe dar una indicación aproximada de qué tan lejos estabas del objeto?" }, "questionHint": { - "en": "If you make a change to one or more objects and you enabled your location, a rough indication of where you made will be saved: it is indicated if you were closer then 25m, 500m, 5km or further away then 5km. This helps mappers understand your context when making changes, but gives an indication of where you were at this time. ", + "en": "If you make a change to one or more objects and you enabled your location, a rough indication of where you made will be saved: it is indicated if you were closer then 25m, 500m, 5km or further away than 5km. This helps mappers understand your context when making changes, but gives an indication of where you were at this time.", "de": "Wenn du eine Änderung an einem oder mehreren Objekten vornimmst und deinen Standort aktivierst, wird eine ungefähre Angabe darüber gespeichert, wo du dich befunden hast: Es wird angezeigt, ob du näher als 25m, 500m, 5km oder weiter als 5km entfernt warst. Das hilft den Kartierern, deinen Kontext zu verstehen, wenn du Änderungen vornimmst, gibt aber auch einen Hinweis darauf, wo du zu diesem Zeitpunkt warst. ", "nl": "Wanneer je een wijziging maakt aan één of meer interessepunten en als MapComplete toont waar je bent, dan kan opgeslaan worden hoever je je ongeveer van deze objecten bevindt. Er wordt aangeduid of je dichter dan 25m, 500m, 5km of verder dan 5km was. Dit helpt om andere bijdragers te begrijpen hoe je je bijdragen deed, maar geeft natuurlijk ook aan waar je op dat moment was. ", "hu": "Ha módosítasz egy objektumot, és engedélyezed a helymeghatározást, akkor a rendszer elmenti a körülbelüli helyedet: jelzi, hogy 25 méteren, 500 méteren vagy 5 kilométeren belül vagy 5 km-nél távolabb voltál. A többi térképész így jobban látja, milyen körülmények között szerkesztetted a térképet, de egyúttal azt is jelzi, hogy hol voltál ebben az időpontban. ", @@ -947,7 +947,7 @@ "if": "mapcomplete-more_privacy=yes", "icon": "./assets/svg/eye.svg", "then": { - "en": "When making changes to OpenStreetMap, do not indicate how far away you were from the changed objects.", + "en": "When making changes to OpenStreetMap, do not indicate how far away I was from the changed objects.", "de": "Wenn du Änderungen an OpenStreetMap vornimmst, gibst du nicht an, wie weit du von den geänderten Objekten entfernt warst.", "nl": "Geef niet aan hoever je je van de gewijzigde objecten bevindt wanneer je wijzigingen maakt met MapComplete.", "cs": "Při provádění změn v OpenStreetMap neuvádějte, jak daleko jste byli od změněných objektů.", @@ -1043,7 +1043,7 @@ "if": "mapcomplete-preference-search-history=sync", "alsoShowIf": "mapcomplete-preference-search-history=", "then": { - "en": "Save the locations you search for and inspect and sync them via openstreetmap.org. OpenStreetMap and all apps you use can see this history", + "en": "Save the locations I search for and inspect and sync them via openstreetmap.org. OpenStreetMap and all apps that I give access to my OSM account can see this history", "de": "Gesuchte und überprüfte Orte speichern und über openstreetmap.org synchronisieren. OpenStreetMap und alle verwendeten Programme können diesen Verlauf sehen", "hu": "Az openstreetmap.org-on legyenek elmentve az általam megkeresett és szerkesztett helyek. Ezeket az előzményeket az OpenStreetMap és az összes hozzá kapcsolódó alkalmazás láthatja", "uk": "Зберігайте місця, які ви шукаєте, переглядайте та синхронізуйте їх через openstreetmap.org. OpenStreetMap та всі програми, якими ви користуєтесь, можуть бачити цю історію", @@ -1063,7 +1063,7 @@ { "if": "mapcomplete-preference-search-history=no", "then": { - "en": "Don't save the locations you search for and inspect ", + "en": "Don't save the locations I search for and inspect", "de": "Gesuchte und überprüfte Orte nicht auf meinem Gerät speichern ", "hu": "Ne legyenek elmentve az általam megkeresett és szerkesztett helyek ", "uk": "Не зберігайте місця, які ви шукаєте та перевіряєте ", diff --git a/assets/themes/cyclofix/cyclofix.json b/assets/themes/cyclofix/cyclofix.json index 07b928d263..13aef56e79 100644 --- a/assets/themes/cyclofix/cyclofix.json +++ b/assets/themes/cyclofix/cyclofix.json @@ -84,7 +84,8 @@ "minzoom": 17, "=filter": { "sameAs": "bike_shop" - } + }, + "isCounted": false } }, { @@ -222,4 +223,4 @@ "bicycle_counter" ], "widenFactor": 2 -} \ No newline at end of file +} diff --git a/assets/themes/elongated_coin/elongated_coin.json b/assets/themes/elongated_coin/elongated_coin.json index d18467cc40..dc68eed365 100644 --- a/assets/themes/elongated_coin/elongated_coin.json +++ b/assets/themes/elongated_coin/elongated_coin.json @@ -19,7 +19,7 @@ "cs": "Najděte automaty na ražbu suvenýrových mincí.", "pl": "Znajdź prasy do groszy, aby stworzyć własne wydłużone monety.", "uk": "Знайдіть преси для монет, щоб створити власні витягнуті монети.", - "nl": "Zoek muntpersen om uitgerokken munten te maken." + "nl": "Zoek muntpersen om uitgetrokken munten te maken." }, "icon": "./assets/themes/elongated_coin/penny.svg", "startZoom": 11, diff --git a/assets/themes/velopark/velopark.json b/assets/themes/velopark/velopark.json index 428ea0b51a..9466b0f791 100644 --- a/assets/themes/velopark/velopark.json +++ b/assets/themes/velopark/velopark.json @@ -17,7 +17,7 @@ "nl": "Een hulpmiddel om data van velopark.be in OpenStreetMap in te laden" }, "descriptionTail": { - "*": "

Maintainer tools

" + "*": "

Maintainer tools

" }, "icon": "./assets/themes/velopark/velopark.svg", "startZoom": 18, @@ -31,7 +31,7 @@ "description": "Maproulette challenge containing velopark data", "source": { "osmTags": "mr_taskId~*", - "geoJson": "https://maproulette.org/api/v2/challenge/view/43282", + "geoJson": "https://maproulette.org/api/v2/challenge/view/50552", "idKey": "mr_taskId" }, "title": { @@ -161,6 +161,7 @@ "en": "Create a new bicycle parking in OSM. This parking will have the link, you'll be able to copy the attributes in the next step", "nl": "Maak een nieuwe parking aan in OSM. Deze parking zal gelinkt zijn met Velopark en je kan in de volgende stap de attributen overzetten" }, + "to_point": "yes", "maproulette_id": "mr_taskId" } } @@ -238,7 +239,12 @@ } } ], - "lineRendering": [], + "lineRendering": [ + { + "color": "#bb9922", + "lineWidth": 2 + } + ], "filter": [ { "id": "created-only", diff --git a/langs/cs.json b/langs/cs.json index fb06126c9a..9a2bd78072 100644 --- a/langs/cs.json +++ b/langs/cs.json @@ -538,7 +538,7 @@ "translationMode": "Zapnutí nebo vypnutí režimu překladu" }, "image": { - "addPicture": "Přidat fotku", + "addPicture": "Udělat fotku", "doDelete": "Odebrat obrázek", "isDeleted": "Smazáno", "nearby": { @@ -566,6 +566,7 @@ "pleaseLogin": "Pro přidání fotky se prosím přihlaste", "processing": "Server zpracovává váš obrázek", "respectPrivacy": "Nenahrávejte z Map Google, Google Streetview ani z jiných zdrojů chráněných autorskými právy.", + "selectFile": "Vybrat obrázek ze svého zařízení", "toBig": "Váš obrázek je příliš velký, protože má velikost {actual_size}. Používejte prosím obrázky o maximální velikosti {max_size}", "unlink": { "button": "Odpojit obrázek", diff --git a/langs/de.json b/langs/de.json index 1a3ab20190..c4fdf74926 100644 --- a/langs/de.json +++ b/langs/de.json @@ -717,7 +717,7 @@ "attribution": "Von Mangrove Reviews", "averageRating": "Mittlere Bewertung von {n} Sternen", "i_am_affiliated": "Ich bin mit diesem Objekt vertraut", - "i_am_affiliated_explanation": "Prüfung, ob Sie der Eigentümer, Ersteller, Angestellter, … sind", + "i_am_affiliated_explanation": "Auswählen, wenn Sie Eigentümer, Ersteller, Angestellter, … sind.", "no_reviews_yet": "Bisher gibt es noch keine Bewertungen. Sei der Erste!", "non_place_review": "Eine Bewertung geht nicht um einen Ort und wird hier nicht angezeigt.", "non_place_reviews": "{n} Bewertungen sind nicht über einen Ort und werden hier nicht angezeigt.", diff --git a/langs/en.json b/langs/en.json index c23ffa2060..73114b29b0 100644 --- a/langs/en.json +++ b/langs/en.json @@ -94,7 +94,7 @@ "intro": "The user is greeted by a map with features. Upon selecting one, the information about that feature is shown.", "title": "What does the interface look like?" }, - "examples": "There are many thematic maps available of which a few are shown here.\n\nThere are many more thematic maps online: about healthcare, indoor navigation, wheelchair accessibility, waste facilities, public bookcases, pedestrian crossings with a rainbow-painting,… Discover them all on mapcomplete.org", + "examples": "There are many thematic maps available of which a few are shown here.\n\nThere are many more thematic maps online: about healthcare, indoor navigation, wheelchair accessibility, waste facilities, public bookcases, pedestrian crossings with a rainbow-painting, … Discover them all on mapcomplete.org", "fakeui": { "add_images": "Add images with a few clicks", "attributes": "Shows attributes in a friendly way", @@ -106,7 +106,7 @@ "frontParagraph": "MapComplete is an easy to use web application to collect geodata in OpenStreetMap, enabling collecting and managing relevant data in an open, crowdsourced and reusable way.\n\nNew categories and attributes can be added upon request.", "lines_too": "Lines and polygons are shown too. Attributes and images can be added and updated on those objects as well.", "mapcomplete": { - "customize": "MapComplete can be tailored to your needs, with new map layers, new functionalities or styled with your organisations colours and font.\nWe also have experience with starting campaigns to crowdsource geodata.\nContact pietervdvn@posteo.net for a quote.", + "customize": "MapComplete can be tailored to your needs, with new map layers, new functionalities or styled with your organisation's colours and font.\nWe also have experience with starting campaigns to crowdsource geodata.\nContact pietervdvn@posteo.net for a quote.", "intro": "MapComplete is a website which has {mapCount} interactive maps. Every single map allows to add or update information. It has many features:", "li0": "Show where POI are", "li1": "Add new points and update info on existing ones", @@ -159,7 +159,7 @@ "stillLoading": "The data is still loading. Please wait a bit before you add a new feature.", "title": "Add a new feature", "wrongType": "This feature is not a node or a way and can not be imported", - "zoomInFurther": "Zoom in further to add a feature", + "zoomInFurther": "You need to first zoom in further if you want to add a feature", "zoomInMore": "Zoom in more to import this feature" }, "apply_button": { @@ -317,9 +317,9 @@ "closed_until": "Opens at {date}", "error": "Could not parse the opening hours", "error_loading": "Error: could not visualize these opening hours.", - "friday": "On friday {ranges}", + "friday": "On Friday {ranges}", "loadingCountry": "Determining country…", - "monday": "On monday {ranges}", + "monday": "On Monday {ranges}", "not_all_rules_parsed": "These opening hours are complicated. The following rules are ignored in the input element:", "on_weekdays": "Opened on weekdays {ranges}", "openTill": "till", @@ -332,12 +332,12 @@ "ph_open_as_usual": "open, as usual", "ranges": "from {starttime} till {endtime}", "rangescombined": "{range0} and {range1}", - "saturday": "On saturday {ranges}", - "sunday": "On sunday {ranges}", - "thursday": "On thursday {ranges}", - "tuesday": "On tuesday {ranges}", + "saturday": "On Saturday {ranges}", + "sunday": "On Sunday {ranges}", + "thursday": "On Thursday {ranges}", + "tuesday": "On Tuesday {ranges}", "unknown": "The opening hours are unknown", - "wednesday": "On wednesday {ranges}" + "wednesday": "On Wednesday {ranges}" }, "pdf": { "attr": "Map data © OpenStreetMap Contributors, reusable under ODbL", @@ -379,11 +379,11 @@ "deleteThemeHistory": "Delete earlier visited themes", "editSearchSyncSettings": "Edit sync settings", "editThemeSync": "Edit sync settings", - "error": "Something went wrong…", + "error": "Something went wrong.", "instructions": "Use the search bar above to search for locations, filters or other thematic maps", "locations": "Locations", "nMoreFilters": "{n} more", - "nothing": "Nothing found…", + "nothing": "Nothing found.", "nothingFor": "No results found for {term}", "otherMaps": "Other maps", "pickFilter": "Pick a filter", @@ -392,7 +392,7 @@ "search": "Search a location", "searching": "Searching…" }, - "searchAnswer": "Search an option…", + "searchAnswer": "Search an option", "seeIndex": "See the overview with all thematic maps", "share": "Share", "sharescreen": { @@ -585,16 +585,16 @@ "failReasonsAdvanced": "Alternatively, make sure your browser and extensions do not block third-party API's.", "multiple": { "done": "{count} images are successfully uploaded. Thank you!", - "partiallyDone": "{count} images are getting uploaded, {done} images are done…", + "partiallyDone": "{count} images are being uploaded, {done} images are done…", "someFailed": "Sorry, we could not upload {count} images", - "uploading": "{count} images are getting uploaded…" + "uploading": "{count} images are being uploaded…" }, "noBlur": "Images will not be blurred. Do not photograph people", "one": { "done": "Your image was successfully uploaded. Thank you!", "failed": "Sorry, we could not upload your image", - "retrying": "Your image is getting uploaded again…", - "uploading": "Your image is getting uploaded…" + "retrying": "Trying again to upload your image…", + "uploading": "Your image is being uploaded…" } }, "uploadFailed": "Could not upload your picture. Are you connected to the Internet, and allow third party API's? The Brave browser or the uMatrix plugin might block them." diff --git a/langs/fr.json b/langs/fr.json index 893bcf83fb..c974ff6a70 100644 --- a/langs/fr.json +++ b/langs/fr.json @@ -95,7 +95,7 @@ "lines_too": "Les lignes et les polygones sont également affichés. Des attributs et des images peuvent également être ajoutés et mis à jour sur ces objets.", "mapcomplete": { "customize": "MapComplete peut être adapté à vos besoins, avec de nouvelles couches cartographiques, de nouvelles fonctionnalités ou en utilisant les couleurs et la police de votre organisation.\nNous avons également de l'expérience dans le lancement de campagnes de crowdsourcing de géodonnées.\nContactez pietervdvn@posteo.net pour un devis.", - "intro": "MapComplete est un site qui a {mapCount} carte intéractives. Chaque carte permet d'ajouter et mettre à jour des informations. IL y a de nombreuses fonctionnalités :", + "intro": "MapComplete est un site qui a {mapCount} carte intéractives. Chaque carte permet d'ajouter et mettre à jour des informations. Il y a de nombreuses fonctionnalités :", "li0": "Montre où se trouvent les points d'intérêt (POI)", "li1": "Ajouter de nouveaux points et mettre à jour les infos de ceux existant", "li2": "Ajouter facilement des informations de contact et des heures d'ouverture", diff --git a/langs/hu.json b/langs/hu.json index 2e2cbc98a1..e7d2d5d160 100644 --- a/langs/hu.json +++ b/langs/hu.json @@ -159,7 +159,7 @@ "stillLoading": "Az adatok betöltése folyamatban van. Kérjük, várj egy kicsit mielőtt felviszel egy új objektumot.", "title": "Új objektum felvétele", "wrongType": "Ez az elem nem pont vagy vonal, ezért nem importálható", - "zoomInFurther": "Objektum felvételéhez közelíts jobban", + "zoomInFurther": "Objektum felvételéhez tovább kell közelítened a térképet", "zoomInMore": "Nagyíts tovább az elem importálásához" }, "apply_button": { @@ -379,11 +379,11 @@ "deleteThemeHistory": "Korábban megtekintett tematikus térképek törlése", "editSearchSyncSettings": "Szinkronizálási beállítások törlése", "editThemeSync": "Szinkronizálási beállítások szerkesztése", - "error": "Hiba történt…", + "error": "Hiba történt.", "instructions": "Helyek, szűrők vagy más tematikus térképek kereséséhez használja a fenti keresősávot", "locations": "Helyek", "nMoreFilters": "{n} további", - "nothing": "Nincs találat…", + "nothing": "Nincs találat.", "nothingFor": "Nem található semmi erre a kifejezésre: {term}", "otherMaps": "Más térképek", "pickFilter": "Szűrő bekapcsolása", @@ -392,7 +392,7 @@ "search": "Helyszín keresése", "searching": "Keresés…" }, - "searchAnswer": "Beállítás keresése…", + "searchAnswer": "Beállítás keresése", "seeIndex": "Az összes tematikus térkép áttekintése", "share": "Megosztás", "sharescreen": { @@ -593,8 +593,8 @@ "one": { "done": "Kép sikeresen feltöltve. Köszönjük!", "failed": "Sajnos nem sikerült feltöltenünk a képed", - "retrying": "A kép feltöltése újból folyamatban van…", - "uploading": "Kép feltöltése…" + "retrying": "Kép feltöltésének újbóli megpróbálása…", + "uploading": "Kép feltöltése folyamatban…" } }, "uploadFailed": "Nem sikerült feltölteni a képet. Van-e internetkapcsolatod, és engedélyezted-e a harmadik féltől származó API-kat? A Brave böngésző vagy a uMatrix bővítmény blokkolhatja őket." @@ -615,6 +615,9 @@ "logIn": "A korábban megnézett tematikus térképek megtekintéséhez be kell jelentkezned", "title": "MapComplete" }, + "inspector": { + "menu": "Közreműködő megvizsgálása" + }, "move": { "cancel": "Válassz másik okot", "cannotBeMoved": "Ez az objektum nem mozdítható el.", diff --git a/langs/layers/cs.json b/langs/layers/cs.json index 016cc47cf9..1b916cd7bf 100644 --- a/langs/layers/cs.json +++ b/langs/layers/cs.json @@ -2059,7 +2059,7 @@ } }, "brothel": { - "description": "Zařízení zaměřené speciálně na prostituci. ", + "description": "Zařízení zaměřené speciálně na prostituci.", "name": "Nevěstince", "presets": { "0": { @@ -2317,18 +2317,254 @@ "options": { "0": { "question": "Všechny konektory" + }, + "1": { + "question": "Má konektor
nástěnné zástrčky Schuko bez zemnicího kolíku (CEE7/4 typ F)
" + }, + "10": { + "question": "Má konektor
Typ 2 s kabelem (mennekes)
" + }, + "11": { + "question": "Má konektor
Tesla Supercharger CCS (značkový typ2_css)
" + }, + "12": { + "question": "Má konektor
Tesla Supercharger (destinace)
" } } } }, + "name": "Nabíjecí stanice", + "presets": { + "0": { + "title": "nabíjecí stanice pro elektrokola" + }, + "1": { + "title": "nabíjecí stanice pro auta" + } + }, "tagRenderings": { + "Auth phone": { + "question": "Jaké je telefonní číslo pro autentizační hovor nebo SMS?" + }, + "Authentication": { + "mappings": { + "0": { + "then": "Autentizace členskou kartou" + }, + "1": { + "then": "Autentizace pomocí aplikace" + }, + "2": { + "then": "K dispozici je autentizace pomocí telefonního hovoru" + }, + "3": { + "then": "K dispozici je autentizace pomocí SMS" + }, + "4": { + "then": "K dispozici je autentizace přes NFC" + }, + "5": { + "then": "K dispozici je autentizace prostřednictvím Money Card" + }, + "6": { + "then": "K dispozici je autentizace prostřednictvím debetní karty" + }, + "7": { + "then": "Nabíjení je zde (také) možné bez autentizace" + } + }, + "question": "Jaký druh autentizace je na nabíjecí stanici k dispozici?" + }, + "Available_charging_stations (generated)": { + "mappings": { + "0": { + "then": "Schuko zásuvka bez zemnícího kolíku (CEE7/4 typ F)" + }, + "1": { + "then": "Schuko zásuvka bez zemnícího kolíku (CEE7/4 typ F)" + }, + "10": { + "then": "CCS typu 1 (neboli kombinace typu 1)" + }, + "11": { + "then": "CCS typu 1 (neboli kombinace typu 1)" + }, + "12": { + "then": "Tesla Supercharger" + }, + "13": { + "then": "Tesla Supercharger" + }, + "14": { + "then": "Typ 2 (mennekes)" + }, + "15": { + "then": "Typ 2 (mennekes)" + }, + "16": { + "then": "Typ 2 CCS (mennekes)" + }, + "17": { + "then": "Typ 2 CCS (mennekes)" + }, + "18": { + "then": "Typ 2 s kabelem (mennekes)" + }, + "19": { + "then": "Typ 2 s kabelem (mennekes)" + }, + "2": { + "then": "Evropská zásuvka se zemnícím kolíkem (CEE7/4 typ E)" + }, + "20": { + "then": "Tesla Supercharger CCS (značkový typ2_css)" + }, + "21": { + "then": "Tesla Supercharger CCS (značkový typ2_css)" + }, + "22": { + "then": "Tesla Supercharger (cíl)" + }, + "23": { + "then": "Tesla Supercharger (cíl)" + }, + "32": { + "then": "BS1363 (Typ G)" + }, + "33": { + "then": "BS1363 (Typ G)" + }, + "34": { + "then": "NEMA 5-15 (Typ B)" + }, + "35": { + "then": "NEMA 5-15 (Typ B)" + }, + "36": { + "then": "SEV 1011 T23 (Typ J)" + }, + "38": { + "then": "AS3112 (Typ I)" + }, + "39": { + "then": "AS3112 (Typ I)" + }, + "4": { + "then": "Chademo" + }, + "40": { + "then": "NEMA 5-20 (Typ B)" + }, + "41": { + "then": "NEMA 5-20 (Typ B)" + }, + "5": { + "then": "Chademo" + }, + "6": { + "then": "Typ 1 s kabelem (J1772)" + }, + "7": { + "then": "Typ 1 s kabelem (J1772)" + }, + "8": { + "then": "Typ 1 bez kabelu (J1772)" + }, + "9": { + "then": "Typ 1 bez kabelu (J1772)" + } + }, + "question": "Jaké nabíjecí přípojky jsou zde k dispozici?" + }, "Network": { "mappings": { + "0": { + "then": "Není součástí větší sítě, např. protože nabíjecí stanici spravuje místní firma" + }, "1": { "then": "Není součástí větší sítě" } }, - "question": "Je tato nabíjecí stanice součástí sítě?" + "question": "Je tato nabíjecí stanice součástí sítě?", + "render": "Část sítě {network}" + }, + "OH": { + "override": { + "question": "Kdy je tato nabíjecí stanice otevřena?" + } + }, + "Operational status": { + "mappings": { + "0": { + "then": "Tato nabíjecí stanice funguje" + }, + "1": { + "then": "Tato nabíjecí stanice je rozbitá" + }, + "2": { + "then": "Plánuje se zde nabíjecí stanice" + }, + "3": { + "then": "Zde je budována dobíjecí stanice" + }, + "4": { + "then": "Tato nabíjecí stanice byla trvale deaktivována a již se nepoužívá, ale je stále viditelná" + } + }, + "question": "Používá se tento nabíjecí bod?" + }, + "Operator": { + "mappings": { + "0": { + "then": "Síť je ve skutečnosti {operator}" + } + }, + "question": "Kdo je provozovatelem této nabíjecí stanice?", + "render": "Tuto nabíjecí stanici provozuje {operator}" + }, + "Parking:fee": { + "mappings": { + "0": { + "then": "Žádné další poplatky za parkování během nabíjení" + }, + "1": { + "then": "Při nabíjení je třeba uhradit další poplatek za parkování" + } + }, + "question": "Musí se při nabíjení platit parkovné?" + }, + "Type": { + "mappings": { + "0": { + "then": "Jízdní kola lze nabíjet zde" + }, + "1": { + "then": "Auta lze nabíjet zde" + }, + "2": { + "then": "Skútry lze nabíjet zde" + }, + "3": { + "then": "Těžká nákladní vozidla (například nákladní automobily) lze nabíjet zde" + }, + "4": { + "then": "Autobusy lze nabíjet zde" + } + }, + "question": "Která vozidla zde smí nabíjet?" + }, + "access": { + "mappings": { + "0": { + "then": "Tuto nabíjecí stanici může používat kdokoli (může být vyžadována platba)" + }, + "1": { + "then": "Tuto nabíjecí stanici může používat kdokoli (může být vyžadována platba)" + }, + "2": { + "then": "Tuto nabíjecí stanici mohou používat pouze zákazníci místa, kam tato stanice patří
Např. nabíjecí stanice provozovaná hotelem, kterou mohou používat pouze jeho hosté" + } + } }, "rewritten-questions": { "renderings": { diff --git a/langs/layers/de.json b/langs/layers/de.json index 31196d58af..445af4f996 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -305,7 +305,7 @@ "then": "Es handelt sich um eine Seilbahn, bei der die Kabinen in ständigen Kreisen fahren" }, "10": { - "then": "Eine Seilrutsche. (Eine Touristenattraktion, bei der abenteuerlustige Menschen mit hoher Geschwindigkeit hinunterfahren) " + "then": "Eine Seilrutsche. (Eine Touristenattraktion, bei der abenteuerlustige Menschen mit hoher Geschwindigkeit hinunterfahren)" }, "2": { "then": "Ein offener Sessellift mit Sitzgelegenheiten und Zugang zur Außenluft." @@ -389,7 +389,7 @@ } }, "animal_shelter": { - "description": "Ein Tierheim ist eine Einrichtung, in die notleidende Tiere gebracht werden und wo das Personal (ob freiwillig oder nicht) sie füttert und pflegt, sie rehabilitiert und bei Bedarf heilt. Diese Definition umfasst Zwinger für ausgesetzte Hunde, Katzenheime für ausgesetzte Katzen, Unterkünfte für andere ausgesetzte Haustiere und Wildtier-Auffangstationen. ", + "description": "Ein Tierheim ist eine Einrichtung, in die notleidende Tiere gebracht werden und wo das Personal (ob freiwillig oder nicht) sie füttert und pflegt, sie rehabilitiert und bei Bedarf heilt. Diese Definition umfasst Zwinger für ausgesetzte Hunde, Katzenheime für ausgesetzte Katzen, Unterkünfte für andere ausgesetzte Haustiere und Wildtier-Auffangstationen.", "name": "Tierheime", "presets": { "0": { @@ -2059,7 +2059,7 @@ } }, "brothel": { - "description": "Eine Einrichtung, die speziell der Prostitution gewidmet ist. ", + "description": "Eine Einrichtung, die speziell der Prostitution gewidmet ist.", "name": "Bordelle", "presets": { "0": { @@ -2816,7 +2816,7 @@ } }, "cinema": { - "description": " Ein Ort, an dem Filme gezeigt werden, die der Öffentlichkeit gegen Gebühr zugänglich sind", + "description": "Ein Ort, an dem Filme gezeigt werden, die der Öffentlichkeit gegen Gebühr zugänglich sind.", "name": "Kino", "tagRenderings": { "cinema_type": { diff --git a/langs/layers/en.json b/langs/layers/en.json index 601648178a..48c90756ee 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -263,7 +263,7 @@ } }, "aerialway": { - "description": "Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines. ", + "description": "Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines.", "name": "Aerialways", "pointRendering": { "1": { @@ -305,7 +305,7 @@ "then": "This is a gondola where the cars go around in continuous circles" }, "10": { - "then": "A zip line. (A touristical attraction where adventurous people go down at high speeds) " + "then": "A zip line. (A touristic attraction where adventurous people go down at high speeds)" }, "2": { "then": "An open chairlift with seats to sit on and open to the outside air." @@ -326,7 +326,7 @@ "then": "A drag lift with a platter to drag a single passenger at a time" }, "8": { - "then": "A tow line which which drags skieers" + "then": "A tow line which skiers hold on to or attach themselves onto" }, "9": { "then": "A magic carpet (a conveyor belt on the ground)" @@ -389,7 +389,7 @@ } }, "animal_shelter": { - "description": "An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres. ", + "description": "An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres.", "name": "Animal shelters", "presets": { "0": { @@ -598,7 +598,7 @@ } }, "assisted_repair": { - "description": "A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles.", + "description": "A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles.", "name": "Repair cafés and assisted repair workshops", "presets": { "0": { @@ -906,53 +906,53 @@ "access": { "mappings": { "0": { - "then": "Public" + "then": "This barbecue can be used by anyone" }, "1": { - "then": "No access" + "then": "This barbecue can't be used by anyone" }, "2": { - "then": "Private" + "then": "This barbecue is private" }, "3": { - "then": "Access until revoked" + "then": "This barbecue can be used by anyone, but the owner can revoke access at any time" }, "4": { - "then": "Access only for customers" + "then": "This barbecue can only be used by customers" }, "5": { - "then": "Access only for authorized persons" + "then": "This barbecue can only be used by authorized persons" } }, - "question": "What is the permitted access?" + "question": "Who is allowed to use this barbecue?" }, "covered": { "mappings": { "0": { - "then": "The grill is not covered" + "then": "This barbecue is not covered" }, "1": { - "then": "The grill is covered" + "then": "This barbecue is covered" } }, - "question": "Is the grill covered?" + "question": "Is this barbecue covered?" }, "fuel": { "mappings": { "0": { - "then": "Wood" + "then": "This barbecue uses wood as fuel" }, "1": { - "then": "Charcoal" + "then": "This barbecue uses charcoal as fuel" }, "2": { - "then": "Electric" + "then": "This barbecue is powered by electricity" }, "3": { - "then": "Gas" + "then": "This barbecue uses gas as fuel" } }, - "question": "How ist the grill fueled?" + "question": "How is this barbecue fuelled?" } }, "title": { @@ -2083,7 +2083,7 @@ } }, "brothel": { - "description": "An establishment specifically dedicated to prostitution. ", + "description": "An establishment specifically dedicated to prostitution.", "name": "Brothels", "presets": { "0": { @@ -2840,7 +2840,7 @@ } }, "cinema": { - "description": " A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US", + "description": "A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US.", "name": "Cinema", "tagRenderings": { "cinema_type": { @@ -2897,7 +2897,7 @@ }, "max_bolts": { "question": "How many bolts do routes in {title()} have at most?", - "render": "The sport climbing routes here have at most {climbing:bolts:max} bolts.
This is without relays and indicates how much quickdraws a climber needs
" + "render": "The sport climbing routes here have at most {climbing:bolts:max} bolts.
This is without belay stations and indicates how much quickdraws a climber needs.
" }, "max_difficulty": { "question": "What is the highest grade route here, according to the french classification system?", @@ -3075,6 +3075,40 @@ }, "question": "Is there a speed climbing wall?" }, + "auto_belay_lead": { + "mappings": { + "0": { + "then": "There are no auto belays for lead climbing" + }, + "1": { + "then": "There is a number of auto belays for lead climbing" + }, + "2": { + "then": "There is an auto belay for every lead climbing route" + } + }, + "question": "Are there auto belays for lead climbing here?", + "render": "There are {climbing:autobelay:sport} auto belays for lead climbing" + }, + "auto_belay_toprope": { + "mappings": { + "0": { + "then": "There are no auto belays for top roping" + }, + "1": { + "then": "There are a number of auto belays for top roping" + }, + "2": { + "then": "There is an auto belay for every top rope route but manual belaying is also possible" + }, + "3": { + "then": "Top rope routes can only be climbed on auto belay" + } + }, + "question": "Are there auto belays for top roping here?", + "questionHint": "Excluding auto belays that are only for speed climbing", + "render": "There are {climbing:autobelay:toprope} auto belay devices for top roping" + }, "belay_device_rental": { "mappings": { "0": { @@ -3093,7 +3127,7 @@ "then": "A belay device can not be rented here" } }, - "question": "Can one rent a belay device here?" + "question": "Can one rent a belay device here to use in the gym?" }, "harness_rental": { "mappings": { @@ -3110,7 +3144,7 @@ "then": "A climbing harness can not be rented here" } }, - "question": "Can one rent a climbing harness here?" + "question": "Can one rent a climbing harness here to use in the gym?" }, "name": { "question": "What is the name of this climbing gym?" @@ -3130,7 +3164,7 @@ "then": "A climbing rope can not be rented here" } }, - "question": "Can one rent a climbing rope here?" + "question": "Can one rent a climbing rope here to use in the gym?" }, "shoe_rental": { "mappings": { @@ -3147,7 +3181,7 @@ "then": "Climbing shoes can not be rented here" } }, - "question": "Can one rent climbing shoes here?" + "question": "Can one rent climbing shoes here to use in the gym?" } }, "title": { @@ -3222,7 +3256,7 @@ } }, "question": "How many bolts does this route have before reaching the anchor?", - "render": "This route has {climbing:bolts} bolts
This is without relays and indicates how much quickdraws a climber needs
" + "render": "This route has {climbing:bolts} bolts.
This is without belay stations and indicates how much quickdraws a climber needs.
" } }, "title": { @@ -10440,7 +10474,7 @@ "then": "Non-competitive diving" }, "26": { - "then": "Rock climbing" + "then": "Climbing" }, "27": { "then": "Climbing Adventure" @@ -12513,14 +12547,14 @@ "more_privacy": { "mappings": { "0": { - "then": "When making changes to OpenStreetMap, do not indicate how far away you were from the changed objects." + "then": "When making changes to OpenStreetMap, do not indicate how far away I was from the changed objects." }, "1": { "then": "When making changes to OpenStreetMap, roughly indicate how far away you were from the changed objects. This helps other contributors to understand how you made the change" } }, "question": "When making changes, should a rough indication be given how far away you were from the object?", - "questionHint": "If you make a change to one or more objects and you enabled your location, a rough indication of where you made will be saved: it is indicated if you were closer then 25m, 500m, 5km or further away then 5km. This helps mappers understand your context when making changes, but gives an indication of where you were at this time. " + "questionHint": "If you make a change to one or more objects and you enabled your location, a rough indication of where you made will be saved: it is indicated if you were closer then 25m, 500m, 5km or further away than 5km. This helps mappers understand your context when making changes, but gives an indication of where you were at this time." }, "more_privacy_theme_override": { "mappings": { @@ -12597,13 +12631,13 @@ "sync-visited-locations": { "mappings": { "0": { - "then": "Save the locations you search for and inspect and sync them via openstreetmap.org. OpenStreetMap and all apps you use can see this history" + "then": "Save the locations I search for and inspect and sync them via openstreetmap.org. OpenStreetMap and all apps that I give access to my OSM account can see this history" }, "1": { "then": "Save the locations you search for and inspect on my device" }, "2": { - "then": "Don't save the locations you search for and inspect " + "then": "Don't save the locations I search for and inspect" } }, "question": "Should the locations you search for and inspect be remembered?", diff --git a/langs/layers/es.json b/langs/layers/es.json index 184cdb453f..9633344eb1 100644 --- a/langs/layers/es.json +++ b/langs/layers/es.json @@ -2059,7 +2059,7 @@ } }, "brothel": { - "description": "Un establecimiento dedicado específicamente a la prostitución ", + "description": "Un establecimiento dedicado específicamente a la prostitución.", "name": "Burdeles", "presets": { "0": { @@ -2816,7 +2816,7 @@ } }, "cinema": { - "description": " Un lugar donde se proyectan películas (cine), generalmente abierto al público por una tarifa Comúnmente conocido como cine en Estados Unidos", + "description": "Un lugar donde se proyectan películas (cine), generalmente abierto al público por una tarifa Comúnmente conocido como cine en Estados Unidos.", "name": "Cine", "tagRenderings": { "cinema_type": { diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 352a8d6174..eeb48492c5 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -217,14 +217,21 @@ "then": "Dit is een reclamezuil" } }, + "question": "Wat voor advertentieobject is dit?", "render": "Dit is een {advertising}" } }, "title": { "mappings": { + "0": { + "then": "Billboard" + }, "10": { "then": "Muurschildering" }, + "2": { + "then": "Afficheframe" + }, "3": { "then": "Aanplakzuil" }, @@ -247,6 +254,7 @@ } }, "aerialway": { + "description": "Verschillende vormen van passagiers- en goederentransport die gebruikmaken van kabels, waaronder kabelbanen, gondelbanen, sleepliften en tokkelbanen.", "name": "Kabelbanen", "pointRendering": { "1": { @@ -257,6 +265,7 @@ }, "tagRenderings": { "duration": { + "question": "Hoe lang duurt een rit met deze lift?", "questionHint": "Dit is exclusief wachttijd.", "render": "Een enkele reis duurt {duration} minuten" }, @@ -264,6 +273,7 @@ "render": "Deze kabelbaan is {_length:km} kilometer lang" }, "occupancy": { + "question": "Hoeveel mensen kunnen in één cabine?", "render": "Er kunnen {aerialway:occupancy} mensen in een cabine" }, "oneway": { @@ -285,9 +295,15 @@ "1": { "then": "Dit is een kabellift waar de gondel in een continue circuit gaat" }, + "10": { + "then": "Een tokkelbaan. (Ook bekend als deathride; een toeristische attractie waarbij avontuurlijk mensen aan hoge snelheid afdalen)" + }, "2": { "then": "Een open stoeltjeslift met zitjes om op te zitten." }, + "3": { + "then": "Een kabelbaan met zowel stoeltjes als gondels in dezelfde baan" + }, "4": { "then": "Een sleeplift" }, @@ -296,9 +312,19 @@ }, "6": { "then": "Een sleeplift met L-vormige stangen voor één passagier" + }, + "7": { + "then": "Een sleeplift met stangen om skiërs naar boven te slepen" + }, + "8": { + "then": "Een sleeplijn waar skiërs zich aan vasthouden of vastmaken" } - } + }, + "question": "Wat voor kabelbaan is dit?" } + }, + "title": { + "render": "Kabelbaan {name}" } }, "ambulancestation": { @@ -351,7 +377,18 @@ } }, "animal_shelter": { + "description": "Een dierenasiel is een instelling waar dieren in nood binnengebracht worden en door de medewerkers gevoederd en verzorgd worden, eventueel met het oog op uitzetting. Hieronder vallen asielen voor achtergelaten huisdieren en opvangcentra voor wilde dieren.", + "name": "Dierenasielen", + "presets": { + "0": { + "title": "een dierenasiel" + } + }, "tagRenderings": { + "2": { + "question": "Wat is de naam van dit dierenasiel?", + "render": "De naam van dit dierenasiel is {name}" + }, "6": { "mappings": { "0": { @@ -492,8 +529,12 @@ "mappings": { "0": { "then": "Dit kunstwerk doet ook dienst als herdenkingsmonument" + }, + "1": { + "then": "Dit kunstwerk fungeert niet als gedenkteken" } - } + }, + "question": "Dient dit kunstwerk als gedenkteken?" } }, "title": { @@ -505,6 +546,92 @@ "render": "Kunstwerk" } }, + "assembly_point": { + "description": "Deze laag bevat verzamelplaatsen en wachtzones waar werknemers, passagiers of menigten verzameld worden in een noodsituatie.", + "name": "Noodverzamelplaatsen", + "presets": { + "0": { + "title": "een verzamelplaats" + } + }, + "tagRenderings": { + "assembly_point_name": { + "question": "Wat is de naam van deze verzamelplaats?", + "render": "De naam van deze verzamelplaats is {name}" + }, + "assembly_point_operator": { + "question": "Welke organisatie beheert dit verzamelpunt?", + "render": "Dit verzamelpunt wordt beheerd door {operator}" + }, + "disaster_type": { + "mappings": { + "0": { + "then": "Aardbeving" + }, + "1": { + "then": "Overstroming" + }, + "2": { + "then": "Brand" + }, + "3": { + "then": "Aardverschuiving" + } + }, + "question": "Voor welk soort ramp is dit verzamelpunt bedoeld?" + } + }, + "title": { + "render": "Verzamelpunt voor bij noodsituaties" + } + }, + "assisted_repair": { + "description": "Een zelfondersteunde werkplaats is een locatie waar mensen hun spullen kunnen komen repareren met hulp van vrijwilligers en met het gereedschap dat op de locatie beschikbaar is. Een repair café is een soort evenement dat regelmatig wordt georganiseerd volgens dezelfde principes.", + "name": "Repair cafés en reparatiewerkplaatsen met ondersteuning", + "presets": { + "0": { + "description": "Een locatie met een permanente werkplaats waar mensen naartoe kunnen komen om spullen te repareren met hulp van vrijwilligers.", + "title": "een reparatiewerkplaats met ondersteuning" + } + }, + "tagRenderings": { + "item:repair": { + "mappings": { + "0": { + "then": "Mobiele telefoons worden hier gerepareerd" + }, + "1": { + "then": "Computers worden hier gerepareerd" + }, + "2": { + "then": "Fietsen worden hier gerepareerd" + }, + "3": { + "then": "Elektronische apparaten worden hier gerepareerd" + }, + "4": { + "then": "Meubels worden hier gerepareerd" + }, + "5": { + "then": "Kleding wordt hier gerepareerd" + } + }, + "question": "Wat voor items worden hier gerepareerd?" + }, + "name": { + "question": "Wat is de naam van deze reparatiewerkplaats?", + "render": "Deze werkplaats heet {name}" + } + }, + "title": { + "mappings": { + "0": { + "then": "{name}" + } + }, + "render": "Werkplaats voor reparatie met ondersteuning" + } + }, "atm": { "description": "Geldautomaten om geld op te nemen", "filter": { @@ -754,6 +881,72 @@ "render": "Barrière" } }, + "bbq": { + "description": "Een permanent geïnstalleerde barbecue, meestal toegankelijk voor iedereen.", + "name": "Barbecue", + "presets": { + "0": { + "description": "Een permanent geïnstalleerde barbecue, meestal toegankelijk voor iedereen.", + "title": "Barbecue" + } + }, + "tagRenderings": { + "access": { + "mappings": { + "0": { + "then": "Deze barbecue mag door iedereen worden gebruikt" + }, + "1": { + "then": "Deze barbecue mag door niemand worden gebruikt" + }, + "2": { + "then": "Deze barbecue is privé" + }, + "3": { + "then": "Deze barbecue mag door iedereen worden gebruikt, maar de eigenaar kan de toegang op elk moment ontzeggen" + }, + "4": { + "then": "Deze barbecue mag alleen worden gebruikt door klanten" + }, + "5": { + "then": "Deze barbecue mag alleen worden gebruikt door personen met toestemming" + } + }, + "question": "Wie mag deze barbecue gebruiken?" + }, + "covered": { + "mappings": { + "0": { + "then": "Deze barbecue is niet overdekt" + }, + "1": { + "then": "Deze barbecue is overdekt" + } + }, + "question": "Is deze barbecue overdekt?" + }, + "fuel": { + "mappings": { + "0": { + "then": "Deze barbecue gebruikt hout als brandstof" + }, + "1": { + "then": "Deze barbecue gebruikt houtskool als brandstof" + }, + "2": { + "then": "Deze barbecue werkt op elektriciteit" + }, + "3": { + "then": "Deze barbecue gebruikt gas als brandstof" + } + }, + "question": "Wat voor brandstof gebruikt deze barbecue?" + } + }, + "title": { + "render": "BBQ" + } + }, "bench": { "description": "Een zitbank is een houten, metalen, stenen, … oppervlak waar een mens kan zitten. Deze laag toont ze en stelt er enkele vragen over.", "filter": { @@ -977,7 +1170,76 @@ } }, "bicycle_counter": { - "description": "Automatische fietstelpunten" + "description": "Automatische fietstelpunten", + "name": "Fietstellers", + "presets": { + "0": { + "title": "een fietsteller" + } + }, + "tagRenderings": { + "clock": { + "mappings": { + "0": { + "then": "Deze teller heeft een klok" + }, + "1": { + "then": "Deze teller heeft geen klok" + } + }, + "question": "Heeft deze fietsteller een klok?" + }, + "display": { + "mappings": { + "0": { + "then": "Deze teller heeft een digitaal display" + }, + "1": { + "then": "Deze teller heeft een analoog display" + }, + "2": { + "then": "Deze teller heeft geen display" + } + }, + "question": "Heeft deze fietsteller een display dat het aantal passerende fietsen toont?" + }, + "name": { + "freeform": { + "placeholder": "Naam van de getelde locatie" + }, + "question": "Wat is de naam van de getelde locatie?", + "render": "Naam van de getelde locatie: {name}" + }, + "ref": { + "freeform": { + "placeholder": "Referentienummer van de teller" + }, + "mappings": { + "0": { + "then": "Deze teller heeft geen referentienummer" + } + }, + "question": "Wat is het referentienummer van deze teller?", + "render": "Referentienummer van de teller: {ref}" + }, + "start_date": { + "freeform": { + "placeholder": "Startdatum van de teller" + }, + "question": "Wanneer is deze teller begonnen met tellen?", + "render": "Deze teller is begonnen met teller op {start_date}" + }, + "website": { + "freeform": { + "placeholder": "Website van de teller" + }, + "question": "Is er een website voor deze fietsteller?", + "render": "Website van de teller {website}" + } + }, + "title": { + "render": "Fietsteller" + } }, "bicycle_library": { "description": "Een plaats waar men voor langere tijd een fiets kan lenen", @@ -1774,9 +2036,6 @@ }, "title": { "mappings": { - "0": { - "then": "{name}" - }, "1": { "then": "Vogelkijkhut {name}" }, @@ -1787,6 +2046,24 @@ "render": "Vogelkijkplaats" } }, + "brothel": { + "description": "Een etablissement dat zich specifiek richt op prostitutie.", + "name": "Bordelen", + "presets": { + "0": { + "title": "een bordeel" + } + }, + "tagRenderings": { + "name": { + "question": "Wat is de naam van dit bordeel?", + "render": "Dit bordeel heet {name}" + } + }, + "title": { + "render": "Bordeel" + } + }, "cafe_pub": { "deletion": { "extraDeleteReasons": { @@ -1848,6 +2125,15 @@ "mappings": { "0": { "then": "{name}" + }, + "1": { + "then": "Bar" + }, + "2": { + "then": "Café" + }, + "3": { + "then": "Nachtclub" } }, "render": "Café" @@ -2517,8 +2803,28 @@ "render": "Oplaadpunt" } }, + "cinema": { + "description": "Een plaats die films toont, meestal open voor het publiek tegen een vergoeding.", + "name": "Bioscoop", + "tagRenderings": { + "cinema_type": { + "mappings": { + "0": { + "then": "Dit is een normale bioscoop met films voor alle leeftijden" + }, + "1": { + "then": "Dit is een erotische bioscoop met films voor volwassenen" + } + }, + "question": "Wat voor type bioscoop is dit?" + } + }, + "title": { + "render": "Bioscoop" + } + }, "climbing": { - "description": "Een dummy-laag die tagrenderings bevat, gedeeld over de verschillende klimsport lagen", + "description": "Een dummy-laag die tagrenderings bevat, gedeeld over de verschillende klimsportlagen", "tagRenderings": { "average_length": { "question": "Wat is de (gemiddelde) lengte van de klimroutes, in meter?", @@ -2555,7 +2861,7 @@ }, "max_bolts": { "question": "Wat is het maximum aantal bouten in routes ban {title()}?", - "render": "De sportklimroutes hebben maximaal {climbing:bolts:max} bouten.
Hierbij worden relays niet meegteld. Dit geeft aan hoeveel klimsetjes een klimmer nodig heeft
" + "render": "De sportklimroutes hebben maximum {climbing:bolts:max} haken.
Hierbij worden standplaatsen niet meegeteld. Dit geeft aan hoeveel setjes een klimmer nodig heeft.
" }, "max_difficulty": { "question": "Wat is het niveau van de moeilijkste route, volgens het Franse classificatiesysteem?", @@ -2648,6 +2954,9 @@ }, "1": { "then": "Een klimzone - een enkele rots of klif met klimroutes" + }, + "2": { + "then": "Een klimgebied met een of meer klimrotsen en/of boulders" } } }, @@ -2730,6 +3039,40 @@ }, "question": "Is er een snelklimmuur (speed climbing)?" }, + "auto_belay_lead": { + "mappings": { + "0": { + "then": "Er zijn geen autobelays voor voorklimmen" + }, + "1": { + "then": "Er zijn enkele autobelays voor voorklimmen" + }, + "2": { + "then": "Elke voorklimroute kan op autobelay geklommen worden" + } + }, + "question": "Zijn hier autobelays voor voorklimmen?", + "render": "Er zijn {climbing:autobelay:sport} autobelays voor voorklimmen" + }, + "auto_belay_toprope": { + "mappings": { + "0": { + "then": "Er zijn geen autobelays voor toprope" + }, + "1": { + "then": "Er zijn enkele autobelays voor toprope" + }, + "2": { + "then": "Elke toproperoute kan op autobelay geklommen worden maar handmatig zekeren is ook mogelijk" + }, + "3": { + "then": "Toproperoutes kunnen enkel op autobelay geklommen worden" + } + }, + "question": "Zijn hier auto belays voor toprope?", + "questionHint": "Autobelays die enkel voor speed zijn, tellen niet mee", + "render": "Er zijn {climbing:autobelay:toprope} autobelaytoestellen voor toprope" + }, "belay_device_rental": { "mappings": { "0": { @@ -2748,7 +3091,7 @@ "then": "Hier kan geen zekeringsapparaat gehuurd worden" } }, - "question": "Kan een zekeringsapparaat hier gehuurd worden?" + "question": "Kan hier een zekeringsapparaat gehuurd worden voor gebruik in de zaal?" }, "harness_rental": { "mappings": { @@ -2765,10 +3108,10 @@ "then": "Hier kunnen geen klimgordels gehuurd worden" } }, - "question": "Kan een klimgordel hier gehuurd worden?" + "question": "Kan hier een klimgordel gehuurd worden voor gebruik in de zaal?" }, "name": { - "question": "Wat is de naam van dit Klimzaal?" + "question": "Wat is de naam van deze klimzaal?" }, "rope_rental": { "mappings": { @@ -2785,7 +3128,7 @@ "then": "Hier kan geen klimtouw gehuurd worden" } }, - "question": "Kan een klimtouw hier gehuurd worden?" + "question": "Kan hier een klimtouw gehuurd worden voor gebruik in de zaal?" }, "shoe_rental": { "mappings": { @@ -2802,7 +3145,7 @@ "then": "Hier kunnen geen klimschoenen gehuurd worden" } }, - "question": "Kunnen hier klimschoenen gehuurd worden?" + "question": "Kunnen hier klimschoenen gehuurd worden voor gebruik in de zaal?" } }, "title": { @@ -2817,6 +3160,7 @@ "climbing_opportunity": { "description": "Laag met plaatsen waar klimmen _misschien_ mogelijk is. Deze wordt geladen als je ver inzoomt, om te voorkomen dat je per ongeluk dubbels maakt", "name": "Klimgelegenheiden?", + "snapName": "een muur, klif of rots", "tagRenderings": { "climbing-opportunity-name": { "render": "{name}" @@ -2876,7 +3220,7 @@ } }, "question": "Hoeveel bouten heeft deze route voordat je het relay bereikt?", - "render": "Deze route heeft {climbing:bolts} klimbouten.
Dit is zonder het relay mee te tellen. Een klimmer heeft dus minstens {climbing:bolts} klimsetjes nodig om boven te raken
" + "render": "Deze route heeft {climbing:bolts} haken.
Hierbij wordt de standplaats niet meegeteld. Een klimmer heeft normaal gezien dus minstens {climbing:bolts} setjes nodig.
" } }, "title": { @@ -2953,21 +3297,21 @@ }, "faces": { "freeform": { - "placeholder": "Aantal klokken" + "placeholder": "Aantal wijzerplaten" }, "mappings": { "0": { - "then": "Deze klok heeft één klok" + "then": "Deze klok heeft één wijzerplaat" }, "1": { - "then": "Deze klok heeft twee klokken" + "then": "Deze klok heeft twee wijzerplaten" }, "2": { - "then": "Deze klok heeft vier klokken" + "then": "Deze klok heeft vier wijzerplaten" } }, - "question": "Hoeveel klokken heeft deze klok?", - "render": "Deze klok heeft {faces} klokken" + "question": "Hoeveel wijzerplaten heeft deze klok?", + "render": "Deze klok heeft {faces} wijzerplaten" }, "hygrometer": { "mappings": { @@ -3591,8 +3935,13 @@ "mappings": { "0": { "then": "De straat heeft hier (waarschijnlijk) geen helling" + }, + "1": { + "then": "Deze weg heeft een helling" } - } + }, + "question": "Heeft {title()} een helling?", + "render": "Deze weg heeft een helling van {incline}" }, "is lit?": { "mappings": { @@ -3780,6 +4129,17 @@ "dentist": { "description": "Deze laag toont tandartsen", "name": "Tandarts", + "pointRendering": { + "0": { + "label": { + "mappings": { + "0": { + "then": "{name}" + } + } + } + } + }, "presets": { "0": { "title": "een tandartspraktijk" @@ -4096,6 +4456,21 @@ "question": "Wat is de diepte van deze lift?", "render": "Deze lift heeft een diepte van {canonical(length)}" }, + "elevator-diameter": { + "question": "Wat is de diameter van deze lift?", + "render": "Deze lift heeft een diameter van {canonical(diameter)}" + }, + "elevator-shape": { + "mappings": { + "0": { + "then": "Deze lift is rechthoekig" + }, + "1": { + "then": "Deze lift is cirkelvormig" + } + }, + "question": "Wat voor vorm heeft deze lift?" + }, "elevator-width": { "question": "Wat is de breedte van deze lift?", "render": "Deze lift heeft een breedte van {canonical(width)}" @@ -4126,6 +4501,18 @@ } } }, + "speech_output_available": { + "mappings": { + "0": { + "then": "Deze lift heeft spraakuitvoer" + }, + "1": { + "then": "Deze lift heeft geen spraakuitvoer" + } + }, + "question": "Heeft deze lift spraakuitvoer?", + "questionHint": "Bijv. een aankondiging van de huidige verdieping" + }, "tactile_writing_language": { "render": { "special": { @@ -4140,6 +4527,84 @@ "render": "Lift" } }, + "elongated_coin": { + "description": "Laag met muntpersen.", + "name": "Muntpersen", + "presets": { + "0": { + "title": "een muntpers" + } + }, + "tagRenderings": { + "charge": { + "freeform": { + "placeholder": "Kosten (bijv. 0.50 EUR)" + }, + "mappings": { + "0": { + "then": "Het kost 1 euro om een munt te persen." + }, + "1": { + "then": "Het kost 2 euro om een munt te persen." + }, + "2": { + "then": "Het kost 2 Zwitserse frank om een munt te persen." + }, + "3": { + "then": "Het kost 1 Zwitserse frank om een munt te persen." + } + }, + "question": "Hoe veel kost het om een munt te persen?", + "render": "Het kost {charge} om een munt te persen." + }, + "coin": { + "freeform": { + "placeholder": "Munttype (bijv. 10 cent)" + }, + "mappings": { + "0": { + "then": "Deze muntpers gebruikt een muntstuk van 2 cent voor het persen." + }, + "1": { + "then": "Deze muntpers gebruikt een muntstuk van 5 cent voor het persen." + }, + "2": { + "then": "Deze muntpers gebruikt een muntstuk van 10 cent voor het persen." + }, + "3": { + "then": "Deze muntpers gebruikt een muntstuk van 25 cent voor het persen." + }, + "4": { + "then": "Deze muntpers gebruikt een muntstuk van 50 cent voor het persen." + }, + "5": { + "then": "Deze muntpers gebruikt een muntstuk van 10 rappen voor het persen." + }, + "6": { + "then": "Deze muntpers gebruikt een muntstuk van 20 rappen voor het persen." + } + }, + "question": "Welk muntstuk wordt gebruikt voor het persen?", + "render": "Deze muntpers gebruikt een muntstuk van {coin:type} voor het persen." + }, + "designs": { + "freeform": { + "placeholder": "Aantal ontwerpen (bijv. 5)" + }, + "mappings": { + "0": { + "then": "Deze muntpers heeft één ontwerp beschikbaar." + }, + "1": { + "then": "Deze muntpers heeft twee ontwerpen beschikbaar." + }, + "2": { + "then": "Deze muntpers heeft drie ontwerpen beschikbaar." + } + } + } + } + }, "entrance": { "description": "Een laag met ingangen (van gebouwen etc.) waarmee je details kunt aanvullen die belangrijk zijn voor bijvoorbeeld rolstoelgebruikers (en fietsers, leveranciers, …)", "name": "Toegang", @@ -5875,11 +6340,6 @@ } }, "title": { - "mappings": { - "0": { - "then": "{name}" - } - }, "render": "Natuurgebied" } }, @@ -6411,21 +6871,6 @@ "render": "Picknicktafel" } }, - "play_forest": { - "description": "Een speelbos is een vrij toegankelijke zone in een bos", - "name": "Speelbossen", - "title": { - "mappings": { - "0": { - "then": "{name}" - }, - "1": { - "then": "Speelbos {name}" - } - }, - "render": "Speelbos" - } - }, "playground": { "deletion": { "nonDeleteMappings": { @@ -6592,6 +7037,9 @@ "11": { "then": "Dit is een rekstok" }, + "14": { + "then": "Dit is een klimmuur" + }, "3": { "then": "Dit is een zandbak" }, @@ -7980,9 +8428,6 @@ }, "title": { "mappings": { - "0": { - "then": "{name}" - }, "1": { "then": "Voetpad" }, @@ -8002,6 +8447,125 @@ "render": "Trage weg" } }, + "souvenir_coin": { + "description": "Laag die machines toont die souvenirmunten verkopen", + "name": "Souvenirmuntmachines", + "presets": { + "0": { + "description": "Voeg een machine toe die souvenirmunten verkoopt", + "title": "een souvenirmuntmachine" + } + }, + "tagRenderings": { + "charge": { + "freeform": { + "placeholder": "Kosten (bijv. 2 EUR)" + }, + "mappings": { + "0": { + "then": "Een souvenirmunt kost 2 euro" + } + }, + "question": "Hoeveel kost een souvenirmunt?", + "render": "Een souvenirmunt kost {charge}" + }, + "designs": { + "override": { + "mappings": { + "0": { + "then": "Deze machine heeft één ontwerp beschikbaar" + }, + "1": { + "then": "Deze machine heeft twee ontwerpen beschikbaar" + }, + "2": { + "then": "Deze machine heeft drie ontwerpen beschikbaar" + }, + "3": { + "then": "Deze machine heeft vier ontwerpen beschikbaar" + } + }, + "render": "Deze machine heeft {coin:design_count} ontwerpen beschikbaar" + } + }, + "indoor": { + "mappings": { + "0": { + "then": "Deze machine bevindt zich binnen." + }, + "1": { + "then": "Deze machine bevindt zich buiten." + } + }, + "question": "Bevindt deze machine zich binnen?" + } + }, + "title": { + "render": "Souvenirmuntmachine" + } + }, + "souvenir_note": { + "description": "Laag die machines toont die souvenirbiljetten verkopen", + "name": "Souvenirbiljetmachines", + "presets": { + "0": { + "description": "Voeg een machine toe die souvenirbiljetten verkoopt", + "title": "een souvenirbiljetmachine" + } + }, + "tagRenderings": { + "charge": { + "freeform": { + "placeholder": "Kosten (bijv. 2 EUR)" + }, + "mappings": { + "0": { + "then": "Een souvenirbiljet kost 2 euro" + }, + "1": { + "then": "Een souvenirbiljet kost 3 euro" + } + }, + "question": "Hoeveel kost een souvenirbiljet?", + "render": "Een souvenirbiljet kost {charge}" + }, + "designs": { + "freeform": { + "placeholder": "Aantal ontwerpen (bijv. 5)" + }, + "mappings": { + "0": { + "then": "Deze machine heeft één ontwerp beschikbaar." + }, + "1": { + "then": "Deze machine heeft twee ontwerpen beschikbaar." + }, + "2": { + "then": "Deze machine heeft drie ontwerpen beschikbaar." + }, + "3": { + "then": "Deze machine heeft vier ontwerpen beschikbaar." + } + }, + "question": "Hoeveel ontwerpen heeft deze machine beschikbaar?", + "render": "Deze machine heeft {note:design_count} ontwerpen beschikbaar." + }, + "indoor": { + "mappings": { + "0": { + "then": "Deze machine bevindt zich binnen." + }, + "1": { + "then": "Deze machine bevindt zich buiten." + } + }, + "question": "Bevindt deze machine zich binnen?" + } + }, + "title": { + "render": "Souvenirbiljetmachine" + } + }, "speed_camera": { "description": "Laag met flitspalen", "name": "Flitspaal", @@ -8192,6 +8756,20 @@ "render": "Sportterrein" } }, + "sports_centre": { + "tagRenderings": { + "sport_centre-sport": { + "mappings": { + "26": { + "then": "Klimmen" + }, + "27": { + "then": "Hoogteparcours" + } + } + } + } + }, "stairs": { "description": "Laag met trappen en roltrappen", "name": "Trappen", @@ -10002,25 +10580,13 @@ } }, "village_green": { - "description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)", - "name": "Speelweide", - "title": { - "mappings": { - "0": { - "then": "{name}" - } - }, - "render": "Speelweide" - } + "description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)" }, "visitor_information_centre": { "description": "Een bezoekerscentrum biedt informatie over een specifieke attractie of bezienswaardigheid waar het is gevestigd.", "name": "Bezoekerscentrum", "title": { "mappings": { - "0": { - "then": "{name:nl}" - }, "1": { "then": "{name}" } @@ -10250,4 +10816,4 @@ "render": "windturbine" } } -} \ No newline at end of file +} diff --git a/langs/layers/uk.json b/langs/layers/uk.json index 68add1822e..770c39894f 100644 --- a/langs/layers/uk.json +++ b/langs/layers/uk.json @@ -931,7 +931,18 @@ } }, "etymology": { - "name": "Має етимологію" + "name": "Має етимологію", + "tagRenderings": { + "etymology_multi_apply": { + "render": "{multi_apply(_same_name_ids, name:etymology:wikidata;name:etymology, Автоматичне застосування даних до всіх сегментів з однаковою назвою, true)}" + }, + "street-name-sign-image": { + "render": "{image_carousel(image:streetsign)}
{image_upload(image:streetsign, Додати зображення таблички з назвою вулиці)}" + }, + "wikipedia-etymology": { + "question": "На честь якого елемента Вікіданих названо цей об'єкт?" + } + } }, "fire_station": { "presets": { @@ -1140,6 +1151,38 @@ } } }, + "note": { + "filter": { + "10": { + "options": { + "0": { + "question": "Останнє редагування дописувачем {search}" + } + } + }, + "11": { + "options": { + "0": { + "question": "Не відредаговано як останнє {search}" + } + } + }, + "14": { + "options": { + "0": { + "question": "Останнє редагування зроблено до {search}" + } + } + }, + "15": { + "options": { + "0": { + "question": "Останнє редагування після {search}" + } + } + } + } + }, "parking": { "tagRenderings": { "parking-type": { @@ -1417,6 +1460,13 @@ "internet-ssid": { "render": "Назва мережі: {internet_access:ssid}" }, + "last_edit": { + "render": { + "special": { + "text": "Востаннє редаговано {_last_edit:timestamp} користувачем {_last_edit:contributor}" + } + } + }, "opening_hours": { "question": "Які години роботи {title()}?", "render": "

Години роботи

{opening_hours_table(opening_hours)}" @@ -1465,6 +1515,13 @@ "after": "Відскануйте цей код, щоб відкрити це місце на іншому пристрої" } }, + "share": { + "render": { + "special": { + "text": "Поділіться цією локацією" + } + } + }, "single_level": { "mappings": { "0": { diff --git a/langs/nl.json b/langs/nl.json index 2f4840b6f7..3b709b6710 100644 --- a/langs/nl.json +++ b/langs/nl.json @@ -4,10 +4,10 @@ }, "centerMessage": { "allFilteredAway": "Geen enkel kaart-object voldoet aan alle filters", - "loadingData": "Data wordt geladen…", + "loadingData": "Data worden geladen …", "noData": "Er zijn geen relevante kaart-objecten in de zichtbare regio", "ready": "Klaar!", - "retrying": "Data inladen mislukt. Nieuwe poging binnen {count} seconden…", + "retrying": "Data inladen mislukt. Nieuwe poging binnen {count} seconden …", "zoomIn": "Zoom in om de data te zien en te bewerken" }, "communityIndex": { @@ -81,7 +81,7 @@ "intro": "Je hebt {length} locaties gemarkeerd als favoriete locatie.", "introPrivacy": "Deze lijst is alleen voor jou zichtbaar", "loginToSeeList": "Log in om de lijst met locaties te zien die je als favoriet hebt gemarkeerd", - "tab": "Jouw favorieten en beoordelingen", + "tab": "Jouw favorieten en recensies", "title": "Je favoriete locaties" }, "flyer": { @@ -94,20 +94,20 @@ "intro": "De gebruiker krijgt eerst een kaart met interessepunten te zien. Klik je op een punt, dan wordt de interface met informatie over het interessepunt geopend.", "title": "Hoe ziet de interface eruit?" }, - "examples": "Er zijn veel thematische kaarten , waarvan er hier een paar worden getoond.\n\nOnline zijn er nog meer thematische kaarten zoals: gezondheidszorg, binnenruimtes, rolstoeltoegankelijkheid, afvalcontainers, boekenruilkasten, regenboog-zebrapaden,... Ontdek ze allemaal op mapcomplete.org", + "examples": "Er zijn veel thematische kaarten, waarvan er hier een paar worden getoond.\n\nOnline zijn er nog meer thematische kaarten: gezondheidszorg, binnenruimtes, rolstoeltoegankelijkheid, afvalcontainers, boekenruilkasten, regenboog-zebrapaden … Ontdek ze allemaal op mapcomplete.org", "fakeui": { "add_images": "Voeg foto's toe met een paar klikken", "attributes": "Attributen worden getoond op begrijpbare wijze", "edit": "Foute of verouderde gegevens? Aanpassen kan hier.", "question": "Is een attribuut nog niet gekend? MapComplete toont een vraag", - "see_images": "Toont afbeeldingen van eerdere bijdragers, Wikipedia, Mapillary, …", + "see_images": "Toont afbeeldingen van eerdere bijdragers, Wikipedia, Mapillary …", "wikipedia": "Gelinkte Wikipedia-artikelen worden getoond" }, "frontParagraph": "MapComplete is een eenvoudig te gebruiken webapplicatie voor het verzamelen van geodata in OpenStreetMap. Hiermee kunnen relevante gegevens op een open, crowdsourced en herbruikbare manier worden verzameld en beheerd.\n\nNieuwe categorieën en attributen kunnen op vraag worden toegevoegd.", "lines_too": "Lijnobjecten en polygonen worden ook getoond. Afbeeldingen en attributen daarvan kunnen toegevoegd en aangepast worden.", "mapcomplete": { - "customize": "Wil je een versie op maat?\nWil je een versie in jullie huisstijl?\nWil je een nieuwe kaartlaag of functionaliteit?\nWil je een crowdsourcing-campagne opzetten?\nNeem contact op met pietervdvn@posteo.net voor meer info.", - "intro": "MapComplete is een website met {mapCount} interactieve kaarten - er komen regelmatig kaarten bij. Iedere kaart toont items binnen een interessegebied waar gebruikers data zien en updaten.", + "customize": "MapComplete kan op maat worden afgesteld, met nieuwe kaartlagen, nieuwe functionaliteiten, of een versie in de huisstijl van je organisatie.\nWe hebben ook ervaring met het opzetten van campagnes om geodata te crowdsourcen.\nNeem contact op met pietervdvn@posteo.net voor meer info.", + "intro": "MapComplete is een website met {mapCount} interactieve kaarten – en er komen regelmatig kaarten bij. Iedere kaart toont items binnen een bepaald interessegebied waar gebruikers data zien en bijwerken. Er zijn veel functionaliteiten:", "li0": "Toon waar interessepunten zijn", "li1": "Voeg nieuwe punten toe en update informatie van reeds bestaande punten", "li2": "Voeg eenvoudig contactgegevens en openingsuren toe", @@ -118,7 +118,7 @@ "li7": "Volledig Open-Source (GPL) en gratis te gebruiken", "title": "Wat is MapComplete?" }, - "onwheels": "Kaarten van binnenruimtes voor rolstoelgebruikers zijn ook beschikbaar", + "onwheels": "Kaarten van binnenruimtes voor rolstoelgebruikers zijn ook beschikbaar.", "osm": "OpenStreetMap is een online kaart die door iedereen aangepast en herbruikt mag worden mits bronvermelding en het openhouden van de data.\n\nHet is de grootste geodatabank ter wereld en wordt herbruikt door miljoenen websites en applicaties.", "tagline": "Geodata eenvoudig verzamelen met OpenStreetMap", "title": "mapcomplete.org", @@ -129,7 +129,7 @@ "404": "Deze pagina bestaat niet", "about": "Bewerk en voeg data toe aan OpenStreetMap over een specifiek onderwerp op een gemakkelijke manier", "aboutMapComplete": { - "intro": "Gebruik MapComplete om data uit OpenStreetMap te bekijken en te bewerken rond een specifiek thema. Beantwoord vragen en binnen enkele minuten zijn je antwoorden overal beschikbaar. In de meeste thema's kan je ook foto's toevoegen of zelfs een review schrijven. De maker van het thema bepaalt welke elementen en vragen getoond worden." + "intro": "Gebruik MapComplete om data uit OpenStreetMap te bekijken en te bewerken rond een specifiek thema. Beantwoord vragen en binnen enkele minuten zijn je antwoorden overal beschikbaar. In de meeste thema's kan je ook foto's toevoegen of zelfs een recensie schrijven. De maker van het thema bepaalt welke elementen en vragen getoond worden." }, "add": { "addNew": "Voeg {category} toe", @@ -159,7 +159,7 @@ "stillLoading": "De data worden nog geladen. Nog even geduld en dan kan je een object toevoegen.", "title": "Nieuw object toevoegen", "wrongType": "Dit object is geen punt of lijn en kan daarom niet geïmporteerd worden", - "zoomInFurther": "Gelieve verder in te zoomen om een object toe te voegen.", + "zoomInFurther": "U dient eerst verder in te zoomen als u een object wilt toevoegen", "zoomInMore": "Zoom meer in om dit object te importeren" }, "apply_button": { @@ -222,22 +222,22 @@ "downloadAsPng": "Download als afbeelding", "downloadAsPngHelper": "Perfect om in rapporten op te nemen", "downloadAsSvg": "Download de huidige kaart als SVG", - "downloadAsSvgHelper": "Compatibel met Inkscape of Adobe Illustrator; deze data moeten nog verder verwerkt worden…", + "downloadAsSvgHelper": "Compatibel met Inkscape of Adobe Illustrator; deze data moeten nog verder verwerkt worden", "downloadAsSvgLinesOnly": "Download een SVG van de huidige kaart met uitsluitend lijnen", "downloadAsSvgLinesOnlyHelper": "Zelfdoorsnijdende lijnen worden opgebroken, kan worden gebruikt met bepaalde 3D-software", "downloadCSV": "Download de zichtbare data als CSV", - "downloadCSVHelper": "Compatibel met LibreOffice Calc, Excel, …", + "downloadCSVHelper": "Compatibel met LibreOffice Calc, Excel …", "downloadFeatureAsGeojson": "Downloaden als GeoJSON bestand", "downloadFeatureAsGpx": "Downloaden als GPX-bestand", - "downloadGeoJsonHelper": "Compatibel met QGIS, ArcGIS, ESRI, …", + "downloadGeoJsonHelper": "Compatibel met QGIS, ArcGIS, ESRI …", "downloadGeojson": "Download de zichtbare data als GeoJSON", "downloadGpx": "Downloaden als GPX-bestand", "downloadGpxHelper": "De meeste navigatie toestellen en applicaties kunnen een GPX-bestand openen", "downloadImage": "Download afbeelding", - "exporting": "Aan het exporteren…", - "includeMetaData": "Exporteer metadata (zoals laatste aanpassing, berekende waardes, …)", + "exporting": "Aan het exporteren …", + "includeMetaData": "Exporteer metadata (zoals laatste aanpassing, berekende waardes …)", "licenseInfo": "

Copyright

De voorziene data is beschikbaar onder de ODbL. Het hergebruiken van deze data is gratis voor elke toepassing, maar Gelieve de volledige licentie te lezen voor details", - "noDataLoaded": "Er is nog geen data ingeladen. Downloaden kan zodra de data geladen is.", + "noDataLoaded": "Er zijn nog geen data ingeladen. Downloaden kan zodra de data geladen zijn.", "pdf": { "current_view_generic": "Exporteer een PDF van de huidige weergave naar {paper_size} in {orientation} oriëntatie" }, @@ -277,8 +277,8 @@ "addNewOnLevel": "Is het nieuwe punt op verdieping {level}?", "confirmLevel": "Ja, voeg {preset} toe op verdieping {level}" }, - "loading": "Aan het laden…", - "loadingTheme": "{theme} wordt geladen…", + "loading": "Aan het laden …", + "loadingTheme": "{theme} wordt geladen …", "loginFailed": "Het inloggen op OpenStreetMap is gefaald", "loginFailedOfflineMode": "OpenStreetMap.org is op dit moment niet beschikbaar door onderhoud. Kaartwijzigingen maken zal binnenkort weer mogelijk zijn.", "loginFailedReadonlyMode": "OpenStreetMap.org is op dit moment in alleen-lezen modus door onderhoud. Kaartwijzigingen maken zal binnenkort weer mogelijk zijn.", @@ -316,9 +316,9 @@ "closed_permanently": "Gesloten voor onbepaalde tijd", "closed_until": "Gesloten - open op {date}", "error": "Kan de openingsuren niet inlezen", - "error_loading": "Sorry, deze openingsuren kunnen niet getoond worden", + "error_loading": "Sorry, deze openingsuren kunnen niet visueel getoond worden.", "friday": "Op vrijdag {ranges}", - "loadingCountry": "Het land wordt nog bepaald…", + "loadingCountry": "Het land wordt nog bepaald …", "monday": "Op maandag {ranges}", "not_all_rules_parsed": "De openingsuren zijn ingewikkeld. De volgende regels worden niet getoond bij het ingeven:", "on_weekdays": "Op weekdagen {ranges}", @@ -371,7 +371,7 @@ "retry": "Opnieuw proberen", "returnToTheMap": "Ga terug naar de kaart", "save": "Opslaan", - "screenToSmall": "Open {theme} in een nieuw venster", + "screenToSmall": "Open {theme} in een nieuw venster", "search": { "activeFilters": "Actieve filters", "clearFilters": "Verwijder filters", @@ -379,11 +379,11 @@ "deleteThemeHistory": "Verwijder geschiedenis", "editSearchSyncSettings": "Stel je geschiedenis-voorkeuren in", "editThemeSync": "Stel je geschiedenis-voorkeuren in", - "error": "Niet gelukt…", + "error": "Er is iets fout gelopen.", "instructions": "Gebruik de zoekbalk om locaties, filters of om andere kaarten te zoeken", "locations": "Plaatsen", "nMoreFilters": "{n} meer", - "nothing": "Niets gevonden…", + "nothing": "Niets gevonden.", "nothingFor": "Geen resultaten gevonden voor {term}", "otherMaps": "Andere kaarten", "pickFilter": "Kies een filter", @@ -392,7 +392,7 @@ "search": "Zoek naar een locatie, filter of kaart", "searching": "Aan het zoeken…" }, - "searchAnswer": "Zoek een optie…", + "searchAnswer": "Zoek een optie", "seeIndex": "Zie het overzich van alle thematische kaarten", "share": "Deel deze locatie", "sharescreen": { @@ -438,11 +438,11 @@ }, "title": "Upload je traject naar OpenStreetMap.org", "uploadFinished": "Je traject is geupload!", - "uploading": "Traject uploaden…" + "uploading": "Traject uploaden …" }, "uploadPending": "{count} wijzigingen in behandeling", "uploadPendingSingle": "Eén wijziging in behandeling", - "uploadingChanges": "Wijzigingen aan het uploaden…", + "uploadingChanges": "Wijzigingen aan het uploaden …", "useSearch": "Gebruik de zoekfunctie hierboven om meer opties te zien", "visualFeedback": { "closestFeaturesAre": "{n} objecten in beeld.", @@ -473,18 +473,18 @@ "islocked": "Bewegen vergrendeld rond je huidige locatie. Duw op de geolocatie-knop om te ontgrendelen.", "locked": "Bewegen vergrendeld rond jouw huidige locatie.", "navigation": "Gebruik de pijltjestoetsen om te bewegen. Druk op spatie om het meest centrale punt te selecteren. Druk op een cijfertoets om andere items te selecteren.", - "noCloseFeatures": "Geen objecten in beeld", + "noCloseFeatures": "Geen objecten in beeld.", "north": "Naar het noorden", "oneFeatureInView": "Eén object in beeld.", "out": "Aan het uitzoomen naar zoomlevel {z}", "south": "Naar het zuiden", - "unlocked": "Bewegen ontgrendeld", + "unlocked": "Bewegen ontgrendeld.", "viewportCenterCloseToGps": "De kaart is gecentreerd op je huidige GPS-locatie.", "viewportCenterDetails": "Het kaartbeeldcentrum is {distance} {bearing} vanaf je huidige locatie.", "west": "Naar het westen" }, - "waitingForGeopermission": "Aan het wachten op toestemming om geolocatie te gebruiken…", - "waitingForLocation": "Je locatie wordt gezocht…", + "waitingForGeopermission": "Aan het wachten op toestemming om geolocatie te gebruiken …", + "waitingForLocation": "Je locatie wordt gezocht …", "weekdays": { "abbreviations": { "friday": "Vrij", @@ -511,7 +511,7 @@ "doSearch": "Zoek hierboven om resultaten te zien", "failed": "Het Wikipedia-artikel inladen is mislukt", "fromWikipedia": "Uit Wikipedia, de vrije encyclopedie", - "loading": "Wikipedia aan het laden…", + "loading": "Wikipedia aan het laden …", "noResults": "Geen relevante items gevonden voor {search}", "previewbox": { "born": "Geboren: {value}", @@ -585,7 +585,7 @@ "failReasonsAdvanced": "Je kunt er ook voor zorgen dat je browser en extensies API's van derden niet blokkeren.", "multiple": { "done": "{count} afbeeldingen zijn succesvol geüpload. Bedankt!", - "partiallyDone": "{count} afbeeldingen worden geüpload, {done} afbeeldingen zijn klaar…", + "partiallyDone": "{count} afbeeldingen worden geüpload, {done} afbeeldingen zijn klaar …", "someFailed": "Sorry, we konden {count} afbeeldingen niet uploaden", "uploading": "{count} afbeeldingen worden geüpload…" }, @@ -593,8 +593,8 @@ "one": { "done": "Je afbeelding is succesvol geüpload. Bedankt!", "failed": "Sorry, we konden je afbeelding niet uploaden", - "retrying": "Je afbeelding wordt opnieuw geüpload…", - "uploading": "Je afbeelding wordt geüpload…" + "retrying": "Afbeelding opnieuw proberen uploaden …", + "uploading": "Je afbeelding wordt geüpload …" } }, "uploadFailed": "Afbeelding uploaden mislukt. Heb je internet? Gebruik je Brave of UMatrix? Dan moet je derde partijen toelaten." @@ -608,9 +608,9 @@ "notFound": "Ik kon hier geen {title} vinden - verwijder deze van de kaart" }, "index": { - "#": "These texts are shown above the theme buttons when no theme is loaded", + "#": "Deze teksten worden getoond boven de themaknoppen wanneer nog geen thema is ingeladen", "about": "Over MapComplete", - "intro": "MapComplete is een OpenStreetMap-applicatie waar informatie over een specifiek thema bekeken en aangepast kan worden.", + "intro": "Kaarten over verschillende thema's waar je kan aan bijdragen", "learnMore": "Lees meer", "logIn": "Log in om andere thema's te zien waar je al in bewerkt hebt", "title": "Welkom bij MapComplete" @@ -627,8 +627,8 @@ "inviteToMoveAgain": "Verplaats dit punt opnieuw", "isRelation": "Dit object is een relatie en kan niet verplaatst worden", "isWay": "Dit object is een lijn of een oppervlakte. Gebruik een ander OpenStreetMap-bewerkprogramma op het te verplaatsen.", - "partOfAWay": "Dit object is deel van een lijn of een oppervlakte. Gebruik een ander OpenStreetMap-bewerkprogramma om het te verplaatsen", - "partOfRelation": "Dit object maakt deel uit van een relatie. Gebruik een ander OpenStreetMap-bewerkprogramma om het te verplaatsen", + "partOfAWay": "Dit object is deel van een lijn of een oppervlakte. Gebruik een ander OpenStreetMap-bewerkprogramma om het te verplaatsen.", + "partOfRelation": "Dit object maakt deel uit van een relatie. Gebruik een ander OpenStreetMap-bewerkprogramma om het te verplaatsen.", "pointIsMoved": "Dit punt is verplaatst", "reasons": { "reasonInaccurate": "De locatie van dit object is niet accuraat en moet een paar meter verschoven worden", @@ -644,13 +644,13 @@ "addAComment": "Voeg een commentaar toe", "addComment": "Voeg commentaar toe", "addCommentAndClose": "Voeg een commentaar toe en sluit de nota", - "addCommentPlaceholder": "Voeg een commentaar toe…", + "addCommentPlaceholder": "Voeg een commentaar toe …", "anonymous": "Anonieme bijdrager", "closeNote": "Sluit deze nota", "createNote": "Maak een nieuwe kaartnota", "createNoteIntro": "Ontbreekt hier iets? Is hier iets mis met de kaart? Maak hier dan een kaartnota, deze zal door vrijwilligers verwerkt worden.", "createNoteTitle": "Voeg hier een nieuwe kaartnota toe", - "creating": "Kaartnota wordt gemaakt…", + "creating": "Kaartnota wordt gemaakt …", "disableAllNoteFilters": "Schakel alle filters uit", "isClosed": "Deze nota is gesloten", "isCreated": "Je kaarnota werd gemaakt!", @@ -679,7 +679,7 @@ "li3": "neem een foto van de bloesems", "li4": "neem een foto van het fruit" }, - "loadingWikidata": "Informatie over {species} aan het laden", + "loadingWikidata": "Informatie over {species} aan het laden …", "matchPercentage": "{match}% overeenkomst", "overviewIntro": "De AI van plantnet.org denkt dat het om één van deze soorten gaat.", "overviewTitle": "Gedetecteerd plantensoorten", @@ -696,7 +696,7 @@ }, "privacy": { "editingIntro": "Wanneer je een wijziging maakt, wordt deze wijziging opgeslaan op OpenStreetMap. Dit is zichtbaar voor iedereen. Een wijzigingenset gemaakt met MapComplete bevat de volgende data:", - "editingOutro": "Bekijk ook de privacy-policy op OpenStreetMap.org voor gedetailleerde info. We herinneren je eraan dat je een pseudoniem of fictieve naam kan gebruiken wanneer je je registreert.", + "editingOutro": "Bekijk ook het privacybeleid op OpenStreetMap.org voor gedetailleerde info. We herinneren je eraan dat je een pseudoniem of fictieve naam kan gebruiken wanneer je je registreert.", "editingTitle": "Wanneer je wijzigingen maakt", "geodata": "Op het moment dat MapComplete je locatie krijgt, blijft deze informatie en de geschiedenis ervan lokaal op je toestel. Je locatiedata wordt nooit automatisch doorgestuurd naar waar dan ook - behalve wanneer een bepaalde functionaliteit daar expliciet om vraagt.", "geodataTitle": "Jouw locatie", @@ -713,36 +713,36 @@ "miscCookiesTitle": "Andere cookies", "surveillance": "Gezien je de privacy-policy leest, vind je privacy waarschijnlijk belangrijk - wij ook! We hebben zelfs een kaart met bewakingcamera's gemaakt. Voeg er zeker toe!", "title": "Privacyverklaring", - "tracking": "Om enig inzicht te krijgen in wie de site bezoekt, wordt er technische informatie verzameld. Dit omvat het land van waaruit je de site bezoekt, vanop welke website je doorklikte naar MapComplete, het type toestel en de schermgrootte. Een cookie wordt op het toestel geplaatst om mee te geven dat je de site eerder in de dag bezocht. De data is niet gedetailleerd genoeg om persoonlijke informatie te zijn. Er zijn enkel geaggregeerde statistieken mogelijk. Deze kunnen door iedereen bekeken worden.", + "tracking": "Om enig inzicht te krijgen in wie de site bezoekt, wordt er technische informatie verzameld. Dit omvat het land van waaruit je de site bezoekt, vanop welke website je doorklikte naar MapComplete, het type toestel en de schermgrootte. Een cookie wordt op het toestel geplaatst om mee te geven dat je de site eerder in de dag bezocht. Deze data zijn niet gedetailleerd genoeg om persoonlijke informatie te zijn. Er zijn enkel geaggregeerde statistieken mogelijk. Deze kunnen door iedereen bekeken worden.", "trackingTitle": "Statistische informatie", "whileYoureHere": "Vind je privacy belangrijk?" }, "reviews": { - "affiliated_reviewer_warning": "(Review door betrokkene)", + "affiliated_reviewer_warning": "(Recensie door betrokkene)", "attribution": "Via Mangrove Reviews", "averageRating": "Gemiddelde score van {n} sterren", - "i_am_affiliated": "Ik ben persoonlijk betrokken
Vink aan indien je de oprichter, maker, werknemer, ... of dergelijke bent", - "i_am_affiliated_explanation": "Check of je een eigenaar, maker, werknemer, ... bent.", - "no_reviews_yet": "Er zijn nog geen beoordelingen. Wees de eerste!", + "i_am_affiliated": "Ik ben persoonlijk betrokken", + "i_am_affiliated_explanation": "Vink aan als je een eigenaar, maker, werknemer … bent.", + "no_reviews_yet": "Er zijn nog geen recensies. Wees de eerste!", "non_place_review": "Eén recensie gaat niet over een plaats en wordt hier niet getoond.", "non_place_reviews": "{n} recensies gaan niet over een plaats en worden hier niet getoond.", "question": "Welke score geef je aan {title()}?", "question_opinion": "Hoe was je ervaring?", "rate": "Geef {n} sterren", "rated": "Kreeg {n} sterren", - "reviewPlaceholder": "Beschrijf je ervaring…", + "reviewPlaceholder": "Beschrijf je ervaring …", "reviewing_as": "Beoordelen als {nickname}", "reviewing_as_anonymous": "Beoordeel anoniem", - "reviews_bug": "Verwachtte je meer beoordelingen? Sommige beoordelingen worden niet getoond door een bug.", - "save": "Opslaan", - "saved": "Bedankt om je beoordeling te delen!", - "saving_review": "Opslaan...", + "reviews_bug": "Verwachtte je meer recensies? Door een programmafout worden sommige recensies niet getoond.", + "save": "Recensie opslaan", + "saved": "Bedankt om je recensie te delen!", + "saving_review": "Opslaan …", "see_all": "Bekijk al je recensies op mangrove.reviews", - "title": "{count} beoordelingen", + "title": "{count} recensies", "too_long": "Maximaal {max} tekens zijn toegestaan. Je recensie heeft {amount} tekens.", - "tos": "Als je je review publiceert, ga je akkoord met de de gebruiksvoorwaarden en privacy policy van Mangrove.reviews", + "tos": "Als je je recensie publiceert, ga je akkoord met de de gebruiksvoorwaarden en het privacybeleid van Mangrove.reviews", "your_reviews": "Je vorige recensies", - "your_reviews_empty": "We konden je eerdere beoordelingen niet vinden" + "your_reviews_empty": "We konden geen eerdere recensies van je vinden" }, "split": { "cancel": "Annuleren", diff --git a/langs/themes/nl.json b/langs/themes/nl.json index 0af50180df..47a5f89688 100644 --- a/langs/themes/nl.json +++ b/langs/themes/nl.json @@ -448,7 +448,7 @@ "title": "Onderwijs" }, "elongated_coin": { - "description": "Zoek muntpersen om uitgerokken munten te maken.", + "description": "Zoek muntpersen om uitgetrokken munten te maken.", "title": "Muntpersen" }, "etymology": { @@ -653,37 +653,8 @@ "building type": { "question": "Wat voor soort gebouw is dit?" }, - "grb-fixme": { - "mappings": { - "0": { - "then": "Geen fixme" - } - }, - "question": "Wat zegt de fixme?", - "render": "De fixme is {fixme}" - }, - "grb-housenumber": { - "mappings": { - "0": { - "then": "Geen huisnummer" - } - }, - "question": "Wat is het huisnummer?", - "render": "Het huisnummer is {addr:housenumber}" - }, - "grb-min-level": { - "question": "Hoeveel verdiepingen ontbreken?", - "render": "Dit gebouw begint maar op de {building:min_level} verdieping" - }, "grb-reference": { "render": "Werd geïmporteerd vanuit GRB, het referentienummer is {source:geometry:ref}" - }, - "grb-street": { - "question": "Wat is de straat?", - "render": "De straat is {addr:street}" - }, - "grb-unit": { - "render": "De wooneenheid-aanduiding is {addr:unit} " } } }, @@ -700,35 +671,8 @@ } } } - }, - "5": { - "override": { - "tagRenderings+": { - "0": { - "mappings": { - "0": { - "then": "Geen omliggend OSM-gebouw gevonden" - } - } - }, - "3": { - "mappings": { - "0": { - "then": "Geen omliggend OSM-gebouw gevonden. Een omliggend gebouw is nodig om dit punt als adres punt toe te voegen.
Importeer eerst de gebouwen. Vernieuw dan de pagina om losse adressen toe te voegen
" - } - }, - "render": { - "special": { - "text": "Voeg dit adres als een nieuw adrespunt toe" - } - } - } - } - } } - }, - "shortDescription": "Grb import helper tool", - "title": "GRB import helper" + } }, "guideposts": { "description": "Wegwijzers (ook wel handwijzer genoemd) zijn vaak te vinden langs officiële wandel-, fiets-, ski- of paardrijroutes om de richtingen naar verschillende bestemmingen aan te geven. Vaak zijn ze vernoemd naar een regio of plaats en geven ze de hoogte aan.\n\nDe positie van een wegwijzer kan door een wandelaar/fietser/renner/skiër worden gebruikt als bevestiging van de huidige positie, vooral als ze een gedrukte kaart zonder GPS-ontvanger gebruiken. ", @@ -1164,11 +1108,6 @@ }, "title": "Dierenartsen, hondenloopzones en andere huisdiervriendelijke plaatsen" }, - "play_forests": { - "description": "Een speelbos is een zone in een bos die vrij toegankelijk is voor spelende kinderen. Deze wordt in bossen van het Agentschap Natuur en bos altijd aangeduid met het overeenkomstige bord.", - "shortDescription": "Deze kaart toont speelbossen", - "title": "Speelbossen" - }, "playgrounds": { "description": "Op deze kaart vind je speeltuinen en kan je zelf meer informatie en foto's toevoegen", "shortDescription": "Een kaart met speeltuinen", @@ -1242,47 +1181,6 @@ "description": "Alles om te skiën", "title": "Skipistes en kabelbanen" }, - "speelplekken": { - "description": "

Welkom bij de Groendoener!

De Zuidrand dat is spelen, ravotten, chillen, wandelen,… in het groen. Meer dan 200 grote en kleine speelplekken liggen er in parken, in bossen en op pleintjes te wachten om ontdekt te worden. De verschillende speelplekken werden getest én goedgekeurd door kinder- en jongerenreporters uit de Zuidrand. Met leuke challenges dagen de reporters jou uit om ook op ontdekking te gaan. Klik op een speelplek op de kaart, bekijk het filmpje en ga op verkenning!

Het project groendoener kadert binnen het strategisch project Beleefbare Open Ruimte in de Antwerpse Zuidrand en is een samenwerking tussen het departement Leefmilieu van provincie Antwerpen, Sportpret vzw, een OpenStreetMap-België Consultent en Createlli vzw. Het project kwam tot stand met steun van Departement Omgeving van de Vlaamse Overheid.
", - "layers": { - "6": { - "name": "Wandelroutes van provincie Antwerpen", - "tagRenderings": { - "walk-description": { - "render": "

Korte beschrijving:

{description}" - }, - "walk-length": { - "render": "Deze wandeling is {_length:km}km lang" - }, - "walk-operator": { - "question": "Wie beheert deze wandeling en plaatst dus de signalisatiebordjes?" - }, - "walk-operator-email": { - "question": "Naar wie kan men emailen bij problemen rond signalisatie?", - "render": "Bij problemen met signalisatie kan men emailen naar {operator:email}" - }, - "walk-type": { - "mappings": { - "0": { - "then": "Dit is een internationale wandelroute" - }, - "1": { - "then": "Dit is een nationale wandelroute" - }, - "2": { - "then": "Dit is een regionale wandelroute" - }, - "3": { - "then": "Dit is een lokale wandelroute" - } - } - } - } - } - }, - "shortDescription": "Speelplekken in de Antwerpse Zuidrand", - "title": "Welkom bij de groendoener!" - }, "sport_pitches": { "description": "Een sportveld is een ingerichte plaats met infrastructuur om een sport te beoefenen", "shortDescription": "Deze kaart toont sportvelden", @@ -1403,10 +1301,6 @@ }, "title": "Straatverlichting" }, - "street_lighting_assen": { - "description": "Op deze kaart vind je alles over straatlantaarns + een dataset van Assen", - "title": "Straatverlichting - Assen" - }, "surveillance": { "description": "Op deze open kaart kan je bewakingscamera's vinden.", "shortDescription": "Bewakingscameras en dergelijke", @@ -1520,13 +1414,9 @@ "description": "Kaart met afvalbakken en recyclingfaciliteiten.", "title": "Afval" }, - "waste_assen": { - "description": "Kaart met afvalbakken en recyclingfaciliteiten + een dataset voor Assen.", - "title": "Afval - Assen" - }, "waste_basket": { "description": "Op deze kaart vind je afvalbakken bij jou in de buurt. Als er een afvalbak ontbreekt op deze kaart, kun je deze zelf toevoegen", "shortDescription": "Een kaart met vuilnisbakken", "title": "Vuilnisbakken" } -} \ No newline at end of file +} diff --git a/langs/zh_Hant.json b/langs/zh_Hant.json index 3a0c55d15b..389b736ef6 100644 --- a/langs/zh_Hant.json +++ b/langs/zh_Hant.json @@ -159,7 +159,7 @@ "stillLoading": "目前仍在載入資料,請稍後再來新增圖徵。", "title": "新增新的圖徵", "wrongType": "這個圖徵並非節點也不是路徑,因此無法匯入", - "zoomInFurther": "放大來新增新的圖徵", + "zoomInFurther": "如果你想要新增新的圖徵你需要先放大", "zoomInMore": "再放大來匯入這一圖徵" }, "apply_button": { @@ -175,6 +175,7 @@ "donate": "財務上支援 MapComplete", "editId": "開啟開放街圖線上編輯器", "editJosm": "採用 JOSM 編輯", + "emailCreators": "寄 email 給創作者", "followOnMastodon": "在 Mastodon 追蹤 MapComplete", "gotoSourceCode": "檢視原始碼", "iconAttribution": { @@ -182,6 +183,7 @@ }, "josmNotOpened": "無法連到 JOSM,請確認 JOSM 已經開啟並且啟用遠端控制選項", "josmOpened": "已經開啟 JOSM", + "madeBy": "由{author}製作", "mapContributionsBy": "目前檢視的資料由 {contributors} 貢獻編輯", "mapContributionsByAndHidden": "目前顯到的資料是由 {contributors} 和其他 {hiddenCount} 位貢獻者編輯貢獻", "mapillaryHelp": "線上服務 Mapillary 能夠以開放授權提供收集到的街景照片。貢獻者能夠採用 Mapillary 照片來改進開放街圖", @@ -189,11 +191,14 @@ "openMapillary": "開啟 Mapillary", "openOsmcha": "請見 {theme} 的最新編輯", "openOsmchaLastWeek": "檢視最近 7 天的編輯", + "openPanoramax": "在這邊開啟 Panoramax", "openThemeDocumentation": "開啟專題地圖 {name} 的文件", "seeOnMapillary": "在 Mapillary 觀看這張影像", "themeBy": "由 {author} 維護主題", "title": "版權與署名", - "translatedBy": "MapComplete 由 {contributors} 翻譯,而且還有 {hiddenCount} 更多貢獻者" + "translatedBy": "MapComplete 由 {contributors} 翻譯,而且還有 {hiddenCount} 更多貢獻者", + "panoramaxHelp": "Panoramax 是收集街景照片的線上服務,並且以自由授權釋出。貢獻者能夠使用這些照片來改進開放街圖", + "panoramaxLicenseCCBYSA": "你的圖片會以 CC-BY-SA 釋出 - 每個人都能夠在提及你名字的情形下再利用你的圖片" }, "back": "返回", "backToIndex": "回到所有主題地圖的總覽頁面", @@ -236,7 +241,8 @@ }, "title": "下載", "toMuch": "有很多圖徵可以下載了", - "uploadGpx": "上傳軌跡到開放街圖" + "uploadGpx": "上傳軌跡到開放街圖", + "downloadImage": "下載圖片" }, "enableGeolocationForSafari": "你沒有看到要求地理位置權限的跳出視窗?", "enableGeolocationForSafariLink": "學習如何在設定當中啟用地理位置權限", @@ -246,7 +252,8 @@ "examples": "例子", "filterPanel": { "disableAll": "關閉所有", - "enableAll": "啟用所有" + "enableAll": "啟用所有", + "allTypes": "所有類型" }, "geopermissionDenied": "使用地理位置要求已經被拒絕", "histogram": { @@ -258,7 +265,8 @@ "jumpToLocation": "到你目前的位置", "menu": "選單", "zoomIn": "放大", - "zoomOut": "縮小" + "zoomOut": "縮小", + "locationNotAvailable": "無法取得 GPS 位置,裝置有取得位置資訊還是在隧道內?" }, "layerSelection": { "title": "選擇圖層", @@ -279,8 +287,13 @@ "logout": "登出", "mappingsAreHidden": "有些選項已經隱藏,搜尋來顯示更多選項。", "menu": { + "aboutCurrentThemeTitle": "關於地圖", "aboutMapComplete": "關於 MapComplete", - "filter": "篩選資料" + "filter": "篩選資料", + "moreUtilsTitle": "探索更多", + "openHereDifferentApp": "在其他應用程式開啟目前位置", + "showIntroduction": "顯示指引", + "title": "選單" }, "morescreen": { "createYourOwnTheme": "從零開始建立你的 MapComplete 主題", @@ -346,18 +359,39 @@ "skippedMultiple": "你跳過 {skipped} 問題", "skippedOne": "你跳過一個問題" }, + "questions": { + "disable": "不要再問這個問題", + "disabledIntro": "你關閉一些類型的問題,要再次啟用問題,請在這邊點一下", + "disabledTitle": "關閉問題", + "enable": "針對所有問題啟用", + "noneDisabled": "如果你沒有對特定問題有興趣的話,請關閉。要關閉問題,請按右上角的三個點然後選擇'關閉'" + }, "removeLocationHistory": "刪除位置歷史", "retry": "重試", "returnToTheMap": "回到地圖", "save": "儲存", "screenToSmall": "在新視窗中開啟 {theme}", "search": { - "error": "有狀況發生了…", - "nothing": "沒有找到…", + "error": "有狀況發生了。", + "nothing": "沒有找到。", + "recents": "最近看到的地方", "search": "搜尋地點", - "searching": "搜尋中…" + "searching": "搜尋中…", + "editSearchSyncSettings": "編輯同步設定", + "editThemeSync": "編輯同步設定", + "instructions": "使用搜尋欄位來搜尋位置、篩選或是其他主題地圖", + "locations": "位置", + "nMoreFilters": "{n} 更多", + "nothingFor": "尋找 {term} 沒有結果", + "otherMaps": "其他地圖", + "pickFilter": "選擇篩選", + "recentThemes": "最近觀看的地圖", + "activeFilters": "啟用篩選", + "clearFilters": "清除篩選", + "deleteSearchHistory": "刪除位置歷史", + "deleteThemeHistory": "刪除先前觀看的主題" }, - "searchAnswer": "搜尋選項…", + "searchAnswer": "搜尋選項", "seeIndex": "查看所有專題地圖的概覽", "share": "分享", "sharescreen": { @@ -485,7 +519,8 @@ "readMore": "閱讀剩下的條目內容", "searchToShort": "你的搜尋檢索太短了,請輸入長一點的文字", "searchWikidata": "在 Wikidata 搜尋" - } + }, + "clearPendingChanges": "清除待處理的變動" }, "hotkeyDocumentation": { "action": "行動", @@ -510,7 +545,7 @@ "translationMode": "啟用翻譯模組的開關" }, "image": { - "addPicture": "新增圖片", + "addPicture": "照相", "doDelete": "移除圖片", "isDeleted": "已刪除", "nearby": { @@ -521,9 +556,30 @@ "seeNearby": "瀏覽與連結附近圖片", "title": "附近的街景影像" }, + "panoramax": { + "deletionRequested": "報告已經送出,管理員不久會觀看", + "freeform": "還有其他相關資訊嗎?", + "otherFreeform": "請指明為何需要移除這一圖片:", + "placeholder": "請解釋為何這圖片需要刪除", + "report": { + "copyright": "圖片內含有版權內容", + "inappropriate": "這圖片不洽當(有裸露、仇恨內容或是並非街景)", + "other": "如果是其他原因請指明", + "privacy": "圖片顯示私人產權" + }, + "requestDeletion": "請求刪除圖片", + "title": "為什麼要永久刪除圖片?" + }, "pleaseLogin": "請登入以新增圖片", + "processing": "伺服器正在處理你的圖片", "respectPrivacy": "請別照人像或是車牌,不要上傳 Google 地圖、Google 街景或其他受版權保護的資料來源。", + "selectFile": "從你的裝置選取圖片", "toBig": "{actual_size} 因此照片太大,請使用最大 {max_size} 的照片", + "unlink": { + "button": "解除連結圖片", + "explanation": "圖片解除連結之後,這個圖片不會與這個物件一同顯示。但仍會在附近圖片或其他物件時顯示。", + "title": "解除連結這一圖片?" + }, "upload": { "failReasons": "你也許已經失去網路連線", "failReasonsAdvanced": "另一個方式,請確認瀏覽器與外掛沒有擋掉第三方 API。", @@ -533,10 +589,11 @@ "someFailed": "抱歉,我們無法上傳 {count} 影像", "uploading": "{count} 影像已經上傳…" }, + "noBlur": "圖片不會模糊化,請不要照人", "one": { "done": "你的影像已經成功上傳,謝謝你!", "failed": "抱歉,我們無法上傳你的影像", - "retrying": "你的影像再次上傳 …", + "retrying": "再次上傳你的影像中 …", "uploading": "你的影像已經上傳了…" } }, @@ -558,6 +615,9 @@ "logIn": "登入來看其他你先前查看的主題", "title": "MapComplete" }, + "inspector": { + "menu": "檢核貢獻者" + }, "move": { "cancel": "選擇不同的原因", "cannotBeMoved": "這個圖徵無法移動。", @@ -575,7 +635,8 @@ "pointIsMoved": "這個點已經被移動了", "reasons": { "reasonInaccurate": "位置不準確,誤差幾公尺", - "reasonRelocation": "你的物件已經移動到完全不同的位置" + "reasonRelocation": "你的物件已經移動到完全不同的位置", + "reasonSnapTo": "這應該移到{name}" }, "zoomInFurther": "放更大來確認移動" }, @@ -631,6 +692,11 @@ "takeImages": "拍攝樹木照片來自動偵測樹木類型", "tryAgain": "選擇不同物種" }, + "preset_type": { + "question": "這個物件屬於什麼類型?", + "typeDescription": "這是 {title}.
{description}
", + "typeTitle": "這是 {title}" + }, "privacy": { "editingIntro": "當你對地圖變動時,這些變動會存在開放街圖並且是公開給所有人。採用 MapComplete 的編輯變動包括以下資料:", "editingOutro": "請參考OpenStreetMap.org的隱私政策來取得更多資訊。我們也提醒你註冊帳號時能夠採用假名。", @@ -693,6 +759,14 @@ "activateButton": "協助翻譯 MapComplete", "missing": "{count} 未翻譯字串" }, + "unknown": { + "clear": "清除答案", + "keep": "保留答案", + "markUnknown": "標示為未知", + "removedKeys": "下列鍵會被移除:", + "title": "要標記為未知嗎?", + "explanation": "如果答案不正確但實際數值不清楚的話,則清除這一些資訊。不會清除其他資訊。" + }, "userinfo": { "notLoggedIn": "你已經登出了" }, @@ -765,12 +839,17 @@ "tooLong": "文字太長了,最多允許 255 字元,你現在還有 {count} 字元。", "url": { "description": "連接到網站", - "feedback": "這不是有效的網址" + "feedback": "這不是有效的網址", + "aggregator": "{host} 是第三方網站,如果可能請搜尋官方網站。", + "spamSite": "{host} 被視為低品質網站,並不被允許使用。" }, "wikidata": { "description": "Wikidata 編號", "empty": "請輸入一些 Wikidata 項目", "startsWithQ": "維基數據編號以 Q 開頭後面接數字" + }, + "regex": { + "description": "正規表示式" } } -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index 5b2e0150a2..029425b49d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mapcomplete", - "version": "0.47.11", + "version": "0.47.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mapcomplete", - "version": "0.47.11", + "version": "0.47.13", "license": "GPL-3.0-or-later", "dependencies": { "@capacitor/android": "^6.1.2", @@ -9001,9 +9001,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001684", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", - "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", + "version": "1.0.30001689", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001689.tgz", + "integrity": "sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g==", "dev": true, "funding": [ { @@ -29421,9 +29421,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001684", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", - "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", + "version": "1.0.30001689", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001689.tgz", + "integrity": "sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g==", "dev": true }, "canonicalize": { diff --git a/package.json b/package.json index bae50114ba..2b7b105071 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mapcomplete", - "version": "0.47.11", + "version": "0.47.13", "repository": "https://github.com/pietervdvn/MapComplete", "description": "A small website to edit OSM easily", "bugs": "https://github.com/pietervdvn/MapComplete/issues", @@ -59,7 +59,7 @@ "https://maps.mail.ru/osm/tools/overpass/api/interpreter": "Blocked by firefox strict tracking protection as 'tracking'", "https://overpass.openstreetmap.ru/cgi/interpreter": "Broken as of 2024-09-05, might be a glitch" }, - "country_coder_host": "https://raw.githubusercontent.com/pietervdvn/MapComplete-data/main/latlon2country", + "country_coder_host": "https://countrycoder.mapcomplete.org", "nominatimEndpoint": "https://geocoding.geofabrik.de/b75350b1cfc34962ac49824fe5b582dc/", "#photonEndpoint": "`api/` or `reverse/` will be appended by the code", "photonEndpoint": "https://photon.komoot.io/", diff --git a/public/css/index-tailwind-output.css b/public/css/index-tailwind-output.css index 1ced5b6da7..3da0d51cfa 100644 --- a/public/css/index-tailwind-output.css +++ b/public/css/index-tailwind-output.css @@ -1324,20 +1324,20 @@ input[type="range"].range-lg::-moz-range-thumb { margin: 0px; } -.m-8 { - margin: 2rem; +.m-1 { + margin: 0.25rem; } .m-2 { margin: 0.5rem; } -.m-0\.5 { - margin: 0.125rem; +.m-8 { + margin: 2rem; } -.m-1 { - margin: 0.25rem; +.m-0\.5 { + margin: 0.125rem; } .m-11 { @@ -1698,14 +1698,14 @@ input[type="range"].range-lg::-moz-range-thumb { height: 6rem; } -.h-screen { - height: 100vh; -} - .h-full { height: 100%; } +.h-screen { + height: 100vh; +} + .h-fit { height: -webkit-fit-content; height: -moz-fit-content; @@ -2028,6 +2028,10 @@ input[type="range"].range-lg::-moz-range-thumb { width: max-content; } +.w-48 { + width: 12rem; +} + .w-auto { width: auto; } @@ -2121,10 +2125,6 @@ input[type="range"].range-lg::-moz-range-thumb { width: 0.25rem; } -.w-48 { - width: 12rem; -} - .w-9\/12 { width: 75%; } @@ -2244,14 +2244,14 @@ input[type="range"].range-lg::-moz-range-thumb { flex: 1 1 0%; } -.flex-shrink { - flex-shrink: 1; -} - .flex-shrink-0 { flex-shrink: 0; } +.flex-shrink { + flex-shrink: 1; +} + .shrink-0 { flex-shrink: 0; } @@ -2509,6 +2509,10 @@ input[type="range"].range-lg::-moz-range-thumb { row-gap: 0.25rem; } +.gap-x-2 { + column-gap: 0.5rem; +} + .gap-y-2 { row-gap: 0.5rem; } @@ -2517,10 +2521,6 @@ input[type="range"].range-lg::-moz-range-thumb { row-gap: 1rem; } -.gap-x-2 { - column-gap: 0.5rem; -} - .gap-x-1 { column-gap: 0.25rem; } @@ -3045,11 +3045,6 @@ input[type="range"].range-lg::-moz-range-thumb { border-color: rgb(107 114 128 / var(--tw-border-opacity)); } -.border-subtle { - --tw-border-opacity: 1; - border-color: rgb(219 234 254 / var(--tw-border-opacity)); -} - .border-black { --tw-border-opacity: 1; border-color: rgb(0 0 0 / var(--tw-border-opacity)); @@ -3065,6 +3060,11 @@ input[type="range"].range-lg::-moz-range-thumb { border-color: rgb(209 213 219 / var(--tw-border-opacity)); } +.border-gray-600 { + --tw-border-opacity: 1; + border-color: rgb(75 85 99 / var(--tw-border-opacity)); +} + .border-gray-800 { --tw-border-opacity: 1; border-color: rgb(31 41 55 / var(--tw-border-opacity)); @@ -4045,18 +4045,14 @@ input[type="range"].range-lg::-moz-range-thumb { padding-bottom: 0.75rem; } -.pl-4 { - padding-left: 1rem; +.pt-2 { + padding-top: 0.5rem; } .pr-4 { padding-right: 1rem; } -.pt-2 { - padding-top: 0.5rem; -} - .pl-1 { padding-left: 0.25rem; } @@ -5067,6 +5063,8 @@ input[type="range"].range-lg::-moz-range-thumb { @font-face { font-family: "Source Sans Pro"; + /*This path might seem incorrect. However, 'index.css' will be compiled and placed in 'public/css', from where this path _is_ correct*/ + src: url("../assets/fonts/source-sans-pro.regular.ttf") format("woff"); } diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index a61aab92b9..b62a5e533e 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -643,14 +643,14 @@ class LayerOverviewUtils extends Script { LayerOverviewUtils.layerPath + sharedLayerPath.substring(sharedLayerPath.lastIndexOf("/")) if (!forceReload && !this.shouldBeUpdated(sharedLayerPath, targetPath)) { - try{ + try { const sharedLayer = JSON.parse(readFileSync(targetPath, "utf8")) sharedLayers.set(sharedLayer.id, sharedLayer) skippedLayers.push(sharedLayer.id) ScriptUtils.erasableLog("Loaded " + sharedLayer.id) continue - }catch (e) { - throw "Could not parse "+targetPath+" : "+e + } catch (e) { + throw "Could not parse " + targetPath + " : " + e } } } diff --git a/scripts/generateLayouts.ts b/scripts/generateLayouts.ts index e2c03c16ce..0902dee33c 100644 --- a/scripts/generateLayouts.ts +++ b/scripts/generateLayouts.ts @@ -341,6 +341,7 @@ class GenerateLayouts extends Script { "https://pietervdvn.goatcounter.com", "https://api.panoramax.xyz", "https://panoramax.mapcomplete.org", + "https://data.velopark.be" ].concat(...(await this.eliUrls())) SpecialVisualizations.specialVisualizations.forEach((sv) => { diff --git a/scripts/single_build.sh b/scripts/single_build.sh index 49677134b3..ab10c56189 100755 --- a/scripts/single_build.sh +++ b/scripts/single_build.sh @@ -1,16 +1,26 @@ +#! /bin/bash + +# Creates the build for just a single theme +export NODE_OPTIONS="--max-old-space-size=12000" THEME=$1 -npm run generate:layouts if [ $# -eq 0 ] then echo "No arguments given. Expected a themename" fi -pwd -if [ -f "$THEME.html" ] +npm run prep:layeroverview +npm run refresh:layeroverview +npm run generate:layeroverview +npm run test +npm run generate:layouts + +if [[ -f "$THEME.html" ]] then echo "$THEME.html found." else - echo "Theme '$THEME' not found. Did you run 'npm run generate:layouts'?" + pwd + ls + echo "Theme '$THEME' not found. Did you run 'npm run generate:layouts'? Is the theme name correct?" exit 1 fi @@ -33,14 +43,10 @@ sed -i "s/input,/input: {index:\".\/index.html\", land: \".\/land.html\"}/" vite sed -i "s/\/\/ LAYOUT.ADD_CONFIG/layout.enableMoreQuests = false/" index_"$THEME".ts - - export NODE_OPTIONS=--max-old-space-size=20000 vite build --sourcemap --config vite_single.config.js || { echo 'Vite build failed' ; exit 1; } - - cp -r assets/layers/ dist/assets/layers/ cp -r assets/themes/ dist/assets/themes/ cp -r assets/svg/ dist/assets/svg/ @@ -69,7 +75,6 @@ pwd ls . for f in * do - # echo ">>>" $f case "$f" in *$THEME* ) echo "Keeping $f" @@ -92,37 +97,8 @@ fi npm run clean echo "BUILD COMPLETED" - -if [ $# -eq 2 ] -then - echo "DEPLOY TO $2" - - if [ -f "$2"/CNAME ] - then - CNAME=$(cat "$2"/CNAME) - echo "Found a CNAME" - fi - echo "Assuming github pages, add \".nojekyll\"" - touch $2/.nojekyll - echo $CNAME > $2/CNAME - rm -r "$2/assets/*" - echo " ! Don't forget to add `https://$CNAME/land.html` to the Redirect URIs on https://www.openstreetmap.org/oauth2/applications/" - cp -r "dist_$THEME/"* "$2"/ - - if [ -d "$2"/.git ] - then - cd $2 - git add * - git commit -m "Add new version of MapComplete with single-page build of $THEME" - git push - cd - - fi - rm -r "dist_$THEME" -else - echo "BUILD COMPLETED" - echo "On what domain will you deploy?" - echo " ! Don't forget to add `https://yourdomain.tld/land.html` to the Redirect URIs on https://www.openstreetmap.org/oauth2/applications/" - echo "Deploying on github pages?" - echo " 1. Don't forget to add a CNAME file (containing your domain name verbatim, without protocol)" - echo " 2 .nojekyll file (which is empty)" -fi +echo "On what domain will you deploy?" +echo " ! Don't forget to add `https://yourdomain.tld/land.html` to the Redirect URIs on https://www.openstreetmap.org/oauth2/applications/" +echo "Deploying on github pages?" +echo " 1. Don't forget to add a CNAME file (containing your domain name verbatim, without protocol)" +echo " 2 .nojekyll file (which is empty)" diff --git a/scripts/velopark/veloParkToGeojson.ts b/scripts/velopark/veloParkToGeojson.ts index c5dc7fb9dc..1887b5fa47 100644 --- a/scripts/velopark/veloParkToGeojson.ts +++ b/scripts/velopark/veloParkToGeojson.ts @@ -2,12 +2,13 @@ import Script from "../Script" import fs from "fs" import LinkedDataLoader from "../../src/Logic/Web/LinkedDataLoader" import { Utils } from "../../src/Utils" -import { Feature } from "geojson" +import { Feature, FeatureCollection, Point } from "geojson" import { BBox } from "../../src/Logic/BBox" import { Overpass } from "../../src/Logic/Osm/Overpass" import { RegexTag } from "../../src/Logic/Tags/RegexTag" import { ImmutableStore } from "../../src/Logic/UIEventSource" import Constants from "../../src/Models/Constants" +import { MaprouletteStatus } from "../../src/Logic/Maproulette" class VeloParkToGeojson extends Script { constructor() { @@ -44,12 +45,15 @@ class VeloParkToGeojson extends Script { const linkedData = await LinkedDataLoader.fetchVeloparkEntry(url) const allVelopark: Feature[] = [] + if (linkedData.length > 1) { + console.log("Detected multiple sections in:", url) + } for (const sectionId in linkedData) { const sectionInfo = linkedData[sectionId] if (Object.keys(sectionInfo).length === 0) { console.warn("No result for", url) } - if (!sectionInfo.geometry?.coordinates) { + if (!sectionInfo.geometry?.["coordinates"]) { throw "Invalid properties!" } allVelopark.push(sectionInfo) @@ -62,8 +66,8 @@ class VeloParkToGeojson extends Script { console.log("Downloading velopark data") // Download data for NIS-code 1000. 1000 means: all of belgium const url = "https://www.velopark.be/api/parkings/1000" - const allVeloparkRaw: { url: string }[] = <{ url: string }[]>await Utils.downloadJson(url) - + const allVeloparkRaw = await Utils.downloadJson<{ url: string }[]>(url) + // Example multi-entry: https://data.velopark.be/data/Stad-Izegem_IZE_015 let failed = 0 console.log("Got", allVeloparkRaw.length, "items") const allVelopark: Feature[] = [] @@ -84,6 +88,7 @@ class VeloParkToGeojson extends Script { } }) ) + console.log("Batch complete:", i) } console.log( "Fetching data done, got ", @@ -135,7 +140,47 @@ class VeloParkToGeojson extends Script { } } + private static async fetchMapRouletteClosedItems() { + const challenges = ["https://maproulette.org/api/v2/challenge/view/43282"] + const solvedRefs: Set = new Set() + for (const url of challenges) { + const data = await Utils.downloadJson< + FeatureCollection< + Point, + { + mr_taskId: string + "ref:velopark": string + mr_taskStatus: MaprouletteStatus + mr_responses: string | undefined + } + > + >(url) + for (const challenge of data.features) { + const status = challenge.properties.mr_taskStatus + const isClosed = + status === "Fixed" || + status === "False_positive" || + status === "Already fixed" || + status === "Too_Hard" || + status === "Deleted" + if (isClosed) { + const ref = challenge.properties["ref:velopark"] + solvedRefs.add(ref) + } + } + } + console.log("Detected", solvedRefs, "as closed on mapRoulette") + return solvedRefs + } + + /** + * Creates an extra version where all bicycle parkings which are already linked are removed. + * Fetches the latest OSM-data from overpass + * @param allVelopark + * @private + */ private static async createDiff(allVelopark: Feature[]) { + console.log("Creating diff...") const bboxBelgium = new BBox([ [2.51357303225, 49.5294835476], [6.15665815596, 51.4750237087], @@ -160,21 +205,51 @@ class VeloParkToGeojson extends Script { ) VeloParkToGeojson.exportGeojsonTo("velopark_nonsynced", features) + const synced = await this.fetchMapRouletteClosedItems() + const featuresMoreFiltered = features.filter( + (f) => !synced.has(f.properties["ref:velopark"]) + ) + VeloParkToGeojson.exportGeojsonTo("velopark_nonsynced_nonclosed", featuresMoreFiltered) + + const featuresMoreFilteredFailed = features.filter((f) => + synced.has(f.properties["ref:velopark"]) + ) + VeloParkToGeojson.exportGeojsonTo( + "velopark_nonsynced_human_import_failed", + featuresMoreFilteredFailed + ) + const allProperties = new Set() - for (const feature of features) { - Object.keys(feature).forEach((k) => allProperties.add(k)) + for (const feature of featuresMoreFiltered) { + Object.keys(feature.properties).forEach((k) => allProperties.add(k)) } allProperties.delete("ref:velopark") - for (const feature of features) { + for (const feature of featuresMoreFiltered) { allProperties.forEach((k) => { - delete feature[k] + if (k === "ref:velopark") { + return + } + delete feature.properties[k] }) } - this.exportGeojsonTo("velopark_nonsynced_id_only", features) + this.exportGeojsonTo("velopark_nonsynced_nonclosed_id_only", featuresMoreFiltered) + } + + public static async findMultiSection(): Promise { + const url = "https://www.velopark.be/api/parkings/1000" + const raw = await Utils.downloadJson<{ "@graph": {}[]; url: string }[]>(url) + const multiEntries: string[] = [] + for (const entry of raw) { + if (entry["@graph"].length > 1) { + multiEntries.push(entry.url) + } + } + return multiEntries } async main(): Promise { + // const multiEntries = new Set(await VeloParkToGeojson.findMultiSection()) const allVelopark = VeloParkToGeojson.loadFromFile() ?? (await VeloParkToGeojson.downloadData()) console.log("Got", allVelopark.length, " items") diff --git a/src/Logic/Actors/GeoLocationHandler.ts b/src/Logic/Actors/GeoLocationHandler.ts index 1909daa526..246788dbb7 100644 --- a/src/Logic/Actors/GeoLocationHandler.ts +++ b/src/Logic/Actors/GeoLocationHandler.ts @@ -8,10 +8,13 @@ import { FeatureSource, WritableFeatureSource } from "../FeatureSource/FeatureSo import { LocalStorageSource } from "../Web/LocalStorageSource" import { GeoOperations } from "../GeoOperations" import { OsmTags } from "../../Models/OsmFeature" -import StaticFeatureSource from "../FeatureSource/Sources/StaticFeatureSource" +import StaticFeatureSource, { + WritableStaticFeatureSource, +} from "../FeatureSource/Sources/StaticFeatureSource" import { MapProperties } from "../../Models/MapProperties" import { Orientation } from "../../Sensors/Orientation" +;("use strict") /** * The geolocation-handler takes a map-location and a geolocation state. * It'll move the map as appropriate given the state of the geolocation-API @@ -43,13 +46,13 @@ export default class GeoLocationHandler { public readonly mapHasMoved: UIEventSource = new UIEventSource< Date | undefined >(undefined) - private readonly selectedElement: UIEventSource + private readonly selectedElement: UIEventSource private readonly mapProperties?: MapProperties private readonly gpsLocationHistoryRetentionTime?: UIEventSource constructor( geolocationState: GeoLocationState, - selectedElement: UIEventSource, + selectedElement: UIEventSource, mapProperties?: MapProperties, gpsLocationHistoryRetentionTime?: UIEventSource ) { @@ -59,13 +62,12 @@ export default class GeoLocationHandler { this.mapProperties = mapProperties this.gpsLocationHistoryRetentionTime = gpsLocationHistoryRetentionTime // Did an interaction move the map? - let self = this - let initTime = new Date() - mapLocation.addCallbackD((_) => { + const initTime = new Date() + mapLocation.addCallbackD(() => { if (new Date().getTime() - initTime.getTime() < 250) { return } - self.mapHasMoved.setData(new Date()) + this.mapHasMoved.setData(new Date()) return true // Unsubscribe }) @@ -76,12 +78,12 @@ export default class GeoLocationHandler { this.mapHasMoved.setData(new Date()) } - this.geolocationState.currentGPSLocation.addCallbackAndRunD((_) => { + this.geolocationState.currentGPSLocation.addCallbackAndRunD(() => { const timeSinceLastRequest = (new Date().getTime() - geolocationState.requestMoment.data?.getTime() ?? 0) / 1000 if (!this.mapHasMoved.data) { // The map hasn't moved yet; we received our first coordinates, so let's move there! - self.MoveMapToCurrentLocation() + this.MoveMapToCurrentLocation() } if ( timeSinceLastRequest < Constants.zoomToLocationTimeout && @@ -90,12 +92,12 @@ export default class GeoLocationHandler { geolocationState.requestMoment.data?.getTime()) ) { // still within request time and the map hasn't moved since requesting to jump to the current location - self.MoveMapToCurrentLocation() + this.MoveMapToCurrentLocation() } if (!this.geolocationState.allowMoving.data) { // Jup, the map is locked to the bound location: move automatically - self.MoveMapToCurrentLocation(0) + this.MoveMapToCurrentLocation(0) return } }) @@ -183,7 +185,7 @@ export default class GeoLocationHandler { } private initUserLocationTrail() { - const features = LocalStorageSource.getParsed("gps_location_history", []) + const features = LocalStorageSource.getParsed[]>("gps_location_history", []) const now = new Date().getTime() features.data = features.data.filter((ff) => { if (ff.properties === undefined) { @@ -230,7 +232,7 @@ export default class GeoLocationHandler { features.ping() }) - this.historicalUserLocations = new StaticFeatureSource(features) + this.historicalUserLocations = new WritableStaticFeatureSource>(features) const asLine = features.map((allPoints) => { if (allPoints === undefined || allPoints.length < 2) { diff --git a/src/Logic/Actors/InitialMapPositioning.ts b/src/Logic/Actors/InitialMapPositioning.ts index d61ab3803d..a075735219 100644 --- a/src/Logic/Actors/InitialMapPositioning.ts +++ b/src/Logic/Actors/InitialMapPositioning.ts @@ -4,10 +4,12 @@ import { LocalStorageSource } from "../Web/LocalStorageSource" import { QueryParameters } from "../Web/QueryParameters" import Hash from "../Web/Hash" import OsmObjectDownloader from "../Osm/OsmObjectDownloader" -import { OsmObject } from "../Osm/OsmObject" import Constants from "../../Models/Constants" import { Utils } from "../../Utils" import { GeoLocationState } from "../State/GeoLocationState" +import { OsmConnection } from "../Osm/OsmConnection" + +;("use strict") /** * This actor is responsible to set the map location. @@ -25,7 +27,11 @@ export default class InitialMapPositioning { public location: UIEventSource<{ lon: number; lat: number }> public useTerrain: Store - constructor(layoutToUse: ThemeConfig, geolocationState: GeoLocationState) { + constructor( + layoutToUse: ThemeConfig, + geolocationState: GeoLocationState, + osmConnection: OsmConnection + ) { function localStorageSynced( key: string, deflt: number, @@ -47,8 +53,6 @@ export default class InitialMapPositioning { return src } - const initialHash = Hash.hash.data - // -- Location control initialization this.zoom = localStorageSynced( "z", @@ -72,6 +76,7 @@ export default class InitialMapPositioning { }) this.useTerrain = new ImmutableStore(layoutToUse.enableTerrain) + const initialHash = Hash.hash.data if (initialHash?.match(/^(node|way|relation)\/[0-9]+$/)) { // We pan to the selected element const [type, id] = initialHash.split("/") @@ -88,6 +93,16 @@ export default class InitialMapPositioning { const [lat, lon] = osmObject.centerpoint() this.location.setData({ lon, lat }) }) + } else if (layoutToUse.id === "notes" && initialHash?.match(/[0-9]+/)) { + console.log("Loading note", initialHash) + const noteId = Number(initialHash) + if (osmConnection.isLoggedIn.data) { + osmConnection.getNote(noteId).then((note) => { + const [lon, lat] = note.geometry.coordinates + console.log("Got note:", note) + this.location.set({ lon, lat }) + }) + } } else if ( Constants.GeoIpServer && lat.data === defaultLat && diff --git a/src/Logic/FeatureSource/Sources/OverpassFeatureSource.ts b/src/Logic/FeatureSource/Sources/OverpassFeatureSource.ts index f3a9a9c0c8..bb67066d83 100644 --- a/src/Logic/FeatureSource/Sources/OverpassFeatureSource.ts +++ b/src/Logic/FeatureSource/Sources/OverpassFeatureSource.ts @@ -1,4 +1,4 @@ -import { Feature } from "geojson" +import { Feature, Geometry } from "geojson" import { UpdatableFeatureSource } from "../FeatureSource" import { ImmutableStore, Store, UIEventSource } from "../../UIEventSource" import LayerConfig from "../../../Models/ThemeConfig/LayerConfig" @@ -7,6 +7,9 @@ import { Overpass } from "../../Osm/Overpass" import { Utils } from "../../../Utils" import { TagsFilter } from "../../Tags/TagsFilter" import { BBox } from "../../BBox" +import { FeatureCollection } from "@turf/turf" +import { OsmTags } from "../../../Models/OsmFeature" +;("use strict") /** * A wrapper around the 'Overpass'-object. @@ -56,17 +59,13 @@ export default class OverpassFeatureSource implements UpdatableFeatureSource { this.state = state this._isActive = options?.isActive ?? new ImmutableStore(true) this.padToZoomLevel = options?.padToTiles - const self = this this._layersToDownload = options?.ignoreZoom ? new ImmutableStore(state.layers) : state.zoom.map((zoom) => this.layersToDownload(zoom)) - state.bounds.mapD( - (_) => { - self.updateAsyncIfNeeded() - }, - [this._layersToDownload] - ) + state.bounds.mapD(() => { + this.updateAsyncIfNeeded() + }, [this._layersToDownload]) } private layersToDownload(zoom: number): LayerConfig[] { @@ -104,10 +103,11 @@ export default class OverpassFeatureSource implements UpdatableFeatureSource { /** * Download the relevant data from overpass. Attempt to use a different server if one fails; only downloads the relevant layers + * Will always attempt to download, even is 'options.isActive.data' is 'false', the zoom level is incorrect, ... * @private */ public async updateAsync(overrideBounds?: BBox): Promise { - let data: any = undefined + let data: FeatureCollection = undefined let lastUsed = 0 const start = new Date() const layersToDownload = this._layersToDownload.data @@ -116,8 +116,7 @@ export default class OverpassFeatureSource implements UpdatableFeatureSource { return } - const self = this - const overpassUrls = self.state.overpassUrl.data + const overpassUrls = this.state.overpassUrl.data if (overpassUrls === undefined || overpassUrls.length === 0) { throw "Panic: overpassFeatureSource didn't receive any overpassUrls" } @@ -140,10 +139,11 @@ export default class OverpassFeatureSource implements UpdatableFeatureSource { return undefined } this.runningQuery.setData(true) + console.trace("Overpass feature source: querying geojson") data = (await overpass.queryGeoJson(bounds))[0] } catch (e) { - self.retries.data++ - self.retries.ping() + this.retries.data++ + this.retries.ping() console.error(`QUERY FAILED due to`, e) await Utils.waitFor(1000) @@ -153,12 +153,12 @@ export default class OverpassFeatureSource implements UpdatableFeatureSource { console.log("Trying next time with", overpassUrls[lastUsed]) } else { lastUsed = 0 - self.timeout.setData(self.retries.data * 5) + this.timeout.setData(this.retries.data * 5) - while (self.timeout.data > 0) { + while (this.timeout.data > 0) { await Utils.waitFor(1000) - self.timeout.data-- - self.timeout.ping() + this.timeout.data-- + this.timeout.ping() } } } @@ -180,14 +180,14 @@ export default class OverpassFeatureSource implements UpdatableFeatureSource { timeNeeded, "seconds" ) - self.features.setData(data.features) + this.features.setData(data.features) this._lastQueryBBox = bounds this._lastRequestedLayers = layersToDownload } catch (e) { console.error("Got the overpass response, but could not process it: ", e, e.stack) } finally { - self.retries.setData(0) - self.runningQuery.setData(false) + this.retries.setData(0) + this.runningQuery.setData(false) } } diff --git a/src/Logic/FeatureSource/Sources/StaticFeatureSource.ts b/src/Logic/FeatureSource/Sources/StaticFeatureSource.ts index df1fe8f49e..9727717650 100644 --- a/src/Logic/FeatureSource/Sources/StaticFeatureSource.ts +++ b/src/Logic/FeatureSource/Sources/StaticFeatureSource.ts @@ -1,7 +1,8 @@ -import { FeatureSource } from "../FeatureSource" -import { ImmutableStore, Store } from "../../UIEventSource" +import { FeatureSource, WritableFeatureSource } from "../FeatureSource" +import { ImmutableStore, Store, UIEventSource } from "../../UIEventSource" import { Feature } from "geojson" +;("use strict") /** * A simple, read only feature store. */ @@ -30,3 +31,29 @@ export default class StaticFeatureSource implements return new StaticFeatureSource(geojson) } } + +export class WritableStaticFeatureSource + implements WritableFeatureSource +{ + public readonly features: UIEventSource = undefined + + constructor(features: UIEventSource | T[] | { features: T[] } | { features: Store }) { + if (features === undefined) { + throw "Static feature source received undefined as source" + } + + let feats: T[] | UIEventSource + + if (features["features"]) { + feats = features["features"] + } else { + feats = >features + } + + if (Array.isArray(feats)) { + this.features = new UIEventSource(feats) + } else { + this.features = feats + } + } +} diff --git a/src/Logic/FeatureSource/Sources/ThemeSource.ts b/src/Logic/FeatureSource/Sources/ThemeSource.ts index 3606015a61..40654b5acb 100644 --- a/src/Logic/FeatureSource/Sources/ThemeSource.ts +++ b/src/Logic/FeatureSource/Sources/ThemeSource.ts @@ -24,8 +24,6 @@ export default class ThemeSource extends FeatureSourceMerger { */ public readonly isLoading: Store - private readonly supportsForceDownload: UpdatableFeatureSource[] - public static readonly fromCacheZoomLevel = 15 /** @@ -44,8 +42,6 @@ export default class ThemeSource extends FeatureSourceMerger { mvtAvailableLayers: Set, fullNodeDatabaseSource?: FullNodeDatabaseSource ) { - const supportsForceDownload: UpdatableFeatureSource[] = [] - const { bounds, zoom } = mapProperties // remove all 'special' layers layers = layers.filter((layer) => layer.source !== null && layer.source !== undefined) @@ -95,7 +91,6 @@ export default class ThemeSource extends FeatureSourceMerger { ) overpassSource = ThemeSource.setupOverpass(osmLayers, bounds, zoom, featureSwitches) nonMvtSources.push(overpassSource) - supportsForceDownload.push(overpassSource) } function setIsLoading() { @@ -110,7 +105,6 @@ export default class ThemeSource extends FeatureSourceMerger { ThemeSource.setupGeojsonSource(l, mapProperties, isDisplayed(l.id)) ) - const downloadAllBounds: UIEventSource = new UIEventSource(undefined) const downloadAll = new OverpassFeatureSource( { layers: layers.filter((l) => l.isNormal()), @@ -123,6 +117,7 @@ export default class ThemeSource extends FeatureSourceMerger { }, { ignoreZoom: true, + isActive: new ImmutableStore(false), } ) @@ -135,13 +130,8 @@ export default class ThemeSource extends FeatureSourceMerger { ) this.isLoading = isLoading - supportsForceDownload.push(...geojsonSources) - supportsForceDownload.push(...mvtSources) // Non-mvt sources are handled by overpass - - this._mapBounds = mapProperties.bounds this._downloadAll = downloadAll - - this.supportsForceDownload = supportsForceDownload + this._mapBounds = mapProperties.bounds } private static setupMvtSource( diff --git a/src/Logic/GeoOperations.ts b/src/Logic/GeoOperations.ts index 2737c3e3db..e4294bc396 100644 --- a/src/Logic/GeoOperations.ts +++ b/src/Logic/GeoOperations.ts @@ -1,11 +1,10 @@ import { BBox } from "./BBox" import * as turf from "@turf/turf" -import { AllGeoJSON, booleanWithin, Coord, Lines } from "@turf/turf" +import { AllGeoJSON, booleanWithin, Coord } from "@turf/turf" import { Feature, FeatureCollection, GeoJSON, - Geometry, LineString, MultiLineString, MultiPolygon, @@ -15,6 +14,9 @@ import { } from "geojson" import { Tiles } from "../Models/TileRange" import { Utils } from "../Utils" +import { NearestPointOnLine } from "@turf/nearest-point-on-line" + +;("use strict") export class GeoOperations { private static readonly _earthRadius = 6378137 @@ -52,15 +54,21 @@ export class GeoOperations { /** * Create a union between two features */ - public static union(f0: Feature, f1: Feature): Feature | null { - return turf.union(f0, f1) + public static union( + f0: Feature, + f1: Feature + ): Feature | null { + return turf.union(f0, f1) } - public static intersect(f0: Feature, f1: Feature): Feature | null { - return turf.intersect(f0, f1) + public static intersect( + f0: Feature, + f1: Feature + ): Feature | null { + return turf.intersect(f0, f1) } - static surfaceAreaInSqMeters(feature: any) { + static surfaceAreaInSqMeters(feature: Feature): number { return turf.area(feature) } @@ -68,19 +76,31 @@ export class GeoOperations { * Converts a GeoJson feature to a point GeoJson feature * @param feature */ - static centerpoint(feature: any): Feature { - const newFeature: Feature = turf.center(feature) + static centerpoint(feature: Feature): Feature { + const newFeature: Feature = turf.center(feature) newFeature.properties = feature.properties newFeature.id = feature.id return newFeature } /** - * Returns [lon,lat] coordinates + * Returns [lon,lat] coordinates. * @param feature + * + * GeoOperations.centerpointCoordinates(undefined) // => undefined */ + static centerpointCoordinates(feature: undefined | null): undefined + static centerpointCoordinates( + feature: AllGeoJSON | GeoJSON | undefined + ): [number, number] | undefined + static centerpointCoordinates( + feature: NonNullable | NonNullable + ): NonNullable<[number, number]> static centerpointCoordinates(feature: AllGeoJSON | GeoJSON): [number, number] { - return <[number, number]>turf.center(feature).geometry.coordinates + if (feature === undefined || feature === null) { + return undefined + } + return <[number, number]>turf.center(feature).geometry.coordinates } /** @@ -132,11 +152,14 @@ export class GeoOperations { * const overlap0 = GeoOperations.calculateOverlap(line0, [polygon]); * overlap.length // => 1 */ - static calculateOverlap(feature: any, otherFeatures: any[]): { feat: any; overlap: number }[] { + static calculateOverlap( + feature: Feature, + otherFeatures: Feature[] + ): { feat: Feature; overlap: number }[] { const featureBBox = BBox.get(feature) - const result: { feat: any; overlap: number }[] = [] + const result: { feat: Feature; overlap: number }[] = [] if (feature.geometry.type === "Point") { - const coor = feature.geometry.coordinates + const coor = <[number, number]>feature.geometry.coordinates for (const otherFeature of otherFeatures) { if ( feature.properties.id !== undefined && @@ -189,7 +212,7 @@ export class GeoOperations { } if (otherFeature.geometry.type === "Point") { - if (this.inside(otherFeature, feature)) { + if (this.inside(>otherFeature, feature)) { result.push({ feat: otherFeature, overlap: undefined }) } continue @@ -255,9 +278,10 @@ export class GeoOperations { const y: number = pointCoordinate[1] if (feature.geometry.type === "MultiPolygon") { - const coordinatess = feature.geometry.coordinates + const coordinatess: [number, number][][][] = <[number, number][][][]>( + feature.geometry.coordinates + ) for (const coordinates of coordinatess) { - // @ts-ignore const inThisPolygon = GeoOperations.pointInPolygonCoordinates(x, y, coordinates) if (inThisPolygon) { return true @@ -267,24 +291,30 @@ export class GeoOperations { } if (feature.geometry.type === "Polygon") { - // @ts-ignore - return GeoOperations.pointInPolygonCoordinates(x, y, feature.geometry.coordinates) + return GeoOperations.pointInPolygonCoordinates( + x, + y, + <[number, number][][]>feature.geometry.coordinates + ) } throw "GeoOperations.inside: unsupported geometry type " + feature.geometry.type } - static lengthInMeters(feature: any) { + static lengthInMeters(feature: Feature): number { return turf.length(feature) * 1000 } - static buffer(feature: any, bufferSizeInMeter: number) { + static buffer( + feature: Feature, + bufferSizeInMeter: number + ): Feature | FeatureCollection { return turf.buffer(feature, bufferSizeInMeter / 1000, { units: "kilometers", }) } - static bbox(feature: Feature | FeatureCollection): Feature { + static bbox(feature: Feature | FeatureCollection): Feature { const [lon, lat, lon0, lat0] = turf.bbox(feature) return { type: "Feature", @@ -316,17 +346,8 @@ export class GeoOperations { public static nearestPoint( way: Feature, point: [number, number] - ): Feature< - Point, - { - index: number - dist: number - location: number - } - > { - return ( - turf.nearestPointOnLine(>way, point, { units: "kilometers" }) - ) + ): NearestPointOnLine { + return turf.nearestPointOnLine(>way, point, { units: "kilometers" }) } /** @@ -344,18 +365,32 @@ export class GeoOperations { way: Feature ): Feature { if (way.geometry.type === "Polygon") { - way = { ...way } - way.geometry = { ...way.geometry } - way.geometry.type = "LineString" - way.geometry.coordinates = (way.geometry).coordinates[0] - } else if (way.geometry.type === "MultiPolygon") { - way = { ...way } - way.geometry = { ...way.geometry } - way.geometry.type = "MultiLineString" - way.geometry.coordinates = (way.geometry).coordinates[0] + return >{ + type: "Feature", + geometry: { + type: "LineString", + coordinates: way.geometry.coordinates[0], + }, + properties: way.properties, + } } - - return way + if (way.geometry.type === "MultiPolygon") { + return >{ + type: "Feature", + geometry: { + type: "MultiLineString", + coordinates: way.geometry.coordinates[0], + }, + properties: way.properties, + } + } + if (way.geometry.type === "LineString") { + return >way + } + if (way.geometry.type === "MultiLineString") { + return >way + } + throw "Invalid geometry to create a way from this" } public static toCSV( @@ -394,9 +429,6 @@ export class GeoOperations { for (const feature of _features) { const properties = feature.properties for (const key in properties) { - if (!properties.hasOwnProperty(key)) { - continue - } addH(key) } } @@ -602,7 +634,7 @@ export class GeoOperations { * const copy = GeoOperations.removeOvernoding(feature) * expect(copy.geometry.coordinates[0]).deep.equal([[4.477944199999975,51.02783550000022],[4.477987899999996,51.027818800000034],[4.478004500000021,51.02783399999988],[4.478025499999962,51.02782489999994],[4.478079099999993,51.027873899999896],[4.47801040000006,51.027903799999955],[4.477944199999975,51.02783550000022]]) */ - static removeOvernoding(feature: any) { + static removeOvernoding(feature: Feature) { if (feature.geometry.type !== "LineString" && feature.geometry.type !== "Polygon") { throw "Overnode removal is only supported on linestrings and polygons" } @@ -613,10 +645,10 @@ export class GeoOperations { } let coordinates: [number, number][] if (feature.geometry.type === "LineString") { - coordinates = [...feature.geometry.coordinates] + coordinates = <[number, number][]>[...feature.geometry.coordinates] copy.geometry.coordinates = coordinates } else { - coordinates = [...feature.geometry.coordinates[0]] + coordinates = <[number, number][]>[...feature.geometry.coordinates[0]] copy.geometry.coordinates[0] = coordinates } @@ -663,7 +695,7 @@ export class GeoOperations { public static along(a: Coord, b: Coord, distanceMeter: number): Coord { return turf.along( - { + >{ type: "Feature", geometry: { type: "LineString", @@ -705,8 +737,8 @@ export class GeoOperations { * GeoOperations.completelyWithin(park, pond) // => false */ static completelyWithin( - feature: Feature, - possiblyEnclosingFeature: Feature + feature: Feature, + possiblyEnclosingFeature: Feature ): boolean { return booleanWithin(feature, possiblyEnclosingFeature) } @@ -1169,7 +1201,7 @@ export class GeoOperations { // Calculate the length of the intersection - let intersectionPoints = turf.lineIntersect(feature, otherFeature) + const intersectionPoints = turf.lineIntersect(feature, otherFeature) if (intersectionPoints.features.length == 0) { // No intersections. // If one point is inside of the polygon, all points are @@ -1182,7 +1214,7 @@ export class GeoOperations { return null } - let intersectionPointsArray = intersectionPoints.features.map((d) => { + const intersectionPointsArray = intersectionPoints.features.map((d) => { return d.geometry.coordinates }) @@ -1204,7 +1236,7 @@ export class GeoOperations { } } - let intersection = turf.lineSlice( + const intersection = turf.lineSlice( turf.point(intersectionPointsArray[0]), turf.point(intersectionPointsArray[1]), feature diff --git a/src/Logic/ImageProviders/ImageUploadManager.ts b/src/Logic/ImageProviders/ImageUploadManager.ts index 49c878bcbc..fafa909076 100644 --- a/src/Logic/ImageProviders/ImageUploadManager.ts +++ b/src/Logic/ImageProviders/ImageUploadManager.ts @@ -107,12 +107,15 @@ export class ImageUploadManager { * @param file a jpg file to upload * @param tagsStore The tags of the feature * @param targetKey Use this key to save the attribute under. Default: 'image' + * @param noblur if true, then the api call will indicate that the image is already blurred. The server won't apply blurring in this case + * @param feature the feature this image is about. Will be used as fallback to get the GPS-coordinates */ public async uploadImageAndApply( file: File, tagsStore: UIEventSource, targetKey: string, - noblur: boolean + noblur: boolean, + feature: Feature ): Promise { const canBeUploaded = this.canBeUploaded(file) if (canBeUploaded !== true) { @@ -130,7 +133,8 @@ export class ImageUploadManager { author, file, targetKey, - noblur + noblur, + feature ) if (!uploadResult) { return @@ -157,7 +161,7 @@ export class ImageUploadManager { blob: File, targetKey: string | undefined, noblur: boolean, - feature?: Feature, + feature: Feature, ignoreGps: boolean = false ): Promise { this.increaseCountFor(this._uploadStarted, featureId) @@ -168,9 +172,22 @@ export class ImageUploadManager { if (this._gps.data && !ignoreGps) { location = [this._gps.data.longitude, this._gps.data.latitude] } - if (location === undefined || location?.some((l) => l === undefined)) { + { feature ??= this._indexedFeatures.featuresById.data.get(featureId) - location = GeoOperations.centerpointCoordinates(feature) + if (feature === undefined) { + throw "ImageUploadManager: no feature given and no feature found in the indexedFeature. Cannot upload this image" + } + const featureCenterpoint = GeoOperations.centerpointCoordinates(feature) + if ( + location === undefined || + location?.some((l) => l === undefined) || + GeoOperations.distanceBetween(location, featureCenterpoint) > 150 + ) { + /* GPS location is either unknown or very far away from the photographed location. + * Default to the centerpoint + */ + location = featureCenterpoint + } } try { ;({ key, value, absoluteUrl } = await this._uploader.uploadImage( diff --git a/src/Logic/ImageProviders/Panoramax.ts b/src/Logic/ImageProviders/Panoramax.ts index c3ef71522f..b50e4712d9 100644 --- a/src/Logic/ImageProviders/Panoramax.ts +++ b/src/Logic/ImageProviders/Panoramax.ts @@ -130,7 +130,7 @@ export default class PanoramaxImageProvider extends ImageProvider { } public async getInfo(hash: string): Promise { - return await this.getInfoFor(hash).then((r) => this.featureToImage(r)) + return await this.getInfoFor(hash).then((r) => this.featureToImage(r)) } getRelevantUrls(tags: Record, prefixes: string[]): Store { @@ -234,8 +234,19 @@ export class PanoramaxUploader implements ImageUploader { ) { lat = exifLat lon = exifLon + if (tags?.GPSLatitudeRef?.value?.[0] === "S") { + lat *= -1 + } + if (tags?.GPSLongitudeRef?.value?.[0] === "W") { + lon *= -1 + } } - const [date, time] =( tags.DateTime.value[0] ?? tags.DateTimeOriginal.value[0] ?? tags.GPSDateStamp ?? tags["Date Created"]).split(" ") + const [date, time] = ( + tags.DateTime.value[0] ?? + tags.DateTimeOriginal.value[0] ?? + tags.GPSDateStamp ?? + tags["Date Created"] + ).split(" ") const exifDatetime = new Date(date.replaceAll(":", "-") + "T" + time) if (exifDatetime.getFullYear() === 1970) { // The data probably got reset to the epoch diff --git a/src/Logic/Maproulette.ts b/src/Logic/Maproulette.ts index 87c56c9d3f..4db0a5b01b 100644 --- a/src/Logic/Maproulette.ts +++ b/src/Logic/Maproulette.ts @@ -1,9 +1,24 @@ import Constants from "../Models/Constants" +import { SpecialVisualizationState } from "../UI/SpecialVisualization" + export interface MaprouletteTask { name: string description: string instruction: string } +export const maprouletteStatus = [ + "Open", + "Fixed", + "False_positive", + "Skipped", + "Deleted", + "Already fixed", + "Too_Hard", + "Disabled", +] as const + +export type MaprouletteStatus = (typeof maprouletteStatus)[number] + export default class Maproulette { public static readonly defaultEndpoint = "https://maproulette.org/api/v2" @@ -16,16 +31,6 @@ export default class Maproulette { public static readonly STATUS_TOO_HARD = 6 public static readonly STATUS_DISABLED = 9 - public static readonly STATUS_MEANING = { - 0: "Open", - 1: "Fixed", - 2: "False_positive", - 3: "Skipped", - 4: "Deleted", - 5: "Already fixed", - 6: "Too_Hard", - 9: "Disabled", - } public static singleton = new Maproulette() /* * The API endpoint to use @@ -59,12 +64,11 @@ export default class Maproulette { if (code === "Created") { return Maproulette.STATUS_OPEN } - for (let i = 0; i < 9; i++) { - if (Maproulette.STATUS_MEANING["" + i] === code) { - return i - } + const i = maprouletteStatus.indexOf(code) + if (i < 0) { + return undefined } - return undefined + return i } /** @@ -78,6 +82,7 @@ export default class Maproulette { async closeTask( taskId: number, status = Maproulette.STATUS_FIXED, + state: SpecialVisualizationState, options?: { comment?: string tags?: string @@ -86,13 +91,16 @@ export default class Maproulette { } ): Promise { console.log("Maproulette: setting", `${this.endpoint}/task/${taskId}/${status}`, options) + options ??= {} + const userdetails = state.osmConnection.userDetails.data + options.tags = `MapComplete MapComplete:${state.theme.id}; userid: ${userdetails?.uid}; username: ${userdetails?.name}` const response = await fetch(`${this.endpoint}/task/${taskId}/${status}`, { method: "PUT", headers: { "Content-Type": "application/json", apiKey: this.apiKey, }, - body: options !== undefined ? JSON.stringify(options) : undefined, + body: JSON.stringify(options), }) if (response.status !== 204) { console.log(`Failed to close task: ${response.status}`) diff --git a/src/Logic/Osm/Actions/LinkImageAction.ts b/src/Logic/Osm/Actions/LinkImageAction.ts index d0706062ed..eb1a645cc8 100644 --- a/src/Logic/Osm/Actions/LinkImageAction.ts +++ b/src/Logic/Osm/Actions/LinkImageAction.ts @@ -2,7 +2,7 @@ import ChangeTagAction from "./ChangeTagAction" import { Tag } from "../../Tags/Tag" import OsmChangeAction from "./OsmChangeAction" import { ChangeDescription } from "./ChangeDescription" -import { Store, UIEventSource } from "../../UIEventSource" +import { UIEventSource } from "../../UIEventSource" export default class LinkImageAction extends OsmChangeAction { private readonly _proposedKey: "image" | "mapillary" | "wiki_commons" | string diff --git a/src/Logic/Osm/Changes.ts b/src/Logic/Osm/Changes.ts index 69fd53f855..d33c395f90 100644 --- a/src/Logic/Osm/Changes.ts +++ b/src/Logic/Osm/Changes.ts @@ -600,7 +600,7 @@ export class Changes { " trying again before dropping it from the changes (" + e + ")" - this._reportError(msg) + // this._reportError(msg) // We don't report this yet, might be a temporary fluke const osmObj = await downloader.DownloadObjectAsync(id, 0) return { id, osmObj } } diff --git a/src/Logic/Osm/OsmConnection.ts b/src/Logic/Osm/OsmConnection.ts index 70451e1df1..3d4491fdfa 100644 --- a/src/Logic/Osm/OsmConnection.ts +++ b/src/Logic/Osm/OsmConnection.ts @@ -6,6 +6,7 @@ import { LocalStorageSource } from "../Web/LocalStorageSource" import { AuthConfig } from "./AuthConfig" import Constants from "../../Models/Constants" import { AndroidPolyfill } from "../Web/AndroidPolyfill" +import { Feature, Point } from "geojson" interface OsmUserInfo { id: number @@ -41,6 +42,39 @@ export default class UserDetails { export type OsmServiceState = "online" | "readonly" | "offline" | "unknown" | "unreachable" +interface CapabilityResult { + version: "0.6" | string + generator: "OpenStreetMap server" | string + copyright: "OpenStreetMap and contributors" | string + attribution: "http://www.openstreetmap.org/copyright" | string + license: "http://opendatacommons.org/licenses/odbl/1-0/" | string + api: { + version: { minimum: "0.6"; maximum: "0.6" } + area: { maximum: 0.25 | number } + note_area: { maximum: 25 | number } + tracepoints: { per_page: 5000 | number } + waynodes: { maximum: 2000 | number } + relationmembers: { maximum: 32000 | number } + changesets: { + maximum_elements: 10000 | number + default_query_limit: 100 | number + maximum_query_limit: 100 | number + } + notes: { default_query_limit: 100 | number; maximum_query_limit: 10000 | number } + timeout: { seconds: 300 | number } + status: { + database: OsmServiceState + api: OsmServiceState + gpx: OsmServiceState + } + } + policy: { + imagery: { + blacklist: { regex: string }[] + } + } +} + export class OsmConnection { public auth: osmAuth public userDetails: UIEventSource @@ -424,6 +458,10 @@ export class OsmConnection { return id } + public async getNote(id: number): Promise> { + return JSON.parse(await this.get("notes/" + id + ".json")) + } + public static GpxTrackVisibility = ["private", "public", "trackable", "identifiable"] as const public async uploadGpxTrack( @@ -466,7 +504,7 @@ export class OsmConnection { (options.filename ?? "gpx_track_mapcomplete_" + new Date().toISOString()) + "\"\r\nContent-Type: application/gpx+xml", } - + user const boundary = "987654" let body = "" @@ -608,20 +646,26 @@ export class OsmConnection { return parsed } - private async FetchCapabilities(): Promise<{ api: OsmServiceState; gpx: OsmServiceState }> { + private async FetchCapabilities(): Promise<{ + api: OsmServiceState + gpx: OsmServiceState + database: OsmServiceState + }> { if (Utils.runningFromConsole) { - return { api: "online", gpx: "online" } + return { api: "online", gpx: "online", database: "online" } } - const result = await Utils.downloadAdvanced(this.Backend() + "/api/0.6/capabilities") - if (result["content"] === undefined) { - console.log("Something went wrong:", result) - return { api: "unreachable", gpx: "unreachable" } + try { + const result = await Utils.downloadJson( + this.Backend() + "/api/0.6/capabilities.json" + ) + if (result?.api?.status === undefined) { + console.log("Something went wrong:", result) + return { api: "unreachable", gpx: "unreachable", database: "unreachable" } + } + return result.api.status + } catch (e) { + console.error("Could not fetch capabilities") + return { api: "offline", gpx: "offline", database: "online" } } - const xmlRaw = result["content"] - const parsed = new DOMParser().parseFromString(xmlRaw, "text/xml") - const statusEl = parsed.getElementsByTagName("status")[0] - const api = statusEl.getAttribute("api") - const gpx = statusEl.getAttribute("gpx") - return { api, gpx } } } diff --git a/src/Logic/Osm/Overpass.ts b/src/Logic/Osm/Overpass.ts index 8c890db0b7..e76948f52c 100644 --- a/src/Logic/Osm/Overpass.ts +++ b/src/Logic/Osm/Overpass.ts @@ -6,7 +6,7 @@ import osmtogeojson from "osmtogeojson" import { FeatureCollection } from "@turf/turf" import { Geometry } from "geojson" import { OsmTags } from "../../Models/OsmFeature" - +;("use strict") /** * Interfaces overpass to get all the latest data */ @@ -74,9 +74,9 @@ export class Overpass { console.warn("No features for", json) } - const geojson = osmtogeojson(json) + const geojson = >osmtogeojson(json) const osmTime = new Date(json.osm3s.timestamp_osm_base) - return [geojson, osmTime] + return [geojson, osmTime] } /** diff --git a/src/Logic/State/UserSettingsMetaTagging.ts b/src/Logic/State/UserSettingsMetaTagging.ts index 33a5ae85b5..6e568c5c32 100644 --- a/src/Logic/State/UserSettingsMetaTagging.ts +++ b/src/Logic/State/UserSettingsMetaTagging.ts @@ -1,14 +1,42 @@ import { Utils } from "../../Utils" /** This code is autogenerated - do not edit. Edit ./assets/layers/usersettings/usersettings.json instead */ export class ThemeMetaTagging { - public static readonly themeName = "usersettings" + public static readonly themeName = "usersettings" - public metaTaggging_for_usersettings(feat: {properties: Record}) { - Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_md', () => feat.properties._description.match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)?.at(1) ) - Utils.AddLazyProperty(feat.properties, '_d', () => feat.properties._description?.replace(/</g,'<')?.replace(/>/g,'>') ?? '' ) - Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_a', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.href.match(/mastodon|en.osm.town/) !== null)[0]?.href }) (feat) ) - Utils.AddLazyProperty(feat.properties, '_mastodon_link', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.getAttribute("rel")?.indexOf('me') >= 0)[0]?.href})(feat) ) - Utils.AddLazyProperty(feat.properties, '_mastodon_candidate', () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a ) - feat.properties['__current_backgroun'] = 'initial_value' - } -} \ No newline at end of file + public metaTaggging_for_usersettings(feat: { properties: Record }) { + Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_md", () => + feat.properties._description + .match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/) + ?.at(1) + ) + Utils.AddLazyProperty( + feat.properties, + "_d", + () => feat.properties._description?.replace(/</g, "<")?.replace(/>/g, ">") ?? "" + ) + Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_a", () => + ((feat) => { + const e = document.createElement("div") + e.innerHTML = feat.properties._d + return Array.from(e.getElementsByTagName("a")).filter( + (a) => a.href.match(/mastodon|en.osm.town/) !== null + )[0]?.href + })(feat) + ) + Utils.AddLazyProperty(feat.properties, "_mastodon_link", () => + ((feat) => { + const e = document.createElement("div") + e.innerHTML = feat.properties._d + return Array.from(e.getElementsByTagName("a")).filter( + (a) => a.getAttribute("rel")?.indexOf("me") >= 0 + )[0]?.href + })(feat) + ) + Utils.AddLazyProperty( + feat.properties, + "_mastodon_candidate", + () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a + ) + feat.properties["__current_backgroun"] = "initial_value" + } +} diff --git a/src/Logic/UIEventSource.ts b/src/Logic/UIEventSource.ts index 43f40558ff..88b5dc953d 100644 --- a/src/Logic/UIEventSource.ts +++ b/src/Logic/UIEventSource.ts @@ -1,6 +1,5 @@ import { Utils } from "../Utils" import { Readable, Subscriber, Unsubscriber, Updater, Writable } from "svelte/store" - /** * Various static utils */ @@ -276,7 +275,7 @@ export abstract class Store implements Readable { public bindD( f: (t: Exclude) => Store, - extraSources: UIEventSource[] = [] + extraSources: Store[] = [] ): Store { return this.bind((t) => { if (t === null) { @@ -952,15 +951,13 @@ export class UIEventSource extends Store implements Writable { g: (j: J, t: T) => T, allowUnregister = false ): UIEventSource { - const self = this - const stack = new Error().stack.split("\n") const callee = stack[1] const newSource = new UIEventSource(f(this.data), "map(" + this.tag + ")@" + callee) - const update = function () { - newSource.setData(f(self.data)) + const update = () => { + newSource.setData(f(this.data)) return allowUnregister && newSource._callbacks.length() === 0 } @@ -971,7 +968,7 @@ export class UIEventSource extends Store implements Writable { if (g !== undefined) { newSource.addCallback((latest) => { - self.setData(g(latest, self.data)) + this.setData(g(latest, this.data)) }) } @@ -980,8 +977,7 @@ export class UIEventSource extends Store implements Writable { public syncWith(otherSource: UIEventSource, reverseOverride = false): UIEventSource { this.addCallback((latest) => otherSource.setData(latest)) - const self = this - otherSource.addCallback((latest) => self.setData(latest)) + otherSource.addCallback((latest) => this.setData(latest)) if (reverseOverride) { if (otherSource.data !== undefined) { this.setData(otherSource.data) diff --git a/src/Logic/Web/LinkedDataLoader.ts b/src/Logic/Web/LinkedDataLoader.ts index 268fd48655..07dd830987 100644 --- a/src/Logic/Web/LinkedDataLoader.ts +++ b/src/Logic/Web/LinkedDataLoader.ts @@ -421,6 +421,7 @@ export default class LinkedDataLoader { delete output["chargeEnd"] delete output["chargeStart"] delete output["timeUnit"] + delete output["id"] asBoolean("covered") asBoolean("fee", true) @@ -518,6 +519,9 @@ export default class LinkedDataLoader { property: string, variable?: string ): Promise> { + if (property === "schema:photos") { + console.log(">> Getting photos") + } const results = await new TypedSparql().typedSparql( { schema: "http://schema.org/", @@ -531,15 +535,23 @@ export default class LinkedDataLoader { " ?parking a ", "?parking " + property + " " + (variable ?? "") ) + return results } + /** + * + * @param url + * @param property + * @param subExpr + * @private + */ private static async fetchVeloparkGraphProperty( url: string, property: string, subExpr?: string ): Promise> { - return await new TypedSparql().typedSparql( + const result = await new TypedSparql().typedSparql( { schema: "http://schema.org/", mv: "http://schema.mobivoc.org/", @@ -551,8 +563,15 @@ export default class LinkedDataLoader { "g", " ?parking a ", - S.graph("g", "?section " + property + " " + (subExpr ?? ""), "?section a ?type") + S.graph( + "g", + "?section " + property + " " + (subExpr ?? ""), + "?section a ?type", + "BIND(STR(?section) AS ?id)" + ) ) + + return result } /** @@ -569,26 +588,69 @@ export default class LinkedDataLoader { continue } for (const sectionKey in subResult) { - if (!r[sectionKey]) { - r[sectionKey] = {} - } - const section = subResult[sectionKey] - for (const key in section) { - r[sectionKey][key] ??= section[key] + if (sectionKey === "default") { + r["default"] ??= {} + const section = subResult["default"] + for (const key in section) { + r["default"][key] ??= section[key] + } + } else { + const section = subResult[sectionKey] + const actualId = Array.from(section["id"] ?? [])[0] ?? sectionKey + r[actualId] ??= {} + for (const key in section) { + r[actualId][key] ??= section[key] + } } } } - if (r["default"] !== undefined && Object.keys(r).length > 1) { + /** + * Copy all values from the section with name "key" into the other sections, + * remove section "key" afterwards + * @param key + */ + function spreadSection(key: string) { for (const section in r) { - if (section === "default") { + if (section === key) { continue } - for (const k in r.default) { - r[section][k] ??= r.default[k] + for (const k in r[key]) { + r[section][k] ??= r[key][k] } } - delete r.default + delete r[key] + } + + // The "default" part of the result contains all general info + // The other 'sections' need to get those copied! Then, we delete the "default"-section + if (r["default"] !== undefined && Object.keys(r).length > 1) { + spreadSection("default") + } + if (Object.keys(r).length > 1) { + // This result has multiple sections + // We should check that the naked URL got distributed and scrapped + const keys = Object.keys(r) + if (Object.keys(r).length > 2) { + console.log("Multiple sections detected: ", JSON.stringify(keys)) + } + const shortestKeyLength: number = Math.min(...keys.map((k) => k.length)) + const key = keys.find((k) => k.length === shortestKeyLength) + if (keys.some((k) => !k.startsWith(key))) { + throw ( + "Invalid multi-object: the shortest key is not the start of all the others: " + + JSON.stringify(keys) + ) + } + spreadSection(key) + } + if (Object.keys(r).length == 1) { + const key = Object.keys(r)[0] + if (key.indexOf("#") > 0) { + const newKey = key.split("#")[0] + r[newKey] = r[key] + delete r[key] + } } return r } @@ -675,6 +737,7 @@ export default class LinkedDataLoader { /** * Fetches all data relevant to velopark. * The id will be saved as `ref:velopark` + * If the entry has multiple sections, this will return multiple items * @param url */ public static async fetchVeloparkEntry( @@ -685,6 +748,7 @@ export default class LinkedDataLoader { if (this.veloparkCache[cacheKey]) { return this.veloparkCache[cacheKey] } + // Note: the proxy doesn't make any changes in this case const withProxyUrl = Constants.linkedDataProxy.replace("{url}", encodeURIComponent(url)) const optionalPaths: Record> = { "schema:interactionService": { @@ -697,6 +761,7 @@ export default class LinkedDataLoader { "schema:email": "email", "schema:telephone": "phone", }, + // "schema:photos": "images", "schema:dateModified": "_last_edit_timestamp", } if (includeExtras) { @@ -740,9 +805,22 @@ export default class LinkedDataLoader { graphOptionalPaths, extra ) + for (const unpatchedKey in unpatched) { + // Dirty hack + const rawData = await Utils.downloadJsonCached(url, 1000 * 60 * 60) + const images = rawData["photos"]?.map((ph) => ph.image) + if (images) { + unpatched[unpatchedKey].images = new Set(images) + } + } + + console.log("Got unpatched:", unpatched) const patched: Feature[] = [] - for (const section in unpatched) { + for (let section in unpatched) { const p = LinkedDataLoader.patchVeloparkProperties(unpatched[section]) + if (Object.keys(unpatched).length === 1 && section.endsWith("#section1")) { + section = section.split("#")[0] + } p["ref:velopark"] = [section] patched.push(LinkedDataLoader.asGeojson(p)) } diff --git a/src/Logic/Web/TypedSparql.ts b/src/Logic/Web/TypedSparql.ts index c87991205b..1e77bf0a81 100644 --- a/src/Logic/Web/TypedSparql.ts +++ b/src/Logic/Web/TypedSparql.ts @@ -67,13 +67,14 @@ export default class TypedSparql { bindings.forEach((item) => { const result = >>{} item.forEach((value, key) => { - if (!result[key.value]) { - result[key.value] = new Set() - } + result[key.value] ??= new Set() result[key.value].add(value.value) }) if (graphVariable && result[graphVariable]?.size > 0) { - const id = Array.from(result[graphVariable])?.[0] ?? "default" + const id: string = + Array.from(result["id"] ?? [])?.[0] ?? + Array.from(result[graphVariable] ?? [])?.[0] ?? + "default" resultAllGraphs[id] = result } else { resultAllGraphs["default"] = result diff --git a/src/Models/Constants.ts b/src/Models/Constants.ts index 4d9a33c95d..3f6f5c9431 100644 --- a/src/Models/Constants.ts +++ b/src/Models/Constants.ts @@ -40,7 +40,7 @@ export default class Constants { "import_candidate", "usersettings", "icons", - "filters" + "filters", ] as const /** * Layer IDs of layers which have special properties through built-in hooks diff --git a/src/Models/FilteredLayer.ts b/src/Models/FilteredLayer.ts index ee2dc6b765..e09f2ebe5d 100644 --- a/src/Models/FilteredLayer.ts +++ b/src/Models/FilteredLayer.ts @@ -232,7 +232,7 @@ export default class FilteredLayer { } } { - if(!this.isDisplayed.data){ + if (!this.isDisplayed.data) { return false } } diff --git a/src/Models/ThemeConfig/ThemeConfig.ts b/src/Models/ThemeConfig/ThemeConfig.ts index d91b9525c1..2d7f4eed61 100644 --- a/src/Models/ThemeConfig/ThemeConfig.ts +++ b/src/Models/ThemeConfig/ThemeConfig.ts @@ -306,7 +306,10 @@ export default class ThemeConfig implements ThemeInformation { return { untranslated, total } } - public getMatchingLayer(tags: Record, blacklistLayers?: Set): LayerConfig | undefined { + public getMatchingLayer( + tags: Record, + blacklistLayers?: Set + ): LayerConfig | undefined { if (tags === undefined) { return undefined } @@ -314,7 +317,7 @@ export default class ThemeConfig implements ThemeInformation { return this.getLayer("current_view") } for (const layer of this.layers) { - if(blacklistLayers?.has(layer.id)){ + if (blacklistLayers?.has(layer.id)) { continue } if (!layer.source) { diff --git a/src/Models/ThemeViewState.ts b/src/Models/ThemeViewState.ts index 8fece162b5..ef14c40da1 100644 --- a/src/Models/ThemeViewState.ts +++ b/src/Models/ThemeViewState.ts @@ -177,12 +177,6 @@ export default class ThemeViewState implements SpecialVisualizationState { ) this.map = new UIEventSource(undefined) const geolocationState = new GeoLocationState() - const initial = new InitialMapPositioning(layout, geolocationState) - this.mapProperties = new MapLibreAdaptor(this.map, initial, { correctClick: 20 }) - - this.featureSwitchIsTesting = this.featureSwitches.featureSwitchIsTesting - this.featureSwitchUserbadge = this.featureSwitches.featureSwitchEnableLogin - this.osmConnection = new OsmConnection({ dryRun: this.featureSwitches.featureSwitchIsTesting, fakeUser: this.featureSwitches.featureSwitchFakeUser.data, @@ -192,6 +186,12 @@ export default class ThemeViewState implements SpecialVisualizationState { "Used to complete the login" ), }) + const initial = new InitialMapPositioning(layout, geolocationState, this.osmConnection) + this.mapProperties = new MapLibreAdaptor(this.map, initial, { correctClick: 20 }) + + this.featureSwitchIsTesting = this.featureSwitches.featureSwitchIsTesting + this.featureSwitchUserbadge = this.featureSwitches.featureSwitchEnableLogin + this.userRelatedState = new UserRelatedState( this.osmConnection, layout, @@ -788,7 +788,7 @@ export default class ThemeViewState implements SpecialVisualizationState { const layers = this.theme.layers.filter( (l) => - Constants.priviliged_layers.indexOf(l.id) < 0 && + ((Constants.priviliged_layers)).indexOf(l.id) < 0 && l.source.geojsonSource === undefined && l.doCount ) @@ -840,7 +840,7 @@ export default class ThemeViewState implements SpecialVisualizationState { this.closestFeatures.registerSource(specialLayers.favourite, "favourite") if (this.theme?.lockLocation) { - const bbox = new BBox(this.theme.lockLocation) + const bbox = new BBox(<[[number, number], [number, number]]>this.theme.lockLocation) this.mapProperties.maxbounds.setData(bbox) ShowDataLayer.showRange( this.map, diff --git a/src/UI/Base/DotMenu.svelte b/src/UI/Base/DotMenu.svelte index 74344067cf..2a57fa52de 100644 --- a/src/UI/Base/DotMenu.svelte +++ b/src/UI/Base/DotMenu.svelte @@ -53,6 +53,8 @@ fill: var(--button-background-hover); transition: fill 350ms linear; cursor: pointer; + stroke-width: 0.8; + stroke: white; } :global(.dots-menu:hover > path, .dots-menu-opened > path) { diff --git a/src/UI/Base/LoginToggle.svelte b/src/UI/Base/LoginToggle.svelte index 83aba9ac4e..c2d6119b7b 100644 --- a/src/UI/Base/LoginToggle.svelte +++ b/src/UI/Base/LoginToggle.svelte @@ -5,7 +5,7 @@ import { Translation } from "../i18n/Translation" import Translations from "../i18n/Translations" import Tr from "./Tr.svelte" - import { ImmutableStore, UIEventSource } from "../../Logic/UIEventSource" + import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource" import Invalid from "../../assets/svg/Invalid.svelte" import ArrowPath from "@babeard/svelte-heroicons/mini/ArrowPath" @@ -21,6 +21,10 @@ * Only show the 'successful' state, don't show loading or error messages */ export let silentFail: boolean = false + /** + * If set and the OSM-api fails, do _not_ show any error messages nor the successful state, just hide + */ + export let hiddenFail: boolean = false let loadingStatus = state?.osmConnection?.loadingStatus ?? new ImmutableStore("logged-in") let badge = state?.featureSwitches?.featureSwitchEnableLogin ?? new ImmutableStore(true) const t = Translations.t.general @@ -30,7 +34,7 @@ unknown: t.loginFailedUnreachableMode, readonly: t.loginFailedReadonlyMode, } - const apiState = + const apiState: Store = state?.osmConnection?.apiIsOnline ?? new ImmutableStore("online") @@ -39,19 +43,21 @@ - {:else if !silentFail && $loadingStatus === "error"} - -
-
- - + {:else if !silentFail && ($loadingStatus === "error" || $apiState === "readonly" || $apiState === "offline")} + {#if !hiddenFail} + +
+
+ + +
+
- -
- + + {/if} {:else if $loadingStatus === "logged-in"} {:else if !silentFail && $loadingStatus === "not-attempted"} diff --git a/src/UI/BigComponents/Filterview.svelte b/src/UI/BigComponents/Filterview.svelte index 3cf8431ab3..a59962d5ff 100644 --- a/src/UI/BigComponents/Filterview.svelte +++ b/src/UI/BigComponents/Filterview.svelte @@ -28,9 +28,9 @@ (s) => (s === "yes" && state?.userRelatedState?.osmConnection?.userDetails?.data?.csCount >= - Constants.userJourney.tagsVisibleAt) || + Constants.userJourney.tagsVisibleAt) || s === "always" || - s === "full", + s === "full" ) /** @@ -80,9 +80,9 @@ {#if $showTags && filter.options[0].osmTags !== undefined} - - {filter.options[0].osmTags.asHumanString()} - + + {filter.options[0].osmTags.asHumanString()} + {/if} {/if} diff --git a/src/UI/BigComponents/MenuDrawer.svelte b/src/UI/BigComponents/MenuDrawer.svelte index b9baf04812..70a79f165a 100644 --- a/src/UI/BigComponents/MenuDrawer.svelte +++ b/src/UI/BigComponents/MenuDrawer.svelte @@ -126,7 +126,7 @@ - +
@@ -146,7 +146,7 @@ - + diff --git a/src/UI/Comparison/ComparisonTable.svelte b/src/UI/Comparison/ComparisonTable.svelte index 32757ff624..ff6c7bfaec 100644 --- a/src/UI/Comparison/ComparisonTable.svelte +++ b/src/UI/Comparison/ComparisonTable.svelte @@ -128,17 +128,20 @@ {#if $unknownImages.length > 0} {#if readonly} -
-
- {#each $unknownImages as image (image)} +
+ {#each $unknownImages as image (image)} +
- {/each} -
+
+ {/each}
{:else} {#each $unknownImages as image (image)} diff --git a/src/UI/History/AggregateImages.svelte b/src/UI/History/AggregateImages.svelte index 78dda93858..020c8285a8 100644 --- a/src/UI/History/AggregateImages.svelte +++ b/src/UI/History/AggregateImages.svelte @@ -12,25 +12,31 @@ const downloader = new OsmObjectDownloader() let allHistories: UIEventSource = UIEventSource.FromPromise( - Promise.all(features.map(f => downloader.downloadHistory(f.properties.id))) + Promise.all(features.map((f) => downloader.downloadHistory(f.properties.id))) + ) + let imageKeys = new Set( + ...["panoramax", "image:streetsign", "image:menu"].map((k) => { + const result: string[] = [k] + for (let i = 0; i < 10; i++) { + result.push(k + ":" + i) + } + return result + }) ) - let imageKeys = new Set(...["panoramax", "image:streetsign", "image:menu"].map(k => { - const result: string[] = [k] - for (let i = 0; i < 10; i++) { - result.push(k + ":" + i) - } - return result - })) let usernamesSet = new Set(onlyShowUsername) - let allDiffs: Store<{ - key: string; - value?: string; - oldValue?: string - }[]> = allHistories.mapD(histories => HistoryUtils.fullHistoryDiff(histories, usernamesSet)) - - let addedImages = allDiffs.mapD(diffs => [].concat(...diffs.filter(({ key }) => imageKeys.has(key)))) + let allDiffs: Store< + { + key: string + value?: string + oldValue?: string + }[] + > = allHistories.mapD((histories) => HistoryUtils.fullHistoryDiff(histories, usernamesSet)) + let addedImages = allDiffs.mapD((diffs) => + [].concat(...diffs.filter(({ key }) => imageKeys.has(key))) + ) + {#if $allDiffs === undefined} {:else if $addedImages.length === 0} @@ -38,7 +44,7 @@ {:else}
{#each $addedImages as imgDiff} -
+
{/each} diff --git a/src/UI/History/AggregateView.svelte b/src/UI/History/AggregateView.svelte index 22bd1d8227..69bc1248bf 100644 --- a/src/UI/History/AggregateView.svelte +++ b/src/UI/History/AggregateView.svelte @@ -18,26 +18,30 @@ const downloader = new OsmObjectDownloader() let allHistories: UIEventSource = UIEventSource.FromPromise( - Promise.all(features.map(f => downloader.downloadHistory(f.properties.id))) + Promise.all(features.map((f) => downloader.downloadHistory(f.properties.id))) ) - let allDiffs: Store<{ - key: string; - value?: string; - oldValue?: string - }[]> = allHistories.mapD(histories => HistoryUtils.fullHistoryDiff(histories, usernames)) + let allDiffs: Store< + { + key: string + value?: string + oldValue?: string + }[] + > = allHistories.mapD((histories) => HistoryUtils.fullHistoryDiff(histories, usernames)) - const trs = shared_questions.tagRenderings.map(tr => new TagRenderingConfig(tr)) + const trs = shared_questions.tagRenderings.map((tr) => new TagRenderingConfig(tr)) function detectQuestion(key: string): TagRenderingConfig { - return trs.find(tr => tr.freeform?.key === key) + return trs.find((tr) => tr.freeform?.key === key) } - const mergedCount: Store<{ - key: string; - tr: TagRenderingConfig; - count: number; - values: { value: string; count: number }[] - }[]> = allDiffs.mapD(allDiffs => { + const mergedCount: Store< + { + key: string + tr: TagRenderingConfig + count: number + values: { value: string; count: number }[] + }[] + > = allDiffs.mapD((allDiffs) => { const keyCounts = new Map>() for (const diff of allDiffs) { const k = diff.key @@ -50,11 +54,13 @@ } const perKey: { - key: string, tr: TagRenderingConfig, count: number, values: - { value: string, count: number }[] + key: string + tr: TagRenderingConfig + count: number + values: { value: string; count: number }[] }[] = [] keyCounts.forEach((values, key) => { - const keyTotal: { value: string, count: number }[] = [] + const keyTotal: { value: string; count: number }[] = [] values.forEach((count, value) => { keyTotal.push({ value, count }) }) @@ -72,7 +78,6 @@ }) const t = Translations.t.inspector - {#if allHistories === undefined} @@ -88,7 +93,7 @@ - +
    {#each diff.values as value} diff --git a/src/UI/History/AttributedPanoramaxImage.svelte b/src/UI/History/AttributedPanoramaxImage.svelte index 83463ada67..9b4bd82264 100644 --- a/src/UI/History/AttributedPanoramaxImage.svelte +++ b/src/UI/History/AttributedPanoramaxImage.svelte @@ -5,9 +5,11 @@ import type { ProvidedImage } from "../../Logic/ImageProviders/ImageProvider" export let hash: string - let image: UIEventSource = UIEventSource.FromPromise(PanoramaxImageProvider.singleton.getInfo(hash)) + let image: UIEventSource = UIEventSource.FromPromise( + PanoramaxImageProvider.singleton.getInfo(hash) + ) {#if $image !== undefined} - + {/if} diff --git a/src/UI/History/History.svelte b/src/UI/History/History.svelte index 5cfa6b908f..d878f22fe4 100644 --- a/src/UI/History/History.svelte +++ b/src/UI/History/History.svelte @@ -17,41 +17,51 @@ let usernames = new Set(onlyShowChangesBy) let fullHistory = UIEventSource.FromPromise(new OsmObjectDownloader().downloadHistory(id)) - let partOfLayer = fullHistory.mapD(history => history.map(step => ({ - step, - layer: HistoryUtils.determineLayer(step.tags) - }))) - let filteredHistory = partOfLayer.mapD(history => - history.filter(({ step }) => { - if (usernames.size == 0) { - return true - } - console.log("Checking if ", step.tags["_last_edit:contributor"],"is contained in", onlyShowChangesBy) - return usernames.has(step.tags["_last_edit:contributor"]) - - }).map(({ step, layer }) => { - const diff = HistoryUtils.tagHistoryDiff(step, fullHistory.data) - return { step, layer, diff } + let partOfLayer = fullHistory.mapD((history) => + history.map((step) => ({ + step, + layer: HistoryUtils.determineLayer(step.tags), })) + ) + let filteredHistory = partOfLayer.mapD((history) => + history + .filter(({ step }) => { + if (usernames.size == 0) { + return true + } + console.log( + "Checking if ", + step.tags["_last_edit:contributor"], + "is contained in", + onlyShowChangesBy + ) + return usernames.has(step.tags["_last_edit:contributor"]) + }) + .map(({ step, layer }) => { + const diff = HistoryUtils.tagHistoryDiff(step, fullHistory.data) + return { step, layer, diff } + }) + ) - let lastStep = filteredHistory.mapD(history => history.at(-1)) - let allGeometry = filteredHistory.mapD(all => !all.some(x => x.diff.length > 0)) + let lastStep = filteredHistory.mapD((history) => history.at(-1)) + let allGeometry = filteredHistory.mapD((all) => !all.some((x) => x.diff.length > 0)) /** * These layers are only shown if there are tag changes as well */ const ignoreLayersIfNoChanges: ReadonlySet = new Set(["walls_and_buildings"]) const t = Translations.t.inspector.previousContributors - {#if !$allGeometry || !ignoreLayersIfNoChanges.has($lastStep?.layer?.id)} {#if $lastStep?.layer}

    -
    +
    - +

    {/if} @@ -61,42 +71,48 @@ {:else if $filteredHistory.length === 0} {:else} - +
    {#each $filteredHistory as { step, layer }} - {#if step.version === 1} + {/if} {#if HistoryUtils.tagHistoryDiff(step, $fullHistory).length === 0} - {:else} {#each HistoryUtils.tagHistoryDiff(step, $fullHistory) as diff} - + {#if diff.oldValue === undefined} - {:else if diff.value === undefined } + {:else if diff.value === undefined} - + {:else} - + {/if} - - {/each} {/if} diff --git a/src/UI/History/HistoryUtils.ts b/src/UI/History/HistoryUtils.ts index c85aaeff22..e17da942c5 100644 --- a/src/UI/History/HistoryUtils.ts +++ b/src/UI/History/HistoryUtils.ts @@ -3,49 +3,63 @@ import ThemeConfig from "../../Models/ThemeConfig/ThemeConfig" import { OsmObject } from "../../Logic/Osm/OsmObject" export class HistoryUtils { - - public static readonly personalTheme = new ThemeConfig( all_layers, true) + public static readonly personalTheme = new ThemeConfig(all_layers, true) private static ignoredLayers = new Set(["fixme"]) - public static determineLayer(properties: Record){ + public static determineLayer(properties: Record) { return this.personalTheme.getMatchingLayer(properties, this.ignoredLayers) } - public static tagHistoryDiff(step: OsmObject, history: OsmObject[]): { - key: string, - value?: string, - oldValue?: string, + public static tagHistoryDiff( + step: OsmObject, + history: OsmObject[] + ): { + key: string + value?: string + oldValue?: string step: OsmObject }[] { const previous = history[step.version - 2] if (!previous) { - return Object.keys(step.tags).filter(key => !key.startsWith("_") && key !== "id").map(key => ({ - key, value: step.tags[key], step - })) + return Object.keys(step.tags) + .filter((key) => !key.startsWith("_") && key !== "id") + .map((key) => ({ + key, + value: step.tags[key], + step, + })) } const previousTags = previous.tags - return Object.keys(step.tags).filter(key => !key.startsWith("_") ) - .map(key => { + return Object.keys(step.tags) + .filter((key) => !key.startsWith("_")) + .map((key) => { const value = step.tags[key] const oldValue = previousTags[key] return { - key, value, oldValue, step + key, + value, + oldValue, + step, } - }).filter(ch => ch.oldValue !== ch.value) + }) + .filter((ch) => ch.oldValue !== ch.value) } - public static fullHistoryDiff(histories: OsmObject[][], onlyShowUsername?: Set){ - const allDiffs: {key: string, oldValue?: string, value?: string}[] = [].concat(...histories.map( - history => { - const filtered = history.filter(step => !onlyShowUsername || onlyShowUsername?.has(step.tags["_last_edit:contributor"] )) + public static fullHistoryDiff(histories: OsmObject[][], onlyShowUsername?: Set) { + const allDiffs: { key: string; oldValue?: string; value?: string }[] = [].concat( + ...histories.map((history) => { + const filtered = history.filter( + (step) => + !onlyShowUsername || + onlyShowUsername?.has(step.tags["_last_edit:contributor"]) + ) const diffs: { - key: string; - value?: string; + key: string + value?: string oldValue?: string - }[][] = filtered.map(step => HistoryUtils.tagHistoryDiff(step, history)) + }[][] = filtered.map((step) => HistoryUtils.tagHistoryDiff(step, history)) return [].concat(...diffs) - } - )) + }) + ) return allDiffs } - } diff --git a/src/UI/History/PreviouslySpiedUsers.svelte b/src/UI/History/PreviouslySpiedUsers.svelte index 4bb757b436..a37e1262e5 100644 --- a/src/UI/History/PreviouslySpiedUsers.svelte +++ b/src/UI/History/PreviouslySpiedUsers.svelte @@ -1,5 +1,4 @@ - +

    -

    +
    {step.version} + + {step.version} + + {layer?.id ?? "Unknown layer"}{diff.key} {diff.value}{diff.key} {diff.value}{diff.value}{diff.key} {diff.oldValue} → {diff.value} + {diff.oldValue} + → {diff.value} +
    {/each}
    - + - @@ -75,32 +76,46 @@ - remove(c.name)} /> + remove(c.name)} />
    -
    Labels
    {#if $labels.length === 0} No labels {:else} {#each $labels as label} -
    {label} -
    {/each} {/if} -
    +
    Create a new label
    -
    diff --git a/src/UI/Image/AttributedImage.svelte b/src/UI/Image/AttributedImage.svelte index 546de016d4..851e4231dd 100644 --- a/src/UI/Image/AttributedImage.svelte +++ b/src/UI/Image/AttributedImage.svelte @@ -28,7 +28,7 @@ export let imgClass: string = undefined export let state: SpecialVisualizationState = undefined export let attributionFormat: "minimal" | "medium" | "large" = "medium" - export let previewedImage: UIEventSource = undefined + export let previewedImage: UIEventSource> = undefined export let canZoom = previewedImage !== undefined let loaded = false let showBigPreview = new UIEventSource(false) @@ -37,14 +37,14 @@ if (!shown) { previewedImage?.set(undefined) } - }) - ) - if(previewedImage){ - onDestroy( - previewedImage.addCallbackAndRun((previewedImage) => { - showBigPreview.set(previewedImage?.id === image.id) - }) + }), ) + if (previewedImage) { + onDestroy( + previewedImage.addCallbackAndRun((previewedImage) => { + showBigPreview.set(previewedImage !== undefined && (previewedImage?.id ?? previewedImage?.url) === (image.id ?? image.url)) + }), + ) } function highlight(entered: boolean = true) { @@ -89,6 +89,8 @@ />
    + + {#if image.status !== undefined && image.status !== "ready" && image.status !== "hidden"}
    @@ -113,6 +115,7 @@ class={imgClass ?? ""} class:cursor-zoom-in={canZoom} on:click={() => { + console.log("Setting",image.url) previewedImage?.set(image) }} on:error={() => { diff --git a/src/UI/Image/ImageCarousel.svelte b/src/UI/Image/ImageCarousel.svelte index 5edd7d42a2..f9b4316205 100644 --- a/src/UI/Image/ImageCarousel.svelte +++ b/src/UI/Image/ImageCarousel.svelte @@ -1,12 +1,12 @@
    diff --git a/src/UI/Image/ImageOperations.svelte b/src/UI/Image/ImageOperations.svelte index 9a4df51fa6..a27b53eda7 100644 --- a/src/UI/Image/ImageOperations.svelte +++ b/src/UI/Image/ImageOperations.svelte @@ -15,7 +15,7 @@ import Translations from "../i18n/Translations" import DotMenu from "../Base/DotMenu.svelte" - export let image: ProvidedImage + export let image: Partial & ({ id: string, url: string }) export let clss: string = undefined let isLoaded = new UIEventSource(false) diff --git a/src/UI/Image/ImagePreview.svelte b/src/UI/Image/ImagePreview.svelte index bf966cfcf9..0dabcebce0 100644 --- a/src/UI/Image/ImagePreview.svelte +++ b/src/UI/Image/ImagePreview.svelte @@ -8,7 +8,7 @@ import Zoomcontrol from "../Zoomcontrol" import { onDestroy } from "svelte" - export let image: ProvidedImage + export let image: Partial let panzoomInstance = undefined let panzoomEl: HTMLElement export let isLoaded: UIEventSource = undefined diff --git a/src/UI/Image/NearbyImages.svelte b/src/UI/Image/NearbyImages.svelte index 8f2022c938..9650e2fcb6 100644 --- a/src/UI/Image/NearbyImages.svelte +++ b/src/UI/Image/NearbyImages.svelte @@ -143,6 +143,18 @@ highlighted.set(feature.properties.id) }, }) + onDestroy( + tags.addCallbackAndRunD((tags) => { + if ( + tags.id.startsWith("node/") || + tags.id.startsWith("way/") || + tags.id.startsWith("relation/") + ) { + return + } + linkable = false + }) + )
    diff --git a/src/UI/Image/UploadImage.svelte b/src/UI/Image/UploadImage.svelte index 250da9d3e6..8e6a8c2848 100644 --- a/src/UI/Image/UploadImage.svelte +++ b/src/UI/Image/UploadImage.svelte @@ -13,10 +13,10 @@ import FileSelector from "../Base/FileSelector.svelte" import LoginButton from "../Base/LoginButton.svelte" import { Translation } from "../i18n/Translation" - import Camera from "@babeard/svelte-heroicons/solid/Camera" import LayerConfig from "../../Models/ThemeConfig/LayerConfig" import NoteCommentElement from "../Popup/Notes/NoteCommentElement" import type { Feature } from "geojson" + import Camera from "@babeard/svelte-heroicons/mini/Camera" export let state: SpecialVisualizationState @@ -24,7 +24,7 @@ export let targetKey: string = undefined export let layer: LayerConfig export let noBlur: boolean = false - export let feature: Feature = undefined + export let feature: Feature /** * Image to show in the button * NOT the image to upload! @@ -65,13 +65,13 @@ } const url = uploadResult.absoluteUrl await state.osmConnection.addCommentToNote(tags.data.id, url) - NoteCommentElement.addCommentTo(url, >tags, { + NoteCommentElement.addCommentTo(url, >tags, { osmConnection: state.osmConnection, }) return } - await state?.imageUploadManager?.uploadImageAndApply(file, tags, targetKey, noBlur) + await state?.imageUploadManager?.uploadImageAndApply(file, tags, targetKey, noBlur, feature) } catch (e) { console.error(e) state.reportError(e, "Could not upload image") @@ -133,9 +133,9 @@ cls="flex justify-center md:hidden button" multiple={true} on:submit={(e) => { - return handleFiles(e.detail, true) e.preventDefault() e.stopPropagation() + return handleFiles(e.detail, true) }} > diff --git a/src/UI/InspectorGUI.svelte b/src/UI/InspectorGUI.svelte index 3ed4352a6e..11e7625c35 100644 --- a/src/UI/InspectorGUI.svelte +++ b/src/UI/InspectorGUI.svelte @@ -41,14 +41,14 @@ zoom, location: new UIEventSource<{ lon: number; lat: number }>({ lat: lat.data, lon: lon.data }), }) - maplibremap.location.stabilized(500).addCallbackAndRunD(l => { + maplibremap.location.stabilized(500).addCallbackAndRunD((l) => { lat.set(l.lat) lon.set(l.lon) }) let allLayers = HistoryUtils.personalTheme.layers - let layersNoFixme = allLayers.filter(l => l.id !== "fixme") - let fixme = allLayers.find(l => l.id === "fixme") + let layersNoFixme = allLayers.filter((l) => l.id !== "fixme") + let fixme = allLayers.find((l) => l.id === "fixme") let featuresStore = new UIEventSource([]) let features = new StaticFeatureSource(featuresStore) ShowDataLayer.showMultipleLayers(map, features, [...layersNoFixme, fixme], { @@ -62,19 +62,19 @@ }) let osmConnection = new OsmConnection() - let inspectedContributors: UIEventSource<{ - name: string, - visitedTime: string, - label: string - }[]> = UIEventSource.asObject( - osmConnection.getPreference("spied-upon-users"), []) + let inspectedContributors: UIEventSource< + { + name: string + visitedTime: string + label: string + }[] + > = UIEventSource.asObject(osmConnection.getPreference("spied-upon-users"), []) async function load() { const user = username.data if (user.indexOf(";") < 0) { - const inspectedData = inspectedContributors.data - const previousEntry = inspectedData.find(e => e.name === user) + const previousEntry = inspectedData.find((e) => e.name === user) if (previousEntry) { previousEntry.visitedTime = new Date().toISOString() } else { @@ -89,7 +89,11 @@ step.setData("loading") featuresStore.set([]) - const overpass = new Overpass(undefined, user.split(";").map(user => "nw(user_touched:\"" + user + "\");"), Constants.defaultOverpassUrls[0]) + const overpass = new Overpass( + undefined, + user.split(";").map((user) => 'nw(user_touched:"' + user + '");'), + Constants.defaultOverpassUrls[0] + ) if (!maplibremap.bounds.data) { return } @@ -117,11 +121,10 @@ const t = Translations.t.inspector -
    - -
    - -

    +
    +
    + +

    load()} /> @@ -141,16 +144,16 @@
    - - - -
    @@ -167,32 +170,35 @@ width="w-full md:w-6/12 lg:w-5/12 xl:w-4/12" rightOffset="inset-y-0 right-0" transitionParams={{ - x: 640, - duration: 0, - easing: linear, - }} + x: 640, + duration: 0, + easing: linear, + }} divClass="overflow-y-auto z-50 bg-white" hidden={$selectedElement === undefined} on:close={() => { - selectedElement.setData(undefined) - }} + selectedElement.setData(undefined) + }} > -
    - - {$selectedElement.properties.id} - selectedElement.set(undefined)} /> + + {$selectedElement.properties.id} + + selectedElement.set(undefined)} />
    - +
    {/if} -
    - +
    +
    {:else if mode === "table"}
    @@ -213,7 +219,13 @@
    Earlier inspected constributors
    - { - username.set(e.detail); load();showPreviouslyVisited.set(false) - }} /> + { + username.set(e.detail) + load() + showPreviouslyVisited.set(false) + }} + />
    diff --git a/src/UI/MapRoulette/MaprouletteSetStatus.svelte b/src/UI/MapRoulette/MaprouletteSetStatus.svelte index f91835378c..56619f6b7a 100644 --- a/src/UI/MapRoulette/MaprouletteSetStatus.svelte +++ b/src/UI/MapRoulette/MaprouletteSetStatus.svelte @@ -5,7 +5,7 @@ import Tr from "../Base/Tr.svelte" import Translations from "../i18n/Translations" import Icon from "../Map/Icon.svelte" - import Maproulette from "../../Logic/Maproulette" + import Maproulette, { maprouletteStatus } from "../../Logic/Maproulette" import LoginToggle from "../Base/LoginToggle.svelte" /** @@ -38,11 +38,11 @@ async function apply() { const maproulette_id = tags.data[maproulette_id_key] ?? tags.data.mr_taskId ?? tags.data.id try { - await Maproulette.singleton.closeTask(Number(maproulette_id), Number(statusToSet), { - tags: `MapComplete MapComplete:${state.theme.id}`, + const statusIndex = Maproulette.codeToIndex(statusToSet) ?? Number(statusToSet) + await Maproulette.singleton.closeTask(Number(maproulette_id), statusIndex, state, { comment: feedback, }) - tags.data["mr_taskStatus"] = Maproulette.STATUS_MEANING[Number(statusToSet)] + tags.data["mr_taskStatus"] = maprouletteStatus[statusIndex] tags.data.status = statusToSet tags.ping() } catch (e) { diff --git a/src/UI/OpeningHours/OpeningHours.ts b/src/UI/OpeningHours/OpeningHours.ts index 2d4efc08fc..4053b6674d 100644 --- a/src/UI/OpeningHours/OpeningHours.ts +++ b/src/UI/OpeningHours/OpeningHours.ts @@ -951,13 +951,13 @@ export class ToTextualDescription { * const oh = new opening_hours("mon 12:00-16:00") * const ranges = OH.createRangesForApplicableWeek(oh) * const tr = ToTextualDescription.createTextualDescriptionFor(oh, ranges.ranges) - * tr.textFor("en") // => "On monday from 12:00 till 16:00" + * tr.textFor("en") // => "On Monday from 12:00 till 16:00" * tr.textFor("nl") // => "Op maandag van 12:00 tot 16:00" * * const oh = new opening_hours("mon 12:00-16:00; tu 13:00-14:00") * const ranges = OH.createRangesForApplicableWeek(oh) * const tr = ToTextualDescription.createTextualDescriptionFor(oh, ranges.ranges) - * tr.textFor("en") // => "On monday from 12:00 till 16:00. On tuesday from 13:00 till 14:00" + * tr.textFor("en") // => "On Monday from 12:00 till 16:00. On Tuesday from 13:00 till 14:00" * tr.textFor("nl") // => "Op maandag van 12:00 tot 16:00. Op dinsdag van 13:00 tot 14:00" */ public static createTextualDescriptionFor( diff --git a/src/UI/Popup/DisabledQuestions.svelte b/src/UI/Popup/DisabledQuestions.svelte index 0e2d0587f0..1b36a76337 100644 --- a/src/UI/Popup/DisabledQuestions.svelte +++ b/src/UI/Popup/DisabledQuestions.svelte @@ -3,15 +3,17 @@ import { Stores } from "../../Logic/UIEventSource" import Tr from "../Base/Tr.svelte" import Translations from "../i18n/Translations" + import type { SpecialVisualizationState } from "../SpecialVisualization" + import ThemeViewState from "../../Models/ThemeViewState" /** * Shows _all_ disabled questions */ - export let state - let layers = state.layout.layers.filter((l) => l.isNormal()) + export let state: ThemeViewState + let layers = state.theme.layers.filter((l) => l.isNormal()) let allDisabled = Stores.concat( - layers.map((l) => state.userRelatedState.getThemeDisabled(state.layout.id, l.id)) + layers.map((l) => state.userRelatedState.getThemeDisabled(state.theme.id, l.id)) ).map((l) => [].concat(...l)) const t = Translations.t.general.questions diff --git a/src/UI/Popup/DisabledQuestionsLayer.svelte b/src/UI/Popup/DisabledQuestionsLayer.svelte index 6b4509349a..6460f2fac9 100644 --- a/src/UI/Popup/DisabledQuestionsLayer.svelte +++ b/src/UI/Popup/DisabledQuestionsLayer.svelte @@ -2,7 +2,6 @@ /** * Gives an overview of questions which are disabled for the given theme */ - import UserRelatedState from "../../Logic/State/UserRelatedState" import LayerConfig from "../../Models/ThemeConfig/LayerConfig" import ThemeViewState from "../../Models/ThemeViewState" import Tr from "../Base/Tr.svelte" @@ -13,7 +12,7 @@ export let layer: LayerConfig export let state: ThemeViewState - let disabledQuestions = state.userRelatedState.getThemeDisabled(state.layout.id, layer.id) + let disabledQuestions = state.userRelatedState.getThemeDisabled(state.theme.id, layer.id) function getQuestion(id: string): Translation { return layer.tagRenderings.find((q) => q.id === id).question.Subs({}) diff --git a/src/UI/Popup/ImportButtons/PointImportButtonViz.ts b/src/UI/Popup/ImportButtons/PointImportButtonViz.ts index e5addb9e6b..1eb28f8ec7 100644 --- a/src/UI/Popup/ImportButtons/PointImportButtonViz.ts +++ b/src/UI/Popup/ImportButtons/PointImportButtonViz.ts @@ -9,6 +9,7 @@ import { PointImportFlowArguments, PointImportFlowState } from "./PointImportFlo import { Utils } from "../../../Utils" import { ImportFlowUtils } from "./ImportFlow" import Translations from "../../i18n/Translations" +import { GeoOperations } from "../../../Logic/GeoOperations" /** * The wrapper to make the special visualisation for the PointImportFlow @@ -44,6 +45,10 @@ export class PointImportButtonViz implements SpecialVisualization { name: "maproulette_id", doc: "The property name of the maproulette_id - this is probably `mr_taskId`. If given, the maproulette challenge will be marked as fixed. Only use this if part of a maproulette-layer.", }, + { + name: "to_point", + doc: "If set, a feature will be converted to a centerpoint", + }, ] } @@ -53,8 +58,14 @@ export class PointImportButtonViz implements SpecialVisualization { argument: string[], feature: Feature ): BaseUIElement { + const to_point_index = this.args.findIndex((arg) => arg.name === "to_point") + const summarizePointArg = argument[to_point_index].toLowerCase() if (feature.geometry.type !== "Point") { - return Translations.t.general.add.import.wrongType.SetClass("alert") + if (summarizePointArg !== "no" && summarizePointArg !== "false") { + feature = GeoOperations.centerpoint(feature) + } else { + return Translations.t.general.add.import.wrongType.SetClass("alert") + } } const baseArgs: PointImportFlowArguments = Utils.ParseVisArgs(this.args, argument) const tagsToApply = ImportFlowUtils.getTagsToApply(tagSource, baseArgs) diff --git a/src/UI/Popup/ImportButtons/PointImportFlowState.ts b/src/UI/Popup/ImportButtons/PointImportFlowState.ts index d71ef2b8c8..27a983a162 100644 --- a/src/UI/Popup/ImportButtons/PointImportFlowState.ts +++ b/src/UI/Popup/ImportButtons/PointImportFlowState.ts @@ -19,7 +19,6 @@ export interface PointImportFlowArguments extends ImportFlowArguments { export class PointImportFlowState extends ImportFlow { public readonly startCoordinate: [number, number] - private readonly _originalFeature: Feature constructor( state: SpecialVisualizationState, @@ -29,7 +28,6 @@ export class PointImportFlowState extends ImportFlow { originalFeatureTags: UIEventSource> ) { super(state, args, tagsToApply, originalFeatureTags) - this._originalFeature = originalFeature this.startCoordinate = GeoOperations.centerpointCoordinates(originalFeature) } @@ -80,7 +78,7 @@ export class PointImportFlowState extends ImportFlow { originalFeatureTags.ping() } - let maproulette_id = originalFeatureTags.data[this.args.maproulette_id] + const maproulette_id = originalFeatureTags.data[this.args.maproulette_id] if (maproulette_id !== undefined) { if (this.state.featureSwitchIsTesting.data) { console.log( @@ -90,7 +88,11 @@ export class PointImportFlowState extends ImportFlow { ) } else { console.log("Marking maproulette task as fixed") - await Maproulette.singleton.closeTask(Number(maproulette_id)) + await Maproulette.singleton.closeTask( + Number(maproulette_id), + Maproulette.STATUS_FIXED, + this.state + ) originalFeatureTags.data["mr_taskStatus"] = "Fixed" originalFeatureTags.ping() } diff --git a/src/UI/Popup/MarkAsFavouriteMini.svelte b/src/UI/Popup/MarkAsFavouriteMini.svelte index 67d4f18996..3a82da3069 100644 --- a/src/UI/Popup/MarkAsFavouriteMini.svelte +++ b/src/UI/Popup/MarkAsFavouriteMini.svelte @@ -24,7 +24,7 @@ } - + {#if $isFavourite} {/if} @@ -419,6 +420,9 @@
    Faking a user (Testmode)
    + {#if $apiState !== "online"} +
    API is {$apiState}
    + {/if}
    @@ -429,11 +433,13 @@
    - -
    - -
    -
    +
    + +
    + +
    +
    +
    {#if $selectedElement !== undefined && $selectedLayer !== undefined && !$selectedLayer.popupInFloatover} diff --git a/src/assets/contributors.json b/src/assets/contributors.json index 01ff930c6a..0409b22b12 100644 --- a/src/assets/contributors.json +++ b/src/assets/contributors.json @@ -1,11 +1,11 @@ { "contributors": [ { - "commits": 8650, + "commits": 8779, "contributor": "Pieter Vander Vennet" }, { - "commits": 495, + "commits": 505, "contributor": "Robin van der Linde" }, { @@ -80,6 +80,10 @@ "commits": 18, "contributor": "Arno Deceuninck" }, + { + "commits": 17, + "contributor": "Midgard" + }, { "commits": 17, "contributor": "pgm-chardelv1" @@ -128,10 +132,6 @@ "commits": 9, "contributor": "Codain" }, - { - "commits": 9, - "contributor": "Midgard" - }, { "commits": 8, "contributor": "Binnette" diff --git a/src/assets/schemas/layerconfigmeta.json b/src/assets/schemas/layerconfigmeta.json index 676f21a7c4..37df98df37 100644 --- a/src/assets/schemas/layerconfigmeta.json +++ b/src/assets/schemas/layerconfigmeta.json @@ -10653,7 +10653,7 @@ }, { "if": "value=aerialway", - "then": "aerialway - Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines. " + "then": "aerialway - Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines." }, { "if": "value=ambulancestation", @@ -10661,7 +10661,7 @@ }, { "if": "value=animal_shelter", - "then": "animal_shelter - An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres. " + "then": "animal_shelter - An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres." }, { "if": "value=artwork", @@ -10673,7 +10673,7 @@ }, { "if": "value=assisted_repair", - "then": "assisted_repair - A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles." + "then": "assisted_repair - A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles." }, { "if": "value=atm", @@ -10691,6 +10691,10 @@ "if": "value=bbq", "then": "bbq - A permanently installed barbecue, typically accessible to the public." }, + { + "if": "value=beehive", + "then": "beehive - Layer showing beehives" + }, { "if": "value=bench", "then": "bench - A bench is a wooden, metal, stone, … surface where a human can sit. This layers visualises them and asks a few questions about them." @@ -10745,7 +10749,7 @@ }, { "if": "value=brothel", - "then": "brothel - An establishment specifically dedicated to prostitution. " + "then": "brothel - An establishment specifically dedicated to prostitution." }, { "if": "value=cafe_pub", @@ -10765,7 +10769,7 @@ }, { "if": "value=cinema", - "then": "cinema - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US" + "then": "cinema - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US." }, { "if": "value=climbing", @@ -10983,6 +10987,10 @@ "if": "value=information_board", "then": "information_board - A layer showing touristical, road side information boards (e.g. giving information about the landscape, a building, a feature, a map, …)" }, + { + "if": "value=insect_hotel", + "then": "insect_hotel - Layer showing insect hotels" + }, { "if": "value=item_with_image", "then": "item_with_image - All items with an image. All alone, not a layer which is relevant for any MapComplete theme, as it is a random collection of items. However, when put into the databank, this allows to quickly fetch (the URL of) pictures nearby a different object, to quickly link this" diff --git a/src/assets/schemas/layoutconfigmeta.json b/src/assets/schemas/layoutconfigmeta.json index 84baa7dcf4..3e51dae3ac 100644 --- a/src/assets/schemas/layoutconfigmeta.json +++ b/src/assets/schemas/layoutconfigmeta.json @@ -601,7 +601,7 @@ }, { "if": "value=aerialway", - "then": "aerialway (builtin) - Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines. " + "then": "aerialway (builtin) - Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines." }, { "if": "value=ambulancestation", @@ -609,7 +609,7 @@ }, { "if": "value=animal_shelter", - "then": "animal_shelter (builtin) - An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres. " + "then": "animal_shelter (builtin) - An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres." }, { "if": "value=artwork", @@ -621,7 +621,7 @@ }, { "if": "value=assisted_repair", - "then": "assisted_repair (builtin) - A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles." + "then": "assisted_repair (builtin) - A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles." }, { "if": "value=atm", @@ -639,6 +639,10 @@ "if": "value=bbq", "then": "bbq (builtin) - A permanently installed barbecue, typically accessible to the public." }, + { + "if": "value=beehive", + "then": "beehive (builtin) - Layer showing beehives" + }, { "if": "value=bench", "then": "bench (builtin) - A bench is a wooden, metal, stone, … surface where a human can sit. This layers visualises them and asks a few questions about them." @@ -693,7 +697,7 @@ }, { "if": "value=brothel", - "then": "brothel (builtin) - An establishment specifically dedicated to prostitution. " + "then": "brothel (builtin) - An establishment specifically dedicated to prostitution." }, { "if": "value=cafe_pub", @@ -713,7 +717,7 @@ }, { "if": "value=cinema", - "then": "cinema (builtin) - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US" + "then": "cinema (builtin) - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US." }, { "if": "value=climbing", @@ -931,6 +935,10 @@ "if": "value=information_board", "then": "information_board (builtin) - A layer showing touristical, road side information boards (e.g. giving information about the landscape, a building, a feature, a map, …)" }, + { + "if": "value=insect_hotel", + "then": "insect_hotel (builtin) - Layer showing insect hotels" + }, { "if": "value=item_with_image", "then": "item_with_image (builtin) - All items with an image. All alone, not a layer which is relevant for any MapComplete theme, as it is a random collection of items. However, when put into the databank, this allows to quickly fetch (the URL of) pictures nearby a different object, to quickly link this" @@ -13309,7 +13317,7 @@ }, { "if": "value=aerialway", - "then": "aerialway - Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines. " + "then": "aerialway - Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines." }, { "if": "value=ambulancestation", @@ -13317,7 +13325,7 @@ }, { "if": "value=animal_shelter", - "then": "animal_shelter - An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres. " + "then": "animal_shelter - An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres." }, { "if": "value=artwork", @@ -13329,7 +13337,7 @@ }, { "if": "value=assisted_repair", - "then": "assisted_repair - A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles." + "then": "assisted_repair - A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles." }, { "if": "value=atm", @@ -13347,6 +13355,10 @@ "if": "value=bbq", "then": "bbq - A permanently installed barbecue, typically accessible to the public." }, + { + "if": "value=beehive", + "then": "beehive - Layer showing beehives" + }, { "if": "value=bench", "then": "bench - A bench is a wooden, metal, stone, … surface where a human can sit. This layers visualises them and asks a few questions about them." @@ -13401,7 +13413,7 @@ }, { "if": "value=brothel", - "then": "brothel - An establishment specifically dedicated to prostitution. " + "then": "brothel - An establishment specifically dedicated to prostitution." }, { "if": "value=cafe_pub", @@ -13421,7 +13433,7 @@ }, { "if": "value=cinema", - "then": "cinema - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US" + "then": "cinema - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US." }, { "if": "value=climbing", @@ -13639,6 +13651,10 @@ "if": "value=information_board", "then": "information_board - A layer showing touristical, road side information boards (e.g. giving information about the landscape, a building, a feature, a map, …)" }, + { + "if": "value=insect_hotel", + "then": "insect_hotel - Layer showing insect hotels" + }, { "if": "value=item_with_image", "then": "item_with_image - All items with an image. All alone, not a layer which is relevant for any MapComplete theme, as it is a random collection of items. However, when put into the databank, this allows to quickly fetch (the URL of) pictures nearby a different object, to quickly link this" @@ -35053,7 +35069,7 @@ }, { "if": "value=aerialway", - "then": "aerialway - Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines. " + "then": "aerialway - Various forms of transport for passengers and goods that use wires, including cable cars, gondolas, chair lifts, drag lifts, and zip lines." }, { "if": "value=ambulancestation", @@ -35061,7 +35077,7 @@ }, { "if": "value=animal_shelter", - "then": "animal_shelter - An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres. " + "then": "animal_shelter - An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres." }, { "if": "value=artwork", @@ -35073,7 +35089,7 @@ }, { "if": "value=assisted_repair", - "then": "assisted_repair - A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles." + "then": "assisted_repair - A self-assisted workshop is a location where people can come and repair their goods with help of volunteers and with the tools available at the given location. A repair café is a type of event organized regularly along the same principles." }, { "if": "value=atm", @@ -35091,6 +35107,10 @@ "if": "value=bbq", "then": "bbq - A permanently installed barbecue, typically accessible to the public." }, + { + "if": "value=beehive", + "then": "beehive - Layer showing beehives" + }, { "if": "value=bench", "then": "bench - A bench is a wooden, metal, stone, … surface where a human can sit. This layers visualises them and asks a few questions about them." @@ -35145,7 +35165,7 @@ }, { "if": "value=brothel", - "then": "brothel - An establishment specifically dedicated to prostitution. " + "then": "brothel - An establishment specifically dedicated to prostitution." }, { "if": "value=cafe_pub", @@ -35165,7 +35185,7 @@ }, { "if": "value=cinema", - "then": "cinema - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US" + "then": "cinema - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US." }, { "if": "value=climbing", @@ -35383,6 +35403,10 @@ "if": "value=information_board", "then": "information_board - A layer showing touristical, road side information boards (e.g. giving information about the landscape, a building, a feature, a map, …)" }, + { + "if": "value=insect_hotel", + "then": "insect_hotel - Layer showing insect hotels" + }, { "if": "value=item_with_image", "then": "item_with_image - All items with an image. All alone, not a layer which is relevant for any MapComplete theme, as it is a random collection of items. However, when put into the databank, this allows to quickly fetch (the URL of) pictures nearby a different object, to quickly link this" diff --git a/src/assets/translators.json b/src/assets/translators.json index 72be256813..568b5340fd 100644 --- a/src/assets/translators.json +++ b/src/assets/translators.json @@ -13,11 +13,11 @@ "contributor": "paunofu" }, { - "commits": 127, + "commits": 154, "contributor": "Anonymous" }, { - "commits": 106, + "commits": 107, "contributor": "mcliquid" }, { @@ -25,11 +25,11 @@ "contributor": "Allan Nordhøy" }, { - "commits": 83, + "commits": 89, "contributor": "Robin van der Linde" }, { - "commits": 70, + "commits": 76, "contributor": "mike140" }, { @@ -37,24 +37,28 @@ "contributor": "danieldegroot2" }, { - "commits": 53, - "contributor": "Harry Bond" + "commits": 54, + "contributor": "Jiří Podhorecký" }, { - "commits": 52, - "contributor": "Jiří Podhorecký" + "commits": 53, + "contributor": "Harry Bond" }, { "commits": 51, "contributor": "gallegonovato" }, { - "commits": 44, - "contributor": "Babos Gábor" + "commits": 47, + "contributor": "Supaplex" }, { - "commits": 44, - "contributor": "Supaplex" + "commits": 46, + "contributor": "Midgard" + }, + { + "commits": 45, + "contributor": "Babos Gábor" }, { "commits": 38, @@ -116,6 +120,10 @@ "commits": 14, "contributor": "J. Lavoie" }, + { + "commits": 13, + "contributor": "small" + }, { "commits": 13, "contributor": "Olivier" @@ -148,10 +156,6 @@ "commits": 11, "contributor": "Túllio Franca" }, - { - "commits": 10, - "contributor": "small" - }, { "commits": 10, "contributor": "Jeff Huang" @@ -208,6 +212,10 @@ "commits": 9, "contributor": "Jacque Fresco" }, + { + "commits": 8, + "contributor": "Joost Schouppe" + }, { "commits": 8, "contributor": "nilocram" @@ -216,6 +224,10 @@ "commits": 8, "contributor": "Vinicius" }, + { + "commits": 7, + "contributor": "Weblate Admin" + }, { "commits": 7, "contributor": "Franco" @@ -224,10 +236,6 @@ "commits": 7, "contributor": "NetworkedPoncho" }, - { - "commits": 7, - "contributor": "Joost Schouppe" - }, { "commits": 7, "contributor": "Andrews Leruth" @@ -276,6 +284,10 @@ "commits": 6, "contributor": "lvgx" }, + { + "commits": 5, + "contributor": "Eric Armijo" + }, { "commits": 5, "contributor": "foxandpotatoes" @@ -328,10 +340,6 @@ "commits": 5, "contributor": "Alexey Shabanov" }, - { - "commits": 4, - "contributor": "Weblate Admin" - }, { "commits": 4, "contributor": "André Marcelo Alvarenga" @@ -358,7 +366,11 @@ }, { "commits": 3, - "contributor": "Eric Armijo" + "contributor": "Gábor" + }, + { + "commits": 3, + "contributor": "Michal Čermák" }, { "commits": 3, @@ -440,6 +452,10 @@ "commits": 3, "contributor": "SiegbjornSitumeang" }, + { + "commits": 2, + "contributor": "Héctor Ochoa Ortiz" + }, { "commits": 2, "contributor": "SmallSoap" @@ -524,10 +540,6 @@ "commits": 2, "contributor": "Marc Marc" }, - { - "commits": 2, - "contributor": "Midgard" - }, { "commits": 2, "contributor": "M. Rey" @@ -572,14 +584,6 @@ "commits": 2, "contributor": "Leo Alcaraz" }, - { - "commits": 1, - "contributor": "Héctor Ochoa Ortiz" - }, - { - "commits": 1, - "contributor": "Gábor" - }, { "commits": 1, "contributor": "Roger" @@ -636,10 +640,6 @@ "commits": 1, "contributor": "Julio Salas" }, - { - "commits": 1, - "contributor": "Michal Čermák" - }, { "commits": 1, "contributor": "Juan" diff --git a/test/Models/ThemeConfig/Conversion/PrepareLayer.spec.ts b/test/Models/ThemeConfig/Conversion/PrepareLayer.spec.ts index 1b4a95ee24..26f168f875 100644 --- a/test/Models/ThemeConfig/Conversion/PrepareLayer.spec.ts +++ b/test/Models/ThemeConfig/Conversion/PrepareLayer.spec.ts @@ -128,7 +128,7 @@ describe("RewriteSpecial", function () { expect(r).toEqual({ id: "uk_addresses_import_button", render: { - "*": "{import_button(address,urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$,Add this address,./assets/themes/uk_addresses/housenumber_add.svg,,,,)}", + "*": "{import_button(address,urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$,Add this address,./assets/themes/uk_addresses/housenumber_add.svg,,,,,)}", }, }) })