forked from MapComplete/MapComplete
Merge branch 'develop' into feature/velopark
This commit is contained in:
commit
59e76b9c6f
30 changed files with 963 additions and 654 deletions
|
@ -752,7 +752,7 @@
|
|||
"deletion": {
|
||||
"softDeletionTags": {
|
||||
"and": [
|
||||
"disused:emergency:=defibrillator}",
|
||||
"disused:emergency:=defibrillator",
|
||||
"emergency="
|
||||
]
|
||||
},
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"color": "red"
|
||||
"color": "black"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -43,5 +43,6 @@
|
|||
},
|
||||
"tagRenderings": [
|
||||
|
||||
]
|
||||
],
|
||||
"syncSelection": "global"
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"source": {
|
||||
"osmTags": "amenity=toilets"
|
||||
},
|
||||
"minzoom": 12,
|
||||
"minzoom": 10,
|
||||
"title": {
|
||||
"render": {
|
||||
"en": "Toilet",
|
||||
|
@ -683,6 +683,7 @@
|
|||
}
|
||||
}
|
||||
],
|
||||
"multiAnswer": true,
|
||||
"id": "toilet-changing_table:location"
|
||||
},
|
||||
{
|
||||
|
|
|
@ -60,12 +60,13 @@
|
|||
"unmark": "Von persönlicher Liste bevorzugter Standorte entfernen",
|
||||
"unmarkNotDeleted": "Dieser Punkt wird nicht gelöscht und ist weiterhin auf der entsprechenden Karte für dich und andere sichtbar"
|
||||
},
|
||||
"downloadGeojson": "Lade deine Favoriten als geojson herunter",
|
||||
"downloadGpx": "Lade deine Favoriten als GPX herunter",
|
||||
"intro": "Du hast {length} Orte als Lieblingsort markiert.",
|
||||
"downloadGeojson": "Favoriten als geojson herunterladen",
|
||||
"downloadGpx": "Favoriten als GPX herunterladen",
|
||||
"intro": "Du hast {length} Orte als Favorit markiert.",
|
||||
"introPrivacy": "Diese Liste ist nur für dich sichtbar",
|
||||
"loginToSeeList": "Melde dich an, um die Liste der Orte zu sehen, die du als Favoriten markiert hast",
|
||||
"tab": "Deine Favoriten"
|
||||
"tab": "Deine Favoriten",
|
||||
"title": "Ausgewählte Orte"
|
||||
},
|
||||
"flyer": {
|
||||
"aerial": "Diese Karte verwendet einen anderen Hintergrund, nämlich Luftaufnahmen der Agentschap Informatie Vlaanderen",
|
||||
|
@ -173,12 +174,14 @@
|
|||
"openIssueTracker": "Fehler melden",
|
||||
"openMapillary": "Mapillary öffnen",
|
||||
"openOsmcha": "Neueste Bearbeitungen mit {theme} ansehen",
|
||||
"seeOnMapillary": "Dieses Bild auf Mapillary ansehen",
|
||||
"themeBy": "Dieses Thema wurde erstellt von {author}",
|
||||
"title": "Copyright und Urheberrechtsangabe",
|
||||
"translatedBy": "MapComplete wurde übersetzt von {contributors} und <a href='https://github.com/pietervdvn/MapComplete/graphs/contributors' target='_blank'>{hiddenCount} weiteren Personen</a>"
|
||||
},
|
||||
"back": "Zurück",
|
||||
"backToIndex": "Zur Übersicht aller Themenkarten",
|
||||
"backToMap": "Zurück zur Karte",
|
||||
"backgroundMap": "Hintergrundkarte auswählen",
|
||||
"backgroundSwitch": "Hintergrund wechseln",
|
||||
"cancel": "Abbrechen",
|
||||
|
@ -224,6 +227,13 @@
|
|||
"histogram": {
|
||||
"error_loading": "Das Histogramm konnte nicht geladen werden"
|
||||
},
|
||||
"labels": {
|
||||
"background": "Hintergrund ändern",
|
||||
"filter": "Daten filtern",
|
||||
"menu": "Menü",
|
||||
"zoomIn": "Hineinzoomen",
|
||||
"zoomOut": "Herauszoomen"
|
||||
},
|
||||
"layerSelection": {
|
||||
"title": "Ebenen auswählen",
|
||||
"zoomInToSeeThisLayer": "Ausschnitt vergrößern, um Ebene anzuzeigen"
|
||||
|
@ -272,7 +282,9 @@
|
|||
"closed_permanently": "Geschlossen auf unbestimmte Zeit",
|
||||
"closed_until": "Geschlossen bis {date}",
|
||||
"error_loading": "Fehler: Diese Öffnungszeiten können nicht angezeigt werden.",
|
||||
"friday": "Am Freitag {ranges}",
|
||||
"loadingCountry": "Land ermitteln…",
|
||||
"monday": "Am Montag {ranges}",
|
||||
"not_all_rules_parsed": "Die Öffnungszeiten sind kompliziert. Folgenden Regeln werden im Eingabefenster ignoriert:",
|
||||
"openTill": "bis",
|
||||
"open_24_7": "Durchgehend geöffnet",
|
||||
|
@ -281,7 +293,15 @@
|
|||
"ph_closed": "geschlossen",
|
||||
"ph_not_known": " ",
|
||||
"ph_open": "geöffnet",
|
||||
"ph_open_as_usual": "geöffnet wie üblich"
|
||||
"ph_open_as_usual": "geöffnet wie üblich",
|
||||
"ranges": "von {starttime} bis {endtime}",
|
||||
"rangescombined": "{range0} und {range1}",
|
||||
"saturday": "Am Samstag {ranges}",
|
||||
"sunday": "Am Sonntag {ranges}",
|
||||
"thursday": "Am Donnerstag {ranges}",
|
||||
"tuesday": "Am Dienstag {ranges}",
|
||||
"unknown": "Die Öffnungszeiten sind unbekannt",
|
||||
"wednesday": "Am Mittwoch {ranges}"
|
||||
},
|
||||
"osmLinkTooltip": "Dieses Element auf OpenStreetMap öffnen, um Verlauf und Bearbeitungsmöglichkeiten anzuzeigen",
|
||||
"pdf": {
|
||||
|
@ -290,7 +310,7 @@
|
|||
"generatedWith": "Erstellt mit mapcomplete.org/{layoutid}",
|
||||
"versionInfo": "v{version} - erstellt am {date}"
|
||||
},
|
||||
"pickLanguage": "Sprache auswählen: ",
|
||||
"pickLanguage": "Sprache auswählen",
|
||||
"poweredByOsm": "Unterstützt von OpenStreetMap",
|
||||
"questionBox": {
|
||||
"answeredMultiple": "Du hast {answered} Fragen beantwortet",
|
||||
|
@ -324,6 +344,7 @@
|
|||
"searchShort": "Suche…",
|
||||
"searching": "Suchen …"
|
||||
},
|
||||
"share": "Teilen",
|
||||
"sharescreen": {
|
||||
"copiedToClipboard": "Verknüpfung in Zwischenablage kopiert",
|
||||
"documentation": "Für weitere Informationen über verfügbare URL-Parameter, <a href='https://github.com/pietervdvn/MapComplete/blob/develop/Docs/URL_Parameters.md' target='_blank'>siehe Dokumentation</a>",
|
||||
|
@ -369,6 +390,27 @@
|
|||
"uploadingChanges": "Änderungen werden hochgeladen…",
|
||||
"useSearch": "Verwenden Sie die Suche oben, um Voreinstellungen anzuzeigen",
|
||||
"useSearchForMore": "Verwenden Sie die Suchfunktion, um innerhalb von {total} weitere Werte zu suchen…",
|
||||
"visualFeedback": {
|
||||
"directionsAbsolute": {
|
||||
"E": "Ost",
|
||||
"N": "Nord",
|
||||
"NE": "Nordost",
|
||||
"NW": "Nordwest",
|
||||
"S": "Süd",
|
||||
"SE": "Südost",
|
||||
"SW": "Südwest",
|
||||
"W": "West"
|
||||
},
|
||||
"directionsRelative": {
|
||||
"left": "links",
|
||||
"right": "rechts",
|
||||
"sharp_left": "scharf links",
|
||||
"sharp_right": "scharf rechts",
|
||||
"slight_left": "leicht links",
|
||||
"slight_right": "leicht rechts",
|
||||
"straight": "geradeaus"
|
||||
}
|
||||
},
|
||||
"waitingForGeopermission": "Warten auf Ihre Erlaubnis, Standortdaten zu verwenden…",
|
||||
"waitingForLocation": "Ihr Standort wird gesucht…",
|
||||
"weekdays": {
|
||||
|
@ -416,12 +458,16 @@
|
|||
"hotkeyDocumentation": {
|
||||
"action": "Aktion",
|
||||
"closeSidebar": "Seitenleiste schließen",
|
||||
"geolocate": "Verschieben Sie die Karte auf den aktuellen Standort oder zoomen Sie die Karte auf den aktuellen Standort. Beantragt Standortberechtigung",
|
||||
"geolocate": "Karte auf den aktuellen Standort verschieben oder zoomen. Erfordert Standortberechtigung",
|
||||
"intro": "MapComplete unterstützt folgende Tastaturbefehle:",
|
||||
"key": "Tastenkombination",
|
||||
"openLayersPanel": "Öffnet das Menü für Ebenen und Filter",
|
||||
"openLayersPanel": "Auswahl für Hintergrundebenen öffnen",
|
||||
"selectAerial": "Hintergrund als Luftbild oder Satellitenbild einstellen. Wechselt zwischen den zwei besten verfügbaren Ebenen",
|
||||
"selectItem": "Wähle das POI, das dem Kartenmittelpunkt (Fadenkreuz) am nächsten liegt. Nur wenn die Tastaturnavigation verwendet wird",
|
||||
"selectFavourites": "Favoriten anzeigen",
|
||||
"selectItem": "Objekt auswählen, das dem Kartenmittelpunkt (Fadenkreuz) am nächsten liegt. Nur wenn die Tastaturnavigation verwendet wird",
|
||||
"selectItem2": "Objekt auswählen, das dem Kartenmittelpunkt (Fadenkreuz) am zweitnächsten liegt. Nur wenn die Tastaturnavigation verwendet wird",
|
||||
"selectItem3": "Objekt auswählen, das dem Kartenmittelpunkt (Fadenkreuz) am drittnächsten liegt. Nur wenn die Tastaturnavigation verwendet wird",
|
||||
"selectItemI": "Objekt auswählen, das dem Kartenmittelpunkt (Fadenkreuz) am viertnächsten liegt. Nur wenn die Tastaturnavigation verwendet wird",
|
||||
"selectMap": "Karte aus externer Quelle als Hintergrund wählen. Wechselt zwischen den zwei besten verfügbaren Ebenen",
|
||||
"selectMapnik": "OpenStreetMap-carto als Hintergrundebene wählen",
|
||||
"selectOsmbasedmap": "OpenStreetMap-basierte Karte als Hintergrund auswählen (oder Hintergrundebene deaktivieren)",
|
||||
|
|
|
@ -366,7 +366,7 @@
|
|||
"testing": "Testing - changes won't be saved",
|
||||
"uploadError": "Error while uploading changes: {error}",
|
||||
"uploadGpx": {
|
||||
"choosePermission": "Choose below if your track should be shared:",
|
||||
"choosePermission": "Choose below how your track should be shared:",
|
||||
"confirm": "Confirm upload",
|
||||
"gpxServiceOffline": "The GPX-service is currently offline - uploading is currently not possible. Try again later.",
|
||||
"intro0": "By uploading your track, OpenStreetMap.org will retain a full copy of the track.",
|
||||
|
@ -500,7 +500,8 @@
|
|||
"selectOsmbasedmap": "Set the background layer to on OpenStreetMap-based map (or disable the background raster layer)",
|
||||
"selectSearch": "Select the search bar to search locations",
|
||||
"shakePhone": "Shaking your phone",
|
||||
"title": "Hotkeys"
|
||||
"title": "Hotkeys",
|
||||
"translationMode": "Toggle translation mode on or off"
|
||||
},
|
||||
"image": {
|
||||
"addPicture": "Add picture",
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -69,6 +69,15 @@
|
|||
"1": {
|
||||
"then": "Murale"
|
||||
},
|
||||
"10": {
|
||||
"then": "Azulejo (ornamento decorativo piastrellato spagnolo)"
|
||||
},
|
||||
"11": {
|
||||
"then": "Mosaico di piastrelle"
|
||||
},
|
||||
"12": {
|
||||
"then": "Scultura in legno"
|
||||
},
|
||||
"2": {
|
||||
"then": "Dipinto"
|
||||
},
|
||||
|
@ -92,12 +101,6 @@
|
|||
},
|
||||
"9": {
|
||||
"then": "Rilievo"
|
||||
},
|
||||
"10": {
|
||||
"then": "Azulejo (ornamento decorativo piastrellato spagnolo)"
|
||||
},
|
||||
"11": {
|
||||
"then": "Mosaico di piastrelle"
|
||||
}
|
||||
},
|
||||
"question": "Che tipo di opera d’arte è questo?",
|
||||
|
@ -110,6 +113,24 @@
|
|||
"text": "Ulteriori informazioni su questo sito web"
|
||||
}
|
||||
}
|
||||
},
|
||||
"artwork_subject": {
|
||||
"question": "Che cosa rappresenta quest'opera d'arte?",
|
||||
"render": "Quest'opera d'arte rappresenta {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}"
|
||||
},
|
||||
"doubles_as_bench": {
|
||||
"mappings": {
|
||||
"0": {
|
||||
"then": "Quest'opera d'arte funge anche da panchina"
|
||||
},
|
||||
"1": {
|
||||
"then": "Quest'opera d'arte non funge anche da panchina"
|
||||
},
|
||||
"2": {
|
||||
"then": "Quest'opera d'arte non funge anche da panchina"
|
||||
}
|
||||
},
|
||||
"question": "Quest'opera d'arte funge da panchina?"
|
||||
}
|
||||
},
|
||||
"title": {
|
||||
|
@ -121,6 +142,79 @@
|
|||
"render": "Opera d’arte"
|
||||
}
|
||||
},
|
||||
"atm": {
|
||||
"description": "Sportello Bancomat per prelevare denaro",
|
||||
"name": "Sportelli Bancomat",
|
||||
"presets": {
|
||||
"0": {
|
||||
"title": "Uno sportello bancomat"
|
||||
}
|
||||
},
|
||||
"tagRenderings": {
|
||||
"cash_in": {
|
||||
"mappings": {
|
||||
"0": {
|
||||
"then": "Probabilmente non puoi depositare dei contanti in questo sportello bancomat"
|
||||
},
|
||||
"1": {
|
||||
"then": "Puoi depositare dei contanti in questo sportello bancomat"
|
||||
},
|
||||
"2": {
|
||||
"then": "Non puoi depositare dei contanti in questo sportello bancomat"
|
||||
}
|
||||
},
|
||||
"question": "Puoi depositare dei contanti in questo sportello bancomat?"
|
||||
},
|
||||
"cash_out": {
|
||||
"mappings": {
|
||||
"0": {
|
||||
"then": "Puoi prelevare dei contanti da questo sportello bancomat"
|
||||
},
|
||||
"1": {
|
||||
"then": "Puoi prelevare dei contanti da questo sportello bancomat"
|
||||
},
|
||||
"2": {
|
||||
"then": "Non puoi prelevare dei contanti da questo sportello bancomat"
|
||||
}
|
||||
},
|
||||
"question": "Puoi prelevare dei contanti da questo sportello bancomat?"
|
||||
},
|
||||
"cash_out-denominations-notes": {
|
||||
"mappings": {
|
||||
"0": {
|
||||
"then": "Si possono prelevare banconote da 5 euro"
|
||||
},
|
||||
"1": {
|
||||
"then": "Si possono prelevare banconote da 10 euro"
|
||||
},
|
||||
"2": {
|
||||
"then": "Si possono prelevare banconote da 20 euro"
|
||||
},
|
||||
"3": {
|
||||
"then": "Si possono prelevare banconote da 50 euro"
|
||||
},
|
||||
"4": {
|
||||
"then": "Si possono prelevare banconote da 100 euro"
|
||||
},
|
||||
"5": {
|
||||
"then": "Non si possono prelevare banconote da 200 euro"
|
||||
},
|
||||
"6": {
|
||||
"then": "Non si possono prelevare banconote da 500 euro"
|
||||
}
|
||||
},
|
||||
"question": "Quali banconote si possono ritirare qui?"
|
||||
},
|
||||
"name": {
|
||||
"render": "Il nome di questo sportello bancomat è {name}"
|
||||
},
|
||||
"operator": {
|
||||
"freeform": {
|
||||
"placeholder": "Operatore"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"bench": {
|
||||
"name": "Panchine",
|
||||
"presets": {
|
||||
|
@ -1898,27 +1992,6 @@
|
|||
"1": {
|
||||
"question": "Riciclo di batterie"
|
||||
},
|
||||
"2": {
|
||||
"question": "Riciclo di confezioni per bevande"
|
||||
},
|
||||
"3": {
|
||||
"question": "Riciclo di lattine"
|
||||
},
|
||||
"4": {
|
||||
"question": "Riciclo di abiti"
|
||||
},
|
||||
"5": {
|
||||
"question": "Riciclo di olio da cucina"
|
||||
},
|
||||
"6": {
|
||||
"question": "Riciclo di olio da motore"
|
||||
},
|
||||
"8": {
|
||||
"question": "Riciclo di umido"
|
||||
},
|
||||
"9": {
|
||||
"question": "Riciclo di bottiglie di vetro"
|
||||
},
|
||||
"10": {
|
||||
"question": "Riciclo di vetro"
|
||||
},
|
||||
|
@ -1946,8 +2019,29 @@
|
|||
"19": {
|
||||
"question": "Riciclo di secco"
|
||||
},
|
||||
"2": {
|
||||
"question": "Riciclo di confezioni per bevande"
|
||||
},
|
||||
"20": {
|
||||
"question": "Riciclo di secco"
|
||||
},
|
||||
"3": {
|
||||
"question": "Riciclo di lattine"
|
||||
},
|
||||
"4": {
|
||||
"question": "Riciclo di abiti"
|
||||
},
|
||||
"5": {
|
||||
"question": "Riciclo di olio da cucina"
|
||||
},
|
||||
"6": {
|
||||
"question": "Riciclo di olio da motore"
|
||||
},
|
||||
"8": {
|
||||
"question": "Riciclo di umido"
|
||||
},
|
||||
"9": {
|
||||
"question": "Riciclo di bottiglie di vetro"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -2000,27 +2094,6 @@
|
|||
"1": {
|
||||
"then": "Cartoni per bevande"
|
||||
},
|
||||
"2": {
|
||||
"then": "Lattine"
|
||||
},
|
||||
"3": {
|
||||
"then": "Abiti"
|
||||
},
|
||||
"4": {
|
||||
"then": "Olio da cucina"
|
||||
},
|
||||
"5": {
|
||||
"then": "Olio di motore"
|
||||
},
|
||||
"7": {
|
||||
"then": "Verde"
|
||||
},
|
||||
"8": {
|
||||
"then": "Umido"
|
||||
},
|
||||
"9": {
|
||||
"then": "Bottiglie di vetro"
|
||||
},
|
||||
"10": {
|
||||
"then": "Vetro"
|
||||
},
|
||||
|
@ -2045,6 +2118,9 @@
|
|||
"19": {
|
||||
"then": "Scarpe"
|
||||
},
|
||||
"2": {
|
||||
"then": "Lattine"
|
||||
},
|
||||
"20": {
|
||||
"then": "Piccoli elettrodomestici"
|
||||
},
|
||||
|
@ -2056,6 +2132,24 @@
|
|||
},
|
||||
"23": {
|
||||
"then": "Secco"
|
||||
},
|
||||
"3": {
|
||||
"then": "Abiti"
|
||||
},
|
||||
"4": {
|
||||
"then": "Olio da cucina"
|
||||
},
|
||||
"5": {
|
||||
"then": "Olio di motore"
|
||||
},
|
||||
"7": {
|
||||
"then": "Verde"
|
||||
},
|
||||
"8": {
|
||||
"then": "Umido"
|
||||
},
|
||||
"9": {
|
||||
"then": "Bottiglie di vetro"
|
||||
}
|
||||
},
|
||||
"question": "Cosa si può riciclare qui?"
|
||||
|
@ -2856,4 +2950,4 @@
|
|||
"render": "pala eolica"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -842,7 +842,7 @@
|
|||
"hackerspaces": {
|
||||
"description": "Auf dieser Karte können Sie Hackerspaces sehen, einen neuen Hackerspace hinzufügen oder Daten direkt aktualisieren",
|
||||
"shortDescription": "Eine Karte von Hackerspaces",
|
||||
"title": "Hackerspaces"
|
||||
"title": "Hackerspaces und Makerspaces"
|
||||
},
|
||||
"hailhydrant": {
|
||||
"description": "Auf dieser Karte können Sie Hydranten, Feuerwachen, Krankenwagen und Feuerlöscher in Ihren bevorzugten Stadtvierteln finden und aktualisieren.",
|
||||
|
@ -918,6 +918,13 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"10": {
|
||||
"options": {
|
||||
"0": {
|
||||
"question": "Etymologie-Thema ausschließen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"2": {
|
||||
"options": {
|
||||
"0": {
|
||||
|
@ -973,13 +980,6 @@
|
|||
"question": "GRB-Theme ausschließen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"10": {
|
||||
"options": {
|
||||
"0": {
|
||||
"question": "Etymologie-Thema ausschließen"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Zentrum der Änderungssätze",
|
||||
|
@ -1056,6 +1056,33 @@
|
|||
"onwheels": {
|
||||
"description": "Auf dieser Karte können Sie öffentlich zugängliche Orte für Rollstuhlfahrer ansehen, bearbeiten oder hinzufügen",
|
||||
"layers": {
|
||||
"19": {
|
||||
"override": {
|
||||
"=title": {
|
||||
"render": "Statistik"
|
||||
}
|
||||
}
|
||||
},
|
||||
"20": {
|
||||
"override": {
|
||||
"+tagRenderings": {
|
||||
"0": {
|
||||
"render": {
|
||||
"special": {
|
||||
"text": "Import"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1": {
|
||||
"render": {
|
||||
"special": {
|
||||
"message": "Alle vorgeschlagenen Tags hinzufügen"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"4": {
|
||||
"override": {
|
||||
"filter": {
|
||||
|
@ -1098,33 +1125,6 @@
|
|||
"override": {
|
||||
"name": "Barrierefreie Parkplätze"
|
||||
}
|
||||
},
|
||||
"19": {
|
||||
"override": {
|
||||
"=title": {
|
||||
"render": "Statistik"
|
||||
}
|
||||
}
|
||||
},
|
||||
"20": {
|
||||
"override": {
|
||||
"+tagRenderings": {
|
||||
"0": {
|
||||
"render": {
|
||||
"special": {
|
||||
"text": "Import"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1": {
|
||||
"render": {
|
||||
"special": {
|
||||
"message": "Alle vorgeschlagenen Tags hinzufügen"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"title": "Auf Rädern"
|
||||
|
@ -1285,10 +1285,6 @@
|
|||
"stations": {
|
||||
"description": "Bahnhofsdetails ansehen, bearbeiten und hinzufügen",
|
||||
"layers": {
|
||||
"3": {
|
||||
"description": "Ebene mit Bahnhöfen",
|
||||
"name": "Bahnhöfe"
|
||||
},
|
||||
"16": {
|
||||
"description": "Anzeigen der Züge, die von diesem Bahnhof abfahren",
|
||||
"name": "Abfahrtstafeln",
|
||||
|
@ -1320,6 +1316,10 @@
|
|||
"title": {
|
||||
"render": "Abfahrtstafel"
|
||||
}
|
||||
},
|
||||
"3": {
|
||||
"description": "Ebene mit Bahnhöfen",
|
||||
"name": "Bahnhöfe"
|
||||
}
|
||||
},
|
||||
"title": "Bahnhöfe"
|
||||
|
@ -1498,4 +1498,4 @@
|
|||
"shortDescription": "Eine Karte mit Abfalleimern",
|
||||
"title": "Abfalleimer"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -842,7 +842,7 @@
|
|||
"hackerspaces": {
|
||||
"description": "On this map you can see hackerspaces, add a new hackerspace or update data directly",
|
||||
"shortDescription": "A map of hackerspaces",
|
||||
"title": "Hackerspaces"
|
||||
"title": "Hackerspaces and makerspaces"
|
||||
},
|
||||
"hailhydrant": {
|
||||
"description": "On this map you can find and update hydrants, fire stations, ambulance stations, and extinguishers in your favorite neighborhoods.",
|
||||
|
@ -918,6 +918,13 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"10": {
|
||||
"options": {
|
||||
"0": {
|
||||
"question": "Exclude etymology theme"
|
||||
}
|
||||
}
|
||||
},
|
||||
"2": {
|
||||
"options": {
|
||||
"0": {
|
||||
|
@ -973,13 +980,6 @@
|
|||
"question": "Exclude GRB theme"
|
||||
}
|
||||
}
|
||||
},
|
||||
"10": {
|
||||
"options": {
|
||||
"0": {
|
||||
"question": "Exclude etymology theme"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Changeset centers",
|
||||
|
@ -1056,6 +1056,33 @@
|
|||
"onwheels": {
|
||||
"description": "On this map, publicly weelchair accessible places are shown and can be easily added",
|
||||
"layers": {
|
||||
"19": {
|
||||
"override": {
|
||||
"=title": {
|
||||
"render": "Statistics"
|
||||
}
|
||||
}
|
||||
},
|
||||
"20": {
|
||||
"override": {
|
||||
"+tagRenderings": {
|
||||
"0": {
|
||||
"render": {
|
||||
"special": {
|
||||
"text": "Import"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1": {
|
||||
"render": {
|
||||
"special": {
|
||||
"message": "Add all the suggested tags"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"4": {
|
||||
"override": {
|
||||
"filter": {
|
||||
|
@ -1098,33 +1125,6 @@
|
|||
"override": {
|
||||
"name": "Disabled parking spaces"
|
||||
}
|
||||
},
|
||||
"19": {
|
||||
"override": {
|
||||
"=title": {
|
||||
"render": "Statistics"
|
||||
}
|
||||
}
|
||||
},
|
||||
"20": {
|
||||
"override": {
|
||||
"+tagRenderings": {
|
||||
"0": {
|
||||
"render": {
|
||||
"special": {
|
||||
"text": "Import"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1": {
|
||||
"render": {
|
||||
"special": {
|
||||
"message": "Add all the suggested tags"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"title": "OnWheels"
|
||||
|
@ -1285,10 +1285,6 @@
|
|||
"stations": {
|
||||
"description": "View, edit and add details to a train station",
|
||||
"layers": {
|
||||
"3": {
|
||||
"description": "Layer showing train stations",
|
||||
"name": "Train Stations"
|
||||
},
|
||||
"16": {
|
||||
"description": "Displays showing the trains that will leave from this station",
|
||||
"name": "Departures boards",
|
||||
|
@ -1320,6 +1316,10 @@
|
|||
"title": {
|
||||
"render": "Departures board"
|
||||
}
|
||||
},
|
||||
"3": {
|
||||
"description": "Layer showing train stations",
|
||||
"name": "Train Stations"
|
||||
}
|
||||
},
|
||||
"title": "Train Stations"
|
||||
|
@ -1498,4 +1498,4 @@
|
|||
"shortDescription": "A map with waste baskets",
|
||||
"title": "Waste Basket"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -464,7 +464,7 @@
|
|||
"description": "Este mapa muestra redes de nodos ciclistas y te permita añadir nodos nuevos de manera sencilla",
|
||||
"layers": {
|
||||
"0": {
|
||||
"name": "enlaces nodo a nodo",
|
||||
"name": "Vínculos entre nodos",
|
||||
"tagRenderings": {
|
||||
"node2node-survey:date": {
|
||||
"override": {
|
||||
|
@ -476,19 +476,34 @@
|
|||
"title": {
|
||||
"mappings": {
|
||||
"0": {
|
||||
"then": "enlace nodo a nodo <strong>{ref}</strong>"
|
||||
"then": "Vínculos entre nodos <strong>{ref}</strong>"
|
||||
}
|
||||
},
|
||||
"render": "enlace nodo a nodo"
|
||||
"render": "Vínculos entre nodos"
|
||||
}
|
||||
},
|
||||
"1": {
|
||||
"name": "nodos",
|
||||
"name": "Nodos",
|
||||
"presets": {
|
||||
"0": {
|
||||
"title": "un nodo cíclico"
|
||||
}
|
||||
},
|
||||
"tagRenderings": {
|
||||
"node-expected_rcn_route_relations": {
|
||||
"freeform": {
|
||||
"placeholder": "Por ejemplo, 3"
|
||||
},
|
||||
"question": "¿A cuántos otros nodos ciclistas enlaza este nodo?",
|
||||
"render": "Este nodo enlaza a {expected_rcn_route_relations} otros nodos ciclistas."
|
||||
},
|
||||
"node-rxn_ref": {
|
||||
"freeform": {
|
||||
"placeholder": "Por ejemplo, 1"
|
||||
},
|
||||
"question": "¿Cuál es el número de referencia de este nodo cíclico?",
|
||||
"render": "Este nodo cíclico tiene el número de referencia {rcn_ref}"
|
||||
},
|
||||
"node-survey:date": {
|
||||
"override": {
|
||||
"question": "¿Cuándo fue sondeado este nodo ciclista por última vez?",
|
||||
|
@ -500,10 +515,30 @@
|
|||
"mappings": {
|
||||
"0": {
|
||||
"then": "nodo ciclista <strong>{rcn_ref}</strong>"
|
||||
},
|
||||
"1": {
|
||||
"then": "Nodo de ciclo propuesto <strong>{proposed:rcn_ref}</strong>"
|
||||
}
|
||||
},
|
||||
"render": "nodo ciclista"
|
||||
}
|
||||
},
|
||||
"2": {
|
||||
"override": {
|
||||
"name": "Indicadores de ciclismo",
|
||||
"title": {
|
||||
"render": "Hito ciclista"
|
||||
}
|
||||
}
|
||||
},
|
||||
"3": {
|
||||
"override": {
|
||||
"presets": {
|
||||
"0": {
|
||||
"title": "Un marcador de ruta para un enlace de nodo a nodo"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"title": "Redes de Nodos Ciclistas"
|
||||
|
@ -746,6 +781,21 @@
|
|||
"layers": {
|
||||
"0": {
|
||||
"override": {
|
||||
"filter+": {
|
||||
"0": {
|
||||
"options": {
|
||||
"0": {
|
||||
"question": "No se prefiere ningún tipo de aceite"
|
||||
},
|
||||
"1": {
|
||||
"question": "Solo muestra freiduras que utilizan aceite vegetal"
|
||||
},
|
||||
"2": {
|
||||
"question": "Solo muestra freiduras que utilizan aceite animal"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Tienda de patatas fritas"
|
||||
}
|
||||
}
|
||||
|
@ -792,7 +842,7 @@
|
|||
"hackerspaces": {
|
||||
"description": "En este mapa puedes ver hackerspaces, añadir un nuevo hackerspace o actualizar datos directamente",
|
||||
"shortDescription": "Un mapa de hackerspaces",
|
||||
"title": "Hackerspaces"
|
||||
"title": "Hackerspaces and makerspaces"
|
||||
},
|
||||
"hailhydrant": {
|
||||
"description": "En este mapa puedes encontrar y actualizar hidrantes contra incendios, estaciones de bomberos, estaciones de ambulancias y extintores en tus vecindarios favoritos.",
|
||||
|
@ -824,6 +874,10 @@
|
|||
"description": "En este mapa encontrarás hoteles en tu zona",
|
||||
"title": "Hoteles"
|
||||
},
|
||||
"icecream": {
|
||||
"description": "Mapa de heladerías y máquinas expendedoras de helados",
|
||||
"title": "Helado"
|
||||
},
|
||||
"indoors": {
|
||||
"description": "En este mapa se muestran los lugares cubiertos de acceso público",
|
||||
"title": "En interiores"
|
||||
|
@ -844,6 +898,23 @@
|
|||
},
|
||||
"title": "Bordillos y cruces"
|
||||
},
|
||||
"mapcomplete-changes": {
|
||||
"description": "Este mapa muestra todos los cambios realizados con MapComplete",
|
||||
"layers": {
|
||||
"0": {
|
||||
"description": "Muestra todos los cambios de MapComplete",
|
||||
"filter": {
|
||||
"0": {
|
||||
"options": {
|
||||
"0": {
|
||||
"question": "El nombre del tema contiene {search}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"maproulette": {
|
||||
"description": "Tema que muestra las tareas de MapRoulette, permitiendo buscarlas, filtrarlas y arreglarlas.",
|
||||
"title": "Tareas de MapRoulette"
|
||||
|
@ -875,6 +946,33 @@
|
|||
"onwheels": {
|
||||
"description": "En este mapa se muestran los lugares accesibles al público en silla de ruedas, que pueden añadirse fácilmente",
|
||||
"layers": {
|
||||
"19": {
|
||||
"override": {
|
||||
"=title": {
|
||||
"render": "Estadísticas"
|
||||
}
|
||||
}
|
||||
},
|
||||
"20": {
|
||||
"override": {
|
||||
"+tagRenderings": {
|
||||
"0": {
|
||||
"render": {
|
||||
"special": {
|
||||
"text": "Importar"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1": {
|
||||
"render": {
|
||||
"special": {
|
||||
"message": "Añadir todas las etiquetas sugeridas"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"4": {
|
||||
"override": {
|
||||
"filter": {
|
||||
|
@ -917,33 +1015,6 @@
|
|||
"override": {
|
||||
"name": "Plazas de aparcamiento para discapacitados"
|
||||
}
|
||||
},
|
||||
"19": {
|
||||
"override": {
|
||||
"=title": {
|
||||
"render": "Estadísticas"
|
||||
}
|
||||
}
|
||||
},
|
||||
"20": {
|
||||
"override": {
|
||||
"+tagRenderings": {
|
||||
"0": {
|
||||
"render": {
|
||||
"special": {
|
||||
"text": "Importar"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1": {
|
||||
"render": {
|
||||
"special": {
|
||||
"message": "Añadir todas las etiquetas sugeridas"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"title": "Sobre ruedas"
|
||||
|
@ -1104,10 +1175,6 @@
|
|||
"stations": {
|
||||
"description": "Ver, editar y añadir detalles a una estación de tren",
|
||||
"layers": {
|
||||
"3": {
|
||||
"description": "Capa que muestra las estaciones de tren",
|
||||
"name": "Estación de Tren"
|
||||
},
|
||||
"16": {
|
||||
"description": "Pantallas que muestran los trenes que saldrán de esta estación",
|
||||
"name": "Tableros de salidas",
|
||||
|
@ -1139,6 +1206,10 @@
|
|||
"title": {
|
||||
"render": "Tablero de salidas"
|
||||
}
|
||||
},
|
||||
"3": {
|
||||
"description": "Capa que muestra las estaciones de tren",
|
||||
"name": "Estación de Tren"
|
||||
}
|
||||
},
|
||||
"title": "Estaciones de tren"
|
||||
|
@ -1260,4 +1331,4 @@
|
|||
"shortDescription": "Un mapa con papeleras",
|
||||
"title": "Papeleras"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "mapcomplete",
|
||||
"version": "0.36.12",
|
||||
"version": "0.36.13",
|
||||
"repository": "https://github.com/pietervdvn/MapComplete",
|
||||
"description": "A small website to edit OSM easily",
|
||||
"bugs": "https://github.com/pietervdvn/MapComplete/issues",
|
||||
|
|
|
@ -80,6 +80,7 @@ function genImages(dryrun = false) {
|
|||
"ring",
|
||||
"robot",
|
||||
"SocialImageForeground",
|
||||
"speech_bubble",
|
||||
"speech_bubble_black_outline",
|
||||
"square",
|
||||
"square_rounded",
|
||||
|
|
|
@ -155,7 +155,6 @@ export class Mapillary extends ImageProvider {
|
|||
Constants.mapillary_client_token_v4
|
||||
const response = await Utils.downloadJsonCached(metadataUrl, 60 * 60)
|
||||
const url = <string>response["thumb_1024_url"]
|
||||
console.log(response)
|
||||
const url_hd = <string>response["thumb_original_url"]
|
||||
return {
|
||||
id: "" + mapillaryId,
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import ImageProvider, { ProvidedImage } from "./ImageProvider"
|
||||
import BaseUIElement from "../../UI/BaseUIElement"
|
||||
import Svg from "../../Svg"
|
||||
import { Utils } from "../../Utils"
|
||||
import { LicenseInfo } from "./LicenseInfo"
|
||||
import Wikimedia from "../Web/Wikimedia"
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import ChangeTagAction from "./ChangeTagAction"
|
||||
import { Tag } from "../../Tags/Tag"
|
||||
import OsmChangeAction from "./OsmChangeAction"
|
||||
import { Changes } from "../Changes"
|
||||
import { ChangeDescription } from "./ChangeDescription"
|
||||
import { Store } from "../../UIEventSource"
|
||||
|
||||
|
@ -40,7 +39,7 @@ export default class LinkImageAction extends OsmChangeAction {
|
|||
protected CreateChangeDescriptions(): Promise<ChangeDescription[]> {
|
||||
let key = this._proposedKey
|
||||
let i = 0
|
||||
const currentTags = this._currentTags.data
|
||||
const currentTags: Record<string, string> = this._currentTags.data
|
||||
const url = this._url
|
||||
while (currentTags[key] !== undefined && currentTags[key] !== url) {
|
||||
key = this._proposedKey + ":" + i
|
||||
|
|
|
@ -539,7 +539,7 @@ export class Changes {
|
|||
openChangeset
|
||||
)
|
||||
|
||||
console.log("Upload successfull!")
|
||||
console.log("Upload successful!")
|
||||
return true
|
||||
}
|
||||
|
||||
|
|
|
@ -24,11 +24,12 @@ import Table from "../../UI/Base/Table"
|
|||
import FilterConfigJson from "./Json/FilterConfigJson"
|
||||
import { Overpass } from "../../Logic/Osm/Overpass"
|
||||
import { FixedUiElement } from "../../UI/Base/FixedUiElement"
|
||||
import Svg from "../../Svg"
|
||||
import { ImmutableStore } from "../../Logic/UIEventSource"
|
||||
import { OsmTags } from "../OsmFeature"
|
||||
import Constants from "../Constants"
|
||||
import { QuestionableTagRenderingConfigJson } from "./Json/QuestionableTagRenderingConfigJson"
|
||||
import SvelteUIElement from "../../UI/Base/SvelteUIElement"
|
||||
import Statistics from "../../assets/svg/Statistics.svelte"
|
||||
|
||||
export default class LayerConfig extends WithContextLoader {
|
||||
public static readonly syncSelectionAllowed = ["no", "local", "theme-only", "global"] as const
|
||||
|
@ -466,7 +467,7 @@ export default class LayerConfig extends WithContextLoader {
|
|||
new Link(
|
||||
Utils.runningFromConsole
|
||||
? "<img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'>"
|
||||
: Svg.statistics_svg().SetClass("w-4 h-4 mr-2"),
|
||||
: new SvelteUIElement(Statistics, {class: "w-4 h-4 mr-2"}),
|
||||
"https://taginfo.openstreetmap.org/keys/" + values.key + "#values",
|
||||
true
|
||||
),
|
||||
|
|
|
@ -496,7 +496,8 @@ export default class TagRenderingConfig {
|
|||
for (const leftover of leftovers) {
|
||||
applicableMappings.push({
|
||||
then: new TypedTranslation<object>(
|
||||
this.render.replace("{" + this.freeform.key + "}", leftover).translations
|
||||
this.render.replace("{" + this.freeform.key + "}", leftover).translations,
|
||||
this.render.context
|
||||
),
|
||||
})
|
||||
}
|
||||
|
|
|
@ -62,6 +62,7 @@ import FavouritesFeatureSource from "../Logic/FeatureSource/Sources/FavouritesFe
|
|||
import { ProvidedImage } from "../Logic/ImageProviders/ImageProvider"
|
||||
import { GeolocationControlState } from "../UI/BigComponents/GeolocationControl"
|
||||
import Zoomcontrol from "../UI/Zoomcontrol"
|
||||
import Locale from "../UI/i18n/Locale"
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -654,6 +655,16 @@ export default class ThemeViewState implements SpecialVisualizationState {
|
|||
)
|
||||
return true
|
||||
})
|
||||
|
||||
Hotkeys.RegisterHotkey(
|
||||
{
|
||||
shift: "T",
|
||||
},
|
||||
Translations.t.hotkeyDocumentation.translationMode,
|
||||
() => {
|
||||
Locale.showLinkToWeblate.setData(!Locale.showLinkToWeblate.data)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
import BaseUIElement from "../BaseUIElement"
|
||||
import { VariableUiElement } from "./VariableUIElement"
|
||||
import { Stores } from "../../Logic/UIEventSource"
|
||||
import Loading from "./Loading"
|
||||
|
||||
export default class AsyncLazy extends BaseUIElement {
|
||||
private readonly _f: () => Promise<BaseUIElement>
|
||||
|
||||
constructor(f: () => Promise<BaseUIElement>) {
|
||||
super()
|
||||
this._f = f
|
||||
}
|
||||
|
||||
protected InnerConstructElement(): HTMLElement {
|
||||
// The caching of the BaseUIElement will guarantee that _f will only be called once
|
||||
|
||||
return new VariableUiElement(
|
||||
Stores.FromPromise(this._f()).map((el) => {
|
||||
if (el === undefined) {
|
||||
return new Loading()
|
||||
}
|
||||
return el
|
||||
})
|
||||
).ConstructElement()
|
||||
}
|
||||
}
|
|
@ -1,50 +0,0 @@
|
|||
import BaseUIElement from "../BaseUIElement"
|
||||
import { UIEventSource } from "../../Logic/UIEventSource"
|
||||
import { VariableUiElement } from "./VariableUIElement"
|
||||
import Combine from "./Combine"
|
||||
import Locale from "../i18n/Locale"
|
||||
import { Utils } from "../../Utils"
|
||||
|
||||
export default class FilteredCombine extends VariableUiElement {
|
||||
/**
|
||||
* Only shows item matching the search
|
||||
* If predicate of an item is undefined, it will be filtered out as soon as a non-null or non-empty search term is given
|
||||
* @param entries
|
||||
* @param searchedValue
|
||||
* @param options
|
||||
*/
|
||||
constructor(
|
||||
entries: {
|
||||
element: BaseUIElement | string
|
||||
predicate?: (s: string) => boolean
|
||||
}[],
|
||||
searchedValue: UIEventSource<string>,
|
||||
options?: {
|
||||
onEmpty?: BaseUIElement | string
|
||||
innerClasses: string
|
||||
}
|
||||
) {
|
||||
entries = Utils.NoNull(entries)
|
||||
super(
|
||||
searchedValue.map(
|
||||
(searchTerm) => {
|
||||
if (searchTerm === undefined || searchTerm === "") {
|
||||
return new Combine(entries.map((e) => e.element)).SetClass(
|
||||
options?.innerClasses ?? ""
|
||||
)
|
||||
}
|
||||
const kept = entries.filter(
|
||||
(entry) => entry?.predicate !== undefined && entry.predicate(searchTerm)
|
||||
)
|
||||
if (kept.length === 0) {
|
||||
return options?.onEmpty
|
||||
}
|
||||
return new Combine(kept.map((entry) => entry.element)).SetClass(
|
||||
options?.innerClasses ?? ""
|
||||
)
|
||||
},
|
||||
[Locale.language]
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -2,13 +2,14 @@
|
|||
import ToSvelte from "./ToSvelte.svelte"
|
||||
import Svg from "../../Svg"
|
||||
import { twMerge } from "tailwind-merge"
|
||||
import Loading from "../../assets/svg/Loading.svelte"
|
||||
|
||||
export let cls: string = undefined
|
||||
</script>
|
||||
|
||||
<div class={twMerge("flex p-1 pl-2", cls)}>
|
||||
<div class="min-w-6 h-6 w-6 shrink-0 animate-spin self-center">
|
||||
<ToSvelte construct={Svg.loading_svg()} />
|
||||
<Loading/>
|
||||
</div>
|
||||
<div class="ml-2">
|
||||
<slot />
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
import BaseUIElement from "../BaseUIElement"
|
||||
import { Store, UIEventSource } from "../../Logic/UIEventSource"
|
||||
import { UIElement } from "../UIElement"
|
||||
import { VariableUiElement } from "./VariableUIElement"
|
||||
import Lazy from "./Lazy"
|
||||
import Loading from "./Loading"
|
||||
import SvelteUIElement from "./SvelteUIElement"
|
||||
import SubtleLink from "./SubtleLink.svelte"
|
||||
import Translations from "../i18n/Translations"
|
||||
|
|
|
@ -21,8 +21,8 @@
|
|||
export let layer: LayerConfig
|
||||
|
||||
export let linkable = true
|
||||
let isLinked = Object.values(tags.data).some((v) => image.pictureUrl === v)
|
||||
|
||||
let targetValue = Object.values(image.osmTags)[0]
|
||||
let isLinked = new UIEventSource(Object.values(tags.data).some((v) => targetValue === v))
|
||||
const t = Translations.t.image.nearby
|
||||
const providedImage: ProvidedImage = {
|
||||
url: image.thumbUrl ?? image.pictureUrl,
|
||||
|
@ -33,10 +33,11 @@
|
|||
id: Object.values(image.osmTags)[0],
|
||||
}
|
||||
|
||||
$: {
|
||||
function applyLink(isLinked :boolean) {
|
||||
console.log("Applying linked image", isLinked, targetValue)
|
||||
const currentTags = tags.data
|
||||
const key = Object.keys(image.osmTags)[0]
|
||||
const url = image.osmTags[key]
|
||||
const url = targetValue
|
||||
if (isLinked) {
|
||||
const action = new LinkImageAction(currentTags.id, key, url, tags, {
|
||||
theme: tags.data._orig_theme ?? state.layout.id,
|
||||
|
@ -56,6 +57,7 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
isLinked.addCallback(isLinked => applyLink(isLinked))
|
||||
</script>
|
||||
|
||||
<div class="flex w-fit shrink-0 flex-col">
|
||||
|
@ -68,7 +70,7 @@
|
|||
</div>
|
||||
{#if linkable}
|
||||
<label>
|
||||
<input bind:checked={isLinked} type="checkbox" />
|
||||
<input bind:checked={$isLinked} type="checkbox" />
|
||||
<SpecialTranslation t={t.link} {tags} {state} {layer} {feature} />
|
||||
</label>
|
||||
{/if}
|
||||
|
|
|
@ -35,6 +35,10 @@ export default class PhoneValidator extends Validator {
|
|||
if (country !== undefined) {
|
||||
countryCode = country()?.toUpperCase()
|
||||
}
|
||||
if (this.isShortCode(str, countryCode)) {
|
||||
return true
|
||||
}
|
||||
|
||||
return parsePhoneNumberFromString(str, countryCode)?.isValid() ?? false
|
||||
}
|
||||
|
||||
|
@ -46,9 +50,28 @@ export default class PhoneValidator extends Validator {
|
|||
if (country) {
|
||||
countryCode = country()
|
||||
}
|
||||
if (this.isShortCode(str, countryCode?.toUpperCase())) {
|
||||
return str
|
||||
}
|
||||
return parsePhoneNumberFromString(
|
||||
str,
|
||||
countryCode?.toUpperCase() as any
|
||||
)?.formatInternational()
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates if the given string is a special 'short code' valid in the given country
|
||||
* see https://nl.wikipedia.org/wiki/Short_code
|
||||
* @param str a possible phone number
|
||||
* @param country the upper case, two-letter code for a country
|
||||
* @private
|
||||
*/
|
||||
private isShortCode(str: string, country: string) {
|
||||
if (country == "BE" && str.length === 4 && str.match(/[0-9]{4}/)) {
|
||||
return true
|
||||
}
|
||||
if (country == "NL" && str.length === 4 && str.match(/14[0-9]{3}/)) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import { Feature, Point } from "geojson"
|
|||
import SvelteUIElement from "../Base/SvelteUIElement"
|
||||
import Confirm from "../../assets/svg/Confirm.svelte"
|
||||
import Relocation from "../../assets/svg/Relocation.svelte"
|
||||
import Location from "../../assets/svg/Location.svelte"
|
||||
|
||||
export interface MoveReason {
|
||||
text: Translation | string
|
||||
|
@ -62,7 +63,7 @@ export class MoveWizardState {
|
|||
reasons.push({
|
||||
text: t.reasons.reasonInaccurate,
|
||||
invitingText: t.inviteToMove.reasonInaccurate,
|
||||
icon: new SvelteUIElement(Confirm),
|
||||
icon: new SvelteUIElement(Location),
|
||||
changesetCommentValue: "improve_accuracy",
|
||||
lockBounds: true,
|
||||
includeSearch: false,
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import Combine from "../../Base/Combine"
|
||||
import BaseUIElement from "../../BaseUIElement"
|
||||
import Svg from "../../../Svg"
|
||||
import Link from "../../Base/Link"
|
||||
import { FixedUiElement } from "../../Base/FixedUiElement"
|
||||
import Translations from "../../i18n/Translations"
|
||||
|
@ -11,6 +10,10 @@ import { Stores, UIEventSource } from "../../../Logic/UIEventSource"
|
|||
import { OsmConnection } from "../../../Logic/Osm/OsmConnection"
|
||||
import { VariableUiElement } from "../../Base/VariableUIElement"
|
||||
import { SpecialVisualizationState } from "../../SpecialVisualization"
|
||||
import SvelteUIElement from "../../Base/SvelteUIElement"
|
||||
import Note from "../../../assets/svg/Note.svelte"
|
||||
import Resolved from "../../../assets/svg/Resolved.svelte"
|
||||
import Speech_bubble from "../../../assets/svg/Speech_bubble.svelte"
|
||||
|
||||
export default class NoteCommentElement extends Combine {
|
||||
constructor(
|
||||
|
@ -32,11 +35,11 @@ export default class NoteCommentElement extends Combine {
|
|||
|
||||
let actionIcon: BaseUIElement
|
||||
if (comment.action === "opened" || comment.action === "reopened") {
|
||||
actionIcon = Svg.note_svg()
|
||||
actionIcon = new SvelteUIElement(Note)
|
||||
} else if (comment.action === "closed") {
|
||||
actionIcon = Svg.resolved_svg()
|
||||
actionIcon = new SvelteUIElement(Resolved)
|
||||
} else {
|
||||
actionIcon = Svg.speech_bubble_svg()
|
||||
actionIcon = new SvelteUIElement(Speech_bubble)
|
||||
}
|
||||
|
||||
let user: BaseUIElement
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
import type { SpecialVisualizationState } from "../../SpecialVisualization"
|
||||
import type { Feature } from "geojson"
|
||||
import { Store, UIEventSource } from "../../../Logic/UIEventSource"
|
||||
import { onDestroy } from "svelte"
|
||||
import LayerConfig from "../../../Models/ThemeConfig/LayerConfig"
|
||||
import { twMerge } from "tailwind-merge"
|
||||
|
||||
|
@ -24,7 +23,7 @@
|
|||
throw "Config is undefined in tagRenderingAnswer"
|
||||
}
|
||||
let trs: Store<{ then: Translation; icon?: string; iconClass?: string }[]> = tags.mapD((tags) =>
|
||||
Utils.NoNull(config?.GetRenderValues(tags))
|
||||
Utils.NoNull(config?.GetRenderValues(tags)),
|
||||
)
|
||||
</script>
|
||||
|
||||
|
|
|
@ -29,9 +29,6 @@ export default class Zoomcontrol {
|
|||
this._allowZooming.addCallback((allowed) => {
|
||||
this.apply(allowed ? Zoomcontrol.initialValue : Zoomcontrol.noZoom)
|
||||
})
|
||||
Stores.Chronic(1000).addCallback((_) =>
|
||||
console.log(this.viewportElement.getAttribute("content"))
|
||||
)
|
||||
}
|
||||
|
||||
private _resetZoom() {
|
||||
|
|
26
src/index.ts
26
src/index.ts
|
@ -5,11 +5,12 @@ import ThemeViewGUI from "./UI/ThemeViewGUI.svelte"
|
|||
import { FixedUiElement } from "./UI/Base/FixedUiElement"
|
||||
import Combine from "./UI/Base/Combine"
|
||||
import { SubtleButton } from "./UI/Base/SubtleButton"
|
||||
import Svg from "./Svg"
|
||||
import { Utils } from "./Utils"
|
||||
import Download from "./assets/svg/Download.svelte"
|
||||
|
||||
function webgl_support() {
|
||||
try {
|
||||
var canvas = document.createElement("canvas")
|
||||
const canvas = document.createElement("canvas")
|
||||
return (
|
||||
!!window.WebGLRenderingContext &&
|
||||
(canvas.getContext("webgl") || canvas.getContext("experimental-webgl"))
|
||||
|
@ -18,6 +19,7 @@ function webgl_support() {
|
|||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// @ts-ignore
|
||||
try {
|
||||
if (!webgl_support()) {
|
||||
|
@ -31,16 +33,22 @@ try {
|
|||
})
|
||||
.catch((err) => {
|
||||
console.error("Error while initializing: ", err, err.stack)
|
||||
const customDefinition = DetermineLayout.getCustomDefinition()
|
||||
new Combine([
|
||||
new FixedUiElement(err).SetClass("block alert"),
|
||||
|
||||
new SubtleButton(Svg.download_svg(), "Download the raw file").onClick(() =>
|
||||
Utils.offerContentsAsDownloadableFile(
|
||||
DetermineLayout.getCustomDefinition(),
|
||||
"mapcomplete-theme.json",
|
||||
{ mimetype: "application/json" }
|
||||
)
|
||||
),
|
||||
customDefinition?.length > 0
|
||||
? new SubtleButton(
|
||||
new SvelteUIElement(Download),
|
||||
"Download the raw file"
|
||||
).onClick(() =>
|
||||
Utils.offerContentsAsDownloadableFile(
|
||||
DetermineLayout.getCustomDefinition(),
|
||||
"mapcomplete-theme.json",
|
||||
{ mimetype: "application/json" }
|
||||
)
|
||||
)
|
||||
: undefined,
|
||||
]).AttachTo("maindiv")
|
||||
})
|
||||
} catch (err) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue