diff --git a/Docs/Layers/atm.md b/Docs/Layers/atm.md index fd9eda4db4..9448f3bfdd 100644 --- a/Docs/Layers/atm.md +++ b/Docs/Layers/atm.md @@ -75,6 +75,8 @@ This tagrendering has no question and is thus read-only +This tagrendering is only visible in the popup if the following condition is met: `name~.+` + ### brand diff --git a/Docs/Themes/blind_osm.md b/Docs/Themes/blind_osm.md index 559c538db1..0974041374 100644 --- a/Docs/Themes/blind_osm.md +++ b/Docs/Themes/blind_osm.md @@ -30,6 +30,7 @@ Available languages: - en - de + - nl This document is autogenerated from [assets/themes/blind_osm/blind_osm.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/blind_osm/blind_osm.json) \ No newline at end of file diff --git a/Docs/Themes/osm_community_index.md b/Docs/Themes/osm_community_index.md index e28cb4a625..c3e271c5a9 100644 --- a/Docs/Themes/osm_community_index.md +++ b/Docs/Themes/osm_community_index.md @@ -25,6 +25,7 @@ Available languages: - en - de + - nl This document is autogenerated from [assets/themes/osm_community_index/osm_community_index.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/osm_community_index/osm_community_index.json) \ No newline at end of file diff --git a/Docs/wikiIndex.txt b/Docs/wikiIndex.txt index c7aba5ac89..d9909239f0 100644 --- a/Docs/wikiIndex.txt +++ b/Docs/wikiIndex.txt @@ -157,7 +157,7 @@ {{service_item |name= [https://mapcomplete.osm.be/blind_osm blind_osm] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:_context|en}} +|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:nl|en}}, {{#language:_context|en}} |descr= A MapComplete theme: Help to map features relevant for the blind |material= {{yes|[https://mapcomplete.osm.be/ Yes]}} |image= MapComplete_Screenshot.png @@ -364,7 +364,7 @@ {{service_item |name= [https://mapcomplete.osm.be/osm_community_index osm_community_index] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:_context|en}} +|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:nl|en}}, {{#language:_context|en}} |descr= A MapComplete theme: An index of community resources for OpenStreetMap. |material= {{yes|[https://mapcomplete.osm.be/ Yes]}} |image= MapComplete_Screenshot.png diff --git a/UI/AllThemesGui.ts b/UI/AllThemesGui.ts index 4533d35167..91e5cea02a 100644 --- a/UI/AllThemesGui.ts +++ b/UI/AllThemesGui.ts @@ -12,7 +12,7 @@ import Toggle from "./Input/Toggle" import { SubtleButton } from "./Base/SubtleButton" import { VariableUiElement } from "./Base/VariableUIElement" import Svg from "../Svg" -import {ImportViewerLinks} from "./BigComponents/UserInformation"; +import { ImportViewerLinks } from "./BigComponents/UserInformation" export default class AllThemesGui { setup() { @@ -36,7 +36,9 @@ export default class AllThemesGui { .onClick(() => state.osmConnection.AttemptLogin()), state.osmConnection.isLoggedIn ), - new ImportViewerLinks(state.osmConnection).SetClass("p-4 border-2 border-gray-500 m-4 block"), + new ImportViewerLinks(state.osmConnection).SetClass( + "p-4 border-2 border-gray-500 m-4 block" + ), Translations.t.general.aboutMapcomplete .Subs({ osmcha_link: Utils.OsmChaLinkFor(7) }) .SetClass("link-underline"), diff --git a/UI/BaseUIElement.ts b/UI/BaseUIElement.ts index dbf73e57e6..b7f92fc905 100644 --- a/UI/BaseUIElement.ts +++ b/UI/BaseUIElement.ts @@ -3,7 +3,7 @@ * * Assumes a read-only configuration, so it has no 'ListenTo' */ -import {Utils} from "../Utils"; +import { Utils } from "../Utils" export default abstract class BaseUIElement { protected _constructedHtmlElement: HTMLElement @@ -43,32 +43,32 @@ export default abstract class BaseUIElement { this._constructedHtmlElement?.scrollTo(0, 0) } - public ScrollIntoView(options?: { - onlyIfPartiallyHidden?: boolean - }) { - if(this._constructedHtmlElement === undefined){ + public ScrollIntoView(options?: { onlyIfPartiallyHidden?: boolean }) { + if (this._constructedHtmlElement === undefined) { return } - let alignToTop = true; - if(options?.onlyIfPartiallyHidden){ + let alignToTop = true + if (options?.onlyIfPartiallyHidden) { // Is the element completely in the view? - const parentRect = Utils.findParentWithScrolling(this._constructedHtmlElement.parentElement).getBoundingClientRect(); - const elementRect = this._constructedHtmlElement.getBoundingClientRect(); + const parentRect = Utils.findParentWithScrolling( + this._constructedHtmlElement.parentElement + ).getBoundingClientRect() + const elementRect = this._constructedHtmlElement.getBoundingClientRect() // Check if the element is within the vertical bounds of the parent element const topIsVisible = elementRect.top >= parentRect.top const bottomIsVisible = elementRect.bottom <= parentRect.bottom - const inView = topIsVisible && bottomIsVisible ; - if(inView){ + const inView = topIsVisible && bottomIsVisible + if (inView) { return } - if(topIsVisible){ + if (topIsVisible) { alignToTop = false } } this._constructedHtmlElement?.scrollIntoView({ behavior: "smooth", - block: "start" + block: "start", }) } /** diff --git a/UI/DefaultGUI.ts b/UI/DefaultGUI.ts index 6835198193..7fc3ec155e 100644 --- a/UI/DefaultGUI.ts +++ b/UI/DefaultGUI.ts @@ -1,7 +1,7 @@ import FeaturePipelineState from "../Logic/State/FeaturePipelineState" import State from "../State" -import {Utils} from "../Utils" -import {UIEventSource} from "../Logic/UIEventSource" +import { Utils } from "../Utils" +import { UIEventSource } from "../Logic/UIEventSource" import FullWelcomePaneWithTabs from "./BigComponents/FullWelcomePaneWithTabs" import MapControlButton from "./MapControlButton" import Svg from "../Svg" @@ -16,7 +16,7 @@ import ScrollableFullScreen from "./Base/ScrollableFullScreen" import Translations from "./i18n/Translations" import SimpleAddUI from "./BigComponents/SimpleAddUI" import StrayClickHandler from "../Logic/Actors/StrayClickHandler" -import {DefaultGuiState} from "./DefaultGuiState" +import { DefaultGuiState } from "./DefaultGuiState" import LayerConfig from "../Models/ThemeConfig/LayerConfig" import * as home_location_json from "../assets/layers/home_location/home_location.json" import NewNoteUi from "./Popup/NewNoteUi" @@ -24,11 +24,11 @@ import Combine from "./Base/Combine" import AddNewMarker from "./BigComponents/AddNewMarker" import FilteredLayer from "../Models/FilteredLayer" import ExtraLinkButton from "./BigComponents/ExtraLinkButton" -import {VariableUiElement} from "./Base/VariableUIElement"; -import Img from "./Base/Img"; -import UserInformationPanel from "./BigComponents/UserInformation"; -import {LoginToggle} from "./Popup/LoginButton"; -import {FixedUiElement} from "./Base/FixedUiElement"; +import { VariableUiElement } from "./Base/VariableUIElement" +import Img from "./Base/Img" +import UserInformationPanel from "./BigComponents/UserInformation" +import { LoginToggle } from "./Popup/LoginButton" +import { FixedUiElement } from "./Base/FixedUiElement" /** * The default MapComplete GUI initializer @@ -127,7 +127,7 @@ export default class DefaultGUI { addNewPoint, hasPresets ? new AddNewMarker(state.filteredLayers) : noteMarker ) - state.LastClickLocation.addCallbackAndRunD(_ => { + state.LastClickLocation.addCallbackAndRunD((_) => { ScrollableFullScreen.collapse() }) } @@ -167,7 +167,7 @@ export default class DefaultGUI { leafletMap: state.leafletMap, layerToShow: selectedElement.layerDef, features: state.selectedElementsLayer, - state + state, }) state.leafletMap.addCallbackAndRunD((_) => { @@ -185,34 +185,36 @@ export default class DefaultGUI { const self = this new Combine([ Toggle.If(state.featureSwitchUserbadge, () => { - const userInfo = new UserInformationPanel(state) const mapControl = new MapControlButton( - new VariableUiElement(state.osmConnection.userDetails.map(ud => { + new VariableUiElement( + state.osmConnection.userDetails.map((ud) => { if (ud?.img === undefined) { return Svg.person_ui().SetClass("mt-1 block") } - return new Img(ud?.img); - })).SetClass("block rounded-full overflow-hidden"), - { - dontStyle: true - } - ).onClick(() => userInfo.Activate()); + return new Img(ud?.img) + }) + ).SetClass("block rounded-full overflow-hidden"), + { + dontStyle: true, + } + ).onClick(() => userInfo.Activate()) return new LoginToggle( - mapControl, Translations.t.general.loginWithOpenStreetMap, state + mapControl, + Translations.t.general.loginWithOpenStreetMap, + state ) - - - }), Toggle.If( state.featureSwitchExtraLinkEnabled, () => new ExtraLinkButton(state, state.layoutToUse.extraLink) ), Toggle.If(state.featureSwitchWelcomeMessage, () => self.InitWelcomeMessage()), - Toggle.If(state.featureSwitchIsTesting, () => new FixedUiElement("TESTING").SetClass("alert m-2 border-2 border-black")) + Toggle.If(state.featureSwitchIsTesting, () => + new FixedUiElement("TESTING").SetClass("alert m-2 border-2 border-black") + ), ]) .SetClass("flex flex-col") .AttachTo("top-left") @@ -229,8 +231,11 @@ export default class DefaultGUI { .SetClass("flex items-center justify-center normal-background h-full") .AttachTo("on-small-screen") - Toggle.If(state.featureSwitchSearch, () => new SearchAndGo(state).SetClass("shadow rounded-full h-min w-full overflow-hidden sm:max-w-sm pointer-events-auto")).AttachTo("top-right") - + Toggle.If(state.featureSwitchSearch, () => + new SearchAndGo(state).SetClass( + "shadow rounded-full h-min w-full overflow-hidden sm:max-w-sm pointer-events-auto" + ) + ).AttachTo("top-right") new LeftControls(state, guiState).AttachTo("bottom-left") new RightControls(state).AttachTo("bottom-right") @@ -256,11 +261,7 @@ export default class DefaultGUI { private InitWelcomeMessage(): BaseUIElement { const isOpened = this.guiState.welcomeMessageIsOpened - new FullWelcomePaneWithTabs( - isOpened, - this.guiState.welcomeMessageOpenedTab, - this.state - ) + new FullWelcomePaneWithTabs(isOpened, this.guiState.welcomeMessageOpenedTab, this.state) // ?-Button on Desktop, opens panel with close-X. const help = new MapControlButton(Svg.help_svg()) @@ -280,6 +281,6 @@ export default class DefaultGUI { isOpened.setData(false) }) - return help.SetClass("pointer-events-auto") + return help.SetClass("pointer-events-auto") } } diff --git a/assets/contributors.json b/assets/contributors.json index 91b88a085d..9553d4ab40 100644 --- a/assets/contributors.json +++ b/assets/contributors.json @@ -1,11 +1,11 @@ { "contributors": [ { - "commits": 4686, + "commits": 4735, "contributor": "Pieter Vander Vennet" }, { - "commits": 259, + "commits": 300, "contributor": "Robin van der Linde" }, { @@ -81,12 +81,12 @@ "contributor": "ToastHawaii" }, { - "commits": 13, - "contributor": "Nicole" + "commits": 14, + "contributor": "dependabot[bot]" }, { - "commits": 12, - "contributor": "dependabot[bot]" + "commits": 13, + "contributor": "Nicole" }, { "commits": 12, diff --git a/assets/layers/artwork/artwork.json b/assets/layers/artwork/artwork.json index 9c7af91cc9..3b2b4af579 100644 --- a/assets/layers/artwork/artwork.json +++ b/assets/layers/artwork/artwork.json @@ -127,7 +127,9 @@ "tagRenderings": [ "images", { - "labels": ["artwork-question"], + "labels": [ + "artwork-question" + ], "render": { "en": "This is a {artwork_type}", "nl": "Dit is een {artwork_type}", @@ -449,7 +451,9 @@ }, { "id": "artwork-artist-wikidata", - "labels": ["artwork-question"], + "labels": [ + "artwork-question" + ], "render": { "en": "This artwork was made by {wikidata_label(artist:wikidata):font-weight:bold}
{wikipedia(artist:wikidata)}", "de": "Dieses Kunstwerk wurde geschaffen von {wikidata_label(artist:wikidata):font-weight:bold}
{wikipedia(artist:wikidata)}", @@ -521,7 +525,9 @@ }, "condition": "artist:wikidata=", "id": "artwork-artist_name", - "labels": ["artwork-question"] + "labels": [ + "artwork-question" + ] }, { "question": { @@ -565,7 +571,9 @@ "type": "url" }, "id": "artwork-website", - "labels": ["artwork-question"] + "labels": [ + "artwork-question" + ] }, "wikipedia", { @@ -591,7 +599,9 @@ "pt": "A obra de arte representa {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}", "es": "Esta obra de arte representa {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}" }, - "labels": ["artwork-question"] + "labels": [ + "artwork-question" + ] }, { "id": "doubles_as_bench", @@ -662,4 +672,4 @@ "filter": [ "has_image" ] -} +} \ No newline at end of file diff --git a/assets/layers/atm/atm.json b/assets/layers/atm/atm.json index c092e2274e..d38c727779 100644 --- a/assets/layers/atm/atm.json +++ b/assets/layers/atm/atm.json @@ -84,4 +84,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/assets/layers/bench/bench.json b/assets/layers/bench/bench.json index 709a2f838c..76f5549815 100644 --- a/assets/layers/bench/bench.json +++ b/assets/layers/bench/bench.json @@ -839,7 +839,6 @@ "condition": "tourism=artwork" } } - ], "presets": [ { @@ -943,4 +942,4 @@ }, "has_image" ] -} +} \ No newline at end of file diff --git a/assets/layers/bench_at_pt/bench_at_pt.json b/assets/layers/bench_at_pt/bench_at_pt.json index cae6134077..f36acc7e38 100644 --- a/assets/layers/bench_at_pt/bench_at_pt.json +++ b/assets/layers/bench_at_pt/bench_at_pt.json @@ -233,7 +233,10 @@ } ], "softDeletionTags": { - "and": ["disused:highway=bus_stop","bench=no"] + "and": [ + "disused:highway=bus_stop", + "bench=no" + ] } }, "description": { @@ -245,4 +248,4 @@ "da": "Et lag, der viser alle offentlige stoppesteder, som har en bænk", "cs": "Vrstva zobrazující všechny zastávky veřejné dopravy, které mají lavičku" } -} +} \ No newline at end of file diff --git a/assets/layers/climbing_gym/climbing_gym.json b/assets/layers/climbing_gym/climbing_gym.json index 58b176cc3f..b0f0eeae04 100644 --- a/assets/layers/climbing_gym/climbing_gym.json +++ b/assets/layers/climbing_gym/climbing_gym.json @@ -78,7 +78,7 @@ }, "opening_hours", "climbing.toprope", -{ + { "builtin": "climbing.average_length", "override": { "condition": "climbing:toprope!=no" @@ -171,4 +171,4 @@ } } ] -} +} \ No newline at end of file diff --git a/assets/layers/etymology/etymology.json b/assets/layers/etymology/etymology.json index bf2cfb0b99..4e902feec5 100644 --- a/assets/layers/etymology/etymology.json +++ b/assets/layers/etymology/etymology.json @@ -454,4 +454,4 @@ } } ] -} +} \ No newline at end of file diff --git a/assets/layers/filters/filters.json b/assets/layers/filters/filters.json index 1ef180ee80..91f6231ab0 100644 --- a/assets/layers/filters/filters.json +++ b/assets/layers/filters/filters.json @@ -62,7 +62,7 @@ "options": [ { "question": { - "en":"With and without images", + "en": "With and without images", "nl": "Met en zonder afbeelding" } }, @@ -175,4 +175,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/assets/layers/selected_element/selected_element.json b/assets/layers/selected_element/selected_element.json index 7c9393ba31..f322b58631 100644 --- a/assets/layers/selected_element/selected_element.json +++ b/assets/layers/selected_element/selected_element.json @@ -12,9 +12,12 @@ { "icon": "circle:red", "iconSize": "1,1,center", - "location": ["point","projected_centerpoint"], + "location": [ + "point", + "projected_centerpoint" + ], "css": "box-shadow: red 0 0 20px 20px; z-index: -1; height: 1px; width: 1px;", "cssClasses": "block relative rounded-full" } ] -} +} \ No newline at end of file diff --git a/assets/tagRenderings/questions.json b/assets/tagRenderings/questions.json index 0ffb0350a0..5756feaca8 100644 --- a/assets/tagRenderings/questions.json +++ b/assets/tagRenderings/questions.json @@ -689,14 +689,16 @@ "if": "opening_hours=\"by appointment\"", "then": { "en": "Only by appointment", - "de": "Nur nach Vereinbarung" + "de": "Nur nach Vereinbarung", + "nl": "Alleen op afspraak" } }, { "if": "opening_hours~i~\"by appointment\"|by appointment", "then": { "en": "Only by appointment", - "de": "Nur nach Vereinbarung" + "de": "Nur nach Vereinbarung", + "nl": "Alleen op afspraak" }, "hideInAnswer": true } diff --git a/assets/themes/atm/atm.json b/assets/themes/atm/atm.json index ebf699264b..c2b0dac81d 100644 --- a/assets/themes/atm/atm.json +++ b/assets/themes/atm/atm.json @@ -13,4 +13,4 @@ "layers": [ "atm" ] -} +} \ No newline at end of file diff --git a/assets/themes/benches/benches.json b/assets/themes/benches/benches.json index 1dbe93fbd9..14f11f7b3e 100644 --- a/assets/themes/benches/benches.json +++ b/assets/themes/benches/benches.json @@ -63,4 +63,4 @@ "bench_at_pt" ], "credits": "Florian Edelmann" -} +} \ No newline at end of file diff --git a/assets/themes/blind_osm/blind_osm.json b/assets/themes/blind_osm/blind_osm.json index 66c250c089..4009fd570d 100644 --- a/assets/themes/blind_osm/blind_osm.json +++ b/assets/themes/blind_osm/blind_osm.json @@ -2,11 +2,13 @@ "id": "blind_osm", "title": { "en": "OSM for the blind", - "de": "OSM für Blinde" + "de": "OSM für Blinde", + "nl": "OSM voor blinden" }, "description": { "en": "Help to map features relevant for the blind", - "de": "Hilfe zur Kartierung blindenrelevanter Merkmale" + "de": "Hilfe zur Kartierung blindenrelevanter Merkmale", + "nl": "Help zaken die relevant zijn voor blinden in kaart te brengen" }, "icon": "./assets/themes/blind_osm/Blindicon.svg", "startLat": 52.99238, diff --git a/assets/themes/campersite/campersite.json b/assets/themes/campersite/campersite.json index e153519c0c..5e44c224fc 100644 --- a/assets/themes/campersite/campersite.json +++ b/assets/themes/campersite/campersite.json @@ -732,7 +732,7 @@ "de": "Es sind nur Plätze für Dauercamper vorhanden (wenn Sie diese Antwort auswählen, verschwindet der Ort von der Karte)", "es": "Solo es posible permanecer aquí si tienes un contrato a largo plazo (este lugar desaparecerá de este mapa si escoges esto)", "da": "Det er kun muligt at bo her, hvis du har en langtidskontrakt (dette sted forsvinder fra kortet, hvis du vælger dette)", - "nl": "Hier kan je enkel verblijven met een langetermijnscontract (deze plaats zal verborgen worden van deze kaart als je dit kiest)", + "nl": "Hier kan je enkel verblijven met een langetermijnscontract (deze plaats verdwijnt van deze kaart als je dit kiest)", "ca": "Només és possible romandre aquí si teniu un contracte a llarg termini (aquest lloc desapareixerà d'aquest mapa si trieu això)", "nb_NO": "Det er kun mulig å bo her hvis man har en langtidskontrakt (dette stedet vil forsvinne fra kartet hvis du velger dette)" } diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index 80c6edbffa..9175bec25b 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -122,6 +122,10 @@ "if": "theme=artwork", "then": "./assets/themes/artwork/artwork.svg" }, + { + "if": "theme=atm", + "then": "./assets/themes/atm/logo.svg" + }, { "if": "theme=bag", "then": "./assets/themes/bag/logo.svg" diff --git a/assets/themes/maps/maps.json b/assets/themes/maps/maps.json index 1da32d5146..55de5726e9 100644 --- a/assets/themes/maps/maps.json +++ b/assets/themes/maps/maps.json @@ -45,4 +45,4 @@ "layers": [ "map" ] -} +} \ No newline at end of file diff --git a/assets/themes/maxspeed/maxspeed.json b/assets/themes/maxspeed/maxspeed.json index 9357b086b4..4eac04116f 100644 --- a/assets/themes/maxspeed/maxspeed.json +++ b/assets/themes/maxspeed/maxspeed.json @@ -21,7 +21,8 @@ "en": "This map shows the legally allowed maximum speed on every road. If a maxspeed is missing or wrong, you can correct it here.", "de": "Diese Karte zeigt die zulässige Höchstgeschwindigkeit auf jeder Straße. Wenn eine Höchstgeschwindigkeit fehlt oder falsch ist, können Sie dies hier korrigieren.", "fr": "Cette carte montre la vitesse maximale autorisée sur les routes. Si la vitesse maximale est manquante ou erronée, vous pouvez la corriger ici.", - "da": "Dette kort viser den lovligt tilladte maksimale hastighed på hver vej. Hvis en maxspeed mangler eller er forkert, kan du rette den her." + "da": "Dette kort viser den lovligt tilladte maksimale hastighed på hver vej. Hvis en maxspeed mangler eller er forkert, kan du rette den her.", + "nl": "Deze kaart toont de maximum toegestane snelheid voor elke weg. Als er een maximumsnelheid mist of niet klopt, kan je hem hier aanpassen." }, "icon": "./assets/themes/maxspeed/maxspeed_logo.svg", "startLat": 0, diff --git a/assets/themes/osm_community_index/osm_community_index.json b/assets/themes/osm_community_index/osm_community_index.json index 6819de6817..14de61f478 100644 --- a/assets/themes/osm_community_index/osm_community_index.json +++ b/assets/themes/osm_community_index/osm_community_index.json @@ -2,15 +2,18 @@ "id": "osm_community_index", "title": { "en": "OSM Community Index", - "de": "OSM-Community-Index" + "de": "OSM-Community-Index", + "nl": "OSM Community Overzicht" }, "description": { "en": "A list of resources for users of OpenStreetMap. 'Resources' can be links to forums, meetups, Slack groups, IRC channels, mailing lists, and so on. Anything that mappers, especially beginners, might find interesting or helpful.", - "de": "Eine Liste von Ressourcen für Nutzer von OpenStreetMap. 'Ressourcen' können Links zu Foren, Treffen, Slack-Gruppen, IRC-Kanälen, Mailinglisten und so weiter sein. Alles, was Mapper, insbesondere Anfänger, interessant oder hilfreich finden könnten." + "de": "Eine Liste von Ressourcen für Nutzer von OpenStreetMap. 'Ressourcen' können Links zu Foren, Treffen, Slack-Gruppen, IRC-Kanälen, Mailinglisten und so weiter sein. Alles, was Mapper, insbesondere Anfänger, interessant oder hilfreich finden könnten.", + "nl": "Een lijst van hulpmiddelen van gebruikers van OpenStreetMap. 'Hulpmiddelen' kunnen fora, meetups, Slack groepen, IRC kanalen, mailinglijsten, en meer zijn. Alles dat mappers, vooral beginners, nuttig of behulpzaam kunnen vinden." }, "shortDescription": { "en": "An index of community resources for OpenStreetMap.", - "de": "Ein Index von Community-Ressourcen für OpenStreetMap." + "de": "Ein Index von Community-Ressourcen für OpenStreetMap.", + "nl": "Een overzicht van hulpbronnen voor OpenStreetMap van de community." }, "icon": "./assets/themes/osm_community_index/osm.svg", "startLat": 50.8465573, diff --git a/assets/translators.json b/assets/translators.json index eb4b139f35..d81b7d13ee 100644 --- a/assets/translators.json +++ b/assets/translators.json @@ -1,11 +1,11 @@ { "contributors": [ { - "commits": 213, + "commits": 214, "contributor": "Pieter Vander Vennet" }, { - "commits": 190, + "commits": 191, "contributor": "kjon" }, { @@ -17,7 +17,7 @@ "contributor": "danieldegroot2" }, { - "commits": 45, + "commits": 48, "contributor": "Robin van der Linde" }, { diff --git a/langs/de.json b/langs/de.json index 59c3cfe70e..2597921ca0 100644 --- a/langs/de.json +++ b/langs/de.json @@ -86,6 +86,7 @@ "add": { "addNew": "{category} hinzufügen", "addNewMapLabel": "Hier klicken, um ein neues Element hinzuzufügen", + "backToSelect": "Wählen Sie eine andere Kategorie", "confirmButton": "Eine {category} hinzufügen.
Ihre Ergänzung ist für alle sichtbar
", "confirmIntro": "

Einen {title} hinzufügen?

Das Objekt, das Sie erstellen wird für alle sichtbar sein. Bitte nur Dinge hinzufügen, die wirklich existieren. Viele Anwendungen verwenden diese Daten.", "disableFilters": "Alle Filter deaktivieren", @@ -111,8 +112,7 @@ "warnVisibleForEveryone": "Ihre Ergänzung wird für alle sichtbar sein", "wrongType": "Dieses Objekt ist weder ein Punkt noch ein Weg und kann nicht importiert werden", "zoomInFurther": "Ausschnitt vergrößern, um ein Objekt hinzuzufügen.", - "zoomInMore": "Ansicht vergrößern, um dieses Element zu importieren", - "backToSelect": "Wählen Sie eine andere Kategorie" + "zoomInMore": "Ansicht vergrößern, um dieses Element zu importieren" }, "apply_button": { "appliedOnAnotherObject": "Das Objekt {id} erhält {tags}", diff --git a/langs/layers/en.json b/langs/layers/en.json index ed420095ce..3fd1fa1c04 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -142,6 +142,20 @@ "artwork_subject": { "question": "What does this artwork depict?", "render": "This artwork depicts {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}" + }, + "doubles_as_bench": { + "mappings": { + "0": { + "then": "This artwork also serves as a bench" + }, + "1": { + "then": "This artwork does not serve as a bench" + }, + "2": { + "then": "This artwork does not serve as a bench" + } + }, + "question": "Does this artwork serve as a bench?" } }, "title": { @@ -292,6 +306,28 @@ }, "bench": { "description": "A bench is a wooden, metal, stone, … surface where a human can sit. This layers visualises them and asks a few questions about them.", + "filter": { + "0": { + "options": { + "0": { + "question": "is a memorial" + } + } + }, + "1": { + "options": { + "0": { + "question": "With and without backrest" + }, + "1": { + "question": "Has a backrest" + }, + "2": { + "question": "Has no backrest" + } + } + } + }, "name": "Benches", "presets": { "0": { @@ -299,6 +335,17 @@ } }, "tagRenderings": { + "bench-artwork": { + "mappings": { + "0": { + "then": "This bench has an integrated artwork" + }, + "1": { + "then": "This bench does not have an integrated artwork" + } + }, + "question": "Does this bench have an artistic element?
E.g. it has an integrated painting, statue or other non-trivial, creative work
" + }, "bench-backrest": { "mappings": { "0": { @@ -344,6 +391,18 @@ "question": "In which direction are you looking when sitting on the bench?", "render": "When sitting on the bench, one looks towards {direction}°." }, + "bench-inscription": { + "mappings": { + "0": { + "then": "This bench does not have an inscription" + }, + "1": { + "then": "This bench does (probably) not have an inscription" + } + }, + "question": "Does this bench have an inscription?
E.g. on a mounted plaque, in the backrest, ...
", + "render": "This bench does have the following inscription:

{inscription}

" + }, "bench-material": { "mappings": { "0": { @@ -368,11 +427,32 @@ "question": "What is the bench (seating) made from?", "render": "Material: {material}" }, + "bench-memorial": { + "mappings": { + "0": { + "then": "This bench is a memorial for someone or something" + }, + "1": { + "then": "This bench is a not a memorial for someone or something" + } + }, + "question": "Does this bench act as memorial for someone or something?" + }, "bench-seats": { + "mappings": { + "0": { + "then": "This bench does not have separated seats" + } + }, "question": "How many seats does this bench have?", "render": "{seats} seats" }, "bench-survey:date": { + "mappings": { + "0": { + "then": "Surveyed today!" + } + }, "question": "When was this bench last surveyed?", "render": "This bench was last surveyed on {survey:date}" } @@ -382,6 +462,18 @@ } }, "bench_at_pt": { + "deletion": { + "extraDeleteReasons": { + "0": { + "explanation": "This bus stop is not used anymore" + } + }, + "nonDeleteMappings": { + "0": { + "then": "This bus stop does not have a bench (there never was one or it has been removed)" + } + } + }, "description": "A layer showing all public-transport-stops which do have a bench", "name": "Benches at public transport stops", "tagRenderings": { @@ -3768,6 +3860,9 @@ }, "3": { "options": { + "0": { + "question": "With and without images" + }, "1": { "question": "Has at least one image" }, @@ -6507,6 +6602,9 @@ "render": "School {name}" } }, + "selected_element": { + "description": "Highlights the currently selected element. Override this layer to have different colors" + }, "shelter": { "description": "Layer showing shelter structures", "name": "Shelter", @@ -7288,6 +7386,11 @@ "freeform": { "placeholder": "Name of the operator" }, + "mappings": { + "0": { + "then": "Dutch Railways (NS)" + } + }, "question": "Who is the operator of this ticket machine?", "render": "This ticket machine is operated by {operator}" } diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 76dc8524d4..c58590e9ba 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -256,6 +256,28 @@ }, "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": { + "0": { + "options": { + "0": { + "question": "is een gedenkteken" + } + } + }, + "1": { + "options": { + "0": { + "question": "Met en zonder rugleuning" + }, + "1": { + "question": "Heeft een rugleuning" + }, + "2": { + "question": "Heeft geen rugleuning" + } + } + } + }, "name": "Zitbanken", "presets": { "0": { @@ -263,6 +285,17 @@ } }, "tagRenderings": { + "bench-artwork": { + "mappings": { + "0": { + "then": "Deze bank heeft een geïntegreerd kunstwerk" + }, + "1": { + "then": "Deze bank heeft geen geïntegreerd kunstwerk" + } + }, + "question": "Heeft deze bank een geïntegreerd kunstwerk?
Bijvoorbeeld een standbeeld, schildering of ander, niet-triviaal kunstwerk
" + }, "bench-backrest": { "mappings": { "0": { @@ -308,6 +341,18 @@ "question": "In welke richting kijk je wanneer je op deze zitbank zit?", "render": "Wanneer je op deze bank zit, dan kijk je in {direction}°." }, + "bench-inscription": { + "mappings": { + "0": { + "then": "Deze bank heeft geen inscriptie" + }, + "1": { + "then": "Deze bank heeft (waarschijnlijk) geen inscriptie" + } + }, + "question": "Heeft deze bank een inscriptie?
Bijvoorbeeld op een aangebracht plakkaat, ingesneden in de rugleuning, ...
", + "render": "Deze bank heeft een inscriptie:

{inscription}

" + }, "bench-material": { "mappings": { "0": { @@ -332,11 +377,32 @@ "question": "Uit welk materiaal is het zitgedeelte van deze zitbank gemaakt?", "render": "Gemaakt van {material}" }, + "bench-memorial": { + "mappings": { + "0": { + "then": "Deze bank is een gedenkteken aan iemand of iets" + }, + "1": { + "then": "Deze bank is geen gedenkteken aan iemand of iets" + } + }, + "question": "Is deze bank een gedenkteken voor iemand of iets?" + }, "bench-seats": { + "mappings": { + "0": { + "then": "Deze bank is niet ingedeeld in aparte zitplaatsen" + } + }, "question": "Hoeveel zitplaatsen heeft deze bank?", "render": "{seats} zitplaatsen" }, "bench-survey:date": { + "mappings": { + "0": { + "then": "Vandaag nagekeken!" + } + }, "question": "Wanneer is deze laatste bank laatst gesurveyed?", "render": "Deze bank is laatst gesurveyd op {survey:date}" } @@ -3662,6 +3728,9 @@ }, "3": { "options": { + "0": { + "question": "Met en zonder afbeelding" + }, "1": { "question": "Heeft minstens één afbeelding" }, @@ -6133,6 +6202,9 @@ "render": "School {name}" } }, + "selected_element": { + "description": "Toont het geselecteerde element" + }, "shelter": { "name": "Schuilplaats", "tagRenderings": { @@ -6844,6 +6916,17 @@ } } }, + "ticket_machine": { + "tagRenderings": { + "operator": { + "mappings": { + "0": { + "then": "Nederlandse Spoorwegen (NS)" + } + } + } + } + }, "toilet": { "description": "Een laag die publieke toiletten toont", "filter": { diff --git a/langs/nl.json b/langs/nl.json index 8539dd1e14..b26bdca0e3 100644 --- a/langs/nl.json +++ b/langs/nl.json @@ -86,6 +86,7 @@ "add": { "addNew": "Voeg {category} toe", "addNewMapLabel": "Klik hier om een item toe te voegen", + "backToSelect": "Selecteer een andere categorie", "confirmButton": "Voeg een {category} toe
Je toevoeging is voor iedereen zichtbaar
", "confirmIntro": "

Voeg een {title} toe?

Het object dat je toevoegt, is zichtbaar voor iedereen. Veel applicaties gebruiken deze data, voeg dus enkel punten toe die echt bestaan.", "disableFilters": "Zet alle filters af", @@ -111,8 +112,7 @@ "warnVisibleForEveryone": "Je toevoeging is voor iedereen zichtbaar", "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.", - "zoomInMore": "Zoom meer in om dit object te importeren", - "backToSelect": "Selecteer een andere categorie" + "zoomInMore": "Zoom meer in om dit object te importeren" }, "apply_button": { "appliedOnAnotherObject": "Object {id} zal deze tags ontvangen: {tags}", @@ -281,7 +281,17 @@ "skippedQuestions": "Enkele vragen werden overgeslaan", "testing": "Testmode - wijzigingen worden niet opgeslaan", "uploadGpx": { + "choosePermission": "Kies hieronder of je traject gedeeld moet worden:", "confirm": "Bevestig upload", + "intro0": "Door het uploaden van je traject, bewaart OpenStreetMap.org een volledige kopie van je traject.", + "intro1": "Je kan je traject weer downloaden en laden in OpenStreetMap editor", + "meta": { + "descriptionIntro": "Optioneel, kan je hier een beschrijving van je traject toevoegen:", + "descriptionPlaceHolder": "Voer een beschrijving in van je traject", + "intro": "Voeg een titel toe aan je traject:", + "title": "Titel en beschrijving", + "titlePlaceholder": "Vul de titel van je traject in" + }, "modes": { "private": { "name": "Anoniem" @@ -289,17 +299,7 @@ "public": { "name": "Publiek" } - }, - "intro0": "Door het uploaden van je traject, bewaart OpenStreetMap.org een volledige kopie van je traject.", - "intro1": "Je kan je traject weer downloaden en laden in OpenStreetMap editor", - "meta": { - "descriptionIntro": "Optioneel, kan je hier een beschrijving van je traject toevoegen:", - "title": "Titel en beschrijving", - "descriptionPlaceHolder": "Voer een beschrijving in van je traject", - "intro": "Voeg een titel toe aan je traject:", - "titlePlaceholder": "Vul de titel van je traject in" - }, - "choosePermission": "Kies hieronder of je traject gedeeld moet worden:" + } }, "weekdays": { "abbreviations": { diff --git a/langs/shared-questions/en.json b/langs/shared-questions/en.json index fe824523b7..84eaaf6371 100644 --- a/langs/shared-questions/en.json +++ b/langs/shared-questions/en.json @@ -1,5 +1,34 @@ { "shared_questions": { + "denominations-coins": { + "mappings": { + "0": { + "then": "1 cent coins are accepted" + }, + "1": { + "then": "2 cent coins are accepted" + }, + "2": { + "then": "5 cent coins are accepted" + }, + "3": { + "then": "10 cent coins are accepted" + }, + "4": { + "then": "20 cent coins are accepted" + }, + "5": { + "then": "50 cent coins are accepted" + }, + "6": { + "then": "1 euro coins are accepted" + }, + "7": { + "then": "2 euro coins are accepted" + } + }, + "question": "Whith what coins can you pay here?" + }, "description": { "question": "Is there still something relevant you couldn't give in the previous questions? Add it here.
Don't repeat already stated facts" }, @@ -150,6 +179,24 @@ } } }, + "payment-options-split": { + "override": { + "mappings+": { + "0": { + "then": "Coins are accepted here" + }, + "1": { + "then": "Bank notes are accepted here" + }, + "2": { + "then": "Debit cards are accepted here" + }, + "3": { + "then": "Credit cards are accepted here" + } + } + } + }, "phone": { "question": "What is the phone number of {title()}?" }, diff --git a/langs/shared-questions/nl.json b/langs/shared-questions/nl.json index 0478feec27..e6f990bfe8 100644 --- a/langs/shared-questions/nl.json +++ b/langs/shared-questions/nl.json @@ -115,6 +115,18 @@ } } }, + "opening_hours_by_appointment": { + "override": { + "mappings": { + "0": { + "then": "Alleen op afspraak" + }, + "1": { + "then": "Alleen op afspraak" + } + } + } + }, "payment-options": { "mappings": { "0": { @@ -210,18 +222,6 @@ } }, "question": "Welk Wikipedia-artikel beschrijft dit object?" - }, - "opening_hours_by_appointment": { - "override": { - "mappings": { - "1": { - "then": "Alleen op afspraak" - }, - "0": { - "then": "Alleen op afspraak" - } - } - } } } -} +} \ No newline at end of file diff --git a/langs/themes/en.json b/langs/themes/en.json index a0ead4a3d7..5214e8fcc2 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -7,6 +7,10 @@ "description": "An open map of statues, busts, graffitis and other artwork all over the world", "title": "Open Artwork Map" }, + "atm": { + "description": "This map shows ATMs to withdraw or deposit money", + "title": "ATM Machines" + }, "bag": { "description": "This theme helps with importing data from BAG", "layers": { diff --git a/langs/themes/nl.json b/langs/themes/nl.json index 0f3c9d99c4..820c78cf45 100644 --- a/langs/themes/nl.json +++ b/langs/themes/nl.json @@ -76,6 +76,10 @@ "shortDescription": "Een kaart met publieke verrekijker", "title": "Verrekijkers" }, + "blind_osm": { + "description": "Help zaken die relevant zijn voor blinden in kaart te brengen", + "title": "OSM voor blinden" + }, "bookcases": { "description": "Een boekenruilkast is een kastje waar iedereen een boek kan nemen of achterlaten. Op deze kaart kan je deze boekenruilkasten terugvinden en met een gratis OpenStreetMap-account, ook boekenruilkasten toevoegen of informatie verbeteren", "title": "Open boekenruilkasten-kaart" @@ -973,9 +977,9 @@ "title": "Een kaart van kaarten" }, "maxspeed": { + "description": "Deze kaart toont de maximum toegestane snelheid voor elke weg. Als er een maximumsnelheid mist of niet klopt, kan je hem hier aanpassen.", "shortDescription": "Deze kaart toont de maximumsnelheid voor elke straat.", - "title": "Maximale snelheden", - "description": "Deze kaart toont de maximum toegestane snelheid voor elke weg. Als er een maximumsnelheid mist of niet klopt, kan je hem hier aanpassen." + "title": "Maximale snelheden" }, "nature": { "description": "Op deze kaart vind je informatie voor natuurliefhebbers, zoals info over het natuurgebied waar je inzit, vogelkijkhutten, informatieborden, ...", @@ -1066,6 +1070,11 @@ "description": "Een kaart om windturbines te tonen en te bewerken.", "title": "Windmolens" }, + "osm_community_index": { + "description": "Een lijst van hulpmiddelen van gebruikers van OpenStreetMap. 'Hulpmiddelen' kunnen fora, meetups, Slack groepen, IRC kanalen, mailinglijsten, en meer zijn. Alles dat mappers, vooral beginners, nuttig of behulpzaam kunnen vinden.", + "shortDescription": "Een overzicht van hulpbronnen voor OpenStreetMap van de community.", + "title": "OSM Community Overzicht" + }, "parkings": { "description": "Deze kaart toont verschillende parkeerplekken", "shortDescription": "Deze kaart toont verschillende parkeerplekken", @@ -1350,14 +1359,5 @@ "description": "Op deze kaart vind je vuilnisbakken waar je afval in kan smijten. Ontbreekt er een vuilnisbak? Dan kan je die zelf toevoegen", "shortDescription": "Een kaart met vuilnisbakken", "title": "Vuilnisbak" - }, - "osm_community_index": { - "description": "Een lijst van hulpmiddelen van gebruikers van OpenStreetMap. 'Hulpmiddelen' kunnen fora, meetups, Slack groepen, IRC kanalen, mailinglijsten, en meer zijn. Alles dat mappers, vooral beginners, nuttig of behulpzaam kunnen vinden.", - "shortDescription": "Een overzicht van hulpbronnen voor OpenStreetMap van de community.", - "title": "OSM Community Overzicht" - }, - "blind_osm": { - "title": "OSM voor blinden", - "description": "Help zaken die relevant zijn voor blinden in kaart te brengen" } -} +} \ No newline at end of file diff --git a/scripts/removeTranslationString.ts b/scripts/removeTranslationString.ts index 30c9bf60ab..aa63ee9d58 100644 --- a/scripts/removeTranslationString.ts +++ b/scripts/removeTranslationString.ts @@ -1,23 +1,22 @@ -import ScriptUtils from "./ScriptUtils"; -import {Utils} from "../Utils"; +import ScriptUtils from "./ScriptUtils" +import { Utils } from "../Utils" import * as fs from "fs" -async function main(args: string[]){ - if(args.length !== 1){ +async function main(args: string[]) { + if (args.length !== 1) { console.log("Usage: first argument is the fully qualified key of the string to remove") return } const path = args[0].split(".") - console.log("Removing translation string ", path, 'from the general translations') - const files = ScriptUtils.readDirRecSync("./langs", 1).filter(f => f.endsWith(".json")) + console.log("Removing translation string ", path, "from the general translations") + const files = ScriptUtils.readDirRecSync("./langs", 1).filter((f) => f.endsWith(".json")) for (const file of files) { const json = JSON.parse(fs.readFileSync(file, "UTF-8")) - Utils.WalkPath(path, json, (_ => undefined)) - fs.writeFileSync(file, JSON.stringify(json, null, " ")+"\n") + Utils.WalkPath(path, json, (_) => undefined) + fs.writeFileSync(file, JSON.stringify(json, null, " ") + "\n") } } - const args = [...process.argv] args.splice(0, 2) main(args).then((_) => {