diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index 964b5c27f..000000000 --- a/.gitpod.yml +++ /dev/null @@ -1,20 +0,0 @@ -tasks: - - init: npm run init - command: npm run start - name: Initialize and start MapComplete - - name: Generate Layeroverview - command: npm run generate:layeroverview - -ports: - - name: MapComplete Website - port: 1234 - onOpen: open-browser - -vscode: - extensions: - - "esbenp.prettier-vscode" - - "eamodio.gitlens" - - "github.vscode-pull-request-github" - - "svelte.svelte-vscode" - - "bradlc.vscode-tailwindcss" - - "editorconfig.editorconfig" diff --git a/Docs/Development_deployment.md b/Docs/Development_deployment.md index 317cbddb8..4836505e4 100644 --- a/Docs/Development_deployment.md +++ b/Docs/Development_deployment.md @@ -31,17 +31,17 @@ You need at least 3GB RAM available to run MapComplete, but you'll preferably ha To develop and build MapComplete, you 0. Make a fork and clone the repository. (We recommend a shallow clone with `git clone --filter=blob:none `) -1. Install `python3` if you do not have it already - On Linux: `sudo apt install python3` +1. Install `python3` if you do not have it already - On Linux: `sudo apt install python3` or `sudo dnf install python3` 2. Install `nvm` to easily install node: - `wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash` - Restart your terminal - Run `nvm install` and `nvm use` to install and use the correct version of node. (_Note: nvm might complain that the relevant version is not yet installed. It'll have it installed only for the current user account but not system-wide - which is fine) -4. Run `npm run init` (including **run**, not ~~`npm init`~~)which … +3. Run `npm run init` (including **run**, not ~~`npm init`~~)which … - runs `npm ci` for you - generates some additional dependencies and files - does various housekeeping and setup. This can take a few minutes the first time as some PNGs need to be created -5. Run `npm run start` to host a local testversion at http://localhost:1234/ -6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` +4. Run `npm run start` to host a local testversion at http://127.0.0.1:1234/ +5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` or `userlayout=true#` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version. @@ -52,31 +52,18 @@ Development using Windows You need at least 3GB RAM available to run MapComplete, but you'll preferably have 8GB of free RAM available. -For Windows you can use the devcontainer, or the WSL subsystem. - -To use the devcontainer in Visual Studio Code: - -0. Make sure you have installed - the [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) - extension and it's dependencies. -1. Make a fork and clone the repository. -2. After cloning, Visual Studio Code will ask you if you want to use the devcontainer. -3. Then you can either clone it again in a volume (for better performance), or open the current folder in a container. -4. By now, you should be able to run `npm run start` to host a local testversion at http://localhost:1234/index.html -5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` - or `userlayout=true#` as [Query parameter](URL_Parameters.md). Note that the shorter URLs ( - e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version. +For Windows you can use the WSL subsystem. To use the WSL in Visual Studio Code: -0. Make sure you have installed the [Remote - WSL]() extension and it's dependencies. -1. Open a remote WSL window using the button in the bottom left. -2. Make a fork and clone the repository. -3. Install `npm` using `sudo apt install npm`. -4. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the +1. Make sure you have installed the [Remote - WSL](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) extension and it's dependencies. +2. Open a remote WSL window using the button in the bottom left. +3. Make a fork and clone the repository. +4. Install `npm` using `sudo apt install npm`. +5. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the dependencies too -5. Run `npm run start` to host a local testversion at http://localhost:1234/index.html -6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` +6. Run `npm run start` to host a local testversion at http://127.0.0.1:1234/index.html +7. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` or `userlayout=true#` as [Query parameter](URL_Parameters.md). Note that the shorter URLs ( e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version. @@ -95,10 +82,12 @@ Note that `npm run start` is equivalent to `npm run generate:layeroverview && np Automatic deployment -------------------- -Currently, the master branch is automatically deployed to https://mapcomplete.org/ by a Forgejo action. +MapComplete is automatically deployed to various locations, depending on the branch you are working on. -Every branch is automatically built (upon push) to `https://pietervdvn.github.io/mc/` by a GitHub action. +The master branch is automatically deployed to https://mapcomplete.org/, and the development branch is available at +https://dev.mapcomplete.org/. Both are automatically deployed by a Forgejo action. +Other branches are automatically deployed to https://builds.mapcomplete.org/. Deploying a fork ---------------- @@ -113,9 +102,9 @@ This script can be invoked with `npm run prepare-deploy` If you want to deploy your fork: -0. `npm run prepare-deploy` -1. `npm run build` -2. Copy the entire `dist` folder to where you host your website. Visiting `index.html` gives you the landing page, +1. `npm run prepare-deploy` +2. `npm run build` +3. Copy the entire `dist` folder to where you host your website. Visiting `index.html` gives you the landing page, visiting `yourwebsite/` should bring you to the appropriate theme. ### Getting your own API-keys diff --git a/assets/layers/atm/atm.json b/assets/layers/atm/atm.json index 34ed9f194..eda4cbc34 100644 --- a/assets/layers/atm/atm.json +++ b/assets/layers/atm/atm.json @@ -192,58 +192,41 @@ } }, { - "id": "operator", - "question": { - "en": "What company operates this ATM?", - "de": "Welches Unternehmen betreibt den Geldautomaten?", - "fr": "Quelle société exploite ce DAB ?", - "nl": "Welk bedrijf beheert deze geldautomaat?", - "nb_NO": "Hvilket selskap driver denne minibanken?", - "ca": "Quina companyia opera aquest caixer?", - "cs": "Která společnost provozuje tento bankomat?", - "he": "איזו חברה מפעילה את הכספומט הזה?", - "pl": "Jaka firma obsługuje ten bankomat?", - "pt_BR": "Qual companhia opera esse caixa eletrônico?", - "es": "¿Qué empresa opera este cajero automático?", - "pt": "Qual companhia opera este multibanco?", - "it": "Quale azienda gestisce questo sportello bancomat?" - }, - "render": { - "en": "The ATM is operated by {operator}", - "de": "Der Geldautomat wird betrieben von {operator}", - "fr": "Ce DAB est exploité par {operator}", - "nl": "Deze geldautomaat wordt beheerd door {operator}", - "nb_NO": "Minibanken drives av {operator}", - "ca": "{operator} opera aquest caixer", - "cs": "Bankomat provozuje {operator}", - "he": "הכספומט מופעל על ידי {operator}", - "pl": "Ten bankomat jest obsługiwany przez {operator}", - "pt_BR": "O caixa eletrônico é operado por {operator}", - "es": "El cajero automático es operado por {operator}", - "pt": "O multibanco é operado por {operator}", - "sl": "Ta bankomat upravlja {operator}", - "it": "Lo sportello bancomat è gestito da {operator}" - }, - "freeform": { - "key": "operator", - "type": "string", - "placeholder": { - "en": "Operator", - "de": "Betreiber", - "fr": "Opérateur", - "nl": "Beheerder", - "ca": "Operador", - "cs": "Operátor", - "he": "מפעיל", - "eu": "Operadorea", - "pt_BR": "Operador", - "es": "Operador", - "pt": "Operador", - "it": "Operatore", - "cy": "Gweithredwr" + "builtin": "operator", + "override": { + "condition": "amenity!=bank", + "question": { + "en": "What company operates this ATM?", + "de": "Welches Unternehmen betreibt den Geldautomaten?", + "fr": "Quelle société exploite ce DAB ?", + "nl": "Welk bedrijf beheert deze geldautomaat?", + "nb_NO": "Hvilket selskap driver denne minibanken?", + "ca": "Quina companyia opera aquest caixer?", + "cs": "Která společnost provozuje tento bankomat?", + "he": "איזו חברה מפעילה את הכספומט הזה?", + "pl": "Jaka firma obsługuje ten bankomat?", + "pt_BR": "Qual companhia opera esse caixa eletrônico?", + "es": "¿Qué empresa opera este cajero automático?", + "pt": "Qual companhia opera este multibanco?", + "it": "Quale azienda gestisce questo sportello bancomat?" + }, + "render": { + "en": "The ATM is operated by {operator}", + "de": "Der Geldautomat wird betrieben von {operator}", + "fr": "Ce DAB est exploité par {operator}", + "nl": "Deze geldautomaat wordt beheerd door {operator}", + "nb_NO": "Minibanken drives av {operator}", + "ca": "{operator} opera aquest caixer", + "cs": "Bankomat provozuje {operator}", + "he": "הכספומט מופעל על ידי {operator}", + "pl": "Ten bankomat jest obsługiwany przez {operator}", + "pt_BR": "O caixa eletrônico é operado por {operator}", + "es": "El cajero automático es operado por {operator}", + "pt": "O multibanco é operado por {operator}", + "sl": "Ta bankomat upravlja {operator}", + "it": "Lo sportello bancomat è gestito da {operator}" } - }, - "condition": "amenity!=bank" + } }, "opening_hours_24_7", { @@ -416,6 +399,41 @@ } ] }, + { + "id": "cash_in-types", + "question": { + "en": "In what ways can you deposit cash at this ATM?", + "nl": "Op welke manieren kan je geld storten bij deze geldautomaat?" + }, + "mappings": [ + { + "if": "cash_in:coins=yes", + "ifnot": "cash_in:coins=no", + "then": { + "en": "You can deposit coins at this ATM", + "nl": "Je kan munten storten bij deze geldautomaat" + } + }, + { + "if": "cash_in:notes=yes", + "ifnot": "cash_in:notes=no", + "then": { + "en": "You can deposit notes at this ATM", + "nl": "Je kan biljetten storten bij deze geldautomaat" + } + }, + { + "if": "cash_in:sealbags=yes", + "ifnot": "cash_in:sealbags=no", + "then": { + "en": "You can deposit sealed bags at this ATM", + "nl": "Je kan sealbags storten bij deze geldautomaat" + } + } + ], + "condition": "cash_in=yes", + "multiAnswer": true + }, { "id": "cash_out-denominations-notes", "question": { @@ -692,4 +710,4 @@ "enableImproveAccuracy": true, "enableRelocation": false } -} +} \ No newline at end of file diff --git a/assets/layers/fitness_station/fitness_station.json b/assets/layers/fitness_station/fitness_station.json index 72db0d200..ba87844aa 100644 --- a/assets/layers/fitness_station/fitness_station.json +++ b/assets/layers/fitness_station/fitness_station.json @@ -535,37 +535,37 @@ "multiAnswer": true }, { - "id": "operator", - "question": { - "en": "Who maintains this fitness station?", - "de": "Wer betreibt die Fitness-Station?", - "nl": "Wie beheert dit fitness-toestel?", - "ca": "Qui manté l'estació de fitness?", - "cs": "Kdo spravuje tuto fitness stanici?", - "es": "¿Quién mantiene esta estación de fitness?", - "it": "Chi mantiene questa stazione fitness?" - }, - "render": { - "en": "The fitness station is maintained by {operator}.", - "de": "Die Fitness-Station wird betrieben von {operator}.", - "nl": "Dit fitness-toestel wordt beheerd door {operator}", - "ca": "{operator} manté l'estació de fitness.", - "cs": "Fitness stanici spravuje {operator}.", - "es": "La estación de fitness es mantenida por {operator}.", - "it": "La stazione fitness è mantenuta da {operator}." - }, - "freeform": { - "key": "operator", - "placeholder": { - "en": "Operator of the fitness station", - "de": "Betreiber der Fitness-Station", - "nl": "Beheerder van het fitness-toestel", - "cs": "Provozovatel fitness stanice", - "es": "Operador de la estación de fitness", - "ca": "Operador de l'estació de fitness", - "it": "Gestore della stazione fitness" + "builtin": "operator", + "override": { + "question": { + "en": "Who maintains this fitness station?", + "de": "Wer betreibt die Fitness-Station?", + "nl": "Wie beheert dit fitness-toestel?", + "ca": "Qui manté l'estació de fitness?", + "cs": "Kdo spravuje tuto fitness stanici?", + "es": "¿Quién mantiene esta estación de fitness?", + "it": "Chi mantiene questa stazione fitness?" }, - "type": "string" + "render": { + "en": "The fitness station is maintained by {operator}.", + "de": "Die Fitness-Station wird betrieben von {operator}.", + "nl": "Dit fitness-toestel wordt beheerd door {operator}", + "ca": "{operator} manté l'estació de fitness.", + "cs": "Fitness stanici spravuje {operator}.", + "es": "La estación de fitness es mantenida por {operator}.", + "it": "La stazione fitness è mantenuta da {operator}." + }, + "freeform": { + "placeholder": { + "en": "Operator of the fitness station", + "de": "Betreiber der Fitness-Station", + "nl": "Beheerder van het fitness-toestel", + "cs": "Provozovatel fitness stanice", + "es": "Operador de la estación de fitness", + "ca": "Operador de l'estació de fitness", + "it": "Gestore della stazione fitness" + } + } } }, "opening_hours_24_7" @@ -578,4 +578,4 @@ "enableImproveAccuracy": true }, "allowCopy": true -} +} \ No newline at end of file diff --git a/assets/layers/mobility_hub/logo-hub.svg b/assets/layers/mobility_hub/logo-hub.svg index ea9f6c807..9f6424ced 100644 --- a/assets/layers/mobility_hub/logo-hub.svg +++ b/assets/layers/mobility_hub/logo-hub.svg @@ -8,7 +8,7 @@ height="500" viewBox="0 0 500 500" sodipodi:docname="logo-hub.svg" - inkscape:version="1.4 (e7c3feb100, 2024-10-09)" + inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" @@ -25,10 +25,10 @@ inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:zoom="0.68921927" - inkscape:cx="263.34145" - inkscape:cy="171.93367" - inkscape:window-width="1704" - inkscape:window-height="996" + inkscape:cx="264.06691" + inkscape:cy="172.65913" + inkscape:window-width="2560" + inkscape:window-height="1371" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" @@ -45,17 +45,11 @@ d="m 436.5236,681.36291 c -6.74741,-2.13918 -14.9843,-7.26966 -34.32508,-21.37991 -68.5756,-50.02998 -120.91693,-107.10242 -149.04086,-162.51261 -17.0909,-33.67273 -25.59741,-65.40593 -26.628,-99.33465 -1.15068,-37.88281 6.06308,-71.70048 22.46148,-105.29805 30.02816,-61.52265 86.3781,-106.04268 152.70885,-120.6497 17.43029,-3.83841 28.50629,-4.98052 48.30017,-4.98052 19.79387,0 30.86987,1.14211 48.30016,4.98052 94.21933,20.7485 164.51505,100.20844 174.54536,197.3003 1.58552,15.34767 0.64021,42.86331 -1.97525,57.4944 -13.20508,73.87025 -65.11208,147.83867 -152.43593,217.22396 -13.05291,10.37151 -39.96705,29.70314 -46.65434,33.51044 -10.2471,5.83402 -23.90103,7.24594 -35.25656,3.64582 z" id="path1" sodipodi:nodetypes="sssssssssssss" /> - hub + diff --git a/assets/layers/parcel_lockers/parcel_lockers.json b/assets/layers/parcel_lockers/parcel_lockers.json index 903aec5de..d34eccaa6 100644 --- a/assets/layers/parcel_lockers/parcel_lockers.json +++ b/assets/layers/parcel_lockers/parcel_lockers.json @@ -146,44 +146,30 @@ } }, { - "id": "operator", - "question": { - "en": "What is the operator of the parcel locker?", - "de": "Was ist der Betreiber des Paketschließfachs?", - "nl": "Wie is de beheerder van deze pakketautomaat?", - "ca": "Qui gestiona aquesta bústia intel·ligent?", - "fr": "Quel est l'exploitant de ce casier à colis ?", - "cs": "Kdo je provozovatelem schránky na balíky?", - "es": "¿Cuál es el operador de la taquilla de paquetes?", - "it": "Chi è l'operatore dell'armadietto per pacchi?", - "uk": "Який оператор поштомату?" - }, - "render": { - "en": "This parcel locker is operated by {operator}", - "de": "Dieses Paketschließfach wird von {operator} betrieben", - "nl": "Deze pakketautomaat wordt beheerd door {operator}", - "ca": "Aquesta bústia intel·ligent la gestiona {operator}", - "fr": "Ce casier à colis est exploité par {operator}", - "pl": "Ten paczkomat jest obsługiwany przez {operator}", - "cs": "Tuto schránku na balíky provozuje {operator}", - "es": "Esta taquilla de paquetes es operada por {operator}", - "it": "Questo armadietto per pacchi è gestito da {operator}", - "uk": "Цей посилкова шафка обслуговується компанією {operator}" - }, - "freeform": { - "key": "operator", - "type": "string", - "placeholder": { - "en": "Operator", - "de": "Betreiber", - "nl": "Beheerder", - "ca": "Gestor", - "fr": "Exploitant", - "pl": "Operator", - "cs": "Operátor", - "es": "Operador", - "cy": "Gweithredwr", - "it": "Operatore" + "builtin": "operator", + "override": { + "question": { + "en": "What is the operator of the parcel locker?", + "de": "Was ist der Betreiber des Paketschließfachs?", + "nl": "Wie is de beheerder van deze pakketautomaat?", + "ca": "Qui gestiona aquesta bústia intel·ligent?", + "fr": "Quel est l'exploitant de ce casier à colis ?", + "cs": "Kdo je provozovatelem schránky na balíky?", + "es": "¿Cuál es el operador de la taquilla de paquetes?", + "it": "Chi è l'operatore dell'armadietto per pacchi?", + "uk": "Який оператор поштомату?" + }, + "render": { + "en": "This parcel locker is operated by {operator}", + "de": "Dieses Paketschließfach wird von {operator} betrieben", + "nl": "Deze pakketautomaat wordt beheerd door {operator}", + "ca": "Aquesta bústia intel·ligent la gestiona {operator}", + "fr": "Ce casier à colis est exploité par {operator}", + "pl": "Ten paczkomat jest obsługiwany przez {operator}", + "cs": "Tuto schránku na balíky provozuje {operator}", + "es": "Esta taquilla de paquetes es operada por {operator}", + "it": "Questo armadietto per pacchi è gestito da {operator}", + "uk": "Цей посилкова шафка обслуговується компанією {operator}" } } }, @@ -339,4 +325,4 @@ "enableImproveAccuracy": true }, "allowCopy": true -} +} \ No newline at end of file diff --git a/assets/layers/postboxes/postboxes.json b/assets/layers/postboxes/postboxes.json index 32f746676..6a1894de4 100644 --- a/assets/layers/postboxes/postboxes.json +++ b/assets/layers/postboxes/postboxes.json @@ -145,25 +145,24 @@ "render": "{minimap(18): height: 5rem; overflow: hidden; border-radius:3rem; }" }, { - "id": "operator", - "question": { - "en": "Who operates this postbox?", - "de": "Wer betreibt diesen Briefkasten?", - "es": "¿Quién gestiona este buzón?", - "ca": "Qui opera aquesta bústia?", - "cs": "Kdo provozuje tuto poštovní schránku?", - "it": "Chi gestisce questa cassetta postale?" - }, - "render": { - "en": "This postbox is operated by {operator}", - "de": "Dieser Briefkasten wird von {operator} betrieben", - "es": "Este buzón es operado por {operator}.", - "ca": "Aquesta bústia està operada per {operator}", - "cs": "Tuto poštovní schránku provozuje {operator}", - "it": "Questa cassetta postale è gestita da {operator}" - }, - "freeform": { - "key": "operator" + "builtin": "operator", + "override": { + "question": { + "en": "Who operates this postbox?", + "de": "Wer betreibt diesen Briefkasten?", + "es": "¿Quién gestiona este buzón?", + "ca": "Qui opera aquesta bústia?", + "cs": "Kdo provozuje tuto poštovní schránku?", + "it": "Chi gestisce questa cassetta postale?" + }, + "render": { + "en": "This postbox is operated by {operator}", + "de": "Dieser Briefkasten wird von {operator} betrieben", + "es": "Este buzón es operado por {operator}.", + "ca": "Aquesta bústia està operada per {operator}", + "cs": "Tuto poštovní schránku provozuje {operator}", + "it": "Questa cassetta postale è gestita da {operator}" + } } } ], @@ -194,4 +193,4 @@ "pakjes" ] } -} +} \ No newline at end of file diff --git a/assets/layers/public_bookcase/public_bookcase.json b/assets/layers/public_bookcase/public_bookcase.json index 404d51060..84f3e2b2e 100644 --- a/assets/layers/public_bookcase/public_bookcase.json +++ b/assets/layers/public_bookcase/public_bookcase.json @@ -410,34 +410,32 @@ "condition": "indoor=yes" }, { - "id": "public_bookcase-operator", - "question": { - "en": "Who maintains this public bookcase?", - "nl": "Wie is verantwoordelijk voor dit boekenruilkastje?", - "de": "Wer betreibt den Bücherschrank?", - "fr": "Qui entretien cette microbibliothèque ?", - "it": "Chi mantiene questa libreria pubblica?", - "hu": "Ki tartja fenn ezt a nyilvános könyvespolcot?", - "ca": "Qui gestiona aquesta prestatgeria pública?", - "cs": "Kdo tuto veřejnou knihobudku spravuje?", - "es": "¿Quién mantiene este librero público?", - "da": "Hvem står for at vedligeholde dette bogbytteskab?" - }, - "render": { - "en": "Operated by {operator}", - "nl": "Onderhouden door {operator}", - "de": "Betrieben von {operator}", - "fr": "Entretenue par {operator}", - "it": "Gestita da {operator}", - "hu": "Üzemeltető: {operator}", - "ca": "Gestionant per {operator}", - "cs": "Provozuje {operator}", - "es": "Operado por {operator}", - "da": "Drevet af {operator}" - }, - "freeform": { - "type": "string", - "key": "operator" + "builtin": "operator", + "override": { + "question": { + "en": "Who maintains this public bookcase?", + "nl": "Wie is verantwoordelijk voor dit boekenruilkastje?", + "de": "Wer betreibt den Bücherschrank?", + "fr": "Qui entretien cette microbibliothèque ?", + "it": "Chi mantiene questa libreria pubblica?", + "hu": "Ki tartja fenn ezt a nyilvános könyvespolcot?", + "ca": "Qui gestiona aquesta prestatgeria pública?", + "cs": "Kdo tuto veřejnou knihobudku spravuje?", + "es": "¿Quién mantiene este librero público?", + "da": "Hvem står for at vedligeholde dette bogbytteskab?" + }, + "render": { + "en": "This public bookcase is operated by {operator}", + "nl": "Onderhouden door {operator}", + "de": "Betrieben von {operator}", + "fr": "Entretenue par {operator}", + "it": "Gestita da {operator}", + "hu": "Üzemeltető: {operator}", + "ca": "Gestionant per {operator}", + "cs": "Provozuje {operator}", + "es": "Operado por {operator}", + "da": "Drevet af {operator}" + } } }, { @@ -735,4 +733,4 @@ "neededChangesets": 5 }, "allowMove": true -} +} \ No newline at end of file diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json index d52140615..93eca0fc0 100644 --- a/assets/layers/questions/questions.json +++ b/assets/layers/questions/questions.json @@ -3390,6 +3390,35 @@ "key": "ref" } }, + { + "id": "operator", + "question": { + "en": "What company operates this place?" + }, + "render": { + "en": "This place is operated by {operator}" + }, + "freeform": { + "key": "operator", + "type": "string", + "placeholder": { + "en": "Operator", + "de": "Betreiber", + "fr": "Opérateur", + "nl": "Beheerder", + "ca": "Operador", + "cs": "Operátor", + "he": "מפעיל", + "eu": "Operadorea", + "pt_BR": "Operador", + "pl": "Operator", + "es": "Operador", + "pt": "Operador", + "it": "Operatore", + "cy": "Gweithredwr" + } + } + }, { "id": "child_highchair", "question": { @@ -3529,4 +3558,4 @@ } } ] -} +} \ No newline at end of file diff --git a/assets/layers/recycling/recycling.json b/assets/layers/recycling/recycling.json index 52758d5c6..6348f4a92 100644 --- a/assets/layers/recycling/recycling.json +++ b/assets/layers/recycling/recycling.json @@ -1328,30 +1328,28 @@ "multiAnswer": true }, { - "id": "operator", - "question": { - "en": "What company operates this recycling facility?", - "nl": "Wat is de beheerder van deze recyclingfaciliteit?", - "de": "Welches Unternehmen betreibt diese Recyclinganlage?", - "es": "¿Qué empresa opera esta instalación de reciclaje?", - "it": "Quale azienda gestisce questa struttura di riciclaggio?", - "ca": "Quina empresa opera aquesta infraestructura de reciclatge?", - "fr": "Quelle entreprise gère ce point de recyclage ?", - "cs": "Jaká společnost provozuje toto recyklační zařízení?" - }, - "render": { - "en": "This recycling facility is operated by {operator}", - "nl": "Deze recyclingfaciliteit wordt beheerd door {operator}", - "de": "Die Recyclingeinrichtung wird betrieben von {operator}", - "es": "Esta instalación de reciclaje está operada por {operator}", - "it": "Questa struttura di riciclaggio è gestita da {operator}", - "ca": "Aquesta infraestuctura de reciclatge està operada per {operator}", - "fr": "Ce point de recyclage est géré par {operator}", - "cs": "Toto recyklační zařízení provozuje {operator}" - }, - "freeform": { - "key": "operator", - "type": "string" + "builtin": "operator", + "override": { + "question": { + "en": "What company operates this recycling facility?", + "nl": "Wat is de beheerder van deze recyclingfaciliteit?", + "de": "Welches Unternehmen betreibt diese Recyclinganlage?", + "es": "¿Qué empresa opera esta instalación de reciclaje?", + "it": "Quale azienda gestisce questa struttura di riciclaggio?", + "ca": "Quina empresa opera aquesta infraestructura de reciclatge?", + "fr": "Quelle entreprise gère ce point de recyclage ?", + "cs": "Jaká společnost provozuje toto recyklační zařízení?" + }, + "render": { + "en": "This recycling facility is operated by {operator}", + "nl": "Deze recyclingfaciliteit wordt beheerd door {operator}", + "de": "Die Recyclingeinrichtung wird betrieben von {operator}", + "es": "Esta instalación de reciclaje está operada por {operator}", + "it": "Questa struttura di riciclaggio è gestita da {operator}", + "ca": "Aquesta infraestuctura de reciclatge està operada per {operator}", + "fr": "Ce point de recyclage est géré par {operator}", + "cs": "Toto recyklační zařízení provozuje {operator}" + } } }, { @@ -1906,4 +1904,4 @@ "enableRelocation": true, "enableImproveAccuracy": true } -} +} \ No newline at end of file diff --git a/assets/layers/street_lamps/street_lamps.json b/assets/layers/street_lamps/street_lamps.json index bd30f2286..57500bc57 100644 --- a/assets/layers/street_lamps/street_lamps.json +++ b/assets/layers/street_lamps/street_lamps.json @@ -270,7 +270,8 @@ "ca": "Aquest fanal es troba al final d'un pal recte", "cs": "Tato lampa je umístěna na vrcholu rovného stožáru", "it": "Questo lampione si trova in cima a un palo dritto" - } + }, + "icon": "./assets/layers/street_lamps/straight_pole.svg" }, { "if": "lamp_mount=bent_mast", @@ -282,7 +283,8 @@ "ca": "Aquest fanal es troba al final d'un pal doblegat", "cs": "Tato lampa je umístěna na konci ohnutého stožáru", "it": "Questo lampione si trova all'estremità di un palo curvo" - } + }, + "icon": "./assets/layers/street_lamps/bent_pole_1.svg" } ], "condition": { @@ -675,4 +677,4 @@ "enableImproveAccuracy": true, "enableRelocation": false } -} +} \ No newline at end of file diff --git a/assets/layers/surveillance_camera/surveillance_camera.json b/assets/layers/surveillance_camera/surveillance_camera.json index a1f2de1dc..d483aad4a 100644 --- a/assets/layers/surveillance_camera/surveillance_camera.json +++ b/assets/layers/surveillance_camera/surveillance_camera.json @@ -27,7 +27,12 @@ "source": { "osmTags": { "and": [ - "man_made=surveillance", + { + "or": [ + "man_made=surveillance", + "disused:man_made=surveillance" + ] + }, { "or": [ "surveillance:type=camera", @@ -52,7 +57,15 @@ "es": "Cámara de vigilancia", "cs": "Bezpečnostní kamera", "sl": "Nadzorna kamera" - } + }, + "mappings": [ + { + "if": "disused:man_made=surveillance", + "then": { + "en": "Disused surveillance camera" + } + } + ] }, "pointRendering": [ { @@ -122,7 +135,13 @@ "then": "calc({_direction:numerical}deg - 90deg)" } ] - } + }, + "iconBadges": [ + { + "if": "disused:man_made=surveillance", + "then": "close:red" + } + ] } ], "lineRendering": [ @@ -237,6 +256,35 @@ ], "tagRenderings": [ "images", + { + "id": "active", + "question": { + "en": "Is this camera currently in use?", + "nl": "Is deze camera momenteel in gebruik?" + }, + "mappings": [ + { + "if": "man_made=surveillance", + "then": { + "en": "This camera is currently in use.", + "nl": "Deze camera is momenteel in gebruik." + }, + "addExtraTags": [ + "disused:man_made=" + ] + }, + { + "if": "disused:man_made=surveillance", + "then": { + "en": "This camera is not used anymore", + "nl": "Deze camera is niet meer in gebruik" + }, + "addExtraTags": [ + "man_made=" + ] + } + ] + }, { "id": "has_alpr", "question": { @@ -910,4 +958,4 @@ "enableRelocation": false }, "enableMorePrivacy": true -} +} \ No newline at end of file diff --git a/assets/layers/ticket_machine/ticket_machine.json b/assets/layers/ticket_machine/ticket_machine.json index f1eee9173..339a9d4ae 100644 --- a/assets/layers/ticket_machine/ticket_machine.json +++ b/assets/layers/ticket_machine/ticket_machine.json @@ -79,56 +79,45 @@ "images", "level", { - "id": "operator", - "question": { - "en": "Who is the operator of this ticket machine?", - "de": "Wer ist der Betreiber dieses Fahrkartenautomaten?", - "nl": "Wie is de beheerder van deze kaartautomaat?", - "ca": "Qui és l'operador d'aquesta màquina de venda de bitllets?", - "cs": "Kdo je provozovatelem tohoto automatu na jízdenky?", - "es": "¿Quién es el operador de esta máquina expendedora de billetes?", - "it": "Chi è l'operatore di questa biglietteria automatica?" - }, - "render": { - "en": "This ticket machine is operated by {operator}", - "de": "Dieser Fahrkartenautomat wird betrieben von {operator}", - "nl": "Deze kaartautomaat wordt beheerd door {operator}", - "ca": "{operator} opera aquesta màquina de bitllets", - "cs": "Tento automat na jízdenky provozuje {operator}", - "es": "Esta máquina expendedora de billetes está operada por {operator}", - "it": "Questa biglietteria automatica è gestita da {operator}" - }, - "freeform": { - "key": "operator", - "type": "string", - "placeholder": { - "en": "Name of the operator", - "de": "Name des Betreibers", - "nl": "Naam van de beheerder", - "ca": "Nom de l'operador", - "cs": "Jméno operátora", - "es": "Nombre del operador", - "it": "Nome dell'operatore" - } - }, - "mappings": [ - { - "if": "operator=Nederlandse Spoorwegen", - "then": { - "en": "Dutch Railways (NS)", - "nl": "Nederlandse Spoorwegen (NS)", - "de": "Niederländische Eisenbahn (NS)", - "ca": "Ferrocarrils holandesos (NS)", - "cs": "Nizozemské dráhy (NS)", - "es": "Ferrocarriles Holandeses (NS)", - "it": "Ferrovie Olandesi (NS)" - }, - "addExtraTags": [ - "operator:wikidata=Q23076" - ], - "hideInAnswer": "_country!=nl" - } - ] + "builtin": "operator", + "override": { + "question": { + "en": "Who is the operator of this ticket machine?", + "de": "Wer ist der Betreiber dieses Fahrkartenautomaten?", + "nl": "Wie is de beheerder van deze kaartautomaat?", + "ca": "Qui és l'operador d'aquesta màquina de venda de bitllets?", + "cs": "Kdo je provozovatelem tohoto automatu na jízdenky?", + "es": "¿Quién es el operador de esta máquina expendedora de billetes?", + "it": "Chi è l'operatore di questa biglietteria automatica?" + }, + "render": { + "en": "This ticket machine is operated by {operator}", + "de": "Dieser Fahrkartenautomat wird betrieben von {operator}", + "nl": "Deze kaartautomaat wordt beheerd door {operator}", + "ca": "{operator} opera aquesta màquina de bitllets", + "cs": "Tento automat na jízdenky provozuje {operator}", + "es": "Esta máquina expendedora de billetes está operada por {operator}", + "it": "Questa biglietteria automatica è gestita da {operator}" + }, + "mappings+": [ + { + "if": "operator=Nederlandse Spoorwegen", + "then": { + "en": "Dutch Railways (NS)", + "nl": "Nederlandse Spoorwegen (NS)", + "de": "Niederländische Eisenbahn (NS)", + "ca": "Ferrocarrils holandesos (NS)", + "cs": "Nizozemské dráhy (NS)", + "es": "Ferrocarriles Holandeses (NS)", + "it": "Ferrovie Olandesi (NS)" + }, + "addExtraTags": [ + "operator:wikidata=Q23076" + ], + "hideInAnswer": "_country!=nl" + } + ] + } }, "payment-options-split", "denominations-coins", @@ -136,4 +125,4 @@ ], "deletion": true, "allowMove": true -} +} \ No newline at end of file diff --git a/assets/layers/ticket_validator/ticket_validator.json b/assets/layers/ticket_validator/ticket_validator.json index 18daf5aa5..78f802ebd 100644 --- a/assets/layers/ticket_validator/ticket_validator.json +++ b/assets/layers/ticket_validator/ticket_validator.json @@ -104,54 +104,25 @@ "condition": "barrier~*" }, { - "id": "validator-operator", - "question": { - "en": "Who is the operator of this ticket validator?", - "de": "Wer ist der Betreiber dieses Fahrkartenentwerters?", - "ca": "Qui és l'operador d'aquest validador de bitllets?", - "cs": "Kdo je provozovatelem tohoto validátoru jízdenek?", - "es": "¿Quién es el operador de este validador de billetes?", - "it": "Chi è l'operatore di questo validatore di biglietti?" - }, - "render": { - "en": "This ticket validator is operated by {operator}", - "de": "Dieser Fahrkartenentwerter wird betrieben von {operator}", - "ca": "{operator} opera aquest validador de bitllets", - "cs": "Tento validátor jízdenek provozuje {operator}", - "es": "Este validador de billetes está operado por {operator}", - "it": "Questo validatore di biglietti è gestito da {operator}" - }, - "freeform": { - "key": "operator", - "type": "string", - "placeholder": { - "en": "Name of the operator", - "de": "Name des Betreibers", - "nl": "Naam van de beheerder", - "ca": "Nom de l'operador", - "cs": "Jméno operátora", - "es": "Nombre del operador", - "it": "Nome dell'operatore" + "builtin": "operator", + "override": { + "question": { + "en": "Who is the operator of this ticket validator?", + "de": "Wer ist der Betreiber dieses Fahrkartenentwerters?", + "ca": "Qui és l'operador d'aquest validador de bitllets?", + "cs": "Kdo je provozovatelem tohoto validátoru jízdenek?", + "es": "¿Quién es el operador de este validador de billetes?", + "it": "Chi è l'operatore di questo validatore di biglietti?" + }, + "render": { + "en": "This ticket validator is operated by {operator}", + "de": "Dieser Fahrkartenentwerter wird betrieben von {operator}", + "ca": "{operator} opera aquest validador de bitllets", + "cs": "Tento validátor jízdenek provozuje {operator}", + "es": "Este validador de billetes está operado por {operator}", + "it": "Questo validatore di biglietti è gestito da {operator}" } - }, - "mappings": [ - { - "if": "operator=Nederlandse Spoorwegen", - "then": { - "en": "Dutch Railways (NS)", - "nl": "Nederlandse Spoorwegen (NS)", - "de": "Niederländische Eisenbahn (NS)", - "ca": "Ferrocarrils holandesos (NS)", - "cs": "Nizozemské dráhy (NS)", - "es": "Ferrocarriles Holandeses (NS)", - "it": "Ferrovie Olandesi (NS)" - }, - "addExtraTags": [ - "operator:wikidata=Q23076" - ], - "hideInAnswer": "_country!=nl" - } - ] + } }, { "builtin": "payment-options", @@ -189,4 +160,4 @@ ], "deletion": true, "allowMove": true -} +} \ No newline at end of file diff --git a/assets/layers/transit_routes/transit_routes.json b/assets/layers/transit_routes/transit_routes.json index c756272cb..709e0ef0b 100644 --- a/assets/layers/transit_routes/transit_routes.json +++ b/assets/layers/transit_routes/transit_routes.json @@ -1,9 +1,9 @@ { "id": "transit_routes", "name": { - "en": "Bus lines", + "en": "Transit Routes", "de": "Buslinien", - "nl": "Buslijnen", + "nl": "OV-lijnen", "da": "Buslinjer", "ca": "Línies de bus", "cs": "Autobusové linky", @@ -11,9 +11,9 @@ "it": "Linee degli autobus" }, "description": { - "en": "Layer showing bus lines", + "en": "Layer showing transit routes", "de": "Ebene mit Buslinien", - "nl": "Laag met buslijnen", + "nl": "Laag met OV-lijnen", "da": "Lag, der viser buslinjer", "ca": "Capa que mostra les línies d'autobús", "cs": "Vrstva zobrazující autobusové linky", @@ -22,9 +22,14 @@ }, "source": { "osmTags": { - "and": [ - "type=route", - "route=bus" + "or": [ + "route=bus", + "route=tram", + "route=trolleybus", + "route=light_rail", + "route=subway", + "route=train", + "route=ferry" ] } }, @@ -34,9 +39,9 @@ "minzoom": 15, "title": { "render": { - "en": "Bus line", + "en": "Transit route", "de": "Buslinie", - "nl": "Buslijn", + "nl": "OV-lijn", "da": "Buslinje", "ca": "Línia de bus", "cs": "Autobusová linka", @@ -65,7 +70,14 @@ "condition": { "and": [ "id~relation/[0-9]+", - "_numeric_id~*" + "_numeric_id~*", + { + "or": [ + "route=bus", + "route=tram", + "route=trolleybus" + ] + } ] }, "render": "on relatify" @@ -90,9 +102,9 @@ { "id": "name", "question": { - "en": "What is the name for this bus line? (i.e. Bus XX: From => Via => To)", + "en": "What is the name for this transit route? (i.e. Bus XX: From => Via => To)", "de": "Wie lautet der Name der Buslinie? (z.B. Bus XX: Von => Über => Nach)", - "nl": "Wat is de naam van deze buslijn (bv. Bus XX: Van => Via => Naar)", + "nl": "Wat is de naam van deze OV-lijn (bv. Bus XX: Van => Via => Naar)", "cs": "Jak se jmenuje tato autobusová linka? (tj. Autobus XX: Od => Přes => Do)", "es": "¿Cuál es el nombre de esta línea de autobús? (es decir, Autobús XX: Desde => Vía => Hasta)", "ca": "Quin és el nom d'aquesta línia d'autobús? (és a dir, Bus XX: De : Via ) A)", @@ -108,9 +120,9 @@ { "id": "from", "question": { - "en": "What is the starting point for this bus line?", + "en": "What is the starting point for this transit route?", "de": "Wo ist der Startpunkt dieser Buslinie?", - "nl": "Wat is het beginpunt van deze buslijn?", + "nl": "Wat is het beginpunt van deze OV-lijn?", "da": "Hvad er udgangspunktet for denne buslinje?", "ca": "Quin és el punt inicial d'aquesta línea d'autobús?", "cs": "Jaký je výchozí bod této autobusové linky?", @@ -118,9 +130,9 @@ "it": "Qual è il punto di partenza di questa linea di autobus?" }, "render": { - "en": "This bus line begins at {from}", + "en": "This transit route begins at {from}", "de": "Die Buslinie startet von {from}", - "nl": "Deze buslijn begint bij {from}", + "nl": "Deze OV-lijn begint bij {from}", "da": "Denne buslinje starter kl. {from}", "fr": "Cette ligne de bus commence à {from}", "ca": "Aquesta línia d'autobús comença a {from}", @@ -138,9 +150,9 @@ { "id": "via", "question": { - "en": "What is the via point for this bus line?", + "en": "What is the via point for this transit route?", "de": "Über welchen Zwischenhalt fährt die Buslinie?", - "nl": "Via welk punt gaat deze buslijn?", + "nl": "Via welk punt gaat deze OV-lijn?", "cs": "Jaký je průjezdní bod této autobusové linky?", "ru": "Где находится конечный пункт этого автобусного маршрута?", "es": "¿Cuál es el punto intermedio de esta línea de autobús?", @@ -149,9 +161,9 @@ "uk": "Яка кінцева зупинка цієї автобусної лінії?" }, "render": { - "en": "This bus line goes via {via}", + "en": "This transit route goes via {via}", "de": "Die Buslinie fährt über {via}", - "nl": "Deze buslijn gaat via {via}", + "nl": "Deze OV-lijn gaat via {via}", "da": "Denne buslinje går via {via}", "fr": "Cette ligne de bus passe par {via}", "ca": "Aquesta línia d'autobús passa per {via}", @@ -168,9 +180,9 @@ { "id": "to", "question": { - "en": "What is the ending point for this bus line?", + "en": "What is the ending point for this transit route?", "de": "Wo ist der Endpunkt der Buslinie?", - "nl": "Wat is het eindpunt van deze buslijn?", + "nl": "Wat is het eindpunt van deze OV-lijn?", "da": "Hvad er endestationen for denne buslinje?", "ca": "Quin és el punt final d'aquesta línea d'autobús?", "cs": "Jaký je konečný bod této autobusové linky?", @@ -178,9 +190,9 @@ "it": "Qual è il punto di arrivo di questa linea di autobus?" }, "render": { - "en": "This bus line ends at {to}", + "en": "This transit route ends at {to}", "de": "Der Endpunkt der Buslinie ist {to}", - "nl": "Deze buslijn eindigt bij {to}", + "nl": "Deze OV-lijn eindigt bij {to}", "da": "Denne buslinje slutter ved {to}", "fr": "Cette ligne de bus termine à {to}", "ca": "Aquesta línia d'autobús acaba a {to}", @@ -198,9 +210,9 @@ { "id": "colour", "question": { - "en": "What is the colour for this bus line?", + "en": "What is the colour for this transit route?", "de": "Welche Farbe hat diese Buslinie?", - "nl": "Wat is de kleur van deze buslijn?", + "nl": "Wat is de kleur van deze OV-lijn?", "da": "Hvad er farven på denne buslinje?", "ca": "Quin és el color d'aquest línia d'autobús?", "cs": "Jakou barvu má tato autobusová linka?", @@ -208,9 +220,9 @@ "it": "Qual è il colore di questa linea di autobus?" }, "render": { - "en": "This bus line has the color {colour}", + "en": "This transit route has the color {colour}", "de": "Die Buslinie hat die Farbe {colour}", - "nl": "Deze buslijn heeft de kleur {colour}", + "nl": "Deze OV-lijn heeft de kleur {colour}", "da": "Denne buslinje har farven {colour}", "ca": "Aquesta línea d'autobús té el color {colour}", "cs": "Tato autobusová linka má barvu {colour}", @@ -225,9 +237,9 @@ { "id": "network", "question": { - "en": "What network does this bus line belong to?", + "en": "What network does this transit route belong to?", "de": "Zu welchem Verkehrsverbund gehört die Buslinie?", - "nl": "Bij welk netwerk hoort deze buslijn?", + "nl": "Bij welk netwerk hoort deze OV-lijn?", "da": "Hvilket netværk tilhører denne buslinje?", "ca": "A quina xarxa pertany aquesta línea d'autobús?", "cs": "Do jaké sítě tato autobusová linka patří?", @@ -235,9 +247,9 @@ "it": "A quale rete appartiene questa linea di autobus?" }, "render": { - "en": "This bus line is part of the {network} network", + "en": "This transit route is part of the {network} network", "de": "Die Buslinie gehört zum Verkehrsverbund {network}", - "nl": "Deze buslijn is onderdeel van het {network} netwerk", + "nl": "Deze OV-lijn is onderdeel van het {network} netwerk", "ca": "Aquesta línea d'autobús és part de la xarxa {network}", "fr": "Cette ligne de bus fait partie du réseau {network}", "cs": "Tato autobusová linka je součástí sítě {network}", @@ -251,32 +263,30 @@ } }, { - "id": "operator", - "question": { - "en": "What company operates this bus line?", - "de": "Welches Unternehmen betreibt die Buslinie?", - "nl": "Welk bedrijf exploiteert deze buslijn?", - "da": "Hvilket selskab driver denne buslinje?", - "ca": "Quina companyia opera aquesta línia d'autobús?", - "cs": "Jaká společnost provozuje tuto autobusovou linku?", - "es": "¿Qué compañía opera esta línea de autobús?", - "it": "Quale azienda gestisce questa linea di autobus?" - }, - "render": { - "en": "This bus line is operated by {operator}", - "de": "Die Buslinie wird betrieben von {operator}", - "nl": "Deze buslijn wordt geëxploiteerd door {operator}", - "da": "Denne buslinje drives af {operator}", - "ca": "{operator} opera aquesta línea d'autobús", - "fr": "Cette ligne de bus est gérée par {operator}", - "cs": "Tuto autobusovou linku provozuje {operator}", - "es": "Esta línea de autobús es operada por {operator}", - "it": "Questa linea di autobus è gestita da {operator}", - "uk": "Ця автобусна лінія обслуговується {operator}" - }, - "freeform": { - "key": "operator", - "type": "string" + "builtin": "operator", + "override": { + "question": { + "en": "What company operates this transit route?", + "de": "Welches Unternehmen betreibt die Buslinie?", + "nl": "Welk bedrijf exploiteert deze OV-lijn?", + "da": "Hvilket selskab driver denne buslinje?", + "ca": "Quina companyia opera aquesta línia d'autobús?", + "cs": "Jaká společnost provozuje tuto autobusovou linku?", + "es": "¿Qué compañía opera esta línea de autobús?", + "it": "Quale azienda gestisce questa linea di autobus?" + }, + "render": { + "en": "This transit route is operated by {operator}", + "de": "Die Buslinie wird betrieben von {operator}", + "nl": "Deze OV-lijn wordt geëxploiteerd door {operator}", + "da": "Denne buslinje drives af {operator}", + "ca": "{operator} opera aquesta línea d'autobús", + "fr": "Cette ligne de bus est gérée par {operator}", + "cs": "Tuto autobusovou linku provozuje {operator}", + "es": "Esta línea de autobús es operada por {operator}", + "it": "Questa linea di autobus è gestita da {operator}", + "uk": "Ця автобусна лінія обслуговується {operator}" + } } } ], @@ -288,4 +298,4 @@ } } } -} +} \ No newline at end of file diff --git a/assets/layers/transit_stops/ferry.svg b/assets/layers/transit_stops/ferry.svg new file mode 100644 index 000000000..44ee50cf5 --- /dev/null +++ b/assets/layers/transit_stops/ferry.svg @@ -0,0 +1,12 @@ + + +ANCHOR + + + + + + + + +