forked from MapComplete/MapComplete
Merge branch 'develop' of source.mapcomplete.org:MapComplete/MapComplete into develop
This commit is contained in:
commit
7413765646
67 changed files with 1025 additions and 525 deletions
2
assets/icon-background.png.license
Normal file
2
assets/icon-background.png.license
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
SPDX-FileCopyrightText: Pieter Vander Vennet; OSM
|
||||||
|
SPDX-License-Identifier: LicenseRef-LOGO AND CC-BY-SA-4.0
|
2
assets/icon-foreground.png.license
Normal file
2
assets/icon-foreground.png.license
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
SPDX-FileCopyrightText: Pieter Vander Vennet; OSM
|
||||||
|
SPDX-License-Identifier: LicenseRef-LOGO AND CC-BY-SA-4.0
|
2
assets/icon-only.png.license
Normal file
2
assets/icon-only.png.license
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
SPDX-FileCopyrightText: Pieter Vander Vennet; OSM
|
||||||
|
SPDX-License-Identifier: LicenseRef-LOGO AND CC-BY-SA-4.0
|
346
assets/layers/building/building.json
Normal file
346
assets/layers/building/building.json
Normal file
|
@ -0,0 +1,346 @@
|
||||||
|
{
|
||||||
|
"id": "building",
|
||||||
|
"isCounted": false,
|
||||||
|
"source": {
|
||||||
|
"osmTags": "building~*"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"en": "All buildings"
|
||||||
|
},
|
||||||
|
"pointRendering": [
|
||||||
|
{
|
||||||
|
"location": [
|
||||||
|
"point"
|
||||||
|
],
|
||||||
|
"marker": [
|
||||||
|
{
|
||||||
|
"icon": "circle",
|
||||||
|
"color": "white"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"iconSize": "10,10"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"lineRendering": [
|
||||||
|
{
|
||||||
|
"color": "#ff2222",
|
||||||
|
"width": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": {
|
||||||
|
"en": "Buildings"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"render": {
|
||||||
|
"en": "Building"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tagRenderings": [
|
||||||
|
{
|
||||||
|
"id": "architecture",
|
||||||
|
"question": {
|
||||||
|
"en": "What is the architectural style of this building?"
|
||||||
|
},
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "building:architecture=islamic",
|
||||||
|
"then": {
|
||||||
|
"en": "Islamic architecture",
|
||||||
|
"fr": "Architecture islamique",
|
||||||
|
"nl": "Islamitische architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=mamluk",
|
||||||
|
"then": {
|
||||||
|
"en": "Mamluk architecture",
|
||||||
|
"fr": "Architecture mamelouke",
|
||||||
|
"nl": "Mamelukse architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=romanesque",
|
||||||
|
"then": {
|
||||||
|
"en": "Romanesque architecture",
|
||||||
|
"fr": "Architecture romane",
|
||||||
|
"nl": "Romaanse architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=gothic",
|
||||||
|
"then": {
|
||||||
|
"en": "Gothic architecture",
|
||||||
|
"fr": "Architecture gothique",
|
||||||
|
"nl": "Gotische architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=renaissance",
|
||||||
|
"then": {
|
||||||
|
"en": "Renaissance architecture",
|
||||||
|
"fr": "Architecture Renaissance",
|
||||||
|
"nl": "Renaissance-architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=mannerism",
|
||||||
|
"then": {
|
||||||
|
"en": "Mannerism",
|
||||||
|
"fr": "Maniérisme",
|
||||||
|
"nl": "Maniërisme"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=ottoman",
|
||||||
|
"then": {
|
||||||
|
"en": "Ottoman architecture",
|
||||||
|
"fr": "Architecture ottomane",
|
||||||
|
"nl": "Ottomaanse architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=baroque",
|
||||||
|
"then": {
|
||||||
|
"en": "Baroque architecture",
|
||||||
|
"fr": "Architecture baroque",
|
||||||
|
"nl": "Barokarchitectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=rococo",
|
||||||
|
"then": {
|
||||||
|
"en": "Rococo",
|
||||||
|
"fr": "Rococo",
|
||||||
|
"nl": "Rococo"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=empire",
|
||||||
|
"then": {
|
||||||
|
"en": "Empire style",
|
||||||
|
"fr": "Style Empire",
|
||||||
|
"nl": "Empirestijl"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=moorish revival",
|
||||||
|
"then": {
|
||||||
|
"en": "Moorish Revival",
|
||||||
|
"fr": "Architecture néo-mauresque",
|
||||||
|
"nl": "Neo-Moorse architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=neoclassicism",
|
||||||
|
"then": {
|
||||||
|
"en": "Neoclassical architecture",
|
||||||
|
"fr": "Architecture néoclassique",
|
||||||
|
"nl": "Neoclassicistische architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=georgian",
|
||||||
|
"then": {
|
||||||
|
"en": "Georgian architecture",
|
||||||
|
"fr": "Architecture géorgienne",
|
||||||
|
"nl": "Georgian architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=victorian",
|
||||||
|
"then": {
|
||||||
|
"en": "Victorian architecture",
|
||||||
|
"fr": "Architecture victorienne",
|
||||||
|
"nl": "Victoriaanse architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=historicism",
|
||||||
|
"then": {
|
||||||
|
"en": "Historicism",
|
||||||
|
"fr": "Historicisme",
|
||||||
|
"nl": "Historisme"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=neo-romanesque",
|
||||||
|
"then": {
|
||||||
|
"en": "Romanesque Revival",
|
||||||
|
"fr": "Architecture néo-romane",
|
||||||
|
"nl": "Neo-Romaanse architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=neo-byzantine",
|
||||||
|
"then": {
|
||||||
|
"en": "Byzantine Revival",
|
||||||
|
"fr": "Architecture néo-byzantine",
|
||||||
|
"nl": "Neo-Byzantijnse architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=neo-gothic",
|
||||||
|
"then": {
|
||||||
|
"en": "Gothic Revival",
|
||||||
|
"fr": "Architecture néo-gothique",
|
||||||
|
"nl": "Neo-Gotische architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=neo-renaissance",
|
||||||
|
"then": {
|
||||||
|
"en": "Renaissance Revival",
|
||||||
|
"fr": "Architecture néo-Renaissance",
|
||||||
|
"nl": "Neo-Renaissance architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=neo-baroque",
|
||||||
|
"then": {
|
||||||
|
"en": "Baroque Revival",
|
||||||
|
"fr": "Architecture néo-baroque",
|
||||||
|
"nl": "Neo-Barokarchitectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=art_nouveau",
|
||||||
|
"then": {
|
||||||
|
"en": "Art Nouveau",
|
||||||
|
"fr": "Art nouveau",
|
||||||
|
"nl": "Art Nouveau"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=eclectic",
|
||||||
|
"then": {
|
||||||
|
"en": "Eclecticism in architecture",
|
||||||
|
"fr": "Éclectisme en architecture",
|
||||||
|
"nl": "Eclecticisme in architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=functionalism",
|
||||||
|
"then": {
|
||||||
|
"en": "Functionalism",
|
||||||
|
"fr": "Fonctionnalisme",
|
||||||
|
"nl": "Functionalisme"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=cubism",
|
||||||
|
"then": {
|
||||||
|
"en": "Cubism",
|
||||||
|
"fr": "Cubisme",
|
||||||
|
"nl": "Kubisme"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=new_objectivity",
|
||||||
|
"then": {
|
||||||
|
"en": "New Objectivity",
|
||||||
|
"fr": "Nouvelle Objectivité",
|
||||||
|
"nl": "Nieuwe Zakelijkheid"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=art_deco",
|
||||||
|
"then": {
|
||||||
|
"en": "Art Deco",
|
||||||
|
"fr": "Art déco",
|
||||||
|
"nl": "Art Deco"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=modern",
|
||||||
|
"then": {
|
||||||
|
"en": "Modern architecture",
|
||||||
|
"fr": "Architecture moderne",
|
||||||
|
"nl": "Moderne architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=amsterdam_school",
|
||||||
|
"then": {
|
||||||
|
"en": "Amsterdam School",
|
||||||
|
"fr": "École d'Amsterdam",
|
||||||
|
"nl": "Amsterdamse School"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=international_style",
|
||||||
|
"then": {
|
||||||
|
"en": "International Style",
|
||||||
|
"fr": "Style international",
|
||||||
|
"nl": "Internationale Stijl"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=constructivism",
|
||||||
|
"then": {
|
||||||
|
"en": "Constructivism",
|
||||||
|
"fr": "Constructivisme",
|
||||||
|
"nl": "Constructivisme"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=stalinist_neoclassicism",
|
||||||
|
"then": {
|
||||||
|
"en": "Stalinist architecture",
|
||||||
|
"fr": "Architecture stalinienne",
|
||||||
|
"nl": "Stalinistische architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=brutalist",
|
||||||
|
"then": {
|
||||||
|
"en": "Brutalist architecture",
|
||||||
|
"fr": "Architecture brutaliste",
|
||||||
|
"nl": "Brutalistische architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=postmodern",
|
||||||
|
"then": {
|
||||||
|
"en": "Postmodern architecture",
|
||||||
|
"fr": "Architecture postmoderne",
|
||||||
|
"nl": "Postmoderne architectuur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "building:architecture=contemporary",
|
||||||
|
"then": {
|
||||||
|
"en": "Contemporary architecture",
|
||||||
|
"fr": "Architecture contemporaine",
|
||||||
|
"nl": "Hedendaagse architectuur"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"render": {
|
||||||
|
"en": "{building:architecture}"
|
||||||
|
},
|
||||||
|
"multiAnswer": true,
|
||||||
|
"freeform": {
|
||||||
|
"key": "building:architecture"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "construction_date",
|
||||||
|
"question": {
|
||||||
|
"en": "When was this built?"
|
||||||
|
},
|
||||||
|
"render": {
|
||||||
|
"en": "Built in <b>{construction_date}</b>"
|
||||||
|
},
|
||||||
|
"freeform": {
|
||||||
|
"key": "construction_date",
|
||||||
|
"type": "date"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"address.address"
|
||||||
|
],
|
||||||
|
"minzoom": 18,
|
||||||
|
"allowMove": {
|
||||||
|
"enableRelocation": false,
|
||||||
|
"enableImproveAccuracy": true
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText: Diego Naive; VideoPlasty; Pietervdvn
|
|
||||||
SPDX-License-Identifier: CC-BY-4.0
|
|
|
@ -83,7 +83,7 @@
|
||||||
"it": "Qual è il livello della via più facile qua, secondo il sistema di classificazione francese?",
|
"it": "Qual è il livello della via più facile qua, secondo il sistema di classificazione francese?",
|
||||||
"cs": "Jaký je stupeň nejjednodušší trasy podle francouzského klasifikačního systému?",
|
"cs": "Jaký je stupeň nejjednodušší trasy podle francouzského klasifikačního systému?",
|
||||||
"es": "¿Cuál es el grado de la vía más fácil aquí, según el sistema de clasificación francés?",
|
"es": "¿Cuál es el grado de la vía más fácil aquí, según el sistema de clasificación francés?",
|
||||||
"ca": "Quin és el grau de la ruta més fàcil aquí, segons el sistema de classificació francès?"
|
"ca": "Quin és el grau de la ruta més fàcil aquí segons el sistema de classificació francès?"
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"de": "Die leichteste Route hat hier die Schwierigkeit {climbing:grade:french:min} (französisch/belgisches System)",
|
"de": "Die leichteste Route hat hier die Schwierigkeit {climbing:grade:french:min} (französisch/belgisches System)",
|
||||||
|
@ -94,7 +94,7 @@
|
||||||
"it": "Il minimo livello di difficoltà è {climbing:grade:french:min} secondo il sistema francese/belga",
|
"it": "Il minimo livello di difficoltà è {climbing:grade:french:min} secondo il sistema francese/belga",
|
||||||
"cs": "Nejnižší stupeň je {climbing:grade:french:min} podle francouzského/belgického systému",
|
"cs": "Nejnižší stupeň je {climbing:grade:french:min} podle francouzského/belgického systému",
|
||||||
"es": "El grado más bajo es {climbing:grade:french:min} según el sistema francés/belga",
|
"es": "El grado más bajo es {climbing:grade:french:min} según el sistema francés/belga",
|
||||||
"ca": "La nota més baixa és {climbing:grade:french:min} segons el sistema francès/belga"
|
"ca": "El grau més baix és {climbing:grade:french:min} segons el sistema francès/belga"
|
||||||
},
|
},
|
||||||
"freeform": {
|
"freeform": {
|
||||||
"key": "climbing:grade:french:min"
|
"key": "climbing:grade:french:min"
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
"it": "Qual è il livello della via più difficile qua, secondo il sistema di classificazione francese?",
|
"it": "Qual è il livello della via più difficile qua, secondo il sistema di classificazione francese?",
|
||||||
"cs": "Jaká je zde trasa nejvyššího stupně podle francouzského klasifikačního systému?",
|
"cs": "Jaká je zde trasa nejvyššího stupně podle francouzského klasifikačního systému?",
|
||||||
"es": "¿Cuál es la vía de mayor grado aquí, según el sistema de clasificación francés?",
|
"es": "¿Cuál es la vía de mayor grado aquí, según el sistema de clasificación francés?",
|
||||||
"ca": "Quina és la ruta de grau més alt d'aquí, segons el sistema de classificació francès?"
|
"ca": "Quina és la ruta de major aquí, segons el sistema de classificació francès?"
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"de": "Die schwierigste Route hat hier die Schwierigkeitsstufe {climbing:grade:french:max} (französisch/belgisches System)",
|
"de": "Die schwierigste Route hat hier die Schwierigkeitsstufe {climbing:grade:french:max} (französisch/belgisches System)",
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
"it": "Il massimo livello di difficoltà è {climbing:grade:french:max} secondo il sistema francese/belga",
|
"it": "Il massimo livello di difficoltà è {climbing:grade:french:max} secondo il sistema francese/belga",
|
||||||
"cs": "Nejvyšší stupeň je {climbing:grade:french:max} podle francouzského/belgického systému",
|
"cs": "Nejvyšší stupeň je {climbing:grade:french:max} podle francouzského/belgického systému",
|
||||||
"es": "El grado más alto es {climbing:grade:french:max} según el sistema francés/belga",
|
"es": "El grado más alto es {climbing:grade:french:max} según el sistema francés/belga",
|
||||||
"ca": "La nota més alta és {climbing:grade:french:max} segons el sistema francès/belga"
|
"ca": "La grau més alt és {climbing:grade:french:max} segons el sistema francès/belga"
|
||||||
},
|
},
|
||||||
"freeform": {
|
"freeform": {
|
||||||
"key": "climbing:grade:french:max"
|
"key": "climbing:grade:french:max"
|
||||||
|
@ -228,7 +228,7 @@
|
||||||
"it": "È possibile arrampicarsi con la corda dall’alto qua?",
|
"it": "È possibile arrampicarsi con la corda dall’alto qua?",
|
||||||
"cs": "Je zde možné lezení po laně?",
|
"cs": "Je zde možné lezení po laně?",
|
||||||
"es": "¿Es posible la escalada con cuerda desde arriba aquí?",
|
"es": "¿Es posible la escalada con cuerda desde arriba aquí?",
|
||||||
"ca": "És possible l'escalada propícia aquí?"
|
"ca": "És possible l'escalada en politja aquí?"
|
||||||
},
|
},
|
||||||
"mappings": [
|
"mappings": [
|
||||||
{
|
{
|
||||||
|
@ -242,7 +242,7 @@
|
||||||
"it": "È possibile arrampicarsi con moulinette qua",
|
"it": "È possibile arrampicarsi con moulinette qua",
|
||||||
"cs": "Lezení po laně je zde možné",
|
"cs": "Lezení po laně je zde možné",
|
||||||
"es": "La escalada con cuerda desde arriba es posible aquí",
|
"es": "La escalada con cuerda desde arriba es posible aquí",
|
||||||
"ca": "L'escalada propícia és possible aquí"
|
"ca": "L'escalada en politja és possible aquí"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -256,7 +256,7 @@
|
||||||
"it": "Non è possibile arrampicarsi con moulinette qua",
|
"it": "Non è possibile arrampicarsi con moulinette qua",
|
||||||
"cs": "Lezení po laně zde není možné",
|
"cs": "Lezení po laně zde není možné",
|
||||||
"es": "La escalada con cuerda desde arriba no es posible aquí",
|
"es": "La escalada con cuerda desde arriba no es posible aquí",
|
||||||
"ca": "L'escalada propícia no és possible aquí"
|
"ca": "L'escalada en politja no és possible aquí"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -270,7 +270,7 @@
|
||||||
"it": "Sono presenti {climbing:toprope} vie con moulinette",
|
"it": "Sono presenti {climbing:toprope} vie con moulinette",
|
||||||
"cs": "Je zde {climbing:toprope} tras pro lezení na laně",
|
"cs": "Je zde {climbing:toprope} tras pro lezení na laně",
|
||||||
"es": "Hay {climbing:toprope} vías de escalada con cuerda desde arriba",
|
"es": "Hay {climbing:toprope} vías de escalada con cuerda desde arriba",
|
||||||
"ca": "Hi ha {climbing:toprope} rutes específiques"
|
"ca": "Hi ha {climbing:toprope} rutes d'escalada en politja"
|
||||||
},
|
},
|
||||||
"hideInAnswer": true
|
"hideInAnswer": true
|
||||||
}
|
}
|
||||||
|
@ -357,7 +357,7 @@
|
||||||
"it": "usando attrezzi propri, ad es. dadi",
|
"it": "usando attrezzi propri, ad es. dadi",
|
||||||
"cs": "Pomocí vlastního zařízení, např. klíny",
|
"cs": "Pomocí vlastního zařízení, např. klíny",
|
||||||
"es": "Usando tu propio equipo, p. ej., fisureros",
|
"es": "Usando tu propio equipo, p. ej., fisureros",
|
||||||
"ca": "Utilitzant el vostre propi engranatge, p. ex., chocks"
|
"ca": "Utilitzant el vostre propi equipament, p. ex., cales"
|
||||||
},
|
},
|
||||||
"mappings": [
|
"mappings": [
|
||||||
{
|
{
|
||||||
|
@ -396,7 +396,7 @@
|
||||||
"it": "Sono presenti {climbing:traditional} vie di arrampicata tradizionale",
|
"it": "Sono presenti {climbing:traditional} vie di arrampicata tradizionale",
|
||||||
"cs": "Existují {climbing:traditional} tradiční lezecké cesty",
|
"cs": "Existují {climbing:traditional} tradiční lezecké cesty",
|
||||||
"es": "Hay {climbing:traditional} vías de escalada tradicional",
|
"es": "Hay {climbing:traditional} vías de escalada tradicional",
|
||||||
"ca": "Hi ha {climbing:traditional} vies d'escalada tradicionals"
|
"ca": "Hi ha {climbing:traditional} rutes d'escalada tradicionals"
|
||||||
},
|
},
|
||||||
"hideInAnswer": true
|
"hideInAnswer": true
|
||||||
}
|
}
|
||||||
|
@ -410,7 +410,7 @@
|
||||||
"nl": "Wat is het maximum aantal bouten in routes ban {title()}?",
|
"nl": "Wat is het maximum aantal bouten in routes ban {title()}?",
|
||||||
"cs": "Kolik šroubů na trasu {title()} je potřeba?",
|
"cs": "Kolik šroubů na trasu {title()} je potřeba?",
|
||||||
"es": "¿Cuántos parabolts tienen como máximo las vías en {title()}?",
|
"es": "¿Cuántos parabolts tienen como máximo las vías en {title()}?",
|
||||||
"ca": "Quants parabolts tenen com a màxim les rutes a {title()} ?"
|
"ca": "Quants ancoratges d'anella tenen com a màxim les rutes a {title()} ?"
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"en": "The sport climbing routes here have at most {climbing:bolts:max} bolts. <div class='subtle'>This is without belay stations and indicates how much quickdraws a climber needs.</div>",
|
"en": "The sport climbing routes here have at most {climbing:bolts:max} bolts. <div class='subtle'>This is without belay stations and indicates how much quickdraws a climber needs.</div>",
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
"nl": "Klimrots of klimzone <b>{name}</b>",
|
"nl": "Klimrots of klimzone <b>{name}</b>",
|
||||||
"cs": "Lezecká cesta <b>{name}</b>",
|
"cs": "Lezecká cesta <b>{name}</b>",
|
||||||
"es": "Pared de escalada <b>{name}</b>",
|
"es": "Pared de escalada <b>{name}</b>",
|
||||||
"ca": "Trenca d'escalada <b>{name}</b>"
|
"ca": "Paret d'escalada <b>{name}</b>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -310,7 +310,7 @@
|
||||||
"nl": "Een klimzone - een enkele rots of klif met klimroutes",
|
"nl": "Een klimzone - een enkele rots of klif met klimroutes",
|
||||||
"cs": "Lezecká skála - jediná skála nebo útes s alespoň několika lezeckými cestami",
|
"cs": "Lezecká skála - jediná skála nebo útes s alespoň několika lezeckými cestami",
|
||||||
"es": "Una pared de escalada - una sola roca o acantilado con al menos algunas vías de escalada",
|
"es": "Una pared de escalada - una sola roca o acantilado con al menos algunas vías de escalada",
|
||||||
"ca": "Un cinglera d'escalada - una sola roca o penya-segat amb almenys unes quantes rutes d'escalada"
|
"ca": "Un cinglera d'escalada: una sola roca o penya-segat amb almenys unes quantes rutes d'escalada"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -162,7 +162,7 @@
|
||||||
"hu": "Mászószervezet",
|
"hu": "Mászószervezet",
|
||||||
"cs": "lezecká nezisková organizace",
|
"cs": "lezecká nezisková organizace",
|
||||||
"es": "una ONG de escalada",
|
"es": "una ONG de escalada",
|
||||||
"ca": "un ngo d'escalada"
|
"ca": "una ONG d'escalada"
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"de": "Eine Organisation, die sich mit dem Klettern beschäftigt",
|
"de": "Eine Organisation, die sich mit dem Klettern beschäftigt",
|
||||||
|
@ -174,7 +174,7 @@
|
||||||
"hu": "Mászással foglalkozó civil szervezet",
|
"hu": "Mászással foglalkozó civil szervezet",
|
||||||
"cs": "Nevládní organizace působící v oblasti lezení",
|
"cs": "Nevládní organizace působící v oblasti lezení",
|
||||||
"es": "Una ONG que trabaja en torno a la escalada",
|
"es": "Una ONG que trabaja en torno a la escalada",
|
||||||
"ca": "Una ONG que treballa per l'escalada"
|
"ca": "Una ONG que treballa amb l'escalada"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
"cs": "Lezecká tělocvična <strong>{name}</strong>",
|
"cs": "Lezecká tělocvična <strong>{name}</strong>",
|
||||||
"es": "Gimnasio de escalada <strong>{name}</strong>",
|
"es": "Gimnasio de escalada <strong>{name}</strong>",
|
||||||
"uk": "Скеледром <strong>{name}</strong>",
|
"uk": "Скеледром <strong>{name}</strong>",
|
||||||
"ca": "gimnàs d'escalada <strong>{name}</strong>"
|
"ca": "Gimnàs d'escalada <strong>{name}</strong>"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -163,7 +163,7 @@
|
||||||
"pl": "Czy można tutaj wypożyczyć buty do wspinaczki?",
|
"pl": "Czy można tutaj wypożyczyć buty do wspinaczki?",
|
||||||
"cs": "Lze si zde půjčit lezeckou obuv?",
|
"cs": "Lze si zde půjčit lezeckou obuv?",
|
||||||
"es": "¿Se pueden alquilar zapatillas de escalada aquí?",
|
"es": "¿Se pueden alquilar zapatillas de escalada aquí?",
|
||||||
"ca": "Es poden llogar sabates d'escalada aquí per utilitzar al gimnàs?"
|
"ca": "Aquí es poden llogar sabates d'escalada per utilitzar al gimnàs?"
|
||||||
},
|
},
|
||||||
"mappings": [
|
"mappings": [
|
||||||
{
|
{
|
||||||
|
@ -180,7 +180,7 @@
|
||||||
"de": "Kletterschuhe können hier kostenlos ausgeliehen werden",
|
"de": "Kletterschuhe können hier kostenlos ausgeliehen werden",
|
||||||
"cs": "Lezeckou obuv si můžete zdarma vypůjčit zde",
|
"cs": "Lezeckou obuv si můžete zdarma vypůjčit zde",
|
||||||
"es": "Se pueden pedir prestadas zapatillas de escalada gratis aquí",
|
"es": "Se pueden pedir prestadas zapatillas de escalada gratis aquí",
|
||||||
"ca": "Les sabates d'escalada es poden demanar en préstec gratuïtament aquí"
|
"ca": "Aquí es poden demanar en préstec gratuïtament sabates d'escalada"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_shoes:rental:charge="
|
"service:climbing_shoes:rental:charge="
|
||||||
|
@ -219,7 +219,7 @@
|
||||||
"pl": "Można tutaj wypożyczyć buty do wspinaczki",
|
"pl": "Można tutaj wypożyczyć buty do wspinaczki",
|
||||||
"cs": "Lezeckou obuv si můžete půjčit zde",
|
"cs": "Lezeckou obuv si můžete půjčit zde",
|
||||||
"es": "Se pueden alquilar zapatillas de escalada aquí",
|
"es": "Se pueden alquilar zapatillas de escalada aquí",
|
||||||
"ca": "Es poden llogar sabates d'escalada aquí"
|
"ca": "Aquí es poden llogar sabates d'escalada"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_shoes:rental:charge="
|
"service:climbing_shoes:rental:charge="
|
||||||
|
@ -235,7 +235,7 @@
|
||||||
"pl": "<b>Nie</b> można wypożyczyć tutaj butów do wspinaczki",
|
"pl": "<b>Nie</b> można wypożyczyć tutaj butów do wspinaczki",
|
||||||
"cs": "Lezeckou obuv si zde <b>nemůžete</b> zapůjčit",
|
"cs": "Lezeckou obuv si zde <b>nemůžete</b> zapůjčit",
|
||||||
"es": "No se pueden alquilar zapatillas de escalada aquí",
|
"es": "No se pueden alquilar zapatillas de escalada aquí",
|
||||||
"ca": "Les sabates d'escalada poden llogar-se aquí <b>no</b>"
|
"ca": "Aquí <b>no</b> poden llogar-se sabates d'escalada"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_shoes:rental:fee=",
|
"service:climbing_shoes:rental:fee=",
|
||||||
|
@ -253,7 +253,7 @@
|
||||||
"de": "Kann man hier einen Klettergurt für die Kletterwand ausleihen?",
|
"de": "Kann man hier einen Klettergurt für die Kletterwand ausleihen?",
|
||||||
"cs": "Lze si zde zapůjčit horolezecký postroj?",
|
"cs": "Lze si zde zapůjčit horolezecký postroj?",
|
||||||
"es": "¿Se puede alquilar un arnés de escalada aquí?",
|
"es": "¿Se puede alquilar un arnés de escalada aquí?",
|
||||||
"ca": "Es pot llogar un arnès d'escalada aquí per utilitzar al gimnàs?"
|
"ca": "Aquí es pot llogar un arnès d'escalada per utilitzar al gimnàs?"
|
||||||
},
|
},
|
||||||
"condition": {
|
"condition": {
|
||||||
"or": [
|
"or": [
|
||||||
|
@ -292,7 +292,7 @@
|
||||||
"de": "Ein Klettergurt kann hier kostenlos ausgeliehen werden",
|
"de": "Ein Klettergurt kann hier kostenlos ausgeliehen werden",
|
||||||
"cs": "Lezecký úvazek si můžete zdarma vypůjčit zde",
|
"cs": "Lezecký úvazek si můžete zdarma vypůjčit zde",
|
||||||
"es": "Se puede pedir prestado un arnés de escalada gratis aquí",
|
"es": "Se puede pedir prestado un arnés de escalada gratis aquí",
|
||||||
"ca": "Un arnès d'escalada es pot demanar prestat gratuïtament aquí"
|
"ca": "Aquí es pot demanar prestat gratuïtament un arnès d'escalada"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_harness:rental:charge="
|
"service:climbing_harness:rental:charge="
|
||||||
|
@ -325,7 +325,7 @@
|
||||||
"de": "Ein Klettergurt kann hier ausgeliehen werden",
|
"de": "Ein Klettergurt kann hier ausgeliehen werden",
|
||||||
"cs": "Lezecký postroj si můžete půjčit zde",
|
"cs": "Lezecký postroj si můžete půjčit zde",
|
||||||
"es": "Se puede alquilar un arnés de escalada aquí",
|
"es": "Se puede alquilar un arnés de escalada aquí",
|
||||||
"ca": "Es pot llogar un arnès d'escalada aquí"
|
"ca": "Aquí es pot llogar un arnès d'escalada"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_harness:rental:fee=",
|
"service:climbing_harness:rental:fee=",
|
||||||
|
@ -341,7 +341,7 @@
|
||||||
"de": "Ein Klettergurt kann hier <b>nicht</b> ausgeliehen werden",
|
"de": "Ein Klettergurt kann hier <b>nicht</b> ausgeliehen werden",
|
||||||
"cs": "Lezecký úvazek si zde <b>nemůžete</b> zapůjčit",
|
"cs": "Lezecký úvazek si zde <b>nemůžete</b> zapůjčit",
|
||||||
"es": "No se puede alquilar un arnés de escalada aquí",
|
"es": "No se puede alquilar un arnés de escalada aquí",
|
||||||
"ca": "Un arnés d'escalada pot <b>no</b> ser llogat aquí"
|
"ca": "Aquí <b>no</b> es pot llogar un arnés d'escalada"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_harness:rental:fee=",
|
"service:climbing_harness:rental:fee=",
|
||||||
|
@ -356,7 +356,7 @@
|
||||||
"en": "Are there auto belays for top roping here?",
|
"en": "Are there auto belays for top roping here?",
|
||||||
"nl": "Zijn hier auto belays voor toprope?",
|
"nl": "Zijn hier auto belays voor toprope?",
|
||||||
"de": "Gibt es hier Selbstsicherungen für das Toprope-Klettern?",
|
"de": "Gibt es hier Selbstsicherungen für das Toprope-Klettern?",
|
||||||
"ca": "Hi ha belays automàtics per a la corda superior aquí?"
|
"ca": "Hi ha relleus automàtics per a l'escalada en politja aquí?"
|
||||||
},
|
},
|
||||||
"questionHint": {
|
"questionHint": {
|
||||||
"en": "Excluding auto belays that are only for speed climbing",
|
"en": "Excluding auto belays that are only for speed climbing",
|
||||||
|
@ -381,7 +381,7 @@
|
||||||
"en": "There are no auto belays for top roping",
|
"en": "There are no auto belays for top roping",
|
||||||
"nl": "Er zijn geen autobelays voor toprope",
|
"nl": "Er zijn geen autobelays voor toprope",
|
||||||
"de": "Es gibt keine Selbstsicherungen für das Toprope-Klettern",
|
"de": "Es gibt keine Selbstsicherungen für das Toprope-Klettern",
|
||||||
"ca": "No hi ha relleus automàtics per a la corda superior"
|
"ca": "No hi ha asseguraments automàtics per a l'escalada en politja"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -390,7 +390,7 @@
|
||||||
"en": "There are a number of auto belays for top roping",
|
"en": "There are a number of auto belays for top roping",
|
||||||
"nl": "Er zijn enkele autobelays voor toprope",
|
"nl": "Er zijn enkele autobelays voor toprope",
|
||||||
"de": "Es gibt eine Reihe von Selbstsicherungen für das Toprope-Klettern",
|
"de": "Es gibt eine Reihe von Selbstsicherungen für das Toprope-Klettern",
|
||||||
"ca": "Hi ha una sèrie de relleus automàtics per a la corda superior"
|
"ca": "Hi ha una sèrie d'asseguraments automàtics per a l'escalada en politja"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -399,7 +399,7 @@
|
||||||
"en": "There is an auto belay for every top rope route but manual belaying is also possible",
|
"en": "There is an auto belay for every top rope route but manual belaying is also possible",
|
||||||
"nl": "Elke toproperoute kan op autobelay geklommen worden maar handmatig zekeren is ook mogelijk",
|
"nl": "Elke toproperoute kan op autobelay geklommen worden maar handmatig zekeren is ook mogelijk",
|
||||||
"de": "Für jede Toprope-Route gibt es eine Selbstsicherung , aber auch manuelles Sichern ist möglich",
|
"de": "Für jede Toprope-Route gibt es eine Selbstsicherung , aber auch manuelles Sichern ist möglich",
|
||||||
"ca": "Hi ha un relleu automàtic per a cada ruta de la corda superior, però també és possible el relleu manual"
|
"ca": "Hi ha un assegurament automàtic per a cada ruta d'escalada en politja, però també és possible el relleu manual"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -408,7 +408,7 @@
|
||||||
"en": "Top rope routes can only be climbed on auto belay",
|
"en": "Top rope routes can only be climbed on auto belay",
|
||||||
"nl": "Toproperoutes kunnen enkel op autobelay geklommen worden",
|
"nl": "Toproperoutes kunnen enkel op autobelay geklommen worden",
|
||||||
"de": "Klettersteige können nur mit Selbstsicherung geklettert werden",
|
"de": "Klettersteige können nur mit Selbstsicherung geklettert werden",
|
||||||
"ca": "Les rutes de corda més altes només es poden escalar en relleu automàtic"
|
"ca": "Les rutes d'escalada en politja només es poden escalar en relleu automàtic"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -416,7 +416,7 @@
|
||||||
"en": "There are {climbing:autobelay:toprope} auto belay devices for top roping",
|
"en": "There are {climbing:autobelay:toprope} auto belay devices for top roping",
|
||||||
"nl": "Er zijn {climbing:autobelay:toprope} autobelaytoestellen voor toprope",
|
"nl": "Er zijn {climbing:autobelay:toprope} autobelaytoestellen voor toprope",
|
||||||
"de": "Es gibt {climbing:autobelay:toprope} Selbstsicherungsgeräte für das Toprope-Klettern",
|
"de": "Es gibt {climbing:autobelay:toprope} Selbstsicherungsgeräte für das Toprope-Klettern",
|
||||||
"ca": "Hi ha {climbing:autobelay:toprope} dispositius de relleu automàtic per a cordes superiors"
|
"ca": "Hi ha {climbing:autobelay:toprope} dispositius de relleu automàtic per a l'escalada en politja"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -425,7 +425,7 @@
|
||||||
"en": "Are there auto belays for lead climbing here?",
|
"en": "Are there auto belays for lead climbing here?",
|
||||||
"nl": "Zijn hier autobelays voor voorklimmen?",
|
"nl": "Zijn hier autobelays voor voorklimmen?",
|
||||||
"de": "Gibt es hier Selbstsicherungen für das Vorstiegsklettern?",
|
"de": "Gibt es hier Selbstsicherungen für das Vorstiegsklettern?",
|
||||||
"ca": "Hi ha rèpliques automàtiques per a l'escalada de plom?"
|
"ca": "Hi ha asseguraments automàtics per al cap de corda?"
|
||||||
},
|
},
|
||||||
"condition": {
|
"condition": {
|
||||||
"and": [
|
"and": [
|
||||||
|
@ -444,7 +444,7 @@
|
||||||
"en": "There are no auto belays for lead climbing",
|
"en": "There are no auto belays for lead climbing",
|
||||||
"nl": "Er zijn geen autobelays voor voorklimmen",
|
"nl": "Er zijn geen autobelays voor voorklimmen",
|
||||||
"de": "Es gibt keine Selbstsicherungen für das Vorstiegsklettern",
|
"de": "Es gibt keine Selbstsicherungen für das Vorstiegsklettern",
|
||||||
"ca": "No hi ha relleus automàtics per a l'escalada de plom"
|
"ca": "No hi ha asseguraments automàtics per al cap de corda"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -453,7 +453,7 @@
|
||||||
"en": "There is a number of auto belays for lead climbing",
|
"en": "There is a number of auto belays for lead climbing",
|
||||||
"nl": "Er zijn enkele autobelays voor voorklimmen",
|
"nl": "Er zijn enkele autobelays voor voorklimmen",
|
||||||
"de": "Es gibt eine Reihe von Selbstsicherungen für das Vorstiegsklettern",
|
"de": "Es gibt eine Reihe von Selbstsicherungen für das Vorstiegsklettern",
|
||||||
"ca": "Hi ha una sèrie de relleus automàtics per a l'escalada de plom"
|
"ca": "Hi ha una sèrie d'asseguraments automàtics per a cada cap de corda"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -462,7 +462,7 @@
|
||||||
"en": "There is an auto belay for every lead climbing route",
|
"en": "There is an auto belay for every lead climbing route",
|
||||||
"nl": "Elke voorklimroute kan op autobelay geklommen worden",
|
"nl": "Elke voorklimroute kan op autobelay geklommen worden",
|
||||||
"de": "Für jede Vorstiegskletterroute gibt es eine Selbstsicherung",
|
"de": "Für jede Vorstiegskletterroute gibt es eine Selbstsicherung",
|
||||||
"ca": "Hi ha un relleu automàtic per a cada ruta d'escalada de plom"
|
"ca": "Hi ha un assegurament automàtic per a cada cap de corda"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -470,7 +470,7 @@
|
||||||
"en": "There are {climbing:autobelay:sport} auto belays for lead climbing",
|
"en": "There are {climbing:autobelay:sport} auto belays for lead climbing",
|
||||||
"nl": "Er zijn {climbing:autobelay:sport} autobelays voor voorklimmen",
|
"nl": "Er zijn {climbing:autobelay:sport} autobelays voor voorklimmen",
|
||||||
"de": "Es gibt {climbing:autobelay:sport} Selbstsicherungen für das Vorstiegsklettern",
|
"de": "Es gibt {climbing:autobelay:sport} Selbstsicherungen für das Vorstiegsklettern",
|
||||||
"ca": "Hi ha {climbing:autobelay:sport} relleus automàtics per a l'escalada de plom"
|
"ca": "Hi ha {climbing:autobelay:sport} asseguraments automàtics per al cap de corda"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -482,7 +482,7 @@
|
||||||
"de": "Kann man hier ein Sicherungsgerät für die Kletterwand ausleihen?",
|
"de": "Kann man hier ein Sicherungsgerät für die Kletterwand ausleihen?",
|
||||||
"cs": "Lze si zde půjčit jištění?",
|
"cs": "Lze si zde půjčit jištění?",
|
||||||
"es": "¿Se puede alquilar un dispositivo de aseguramiento aquí?",
|
"es": "¿Se puede alquilar un dispositivo de aseguramiento aquí?",
|
||||||
"ca": "Es pot llogar un aparell de belay aquí per utilitzar al gimnàs?"
|
"ca": "Aquí es pot llogar un aparell d'assegurament per utilitzar al gimnàs?"
|
||||||
},
|
},
|
||||||
"condition": {
|
"condition": {
|
||||||
"or": [
|
"or": [
|
||||||
|
@ -510,7 +510,7 @@
|
||||||
"de": "Jedes Seil hat ein Sicherungsgerät",
|
"de": "Jedes Seil hat ein Sicherungsgerät",
|
||||||
"cs": "U každého lana jsou k dispozici jistící zařízení",
|
"cs": "U každého lana jsou k dispozici jistící zařízení",
|
||||||
"es": "Se proporcionan dispositivos de aseguramiento en cada cuerda",
|
"es": "Se proporcionan dispositivos de aseguramiento en cada cuerda",
|
||||||
"ca": "Els dispositius Belay es proporcionen a cada corda"
|
"ca": "Els dispositius d'assegurament es proporcionen a cada corda"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_belay_device:rental=",
|
"service:climbing_belay_device:rental=",
|
||||||
|
@ -532,7 +532,7 @@
|
||||||
"de": "Ein Sicherungsgerät kann hier kostenlos ausgeliehen werden",
|
"de": "Ein Sicherungsgerät kann hier kostenlos ausgeliehen werden",
|
||||||
"cs": "Jištění si můžete zdarma vypůjčit zde",
|
"cs": "Jištění si můžete zdarma vypůjčit zde",
|
||||||
"es": "Se puede pedir prestado un dispositivo de aseguramiento gratis aquí",
|
"es": "Se puede pedir prestado un dispositivo de aseguramiento gratis aquí",
|
||||||
"ca": "Un dispositiu d'aspiració es pot demanar prestat gratuïtament aquí"
|
"ca": "Aquí es pot sol·licitar prestat un dispositiu d'assegurament gratuït"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_belay_device:provided_at_each_rope=",
|
"service:climbing_belay_device:provided_at_each_rope=",
|
||||||
|
@ -566,7 +566,7 @@
|
||||||
"de": "Ein Sicherungsgerät kann hier ausgeliehen werden",
|
"de": "Ein Sicherungsgerät kann hier ausgeliehen werden",
|
||||||
"cs": "Jištění si můžete zapůjčit zde",
|
"cs": "Jištění si můžete zapůjčit zde",
|
||||||
"es": "Se puede alquilar un dispositivo de aseguramiento aquí",
|
"es": "Se puede alquilar un dispositivo de aseguramiento aquí",
|
||||||
"ca": "Es pot llogar un dispositiu d'aspiració aquí"
|
"ca": "Aquí es pot llogar un dispositiu d'assegurament"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_belay_device:provided_at_each_rope=",
|
"service:climbing_belay_device:provided_at_each_rope=",
|
||||||
|
@ -583,7 +583,7 @@
|
||||||
"de": "Ein Sicherungsgerät kann hier <b>nicht</b> ausgeliehen werden",
|
"de": "Ein Sicherungsgerät kann hier <b>nicht</b> ausgeliehen werden",
|
||||||
"cs": "Zde si <b>nelze</b> půjčit jištění",
|
"cs": "Zde si <b>nelze</b> půjčit jištění",
|
||||||
"es": "No se puede alquilar un dispositivo de aseguramiento aquí",
|
"es": "No se puede alquilar un dispositivo de aseguramiento aquí",
|
||||||
"ca": "Un dispositiu de relleu pot llogar <b>no</b> aquí"
|
"ca": "Aquí <b>no</b> es pot llogar un dispositiu d'assegurament"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_belay_device:provided_at_each_rope=",
|
"service:climbing_belay_device:provided_at_each_rope=",
|
||||||
|
@ -602,7 +602,7 @@
|
||||||
"de": "Kann man hier ein Kletterseil für die Kletterwand ausleihen?",
|
"de": "Kann man hier ein Kletterseil für die Kletterwand ausleihen?",
|
||||||
"cs": "Lze si zde půjčit lezecké lano?",
|
"cs": "Lze si zde půjčit lezecké lano?",
|
||||||
"es": "¿Se puede alquilar una cuerda de escalada aquí?",
|
"es": "¿Se puede alquilar una cuerda de escalada aquí?",
|
||||||
"ca": "Es pot llogar una corda d'escalada aquí per utilitzar al gimnàs?"
|
"ca": "Aquí es pot llogar una corda d'escalada per a utilitzar al gimnàs?"
|
||||||
},
|
},
|
||||||
"condition": "climbing:sport!=no",
|
"condition": "climbing:sport!=no",
|
||||||
"mappings": [
|
"mappings": [
|
||||||
|
@ -620,7 +620,7 @@
|
||||||
"de": "Ein Kletterseil kann hier kostenlos ausgeliehen werden",
|
"de": "Ein Kletterseil kann hier kostenlos ausgeliehen werden",
|
||||||
"cs": "Lezecké lano si můžete zdarma vypůjčit zde",
|
"cs": "Lezecké lano si můžete zdarma vypůjčit zde",
|
||||||
"es": "Se puede pedir prestada una cuerda de escalada gratis aquí",
|
"es": "Se puede pedir prestada una cuerda de escalada gratis aquí",
|
||||||
"ca": "Una corda d'escalada es pot demanar prestat gratuïtament aquí"
|
"ca": "Aquí es pot demanar prestat gratuïtament una corda d'escalada"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_rope:rental:charge="
|
"service:climbing_rope:rental:charge="
|
||||||
|
@ -653,7 +653,7 @@
|
||||||
"de": "Ein Kletterseil kann hier ausgeliehen werden",
|
"de": "Ein Kletterseil kann hier ausgeliehen werden",
|
||||||
"cs": "Lezecké lano si můžete půjčit zde",
|
"cs": "Lezecké lano si můžete půjčit zde",
|
||||||
"es": "Se puede alquilar una cuerda de escalada aquí",
|
"es": "Se puede alquilar una cuerda de escalada aquí",
|
||||||
"ca": "Es pot llogar una corda d'escalada aquí"
|
"ca": "Aquí es pot llogar una corda d'escalada"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_rope:rental:fee=",
|
"service:climbing_rope:rental:fee=",
|
||||||
|
@ -669,7 +669,7 @@
|
||||||
"de": "Ein Kletterseil kann hier <b>nicht</b> ausgeliehen werden",
|
"de": "Ein Kletterseil kann hier <b>nicht</b> ausgeliehen werden",
|
||||||
"cs": "Lezecké lano si zde <b>nemůžete</b> zapůjčit",
|
"cs": "Lezecké lano si zde <b>nemůžete</b> zapůjčit",
|
||||||
"es": "No se puede alquilar una cuerda de escalada aquí",
|
"es": "No se puede alquilar una cuerda de escalada aquí",
|
||||||
"ca": "Es pot llogar una corda d'escalada <b>no</b> aquí"
|
"ca": "Aquí <b>no</b> es pot llogar una corda d'escalada"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"service:climbing_rope:rental:fee=",
|
"service:climbing_rope:rental:fee=",
|
||||||
|
@ -708,7 +708,7 @@
|
||||||
"fr": "Y a-t-il un mur d'escalade de vitesse ?",
|
"fr": "Y a-t-il un mur d'escalade de vitesse ?",
|
||||||
"cs": "Je zde rychlostní lezecká stěna?",
|
"cs": "Je zde rychlostní lezecká stěna?",
|
||||||
"es": "¿Hay una pared de escalada de velocidad?",
|
"es": "¿Hay una pared de escalada de velocidad?",
|
||||||
"ca": "Hi ha una paret d'escalada ràpida?"
|
"ca": "Hi ha una paret d'escalada de velocitat?"
|
||||||
},
|
},
|
||||||
"mappings": [
|
"mappings": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -206,7 +206,7 @@
|
||||||
"fr": "Cette voie fait {canonical(climbing:length)} de long",
|
"fr": "Cette voie fait {canonical(climbing:length)} de long",
|
||||||
"cs": "Tato trasa je {canonical(climbing:length)} dlouhá",
|
"cs": "Tato trasa je {canonical(climbing:length)} dlouhá",
|
||||||
"es": "Esta vía mide {canonical(climbing:length)} de largo",
|
"es": "Esta vía mide {canonical(climbing:length)} de largo",
|
||||||
"ca": "Aquesta ruta és {canonical(climbing:length)} llarga"
|
"ca": "Aquesta ruta és {canonical(climbing:length)} de llarg"
|
||||||
},
|
},
|
||||||
"freeform": {
|
"freeform": {
|
||||||
"key": "climbing:length",
|
"key": "climbing:length",
|
||||||
|
@ -234,7 +234,7 @@
|
||||||
"fr": "Selon le système franco-belge, la difficulté de cette voie est de {climbing:grade:french}",
|
"fr": "Selon le système franco-belge, la difficulté de cette voie est de {climbing:grade:french}",
|
||||||
"cs": "Stupeň je {climbing:grade:french} podle francouzského/belgického systému",
|
"cs": "Stupeň je {climbing:grade:french} podle francouzského/belgického systému",
|
||||||
"es": "El grado es {climbing:grade:french} según el sistema francés/belga",
|
"es": "El grado es {climbing:grade:french} según el sistema francés/belga",
|
||||||
"ca": "La qualificació és {climbing:grade:french} segons el sistema francès/belga"
|
"ca": "El grau és {climbing:grade:french} segons el sistema francès/belga"
|
||||||
},
|
},
|
||||||
"freeform": {
|
"freeform": {
|
||||||
"key": "climbing:grade:french"
|
"key": "climbing:grade:french"
|
||||||
|
@ -251,7 +251,7 @@
|
||||||
"nl": "Hoeveel bouten heeft deze route voordat je het relay bereikt?",
|
"nl": "Hoeveel bouten heeft deze route voordat je het relay bereikt?",
|
||||||
"cs": "Kolik šroubů má tato cesta před dosažením kotvy?",
|
"cs": "Kolik šroubů má tato cesta před dosažením kotvy?",
|
||||||
"es": "¿Cuántos parabolts tiene esta vía antes de llegar al anclaje?",
|
"es": "¿Cuántos parabolts tiene esta vía antes de llegar al anclaje?",
|
||||||
"ca": "Quants perns té aquesta ruta abans d'arribar a l'ancoratge?"
|
"ca": "Quants ancoratges d'anella té aquesta ruta abans d'arribar a l'ancoratge?"
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"en": "This route has {climbing:bolts} bolts. <div class='subtle'>This is without belay stations and indicates how much quickdraws a climber needs.</div>",
|
"en": "This route has {climbing:bolts} bolts. <div class='subtle'>This is without belay stations and indicates how much quickdraws a climber needs.</div>",
|
||||||
|
@ -260,7 +260,7 @@
|
||||||
"it": "Questo percorso ha {climbing:bolts} bulloni <div class='subtle'>Questa è senza collettori e indica di quanti bloccaggi rapidi ha bisogno un arrampicatore</div>",
|
"it": "Questo percorso ha {climbing:bolts} bulloni <div class='subtle'>Questa è senza collettori e indica di quanti bloccaggi rapidi ha bisogno un arrampicatore</div>",
|
||||||
"nl": "Deze route heeft {climbing:bolts} haken. <div class='subtle'>Hierbij wordt de standplaats niet meegeteld. Een klimmer heeft normaal gezien dus minstens {climbing:bolts} setjes nodig.</div>",
|
"nl": "Deze route heeft {climbing:bolts} haken. <div class='subtle'>Hierbij wordt de standplaats niet meegeteld. Een klimmer heeft normaal gezien dus minstens {climbing:bolts} setjes nodig.</div>",
|
||||||
"es": "Esta vía tiene {climbing:bolts} parabolts <div class='subtle'>Esto es sin reuniones e indica cuántos cintas exprés necesita un escalador</div>",
|
"es": "Esta vía tiene {climbing:bolts} parabolts <div class='subtle'>Esto es sin reuniones e indica cuántos cintas exprés necesita un escalador</div>",
|
||||||
"ca": "Aquesta ruta té {climbing:bolts} perns. <div class='subtle'>Això no té estacions d'aspiració i indica quant de ràpid necessita un escalador.</div>"
|
"ca": "Aquesta ruta té {climbing:bolts} ancoratges d'anella. <div class='subtle'>Això és sense estacions d'assegurament i indica quantes cintes necessita un escalador.</div>"
|
||||||
},
|
},
|
||||||
"freeform": {
|
"freeform": {
|
||||||
"key": "climbing:bolts",
|
"key": "climbing:bolts",
|
||||||
|
@ -281,7 +281,7 @@
|
||||||
"nl": "Deze route heeft geen bouten",
|
"nl": "Deze route heeft geen bouten",
|
||||||
"cs": "Tato trasa není vyšroubovaná",
|
"cs": "Tato trasa není vyšroubovaná",
|
||||||
"es": "Esta vía no tiene parabolts",
|
"es": "Esta vía no tiene parabolts",
|
||||||
"ca": "Aquesta ruta no està vorejada"
|
"ca": "Aquesta ruta no té ancoratges d'anella"
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"climbing:bolts="
|
"climbing:bolts="
|
||||||
|
|
|
@ -135,7 +135,7 @@
|
||||||
"de": "eine Wanduhr, die direkt an der Wand angebracht ist",
|
"de": "eine Wanduhr, die direkt an der Wand angebracht ist",
|
||||||
"es": "un reloj, montado directamente en una pared",
|
"es": "un reloj, montado directamente en una pared",
|
||||||
"cs": "nástěnné hodiny, namontované přímo na stěnu",
|
"cs": "nástěnné hodiny, namontované přímo na stěnu",
|
||||||
"ca": "un rellotge muntat a la paret, muntat directament en una paret"
|
"ca": "un rellotge muntat directament en una paret"
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"en": "A publicly visible clock mounted directly on a wall",
|
"en": "A publicly visible clock mounted directly on a wall",
|
||||||
|
|
|
@ -235,7 +235,7 @@
|
||||||
"nl": "Wat voor markering heeft deze oversteekplaats?",
|
"nl": "Wat voor markering heeft deze oversteekplaats?",
|
||||||
"de": "Welche Art von Markierungen gibt es an diesem Übergang?",
|
"de": "Welche Art von Markierungen gibt es an diesem Übergang?",
|
||||||
"es": "¿Qué tipo de señalización tiene este cruce?",
|
"es": "¿Qué tipo de señalización tiene este cruce?",
|
||||||
"ca": "Quin tipus de marques té aquest encreuament?"
|
"ca": "Quin tipus de senyalització té aquest encreuament?"
|
||||||
},
|
},
|
||||||
"mappings": [
|
"mappings": [
|
||||||
{
|
{
|
||||||
|
@ -261,7 +261,7 @@
|
||||||
"de": "Dieser Übergang ist mit Zebrastreifen markiert",
|
"de": "Dieser Übergang ist mit Zebrastreifen markiert",
|
||||||
"es": "Este paso de cebra está señalizado",
|
"es": "Este paso de cebra está señalizado",
|
||||||
"cs": "Tento přechod má označení zebra",
|
"cs": "Tento přechod má označení zebra",
|
||||||
"ca": "Aquest encreuament té marques zebra"
|
"ca": "Aquest pas de vianants té marques de zebra"
|
||||||
},
|
},
|
||||||
"icon": {
|
"icon": {
|
||||||
"class": "large",
|
"class": "large",
|
||||||
|
@ -318,7 +318,7 @@
|
||||||
"de": "Dieser Übergang hat gestrichelte Linien auf beiden Seiten des Übergangs",
|
"de": "Dieser Übergang hat gestrichelte Linien auf beiden Seiten des Übergangs",
|
||||||
"es": "Este cruce tiene líneas discontinuas a ambos lados del cruce",
|
"es": "Este cruce tiene líneas discontinuas a ambos lados del cruce",
|
||||||
"cs": "Tento přechod má po obou stranách přerušované čáry",
|
"cs": "Tento přechod má po obou stranách přerušované čáry",
|
||||||
"ca": "Aquest encreuament ha traçat línies a banda i banda de la travessia"
|
"ca": "Aquest encreuament té traçades línies a banda i banda de la travessia"
|
||||||
},
|
},
|
||||||
"icon": {
|
"icon": {
|
||||||
"class": "large",
|
"class": "large",
|
||||||
|
@ -347,7 +347,7 @@
|
||||||
"nl": "Deze oversteekplaats is gemarkeerd door een anders gekleurd wegdek",
|
"nl": "Deze oversteekplaats is gemarkeerd door een anders gekleurd wegdek",
|
||||||
"de": "Dieser Übergang wird durch eine andersfarbige Oberfläche gekennzeichnet",
|
"de": "Dieser Übergang wird durch eine andersfarbige Oberfläche gekennzeichnet",
|
||||||
"es": "Este cruce se marca utilizando una superficie de color diferente",
|
"es": "Este cruce se marca utilizando una superficie de color diferente",
|
||||||
"ca": "Aquest encreuament està marcat per l'ús d'una superfície de color diferent"
|
"ca": "Aquest encreuament està marcat usant una superfície de color diferent"
|
||||||
},
|
},
|
||||||
"icon": {
|
"icon": {
|
||||||
"class": "large",
|
"class": "large",
|
||||||
|
@ -361,7 +361,7 @@
|
||||||
"nl": "Deze oversteekplaats heeft lijnen aan beide kanten van de oversteekplaats, met schuine strepen die ze verbinden",
|
"nl": "Deze oversteekplaats heeft lijnen aan beide kanten van de oversteekplaats, met schuine strepen die ze verbinden",
|
||||||
"de": "Diese Kreuzung hat Linien auf beiden Seiten der Kreuzung, zusammen mit abgewinkelten Stangen, die sie verbinden",
|
"de": "Diese Kreuzung hat Linien auf beiden Seiten der Kreuzung, zusammen mit abgewinkelten Stangen, die sie verbinden",
|
||||||
"es": "Este cruce tiene líneas a ambos lados, junto con barras en ángulo que las conectan",
|
"es": "Este cruce tiene líneas a ambos lados, junto con barras en ángulo que las conectan",
|
||||||
"ca": "Aquest encreuament té línies a banda i banda de l'encreuament, juntament amb barres angletes que les connecten"
|
"ca": "Aquest encreuament té línies a banda i banda de l'encreuament, juntament amb barres en diagonal que les connecten"
|
||||||
},
|
},
|
||||||
"icon": {
|
"icon": {
|
||||||
"class": "large",
|
"class": "large",
|
||||||
|
@ -386,7 +386,7 @@
|
||||||
"de": "Dieser Übergang hat Zebrastreifen in wechselnden Farben",
|
"de": "Dieser Übergang hat Zebrastreifen in wechselnden Farben",
|
||||||
"es": "Este paso tiene marcas de cebra en colores alternos",
|
"es": "Este paso tiene marcas de cebra en colores alternos",
|
||||||
"cs": "Tento přechod má označení zebry ve střídavých barvách",
|
"cs": "Tento přechod má označení zebry ve střídavých barvách",
|
||||||
"ca": "Aquest encreuament té marques zebra en colors alterns"
|
"ca": "Aquest pas de vianants té marques de zebra en colors alterns"
|
||||||
},
|
},
|
||||||
"icon": {
|
"icon": {
|
||||||
"class": "large",
|
"class": "large",
|
||||||
|
@ -401,7 +401,7 @@
|
||||||
"de": "Dieser Übergang hat doppelte Zebrastreifen",
|
"de": "Dieser Übergang hat doppelte Zebrastreifen",
|
||||||
"es": "Este paso de cebra tiene doble señalización",
|
"es": "Este paso de cebra tiene doble señalización",
|
||||||
"cs": "Tento přechod má dvojité značení zebry",
|
"cs": "Tento přechod má dvojité značení zebry",
|
||||||
"ca": "Aquest encreuament té marcacions de doble zebra"
|
"ca": "Aquest pas de vianants té marques de zebra doble"
|
||||||
},
|
},
|
||||||
"icon": {
|
"icon": {
|
||||||
"class": "large",
|
"class": "large",
|
||||||
|
@ -438,7 +438,7 @@
|
||||||
"de": "Dieser Übergang hat doppelte Linien auf beiden Seiten des Übergangs",
|
"de": "Dieser Übergang hat doppelte Linien auf beiden Seiten des Übergangs",
|
||||||
"es": "Este cruce tiene líneas dobles a cada lado del cruce",
|
"es": "Este cruce tiene líneas dobles a cada lado del cruce",
|
||||||
"cs": "Tento přechod má dvojité čáry na obou stranách přechodu",
|
"cs": "Tento přechod má dvojité čáry na obou stranách přechodu",
|
||||||
"ca": "Aquest encreuament té línies dobles a banda i banda de la travessia"
|
"ca": "Aquest encreuament té línies dobles a banda i banda del creuament"
|
||||||
},
|
},
|
||||||
"icon": {
|
"icon": {
|
||||||
"class": "large",
|
"class": "large",
|
||||||
|
@ -451,7 +451,7 @@
|
||||||
"nl": "Deze oversteekplaats heeft {crossing:markings} markeringen",
|
"nl": "Deze oversteekplaats heeft {crossing:markings} markeringen",
|
||||||
"de": "Dieser Übergang hat {crossing:markings} Markierungen",
|
"de": "Dieser Übergang hat {crossing:markings} Markierungen",
|
||||||
"es": "Este cruce tiene marcas {crossing:markings}",
|
"es": "Este cruce tiene marcas {crossing:markings}",
|
||||||
"ca": "Aquest encreuament té {crossing:markings} marques"
|
"ca": "Aquest encreuament té marques {crossing:markings}"
|
||||||
},
|
},
|
||||||
"freeform": {
|
"freeform": {
|
||||||
"key": "crossing:markings",
|
"key": "crossing:markings",
|
||||||
|
|
|
@ -799,7 +799,7 @@
|
||||||
"es": "Este carril bici está hecho de tierra",
|
"es": "Este carril bici está hecho de tierra",
|
||||||
"fr": "Cette piste cyclable est faite en sol brut",
|
"fr": "Cette piste cyclable est faite en sol brut",
|
||||||
"cs": "Tato cyklostezka je vyrobena ze surové zeminy",
|
"cs": "Tato cyklostezka je vyrobena ze surové zeminy",
|
||||||
"ca": "Aquest carril bici està fet de terra crua"
|
"ca": "Aquest carril bici està fet de terra"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -842,7 +842,7 @@
|
||||||
"de": "Hier gibt es (wahrscheinlich) keine Steigung",
|
"de": "Hier gibt es (wahrscheinlich) keine Steigung",
|
||||||
"nl": "De straat heeft hier (waarschijnlijk) geen helling",
|
"nl": "De straat heeft hier (waarschijnlijk) geen helling",
|
||||||
"es": "Probablemente no hay inclinación aquí",
|
"es": "Probablemente no hay inclinación aquí",
|
||||||
"ca": "Hi ha (probablement) cap inclinació aquí"
|
"ca": "Probablement aquí no hi ha inclinació"
|
||||||
},
|
},
|
||||||
"hideInAnswer": true
|
"hideInAnswer": true
|
||||||
},
|
},
|
||||||
|
@ -976,7 +976,7 @@
|
||||||
"fr": "Impasse / Aucun véhicule roulant",
|
"fr": "Impasse / Aucun véhicule roulant",
|
||||||
"cs": "Neprůjezdné / Zákaz vjezdu vozidel",
|
"cs": "Neprůjezdné / Zákaz vjezdu vozidel",
|
||||||
"es": "Intransitable / Ningún vehículo con ruedas",
|
"es": "Intransitable / Ningún vehículo con ruedas",
|
||||||
"ca": "Impassable / Sense vehicle rodat"
|
"ca": "Impassable / Cap vehicle amb rodes"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -1006,7 +1006,7 @@
|
||||||
"fr": "Cette piste cycable est non durcie",
|
"fr": "Cette piste cycable est non durcie",
|
||||||
"cs": "Tato cyklostezka není zpevněná",
|
"cs": "Tato cyklostezka není zpevněná",
|
||||||
"es": "Este carril bici no está pavimentado",
|
"es": "Este carril bici no está pavimentado",
|
||||||
"ca": "Aquest carril bici no està endurit"
|
"ca": "Aquest carril bici no està paviment"
|
||||||
},
|
},
|
||||||
"hideInAnswer": true
|
"hideInAnswer": true
|
||||||
},
|
},
|
||||||
|
@ -1047,7 +1047,7 @@
|
||||||
"fr": "Cette piste cyclable est faite en pavés lisses",
|
"fr": "Cette piste cyclable est faite en pavés lisses",
|
||||||
"cs": "Tato cyklostezka je tvořena hladkými dlažebními kostkami",
|
"cs": "Tato cyklostezka je tvořena hladkými dlažebními kostkami",
|
||||||
"es": "Este carril bici está hecho de adoquines lisos",
|
"es": "Este carril bici está hecho de adoquines lisos",
|
||||||
"ca": "Aquest carril bici està fet de llises pedres de paviment"
|
"ca": "Aquest carril bici està fet adoquins llisos"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1073,7 +1073,7 @@
|
||||||
"fr": "Cette piste cyclable est faite de pavés (taillé ou non)",
|
"fr": "Cette piste cyclable est faite de pavés (taillé ou non)",
|
||||||
"cs": "Tato cyklostezka je vyrobena z dlážděného kamene (netesaného nebo vydlabaného)",
|
"cs": "Tato cyklostezka je vyrobena z dlážděného kamene (netesaného nebo vydlabaného)",
|
||||||
"es": "Este carril bici está hecho de adoquines (sin labrar o de sillería)",
|
"es": "Este carril bici está hecho de adoquines (sin labrar o de sillería)",
|
||||||
"ca": "Aquest carril bici està fet de llamborda (sense mànigues o sett)"
|
"ca": "Aquest carril bici està fet de llambordes (sense tallar o carreu)"
|
||||||
},
|
},
|
||||||
"hideInAnswer": true
|
"hideInAnswer": true
|
||||||
},
|
},
|
||||||
|
@ -1087,7 +1087,7 @@
|
||||||
"fr": "Cette piste cyclable est en pavés bruts et naturels",
|
"fr": "Cette piste cyclable est en pavés bruts et naturels",
|
||||||
"cs": "Tato cyklostezka je vyrobena ze surového přírodního dlažebního kamene",
|
"cs": "Tato cyklostezka je vyrobena ze surového přírodního dlažebního kamene",
|
||||||
"es": "Este carril bici está hecho de adoquines naturales sin labrar",
|
"es": "Este carril bici está hecho de adoquines naturales sin labrar",
|
||||||
"ca": "Aquest carril bici és de pedra empedrada natural i crua"
|
"ca": "Aquest carril bici és de pedra empedrada natural sense tallar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1164,7 +1164,7 @@
|
||||||
"fr": "Cette piste cyclable est faite en sol brut",
|
"fr": "Cette piste cyclable est faite en sol brut",
|
||||||
"cs": "Tato cyklostezka je vyrobena ze surové půdy",
|
"cs": "Tato cyklostezka je vyrobena ze surové půdy",
|
||||||
"es": "Este carril bici está hecho de tierra",
|
"es": "Este carril bici está hecho de tierra",
|
||||||
"ca": "Aquest carril bici està fet de terra crua"
|
"ca": "Aquest carril bici està fet de terra"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -1258,7 +1258,7 @@
|
||||||
"fr": "Utilisable pour les véhicules à dégagement élevé : véhicule tout-terrain léger",
|
"fr": "Utilisable pour les véhicules à dégagement élevé : véhicule tout-terrain léger",
|
||||||
"cs": "Použitelné pro vozidla s vysokou světlou výškou: lehké terénní vozidlo",
|
"cs": "Použitelné pro vozidla s vysokou světlou výškou: lehké terénní vozidlo",
|
||||||
"es": "Utilizable para vehículos con altura libre al suelo alta: vehículo todoterreno ligero",
|
"es": "Utilizable para vehículos con altura libre al suelo alta: vehículo todoterreno ligero",
|
||||||
"ca": "Utilitzable per a vehicles amb alta habilitació: vehicle off-road lleuger"
|
"ca": "Utilitzable per a vehicles amb gran espai lliure al terra: vehicle tot terreny lleuger"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1271,7 +1271,7 @@
|
||||||
"fr": "Utilisable pour les véhicules tout-terrain : véhicule tout-terrain lourd",
|
"fr": "Utilisable pour les véhicules tout-terrain : véhicule tout-terrain lourd",
|
||||||
"cs": "Použitelné pro terénní vozidla: těžké terénní vozidlo",
|
"cs": "Použitelné pro terénní vozidla: těžké terénní vozidlo",
|
||||||
"es": "Utilizable para vehículos todoterreno: vehículo todoterreno pesado",
|
"es": "Utilizable para vehículos todoterreno: vehículo todoterreno pesado",
|
||||||
"ca": "Utilitzable per a vehicles off-road: vehicle off-road de gran consum"
|
"ca": "Utilitzable per a vehicles tot terreny: vehicle tot terreny pesat"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1284,7 +1284,7 @@
|
||||||
"fr": "Utilisable pour les véhicules hors route spécialisés : tracteur, véhicule 4x4",
|
"fr": "Utilisable pour les véhicules hors route spécialisés : tracteur, véhicule 4x4",
|
||||||
"cs": "Použitelný pro specializované terénní vozy: traktor, čtyřkolka",
|
"cs": "Použitelný pro specializované terénní vozy: traktor, čtyřkolka",
|
||||||
"es": "Utilizable para vehículos todoterreno especializados: tractor, ATV",
|
"es": "Utilizable para vehículos todoterreno especializados: tractor, ATV",
|
||||||
"ca": "Utilitzable per a vehicles especialitzats off-road: tractor, ATV"
|
"ca": "Utilitzable per a vehicles tot terreny especialitzats: tractor, quad"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1296,7 +1296,7 @@
|
||||||
"fr": "Impasse / Aucun véhicule roulant",
|
"fr": "Impasse / Aucun véhicule roulant",
|
||||||
"cs": "Neprůjezdné / Pro vozidla",
|
"cs": "Neprůjezdné / Pro vozidla",
|
||||||
"es": "Intransitable / Ningún vehículo con ruedas",
|
"es": "Intransitable / Ningún vehículo con ruedas",
|
||||||
"ca": "Impassable / Sense vehicle rodat"
|
"ca": "Impassable / Cap vehicle amb rodes"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -1675,7 +1675,7 @@
|
||||||
"fr": "Le panneau de signalisation D7 (<img src='./assets/layers/cycleways_and_roads/traffic_sign/be/Belgian_road_sign_D07.svg' style='width: 1.5em'>) a-t-il un panneau supplémentaire ?",
|
"fr": "Le panneau de signalisation D7 (<img src='./assets/layers/cycleways_and_roads/traffic_sign/be/Belgian_road_sign_D07.svg' style='width: 1.5em'>) a-t-il un panneau supplémentaire ?",
|
||||||
"cs": "Má dopravní značka D7 (<img src='./assets/layers/cycleways_and_roads/traffic_sign/be/Belgian_road_sign_D07.svg' style='width: 1.5em'>) doplňkovou značku?",
|
"cs": "Má dopravní značka D7 (<img src='./assets/layers/cycleways_and_roads/traffic_sign/be/Belgian_road_sign_D07.svg' style='width: 1.5em'>) doplňkovou značku?",
|
||||||
"es": "¿Tiene la señal de tráfico D7 (<img src='./assets/layers/cycleways_and_roads/traffic_sign/be/Belgian_road_sign_D07.svg' style='width: 1.5em'>) una señal complementaria?",
|
"es": "¿Tiene la señal de tráfico D7 (<img src='./assets/layers/cycleways_and_roads/traffic_sign/be/Belgian_road_sign_D07.svg' style='width: 1.5em'>) una señal complementaria?",
|
||||||
"ca": "El signe de trànsit D7 (<img src='./assets/layers/cyclewaysandroads/trafficsign/be/BelgianroadsignD07.svg' style='width: 1.5em'>) té un signe suplementari?"
|
"ca": "El senyal de trànsit D7 (<img src='./assets/layers/cyclewaysandroads/trafficsign/be/BelgianroadsignD07.svg' style='width: 1.5em'>) té un senyal suplementari?"
|
||||||
},
|
},
|
||||||
"condition": {
|
"condition": {
|
||||||
"or": [
|
"or": [
|
||||||
|
@ -1713,7 +1713,7 @@
|
||||||
"fr": "Les VAE (Vélo à Assistance Electrique) rapides doivent utiliser la piste cyclable",
|
"fr": "Les VAE (Vélo à Assistance Electrique) rapides doivent utiliser la piste cyclable",
|
||||||
"cs": "Rychlá Elektrokola musí používat cyklostezku",
|
"cs": "Rychlá Elektrokola musí používat cyklostezku",
|
||||||
"es": "Las bicicletas de pedaleo asistido deben usar el carril bici",
|
"es": "Las bicicletas de pedaleo asistido deben usar el carril bici",
|
||||||
"ca": "Els acceleradors han d'utilitzar la via"
|
"ca": "Les bicicletes de pedaleig assistit han d'utilitzar el carril bici"
|
||||||
},
|
},
|
||||||
"hideInAnswer": "_country!=be",
|
"hideInAnswer": "_country!=be",
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
|
@ -1733,7 +1733,7 @@
|
||||||
"fr": "Les cyclomoteurs et les VAE doivent utiliser la piste cyclable",
|
"fr": "Les cyclomoteurs et les VAE doivent utiliser la piste cyclable",
|
||||||
"cs": "Mopedy a rychlá elektrokola musí používat cyklostezku",
|
"cs": "Mopedy a rychlá elektrokola musí používat cyklostezku",
|
||||||
"es": "Los ciclomotores y las bicicletas de pedaleo asistido deben usar el carril bici",
|
"es": "Los ciclomotores y las bicicletas de pedaleo asistido deben usar el carril bici",
|
||||||
"ca": "Els ciclomotors i els acceleradors han d'utilitzar la via"
|
"ca": "Els ciclomotors i bicicletes de pedaleig assistit han d'utilitzar la via"
|
||||||
},
|
},
|
||||||
"hideInAnswer": "_country!=be",
|
"hideInAnswer": "_country!=be",
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
|
@ -1774,7 +1774,7 @@
|
||||||
"fr": "Les VAE ne sont pas autorisés",
|
"fr": "Les VAE ne sont pas autorisés",
|
||||||
"cs": "Rychlá elektrokola nejsou povoleny",
|
"cs": "Rychlá elektrokola nejsou povoleny",
|
||||||
"es": "Las bicicletas de pedaleo asistido no están permitidas",
|
"es": "Las bicicletas de pedaleo asistido no están permitidas",
|
||||||
"ca": "No es permet l'ús de peel·les ràpides"
|
"ca": "Les bicicletes de pedaleig assistit no estan permeses"
|
||||||
},
|
},
|
||||||
"hideInAnswer": "_country!=be",
|
"hideInAnswer": "_country!=be",
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
|
@ -1794,7 +1794,7 @@
|
||||||
"fr": "Les cyclomoteurs et les VAE ne sont pas autorisés",
|
"fr": "Les cyclomoteurs et les VAE ne sont pas autorisés",
|
||||||
"cs": "Mopedy a rychlá elektrokola nejsou povoleny",
|
"cs": "Mopedy a rychlá elektrokola nejsou povoleny",
|
||||||
"es": "Los ciclomotores y las bicicletas de pedaleo asistido no están permitidos",
|
"es": "Los ciclomotores y las bicicletas de pedaleo asistido no están permitidos",
|
||||||
"ca": "No es permet l'ús de ciclomotors i acceleradors"
|
"ca": "No es permet l'ús de ciclomotors i bicicletes de pedaleig assistit"
|
||||||
},
|
},
|
||||||
"hideInAnswer": "_country!=be",
|
"hideInAnswer": "_country!=be",
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
|
@ -1827,7 +1827,7 @@
|
||||||
"de": "Der Sicherheitsabstand zu diesem Radweg beträgt {cycleway:buffer} m",
|
"de": "Der Sicherheitsabstand zu diesem Radweg beträgt {cycleway:buffer} m",
|
||||||
"cs": "Nárazník vedle této cyklostezky je {cycleway:buffer} m",
|
"cs": "Nárazník vedle této cyklostezky je {cycleway:buffer} m",
|
||||||
"es": "El espacio junto a este carril bici es de {cycleway:buffer} m",
|
"es": "El espacio junto a este carril bici es de {cycleway:buffer} m",
|
||||||
"ca": "La memòria intermèdia a més d'aquesta pista és {cycleway:buffer} m"
|
"ca": "L'espai junt a aquest carril bici és de {cycleway:buffer} m"
|
||||||
},
|
},
|
||||||
"question": {
|
"question": {
|
||||||
"en": "How wide is the gap between the cycleway and the road?",
|
"en": "How wide is the gap between the cycleway and the road?",
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"en": "Cyclist Waiting Aids",
|
"en": "Cyclist Waiting Aids",
|
||||||
"de": "Radfahrer-Wartehilfen",
|
"de": "Radfahrer-Wartehilfen",
|
||||||
"es": "Ayudas a la espera de ciclistas",
|
"es": "Ayudas a la espera de ciclistas",
|
||||||
"ca": "Ciclista que espera ajuda"
|
"ca": "Ajudes a l'espera dels ciclistes"
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"en": "Various pieces of infrastructure that aid cyclists while they wait at a traffic light.",
|
"en": "Various pieces of infrastructure that aid cyclists while they wait at a traffic light.",
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
"de": "Radfahrer-Wartehilfe",
|
"de": "Radfahrer-Wartehilfe",
|
||||||
"es": "Ayuda para ciclistas en espera",
|
"es": "Ayuda para ciclistas en espera",
|
||||||
"nl": "Steuntje voor wachtende fietsers",
|
"nl": "Steuntje voor wachtende fietsers",
|
||||||
"ca": "Ciclista esperant ajuda"
|
"ca": "Ajuda per a ciclistes en espera"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pointRendering": [
|
"pointRendering": [
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
"en": "a cyclist waiting aid",
|
"en": "a cyclist waiting aid",
|
||||||
"de": "eine Radfahrer-Wartehilfe",
|
"de": "eine Radfahrer-Wartehilfe",
|
||||||
"es": "un ciclista espera ayuda",
|
"es": "un ciclista espera ayuda",
|
||||||
"ca": "una ajuda d'espera ciclista"
|
"ca": "una ajuda a l'espera del ciclista"
|
||||||
},
|
},
|
||||||
"tags": [
|
"tags": [
|
||||||
"highway=cyclist_waiting_aid"
|
"highway=cyclist_waiting_aid"
|
||||||
|
@ -77,7 +77,7 @@
|
||||||
"en": "What kind of components does this waiting aid have?",
|
"en": "What kind of components does this waiting aid have?",
|
||||||
"de": "Aus welchen Bestandteilen besteht diese Wartehilfe?",
|
"de": "Aus welchen Bestandteilen besteht diese Wartehilfe?",
|
||||||
"es": "¿Qué tipo de componentes tiene esta ayuda a la espera?",
|
"es": "¿Qué tipo de componentes tiene esta ayuda a la espera?",
|
||||||
"ca": "Quin tipus de components té aquesta ajuda d'espera?"
|
"ca": "Quin tipus de components té aquesta ajuda a l'espera?"
|
||||||
},
|
},
|
||||||
"id": "type",
|
"id": "type",
|
||||||
"multiAnswer": true,
|
"multiAnswer": true,
|
||||||
|
@ -98,7 +98,7 @@
|
||||||
"en": "There is a rail or a handle to hold on to here",
|
"en": "There is a rail or a handle to hold on to here",
|
||||||
"de": "Hier gibt es eine Schiene oder einen Griff zum Festhalten",
|
"de": "Hier gibt es eine Schiene oder einen Griff zum Festhalten",
|
||||||
"es": "Hay una barandilla o un asa para agarrarse aquí",
|
"es": "Hay una barandilla o un asa para agarrarse aquí",
|
||||||
"ca": "Hi ha un tren o una nansa per aferrar-se aquí"
|
"ca": "Hi ha una barana o una nansa per aferrar-se aquí"
|
||||||
},
|
},
|
||||||
"ifnot": "handrest="
|
"ifnot": "handrest="
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
"en": "This waiting aid is located on the left side",
|
"en": "This waiting aid is located on the left side",
|
||||||
"de": "Diese Wartehilfe befindet sich auf der linken Seite",
|
"de": "Diese Wartehilfe befindet sich auf der linken Seite",
|
||||||
"es": "Esta ayuda a la espera se encuentra en el lado izquierdo",
|
"es": "Esta ayuda a la espera se encuentra en el lado izquierdo",
|
||||||
"ca": "Aquesta ajuda d'espera es troba a la banda esquerra"
|
"ca": "Aquesta ajuda a l'espera es troba a la banda esquerra"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -128,7 +128,7 @@
|
||||||
"en": "This waiting aid is located on the right side",
|
"en": "This waiting aid is located on the right side",
|
||||||
"de": "Diese Wartehilfe befindet sich auf der rechten Seite",
|
"de": "Diese Wartehilfe befindet sich auf der rechten Seite",
|
||||||
"es": "Esta ayuda a la espera se encuentra en el lado derecho",
|
"es": "Esta ayuda a la espera se encuentra en el lado derecho",
|
||||||
"ca": "Aquesta ajuda d'espera es troba al costat dret"
|
"ca": "Aquesta ajuda a l'espera es troba al costat dret"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -137,7 +137,7 @@
|
||||||
"en": "There are waiting aids on both sides of the road",
|
"en": "There are waiting aids on both sides of the road",
|
||||||
"de": "Auf beiden Seiten der Straße gibt es Wartehilfen",
|
"de": "Auf beiden Seiten der Straße gibt es Wartehilfen",
|
||||||
"es": "Hay ayudas a la espera a ambos lados de la carretera",
|
"es": "Hay ayudas a la espera a ambos lados de la carretera",
|
||||||
"ca": "Hi ha ajudes d'espera a banda i banda de la carretera"
|
"ca": "Hi ha ajudes a l'espera a ambdós costats de la carretera"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -152,7 +152,7 @@
|
||||||
"en": "This waiting aid can be used when going forward on this way",
|
"en": "This waiting aid can be used when going forward on this way",
|
||||||
"de": "Diese Wartehilfe kann bei der Weiterfahrt auf diesem Weg genutzt werden",
|
"de": "Diese Wartehilfe kann bei der Weiterfahrt auf diesem Weg genutzt werden",
|
||||||
"es": "Esta ayuda a la espera puede utilizarse cuando se avanza por esta vía",
|
"es": "Esta ayuda a la espera puede utilizarse cuando se avanza por esta vía",
|
||||||
"ca": "Aquesta ajuda d'espera es pot utilitzar en avançar d'aquesta manera"
|
"ca": "Aquesta ajuda a l'espera es pot utilitzar quan s'avança en aquesta via"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -161,7 +161,7 @@
|
||||||
"en": "This waiting aid can be used when going backward on this way",
|
"en": "This waiting aid can be used when going backward on this way",
|
||||||
"de": "Diese Wartehilfe kann beim Rückwärtsfahren auf diesem Weg benutzt werden",
|
"de": "Diese Wartehilfe kann beim Rückwärtsfahren auf diesem Weg benutzt werden",
|
||||||
"es": "Esta ayuda a la espera puede utilizarse cuando se retrocede por este camino",
|
"es": "Esta ayuda a la espera puede utilizarse cuando se retrocede por este camino",
|
||||||
"ca": "Aquesta ajuda d'espera es pot utilitzar en retrocedir d'aquesta manera"
|
"ca": "Aquesta ajuda a l'espera es pot utilitzar quan es retrocedeix per aquest camí"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -169,7 +169,7 @@
|
||||||
"en": "This waiting aid can be used when going in {direction} direction",
|
"en": "This waiting aid can be used when going in {direction} direction",
|
||||||
"de": "Diese Wartehilfe kann in Fahrtrichtung {direction} benutzt werden",
|
"de": "Diese Wartehilfe kann in Fahrtrichtung {direction} benutzt werden",
|
||||||
"es": "Esta ayuda a la espera puede utilizarse cuando se va en dirección {direction}",
|
"es": "Esta ayuda a la espera puede utilizarse cuando se va en dirección {direction}",
|
||||||
"ca": "Aquesta ajuda d'espera es pot utilitzar en anar en direcció {direction}"
|
"ca": "Aquesta ajuda a l'espera es pot utilitzar quan es va en direcció {direction}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
"description": {
|
"description": {
|
||||||
"en": "A dog toilet is a facility designated for dogs to urinate and excrete. This can be a designated, signposted patch of grass, a sand pit or a fenced area.",
|
"en": "A dog toilet is a facility designated for dogs to urinate and excrete. This can be a designated, signposted patch of grass, a sand pit or a fenced area.",
|
||||||
"de": "Eine Hundetoilette ist eine Einrichtung, die für das Urinieren und die Ausscheidung von Hunden vorgesehen ist. Dabei kann es sich um eine ausgewiesene, ausgeschilderte Rasenfläche, eine Sandgrube oder einen eingezäunten Bereich handeln.",
|
"de": "Eine Hundetoilette ist eine Einrichtung, die für das Urinieren und die Ausscheidung von Hunden vorgesehen ist. Dabei kann es sich um eine ausgewiesene, ausgeschilderte Rasenfläche, eine Sandgrube oder einen eingezäunten Bereich handeln.",
|
||||||
"ca": "Un vàter de gos és una instal·lació designada per a gossos per orinar i excretar. Aquest pot ser un pegat d'herba designat i senyalitzat, un pou de sorra o una zona tancada."
|
"ca": "Un vàter de gos és una instal·lació designada per a gossos per orinar i excretar. Pot ser un tros d'herba senyalitzat, un pou de sorra o una zona tancada."
|
||||||
},
|
},
|
||||||
"source": {
|
"source": {
|
||||||
"osmTags": "amenity=dog_toilet"
|
"osmTags": "amenity=dog_toilet"
|
||||||
|
@ -76,7 +76,7 @@
|
||||||
"then": {
|
"then": {
|
||||||
"en": "There is a hedge around this dog toilet",
|
"en": "There is a hedge around this dog toilet",
|
||||||
"de": "Diese Hundetoilette ist von einer Hecke umgeben",
|
"de": "Diese Hundetoilette ist von einer Hecke umgeben",
|
||||||
"ca": "Hi ha una tanca al voltant d'aquest vàter de gos"
|
"ca": "Hi ha una esbardissa al voltant d'aquest vàter de gos"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -244,7 +244,7 @@
|
||||||
"de": "Die Trinkwasserstelle ist dauerhaft geschlossen",
|
"de": "Die Trinkwasserstelle ist dauerhaft geschlossen",
|
||||||
"uk": "Цей пункт питної води постійно закритий",
|
"uk": "Цей пункт питної води постійно закритий",
|
||||||
"es": "Esta fuente de agua potable está cerrada permanentemente",
|
"es": "Esta fuente de agua potable está cerrada permanentemente",
|
||||||
"ca": "Aquesta aigua potable està tancada permanentment"
|
"ca": "Aquesta font d'aigua potable està tancada permanentment"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -305,7 +305,7 @@
|
||||||
"de": "Dies ist ein Sprudelbrunnen. Ein Wasserstrahl zum Trinken wird nach oben gerichtet und in der Regel durch einen Druckknopf gesteuert.",
|
"de": "Dies ist ein Sprudelbrunnen. Ein Wasserstrahl zum Trinken wird nach oben gerichtet und in der Regel durch einen Druckknopf gesteuert.",
|
||||||
"uk": "Це барботажний фонтан. Струмінь води, з якого можна пити, спрямовується вгору, зазвичай керується кнопкою.",
|
"uk": "Це барботажний фонтан. Струмінь води, з якого можна пити, спрямовується вгору, зазвичай керується кнопкою.",
|
||||||
"es": "Esta es una fuente de chorro. Un chorro de agua para beber se envía hacia arriba, típicamente controlado por un botón.",
|
"es": "Esta es una fuente de chorro. Un chorro de agua para beber se envía hacia arriba, típicamente controlado por un botón.",
|
||||||
"ca": "Aquesta és una font de bombolles. Un raig d'aigua per beure s'envia cap amunt, normalment controlat per un botó d'empenta."
|
"ca": "Aquesta és una font de raig. Un raig d'aigua per beure s'envia cap amunt, normalment controlat per un botó d'empenta."
|
||||||
},
|
},
|
||||||
"addExtraTags": [
|
"addExtraTags": [
|
||||||
"man_made="
|
"man_made="
|
||||||
|
@ -419,7 +419,7 @@
|
||||||
"en": "Actively cooled water is available here",
|
"en": "Actively cooled water is available here",
|
||||||
"nl": "Afgekoeld water is hier beschikbaar",
|
"nl": "Afgekoeld water is hier beschikbaar",
|
||||||
"de": "Hier steht aktiv gekühltes Wasser zur Verfügung",
|
"de": "Hier steht aktiv gekühltes Wasser zur Verfügung",
|
||||||
"ca": "L'aigua freda activa està disponible aquí"
|
"ca": "Aquí hi ha aigua refrigerada activament"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -429,7 +429,7 @@
|
||||||
"en": "Ambient temperature water (without active cooling or heating) is available here",
|
"en": "Ambient temperature water (without active cooling or heating) is available here",
|
||||||
"nl": "Water aan omgevingstemperatuur (zonder actieve koeling of opwarming) is hier beschikbaar",
|
"nl": "Water aan omgevingstemperatuur (zonder actieve koeling of opwarming) is hier beschikbaar",
|
||||||
"de": "Wasser mit Umgebungstemperatur (ohne aktive Kühlung oder Heizung) ist hier verfügbar",
|
"de": "Wasser mit Umgebungstemperatur (ohne aktive Kühlung oder Heizung) ist hier verfügbar",
|
||||||
"ca": "L'aigua a temperatura ambient (sense refrigeració activa ni calefacció) està disponible aquí"
|
"ca": "L'aigua a temperatura ambient (sense refrigeració ni calefacció activa) està disponible aquí"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -449,7 +449,7 @@
|
||||||
"en": "Hot water is provided here",
|
"en": "Hot water is provided here",
|
||||||
"nl": "Heet water is hier beschikbaar",
|
"nl": "Heet water is hier beschikbaar",
|
||||||
"de": "Hier wird heißes Wasser bereitgestellt",
|
"de": "Hier wird heißes Wasser bereitgestellt",
|
||||||
"ca": "L'aigua calenta es proporciona aquí"
|
"ca": "Aquí es proporciona aigua calenta"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -390,7 +390,7 @@
|
||||||
"cs": "Má tento výtah hlasový výstup?",
|
"cs": "Má tento výtah hlasový výstup?",
|
||||||
"es": "¿Tiene este ascensor salida de voz?",
|
"es": "¿Tiene este ascensor salida de voz?",
|
||||||
"nl": "Heeft deze lift spraakuitvoer?",
|
"nl": "Heeft deze lift spraakuitvoer?",
|
||||||
"ca": "Té aquesta sortida de veu d'ascensor?"
|
"ca": "Té sortida de veu aquest ascensor?"
|
||||||
},
|
},
|
||||||
"questionHint": {
|
"questionHint": {
|
||||||
"en": "E.g. it announces the current floor",
|
"en": "E.g. it announces the current floor",
|
||||||
|
|
|
@ -122,7 +122,7 @@
|
||||||
"da": "Hvilket Wikidata-emne er dette objekt opkaldt efter?",
|
"da": "Hvilket Wikidata-emne er dette objekt opkaldt efter?",
|
||||||
"es": "¿Cuál es el elemento de Wikidata en honor a el cual se nombra este objeto?",
|
"es": "¿Cuál es el elemento de Wikidata en honor a el cual se nombra este objeto?",
|
||||||
"uk": "На честь якого елемента Вікіданих названо цей об'єкт?",
|
"uk": "На честь якого елемента Вікіданих названо цей об'єкт?",
|
||||||
"ca": "Quin és l'element de Wikidata que porta el nom d'aquest objecte?"
|
"ca": "Quin és l'element de Wikidata en honor al qual s'anomena aquest objecte?"
|
||||||
},
|
},
|
||||||
"freeform": {
|
"freeform": {
|
||||||
"key": "name:etymology:wikidata",
|
"key": "name:etymology:wikidata",
|
||||||
|
@ -272,7 +272,7 @@
|
||||||
"fr": "<a href='https://inventaris.onroerenderfgoed.be/erfgoedobjecten?tekst={name}' target='_blank'>Chercher sur inventaris onroerend erfgoed</a>",
|
"fr": "<a href='https://inventaris.onroerenderfgoed.be/erfgoedobjecten?tekst={name}' target='_blank'>Chercher sur inventaris onroerend erfgoed</a>",
|
||||||
"cs": "<a href='https://inventaris.onroerenderfgoed.be/erfgoedobjecten?tekst={name}' target='_blank'>Hledání na inventaris onroerend erfgoed</a>",
|
"cs": "<a href='https://inventaris.onroerenderfgoed.be/erfgoedobjecten?tekst={name}' target='_blank'>Hledání na inventaris onroerend erfgoed</a>",
|
||||||
"es": "<a href='https://inventaris.onroerenderfgoed.be/erfgoedobjecten?tekst={name}' target='_blank'>Buscar en Inventaris Onroerend Erfgoed</a>",
|
"es": "<a href='https://inventaris.onroerenderfgoed.be/erfgoedobjecten?tekst={name}' target='_blank'>Buscar en Inventaris Onroerend Erfgoed</a>",
|
||||||
"ca": "<a href='https://inventaris.onroerenderfgoed.be/erfgoedobjecten?tekst={name}' target='blank'>Cerca en inventaris onroerend erfgoed</a>"
|
"ca": "<a href='https://inventaris.onroerenderfgoed.be/erfgoedobjecten?tekst={name}' target='_blank'>Cerca en inventaris onroerend erfgoed</a>"
|
||||||
},
|
},
|
||||||
"condition": "_country=be"
|
"condition": "_country=be"
|
||||||
},
|
},
|
||||||
|
@ -287,7 +287,7 @@
|
||||||
"cs": "Po čem je tento objekt pojmenován?",
|
"cs": "Po čem je tento objekt pojmenován?",
|
||||||
"da": "Hvad er dette objekt opkaldt efter?",
|
"da": "Hvad er dette objekt opkaldt efter?",
|
||||||
"es": "¿A qué se debe el nombre de este objeto?",
|
"es": "¿A qué se debe el nombre de este objeto?",
|
||||||
"ca": "De què porta aquest objecte?"
|
"ca": "A que es deu el nom d'aquest objecte?"
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"en": "Named after {name:etymology}",
|
"en": "Named after {name:etymology}",
|
||||||
|
@ -298,7 +298,7 @@
|
||||||
"pl": "Nazwane po {name:etymology}",
|
"pl": "Nazwane po {name:etymology}",
|
||||||
"cs": "Pojmenováno po {name:etymology}",
|
"cs": "Pojmenováno po {name:etymology}",
|
||||||
"es": "Nombrado en honor a {name:etymology}",
|
"es": "Nombrado en honor a {name:etymology}",
|
||||||
"ca": "Anomenat després de {name:etymology}"
|
"ca": "Anomenat en honor a {name:etymology}"
|
||||||
},
|
},
|
||||||
"freeform": {
|
"freeform": {
|
||||||
"key": "name:etymology",
|
"key": "name:etymology",
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
"en": "Now open",
|
"en": "Now open",
|
||||||
"nl": "Nu open",
|
"nl": "Nu open",
|
||||||
"de": "Jetzt geöffnet",
|
"de": "Jetzt geöffnet",
|
||||||
"ca": "Obert ara",
|
"ca": "Ara obert",
|
||||||
"es": "Abierto ahora",
|
"es": "Abierto ahora",
|
||||||
"fr": "Ouvert maintenant",
|
"fr": "Ouvert maintenant",
|
||||||
"hu": "Most nyitva van",
|
"hu": "Most nyitva van",
|
||||||
|
@ -289,7 +289,7 @@
|
||||||
"de": "Keine Bevorzugung von Hunden",
|
"de": "Keine Bevorzugung von Hunden",
|
||||||
"cs": "Bez preference psů",
|
"cs": "Bez preference psů",
|
||||||
"es": "Sin preferencia por los perros",
|
"es": "Sin preferencia por los perros",
|
||||||
"ca": "No hi ha preferència cap als gossos"
|
"ca": "Sense preferència pels gossos"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -299,7 +299,7 @@
|
||||||
"de": "Hunde erlaubt",
|
"de": "Hunde erlaubt",
|
||||||
"cs": "Psi povoleny",
|
"cs": "Psi povoleny",
|
||||||
"es": "Se permiten perros",
|
"es": "Se permiten perros",
|
||||||
"ca": "Permesos"
|
"ca": "Es permeten gossos"
|
||||||
},
|
},
|
||||||
"emoji": "🐕",
|
"emoji": "🐕",
|
||||||
"osmTags": {
|
"osmTags": {
|
||||||
|
@ -333,7 +333,7 @@
|
||||||
"de": "Internetzugang vorhanden",
|
"de": "Internetzugang vorhanden",
|
||||||
"cs": "Nabízí internet",
|
"cs": "Nabízí internet",
|
||||||
"es": "Ofrece internet",
|
"es": "Ofrece internet",
|
||||||
"ca": "Ofertes d'internet"
|
"ca": "Ofereix internet"
|
||||||
},
|
},
|
||||||
"icon": "wifi",
|
"icon": "wifi",
|
||||||
"osmTags": {
|
"osmTags": {
|
||||||
|
@ -355,7 +355,7 @@
|
||||||
"de": "Stromanschluss vorhanden",
|
"de": "Stromanschluss vorhanden",
|
||||||
"cs": "Nabízí elektřinu",
|
"cs": "Nabízí elektřinu",
|
||||||
"es": "Ofrece electricidad",
|
"es": "Ofrece electricidad",
|
||||||
"ca": "Ofertes d'electricitat"
|
"ca": "Ofereix electricitat"
|
||||||
},
|
},
|
||||||
"osmTags": "service:electricity=yes"
|
"osmTags": "service:electricity=yes"
|
||||||
}
|
}
|
||||||
|
@ -370,7 +370,7 @@
|
||||||
"cs": "Má nabídku bez cukru",
|
"cs": "Má nabídku bez cukru",
|
||||||
"de": "Hat zuckerfreie Angebote",
|
"de": "Hat zuckerfreie Angebote",
|
||||||
"es": "Tiene una oferta sin azúcar",
|
"es": "Tiene una oferta sin azúcar",
|
||||||
"ca": "Té una oferta sense sucre"
|
"ca": "Disposa d'oferta sense sucre"
|
||||||
},
|
},
|
||||||
"osmTags": {
|
"osmTags": {
|
||||||
"or": [
|
"or": [
|
||||||
|
@ -413,7 +413,7 @@
|
||||||
"cs": "Má nabídku bez laktózy",
|
"cs": "Má nabídku bez laktózy",
|
||||||
"de": "Hat laktosefreie Angebote",
|
"de": "Hat laktosefreie Angebote",
|
||||||
"es": "Tiene una oferta sin lactosa",
|
"es": "Tiene una oferta sin lactosa",
|
||||||
"ca": "Té una oferta lliure de lactosa"
|
"ca": "Disposa d'una oferta lliure de lactosa"
|
||||||
},
|
},
|
||||||
"icon": "./assets/layers/questions/lactose_free.svg",
|
"icon": "./assets/layers/questions/lactose_free.svg",
|
||||||
"osmTags": {
|
"osmTags": {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"en": "Firepit",
|
"en": "Firepit",
|
||||||
"de": "Feuerstelle",
|
"de": "Feuerstelle",
|
||||||
"es": "Hoguera",
|
"es": "Hoguera",
|
||||||
"ca": "Aixeta"
|
"ca": "Foguera"
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"en": "An outdoor place to make a fire, typically open to the public.",
|
"en": "An outdoor place to make a fire, typically open to the public.",
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
"en": "Firepit",
|
"en": "Firepit",
|
||||||
"de": "Feuerstelle",
|
"de": "Feuerstelle",
|
||||||
"es": "Hoguera",
|
"es": "Hoguera",
|
||||||
"ca": "Aixeta"
|
"ca": "Foguera"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"titleIcons": [
|
"titleIcons": [
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
"en": "Firepit",
|
"en": "Firepit",
|
||||||
"de": "Feuerstelle",
|
"de": "Feuerstelle",
|
||||||
"es": "Hoguera",
|
"es": "Hoguera",
|
||||||
"ca": "Aixeta"
|
"ca": "Foguera"
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"de": "Eine Stelle im Freien zum Feuermachen, typischerweise öffentlich zugänglich.",
|
"de": "Eine Stelle im Freien zum Feuermachen, typischerweise öffentlich zugänglich.",
|
||||||
|
@ -127,7 +127,7 @@
|
||||||
"de": "Zugang nur für Berechtigte",
|
"de": "Zugang nur für Berechtigte",
|
||||||
"en": "Access only for authorized",
|
"en": "Access only for authorized",
|
||||||
"es": "Acceso solo para autorizados",
|
"es": "Acceso solo para autorizados",
|
||||||
"ca": "Accés només per autoritzat"
|
"ca": "Accés només per a autoritzats"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -140,7 +140,7 @@
|
||||||
"nl": "Is deze kampvuurplaats heel het jaar door beschikbaar?",
|
"nl": "Is deze kampvuurplaats heel het jaar door beschikbaar?",
|
||||||
"de": "Ist diese Feuerstelle rund um das Jahr nutzbar?",
|
"de": "Ist diese Feuerstelle rund um das Jahr nutzbar?",
|
||||||
"es": "¿Está la hoguera disponible todo el año?",
|
"es": "¿Está la hoguera disponible todo el año?",
|
||||||
"ca": "Està disponible la cabina durant tot l'any?"
|
"ca": "Està disponible la foguera durant tot l'any?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
46
assets/license_info.json
Normal file
46
assets/license_info.json
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"path": "icon-background.png",
|
||||||
|
"license": "LOGO AND CC-BY-SA-4.0",
|
||||||
|
"authors": [
|
||||||
|
"Pieter Vander Vennet",
|
||||||
|
"OSM"
|
||||||
|
],
|
||||||
|
"sources": [
|
||||||
|
"https://mapcomplete.org"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "icon-foreground.png",
|
||||||
|
"license": "LOGO AND CC-BY-SA-4.0",
|
||||||
|
"authors": [
|
||||||
|
"Pieter Vander Vennet",
|
||||||
|
"OSM"
|
||||||
|
],
|
||||||
|
"sources": [
|
||||||
|
"https://mapcomplete.org"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "icon-only.png",
|
||||||
|
"license": "LOGO AND CC-BY-SA-4.0",
|
||||||
|
"authors": [
|
||||||
|
"Pieter Vander Vennet",
|
||||||
|
"OSM"
|
||||||
|
],
|
||||||
|
"sources": [
|
||||||
|
"https://mapcomplete.org"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "splash-dark.png",
|
||||||
|
"license": "LOGO AND CC-BY-SA-4.0",
|
||||||
|
"authors": [
|
||||||
|
"Pieter Vander Vennet",
|
||||||
|
"OSM"
|
||||||
|
],
|
||||||
|
"sources": [
|
||||||
|
"https://mapcomplete.org"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
2
assets/splash-dark.png.license
Normal file
2
assets/splash-dark.png.license
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
SPDX-FileCopyrightText: Pieter Vander Vennet; OSM
|
||||||
|
SPDX-License-Identifier: LicenseRef-LOGO AND CC-BY-SA-4.0
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText: Dave Gandy; Pieter Vander Vennet
|
|
||||||
SPDX-License-Identifier: CC-BY-SA-3.0
|
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText: Pieter Vander Vennet
|
|
||||||
SPDX-License-Identifier: CC0-1.0
|
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText: Engr.eponce
|
|
||||||
SPDX-License-Identifier: CC-BY-SA-4.0
|
|
|
@ -730,18 +730,18 @@
|
||||||
"license": "LOGO AND CC-BY-SA-4.0",
|
"license": "LOGO AND CC-BY-SA-4.0",
|
||||||
"authors": [
|
"authors": [
|
||||||
"Pieter Vander Vennet",
|
"Pieter Vander Vennet",
|
||||||
" OSM"
|
"OSM"
|
||||||
],
|
],
|
||||||
"sources": [
|
"sources": [
|
||||||
"https://mapcomplete.org"
|
"https://mapcomplete.org"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "mapcomplete_logo.svg",
|
"path": "mapcomplete_logo_centered.svg",
|
||||||
"license": "LOGO AND CC-BY-SA-4.0",
|
"license": "LOGO AND CC-BY-SA-4.0",
|
||||||
"authors": [
|
"authors": [
|
||||||
"Pieter Vander Vennet",
|
"Pieter Vander Vennet",
|
||||||
" OSM"
|
"OSM"
|
||||||
],
|
],
|
||||||
"sources": [
|
"sources": [
|
||||||
"https://mapcomplete.org"
|
"https://mapcomplete.org"
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText: Pol Labaut
|
|
||||||
SPDX-License-Identifier: CC0-1.0
|
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText:
|
|
||||||
SPDX-License-Identifier: LicenseRef-TRIVIAL
|
|
|
@ -1,2 +1,2 @@
|
||||||
SPDX-FileCopyrightText: Pieter Vander Vennet; OSM
|
SPDX-FileCopyrightText: Pieter Vander Vennet; OSM
|
||||||
SPDX-License-Identifier: LicenseRef-LOGO AND CC-BY-SA-4.0
|
SPDX-License-Identifier: LicenseRef-LOGO AND CC-BY-SA-4.0
|
2
assets/svg/mapcomplete_logo_centered.svg.license
Normal file
2
assets/svg/mapcomplete_logo_centered.svg.license
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
SPDX-FileCopyrightText: Pieter Vander Vennet; OSM
|
||||||
|
SPDX-License-Identifier: LicenseRef-LOGO AND CC-BY-SA-4.0
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText:
|
|
||||||
SPDX-License-Identifier: LicenseRef-TRIVIAL
|
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText:
|
|
||||||
SPDX-License-Identifier: LicenseRef-TRIVIAL
|
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText:
|
|
||||||
SPDX-License-Identifier: LicenseRef-TRIVIAL
|
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText:
|
|
||||||
SPDX-License-Identifier: LicenseRef-TRIVIAL
|
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText:
|
|
||||||
SPDX-License-Identifier: LicenseRef-TRIVIAL
|
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText: Pieter Vander Vennet
|
|
||||||
SPDX-License-Identifier: CC0-1.0
|
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText: https://www.openstreetmap.org/user/GEO%20ECLA
|
|
||||||
SPDX-License-Identifier: CC0-1.0
|
|
38
assets/themes/architecture/architecture.json
Normal file
38
assets/themes/architecture/architecture.json
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
"id": "architecture",
|
||||||
|
"title": {
|
||||||
|
"en": "Buildings with an architectural style"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"en": "A map showing the archetectural style of buildings"
|
||||||
|
},
|
||||||
|
"icon": "./assets/themes/architecture/architecture.svg",
|
||||||
|
"defaultBackgroundId": "protomaps.white",
|
||||||
|
|
||||||
|
"layers": [
|
||||||
|
{
|
||||||
|
"builtin": "building",
|
||||||
|
"override": {
|
||||||
|
"id": "buildings_with_architecture",
|
||||||
|
"isCounted": true,
|
||||||
|
"minzoom": 12,
|
||||||
|
"source": {
|
||||||
|
"osmTags": {
|
||||||
|
"and+": [
|
||||||
|
"building:architecture~*"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"builtin": "building",
|
||||||
|
"override": {
|
||||||
|
"name": null,
|
||||||
|
"filter": {
|
||||||
|
"sameAs": "buildings_with_architecture"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
70
assets/themes/architecture/architecture.svg
Normal file
70
assets/themes/architecture/architecture.svg
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg fill="#000000" height="800px" width="800px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 295.239 295.239" xml:space="preserve">
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path d="M244.352,239.382l-6.91-6.557c-0.348,0.367-0.729,0.695-1.081,1.057l-39.614-129.643
|
||||||
|
c5.005-6.448,8.014-14.514,8.014-23.286c0-21.005-17.09-38.095-38.095-38.095V25.372c1.267,0.195,2.524,0.329,3.79,0.562
|
||||||
|
l1.738-9.367c-1.957-0.362-3.91-0.595-5.867-0.867c-1.59-8.905-9.352-15.7-18.71-15.7c-9.358,0-17.117,6.796-18.707,15.701
|
||||||
|
c-1.957,0.276-3.91,0.505-5.867,0.867l1.738,9.367c1.267-0.233,2.524-0.367,3.79-0.562v17.486
|
||||||
|
c-21.005,0-38.095,17.09-38.095,38.095c0,8.771,3.01,16.838,8.01,23.281L58.871,233.877c-0.352-0.362-0.733-0.69-1.081-1.057
|
||||||
|
l-6.91,6.557c1.557,1.638,3.214,3.19,4.857,4.757l-7.914,25.905l-0.205,25.2l27.91-20.933l3.757-12.295
|
||||||
|
c1.014,0.61,2.005,1.281,3.024,1.852l4.662-8.305c-1.624-0.914-3.214-1.952-4.819-2.952l17.533-57.367h95.862l17.529,57.371
|
||||||
|
c-1.605,1-3.19,2.038-4.819,2.952l4.662,8.305c1.024-0.576,2.01-1.248,3.024-1.852l3.757,12.295l27.919,20.929V270.72
|
||||||
|
l-8.124-26.581C241.138,242.572,242.8,241.02,244.352,239.382z M166.667,52.382c15.757,0,28.571,12.814,28.571,28.571
|
||||||
|
c0,9.171-4.362,17.329-11.1,22.557c-2.79-9.433-9.138-17.333-17.49-22.176c0-0.129,0.019-0.252,0.019-0.381
|
||||||
|
c0-10.276-4.11-19.595-10.748-26.457C159.243,53.144,162.867,52.382,166.667,52.382z M165.086,91.73
|
||||||
|
c5.181,4.019,8.943,9.767,10.41,16.381c-2.782,0.909-5.744,1.414-8.829,1.414c-3.8,0-7.424-0.762-10.748-2.114
|
||||||
|
C160.138,103.049,163.324,97.697,165.086,91.73z M147.619,102.191c-4.362-3.919-7.524-9.138-8.833-15.062
|
||||||
|
c2.785-0.909,5.747-1.414,8.833-1.414s6.048,0.505,8.833,1.414C155.142,93.053,151.981,98.272,147.619,102.191z M147.619,76.191
|
||||||
|
c-3.205,0-6.3,0.443-9.276,1.19c0.876-6.985,4.286-13.18,9.276-17.666c4.99,4.481,8.4,10.676,9.276,17.662
|
||||||
|
C153.919,76.634,150.824,76.191,147.619,76.191z M139.319,107.411c-3.324,1.352-6.948,2.114-10.748,2.114
|
||||||
|
c-3.086,0-6.048-0.505-8.833-1.414c1.467-6.614,5.229-12.362,10.41-16.381C131.914,97.696,135.1,103.049,139.319,107.411z
|
||||||
|
M128.571,119.048c6.943,0,13.438-1.895,19.048-5.152c5.61,3.257,12.105,5.152,19.048,5.152c3.205,0,6.3-0.443,9.276-1.19
|
||||||
|
c-1.767,14.072-13.781,25-28.324,25c-14.543,0-26.557-10.929-28.324-25C122.271,118.606,125.366,119.048,128.571,119.048z
|
||||||
|
M138.095,19.049c0-5.252,4.271-9.524,9.524-9.524s9.524,4.271,9.524,9.524v25.062c-3.381,0.876-6.576,2.19-9.524,3.9
|
||||||
|
c-2.948-1.714-6.143-3.024-9.524-3.9V19.049z M128.571,52.382c3.8,0,7.424,0.762,10.748,2.114
|
||||||
|
c-6.638,6.862-10.748,16.181-10.748,26.457c0,0.129,0.019,0.252,0.019,0.381c-8.352,4.843-14.7,12.743-17.49,22.176
|
||||||
|
c-6.738-5.229-11.1-13.386-11.1-22.557C100,65.196,112.814,52.382,128.571,52.382z M67.329,268.549l-10.186,7.642v-4.052
|
||||||
|
l49.024-160.448c1.086,0.795,2.21,1.533,3.376,2.21c0,0.133-0.019,0.257-0.019,0.386c0,3.79,0.576,7.443,1.61,10.9
|
||||||
|
L67.329,268.549z M102.6,185.715l14.776-48.357c6.967,9.11,17.914,15.024,30.243,15.024c12.329,0,23.276-5.914,30.243-15.024
|
||||||
|
l14.776,48.357H102.6z M238.096,276.191L238.096,276.191l-10.187-7.638l-43.804-143.362c1.033-3.462,1.61-7.114,1.61-10.905
|
||||||
|
c0-0.129-0.019-0.252-0.019-0.381c1.167-0.676,2.29-1.419,3.376-2.21l49.024,160.443V276.191z"/>
|
||||||
|
<path d="M208.3,28.882c-5.633-2.876-11.529-5.381-17.514-7.433l-3.081,9.014c5.557,1.9,11.029,4.224,16.262,6.9L208.3,28.882z"/>
|
||||||
|
<path d="M262.886,80.568c-3.186-5.457-6.795-10.748-10.733-15.714l-7.462,5.914c3.662,4.619,7.014,9.529,9.971,14.595
|
||||||
|
L262.886,80.568z"/>
|
||||||
|
<path d="M239.29,50.815c-4.605-4.357-9.552-8.419-14.714-12.067l-5.5,7.776c4.79,3.39,9.39,7.162,13.667,11.21L239.29,50.815z"/>
|
||||||
|
<path d="M267.876,118.053l9.248-2.262c-1.505-6.157-3.476-12.252-5.852-18.133l-8.829,3.571
|
||||||
|
C264.652,106.687,266.481,112.349,267.876,118.053z"/>
|
||||||
|
<path d="M280.319,134.558l-9.476,0.919c0.386,4.019,0.586,8.1,0.586,12.143c0,1.857-0.038,3.7-0.119,5.538l9.514,0.419
|
||||||
|
c0.086-1.976,0.129-3.962,0.129-5.957C280.952,143.272,280.743,138.877,280.319,134.558z"/>
|
||||||
|
<path d="M264.767,187.801l9.01,3.086c2.057-5.99,3.69-12.186,4.867-18.405l-9.362-1.767
|
||||||
|
C268.19,176.491,266.671,182.239,264.767,187.801z"/>
|
||||||
|
<path d="M248.671,219.172l7.771,5.505c3.671-5.176,6.995-10.648,9.876-16.267l-8.471-4.352
|
||||||
|
C255.167,209.282,252.081,214.368,248.671,219.172z"/>
|
||||||
|
<path d="M174.533,268.491l2.067,9.3c6.348-1.414,12.624-3.3,18.662-5.619l-3.414-8.89
|
||||||
|
C186.248,265.43,180.424,267.182,174.533,268.491z"/>
|
||||||
|
<path d="M147.614,271.43c-3.029-0.071-6.048-0.105-9.067-0.324l-0.695,9.495c3.19,0.238,6.414,0.352,9.581,0.352
|
||||||
|
c3.448,0.062,6.643-0.11,9.89-0.348l-0.686-9.495C153.676,271.325,150.638,271.43,147.614,271.43z"/>
|
||||||
|
<path d="M99.924,272.153c6.067,2.329,12.343,4.219,18.657,5.619l2.062-9.3c-5.857-1.295-11.681-3.052-17.305-5.21L99.924,272.153
|
||||||
|
z"/>
|
||||||
|
<path d="M107.681,30.415l-3.071-9.014c-5.995,2.038-11.9,4.533-17.543,7.419l4.333,8.481
|
||||||
|
C96.638,34.625,102.114,32.311,107.681,30.415z"/>
|
||||||
|
<path d="M50.633,70.672l-7.457-5.924c-3.948,4.971-7.567,10.257-10.748,15.705l8.224,4.81
|
||||||
|
C43.605,80.196,46.967,75.291,50.633,70.672z"/>
|
||||||
|
<path d="M28.857,208.287c2.881,5.629,6.2,11.1,9.862,16.281l7.776-5.505c-3.405-4.805-6.486-9.89-9.157-15.119L28.857,208.287z"
|
||||||
|
/>
|
||||||
|
<path d="M25.933,170.582l-9.362,1.757c1.171,6.233,2.8,12.424,4.848,18.414l9.014-3.076
|
||||||
|
C28.529,182.12,27.014,176.368,25.933,170.582z"/>
|
||||||
|
<path d="M23.81,147.615c0-4.09,0.2-8.229,0.6-12.281l-9.476-0.938c-0.433,4.371-0.648,8.819-0.648,13.224
|
||||||
|
c0,1.943,0.043,3.876,0.124,5.81l9.514-0.419C23.848,151.22,23.81,149.425,23.81,147.615z"/>
|
||||||
|
<path d="M76.271,46.444l-5.495-7.776c-5.162,3.643-10.119,7.695-14.729,12.048l6.538,6.929
|
||||||
|
C66.871,53.601,71.476,49.834,76.271,46.444z"/>
|
||||||
|
<path d="M32.843,101.106l-8.824-3.581c-2.376,5.857-4.352,11.952-5.871,18.11l9.243,2.281
|
||||||
|
C28.805,112.206,30.638,106.549,32.843,101.106z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.9 KiB |
2
assets/themes/architecture/architecture.svg.license
Normal file
2
assets/themes/architecture/architecture.svg.license
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
SPDX-FileCopyrightText: Design Thinking
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
12
assets/themes/architecture/license_info.json
Normal file
12
assets/themes/architecture/license_info.json
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"path": "architecture.svg",
|
||||||
|
"license": "CC0-1.0",
|
||||||
|
"authors": [
|
||||||
|
"Design Thinking"
|
||||||
|
],
|
||||||
|
"sources": [
|
||||||
|
"https://www.svgrepo.com/svg/144391/architecture"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText: ©UNESCO-UIS 2012 http://www.uis.unesco.org
|
|
||||||
SPDX-License-Identifier: LicenseRef-ALL-RIGHTS-RESERVED
|
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText: vladi1081384728
|
|
||||||
SPDX-License-Identifier: CC-BY-SA-4.0
|
|
|
@ -246,6 +246,10 @@
|
||||||
"if": "theme=aed",
|
"if": "theme=aed",
|
||||||
"then": "./assets/themes/aed/aed.svg"
|
"then": "./assets/themes/aed/aed.svg"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"if": "theme=architecture",
|
||||||
|
"then": "./assets/themes/architecture/architecture.svg"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"if": "theme=artwork",
|
"if": "theme=artwork",
|
||||||
"then": "./assets/themes/artwork/artwork.svg"
|
"then": "./assets/themes/artwork/artwork.svg"
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
SPDX-FileCopyrightText: Vlaamse Overheid
|
|
||||||
SPDX-License-Identifier: LicenseRef-ALL-RIGHTS-RESERVED
|
|
|
@ -616,6 +616,7 @@
|
||||||
"intro": "Maps about various topics which you can contribute to",
|
"intro": "Maps about various topics which you can contribute to",
|
||||||
"learnMore": "Learn more",
|
"learnMore": "Learn more",
|
||||||
"logIn": "Log in to see other themes you previously visited",
|
"logIn": "Log in to see other themes you previously visited",
|
||||||
|
"recentThemes": "Recently visited themes",
|
||||||
"title": "MapComplete"
|
"title": "MapComplete"
|
||||||
},
|
},
|
||||||
"inspector": {
|
"inspector": {
|
||||||
|
|
|
@ -3057,16 +3057,16 @@
|
||||||
"render": "S'ha de pagar una tarifa de {charge} per a escalar aquí"
|
"render": "S'ha de pagar una tarifa de {charge} per a escalar aquí"
|
||||||
},
|
},
|
||||||
"max_bolts": {
|
"max_bolts": {
|
||||||
"question": "Quants parabolts tenen com a màxim les rutes a {title()} ?",
|
"question": "Quants ancoratges d'anella tenen com a màxim les rutes a {title()} ?",
|
||||||
"render": "Les rutes d'escalada esportiva aquí tenen com a màxim {climbing:bolts:max} perns. <div class='subtle'>Això és sense estacions d'assegurament i indica quantes cintes necessita un escalador.</div>"
|
"render": "Les rutes d'escalada esportiva aquí tenen com a màxim {climbing:bolts:max} perns. <div class='subtle'>Això és sense estacions d'assegurament i indica quantes cintes necessita un escalador.</div>"
|
||||||
},
|
},
|
||||||
"max_difficulty": {
|
"max_difficulty": {
|
||||||
"question": "Quina és la ruta de grau més alt d'aquí, segons el sistema de classificació francès?",
|
"question": "Quina és la ruta de major aquí, segons el sistema de classificació francès?",
|
||||||
"render": "La nota més alta és {climbing:grade:french:max} segons el sistema francès/belga"
|
"render": "La grau més alt és {climbing:grade:french:max} segons el sistema francès/belga"
|
||||||
},
|
},
|
||||||
"min_difficulty": {
|
"min_difficulty": {
|
||||||
"question": "Quin és el grau de la ruta més fàcil aquí, segons el sistema de classificació francès?",
|
"question": "Quin és el grau de la ruta més fàcil aquí segons el sistema de classificació francès?",
|
||||||
"render": "La nota més baixa és {climbing:grade:french:min} segons el sistema francès/belga"
|
"render": "El grau més baix és {climbing:grade:french:min} segons el sistema francès/belga"
|
||||||
},
|
},
|
||||||
"sportclimbing": {
|
"sportclimbing": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
|
@ -3085,16 +3085,16 @@
|
||||||
"toprope": {
|
"toprope": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "L'escalada propícia és possible aquí"
|
"then": "L'escalada en politja és possible aquí"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "L'escalada propícia no és possible aquí"
|
"then": "L'escalada en politja no és possible aquí"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Hi ha {climbing:toprope} rutes específiques"
|
"then": "Hi ha {climbing:toprope} rutes d'escalada en politja"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "És possible l'escalada propícia aquí?"
|
"question": "És possible l'escalada en politja aquí?"
|
||||||
},
|
},
|
||||||
"trad_climbing": {
|
"trad_climbing": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
|
@ -3105,11 +3105,11 @@
|
||||||
"then": "L'escalada tradicional no és possible aquí"
|
"then": "L'escalada tradicional no és possible aquí"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Hi ha {climbing:traditional} vies d'escalada tradicionals"
|
"then": "Hi ha {climbing:traditional} rutes d'escalada tradicionals"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "És possible l'escalada tradicional aquí?",
|
"question": "És possible l'escalada tradicional aquí?",
|
||||||
"questionHint": "Utilitzant el vostre propi engranatge, p. ex., chocks"
|
"questionHint": "Utilitzant el vostre propi equipament, p. ex., cales"
|
||||||
},
|
},
|
||||||
"website": {
|
"website": {
|
||||||
"question": "Hi ha un lloc web (no oficial) amb més informació (p. ex. topos)?"
|
"question": "Hi ha un lloc web (no oficial) amb més informació (p. ex. topos)?"
|
||||||
|
@ -3150,7 +3150,7 @@
|
||||||
"then": "Una roca d'escalada: una única roca o penya-segat amb una o unes quantes vies d'escalada que es poden escalar amb seguretat sense corda"
|
"then": "Una roca d'escalada: una única roca o penya-segat amb una o unes quantes vies d'escalada que es poden escalar amb seguretat sense corda"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Un cinglera d'escalada - una sola roca o penya-segat amb almenys unes quantes rutes d'escalada"
|
"then": "Un cinglera d'escalada: una sola roca o penya-segat amb almenys unes quantes rutes d'escalada"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Una zona d'escalada amb un o més penya-segats i/o roques"
|
"then": "Una zona d'escalada amb un o més penya-segats i/o roques"
|
||||||
|
@ -3170,7 +3170,7 @@
|
||||||
"title": {
|
"title": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "Trenca d'escalada <b>{name}</b>"
|
"then": "Paret d'escalada <b>{name}</b>"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Àrea d'escalada <b>{name}</b>"
|
"then": "Àrea d'escalada <b>{name}</b>"
|
||||||
|
@ -3194,8 +3194,8 @@
|
||||||
"title": "un club d'escalada"
|
"title": "un club d'escalada"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"description": "Una ONG que treballa per l'escalada",
|
"description": "Una ONG que treballa amb l'escalada",
|
||||||
"title": "un ngo d'escalada"
|
"title": "una ONG d'escalada"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tagRenderings": {
|
"tagRenderings": {
|
||||||
|
@ -3234,78 +3234,78 @@
|
||||||
"then": "Hi ha {climbing:speed} parets d'escalada de velocitat"
|
"then": "Hi ha {climbing:speed} parets d'escalada de velocitat"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Hi ha una paret d'escalada ràpida?"
|
"question": "Hi ha una paret d'escalada de velocitat?"
|
||||||
},
|
},
|
||||||
"auto_belay_lead": {
|
"auto_belay_lead": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "No hi ha relleus automàtics per a l'escalada de plom"
|
"then": "No hi ha asseguraments automàtics per al cap de corda"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Hi ha una sèrie de relleus automàtics per a l'escalada de plom"
|
"then": "Hi ha una sèrie d'asseguraments automàtics per a cada cap de corda"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Hi ha un relleu automàtic per a cada ruta d'escalada de plom"
|
"then": "Hi ha un assegurament automàtic per a cada cap de corda"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Hi ha rèpliques automàtiques per a l'escalada de plom?",
|
"question": "Hi ha asseguraments automàtics per al cap de corda?",
|
||||||
"render": "Hi ha {climbing:autobelay:sport} relleus automàtics per a l'escalada de plom"
|
"render": "Hi ha {climbing:autobelay:sport} asseguraments automàtics per al cap de corda"
|
||||||
},
|
},
|
||||||
"auto_belay_toprope": {
|
"auto_belay_toprope": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "No hi ha relleus automàtics per a la corda superior"
|
"then": "No hi ha asseguraments automàtics per a l'escalada en politja"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Hi ha una sèrie de relleus automàtics per a la corda superior"
|
"then": "Hi ha una sèrie d'asseguraments automàtics per a l'escalada en politja"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Hi ha un relleu automàtic per a cada ruta de la corda superior, però també és possible el relleu manual"
|
"then": "Hi ha un assegurament automàtic per a cada ruta d'escalada en politja, però també és possible el relleu manual"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"then": "Les rutes de corda més altes només es poden escalar en relleu automàtic"
|
"then": "Les rutes d'escalada en politja només es poden escalar en relleu automàtic"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Hi ha belays automàtics per a la corda superior aquí?",
|
"question": "Hi ha relleus automàtics per a l'escalada en politja aquí?",
|
||||||
"questionHint": "Excloent els relleus automàtics que només són per a l'escalada de velocitat",
|
"questionHint": "Excloent els relleus automàtics que només són per a l'escalada de velocitat",
|
||||||
"render": "Hi ha {climbing:autobelay:toprope} dispositius de relleu automàtic per a cordes superiors"
|
"render": "Hi ha {climbing:autobelay:toprope} dispositius de relleu automàtic per a l'escalada en politja"
|
||||||
},
|
},
|
||||||
"belay_device_rental": {
|
"belay_device_rental": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "Els dispositius Belay es proporcionen a cada corda"
|
"then": "Els dispositius d'assegurament es proporcionen a cada corda"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Un dispositiu d'aspiració es pot demanar prestat gratuïtament aquí"
|
"then": "Aquí es pot sol·licitar prestat un dispositiu d'assegurament gratuït"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Es pot llogar un dispositiu de relleu aquí per {service:climbing_belay_device:rental:charge}"
|
"then": "Es pot llogar un dispositiu de relleu aquí per {service:climbing_belay_device:rental:charge}"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"then": "Es pot llogar un dispositiu d'aspiració aquí"
|
"then": "Aquí es pot llogar un dispositiu d'assegurament"
|
||||||
},
|
},
|
||||||
"4": {
|
"4": {
|
||||||
"then": "Un dispositiu de relleu pot llogar <b>no</b> aquí"
|
"then": "Aquí <b>no</b> es pot llogar un dispositiu d'assegurament"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Es pot llogar un aparell de belay aquí per utilitzar al gimnàs?"
|
"question": "Aquí es pot llogar un aparell d'assegurament per utilitzar al gimnàs?"
|
||||||
},
|
},
|
||||||
"harness_rental": {
|
"harness_rental": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "Un arnès d'escalada es pot demanar prestat gratuïtament aquí"
|
"then": "Aquí es pot demanar prestat gratuïtament un arnès d'escalada"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Es pot llogar un arnès d'escalada aquí per {service:climbing_harness:rental:charge}"
|
"then": "Es pot llogar un arnès d'escalada aquí per {service:climbing_harness:rental:charge}"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Es pot llogar un arnès d'escalada aquí"
|
"then": "Aquí es pot llogar un arnès d'escalada"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"then": "Un arnés d'escalada pot <b>no</b> ser llogat aquí"
|
"then": "Aquí <b>no</b> es pot llogar un arnés d'escalada"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Es pot llogar un arnès d'escalada aquí per utilitzar al gimnàs?"
|
"question": "Aquí es pot llogar un arnès d'escalada per utilitzar al gimnàs?"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"question": "Quin és el nom d'aquest gimnàs d'escalada?"
|
"question": "Quin és el nom d'aquest gimnàs d'escalada?"
|
||||||
|
@ -3313,42 +3313,42 @@
|
||||||
"rope_rental": {
|
"rope_rental": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "Una corda d'escalada es pot demanar prestat gratuïtament aquí"
|
"then": "Aquí es pot demanar prestat gratuïtament una corda d'escalada"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Es pot llogar una corda d'escalada aquí per {service:climbing_rope:rental:charge}"
|
"then": "Es pot llogar una corda d'escalada aquí per {service:climbing_rope:rental:charge}"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Es pot llogar una corda d'escalada aquí"
|
"then": "Aquí es pot llogar una corda d'escalada"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"then": "Es pot llogar una corda d'escalada <b>no</b> aquí"
|
"then": "Aquí <b>no</b> es pot llogar una corda d'escalada"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Es pot llogar una corda d'escalada aquí per utilitzar al gimnàs?"
|
"question": "Aquí es pot llogar una corda d'escalada per a utilitzar al gimnàs?"
|
||||||
},
|
},
|
||||||
"shoe_rental": {
|
"shoe_rental": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "Les sabates d'escalada es poden demanar en préstec gratuïtament aquí"
|
"then": "Aquí es poden demanar en préstec gratuïtament sabates d'escalada"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Les sabates d'escalada es poden llogar aquí per {service:climbing_shoes:rental:charge}"
|
"then": "Les sabates d'escalada es poden llogar aquí per {service:climbing_shoes:rental:charge}"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Es poden llogar sabates d'escalada aquí"
|
"then": "Aquí es poden llogar sabates d'escalada"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"then": "Les sabates d'escalada poden llogar-se aquí <b>no</b>"
|
"then": "Aquí <b>no</b> poden llogar-se sabates d'escalada"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Es poden llogar sabates d'escalada aquí per utilitzar al gimnàs?"
|
"question": "Aquí es poden llogar sabates d'escalada per utilitzar al gimnàs?"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "gimnàs d'escalada <strong>{name}</strong>"
|
"then": "Gimnàs d'escalada <strong>{name}</strong>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"render": "Gimnàs d'escalada"
|
"render": "Gimnàs d'escalada"
|
||||||
|
@ -3392,11 +3392,11 @@
|
||||||
"tagRenderings": {
|
"tagRenderings": {
|
||||||
"Difficulty": {
|
"Difficulty": {
|
||||||
"question": "Quin és el grau d'aquesta via d'escalada segons el sistema francès/belga?",
|
"question": "Quin és el grau d'aquesta via d'escalada segons el sistema francès/belga?",
|
||||||
"render": "La qualificació és {climbing:grade:french} segons el sistema francès/belga"
|
"render": "El grau és {climbing:grade:french} segons el sistema francès/belga"
|
||||||
},
|
},
|
||||||
"Length": {
|
"Length": {
|
||||||
"question": "Quant dura aquesta via d'escalada (en metres)?",
|
"question": "Quant dura aquesta via d'escalada (en metres)?",
|
||||||
"render": "Aquesta ruta és {canonical(climbing:length)} llarga"
|
"render": "Aquesta ruta és {canonical(climbing:length)} de llarg"
|
||||||
},
|
},
|
||||||
"Name": {
|
"Name": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
|
@ -3413,11 +3413,11 @@
|
||||||
"bolts": {
|
"bolts": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "Aquesta ruta no està vorejada"
|
"then": "Aquesta ruta no té ancoratges d'anella"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Quants perns té aquesta ruta abans d'arribar a l'ancoratge?",
|
"question": "Quants ancoratges d'anella té aquesta ruta abans d'arribar a l'ancoratge?",
|
||||||
"render": "Aquesta ruta té {climbing:bolts} perns. <div class='subtle'>Això no té estacions d'aspiració i indica quant de ràpid necessita un escalador.</div>"
|
"render": "Aquesta ruta té {climbing:bolts} ancoratges d'anella. <div class='subtle'>Això és sense estacions d'assegurament i indica quantes cintes necessita un escalador.</div>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
|
@ -3443,7 +3443,7 @@
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"description": "Un rellotge visible públicament muntat directament en una paret",
|
"description": "Un rellotge visible públicament muntat directament en una paret",
|
||||||
"title": "un rellotge muntat a la paret, muntat directament en una paret"
|
"title": "un rellotge muntat directament en una paret"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tagRenderings": {
|
"tagRenderings": {
|
||||||
|
@ -3752,13 +3752,13 @@
|
||||||
"then": "Aquest encreuament no té marques"
|
"then": "Aquest encreuament no té marques"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Aquest encreuament té marques zebra"
|
"then": "Aquest pas de vianants té marques de zebra"
|
||||||
},
|
},
|
||||||
"10": {
|
"10": {
|
||||||
"then": "Aquest encreuament té marques zebra en colors alterns"
|
"then": "Aquest pas de vianants té marques de zebra en colors alterns"
|
||||||
},
|
},
|
||||||
"11": {
|
"11": {
|
||||||
"then": "Aquest encreuament té marcacions de doble zebra"
|
"then": "Aquest pas de vianants té marques de zebra doble"
|
||||||
},
|
},
|
||||||
"12": {
|
"12": {
|
||||||
"then": "Aquest encreuament té pictogrames a la carretera"
|
"then": "Aquest encreuament té pictogrames a la carretera"
|
||||||
|
@ -3767,7 +3767,7 @@
|
||||||
"then": "Aquest encreuament té línies a banda i banda de l'encreuament, juntament amb barres que les connecten, amb una interrupció a cada barra"
|
"then": "Aquest encreuament té línies a banda i banda de l'encreuament, juntament amb barres que les connecten, amb una interrupció a cada barra"
|
||||||
},
|
},
|
||||||
"14": {
|
"14": {
|
||||||
"then": "Aquest encreuament té línies dobles a banda i banda de la travessia"
|
"then": "Aquest encreuament té línies dobles a banda i banda del creuament"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Aquest encreuament té marques d'un tipus desconegut"
|
"then": "Aquest encreuament té marques d'un tipus desconegut"
|
||||||
|
@ -3779,23 +3779,23 @@
|
||||||
"then": "Aquest encreuament té línies a banda i banda de l'encreuament, juntament amb barres que els connecten"
|
"then": "Aquest encreuament té línies a banda i banda de l'encreuament, juntament amb barres que els connecten"
|
||||||
},
|
},
|
||||||
"5": {
|
"5": {
|
||||||
"then": "Aquest encreuament ha traçat línies a banda i banda de la travessia"
|
"then": "Aquest encreuament té traçades línies a banda i banda de la travessia"
|
||||||
},
|
},
|
||||||
"6": {
|
"6": {
|
||||||
"then": "Aquest encreuament té línies de punts a banda i banda del encreuament"
|
"then": "Aquest encreuament té línies de punts a banda i banda del encreuament"
|
||||||
},
|
},
|
||||||
"7": {
|
"7": {
|
||||||
"then": "Aquest encreuament està marcat per l'ús d'una superfície de color diferent"
|
"then": "Aquest encreuament està marcat usant una superfície de color diferent"
|
||||||
},
|
},
|
||||||
"8": {
|
"8": {
|
||||||
"then": "Aquest encreuament té línies a banda i banda de l'encreuament, juntament amb barres angletes que les connecten"
|
"then": "Aquest encreuament té línies a banda i banda de l'encreuament, juntament amb barres en diagonal que les connecten"
|
||||||
},
|
},
|
||||||
"9": {
|
"9": {
|
||||||
"then": "Aquest encreuament té marques zebra amb una interrupció en cada barra"
|
"then": "Aquest encreuament té marques zebra amb una interrupció en cada barra"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Quin tipus de marques té aquest encreuament?",
|
"question": "Quin tipus de senyalització té aquest encreuament?",
|
||||||
"render": "Aquest encreuament té {crossing:markings} marques"
|
"render": "Aquest encreuament té marques {crossing:markings}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
|
@ -3868,7 +3868,7 @@
|
||||||
"then": "Utilitzable per a vehicles tot terreny especialitzats: tractor, ATV"
|
"then": "Utilitzable per a vehicles tot terreny especialitzats: tractor, ATV"
|
||||||
},
|
},
|
||||||
"7": {
|
"7": {
|
||||||
"then": "Impassable / Sense vehicle rodat"
|
"then": "Impassable / Cap vehicle amb rodes"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Quina és la suavitat d'aquesta via ciclista?"
|
"question": "Quina és la suavitat d'aquesta via ciclista?"
|
||||||
|
@ -3888,7 +3888,7 @@
|
||||||
"then": "Aquest carril bici està fet de pedra empedrada"
|
"then": "Aquest carril bici està fet de pedra empedrada"
|
||||||
},
|
},
|
||||||
"12": {
|
"12": {
|
||||||
"then": "Aquest carril bici està fet de terra crua"
|
"then": "Aquest carril bici està fet de terra"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Aquesta via ciclista està feta d'asfalt"
|
"then": "Aquesta via ciclista està feta d'asfalt"
|
||||||
|
@ -3956,7 +3956,7 @@
|
||||||
"Surface of the road": {
|
"Surface of the road": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "Aquest carril bici no està endurit"
|
"then": "Aquest carril bici no està paviment"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Aquest carril bici està pavimentat"
|
"then": "Aquest carril bici està pavimentat"
|
||||||
|
@ -3968,22 +3968,22 @@
|
||||||
"then": "Aquest carril bici està fet de pedra empedrada"
|
"then": "Aquest carril bici està fet de pedra empedrada"
|
||||||
},
|
},
|
||||||
"12": {
|
"12": {
|
||||||
"then": "Aquest carril bici està fet de terra crua"
|
"then": "Aquest carril bici està fet de terra"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Aquest carril bici està fet d'asfalt"
|
"then": "Aquest carril bici està fet d'asfalt"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"then": "Aquest carril bici està fet de llises pedres de paviment"
|
"then": "Aquest carril bici està fet adoquins llisos"
|
||||||
},
|
},
|
||||||
"4": {
|
"4": {
|
||||||
"then": "Aquest carril bici està fet de formigó"
|
"then": "Aquest carril bici està fet de formigó"
|
||||||
},
|
},
|
||||||
"5": {
|
"5": {
|
||||||
"then": "Aquest carril bici està fet de llamborda (sense mànigues o sett)"
|
"then": "Aquest carril bici està fet de llambordes (sense tallar o carreu)"
|
||||||
},
|
},
|
||||||
"6": {
|
"6": {
|
||||||
"then": "Aquest carril bici és de pedra empedrada natural i crua"
|
"then": "Aquest carril bici és de pedra empedrada natural sense tallar"
|
||||||
},
|
},
|
||||||
"7": {
|
"7": {
|
||||||
"then": "Aquest carril bici és de pedra empedrada plana i quadrada"
|
"then": "Aquest carril bici és de pedra empedrada plana i quadrada"
|
||||||
|
@ -4013,16 +4013,16 @@
|
||||||
"then": "Utilitzable per rodes robustes; Bicicleta de treking, cotxes, bicitaxi"
|
"then": "Utilitzable per rodes robustes; Bicicleta de treking, cotxes, bicitaxi"
|
||||||
},
|
},
|
||||||
"4": {
|
"4": {
|
||||||
"then": "Utilitzable per a vehicles amb alta habilitació: vehicle off-road lleuger"
|
"then": "Utilitzable per a vehicles amb gran espai lliure al terra: vehicle tot terreny lleuger"
|
||||||
},
|
},
|
||||||
"5": {
|
"5": {
|
||||||
"then": "Utilitzable per a vehicles off-road: vehicle off-road de gran consum"
|
"then": "Utilitzable per a vehicles tot terreny: vehicle tot terreny pesat"
|
||||||
},
|
},
|
||||||
"6": {
|
"6": {
|
||||||
"then": "Utilitzable per a vehicles especialitzats off-road: tractor, ATV"
|
"then": "Utilitzable per a vehicles tot terreny especialitzats: tractor, quad"
|
||||||
},
|
},
|
||||||
"7": {
|
"7": {
|
||||||
"then": "Impassable / Sense vehicle rodat"
|
"then": "Impassable / Cap vehicle amb rodes"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Quina és la suavitat d'aquest carrer?"
|
"question": "Quina és la suavitat d'aquest carrer?"
|
||||||
|
@ -4116,34 +4116,34 @@
|
||||||
"then": "Els ciclomotors han d'utilitzar la via ciclista"
|
"then": "Els ciclomotors han d'utilitzar la via ciclista"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Els acceleradors han d'utilitzar la via"
|
"then": "Les bicicletes de pedaleig assistit han d'utilitzar el carril bici"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Els ciclomotors i els acceleradors han d'utilitzar la via"
|
"then": "Els ciclomotors i bicicletes de pedaleig assistit han d'utilitzar la via"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"then": "Els ciclomotors no estan permesos"
|
"then": "Els ciclomotors no estan permesos"
|
||||||
},
|
},
|
||||||
"4": {
|
"4": {
|
||||||
"then": "No es permet l'ús de peel·les ràpides"
|
"then": "Les bicicletes de pedaleig assistit no estan permeses"
|
||||||
},
|
},
|
||||||
"5": {
|
"5": {
|
||||||
"then": "No es permet l'ús de ciclomotors i acceleradors"
|
"then": "No es permet l'ús de ciclomotors i bicicletes de pedaleig assistit"
|
||||||
},
|
},
|
||||||
"6": {
|
"6": {
|
||||||
"then": "No hi ha cap senyal de trànsit addicional"
|
"then": "No hi ha cap senyal de trànsit addicional"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "El signe de trànsit D7 (<img src='./assets/layers/cyclewaysandroads/trafficsign/be/BelgianroadsignD07.svg' style='width: 1.5em'>) té un signe suplementari?"
|
"question": "El senyal de trànsit D7 (<img src='./assets/layers/cyclewaysandroads/trafficsign/be/BelgianroadsignD07.svg' style='width: 1.5em'>) té un senyal suplementari?"
|
||||||
},
|
},
|
||||||
"cycleways_and_roads-cycleway:buffer": {
|
"cycleways_and_roads-cycleway:buffer": {
|
||||||
"question": "Quina és la distància entre el carril bici i la carretera?",
|
"question": "Quina és la distància entre el carril bici i la carretera?",
|
||||||
"render": "La memòria intermèdia a més d'aquesta pista és {cycleway:buffer} m"
|
"render": "L'espai junt a aquest carril bici és de {cycleway:buffer} m"
|
||||||
},
|
},
|
||||||
"incline": {
|
"incline": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "Hi ha (probablement) cap inclinació aquí"
|
"then": "Probablement aquí no hi ha inclinació"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Aquesta carretera té pendent"
|
"then": "Aquesta carretera té pendent"
|
||||||
|
@ -4213,35 +4213,35 @@
|
||||||
},
|
},
|
||||||
"cyclist_waiting_aid": {
|
"cyclist_waiting_aid": {
|
||||||
"description": "Diverses infraestructures que ajuden els ciclistes mentre esperen a un semàfor.",
|
"description": "Diverses infraestructures que ajuden els ciclistes mentre esperen a un semàfor.",
|
||||||
"name": "Ciclista que espera ajuda",
|
"name": "Ajudes a l'espera dels ciclistes",
|
||||||
"presets": {
|
"presets": {
|
||||||
"0": {
|
"0": {
|
||||||
"description": "Un reposapeus, barana o altres ajudes, per millorar la comoditat mentre s'espera als semàfors",
|
"description": "Un reposapeus, barana o altres ajudes, per millorar la comoditat mentre s'espera als semàfors",
|
||||||
"title": "una ajuda d'espera ciclista"
|
"title": "una ajuda a l'espera del ciclista"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tagRenderings": {
|
"tagRenderings": {
|
||||||
"direction": {
|
"direction": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "Aquesta ajuda d'espera es pot utilitzar en avançar d'aquesta manera"
|
"then": "Aquesta ajuda a l'espera es pot utilitzar quan s'avança en aquesta via"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Aquesta ajuda d'espera es pot utilitzar en retrocedir d'aquesta manera"
|
"then": "Aquesta ajuda a l'espera es pot utilitzar quan es retrocedeix per aquest camí"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"render": "Aquesta ajuda d'espera es pot utilitzar en anar en direcció {direction}"
|
"render": "Aquesta ajuda a l'espera es pot utilitzar quan es va en direcció {direction}"
|
||||||
},
|
},
|
||||||
"side": {
|
"side": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "Aquesta ajuda d'espera es troba a la banda esquerra"
|
"then": "Aquesta ajuda a l'espera es troba a la banda esquerra"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Aquesta ajuda d'espera es troba al costat dret"
|
"then": "Aquesta ajuda a l'espera es troba al costat dret"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Hi ha ajudes d'espera a banda i banda de la carretera"
|
"then": "Hi ha ajudes a l'espera a ambdós costats de la carretera"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "A quin costat de la carretera es troba?"
|
"question": "A quin costat de la carretera es troba?"
|
||||||
|
@ -4252,14 +4252,14 @@
|
||||||
"then": "Hi ha un tauler o una clavilla per descansar el peu aquí"
|
"then": "Hi ha un tauler o una clavilla per descansar el peu aquí"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Hi ha un tren o una nansa per aferrar-se aquí"
|
"then": "Hi ha una barana o una nansa per aferrar-se aquí"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Quin tipus de components té aquesta ajuda d'espera?"
|
"question": "Quin tipus de components té aquesta ajuda a l'espera?"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"render": "Ciclista esperant ajuda"
|
"render": "Ajuda per a ciclistes en espera"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"defibrillator": {
|
"defibrillator": {
|
||||||
|
@ -4474,7 +4474,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dog_toilet": {
|
"dog_toilet": {
|
||||||
"description": "Un vàter de gos és una instal·lació designada per a gossos per orinar i excretar. Aquest pot ser un pegat d'herba designat i senyalitzat, un pou de sorra o una zona tancada.",
|
"description": "Un vàter de gos és una instal·lació designada per a gossos per orinar i excretar. Pot ser un tros d'herba senyalitzat, un pou de sorra o una zona tancada.",
|
||||||
"name": "Vàters per a gossos",
|
"name": "Vàters per a gossos",
|
||||||
"presets": {
|
"presets": {
|
||||||
"0": {
|
"0": {
|
||||||
|
@ -4488,7 +4488,7 @@
|
||||||
"then": "Hi ha una tanca al voltant d'aquest vàter per a gossos"
|
"then": "Hi ha una tanca al voltant d'aquest vàter per a gossos"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Hi ha una tanca al voltant d'aquest vàter de gos"
|
"then": "Hi ha una esbardissa al voltant d'aquest vàter de gos"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "Hi ha una barrera al voltant d'aquest vàter per a gossos"
|
"then": "Hi ha una barrera al voltant d'aquest vàter per a gossos"
|
||||||
|
@ -4593,7 +4593,7 @@
|
||||||
"then": "Aquesta font d'aigua potable està tancada"
|
"then": "Aquesta font d'aigua potable està tancada"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"then": "Aquesta aigua potable està tancada permanentment"
|
"then": "Aquesta font d'aigua potable està tancada permanentment"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Aquest punt d'aigua potable continua operatiu?",
|
"question": "Aquest punt d'aigua potable continua operatiu?",
|
||||||
|
@ -4649,16 +4649,16 @@
|
||||||
"then": "Aquí es proporciona aigua freda"
|
"then": "Aquí es proporciona aigua freda"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "L'aigua freda activa està disponible aquí"
|
"then": "Aquí hi ha aigua refrigerada activament"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"then": "L'aigua a temperatura ambient (sense refrigeració activa ni calefacció) està disponible aquí"
|
"then": "L'aigua a temperatura ambient (sense refrigeració ni calefacció activa) està disponible aquí"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"then": "Aquí es proporciona aigua calenta; l'aigua no és perillosament calenta"
|
"then": "Aquí es proporciona aigua calenta; l'aigua no és perillosament calenta"
|
||||||
},
|
},
|
||||||
"4": {
|
"4": {
|
||||||
"then": "L'aigua calenta es proporciona aquí"
|
"then": "Aquí es proporciona aigua calenta"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Hi ha aigua freda aquí?"
|
"question": "Hi ha aigua freda aquí?"
|
||||||
|
@ -4666,7 +4666,7 @@
|
||||||
"type": {
|
"type": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
"then": "Aquesta és una font de bombolles. Un raig d'aigua per beure s'envia cap amunt, normalment controlat per un botó d'empenta."
|
"then": "Aquesta és una font de raig. Un raig d'aigua per beure s'envia cap amunt, normalment controlat per un botó d'empenta."
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Aquest és un punt de reomplida d'ampolles on l'aigua s'envia cap avall, normalment controlat per un polsador o un sensor de moviment. Beure directament del raig pot ser molt difícil o impossible."
|
"then": "Aquest és un punt de reomplida d'ampolles on l'aigua s'envia cap avall, normalment controlat per un polsador o un sensor de moviment. Beure directament del raig pot ser molt difícil o impossible."
|
||||||
|
@ -4842,7 +4842,7 @@
|
||||||
"then": "Aquest ascensor no té sortida de veu"
|
"then": "Aquest ascensor no té sortida de veu"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Té aquesta sortida de veu d'ascensor?",
|
"question": "Té sortida de veu aquest ascensor?",
|
||||||
"questionHint": "P. e. anuncia la planta actual"
|
"questionHint": "P. e. anuncia la planta actual"
|
||||||
},
|
},
|
||||||
"tactile_writing_available": {
|
"tactile_writing_available": {
|
||||||
|
@ -5114,9 +5114,9 @@
|
||||||
"then": "L'origen d'aquest nom és desconegut en tota la literatura"
|
"then": "L'origen d'aquest nom és desconegut en tota la literatura"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "De què porta aquest objecte?",
|
"question": "A que es deu el nom d'aquest objecte?",
|
||||||
"questionHint": "Això podria estar escrit al cartell del nom del carrer",
|
"questionHint": "Això podria estar escrit al cartell del nom del carrer",
|
||||||
"render": "Anomenat després de {name:etymology}"
|
"render": "Anomenat en honor a {name:etymology}"
|
||||||
},
|
},
|
||||||
"street-name-sign-image": {
|
"street-name-sign-image": {
|
||||||
"render": "{image_carousel(image:streetsign)}<br/>{image_upload(image:streetsign, Afegeix una imatge de la placa amb el nom del carrer)}"
|
"render": "{image_carousel(image:streetsign)}<br/>{image_upload(image:streetsign, Afegeix una imatge de la placa amb el nom del carrer)}"
|
||||||
|
@ -5125,11 +5125,11 @@
|
||||||
"render": "Existeix un article de la Viquipèdia sobre aquest <b>carrer</b>:<br/>{wikipedia():max-height:25rem}"
|
"render": "Existeix un article de la Viquipèdia sobre aquest <b>carrer</b>:<br/>{wikipedia():max-height:25rem}"
|
||||||
},
|
},
|
||||||
"wikipedia-etymology": {
|
"wikipedia-etymology": {
|
||||||
"question": "Quin és l'element de Wikidata que porta el nom d'aquest objecte?",
|
"question": "Quin és l'element de Wikidata en honor al qual s'anomena aquest objecte?",
|
||||||
"render": "<h3> Article de la Viquipèdia del nom donant</h3>{wikipedia(name:etymology:wikidata):max-height:20rem}"
|
"render": "<h3> Article de la Viquipèdia del nom donant</h3>{wikipedia(name:etymology:wikidata):max-height:20rem}"
|
||||||
},
|
},
|
||||||
"zoeken op inventaris onroerend erfgoed": {
|
"zoeken op inventaris onroerend erfgoed": {
|
||||||
"render": "<a href='https://inventaris.onroerenderfgoed.be/erfgoedobjecten?tekst={name}' target='blank'>Cerca en inventaris onroerend erfgoed</a>"
|
"render": "<a href='https://inventaris.onroerenderfgoed.be/erfgoedobjecten?tekst={name}' target='_blank'>Cerca en inventaris onroerend erfgoed</a>"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -5165,7 +5165,7 @@
|
||||||
"0": {
|
"0": {
|
||||||
"options": {
|
"options": {
|
||||||
"0": {
|
"0": {
|
||||||
"question": "Obert ara"
|
"question": "Ara obert"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -5179,10 +5179,10 @@
|
||||||
"10": {
|
"10": {
|
||||||
"options": {
|
"options": {
|
||||||
"0": {
|
"0": {
|
||||||
"question": "No hi ha preferència cap als gossos"
|
"question": "Sense preferència pels gossos"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"question": "Permesos"
|
"question": "Es permeten gossos"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"question": "No s'admeten gossos"
|
"question": "No s'admeten gossos"
|
||||||
|
@ -5192,21 +5192,21 @@
|
||||||
"11": {
|
"11": {
|
||||||
"options": {
|
"options": {
|
||||||
"0": {
|
"0": {
|
||||||
"question": "Ofertes d'internet"
|
"question": "Ofereix internet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"12": {
|
"12": {
|
||||||
"options": {
|
"options": {
|
||||||
"0": {
|
"0": {
|
||||||
"question": "Ofertes d'electricitat"
|
"question": "Ofereix electricitat"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"13": {
|
"13": {
|
||||||
"options": {
|
"options": {
|
||||||
"0": {
|
"0": {
|
||||||
"question": "Té una oferta sense sucre"
|
"question": "Disposa d'oferta sense sucre"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -5220,7 +5220,7 @@
|
||||||
"15": {
|
"15": {
|
||||||
"options": {
|
"options": {
|
||||||
"0": {
|
"0": {
|
||||||
"question": "Té una oferta lliure de lactosa"
|
"question": "Disposa d'una oferta lliure de lactosa"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -5367,11 +5367,11 @@
|
||||||
},
|
},
|
||||||
"firepit": {
|
"firepit": {
|
||||||
"description": "Un lloc a l'aire lliure per fer un foc, normalment obert al públic.",
|
"description": "Un lloc a l'aire lliure per fer un foc, normalment obert al públic.",
|
||||||
"name": "Aixeta",
|
"name": "Foguera",
|
||||||
"presets": {
|
"presets": {
|
||||||
"0": {
|
"0": {
|
||||||
"description": "Un lloc a l'aire lliure per fer un foc, normalment obert al públic.",
|
"description": "Un lloc a l'aire lliure per fer un foc, normalment obert al públic.",
|
||||||
"title": "Aixeta"
|
"title": "Foguera"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tagRenderings": {
|
"tagRenderings": {
|
||||||
|
@ -5393,19 +5393,19 @@
|
||||||
"then": "Accés només per a clients"
|
"then": "Accés només per a clients"
|
||||||
},
|
},
|
||||||
"5": {
|
"5": {
|
||||||
"then": "Accés només per autoritzat"
|
"then": "Accés només per a autoritzats"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"question": "Quin és l'accés permès?"
|
"question": "Quin és l'accés permès?"
|
||||||
},
|
},
|
||||||
"seasonal": {
|
"seasonal": {
|
||||||
"override": {
|
"override": {
|
||||||
"question": "Està disponible la cabina durant tot l'any?"
|
"question": "Està disponible la foguera durant tot l'any?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"render": "Aixeta"
|
"render": "Foguera"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"fitness_centre": {
|
"fitness_centre": {
|
||||||
|
|
|
@ -2065,9 +2065,6 @@
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
|
||||||
"then": "{name}"
|
|
||||||
},
|
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Vogelkijkhut {name}"
|
"then": "Vogelkijkhut {name}"
|
||||||
},
|
},
|
||||||
|
@ -6383,11 +6380,6 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"mappings": {
|
|
||||||
"0": {
|
|
||||||
"then": "{name}"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"render": "Natuurgebied"
|
"render": "Natuurgebied"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -6919,21 +6911,6 @@
|
||||||
"render": "Picknicktafel"
|
"render": "Picknicktafel"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"play_forest": {
|
|
||||||
"description": "Een speelbos is een vrij toegankelijke zone in een bos",
|
|
||||||
"name": "Speelbossen",
|
|
||||||
"title": {
|
|
||||||
"mappings": {
|
|
||||||
"0": {
|
|
||||||
"then": "{name}"
|
|
||||||
},
|
|
||||||
"1": {
|
|
||||||
"then": "Speelbos {name}"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"render": "Speelbos"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"playground": {
|
"playground": {
|
||||||
"deletion": {
|
"deletion": {
|
||||||
"nonDeleteMappings": {
|
"nonDeleteMappings": {
|
||||||
|
@ -8587,9 +8564,6 @@
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
|
||||||
"then": "{name}"
|
|
||||||
},
|
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Voetpad"
|
"then": "Voetpad"
|
||||||
},
|
},
|
||||||
|
@ -10755,25 +10729,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"village_green": {
|
"village_green": {
|
||||||
"description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)",
|
"description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)"
|
||||||
"name": "Speelweide",
|
|
||||||
"title": {
|
|
||||||
"mappings": {
|
|
||||||
"0": {
|
|
||||||
"then": "{name}"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"render": "Speelweide"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"visitor_information_centre": {
|
"visitor_information_centre": {
|
||||||
"description": "Een bezoekerscentrum biedt informatie over een specifieke attractie of bezienswaardigheid waar het is gevestigd.",
|
"description": "Een bezoekerscentrum biedt informatie over een specifieke attractie of bezienswaardigheid waar het is gevestigd.",
|
||||||
"name": "Bezoekerscentrum",
|
"name": "Bezoekerscentrum",
|
||||||
"title": {
|
"title": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
|
||||||
"then": "{name:nl}"
|
|
||||||
},
|
|
||||||
"1": {
|
"1": {
|
||||||
"then": "{name}"
|
"then": "{name}"
|
||||||
}
|
}
|
||||||
|
@ -11003,4 +10965,4 @@
|
||||||
"render": "windturbine"
|
"render": "windturbine"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -838,7 +838,8 @@
|
||||||
"question": "Як називається цей бізнес?",
|
"question": "Як називається цей бізнес?",
|
||||||
"render": "Цей бізнес називається {name}"
|
"render": "Цей бізнес називається {name}"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"name": "Кафе та паби"
|
||||||
},
|
},
|
||||||
"caravansites": {
|
"caravansites": {
|
||||||
"tagRenderings": {
|
"tagRenderings": {
|
||||||
|
@ -2999,4 +3000,4 @@
|
||||||
"render": "Утилізація відходів"
|
"render": "Утилізація відходів"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
15
package-lock.json
generated
15
package-lock.json
generated
|
@ -47,6 +47,7 @@
|
||||||
"fake-dom": "^1.0.4",
|
"fake-dom": "^1.0.4",
|
||||||
"flowbite-svelte": "^0.47.4",
|
"flowbite-svelte": "^0.47.4",
|
||||||
"follow-redirects": "^1.15.9",
|
"follow-redirects": "^1.15.9",
|
||||||
|
"fuse.js": "^7.1.0",
|
||||||
"geojson2svg": "^2.0.2",
|
"geojson2svg": "^2.0.2",
|
||||||
"html-to-image": "^1.11.11",
|
"html-to-image": "^1.11.11",
|
||||||
"i18next-client": "^1.11.4",
|
"i18next-client": "^1.11.4",
|
||||||
|
@ -15781,6 +15782,15 @@
|
||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/fuse.js": {
|
||||||
|
"version": "7.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz",
|
||||||
|
"integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/gensync": {
|
"node_modules/gensync": {
|
||||||
"version": "1.0.0-beta.2",
|
"version": "1.0.0-beta.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
@ -41193,6 +41203,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
|
||||||
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
|
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
|
||||||
},
|
},
|
||||||
|
"fuse.js": {
|
||||||
|
"version": "7.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz",
|
||||||
|
"integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ=="
|
||||||
|
},
|
||||||
"gensync": {
|
"gensync": {
|
||||||
"version": "1.0.0-beta.2",
|
"version": "1.0.0-beta.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
|
|
@ -103,6 +103,7 @@
|
||||||
"refresh:layeroverview": "export NODE_OPTIONS=\"--max-old-space-size=8192\" && vite-node scripts/generateLayerOverview.ts -- --force",
|
"refresh:layeroverview": "export NODE_OPTIONS=\"--max-old-space-size=8192\" && vite-node scripts/generateLayerOverview.ts -- --force",
|
||||||
"generate:licenses": "vite-node scripts/generateLicenseInfo.ts -- --no-fail",
|
"generate:licenses": "vite-node scripts/generateLicenseInfo.ts -- --no-fail",
|
||||||
"query:licenses": "vite-node scripts/generateLicenseInfo.ts -- --query && npm run generate:licenses",
|
"query:licenses": "vite-node scripts/generateLicenseInfo.ts -- --query && npm run generate:licenses",
|
||||||
|
"clean:licenses": "find . -type f -name \"*.license\" -exec rm -f {} +",
|
||||||
"generate:contributor-list": "vite-node scripts/generateContributors.ts",
|
"generate:contributor-list": "vite-node scripts/generateContributors.ts",
|
||||||
"generate:service-worker": "tsc src/service-worker.ts --outFile public/service-worker.js && git_hash=$(git rev-parse HEAD) && sed -i.bak \"s/GITHUB-COMMIT/$git_hash/\" public/service-worker.js && rm public/service-worker.js.bak",
|
"generate:service-worker": "tsc src/service-worker.ts --outFile public/service-worker.js && git_hash=$(git rev-parse HEAD) && sed -i.bak \"s/GITHUB-COMMIT/$git_hash/\" public/service-worker.js && rm public/service-worker.js.bak",
|
||||||
"reset:layeroverview": "npm run prep:layeroverview && npm run generate:layeroverview && npm run refresh:layeroverview",
|
"reset:layeroverview": "npm run prep:layeroverview && npm run generate:layeroverview && npm run refresh:layeroverview",
|
||||||
|
@ -208,6 +209,7 @@
|
||||||
"fake-dom": "^1.0.4",
|
"fake-dom": "^1.0.4",
|
||||||
"flowbite-svelte": "^0.47.4",
|
"flowbite-svelte": "^0.47.4",
|
||||||
"follow-redirects": "^1.15.9",
|
"follow-redirects": "^1.15.9",
|
||||||
|
"fuse.js": "^7.1.0",
|
||||||
"geojson2svg": "^2.0.2",
|
"geojson2svg": "^2.0.2",
|
||||||
"html-to-image": "^1.11.11",
|
"html-to-image": "^1.11.11",
|
||||||
"i18next-client": "^1.11.4",
|
"i18next-client": "^1.11.4",
|
||||||
|
|
|
@ -1140,10 +1140,6 @@ input[type="range"].range-lg::-moz-range-thumb {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|
||||||
.\!relative {
|
|
||||||
position: relative !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.relative {
|
.relative {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
@ -2565,6 +2561,10 @@ input[type="range"].range-lg::-moz-range-thumb {
|
||||||
grid-template-columns: repeat(7, minmax(0, 1fr));
|
grid-template-columns: repeat(7, minmax(0, 1fr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.grid-rows-2 {
|
||||||
|
grid-template-rows: repeat(2, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
.flex-row {
|
.flex-row {
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
|
@ -8729,6 +8729,10 @@ svg.apply-fill path {
|
||||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.md\:grid-rows-1 {
|
||||||
|
grid-template-rows: repeat(1, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
.md\:flex-row {
|
.md\:flex-row {
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,16 +9,12 @@ import {
|
||||||
DoesImageExist,
|
DoesImageExist,
|
||||||
PrevalidateTheme,
|
PrevalidateTheme,
|
||||||
ValidateLayer,
|
ValidateLayer,
|
||||||
ValidateThemeEnsemble,
|
ValidateThemeEnsemble
|
||||||
} from "../src/Models/ThemeConfig/Conversion/Validation"
|
} from "../src/Models/ThemeConfig/Conversion/Validation"
|
||||||
import { Translation } from "../src/UI/i18n/Translation"
|
import { Translation } from "../src/UI/i18n/Translation"
|
||||||
import { PrepareLayer } from "../src/Models/ThemeConfig/Conversion/PrepareLayer"
|
import { PrepareLayer } from "../src/Models/ThemeConfig/Conversion/PrepareLayer"
|
||||||
import { PrepareTheme } from "../src/Models/ThemeConfig/Conversion/PrepareTheme"
|
import { PrepareTheme } from "../src/Models/ThemeConfig/Conversion/PrepareTheme"
|
||||||
import {
|
import { Conversion, DesugaringContext, DesugaringStep } from "../src/Models/ThemeConfig/Conversion/Conversion"
|
||||||
Conversion,
|
|
||||||
DesugaringContext,
|
|
||||||
DesugaringStep,
|
|
||||||
} from "../src/Models/ThemeConfig/Conversion/Conversion"
|
|
||||||
import { Utils } from "../src/Utils"
|
import { Utils } from "../src/Utils"
|
||||||
import Script from "./Script"
|
import Script from "./Script"
|
||||||
import { AllSharedLayers } from "../src/Customizations/AllSharedLayers"
|
import { AllSharedLayers } from "../src/Customizations/AllSharedLayers"
|
||||||
|
@ -267,6 +263,7 @@ class LayerOverviewUtils extends Script {
|
||||||
addWord(lang, tr[lang])
|
addWord(lang, tr[lang])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addWord("*", l.id)
|
addWord("*", l.id)
|
||||||
addWords(l.title)
|
addWords(l.title)
|
||||||
addWords(l.description)
|
addWords(l.description)
|
||||||
|
@ -286,9 +283,9 @@ class LayerOverviewUtils extends Script {
|
||||||
| LayerConfigJson
|
| LayerConfigJson
|
||||||
| string
|
| string
|
||||||
| {
|
| {
|
||||||
builtin
|
builtin
|
||||||
}
|
}
|
||||||
)[]
|
)[]
|
||||||
}[],
|
}[],
|
||||||
sharedLayers: Map<string, LayerConfigJson>
|
sharedLayers: Map<string, LayerConfigJson>
|
||||||
) {
|
) {
|
||||||
|
@ -317,7 +314,10 @@ class LayerOverviewUtils extends Script {
|
||||||
hideFromOverview: theme.hideFromOverview,
|
hideFromOverview: theme.hideFromOverview,
|
||||||
mustHaveLanguage: theme.mustHaveLanguage,
|
mustHaveLanguage: theme.mustHaveLanguage,
|
||||||
keywords,
|
keywords,
|
||||||
layers: theme.layers.filter((l) => sharedLayers.has(l["id"])).map((l) => l["id"]),
|
layers: (<LayerConfigJson[]>theme.layers)
|
||||||
|
.filter((l) => sharedLayers.has(l.id))
|
||||||
|
.filter(l => l.minzoom < 17)
|
||||||
|
.map((l) => l.id)
|
||||||
}
|
}
|
||||||
perId.set(data.id, data)
|
perId.set(data.id, data)
|
||||||
}
|
}
|
||||||
|
@ -392,10 +392,10 @@ class LayerOverviewUtils extends Script {
|
||||||
tagRenderings: bootstrapTagRenderings,
|
tagRenderings: bootstrapTagRenderings,
|
||||||
tagRenderingOrder: bootstrapTagRenderingsOrder,
|
tagRenderingOrder: bootstrapTagRenderingsOrder,
|
||||||
sharedLayers: null,
|
sharedLayers: null,
|
||||||
publicLayers: null,
|
publicLayers: null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
addTagRenderingsToContext: true,
|
addTagRenderingsToContext: true
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -431,7 +431,7 @@ class LayerOverviewUtils extends Script {
|
||||||
"src/assets/SocialImageBanner.svg",
|
"src/assets/SocialImageBanner.svg",
|
||||||
"src/assets/SocialImageRepo.svg",
|
"src/assets/SocialImageRepo.svg",
|
||||||
"src/assets/svg/osm-logo.svg",
|
"src/assets/svg/osm-logo.svg",
|
||||||
"src/assets/templates/*",
|
"src/assets/templates/*"
|
||||||
]
|
]
|
||||||
for (const path of allSvgs) {
|
for (const path of allSvgs) {
|
||||||
if (
|
if (
|
||||||
|
@ -456,8 +456,8 @@ class LayerOverviewUtils extends Script {
|
||||||
if (contents.indexOf("<text") > 0) {
|
if (contents.indexOf("<text") > 0) {
|
||||||
console.warn(
|
console.warn(
|
||||||
"The SVG at " +
|
"The SVG at " +
|
||||||
path +
|
path +
|
||||||
" contains a `text`-tag. This is highly discouraged. Every machine viewing your theme has their own font libary, and the font you choose might not be present, resulting in a different font being rendered. Solution: open your .svg in inkscape (or another program), select the text and convert it to a path"
|
" contains a `text`-tag. This is highly discouraged. Every machine viewing your theme has their own font libary, and the font you choose might not be present, resulting in a different font being rendered. Solution: open your .svg in inkscape (or another program), select the text and convert it to a path"
|
||||||
)
|
)
|
||||||
errCount++
|
errCount++
|
||||||
}
|
}
|
||||||
|
@ -529,7 +529,7 @@ class LayerOverviewUtils extends Script {
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
layers: Array.from(sharedLayers.values()).filter(
|
layers: Array.from(sharedLayers.values()).filter(
|
||||||
(l) => !(l["#no-index"] === "yes")
|
(l) => !(l["#no-index"] === "yes")
|
||||||
),
|
)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -546,11 +546,11 @@ class LayerOverviewUtils extends Script {
|
||||||
// mapcomplete-changes shows an icon for each corresponding mapcomplete-theme
|
// mapcomplete-changes shows an icon for each corresponding mapcomplete-theme
|
||||||
const iconsPerTheme = Array.from(sharedThemes.values()).map((th) => ({
|
const iconsPerTheme = Array.from(sharedThemes.values()).map((th) => ({
|
||||||
if: "theme=" + th.id,
|
if: "theme=" + th.id,
|
||||||
then: th.icon,
|
then: th.icon
|
||||||
}))
|
}))
|
||||||
const proto: ThemeConfigJson = JSON.parse(
|
const proto: ThemeConfigJson = JSON.parse(
|
||||||
readFileSync("./assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json", {
|
readFileSync("./assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json", {
|
||||||
encoding: "utf8",
|
encoding: "utf8"
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
const protolayer = <LayerConfigJson>(
|
const protolayer = <LayerConfigJson>(
|
||||||
|
@ -566,7 +566,7 @@ class LayerOverviewUtils extends Script {
|
||||||
new DetectDuplicateFilters().convertStrict(
|
new DetectDuplicateFilters().convertStrict(
|
||||||
{
|
{
|
||||||
layers: ScriptUtils.getLayerFiles().map((f) => f.parsed),
|
layers: ScriptUtils.getLayerFiles().map((f) => f.parsed),
|
||||||
themes: ScriptUtils.getThemeFiles().map((f) => f.parsed),
|
themes: ScriptUtils.getThemeFiles().map((f) => f.parsed)
|
||||||
},
|
},
|
||||||
ConversionContext.construct([], [])
|
ConversionContext.construct([], [])
|
||||||
)
|
)
|
||||||
|
@ -614,7 +614,7 @@ class LayerOverviewUtils extends Script {
|
||||||
const state: DesugaringContext = {
|
const state: DesugaringContext = {
|
||||||
tagRenderings: LayerOverviewUtils.asDict(sharedTagRenderings),
|
tagRenderings: LayerOverviewUtils.asDict(sharedTagRenderings),
|
||||||
tagRenderingOrder: sharedTagRenderings.map((tr) => tr.id),
|
tagRenderingOrder: sharedTagRenderings.map((tr) => tr.id),
|
||||||
sharedLayers: AllSharedLayers.getSharedLayersConfigs(),
|
sharedLayers: AllSharedLayers.getSharedLayersConfigs()
|
||||||
}
|
}
|
||||||
const sharedLayers = new Map<string, LayerConfigJson>()
|
const sharedLayers = new Map<string, LayerConfigJson>()
|
||||||
const prepLayer = new PrepareLayer(state)
|
const prepLayer = new PrepareLayer(state)
|
||||||
|
@ -659,12 +659,12 @@ class LayerOverviewUtils extends Script {
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
"Recompiled layers " +
|
"Recompiled layers " +
|
||||||
recompiledLayers.join(", ") +
|
recompiledLayers.join(", ") +
|
||||||
" and skipped " +
|
" and skipped " +
|
||||||
skippedLayers.length +
|
skippedLayers.length +
|
||||||
" layers. Detected " +
|
" layers. Detected " +
|
||||||
warningCount +
|
warningCount +
|
||||||
" warnings"
|
" warnings"
|
||||||
)
|
)
|
||||||
// We always need the calculated tags of 'usersettings', so we export them separately
|
// We always need the calculated tags of 'usersettings', so we export them separately
|
||||||
this.extractJavascriptCodeForLayer(
|
this.extractJavascriptCodeForLayer(
|
||||||
|
@ -686,11 +686,11 @@ class LayerOverviewUtils extends Script {
|
||||||
private extractJavascriptCode(themeFile: ThemeConfigJson) {
|
private extractJavascriptCode(themeFile: ThemeConfigJson) {
|
||||||
const allCode = [
|
const allCode = [
|
||||||
"import {Feature} from 'geojson'",
|
"import {Feature} from 'geojson'",
|
||||||
'import { ExtraFuncType } from "../../../Logic/ExtraFunctions";',
|
"import { ExtraFuncType } from \"../../../Logic/ExtraFunctions\";",
|
||||||
'import { Utils } from "../../../Utils"',
|
"import { Utils } from \"../../../Utils\"",
|
||||||
"export class ThemeMetaTagging {",
|
"export class ThemeMetaTagging {",
|
||||||
" public static readonly themeName = " + JSON.stringify(themeFile.id),
|
" public static readonly themeName = " + JSON.stringify(themeFile.id),
|
||||||
"",
|
""
|
||||||
]
|
]
|
||||||
for (const layer of themeFile.layers) {
|
for (const layer of themeFile.layers) {
|
||||||
const l = <LayerConfigJson>layer
|
const l = <LayerConfigJson>layer
|
||||||
|
@ -699,8 +699,8 @@ class LayerOverviewUtils extends Script {
|
||||||
|
|
||||||
allCode.push(
|
allCode.push(
|
||||||
" public metaTaggging_for_" +
|
" public metaTaggging_for_" +
|
||||||
id +
|
id +
|
||||||
"(feat: Feature, helperFunctions: Record<ExtraFuncType, (feature: Feature) => Function>) {"
|
"(feat: Feature, helperFunctions: Record<ExtraFuncType, (feature: Feature) => Function>) {"
|
||||||
)
|
)
|
||||||
allCode.push(" const {" + ExtraFunctions.types.join(", ") + "} = helperFunctions")
|
allCode.push(" const {" + ExtraFunctions.types.join(", ") + "} = helperFunctions")
|
||||||
for (const line of code) {
|
for (const line of code) {
|
||||||
|
@ -711,10 +711,10 @@ class LayerOverviewUtils extends Script {
|
||||||
if (!isStrict) {
|
if (!isStrict) {
|
||||||
allCode.push(
|
allCode.push(
|
||||||
" Utils.AddLazyProperty(feat.properties, '" +
|
" Utils.AddLazyProperty(feat.properties, '" +
|
||||||
attributeName +
|
attributeName +
|
||||||
"', () => " +
|
"', () => " +
|
||||||
expression +
|
expression +
|
||||||
" ) "
|
" ) "
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
attributeName = attributeName.substring(0, attributeName.length - 1).trim()
|
attributeName = attributeName.substring(0, attributeName.length - 1).trim()
|
||||||
|
@ -754,7 +754,7 @@ class LayerOverviewUtils extends Script {
|
||||||
`/** This code is autogenerated - do not edit. Edit ./assets/layers/${l?.id}/${l?.id}.json instead */`,
|
`/** This code is autogenerated - do not edit. Edit ./assets/layers/${l?.id}/${l?.id}.json instead */`,
|
||||||
"export class ThemeMetaTagging {",
|
"export class ThemeMetaTagging {",
|
||||||
" public static readonly themeName = " + JSON.stringify(l.id),
|
" public static readonly themeName = " + JSON.stringify(l.id),
|
||||||
"",
|
""
|
||||||
]
|
]
|
||||||
const code = l.calculatedTags ?? []
|
const code = l.calculatedTags ?? []
|
||||||
|
|
||||||
|
@ -769,10 +769,10 @@ class LayerOverviewUtils extends Script {
|
||||||
if (!isStrict) {
|
if (!isStrict) {
|
||||||
allCode.push(
|
allCode.push(
|
||||||
" Utils.AddLazyProperty(feat.properties, '" +
|
" Utils.AddLazyProperty(feat.properties, '" +
|
||||||
attributeName +
|
attributeName +
|
||||||
"', () => " +
|
"', () => " +
|
||||||
expression +
|
expression +
|
||||||
" ) "
|
" ) "
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
attributeName = attributeName.substring(0, attributeName.length - 2).trim()
|
attributeName = attributeName.substring(0, attributeName.length - 2).trim()
|
||||||
|
@ -813,7 +813,7 @@ class LayerOverviewUtils extends Script {
|
||||||
sharedLayers,
|
sharedLayers,
|
||||||
tagRenderings: LayerOverviewUtils.asDict(trs),
|
tagRenderings: LayerOverviewUtils.asDict(trs),
|
||||||
tagRenderingOrder: trs.map((tr) => tr.id),
|
tagRenderingOrder: trs.map((tr) => tr.id),
|
||||||
publicLayers,
|
publicLayers
|
||||||
}
|
}
|
||||||
const knownTagRenderings = new Set<string>()
|
const knownTagRenderings = new Set<string>()
|
||||||
convertState.tagRenderings.forEach((_, key) => knownTagRenderings.add(key))
|
convertState.tagRenderings.forEach((_, key) => knownTagRenderings.add(key))
|
||||||
|
@ -870,7 +870,7 @@ class LayerOverviewUtils extends Script {
|
||||||
)
|
)
|
||||||
try {
|
try {
|
||||||
themeFile = new PrepareTheme(convertState, {
|
themeFile = new PrepareTheme(convertState, {
|
||||||
skipDefaultLayers: true,
|
skipDefaultLayers: true
|
||||||
}).convertStrict(
|
}).convertStrict(
|
||||||
themeFile,
|
themeFile,
|
||||||
ConversionContext.construct([themePath], ["PrepareLayer"])
|
ConversionContext.construct([themePath], ["PrepareLayer"])
|
||||||
|
@ -919,7 +919,7 @@ class LayerOverviewUtils extends Script {
|
||||||
const e: string = [
|
const e: string = [
|
||||||
`the icon for theme ${themeFile.id} is too small. Please rescale the icon at ${themeFile.icon}`,
|
`the icon for theme ${themeFile.id} is too small. Please rescale the icon at ${themeFile.icon}`,
|
||||||
`Even though an SVG is 'infinitely scaleable', the icon should be dimensioned bigger. One of the build steps of the theme does convert the image to a PNG (to serve as PWA-icon) and having a small dimension will cause blurry images.`,
|
`Even though an SVG is 'infinitely scaleable', the icon should be dimensioned bigger. One of the build steps of the theme does convert the image to a PNG (to serve as PWA-icon) and having a small dimension will cause blurry images.`,
|
||||||
` Width = ${width} height = ${height}; we recommend a size of at least 500px * 500px and to use a square aspect ratio.`,
|
` Width = ${width} height = ${height}; we recommend a size of at least 500px * 500px and to use a square aspect ratio.`
|
||||||
].join("\n")
|
].join("\n")
|
||||||
err(e)
|
err(e)
|
||||||
}
|
}
|
||||||
|
@ -956,7 +956,7 @@ class LayerOverviewUtils extends Script {
|
||||||
hideFromOverview: t.hideFromOverview ?? false,
|
hideFromOverview: t.hideFromOverview ?? false,
|
||||||
shortDescription:
|
shortDescription:
|
||||||
t.shortDescription ?? new Translation(t.description).FirstSentence(),
|
t.shortDescription ?? new Translation(t.description).FirstSentence(),
|
||||||
mustHaveLanguage: t.mustHaveLanguage?.length > 0,
|
mustHaveLanguage: t.mustHaveLanguage?.length > 0
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
sharedLayers
|
sharedLayers
|
||||||
|
@ -965,10 +965,10 @@ class LayerOverviewUtils extends Script {
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
"Recompiled themes " +
|
"Recompiled themes " +
|
||||||
recompiledThemes.join(", ") +
|
recompiledThemes.join(", ") +
|
||||||
" and skipped " +
|
" and skipped " +
|
||||||
skippedThemes.length +
|
skippedThemes.length +
|
||||||
" themes"
|
" themes"
|
||||||
)
|
)
|
||||||
|
|
||||||
return fixed
|
return fixed
|
||||||
|
|
|
@ -50,6 +50,7 @@ export default class ThemeSource implements IndexedFeatureSource {
|
||||||
const features = (this.features = new UIEventSource<Feature[]>([]))
|
const features = (this.features = new UIEventSource<Feature[]>([]))
|
||||||
const featuresById = (this.featuresById = new UIEventSource(new Map()))
|
const featuresById = (this.featuresById = new UIEventSource(new Map()))
|
||||||
this.core = mvtAvailableLayers.mapD((mvtAvailableLayers) => {
|
this.core = mvtAvailableLayers.mapD((mvtAvailableLayers) => {
|
||||||
|
this.core?.data?.destruct()
|
||||||
const core = new ThemeSourceCore(
|
const core = new ThemeSourceCore(
|
||||||
layers,
|
layers,
|
||||||
featureSwitches,
|
featureSwitches,
|
||||||
|
@ -300,4 +301,9 @@ class ThemeSourceCore extends FeatureSourceMerger {
|
||||||
// await Promise.all(this.supportsForceDownload.map((i) => i.updateAsync()))
|
// await Promise.all(this.supportsForceDownload.map((i) => i.updateAsync()))
|
||||||
console.log("Done")
|
console.log("Done")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public destruct() {
|
||||||
|
this.features.destroy()
|
||||||
|
this.featuresById.destroy()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,109 @@
|
||||||
import ThemeConfig, { MinimalThemeInformation } from "../../Models/ThemeConfig/ThemeConfig"
|
import ThemeConfig, { MinimalThemeInformation } from "../../Models/ThemeConfig/ThemeConfig"
|
||||||
import { Store } from "../UIEventSource"
|
import { Store } from "../UIEventSource"
|
||||||
import UserRelatedState from "../State/UserRelatedState"
|
import UserRelatedState from "../State/UserRelatedState"
|
||||||
import { Utils } from "../../Utils"
|
|
||||||
import Locale from "../../UI/i18n/Locale"
|
|
||||||
import themeOverview from "../../assets/generated/theme_overview.json"
|
import themeOverview from "../../assets/generated/theme_overview.json"
|
||||||
import LayerSearch from "./LayerSearch"
|
|
||||||
import SearchUtils from "./SearchUtils"
|
|
||||||
import { OsmConnection } from "../Osm/OsmConnection"
|
import { OsmConnection } from "../Osm/OsmConnection"
|
||||||
import { AndroidPolyfill } from "../Web/AndroidPolyfill"
|
import { AndroidPolyfill } from "../Web/AndroidPolyfill"
|
||||||
|
import Fuse from "fuse.js"
|
||||||
|
import Constants from "../../Models/Constants"
|
||||||
|
import Locale from "../../UI/i18n/Locale"
|
||||||
|
import { Utils } from "../../Utils"
|
||||||
|
|
||||||
type ThemeSearchScore = {
|
|
||||||
theme: MinimalThemeInformation
|
export class ThemeSearchIndex {
|
||||||
lowest: number
|
|
||||||
perLayer?: Record<string, number>
|
private readonly themeIndex: Fuse<MinimalThemeInformation>
|
||||||
other: number
|
private readonly layerIndex: Fuse<{ id: string, description }>
|
||||||
|
|
||||||
|
constructor(language: string, themesToSearch?: MinimalThemeInformation[], layersToIgnore: string[] = []) {
|
||||||
|
const themes = Utils.NoNull(themesToSearch ?? ThemeSearch.officialThemes?.themes)
|
||||||
|
if (!themes) {
|
||||||
|
throw "No themes loaded. Did generate:layeroverview fail?"
|
||||||
|
}
|
||||||
|
const fuseOptions = {
|
||||||
|
ignoreLocation: true,
|
||||||
|
threshold: 0.2,
|
||||||
|
keys: [
|
||||||
|
{ name: "id", weight: 2 },
|
||||||
|
"title." + language,
|
||||||
|
"keywords." + language,
|
||||||
|
"shortDescription." + language
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
this.themeIndex = new Fuse(themes.filter(th => th?.id !== "personal"), fuseOptions)
|
||||||
|
|
||||||
|
const toIgnore = new Set(layersToIgnore)
|
||||||
|
const layersAsList: { id: string, description: Record<string, string[]> }[] = []
|
||||||
|
for (const id in ThemeSearch.officialThemes.layers) {
|
||||||
|
if (Constants.isPriviliged(id)) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if (toIgnore.has(id)) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
const l: Record<string, string[]> = ThemeSearch.officialThemes.layers[id]
|
||||||
|
layersAsList.push({ id, description: l })
|
||||||
|
}
|
||||||
|
this.layerIndex = new Fuse(layersAsList, {
|
||||||
|
includeScore: true,
|
||||||
|
minMatchCharLength: 3,
|
||||||
|
ignoreLocation: true,
|
||||||
|
threshold: 0.02,
|
||||||
|
keys: ["id", "description." + language]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
public search(text: string, limit?: number): MinimalThemeInformation[] {
|
||||||
|
const scored = this.searchWithScores(text)
|
||||||
|
let result = Array.from(scored.entries())
|
||||||
|
result.sort((a, b) => b[0] - a[0])
|
||||||
|
if (limit) {
|
||||||
|
result = result.slice(0, limit)
|
||||||
|
}
|
||||||
|
return result.map(e => ThemeSearch.officialThemesById.get(e[0]))
|
||||||
|
}
|
||||||
|
|
||||||
|
public searchWithScores(text: string): Map<string, number> {
|
||||||
|
const result = new Map<string, number>()
|
||||||
|
const themeResults = this.themeIndex.search(text)
|
||||||
|
for (const themeResult of themeResults) {
|
||||||
|
result.set(themeResult.item.id, themeResult.score)
|
||||||
|
}
|
||||||
|
|
||||||
|
const layerResults = this.layerIndex.search(text)
|
||||||
|
|
||||||
|
for (const layer of layerResults) {
|
||||||
|
const matchingThemes = ThemeSearch.layersToThemes.get(layer.item.id)
|
||||||
|
const score = layer.score
|
||||||
|
matchingThemes?.forEach(th => {
|
||||||
|
const previous = result.get(th.id) ?? 10000
|
||||||
|
result.set(th.id, Math.min(previous, score * 5))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds a search index containing all public and visited themes, but ignoring the layers loaded by the current theme
|
||||||
|
*/
|
||||||
|
public static fromState(state: { osmConnection: OsmConnection; theme: ThemeConfig }): Store<ThemeSearchIndex> {
|
||||||
|
const layersToIgnore = state.theme.layers.filter((l) => l.isNormal()).map((l) => l.id)
|
||||||
|
const knownHidden: Store<string[]> = UserRelatedState.initDiscoveredHiddenThemes(
|
||||||
|
state.osmConnection
|
||||||
|
).map((list) => Utils.Dedup(list))
|
||||||
|
const otherThemes: MinimalThemeInformation[] = ThemeSearch.officialThemes.themes.filter(
|
||||||
|
(th) => th.id !== state.theme.id
|
||||||
|
)
|
||||||
|
return Locale.language.map(language => {
|
||||||
|
const themes = otherThemes.concat(...knownHidden.data.map(id => ThemeSearch.officialThemesById.get(id)))
|
||||||
|
return new ThemeSearchIndex(language, themes, layersToIgnore)
|
||||||
|
},
|
||||||
|
[knownHidden]
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class ThemeSearch {
|
export default class ThemeSearch {
|
||||||
|
@ -25,42 +115,26 @@ export default class ThemeSearch {
|
||||||
string,
|
string,
|
||||||
MinimalThemeInformation
|
MinimalThemeInformation
|
||||||
>()
|
>()
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For every layer id, states which themes use the layer
|
||||||
|
*/
|
||||||
|
public static readonly layersToThemes: Map<string, MinimalThemeInformation[]> = new Map()
|
||||||
static {
|
static {
|
||||||
for (const th of ThemeSearch.officialThemes.themes ?? []) {
|
for (const th of ThemeSearch.officialThemes.themes ?? []) {
|
||||||
ThemeSearch.officialThemesById.set(th.id, th)
|
ThemeSearch.officialThemesById.set(th.id, th)
|
||||||
|
for (const layer of th.layers) {
|
||||||
|
let list = ThemeSearch.layersToThemes.get(layer)
|
||||||
|
if (!list) {
|
||||||
|
list = []
|
||||||
|
ThemeSearch.layersToThemes.set(layer, list)
|
||||||
|
}
|
||||||
|
list.push(th)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly _knownHiddenThemes: Store<Set<string>>
|
|
||||||
private readonly _layersToIgnore: string[]
|
|
||||||
private readonly _otherThemes: MinimalThemeInformation[]
|
|
||||||
|
|
||||||
constructor(state: { osmConnection: OsmConnection; theme: ThemeConfig }) {
|
|
||||||
this._layersToIgnore = state.theme.layers.filter((l) => l.isNormal()).map((l) => l.id)
|
|
||||||
this._knownHiddenThemes = UserRelatedState.initDiscoveredHiddenThemes(
|
|
||||||
state.osmConnection
|
|
||||||
).map((list) => new Set(list))
|
|
||||||
this._otherThemes = ThemeSearch.officialThemes.themes.filter(
|
|
||||||
(th) => th.id !== state.theme.id
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public search(query: string, limit: number, threshold: number = 3): MinimalThemeInformation[] {
|
|
||||||
if (query.length < 1) {
|
|
||||||
return []
|
|
||||||
}
|
|
||||||
const sorted = ThemeSearch.sortedByLowestScores(
|
|
||||||
query,
|
|
||||||
this._otherThemes,
|
|
||||||
this._layersToIgnore
|
|
||||||
)
|
|
||||||
return sorted
|
|
||||||
.filter((sorted) => sorted.lowest < threshold)
|
|
||||||
.map((th) => th.theme)
|
|
||||||
.filter((th) => !th.hideFromOverview || this._knownHiddenThemes.data.has(th.id))
|
|
||||||
.slice(0, limit)
|
|
||||||
}
|
|
||||||
|
|
||||||
public static createUrlFor(layout: { id: string }, state?: { layoutToUse?: { id } }): string {
|
public static createUrlFor(layout: { id: string }, state?: { layoutToUse?: { id } }): string {
|
||||||
if (layout === undefined) {
|
if (layout === undefined) {
|
||||||
return undefined
|
return undefined
|
||||||
|
@ -97,82 +171,5 @@ export default class ThemeSearch {
|
||||||
return `${linkPrefix}`
|
return `${linkPrefix}`
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a score based on textual search
|
|
||||||
*
|
|
||||||
* Note that, if `query.length < 3`, layers are _not_ searched because this takes too much time
|
|
||||||
* @param query
|
|
||||||
* @param themes
|
|
||||||
* @param ignoreLayers
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
private static scoreThemes(
|
|
||||||
query: string,
|
|
||||||
themes: MinimalThemeInformation[],
|
|
||||||
ignoreLayers: string[] = undefined
|
|
||||||
): Record<string, ThemeSearchScore> {
|
|
||||||
if (query?.length < 1) {
|
|
||||||
return undefined
|
|
||||||
}
|
|
||||||
themes = Utils.NoNullInplace(themes)
|
|
||||||
|
|
||||||
let options: { blacklist: Set<string> } = undefined
|
|
||||||
if (ignoreLayers?.length > 0) {
|
|
||||||
options = { blacklist: new Set(ignoreLayers) }
|
|
||||||
}
|
|
||||||
const layerScores = query.length < 3 ? {} : LayerSearch.scoreLayers(query, options)
|
|
||||||
const results: Record<string, ThemeSearchScore> = {}
|
|
||||||
for (const layoutInfo of themes) {
|
|
||||||
const theme = layoutInfo.id
|
|
||||||
if (theme === "personal") {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if (Utils.simplifyStringForSearch(theme) === query) {
|
|
||||||
results[theme] = {
|
|
||||||
theme: layoutInfo,
|
|
||||||
lowest: -1,
|
|
||||||
other: 0,
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
const perLayer = Utils.asRecord(layoutInfo.layers ?? [], (layer) => layerScores[layer])
|
|
||||||
const language = Locale.language.data
|
|
||||||
|
|
||||||
const keywords = Utils.NoNullInplace([
|
|
||||||
layoutInfo.shortDescription,
|
|
||||||
layoutInfo.title,
|
|
||||||
]).map((item) => (typeof item === "string" ? item : item[language] ?? item["*"]))
|
|
||||||
|
|
||||||
const other = Math.min(
|
|
||||||
SearchUtils.scoreKeywords(query, keywords),
|
|
||||||
SearchUtils.scoreKeywords(query, layoutInfo.keywords)
|
|
||||||
)
|
|
||||||
const lowest = Math.min(other, ...Object.values(perLayer))
|
|
||||||
results[theme] = {
|
|
||||||
theme: layoutInfo,
|
|
||||||
perLayer,
|
|
||||||
other,
|
|
||||||
lowest,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return results
|
|
||||||
}
|
|
||||||
|
|
||||||
public static sortedByLowestScores(
|
|
||||||
search: string,
|
|
||||||
themes: MinimalThemeInformation[],
|
|
||||||
ignoreLayers: string[] = []
|
|
||||||
): ThemeSearchScore[] {
|
|
||||||
const scored = Object.values(this.scoreThemes(search, themes, ignoreLayers))
|
|
||||||
scored.sort((a, b) => a.lowest - b.lowest)
|
|
||||||
return scored
|
|
||||||
}
|
|
||||||
|
|
||||||
public static sortedByLowest(
|
|
||||||
search: string,
|
|
||||||
themes: MinimalThemeInformation[],
|
|
||||||
ignoreLayers: string[] = []
|
|
||||||
): MinimalThemeInformation[] {
|
|
||||||
return this.sortedByLowestScores(search, themes, ignoreLayers).map((th) => th.theme)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ import Translations from "../../UI/i18n/Translations"
|
||||||
import { RegexTag } from "../Tags/RegexTag"
|
import { RegexTag } from "../Tags/RegexTag"
|
||||||
import { Or } from "../Tags/Or"
|
import { Or } from "../Tags/Or"
|
||||||
import FilterConfig from "../../Models/ThemeConfig/FilterConfig"
|
import FilterConfig from "../../Models/ThemeConfig/FilterConfig"
|
||||||
import Constants from "../../Models/Constants"
|
|
||||||
|
|
||||||
export type ActiveFilter = {
|
export type ActiveFilter = {
|
||||||
layer: LayerConfig
|
layer: LayerConfig
|
||||||
|
|
|
@ -4,7 +4,7 @@ import CombinedSearcher from "../Search/CombinedSearcher"
|
||||||
import FilterSearch, { FilterSearchResult } from "../Search/FilterSearch"
|
import FilterSearch, { FilterSearchResult } from "../Search/FilterSearch"
|
||||||
import LocalElementSearch from "../Search/LocalElementSearch"
|
import LocalElementSearch from "../Search/LocalElementSearch"
|
||||||
import CoordinateSearch from "../Search/CoordinateSearch"
|
import CoordinateSearch from "../Search/CoordinateSearch"
|
||||||
import ThemeSearch from "../Search/ThemeSearch"
|
import { ThemeSearchIndex } from "../Search/ThemeSearch"
|
||||||
import OpenStreetMapIdSearch from "../Search/OpenStreetMapIdSearch"
|
import OpenStreetMapIdSearch from "../Search/OpenStreetMapIdSearch"
|
||||||
import PhotonSearch from "../Search/PhotonSearch"
|
import PhotonSearch from "../Search/PhotonSearch"
|
||||||
import ThemeViewState from "../../Models/ThemeViewState"
|
import ThemeViewState from "../../Models/ThemeViewState"
|
||||||
|
@ -67,8 +67,8 @@ export default class SearchState {
|
||||||
Stores.concat(suggestions).map((suggestions) => CombinedSearcher.merge(suggestions))
|
Stores.concat(suggestions).map((suggestions) => CombinedSearcher.merge(suggestions))
|
||||||
)
|
)
|
||||||
|
|
||||||
const themeSearch = new ThemeSearch(state)
|
const themeSearch = ThemeSearchIndex.fromState(state)
|
||||||
this.themeSuggestions = this.searchTerm.mapD((query) => themeSearch.search(query, 3))
|
this.themeSuggestions = this.searchTerm.mapD((query) => themeSearch.data.search(query, 3), [themeSearch])
|
||||||
|
|
||||||
const layerSearch = new LayerSearch(state.theme)
|
const layerSearch = new LayerSearch(state.theme)
|
||||||
this.layerSuggestions = this.searchTerm.mapD((query) => layerSearch.search(query, 5))
|
this.layerSuggestions = this.searchTerm.mapD((query) => layerSearch.search(query, 5))
|
||||||
|
|
|
@ -626,11 +626,9 @@ class MappedStore<TIn, T> extends Store<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private registerCallbacksToUpstream() {
|
private registerCallbacksToUpstream() {
|
||||||
const self = this
|
this._unregisterFromUpstream = this._upstream.addCallback((_) => this.update())
|
||||||
|
|
||||||
this._unregisterFromUpstream = this._upstream.addCallback((_) => self.update())
|
|
||||||
this._unregisterFromExtraStores = this._extraStores?.map((store) =>
|
this._unregisterFromExtraStores = this._extraStores?.map((store) =>
|
||||||
store?.addCallback((_) => self.update())
|
store?.addCallback((_) => this.update())
|
||||||
)
|
)
|
||||||
this._callbacksAreRegistered = true
|
this._callbacksAreRegistered = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import { ImageUploadManager } from "../../Logic/ImageProviders/ImageUploadManager"
|
import { ImageUploadManager } from "../../Logic/ImageProviders/ImageUploadManager"
|
||||||
import { Store, UIEventSource } from "../../Logic/UIEventSource"
|
import { Store } from "../../Logic/UIEventSource"
|
||||||
import { ProvidedImage } from "../../Logic/ImageProviders/ImageProvider"
|
|
||||||
import { CombinedFetcher } from "../../Logic/Web/NearbyImagesSearch"
|
import { CombinedFetcher } from "../../Logic/Web/NearbyImagesSearch"
|
||||||
import ThemeConfig from "../ThemeConfig/ThemeConfig"
|
import ThemeConfig from "../ThemeConfig/ThemeConfig"
|
||||||
import { PanoramaxUploader } from "../../Logic/ImageProviders/Panoramax"
|
import { PanoramaxUploader } from "../../Logic/ImageProviders/Panoramax"
|
||||||
|
@ -13,7 +12,6 @@ import { SpecialVisualizationState } from "../../UI/SpecialVisualization"
|
||||||
|
|
||||||
export class WithImageState extends WithGuiState implements SpecialVisualizationState {
|
export class WithImageState extends WithGuiState implements SpecialVisualizationState {
|
||||||
readonly imageUploadManager: ImageUploadManager
|
readonly imageUploadManager: ImageUploadManager
|
||||||
readonly previewedImage = new UIEventSource<ProvidedImage>(undefined)
|
|
||||||
readonly nearbyImageSearcher: CombinedFetcher
|
readonly nearbyImageSearcher: CombinedFetcher
|
||||||
|
|
||||||
constructor(layout: ThemeConfig, mvtAvailableLayers: Store<Set<string>>) {
|
constructor(layout: ThemeConfig, mvtAvailableLayers: Store<Set<string>>) {
|
||||||
|
|
|
@ -45,7 +45,7 @@ export class WithSelectedElementState extends UserMapFeatureswitchState {
|
||||||
selected?.properties?.name,
|
selected?.properties?.name,
|
||||||
selected?.properties?.alt_name,
|
selected?.properties?.alt_name,
|
||||||
selected?.properties?.local_name,
|
selected?.properties?.local_name,
|
||||||
layer?.title.GetRenderValue(selected?.properties ?? {}).txt,
|
layer?.title?.GetRenderValue(selected?.properties ?? {})?.txt,
|
||||||
selected.properties.display_name,
|
selected.properties.display_name,
|
||||||
selected.properties.id,
|
selected.properties.id,
|
||||||
]
|
]
|
||||||
|
|
|
@ -18,15 +18,16 @@
|
||||||
import Mastodon from "../assets/svg/Mastodon.svelte"
|
import Mastodon from "../assets/svg/Mastodon.svelte"
|
||||||
import Liberapay from "../assets/svg/Liberapay.svelte"
|
import Liberapay from "../assets/svg/Liberapay.svelte"
|
||||||
import Bug from "../assets/svg/Bug.svelte"
|
import Bug from "../assets/svg/Bug.svelte"
|
||||||
import Github from "../assets/svg/Github.svelte"
|
|
||||||
import { Utils } from "../Utils"
|
import { Utils } from "../Utils"
|
||||||
import { ArrowTrendingUp } from "@babeard/svelte-heroicons/solid/ArrowTrendingUp"
|
import { ArrowTrendingUp } from "@babeard/svelte-heroicons/solid/ArrowTrendingUp"
|
||||||
import Searchbar from "./Base/Searchbar.svelte"
|
import Searchbar from "./Base/Searchbar.svelte"
|
||||||
import ThemeSearch from "../Logic/Search/ThemeSearch"
|
import ThemeSearch, { ThemeSearchIndex } from "../Logic/Search/ThemeSearch"
|
||||||
import SearchUtils from "../Logic/Search/SearchUtils"
|
import SearchUtils from "../Logic/Search/SearchUtils"
|
||||||
import ChevronDoubleRight from "@babeard/svelte-heroicons/mini/ChevronDoubleRight"
|
import ChevronDoubleRight from "@babeard/svelte-heroicons/mini/ChevronDoubleRight"
|
||||||
import { AndroidPolyfill } from "../Logic/Web/AndroidPolyfill"
|
import { AndroidPolyfill } from "../Logic/Web/AndroidPolyfill"
|
||||||
import Forgejo from "../assets/svg/Forgejo.svelte"
|
import Forgejo from "../assets/svg/Forgejo.svelte"
|
||||||
|
import Locale from "./i18n/Locale"
|
||||||
|
|
||||||
AndroidPolyfill.init().then(() => console.log("Android polyfill setup completed"))
|
AndroidPolyfill.init().then(() => console.log("Android polyfill setup completed"))
|
||||||
const featureSwitches = new OsmConnectionFeatureSwitches()
|
const featureSwitches = new OsmConnectionFeatureSwitches()
|
||||||
const osmConnection = new OsmConnection({
|
const osmConnection = new OsmConnection({
|
||||||
|
@ -35,13 +36,15 @@
|
||||||
"oauth_token",
|
"oauth_token",
|
||||||
undefined,
|
undefined,
|
||||||
"Used to complete the login"
|
"Used to complete the login"
|
||||||
),
|
)
|
||||||
})
|
})
|
||||||
const state = new UserRelatedState(osmConnection)
|
const state = new UserRelatedState(osmConnection)
|
||||||
const t = Translations.t.index
|
const t = Translations.t.index
|
||||||
const tu = Translations.t.general
|
const tu = Translations.t.general
|
||||||
const tr = Translations.t.general.morescreen
|
const tr = Translations.t.general.morescreen
|
||||||
|
|
||||||
|
const recentThemes = state.recentlyVisitedThemes.value.mapD(themes => themes.map(thId => ThemeSearch.officialThemesById.get(thId)))
|
||||||
|
|
||||||
let userLanguages = osmConnection.userDetails.map((ud) => ud?.languages ?? [])
|
let userLanguages = osmConnection.userDetails.map((ud) => ud?.languages ?? [])
|
||||||
let search: UIEventSource<string | undefined> = new UIEventSource<string>("")
|
let search: UIEventSource<string | undefined> = new UIEventSource<string>("")
|
||||||
let searchStable = search.stabilized(100)
|
let searchStable = search.stabilized(100)
|
||||||
|
@ -64,30 +67,28 @@
|
||||||
const customThemes: Store<MinimalThemeInformation[]> = Stores.ListStabilized<string>(
|
const customThemes: Store<MinimalThemeInformation[]> = Stores.ListStabilized<string>(
|
||||||
state.installedUserThemes
|
state.installedUserThemes
|
||||||
).mapD((stableIds) => Utils.NoNullInplace(stableIds.map((id) => state.getUnofficialTheme(id))))
|
).mapD((stableIds) => Utils.NoNullInplace(stableIds.map((id) => state.getUnofficialTheme(id))))
|
||||||
|
|
||||||
function filtered(themes: Store<MinimalThemeInformation[]>): Store<MinimalThemeInformation[]> {
|
function filtered(themes: Store<MinimalThemeInformation[]>): Store<MinimalThemeInformation[]> {
|
||||||
|
const searchIndex = Locale.language.map(language => {
|
||||||
|
return new ThemeSearchIndex(language, themes.data)
|
||||||
|
}, [themes])
|
||||||
|
|
||||||
|
|
||||||
return searchStable.map(
|
return searchStable.map(
|
||||||
(search) => {
|
(searchTerm) => {
|
||||||
if (!themes.data) {
|
if (!themes.data) {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
if (!search) {
|
if (!searchTerm) {
|
||||||
return themes.data
|
return themes.data
|
||||||
}
|
}
|
||||||
|
|
||||||
const start = new Date().getTime()
|
const index = searchIndex.data
|
||||||
const scores = ThemeSearch.sortedByLowestScores(search, themes.data)
|
|
||||||
const end = new Date().getTime()
|
return index.search(searchTerm)
|
||||||
console.trace("Scores for", search, "are", scores, "searching took", end - start, "ms")
|
|
||||||
const strict = scores.filter((sc) => sc.lowest < 2)
|
|
||||||
if (strict.length > 0) {
|
|
||||||
return strict.map((sc) => sc.theme)
|
|
||||||
}
|
|
||||||
return scores
|
|
||||||
.filter((sc) => sc.lowest < 4)
|
|
||||||
.slice(0, 6)
|
|
||||||
.map((sc) => sc.theme)
|
|
||||||
},
|
},
|
||||||
[themes]
|
[searchIndex]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +101,7 @@
|
||||||
let customSearched: Store<MinimalThemeInformation[]> = filtered(customThemes)
|
let customSearched: Store<MinimalThemeInformation[]> = filtered(customThemes)
|
||||||
|
|
||||||
let searchIsFocussed = new UIEventSource(false)
|
let searchIsFocussed = new UIEventSource(false)
|
||||||
document.addEventListener("keydown", function (event) {
|
document.addEventListener("keydown", function(event) {
|
||||||
if (event.ctrlKey && event.code === "KeyF") {
|
if (event.ctrlKey && event.code === "KeyF") {
|
||||||
searchIsFocussed.set(true)
|
searchIsFocussed.set(true)
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
|
@ -165,6 +166,17 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<LoginToggle {state}>
|
||||||
|
{#if $recentThemes.length > 2}
|
||||||
|
<div class="my-4">
|
||||||
|
<h2>
|
||||||
|
<Tr t={Translations.t.index.recentThemes} />
|
||||||
|
</h2>
|
||||||
|
<ThemesList {state} themes={$recentThemes} onlyIcons />
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
</LoginToggle>
|
||||||
|
|
||||||
<Searchbar
|
<Searchbar
|
||||||
value={search}
|
value={search}
|
||||||
placeholder={tr.searchForATheme}
|
placeholder={tr.searchForATheme}
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
import Constants from "../../Models/Constants"
|
import Constants from "../../Models/Constants"
|
||||||
import ContributorCount from "../../Logic/ContributorCount"
|
import ContributorCount from "../../Logic/ContributorCount"
|
||||||
import BaseUIElement from "../BaseUIElement"
|
import BaseUIElement from "../BaseUIElement"
|
||||||
import Github from "../../assets/svg/Github.svelte"
|
|
||||||
import { TranslateIcon } from "@rgossiaux/svelte-heroicons/solid"
|
import { TranslateIcon } from "@rgossiaux/svelte-heroicons/solid"
|
||||||
import Osm_logo from "../../assets/svg/Osm_logo.svelte"
|
import Osm_logo from "../../assets/svg/Osm_logo.svelte"
|
||||||
import Generic_map from "../../assets/svg/Generic_map.svelte"
|
import Generic_map from "../../assets/svg/Generic_map.svelte"
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { ImmutableStore, Store } from "../../Logic/UIEventSource"
|
|
||||||
import { OsmConnection } from "../../Logic/Osm/OsmConnection"
|
import { OsmConnection } from "../../Logic/Osm/OsmConnection"
|
||||||
import type { MinimalThemeInformation } from "../../Models/ThemeConfig/ThemeConfig"
|
import type { MinimalThemeInformation } from "../../Models/ThemeConfig/ThemeConfig"
|
||||||
import Tr from "../Base/Tr.svelte"
|
import Tr from "../Base/Tr.svelte"
|
||||||
|
@ -10,7 +9,7 @@
|
||||||
export let theme: MinimalThemeInformation & { isOfficial?: boolean }
|
export let theme: MinimalThemeInformation & { isOfficial?: boolean }
|
||||||
let isCustom: boolean = theme.id.startsWith("https://") || theme.id.startsWith("http://")
|
let isCustom: boolean = theme.id.startsWith("https://") || theme.id.startsWith("http://")
|
||||||
export let state: { layoutToUse?: { id: string }; osmConnection: OsmConnection }
|
export let state: { layoutToUse?: { id: string }; osmConnection: OsmConnection }
|
||||||
|
export let iconOnly: boolean = false
|
||||||
$: title = Translations.T(
|
$: title = Translations.T(
|
||||||
theme.title,
|
theme.title,
|
||||||
!isCustom && !theme.mustHaveLanguage ? "themes:" + theme.id + ".title" : undefined
|
!isCustom && !theme.mustHaveLanguage ? "themes:" + theme.id + ".title" : undefined
|
||||||
|
@ -71,12 +70,17 @@
|
||||||
)
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<a class="low-interaction my-1 flex w-full items-center text-ellipsis rounded p-1" href={$href}>
|
{#if iconOnly}
|
||||||
<Marker icons={theme.icon} size="block h-8 w-8 sm:h-11 sm:w-11 m-1 sm:mx-2 md:mx-4 shrink-0" />
|
<a class="low-interaction my-1 rounded p-1" href={$href}>
|
||||||
|
<Marker icons={theme.icon} size="w-8 h-8 sm:w-11 sm:h-11" />
|
||||||
<span class="flex flex-col overflow-hidden text-ellipsis text-xl font-bold">
|
</a>
|
||||||
<Tr cls="" t={title} />
|
{:else}
|
||||||
<Tr cls="subtle text-base" t={description} />
|
<a class="low-interaction my-1 flex w-full items-center text-ellipsis rounded p-1" href={$href}>
|
||||||
<slot />
|
<Marker icons={theme.icon} size="block h-8 w-8 sm:h-11 sm:w-11 m-1 sm:mx-2 md:mx-4 shrink-0" />
|
||||||
</span>
|
<span class="flex flex-col overflow-hidden text-ellipsis text-xl font-bold">
|
||||||
</a>
|
<Tr cls="" t={title} />
|
||||||
|
<Tr cls="subtle text-base" t={description} />
|
||||||
|
<slot />
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
{/if}
|
||||||
|
|
|
@ -7,19 +7,21 @@
|
||||||
import { MinimalThemeInformation } from "../../Models/ThemeConfig/ThemeConfig"
|
import { MinimalThemeInformation } from "../../Models/ThemeConfig/ThemeConfig"
|
||||||
import Translations from "../i18n/Translations"
|
import Translations from "../i18n/Translations"
|
||||||
import Tr from "../Base/Tr.svelte"
|
import Tr from "../Base/Tr.svelte"
|
||||||
|
import { twMerge } from "tailwind-merge"
|
||||||
|
|
||||||
export let search: UIEventSource<string>
|
export let search: UIEventSource<string> = new UIEventSource<string>(undefined)
|
||||||
export let themes: MinimalThemeInformation[]
|
export let themes: MinimalThemeInformation[]
|
||||||
export let state: { osmConnection: OsmConnection }
|
export let state: { osmConnection: OsmConnection }
|
||||||
|
export let onlyIcons: boolean = false
|
||||||
export let hasSelection: boolean = true
|
export let hasSelection: boolean = true
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<section class="w-full">
|
<section class="w-full">
|
||||||
<slot name="title" />
|
<slot name="title" />
|
||||||
<div class="theme-list my-2 gap-4 md:grid md:grid-flow-row md:grid-cols-2 lg:grid-cols-3">
|
<div
|
||||||
|
class={onlyIcons ? "flex gap-x-2 flex-wrap items-center justify-center" : ("theme-list my-2 gap-4 md:grid md:grid-flow-row md:grid-cols-2 lg:grid-cols-3")}>
|
||||||
{#each themes as theme (theme.id)}
|
{#each themes as theme (theme.id)}
|
||||||
<ThemeButton {theme} {state}>
|
<ThemeButton {theme} {state} iconOnly={onlyIcons}>
|
||||||
{#if $search && hasSelection && themes?.[0] === theme}
|
{#if $search && hasSelection && themes?.[0] === theme}
|
||||||
<span class="thanks hidden-on-mobile" aria-hidden="true">
|
<span class="thanks hidden-on-mobile" aria-hidden="true">
|
||||||
<Tr t={Translations.t.general.morescreen.enterToOpen} />
|
<Tr t={Translations.t.general.morescreen.enterToOpen} />
|
||||||
|
|
|
@ -352,6 +352,11 @@ class LineRenderingLayer {
|
||||||
// After waiting 'till the map has loaded, the data might have changed already
|
// After waiting 'till the map has loaded, the data might have changed already
|
||||||
// As such, we only now read the features from the featureSource and compare with the previously set data
|
// As such, we only now read the features from the featureSource and compare with the previously set data
|
||||||
const features = featureSource.data
|
const features = featureSource.data
|
||||||
|
if (features.length === 0) {
|
||||||
|
// This is a very ugly workaround for https://source.mapcomplete.org/MapComplete/MapComplete/issues/2312,
|
||||||
|
// but I couldn't find the root cause
|
||||||
|
return
|
||||||
|
}
|
||||||
const src = <GeoJSONSource>map.getSource(this._layername)
|
const src = <GeoJSONSource>map.getSource(this._layername)
|
||||||
{
|
{
|
||||||
// Add source to the map or update the feature source
|
// Add source to the map or update the feature source
|
||||||
|
|
|
@ -29,7 +29,7 @@ class QuestionViz implements SpecialVisualizationSvelte {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "blacklisted-labels",
|
name: "blacklisted-labels",
|
||||||
doc: "One or more ';'-separated labels of questions which should _not_ be included",
|
doc: "One or more ';'-separated labels of questions which should _not_ be included. Default: 'hidden'"
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
svelteBased = true
|
svelteBased = true
|
||||||
|
@ -46,10 +46,13 @@ class QuestionViz implements SpecialVisualizationSvelte {
|
||||||
?.split(";")
|
?.split(";")
|
||||||
?.map((s) => s.trim())
|
?.map((s) => s.trim())
|
||||||
?.filter((s) => s !== "")
|
?.filter((s) => s !== "")
|
||||||
const blacklist = args[1]
|
const blacklist = (args[1])
|
||||||
?.split(";")
|
?.split(";")
|
||||||
?.map((s) => s.trim())
|
?.map((s) => s.trim())
|
||||||
?.filter((s) => s !== "")
|
?.filter((s) => s !== "")
|
||||||
|
if (blacklist.length === 0) {
|
||||||
|
blacklist.push("hidden")
|
||||||
|
}
|
||||||
return new SvelteUIElement(Questionbox, {
|
return new SvelteUIElement(Questionbox, {
|
||||||
layer,
|
layer,
|
||||||
tags,
|
tags,
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
<script>
|
|
||||||
export let color = "#000000"
|
|
||||||
</script>
|
|
||||||
<svg {...$$restProps} on:click on:mouseover on:mouseenter on:mouseleave on:keydown on:focus width="100" height="100" version="1.1" id="svg1" sodipodi:docname="github.svg" viewBox="0 0 100 100" inkscape:version="1.3.2 (1:1.3.2+202311252150+091e20ef0f)" 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" xmlns:svg="http://www.w3.org/2000/svg"> <sodipodi:namedview id="namedview1" pagecolor="#ffffff" bordercolor="#999999" borderopacity="1" inkscape:showpageshadow="2" inkscape:pageopacity="0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:zoom="8.0714286" inkscape:cx="49" inkscape:cy="48.00885" inkscape:window-width="1920" inkscape:window-height="995" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg1" /> <defs id="defs1" /> <path fill-rule="evenodd" clip-rule="evenodd" d="M 48.854,0 C 21.839,0 0,22 0,49.217 c 0,21.756 13.993,40.172 33.405,46.69 2.427,0.49 3.316,-1.059 3.316,-2.362 0,-1.141 -0.08,-5.052 -0.08,-9.127 -13.59,2.934 -16.42,-5.867 -16.42,-5.867 -2.184,-5.704 -5.42,-7.17 -5.42,-7.17 -4.448,-3.015 0.324,-3.015 0.324,-3.015 4.934,0.326 7.523,5.052 7.523,5.052 4.367,7.496 11.404,5.378 14.235,4.074 0.404,-3.178 1.699,-5.378 3.074,-6.6 -10.839,-1.141 -22.243,-5.378 -22.243,-24.283 0,-5.378 1.94,-9.778 5.014,-13.2 -0.485,-1.222 -2.184,-6.275 0.486,-13.038 0,0 4.125,-1.304 13.426,5.052 a 46.97,46.97 0 0 1 12.214,-1.63 c 4.125,0 8.33,0.571 12.213,1.63 9.302,-6.356 13.427,-5.052 13.427,-5.052 2.67,6.763 0.97,11.816 0.485,13.038 3.155,3.422 5.015,7.822 5.015,13.2 0,18.905 -11.404,23.06 -22.324,24.283 1.78,1.548 3.316,4.481 3.316,9.126 0,6.6 -0.08,11.897 -0.08,13.526 0,1.304 0.89,2.853 3.316,2.364 C 83.634,89.388 97.627,70.973 97.627,49.217 97.707,22 75.788,0 48.854,0 Z" fill="#24292f" id="path1" /> </svg>
|
|
Loading…
Add table
Add a link
Reference in a new issue