forked from MapComplete/MapComplete
Feature: add favourite
This commit is contained in:
parent
a32ab16a5e
commit
f9827dd6ae
68 changed files with 1641 additions and 885 deletions
|
@ -9,7 +9,8 @@
|
|||
"description": {
|
||||
"en": "An animal shelter is a facility where animals in trouble are brought and facility's staff (volunteers or not) feeds them and cares of them, rehabilitating and healing them if necessary. This definition includes kennels for abandoned dogs, catteries for abandoned cats, shelters for other abandoned pets and wildlife recovery centres. ",
|
||||
"es": "Un refugio de animales es una instalación donde se llevan animales con problemas y el personal de la instalación (voluntario o no) los alimenta y cuida, rehabilitándolos y curándolos si es necesario. Esta definición incluye las perreras para perros abandonados, los criaderos para gatos abandonados, los refugios para otros animales de compañía abandonados y los centros de recuperación de la fauna salvaje. ",
|
||||
"zh_Hans": "动物收容所是一个设施,将遇到麻烦的动物带到这里,设施的工作人员(志愿者或非志愿者)喂养并照顾它们,并在必要时使它们康复和治愈。该定义包括被遗弃的狗的狗舍、被遗弃的猫的猫舍、其他被遗弃的宠物的庇护所和野生动物恢复中心。 "
|
||||
"zh_Hans": "动物收容所是一个设施,将遇到麻烦的动物带到这里,设施的工作人员(志愿者或非志愿者)喂养并照顾它们,并在必要时使它们康复和治愈。该定义包括被遗弃的狗的狗舍、被遗弃的猫的猫舍、其他被遗弃的宠物的庇护所和野生动物恢复中心。 ",
|
||||
"de": "Ein Tierheim ist eine Einrichtung, in die notleidende Tiere gebracht werden und wo das Personal (ob freiwillig oder nicht) sie füttert und pflegt, sie rehabilitiert und bei Bedarf heilt. Diese Definition umfasst Zwinger für ausgesetzte Hunde, Katzenheime für ausgesetzte Katzen, Unterkünfte für andere ausgesetzte Haustiere und Wildtier-Auffangstationen. "
|
||||
},
|
||||
"source": {
|
||||
"osmTags": "amenity=animal_shelter"
|
||||
|
|
|
@ -544,7 +544,8 @@
|
|||
"ca": "Aquest caixer té sortida de veu en {language():font-bold}",
|
||||
"cs": "Tento bankomat má řečový výstup v {language():font-bold}",
|
||||
"he": "לכספומט הזה יש פלט דיבור ב {language():font-bold}",
|
||||
"pt_BR": "Este caixa eletrônico tem saída de fala em {language():font-bold}"
|
||||
"pt_BR": "Este caixa eletrônico tem saída de fala em {language():font-bold}",
|
||||
"es": "Este cajero automático tiene salida de voz en {language():font-bold}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,7 +49,8 @@
|
|||
"cs": "Má tato banka bankomat?",
|
||||
"he": "האם לבנק הזה יש כספומט?",
|
||||
"pl": "Czy ten bank ma bankomat?",
|
||||
"pt_BR": "Esse banco tem caixa eletrônico?"
|
||||
"pt_BR": "Esse banco tem caixa eletrônico?",
|
||||
"es": "¿Este banco tiene cajero automático?"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
|
|
|
@ -865,7 +865,8 @@
|
|||
"cs": "Zjištěno dnes!",
|
||||
"pt": "Pesquisado hoje!",
|
||||
"he": "נבדק היום!",
|
||||
"pt_BR": "Pesquisado hoje!"
|
||||
"pt_BR": "Pesquisado hoje!",
|
||||
"es": "¡Encuestado hoy!"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
@ -887,7 +888,8 @@
|
|||
"ca": "Aquest banc té la següent inscripció:<br/><p><i>{inscription}</i></p>",
|
||||
"cs": "Tato lavice má následující nápis:<br/><p><i>{inscription}</i></p>",
|
||||
"pt": "Este banco tem a seguinte inscrição:<br/><p><i>{inscription}</i></p>",
|
||||
"pt_BR": "Esse banco tem a seguinte inscrição: <br/><p><i>{inscription}</i></p>"
|
||||
"pt_BR": "Esse banco tem a seguinte inscrição: <br/><p><i>{inscription}</i></p>",
|
||||
"es": "Este banco tiene la siguiente inscripción:<br/><p><i>{inscription}</i></p>"
|
||||
},
|
||||
"question": {
|
||||
"en": "Does this bench have an inscription?",
|
||||
|
@ -897,7 +899,8 @@
|
|||
"ca": "Aquest banc té una inscripció?",
|
||||
"cs": "Má tato lavička nápis?",
|
||||
"pt": "Esse banco tem inscrição?",
|
||||
"pt_BR": "Esse banco tem uma inscrição?"
|
||||
"pt_BR": "Esse banco tem uma inscrição?",
|
||||
"es": "¿Este banco tiene una inscripción?"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "inscription",
|
||||
|
@ -917,7 +920,8 @@
|
|||
"ca": "Aquest banc no té cap inscripció",
|
||||
"cs": "Tato lavička nemá nápis",
|
||||
"pt": "Este banco não tem inscrição",
|
||||
"pt_BR": "Esse banco não tem uma inscrição"
|
||||
"pt_BR": "Esse banco não tem uma inscrição",
|
||||
"es": "Este banco no tiene inscripción"
|
||||
},
|
||||
"addExtraTags": [
|
||||
"inscription="
|
||||
|
@ -946,7 +950,8 @@
|
|||
"ca": "P. ex. en una placa, al respatller, …",
|
||||
"cs": "Např. na připevněné desce, v opěradle, …",
|
||||
"pt": "Por exemplo: em placa montada, no encosto, ...",
|
||||
"pt_BR": "P. ex. em uma placa montada, no encosto, …"
|
||||
"pt_BR": "P. ex. em uma placa montada, no encosto, …",
|
||||
"es": "Por ejemplo, en una placa montada, en el respaldo, …"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -960,7 +965,8 @@
|
|||
"he": "האם לספסל הזה יש אלמנט אומנותי?",
|
||||
"fr": "Est-ce que ce banc inclut un élément artistique ?",
|
||||
"pl": "Czy ta ławka ma wbudowane dzieło sztuki?",
|
||||
"pt_BR": "Esse banco tem um elemento artístico?"
|
||||
"pt_BR": "Esse banco tem um elemento artístico?",
|
||||
"es": "¿Tiene este banco un elemento artístico?"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
|
@ -977,7 +983,8 @@
|
|||
"cs": "Tato lavička má integrované umělecké dílo",
|
||||
"he": "לספסל זה יצירת אמנות משולבת",
|
||||
"pl": "Ta ławka ma wbudowane dzieło sztuki",
|
||||
"pt_BR": "Esse banco tem uma obra de arte integrada"
|
||||
"pt_BR": "Esse banco tem uma obra de arte integrada",
|
||||
"es": "Este banco tiene una obra de arte integrada"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1006,7 +1013,8 @@
|
|||
"ca": "Aquest banc <span class=\"subtle\">probablement</span> no té cap obra d'art integrada",
|
||||
"de": "Die Bank hat <span class=\"subtle\">vermutlich</span> kein integriertes Kunstwerk",
|
||||
"cs": "Tato lavička <span class=\"subtle\">pravděpodobně</span> nemá integrované umělecké dílo",
|
||||
"pt_BR": "Esse banco <span class=\"subtle\">provavelmente</span> não tem uma obra de arte integrada"
|
||||
"pt_BR": "Esse banco <span class=\"subtle\">provavelmente</span> não tem uma obra de arte integrada",
|
||||
"es": "Este banco <span class=\"subtle\">probablemente</span> no tiene una obra de arte integrada"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
}
|
||||
|
@ -1019,7 +1027,8 @@
|
|||
"cs": "Např. má integrovaný obraz, sochu nebo jiné netriviální tvůrčí dílo",
|
||||
"fr": "Par ex. il intègre une peinture, statue ou autre élément non commune, travail cratif",
|
||||
"pl": "Np. jest na niej coś namalowane, ma rzeźbę lub inną nietrywialną pracę",
|
||||
"pt_BR": "Ex. possui uma pintura integrada, estátua ou outro trabalho criativo não trivial"
|
||||
"pt_BR": "Ex. possui uma pintura integrada, estátua ou outro trabalho criativo não trivial",
|
||||
"es": "Por ejemplo, si lleva integrado un cuadro, una estatua u otra obra creativa no trivial"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1044,7 +1053,8 @@
|
|||
"cs": "Slouží tato lavička jako památník někoho nebo něčeho?",
|
||||
"pt": "Este banco serve como memorial para alguém ou algo?",
|
||||
"pl": "Czy ta ławka służy jako pomnik upamiętniający kogoś lub coś?",
|
||||
"pt_BR": "Esse banco serve como memorial para alguém ou alguma coisa?"
|
||||
"pt_BR": "Esse banco serve como memorial para alguém ou alguma coisa?",
|
||||
"es": "¿Actúa este banco como monumento conmemorativo de alguien o algo?"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
|
@ -1058,7 +1068,8 @@
|
|||
"cs": "Tato lavička je pomníkem pro někoho nebo něco",
|
||||
"pt": "Este banco é um memorial para alguém ou algo",
|
||||
"pl": "Ta ławka jest pomnikiem upamiętniającym kogoś lub coś",
|
||||
"pt_BR": "Esse banco é um memorial para alguém ou alguma coisa"
|
||||
"pt_BR": "Esse banco é um memorial para alguém ou alguma coisa",
|
||||
"es": "Este banco es un memorial para alguien o algo"
|
||||
},
|
||||
"addExtraTags": [
|
||||
"memorial=bench",
|
||||
|
@ -1081,7 +1092,8 @@
|
|||
"cs": "Tato lavička <b>není</b> pro někoho nebo něco památníkem",
|
||||
"pt": "Este banco <b>não é</b> um memorial para alguém ou algo",
|
||||
"pl": "Ta ławka <b>nie</b> jest pomnikiem upamiętniającym kogoś lub coś",
|
||||
"pt_BR": "Esse banco <b>não</b> é um memorial para alguém ou alguma coisa"
|
||||
"pt_BR": "Esse banco <b>não</b> é um memorial para alguém ou alguma coisa",
|
||||
"es": "Este banco es un <b>no</b> memorial para alguien o algo"
|
||||
},
|
||||
"addExtraTags": [
|
||||
"memorial="
|
||||
|
@ -1115,7 +1127,8 @@
|
|||
"ca": "és un memorial",
|
||||
"cs": "je památník",
|
||||
"he": "הוא אנדרטה",
|
||||
"pt_BR": "é um memorial"
|
||||
"pt_BR": "é um memorial",
|
||||
"es": "es un monumento conmemorativo"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -1133,7 +1146,8 @@
|
|||
"cs": "S opěradlem i bez něj",
|
||||
"he": "עם ובלי משענת גב",
|
||||
"pl": "Z oraz bez oparcia",
|
||||
"pt_BR": "Com e sem encosto"
|
||||
"pt_BR": "Com e sem encosto",
|
||||
"es": "Con y sin respaldo"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1147,7 +1161,8 @@
|
|||
"cs": "Má opěradlo",
|
||||
"he": "בעל משענת גב",
|
||||
"pl": "Ma oparcie",
|
||||
"pt_BR": "Tem um encosto"
|
||||
"pt_BR": "Tem um encosto",
|
||||
"es": "Tiene respaldo"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1161,7 +1176,8 @@
|
|||
"cs": "Nemá opěradlo",
|
||||
"he": "אין משענת גב",
|
||||
"pl": "Nie ma oparcia",
|
||||
"pt_BR": "Não tem um encosto"
|
||||
"pt_BR": "Não tem um encosto",
|
||||
"es": "Sin respaldo"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -261,7 +261,8 @@
|
|||
"cs": "Na této autobusové zastávce není lavička (nikdy zde nebyla nebo byla odstraněna)",
|
||||
"pt": "Este ponto de ônibus não tem banco (nunca houve ou foi removido)",
|
||||
"pl": "Ten przystanek autobusowy nie ma ławki (nigdy jej nie było lub została usunięta)",
|
||||
"pt_BR": "Essa parada de ônibus não tem um banco (nunca teve ou ele foi removido)"
|
||||
"pt_BR": "Essa parada de ônibus não tem um banco (nunca teve ou ele foi removido)",
|
||||
"es": "Esta parada de autobús no tiene banco (nunca lo hubo o lo han quitado)"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
@ -277,7 +278,8 @@
|
|||
"cs": "Tato autobusová zastávka se již nepoužívá",
|
||||
"pt": "Este ponto de ônibus não é mais usado",
|
||||
"pl": "Ten przystanek autobusowy nie jest już używany",
|
||||
"pt_BR": "Essa parada de ônibus não é mais usada"
|
||||
"pt_BR": "Essa parada de ônibus não é mais usada",
|
||||
"es": "Esta parada ya no se usa"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
|
|
@ -182,7 +182,7 @@
|
|||
"en": "This is a rental business which rents out various objects and/or vehicles. It rents out bicycles too, but this is not the main focus",
|
||||
"nl": "Dit is een zaak die verschillende voorwerpen en/of voertuigen verhuurt, waaronder ook fietsen; al zijn fietsen niet de hoofdfocus",
|
||||
"de": "Dies ist ein Geschäft, das verschiedene Gegenstände und/oder Fahrzeuge vermietet. Es vermietet auch Fahrräder, aber das ist nicht der Hauptschwerpunkt",
|
||||
"es": "Este es un negocio de alquileres que alquila varios objetos y/o vehículos. También alquila bicicletas, pero este no es el enfoque principal",
|
||||
"es": "Se trata de una empresa de alquiler que alquila diversos objetos y/o vehículos. También alquila bicicletas, pero este no es el objetivo principal",
|
||||
"da": "Dette er en udlejningsvirksomhed, som udlejer forskellige genstande og/eller køretøjer. Den udlejer også cykler, men det er ikke det primære fokus",
|
||||
"fr": "C'est une agence louant diverses choses et/ou voitures. Elle loue également des vélos, mais ce n'est pas sa principale activité",
|
||||
"cs": "Jedná se o půjčovnu, která pronajímá různé předměty a/nebo vozidla. Pronajímá také jízdní kola, ale to není hlavní náplní",
|
||||
|
@ -218,7 +218,7 @@
|
|||
"en": "This is an automated docking station, where a bicycle is mechanically locked to a structure",
|
||||
"nl": "Dit is een docking station waar de fietsen mechanisch in een grotere structuur worden vastgemaakt",
|
||||
"de": "Dies ist eine automatisierte Radstation, bei der ein Fahrrad mechanisch an einer Struktur befestigt wird",
|
||||
"es": "Esta es una estación automática, en la que una bici se asegura mecánicamente a una estructura",
|
||||
"es": "Se trata de una estación de bicicletas automatizada donde una bicicleta se fija mecánicamente a una estructura",
|
||||
"fr": "C'est un point d’attache automatisé où le vélo est attaché mécaniquement à une structure",
|
||||
"da": "Dette er en automatiseret dockingstation, hvor en cykel låses mekanisk fast i en struktur",
|
||||
"cs": "Jedná se o automatickou dokovací stanici, kde je jízdní kolo mechanicky uzamčeno ke konstrukci",
|
||||
|
@ -253,7 +253,7 @@
|
|||
"en": "This is a dropoff point, e.g. a reserved parking to place the bicycles clearly marked as being for the rental service only",
|
||||
"nl": "Dit is een dropzone, bv. een fietsparkeerplaats die is voorbehouden voor fietsverhuur",
|
||||
"de": "Dies ist ein Rückgabepunkt, z.B. ein reservierter Parkplatz, um die Fahrräder abzustellen, die eindeutig als nur für den Verleih gekennzeichnet sind",
|
||||
"es": "Este es un punto de entrega, ej. un aparcamiento reservado para colocar las bicicletas, claramente marcado como solo para el servicio de alquiler",
|
||||
"es": "Se trata de un punto de entrega, por ejemplo, un aparcamiento reservado para colocar las bicicletas claramente señalizado como exclusivo para el servicio de alquiler",
|
||||
"fr": "C'est un point de dépôt, p.ex. un emplacement de parking réservé aux vélos de location",
|
||||
"da": "Dette er et afleveringssted, f.eks. en reserveret parkeringsplads til cykler, som er tydeligt markeret som værende forbeholdt udlejningstjenesten",
|
||||
"cs": "Jedná se o místo předání, např. vyhrazené parkoviště pro umístění jízdních kol, zřetelně označené jako místo určené pouze pro půjčovnu",
|
||||
|
@ -519,7 +519,7 @@
|
|||
"nl": "mountainbikes",
|
||||
"ca": "bicicletas de muntanya",
|
||||
"de": "Mountainbikes",
|
||||
"es": "bicis de montaña",
|
||||
"es": "bicicletas de montaña",
|
||||
"da": "mountainbike",
|
||||
"eo": "montobicikloj",
|
||||
"fr": "vélos de montagne",
|
||||
|
@ -573,7 +573,7 @@
|
|||
"de": "Wie viele type_plural können hier gemietet werden?",
|
||||
"fr": "Combien de type_plural peuvent être loués ici ?",
|
||||
"cs": "Kolik typů kol si zde můžete pronajmout?",
|
||||
"es": "¿Cuántas type_plural pueden alquilarse aquí?",
|
||||
"es": "¿Cuántos type_plural se pueden alquilar aquí?",
|
||||
"ca": "Quants type_plural es poden llogar aquí?",
|
||||
"pt_BR": "Quantos type_plural podem ser alugados aqui?"
|
||||
},
|
||||
|
|
|
@ -12,7 +12,8 @@
|
|||
"pt": "Máquina de venda automática de tubos de bicicleta",
|
||||
"da": "Automat til salg af cykelslanger",
|
||||
"cs": "Automat na cyklistické duše",
|
||||
"ca": "Màquina expenedora de tubs de bicicleta"
|
||||
"ca": "Màquina expenedora de tubs de bicicleta",
|
||||
"es": "Máquina expendedora de tubos de bicicleta"
|
||||
},
|
||||
"description": {
|
||||
"en": "A layer showing vending machines for bicycle tubes (either purpose-built bicycle tube vending machines or classical vending machines with bicycle tubes and optionally additional bicycle related objects such as lights, gloves, locks, …)",
|
||||
|
@ -22,7 +23,8 @@
|
|||
"fr": "Une couche affichant des distributeurs automatiques de chambre à air (que ce soit des distributeurs conçus spécifiquement pour les chambres à air ou des distributeurs classiques incluant des chambres à air ainsi des objets apparentés tels que de l'éclairage pour vélo, des gants, des cadenas, ...)",
|
||||
"cs": "Vrstva zobrazující automaty na cyklistické duše (buď speciální automaty na cyklistické duše, nebo klasické automaty s cyklistickými dušemi a případně dalšími předměty souvisejícími s jízdními koly, jako jsou světla, rukavice, zámky, ...)",
|
||||
"ca": "Una capa que mostra màquines expenedores per a tubs de bicicleta (ja siguin màquines expenedores de tubs de bicicleta o màquines expenedores clàssiques amb tubs de bicicleta i opcionalment objectes addicionals relacionats amb la bicicleta com ara llums, guants, panys, ...)",
|
||||
"pt_BR": "Uma camada que mostra máquinas de venda de câmaras de ar de bicicleta (sejam máquinas de venda de câmaras de ar de bicicleta específicas ou máquinas de venda clássicas com câmaras de ar de bicicleta e opcionalmente objetos relacionados a bicicletas, como luzes, luvas, travas, ...)"
|
||||
"pt_BR": "Uma camada que mostra máquinas de venda de câmaras de ar de bicicleta (sejam máquinas de venda de câmaras de ar de bicicleta específicas ou máquinas de venda clássicas com câmaras de ar de bicicleta e opcionalmente objetos relacionados a bicicletas, como luzes, luvas, travas, ...)",
|
||||
"es": "Una capa que muestra máquinas expendedoras de cámaras de bicicleta (ya sean máquinas expendedoras de cámaras de bicicleta especialmente diseñadas o máquinas expendedoras clásicas con cámaras de bicicleta y, opcionalmente, objetos adicionales relacionados con la bicicleta, como luces, guantes, candados, etc.)"
|
||||
},
|
||||
"source": {
|
||||
"osmTags": {
|
||||
|
@ -57,7 +59,8 @@
|
|||
"de": "{name} Fahrradschlauch-Automat",
|
||||
"cs": "Automat na cyklistické pláště{name}",
|
||||
"nl": "Fietsbanden-verkoopautomaat {name}",
|
||||
"pt_BR": "Máquina de venda de câmara de ar para bicicleta {name}"
|
||||
"pt_BR": "Máquina de venda de câmara de ar para bicicleta {name}",
|
||||
"es": "Máquina expendedora de cámaras de bicicleta {name}"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -118,7 +121,8 @@
|
|||
"pt": "uma máquina de venda automática de tubos de bicicleta",
|
||||
"da": "en automat til salg af cykelslanger",
|
||||
"cs": "automat na cyklistické duše",
|
||||
"ca": "una màquina expenedora de tubs de bicicleta"
|
||||
"ca": "una màquina expenedora de tubs de bicicleta",
|
||||
"es": "una máquina expendedora de tubos de bicicleta"
|
||||
},
|
||||
"tags": [
|
||||
"amenity=vending_machine",
|
||||
|
@ -233,7 +237,8 @@
|
|||
"de": "Wie viel kostet ein Fahrradschlauch?",
|
||||
"cs": "Kolik stojí duše na kolo?",
|
||||
"nl": "Hoeveel kost een fietsband?",
|
||||
"pt_BR": "Quanto custa uma câmara de ar para bicicleta?"
|
||||
"pt_BR": "Quanto custa uma câmara de ar para bicicleta?",
|
||||
"es": "¿Cuánto cuesta una cámara para la bicicleta?"
|
||||
},
|
||||
"render": {
|
||||
"en": "A bicycle tube costs {charge}",
|
||||
|
@ -241,7 +246,8 @@
|
|||
"de": "Ein Fahrradschlauch kostet {charge}",
|
||||
"cs": "Cena jedné duše {charge}",
|
||||
"nl": "Een fietsband kost {charge}",
|
||||
"pt_BR": "Uma câmara de ar para bicicleta custa {charge}"
|
||||
"pt_BR": "Uma câmara de ar para bicicleta custa {charge}",
|
||||
"es": "Una cámara para bicicletas cuesta {charge}"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "charge"
|
||||
|
@ -256,7 +262,8 @@
|
|||
"de": "Welche Fahrradschläuche werden hier verkauft?",
|
||||
"cs": "Jaká značka duší je zde prodávána?",
|
||||
"nl": "Welk merk banden wordt hier verkocht?",
|
||||
"pt_BR": "Quais marcas de câmara de ar são vendidas aqui?"
|
||||
"pt_BR": "Quais marcas de câmara de ar são vendidas aqui?",
|
||||
"es": "¿Qué cámaras se venden aquí?"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "brand"
|
||||
|
@ -267,7 +274,8 @@
|
|||
"de": "Hier werden Fahrradschläuche von {brand} verkauft",
|
||||
"cs": "{brand} duše jsou zde prodávány",
|
||||
"nl": "{brand} banden worden hier verkocht",
|
||||
"pt_BR": "câmaras de ar {brand} são vendidas aqui"
|
||||
"pt_BR": "câmaras de ar {brand} são vendidas aqui",
|
||||
"es": "Las cámaras {brand} se venden aquí"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
|
@ -278,7 +286,8 @@
|
|||
"de": "Hier werden Fahrradschläuche von Continental verkauft",
|
||||
"cs": "Continental duše jsou zde prodávány",
|
||||
"nl": "Continental banden worden hier verkocht",
|
||||
"pt_BR": "Câmaras de ar Continental são vendidas aqui"
|
||||
"pt_BR": "Câmaras de ar Continental são vendidas aqui",
|
||||
"es": "Las cámaras Continental se venden aquí"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -289,7 +298,8 @@
|
|||
"de": "Hier werden Fahrradschläuche von Schwalbe verkauft",
|
||||
"cs": "Schwalbe duše jsou zde prodávány",
|
||||
"nl": "Schwalbe banden worden hier verkocht",
|
||||
"pt_BR": "Câmaras de ar Schwalbe são vendidas aqui"
|
||||
"pt_BR": "Câmaras de ar Schwalbe são vendidas aqui",
|
||||
"es": "Las cámaras Schwalbe se venden aquí"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
@ -303,7 +313,8 @@
|
|||
"de": "Wer betreibt den Automaten?",
|
||||
"cs": "Kdo se stará o tento automat?",
|
||||
"nl": "Wie onderhoudt deze verkoopautomaat?",
|
||||
"pt_BR": "Quem mantém essa máquina de venda?"
|
||||
"pt_BR": "Quem mantém essa máquina de venda?",
|
||||
"es": "¿Quién mantiene esta máquina expendedora?"
|
||||
},
|
||||
"render": "This vending machine is maintained by {operator}",
|
||||
"mappings": [
|
||||
|
@ -315,7 +326,8 @@
|
|||
"de": "Betrieben von Schwalbe",
|
||||
"cs": "Udržuje Schwalbe",
|
||||
"nl": "Onderhouden door Schwalbe",
|
||||
"pt_BR": "Mantido pela Schwalbe"
|
||||
"pt_BR": "Mantido pela Schwalbe",
|
||||
"es": "Mantenido por Schwalbe"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -326,7 +338,8 @@
|
|||
"de": "Betrieben von Continental",
|
||||
"cs": "Udržuje Continental",
|
||||
"nl": "Onderhouden door Continental",
|
||||
"pt_BR": "Mantido pela Continental"
|
||||
"pt_BR": "Mantido pela Continental",
|
||||
"es": "Mantenido por Continental"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
@ -343,7 +356,8 @@
|
|||
"de": "Wird weiteres Fahrradzubehör verkauft?",
|
||||
"cs": "Prodávají se zde další doplňky na kolo?",
|
||||
"nl": "Worden hier andere fietsaccessoires verkocht?",
|
||||
"pt_BR": "Outros acessórios para bicicleta são vendidos aqui?"
|
||||
"pt_BR": "Outros acessórios para bicicleta são vendidos aqui?",
|
||||
"es": "¿Se venden aquí otros accesorios para bicicletas?"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
|
@ -354,7 +368,8 @@
|
|||
"ca": "Aquí es venen cambres d'aire de bicicletes",
|
||||
"de": "Hier werden Fahrradschläuche verkauft",
|
||||
"cs": "Zde se prodávají cyklistické duše",
|
||||
"pt_BR": "Câmaras de ar para bicicletas são vendidas aqui"
|
||||
"pt_BR": "Câmaras de ar para bicicletas são vendidas aqui",
|
||||
"es": "Aquí se venden cámaras de aire para bicicletas"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -365,7 +380,8 @@
|
|||
"ca": "Aquí es venen llums per a bicicletes",
|
||||
"de": "Hier werden Fahrradlampen verkauft",
|
||||
"cs": "Zde se prodávají světla na jízdní kola",
|
||||
"pt_BR": "Luzes para bicicleta são vendidas aqui"
|
||||
"pt_BR": "Luzes para bicicleta são vendidas aqui",
|
||||
"es": "Las luces para bicicletas se venden aquí"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -376,7 +392,8 @@
|
|||
"ca": "Aquí es venen guants",
|
||||
"de": "Hier werden Fahrradhandschuhe verkauft",
|
||||
"cs": "Prodávají se zde rukavice",
|
||||
"pt_BR": "Luvas são vendidas aqui"
|
||||
"pt_BR": "Luvas são vendidas aqui",
|
||||
"es": "Los guantes se venden aquí"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -387,7 +404,8 @@
|
|||
"ca": "Aquí es venen kits de reparació de bicicletes",
|
||||
"de": "Hier werden Fahrrad-Reparatursets verkauft",
|
||||
"cs": "Zde se prodávají sady na opravu jízdních kol",
|
||||
"pt_BR": "Kits para reparo de bicicleta são vendidos aqui"
|
||||
"pt_BR": "Kits para reparo de bicicleta são vendidos aqui",
|
||||
"es": "Los kits de reparación de bicicletas se venden aquí"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -398,7 +416,8 @@
|
|||
"ca": "Aquí es venen bombes de bicicletes",
|
||||
"de": "Hier werden Fahrradpumpen verkauft",
|
||||
"cs": "Prodávají se zde pumpy na kolo",
|
||||
"pt_BR": "Bombas de ar para bicicleta são vendidas aqui"
|
||||
"pt_BR": "Bombas de ar para bicicleta são vendidas aqui",
|
||||
"es": "Las bombas para bicicletas se venden aquí"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -409,7 +428,8 @@
|
|||
"ca": "Aquí es venen cadenats per a bicicletes",
|
||||
"de": "Hier werden Fahrradschlösser verkauft",
|
||||
"cs": "Prodávají se zde zámky na kola",
|
||||
"pt_BR": "Cadeados para bicicleta são vendidos aqui"
|
||||
"pt_BR": "Cadeados para bicicleta são vendidos aqui",
|
||||
"es": "Aquí se venden candados para bicicletas"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
|
|
@ -249,7 +249,7 @@
|
|||
"ru": "Есть ли здесь инструменты для починки вашего велосипеда?",
|
||||
"pt_BR": "Há ferramentas aqui para consertar sua bicicleta?",
|
||||
"pt": "Há ferramentas aqui para consertar a sua própria bicicleta?",
|
||||
"es": "¿Hay herramientas para reparar su propia bicicleta?",
|
||||
"es": "¿Se ofrecen herramientas para reparar tu propia bicicleta?",
|
||||
"da": "Er der værktøj her til at reparere din egen cykel?",
|
||||
"cs": "Je nabízeno nářadí k opravě vlastního kola?",
|
||||
"ca": "S'ofereixen eines per reparar la teva pròpia bicicleta?"
|
||||
|
|
|
@ -193,7 +193,7 @@
|
|||
"en": "Free to use",
|
||||
"de": "Kostenlose Nutzung",
|
||||
"nl": "Gratis te gebruiken",
|
||||
"es": "Gratis",
|
||||
"es": "Uso gratuito",
|
||||
"fr": "Utilisation gratuite",
|
||||
"da": "Gratis at bruge",
|
||||
"cs": "Bezplatné používání",
|
||||
|
@ -247,7 +247,7 @@
|
|||
"en": "This cleaning service is free to use",
|
||||
"de": "Der Reinigungsservice ist kostenlos",
|
||||
"nl": "Dit fietsschoonmaakpunt is gratis te gebruiken",
|
||||
"es": "Servicio de limpieza gratis",
|
||||
"es": "Este servicio de limpieza es gratuito",
|
||||
"fr": "Service de nettoyage gratuit",
|
||||
"da": "Gratis at bruge rengøringsservice",
|
||||
"cs": "Tato mycí služba je bezplatná",
|
||||
|
|
|
@ -937,7 +937,7 @@
|
|||
"it": "Sclaverand (detta anche Presta)",
|
||||
"ru": "Клапан Presta (также известный как французский клапан)",
|
||||
"da": "Sclaverand/Presta (cykeldæk med smal bredde)",
|
||||
"es": "Sclaverand/Presata (ruedas de bicicleta estrechas)",
|
||||
"es": "Sclaverand/Presta (neumáticos de bicicleta estrechos)",
|
||||
"cs": "Sclaverand/Presta (úzké cyklistické pláště)",
|
||||
"ca": "Sclaverand/Presta (pneumàtics per a bicis estrets)"
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@
|
|||
"de": "Sportartikelgeschäft <i>{name}</i>",
|
||||
"pt_BR": "Loja de equipamentos esportivos <i>{name}</i>",
|
||||
"pt": "Loja de equipamentos desportivos <i>{name}</i>",
|
||||
"es": "Tienda de artículos deportivos <i>{name}</i>",
|
||||
"es": "Tienda de material deportivo <i>{name}</i>",
|
||||
"da": "Butik med sportsudstyr <i>{name}</i>",
|
||||
"ca": "Botiga d'equipament esportiu <i>{name}</i>",
|
||||
"cs": "Obchod se sportovním vybavením <i>{name}</i>"
|
||||
|
@ -133,7 +133,7 @@
|
|||
"de": "Fahrradverleih <i>{name}</i>",
|
||||
"pt_BR": "Aluguel de bicicletas <i>{name}</i>",
|
||||
"pt": "Aluguel de bicicletas <i>{name}</i>",
|
||||
"es": "Alquiler de bicicletas <i>{name}</i>",
|
||||
"es": "Tienda de alquiler de bicicletas <i>{name}</i>",
|
||||
"da": "Cykeludlejning <i>{name}</i>",
|
||||
"ca": "Botiga de lloguer de bicicletes <i>{name}</i>",
|
||||
"cs": "Půjčovna kol <i>{name}</i>"
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
"fr": "Objet cycliste",
|
||||
"de": "Fahrradbezogenes Objekt",
|
||||
"it": "Oggetto relativo alle bici",
|
||||
"es": "Objeto relacionado con bicis",
|
||||
"es": "Objeto relacionado con las bicicletas",
|
||||
"da": "Cykelrelateret objekt",
|
||||
"ca": "Objecte relacionat amb bicis",
|
||||
"cs": "Objekt související s jízdním kolem",
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"fr": "Cafés et pubs",
|
||||
"zh_Hant": "咖啡廳與酒吧",
|
||||
"hu": "Kávézók és kocsmák",
|
||||
"es": "Cafeterías y bares",
|
||||
"es": "Cafeterías y pubs",
|
||||
"da": "Caféer og pubber",
|
||||
"ca": "Cafés i bars",
|
||||
"pl": "Kawiarnie i puby",
|
||||
|
@ -73,19 +73,22 @@
|
|||
{
|
||||
"if": "amenity=bar",
|
||||
"then": {
|
||||
"en": "Bar"
|
||||
"en": "Bar",
|
||||
"de": "Bar"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "amenity=cafe",
|
||||
"then": {
|
||||
"en": "Cafe"
|
||||
"en": "Cafe",
|
||||
"de": "Café"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "amenity=nightclub",
|
||||
"then": {
|
||||
"en": "Nightclub"
|
||||
"en": "Nightclub",
|
||||
"de": "Nachtclub"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -213,7 +216,7 @@
|
|||
"nl": "Dit is een <b>cafe</b> - een plaats waar men rustig kan zitten om een thee, koffie of alcoholische drank te nuttigen.",
|
||||
"de": "Ein <b>Café</b>, um in ruhiger Umgebung Tee, Kaffee oder ein alkoholisches Getränk zu trinken",
|
||||
"da": "En <b>café</b> til at drikke te, kaffe eller en alkoholisk drik i rolige omgivelser",
|
||||
"es": "Una <b>cafetería</b> para beber té, café o una bebida alcohólica en un ambiente tranquilo",
|
||||
"es": "Un <b>café</b> para tomar té, café o una bebida alcohólica en un ambiente tranquilo",
|
||||
"fr": "Un <b>café</b> pour prendre un thé, un café ou une boisson alcoolisée dans un environnement calme",
|
||||
"ca": "Una <b>cafeteria</b> per a a beure té, café o una beguda alcohólica en un ambient tranquil",
|
||||
"cs": "<b>kavárna</b>, kde si můžete v klidném prostředí vypít čaj, kávu nebo alkoholický nápoj"
|
||||
|
@ -257,7 +260,7 @@
|
|||
"fr": "Quel est le nom de ce pub ?",
|
||||
"hu": "Mi a neve ennek a kocsmának?",
|
||||
"da": "Hvad hedder denne pub?",
|
||||
"es": "¿Cual es el nombre de este pub?",
|
||||
"es": "¿Cuál es el nombre de esta empresa?",
|
||||
"ca": "Quin és el nom d'aquest negoci?",
|
||||
"cs": "Jak se tento podnik jmenuje?"
|
||||
},
|
||||
|
@ -268,7 +271,7 @@
|
|||
"fr": "Ce pub se nomme {name}",
|
||||
"hu": "A kocsma neve: {name}",
|
||||
"da": "Denne pub hedder {name}",
|
||||
"es": "Este pub se llama {name}",
|
||||
"es": "Esta empresa se llama {name}",
|
||||
"ca": "Aquest negoci es diu {name}",
|
||||
"cs": "Tento podnik se jmenuje {name}"
|
||||
},
|
||||
|
@ -337,7 +340,7 @@
|
|||
"nl": "Dit is een <b>restaurant</b> waar men een maaltijd geserveerd krijgt",
|
||||
"de": "Ein <b>Restaurant</b>, in dem man ordentlich essen kann",
|
||||
"da": "En <b>restaurant</b>, hvor man kan få et ordentligt måltid",
|
||||
"es": "Un <b>restaurante</b> donde puedes comer una comida de verdad",
|
||||
"es": "Un <b>restaurante</b> donde se pueda comer como es debido",
|
||||
"fr": "Un <b>restaurant</b> où l'on peut prendre un bon repas",
|
||||
"ca": "Un <b>restaurant</b> on es pot menjar bé",
|
||||
"cs": "<b>Restaurace</b>, kde se dá pořádně najíst"
|
||||
|
|
|
@ -259,7 +259,7 @@
|
|||
"cs": "Nepřístupné široké veřejnosti (např. přístupné pouze majitelům, zaměstnancům, ...)",
|
||||
"da": "Ikke tilgængelig for offentligheden (f.eks. kun tilgængelig for ejere, ansatte, ...)",
|
||||
"de": "Die Station ist nicht für die Allgemeinheit zugänglich (z. B. nur für die Eigentümer, Mitarbeiter, …)",
|
||||
"es": "No accesible al público general (ej. solo accesible a los propietarios, empleados, ...)"
|
||||
"es": "No accesible al público en general (por ejemplo, sólo accesible a los propietarios, empleados, ...)"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -4343,7 +4343,7 @@
|
|||
"cs": "Placené použití, ale zdarma pro zákazníky hotelu/podniku/nemocnice/..., který dobíjecí stanici provozuje",
|
||||
"da": "Betalt brug, men gratis for kunder på det hotel/pub/hospital/... der driver ladestationen",
|
||||
"de": "Die Nutzung ist kostenpflichtig, aber für Kunden des Betreibers der Einrichtung, wie Hotel, Krankenhaus, … kostenlos",
|
||||
"es": "De pago, pero gratis para clientes del hotel/pub/hostpital... quien opera la estación de carga"
|
||||
"es": "Pago por uso, pero gratuito para los clientes del hotel/pub/hospital/... que gestiona la estación de carga"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"fr": "Traversée",
|
||||
"ca": "Encreuaments",
|
||||
"da": "Overgange",
|
||||
"es": "Cruces",
|
||||
"es": "Pasos",
|
||||
"pa_PK": "کراسنگاں",
|
||||
"cs": "Přechody"
|
||||
},
|
||||
|
@ -17,7 +17,7 @@
|
|||
"de": "Übergänge für Fußgänger und Radfahrer",
|
||||
"fr": "Traversée pour piétons et cyclistes",
|
||||
"da": "Overgange for fodgængere og cyklister",
|
||||
"es": "Cruces para peatones y ciclistas",
|
||||
"es": "Pasos para peatones y ciclistas",
|
||||
"ca": "Creuaments per a vianants i ciclistes",
|
||||
"cs": "Přechody pro chodce a cyklisty"
|
||||
},
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
"en": "All infrastructure that someone can cycle over, accompanied with questions about this infrastructure",
|
||||
"nl": "Alle infrastructuur waar je over kunt fietsen, met vragen over die infrastructuur",
|
||||
"de": "Infrastruktur, die man mit dem Fahrrad befahren kann, begleitet von diesbezüglichen Fragen",
|
||||
"es": "Toda la infraestructura sobre la que alguien puede ir en bici, acompañado de preguntas sobre esta infraestructura\"",
|
||||
"es": "Todas las infraestructuras sobre las que se puede circular en bicicleta, acompañadas de preguntas sobre las mismas",
|
||||
"fr": "Toutes les infrastructures sur lesquelles quelqu'un peut rouler, accompagnées de questions sur cette infrastructure",
|
||||
"ca": "Totes les infraestructures per les quals algú pot ciclar, acompanyades de preguntes sobre aquesta infraestructura",
|
||||
"cs": "Veškerá infrastruktura, kterou může někdo projet na kole, doplněná o otázky týkající se této infrastruktury"
|
||||
|
@ -91,7 +91,7 @@
|
|||
"fr": "Piste cyclable",
|
||||
"ca": "Via ciclista",
|
||||
"da": "Cykelsti",
|
||||
"es": "Carril compartido",
|
||||
"es": "Carril bici",
|
||||
"pa_PK": "سائیکلوے",
|
||||
"cs": "Cyklostezka"
|
||||
}
|
||||
|
@ -121,7 +121,7 @@
|
|||
"de": "Gemeinsame Fahrspur",
|
||||
"fr": "Voie partagée",
|
||||
"ca": "Carril compartit",
|
||||
"es": "Vía ciclista al lado de la carretera",
|
||||
"es": "Carril compartido",
|
||||
"cs": "Sdílený jízdní pruh"
|
||||
}
|
||||
},
|
||||
|
|
|
@ -253,7 +253,7 @@
|
|||
"then": {
|
||||
"en": "Not accessible to the general public (e.g. only accesible to staff, the owners, …)",
|
||||
"ca": "No accessible al públic en general (ex. només accesible a treballadors, propietaris, ...)",
|
||||
"es": "No accesible al público en general (ex. sólo accesible a trabajadores, propietarios, ...)",
|
||||
"es": "No accesible al público en general (por ejemplo, sólo accesible para el personal, los propietarios, ...)",
|
||||
"fr": "Non accessible au public (par exemple réservé au personnel, au propriétaire…)",
|
||||
"nl": "Niet toegankelijk voor het publiek (bv. enkel voor personeel, de eigenaar, …)",
|
||||
"de": "Der Defibrillator ist nicht öffentlich zugänglich (z.B. nur für Personal, Eigentümer, …)",
|
||||
|
@ -443,7 +443,7 @@
|
|||
"it": "<i>Informazioni supplementari circa la posizione (in lingua locale):</i><br/>{defibrillator:location}",
|
||||
"de": "<i>Zusätzliche Informationen über den Standort (in der Landessprache):</i><br/>{defibrillator:location}",
|
||||
"sl": "<i>Dodatne informacije o lokaciji (v lokalnem jeziku):</i><br/>{defibrillator:location}",
|
||||
"es": "<i>Información a mayores sobre la localización (en el idioma local):</i><br/>{defibrillator:location}",
|
||||
"es": "<i>Información adicional sobre la ubicación (en el idioma local):</i><br/>{defibrillator:location}",
|
||||
"ca": "<i>Informació extra sobre la localització (en la llengua local):</i><br/> {defibrillator:location}",
|
||||
"pl": "<i>Dodatkowe informacje o lokalizacji (w lokalnym języku):</i><br/>{defibrillator:location}",
|
||||
"cs": "<i>Další informace o místě (v místním jazyce):</i><br/>{defibrillator:location}"
|
||||
|
|
|
@ -108,7 +108,8 @@
|
|||
"cs": "pitná voda"
|
||||
},
|
||||
"description": {
|
||||
"en": "Typically a drinking fountain, water tap, water well or natural spring"
|
||||
"en": "Typically a drinking fountain, water tap, water well or natural spring",
|
||||
"de": "Typischerweise ein Trinkbrunnen, Wasserhahn, Brunnen oder eine natürliche Quelle"
|
||||
},
|
||||
"tags": [
|
||||
"amenity=drinking_water"
|
||||
|
|
|
@ -500,7 +500,7 @@
|
|||
"en": "This door has a width of {canonical(width)}",
|
||||
"nl": "Deze deur heeft een breedte van {canonical(width)}",
|
||||
"de": "Diese Tür hat eine Durchgangsbreite von {canonical(width)}",
|
||||
"es": "Esta puerta tiene una ancho de {canonical(width)} metros",
|
||||
"es": "Esta puerta tiene una ancho de {canonical(width)}",
|
||||
"fr": "Cette porte a une largeur de {canonical(width)} mètre",
|
||||
"ca": "Aquesta porta té una amplària de {canonical(width)}",
|
||||
"cs": "Tyto dveře mají šířku {canonical(width)}"
|
||||
|
|
71
assets/layers/favourite/favourite.json
Normal file
71
assets/layers/favourite/favourite.json
Normal file
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"pointRendering": [
|
||||
{
|
||||
"location": [
|
||||
"point",
|
||||
"centroid"
|
||||
],
|
||||
"marker": [
|
||||
{
|
||||
"icon": {
|
||||
"render": "heart",
|
||||
"mappings": [
|
||||
{
|
||||
"if": "_favourite=no",
|
||||
"then": "heart_outline"
|
||||
}
|
||||
]
|
||||
},
|
||||
"color": "red"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"description": {
|
||||
"en": "A generic map layer which shows locations that a contributor marked as favourite",
|
||||
"nl": "Een laag met persoonlijke favourieten"
|
||||
},
|
||||
"name": {
|
||||
"en": "Favourites",
|
||||
"nl": "Favorieten"
|
||||
},
|
||||
"id": "favourite",
|
||||
"source": "special",
|
||||
"isShown": "_favourite=yes",
|
||||
"minzoom": 0,
|
||||
"title": {
|
||||
"render": {
|
||||
"en": "Favourite location",
|
||||
"nl": "Favoriete locatie"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
"if": "name~*",
|
||||
"then": {
|
||||
"*": "{name}"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"tagRenderings": [
|
||||
{
|
||||
"id": "Explanation",
|
||||
"classes": "thanks",
|
||||
"icon": {
|
||||
"class": "large",
|
||||
"path": "heart"
|
||||
},
|
||||
"render": {
|
||||
"en": "You marked this location as a personal favourite. As such, it is shown on every map you load.",
|
||||
"nl": "Je hebt deze locatie als persoonlijke favoriet aangeduid en worden op alle MapComplete-kaarten getoond."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "show_images",
|
||||
"render": {
|
||||
"*": "{image_carousel()}"
|
||||
}
|
||||
},
|
||||
"all_tags"
|
||||
]
|
||||
}
|
|
@ -14,7 +14,7 @@
|
|||
"nl": "Nu open",
|
||||
"de": "Jetzt geöffnet",
|
||||
"ca": "Obert ara",
|
||||
"es": "Abierta ahora",
|
||||
"es": "Abierto",
|
||||
"fr": "Ouvert maintenant",
|
||||
"hu": "Most nyitva van",
|
||||
"da": "Åbent nu",
|
||||
|
|
|
@ -247,7 +247,7 @@
|
|||
"nl": "Wat is de naam van deze eetgelegenheid?",
|
||||
"en": "What is the name of this business?",
|
||||
"de": "Was ist der Name dieses Unternehmens?",
|
||||
"es": "¿Cual es el nombre de este restaurante?",
|
||||
"es": "¿Cuál es el nombre de este negocio?",
|
||||
"fr": "Quel est le nom de ce restaurant ?",
|
||||
"ca": "Quin és el nom d'aquest negoci?",
|
||||
"cs": "Jak se tento podnik jmenuje?"
|
||||
|
@ -256,7 +256,7 @@
|
|||
"nl": "De naam van deze eetgelegeheid is {name}",
|
||||
"en": "The name of this business is {name}",
|
||||
"de": "Dieses Unternehmen heißt {name}",
|
||||
"es": "El nombre de este restaurante es {name}",
|
||||
"es": "El nombre de este negocio es {name}",
|
||||
"fr": "Le nom de ce restaurant est {name}",
|
||||
"ca": "El nom d'aquest negoci és {name}",
|
||||
"cs": "Název tohoto podniku je {name}"
|
||||
|
@ -283,7 +283,7 @@
|
|||
"en": "This is a fast-food business, focused on fast service. If seating is available, it is rather limited and functional.",
|
||||
"nl": "Dit is een <b>fastfood-zaak</b>. De focus ligt op snelle bediening, zitplaatsen zijn vaak beperkt en functioneel.",
|
||||
"de": "Es handelt sich um einen Schnellimbiss, mit Fokus auf schnelle Bedienung am Tresen. Sitzmöglichkeiten sind begrenzt und funktional.",
|
||||
"es": "Este es un negocio de comida rápida, centrado en servicio rápido. Si hay asientos disponibles, son más bien limitados y funcionales.",
|
||||
"es": "Se trata de un negocio de comida rápida, centrado en el servicio rápido. Si hay asientos disponibles, son más bien limitados y funcionales.",
|
||||
"fr": "C'est un fast-food, centrée sur le service rapide. Si des places sont disponibles, elles sont plutôt limitées et fonctionnelles.",
|
||||
"hu": "Ez egy gyorsétterem (büfé), amely a gyors kiszolgálásra összpontosít. Ha vannak is ülőhelyek, ezek meglehetősen korlátozottak és funkcionálisak.",
|
||||
"ca": "Aquest és un negoci de menjar ràpid, centrat en el servei ràpid. Si hi han seients disponibles, aquests seràn limitats i funcionals.",
|
||||
|
@ -296,7 +296,7 @@
|
|||
"en": "A <b>restaurant</b>, focused on creating a nice experience where one is served at the table",
|
||||
"nl": "Dit is een <b>restaurant</b>. De focus ligt op een aangename ervaring waar je aan tafel wordt bediend",
|
||||
"de": "Es handelt sich um ein <b>Restaurant</b>, mit Fokus auf eine nette Atmosphäre und Tischbedienung",
|
||||
"es": "Un <b>restaurante</b>, centrado en crear una buena experiencia donde se sirve en la mesa",
|
||||
"es": "Un <b>restaurante</b>, centrado en crear una experiencia agradable en la que uno se sirve en mesa",
|
||||
"fr": "Un <b>restaurant</b>, axé sur la création d'une expérience agréable où l'on est servi à table",
|
||||
"ca": "Un <b>restaurant</b>, centrat en crear una bona experiència on es serveix a taula",
|
||||
"cs": "<b>Restaurace</b> zaměřená na vytvoření příjemného zážitku, kde se obsluhuje u stolu"
|
||||
|
@ -317,7 +317,7 @@
|
|||
"nl": "Welk soort gerechten worden hier geserveerd?",
|
||||
"en": "What kind of food is served here?",
|
||||
"de": "Was für Essen gibt es hier?",
|
||||
"es": "¿Qué comida se sirve aquí?",
|
||||
"es": "¿Qué tipo de comida sirven aquí?",
|
||||
"fr": "Quelle type de nourriture est servie ici ?",
|
||||
"ca": "Quin menjar es serveix aquí?",
|
||||
"cs": "Jaké jídlo se zde podává?"
|
||||
|
@ -442,7 +442,7 @@
|
|||
"en": "This is an Italian restaurant (which serves more than pasta and pizza)",
|
||||
"nl": "Dit is een Italiaans restaurant (dat meer dan enkel pasta of pizza verkoopt)",
|
||||
"de": "Dies ist ein italienisches Restaurant (das mehr als nur Pasta und Pizza serviert)",
|
||||
"es": "Este es un restaurante italiano (que sirve más que pasta y pizza)",
|
||||
"es": "Este es un restaurante italiano (que sirve algo más que pasta y pizza)",
|
||||
"fr": "C'est un Restaurant Italien (qui sert plus que des pâtes et des pizzas)",
|
||||
"ca": "Això és un restaurant italià (que serveix més que pasta i pizza)",
|
||||
"cs": "Toto je italská restaurace (která nabízí více než těstoviny a pizzu)"
|
||||
|
@ -588,7 +588,7 @@
|
|||
"nl": "Biedt deze zaak een afhaalmogelijkheid aan?",
|
||||
"en": "Does this place offer take-away?",
|
||||
"de": "Werden Gerichte zum Mitnehmen angeboten?",
|
||||
"es": "¿Este lugar ofrece para llevar?",
|
||||
"es": "¿Este local ofrece comida para llevar?",
|
||||
"fr": "Cet établissement propose-t-il des plats à emporter ?",
|
||||
"ca": "Aquest lloc ofereix per a emportar?",
|
||||
"cs": "Nabízí toto místo jídlo s sebou?"
|
||||
|
|
|
@ -59,7 +59,8 @@
|
|||
{
|
||||
"id": "type",
|
||||
"question": {
|
||||
"en": "What kind of routes are shown on this guidepost?"
|
||||
"en": "What kind of routes are shown on this guidepost?",
|
||||
"de": "Welche Arten von Routen werden auf diesem Wegweiser angezeigt?"
|
||||
},
|
||||
"multiAnswer": true,
|
||||
"mappings": [
|
||||
|
@ -67,35 +68,40 @@
|
|||
"if": "bicycle=yes",
|
||||
"ifnot": "bicycle=",
|
||||
"then": {
|
||||
"en": "This guidepost shows bicycle routes"
|
||||
"en": "This guidepost shows bicycle routes",
|
||||
"de": "Dieser Wegweiser zeigt Fahrradrouten"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "hiking=yes",
|
||||
"ifnot": "hiking=",
|
||||
"then": {
|
||||
"en": "This guidepost shows hiking routes"
|
||||
"en": "This guidepost shows hiking routes",
|
||||
"de": "Dieser Wegweiser zeigt Wanderwege"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "mtb=yes",
|
||||
"ifnot": "mtb=",
|
||||
"then": {
|
||||
"en": "This guidepost shows mountain bike routes"
|
||||
"en": "This guidepost shows mountain bike routes",
|
||||
"de": "Dieser Wegweiser zeigt Mountainbike-Routen"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "horse=yes",
|
||||
"ifnot": "horse=",
|
||||
"then": {
|
||||
"en": "This guidepost shows horse riding routes"
|
||||
"en": "This guidepost shows horse riding routes",
|
||||
"de": "Dieser Wegweiser zeigt Reitwege"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "ski=yes",
|
||||
"ifnot": "ski=",
|
||||
"then": {
|
||||
"en": "This guidepost shows ski routes"
|
||||
"en": "This guidepost shows ski routes",
|
||||
"de": "Dieser Wegweiser zeigt Skirouten"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,23 +1,27 @@
|
|||
{
|
||||
"id": "ice_cream",
|
||||
"name": {
|
||||
"en": "Ice cream parlors"
|
||||
"en": "Ice cream parlors",
|
||||
"de": "Eisdielen"
|
||||
},
|
||||
"description": {
|
||||
"en": "A place where ice cream is sold over the counter"
|
||||
"en": "A place where ice cream is sold over the counter",
|
||||
"de": "Ein Ort, an dem Eiscreme an der Theke verkauft wird"
|
||||
},
|
||||
"source": {
|
||||
"osmTags": "amenity=ice_cream"
|
||||
},
|
||||
"title": {
|
||||
"render": {
|
||||
"en": "Ice cream parlor"
|
||||
"en": "Ice cream parlor",
|
||||
"de": "Eisdiele"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
"if": "name~*",
|
||||
"then": {
|
||||
"en": "{name}"
|
||||
"en": "{name}",
|
||||
"de": "{name}"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -48,13 +52,15 @@
|
|||
"presets": [
|
||||
{
|
||||
"title": {
|
||||
"en": "an ice cream parlor"
|
||||
"en": "an ice cream parlor",
|
||||
"de": "eine Eisdiele"
|
||||
},
|
||||
"tags": [
|
||||
"amenity=ice_cream"
|
||||
],
|
||||
"description": {
|
||||
"en": "A shop where one can buy only icecream and related items. Ice cream is normally hand-scooped."
|
||||
"en": "A shop where one can buy only icecream and related items. Ice cream is normally hand-scooped.",
|
||||
"de": "Ein Geschäft, in dem man nur Eiscreme und damit verbundene Artikel kaufen kann. Normalerweise wird das Eis mit der Hand portioniert."
|
||||
}
|
||||
}
|
||||
],
|
||||
|
@ -63,7 +69,8 @@
|
|||
{
|
||||
"question": {
|
||||
"en": "What is the name of this ice cream parlor?",
|
||||
"nl": "Wat is de naam van dit ijssalon?"
|
||||
"nl": "Wat is de naam van dit ijssalon?",
|
||||
"de": "Wie heißt diese Eisdiele?"
|
||||
},
|
||||
"id": "1",
|
||||
"freeform": {
|
||||
|
@ -71,7 +78,8 @@
|
|||
},
|
||||
"render": {
|
||||
"en": "This ice cream parlor is named <b>{name}</b>",
|
||||
"nl": "Dit ijssalon heet <b>{name}</b>"
|
||||
"nl": "Dit ijssalon heet <b>{name}</b>",
|
||||
"de": "Diese Eisdiele heißt <b>{name}</b>"
|
||||
}
|
||||
},
|
||||
"opening_hours",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "icons",
|
||||
"description": {
|
||||
"en": "A layer acting as library for icon-tagrenderings, especially to show as badge next to a POI",
|
||||
"en": "A layer acting as library for icon-tagrenderings, especially to show as badge next to a POI or as icon next to the title",
|
||||
"de": "Eine Ebene, die als Bibliothek für Symbol-Tag-Renderings dient, insbesondere um als Abzeichen neben einem POI angezeigt zu werden",
|
||||
"ca": "Una capa que actua com a biblioteca per a les icones d'etiquetes, especialment per mostrar-se com a insígnia al costat d'un PDI",
|
||||
"cs": "Vrstva sloužící jako knihovna pro ikony-značky, zejména pro zobrazení jako odznak vedle bodu zájmu"
|
||||
|
@ -140,6 +140,15 @@
|
|||
"render": "{share_link()}",
|
||||
"metacondition": "_supports_sharing=yes"
|
||||
},
|
||||
{
|
||||
"id": "favourite_title_icon",
|
||||
"labels": [
|
||||
"defaults"
|
||||
],
|
||||
"render": {
|
||||
"*":"{favourite_icon()}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "osmlink",
|
||||
"labels": [
|
||||
|
@ -193,6 +202,14 @@
|
|||
"class": "w-20 mx-1 flex items-center"
|
||||
},
|
||||
"render": "{rating()}"
|
||||
},
|
||||
{
|
||||
"id": "favourite_icon",
|
||||
"description": "Only for rendering",
|
||||
"condition": "_favourite=yes",
|
||||
"icon": "circle:white;heart:red",
|
||||
"metacondition": "__showTimeSensitiveIcons!=no"
|
||||
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -127,7 +127,7 @@
|
|||
"en": "<a href='https://www.openstreetmap.org/reports/new?reportable_id={_first_user_id}&reportable_type=User' target='_blank' class='subtle'>Report {_first_user} for spam or inappropriate messages</a>",
|
||||
"nl": "<a href='https://www.openstreetmap.org/reports/new?reportable_id={_first_user_id}&reportable_type=User' target='_blank' class='subtle'>{_first_user} melden voor spam of ongepaste opmerkingen</a>",
|
||||
"de": "<a href='https://www.openstreetmap.org/reports/new?reportable_id={_first_user_id}&reportable_type=User' target='_blank' class='subtle' {_first_user} für Spam oder unangemessene Nachrichten melden</a>",
|
||||
"es": "<a href='https://www.openstreetmap.org/reports/new?reportable_id={_first_user_id}&reportable_type=User' target='_blank' class='subtle'>Reportar {_first_user}",
|
||||
"es": "<a href='https://www.openstreetmap.org/reports/new?reportable_id={_first_user_id}&reportable_type=User' target='_blank' class='subtle'>Reportar {_first_user} por spam o mensajes inapropiados</a>",
|
||||
"ca": "<a href='https://www.openstreetmap.org/reports/new?reportable_id={_first_user_id}&reportable_type=User' target='_blank' class='subtle'>Reporta {_first_user} per spam o missatges inapropiats</a>",
|
||||
"cs": "<a href='https://www.openstreetmap.org/reports/new?reportable_id={_first_user_id}&reportable_type=User' target='_blank' class='subtle'>Nahlásit uživateli {_first_user} spam nebo nevhodné zprávy</ a>"
|
||||
},
|
||||
|
|
|
@ -207,7 +207,7 @@
|
|||
"ru": "Поверхность - <b>брусчатка</b>",
|
||||
"de": "Der Bodenbelag ist aus <b>Pflastersteinen</b>",
|
||||
"fr": "La surface est en <b>pavés</b>",
|
||||
"es": "La superficie es <b>adoquines</b>",
|
||||
"es": "La superficie es de <b>adoquines</b>",
|
||||
"ca": "La superfície són <b>llambordes</b>",
|
||||
"cs": "Povrch je <b>dlažební kostky</b>"
|
||||
}
|
||||
|
|
|
@ -2564,31 +2564,36 @@
|
|||
"diets"
|
||||
],
|
||||
"question": {
|
||||
"en": "Does this place offer a vegan option?"
|
||||
"en": "Does this place offer a vegan option?",
|
||||
"de": "Bietet dieser Ort eine vegane Option an?"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
"if": "diet:vegan=only",
|
||||
"then": {
|
||||
"en": "This place <b>only sells vegan</b> products"
|
||||
"en": "This place <b>only sells vegan</b> products",
|
||||
"de": "Dieser Ort verkauft <b>nur vegane</b> Produkte"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "diet:vegan=yes",
|
||||
"then": {
|
||||
"en": "This shop has a big vegan offering"
|
||||
"en": "This shop has a big vegan offering",
|
||||
"de": "Dieser Laden hat ein großes veganes Angebot"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "diet:vegan=limited",
|
||||
"then": {
|
||||
"en": "This shop has a <b>limited vegan</b> offering"
|
||||
"en": "This shop has a <b>limited vegan</b> offering",
|
||||
"de": "Dieser Laden hat ein <b>begrenztes veganes</b> Angebot"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "diet:vegan=no",
|
||||
"then": {
|
||||
"en": "This shop has no vegan offering"
|
||||
"en": "This shop has no vegan offering",
|
||||
"de": "Dieser Laden bietet keine veganen Produkte an"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1134,7 +1134,7 @@
|
|||
"en": "Shoes can be recycled here",
|
||||
"nl": "Schoenen kunnen hier gerecycled worden",
|
||||
"de": "Schuhe können hier recycelt werden",
|
||||
"es": "Aquí se pueden reciclar zapatos",
|
||||
"es": "El calzado se puede reciclar aquí",
|
||||
"it": "Scarpe",
|
||||
"ca": "Aquí es poden reciclar sabates",
|
||||
"fr": "Les chaussures peuvent être recyclées ici",
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
{
|
||||
"id": "route_marker",
|
||||
"name": {
|
||||
"en": "Route markers"
|
||||
"en": "Route markers",
|
||||
"de": "Routenmarkierungen"
|
||||
},
|
||||
"description": {
|
||||
"en": "Route markers are small markers often found along official hiking/cycling/riding/skiing routes to indicate the direction of the route."
|
||||
"en": "Route markers are small markers often found along official hiking/cycling/riding/skiing routes to indicate the direction of the route.",
|
||||
"de": "Routenmarkierungen sind kleine Markierungen, die häufig entlang offizieller Wander-/Rad-/Reit-/Skirouten zu finden sind, um die Richtung der Route anzuzeigen."
|
||||
},
|
||||
"source": {
|
||||
"osmTags": "information=route_marker"
|
||||
|
@ -12,7 +14,8 @@
|
|||
"minzoom": 14,
|
||||
"title": {
|
||||
"render": {
|
||||
"en": "Route marker"
|
||||
"en": "Route marker",
|
||||
"de": "Routenmarker"
|
||||
}
|
||||
},
|
||||
"pointRendering": [
|
||||
|
@ -31,14 +34,16 @@
|
|||
"presets": [
|
||||
{
|
||||
"title": {
|
||||
"en": "a route marker"
|
||||
"en": "a route marker",
|
||||
"de": "ein Routenmarker"
|
||||
},
|
||||
"tags": [
|
||||
"tourism=information",
|
||||
"information=route_marker"
|
||||
],
|
||||
"description": {
|
||||
"en": "A route marker is a small marker often found along official hiking/cycling/riding/skiing routes to indicate the direction of the route."
|
||||
"en": "A route marker is a small marker often found along official hiking/cycling/riding/skiing routes to indicate the direction of the route.",
|
||||
"de": "Ein Routenmarker ist ein kleiner Marker, der oft entlang offizieller Wander-/Fahrrad-/Reit-/Skirouten zu finden ist, um die Richtung der Route anzuzeigen."
|
||||
},
|
||||
"exampleImages": [
|
||||
"./assets/layers/route_marker/bicycle_route_marker.jpg",
|
||||
|
@ -51,7 +56,8 @@
|
|||
{
|
||||
"id": "type",
|
||||
"question": {
|
||||
"en": "For what kind of route is this marker?"
|
||||
"en": "For what kind of route is this marker?",
|
||||
"de": "Für welche Art von Route ist dieser Marker?"
|
||||
},
|
||||
"multiAnswer": true,
|
||||
"mappings": [
|
||||
|
@ -59,35 +65,40 @@
|
|||
"if": "bicycle=yes",
|
||||
"ifnot": "biycle=",
|
||||
"then": {
|
||||
"en": "This is a route marker for a bicycle route."
|
||||
"en": "This is a route marker for a bicycle route.",
|
||||
"de": "Dies ist ein Routenmarker für eine Fahrradstrecke."
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "hiking=yes",
|
||||
"ifnot": "hiking=",
|
||||
"then": {
|
||||
"en": "This is a route marker for a hiking route."
|
||||
"en": "This is a route marker for a hiking route.",
|
||||
"de": "Dies ist ein Routenmarker für eine Wanderroute."
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "mtb=yes",
|
||||
"ifnot": "mtb=",
|
||||
"then": {
|
||||
"en": "This is a route marker for a mountain bike route."
|
||||
"en": "This is a route marker for a mountain bike route.",
|
||||
"de": "Dies ist ein Routenmarker für eine Mountainbikestrecke."
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "horse=yes",
|
||||
"ifnot": "horse=",
|
||||
"then": {
|
||||
"en": "This is a route marker for a horse riding route."
|
||||
"en": "This is a route marker for a horse riding route.",
|
||||
"de": "Dies ist ein Routenmarker für eine Reitroute."
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "ski=yes",
|
||||
"ifnot": "ski=",
|
||||
"then": {
|
||||
"en": "This is a route marker for a ski route."
|
||||
"en": "This is a route marker for a ski route.",
|
||||
"de": "Dies ist ein Routenmarker für eine Skiroute."
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -399,7 +399,8 @@
|
|||
{
|
||||
"id": "key_cutter",
|
||||
"question": {
|
||||
"en": "Does this shop offer key cutting?"
|
||||
"en": "Does this shop offer key cutting?",
|
||||
"de": "Bietet dieser Laden Schlüsselschneiden an?"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
|
@ -408,7 +409,8 @@
|
|||
"hideInAnswer": "shop!=shoe_repair",
|
||||
"icon": "./assets/layers/id_presets/fas-key.svg",
|
||||
"then": {
|
||||
"en": "This shop is also specialized in key cutting"
|
||||
"en": "This shop is also specialized in key cutting",
|
||||
"de": "Dieser Laden ist auch auf das Schlüsselschneiden spezialisiert"
|
||||
},
|
||||
"addExtraTags": [
|
||||
"service:key_cutting=yes"
|
||||
|
@ -418,7 +420,8 @@
|
|||
"if": "service:key_cutting=yes",
|
||||
"icon": "./assets/layers/id_presets/fas-key.svg",
|
||||
"then": {
|
||||
"en": "This shop offers key cutting as a service"
|
||||
"en": "This shop offers key cutting as a service",
|
||||
"de": "Dieser Laden bietet Schlüsselschneiden als Dienstleistung an"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -429,7 +432,8 @@
|
|||
]
|
||||
},
|
||||
"then": {
|
||||
"en": "This shops does not offer key cutting as a service"
|
||||
"en": "This shops does not offer key cutting as a service",
|
||||
"de": "Dieser Laden bietet kein Schlüsselschneiden als Dienstleistung an"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
"id": "slow_roads",
|
||||
"name": {
|
||||
"en": "Paths, carfree and slow roads",
|
||||
"nl": "Paadjes, trage wegen en autoluwe straten"
|
||||
"nl": "Paadjes, trage wegen en autoluwe straten",
|
||||
"de": "Pfade, autofreie und geschwindigkeitsreduzierte Straßen"
|
||||
},
|
||||
"description": {
|
||||
"en": "All carfree roads",
|
||||
|
@ -32,7 +33,8 @@
|
|||
"title": {
|
||||
"render": {
|
||||
"en": "Slow road",
|
||||
"nl": "Trage weg"
|
||||
"nl": "Trage weg",
|
||||
"de": "Geschwindigkeitsreduzierte Straße"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
|
@ -46,35 +48,40 @@
|
|||
"if": "highway=footway",
|
||||
"then": {
|
||||
"en": "Footway",
|
||||
"nl": "Voetpad"
|
||||
"nl": "Voetpad",
|
||||
"de": "Fußweg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "highway=cycleway",
|
||||
"then": {
|
||||
"en": "Cycleway",
|
||||
"nl": "Fietspad"
|
||||
"nl": "Fietspad",
|
||||
"de": "Radweg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "highway=pedestrian",
|
||||
"then": {
|
||||
"en": "Pedestrian street",
|
||||
"nl": "Voetgangersstraat"
|
||||
"nl": "Voetgangersstraat",
|
||||
"de": "Fußgängerzone"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "highway=living_street",
|
||||
"then": {
|
||||
"en": "Living street",
|
||||
"nl": "Woonerf"
|
||||
"nl": "Woonerf",
|
||||
"de": "Wohnstraße"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "highway=path",
|
||||
"then": {
|
||||
"en": "Small path",
|
||||
"nl": "Klein pad"
|
||||
"nl": "Klein pad",
|
||||
"de": "Schmaler Pfad"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -133,7 +140,8 @@
|
|||
"if": "highway=living_street",
|
||||
"then": {
|
||||
"en": "This is a living street",
|
||||
"nl": "<div> Dit is een woonerf: <ul><li>Voetgangers mogen hier de volledige breedte van de straat gebruiken</li><li>Gemotoriseerd verkeer mag maximaal <b>20km/h</b> rijden</li></ul></div>"
|
||||
"nl": "<div> Dit is een woonerf: <ul><li>Voetgangers mogen hier de volledige breedte van de straat gebruiken</li><li>Gemotoriseerd verkeer mag maximaal <b>20km/h</b> rijden</li></ul></div>",
|
||||
"de": "Dies ist eine Wohnstraße"
|
||||
},
|
||||
"icon": {
|
||||
"path": "./assets/layers/slow_roads/woonerf.svg",
|
||||
|
@ -144,35 +152,40 @@
|
|||
"if": "highway=pedestrian",
|
||||
"then": {
|
||||
"en": "This is a wide, carfree street",
|
||||
"nl": "Dit is een brede, autovrije straat"
|
||||
"nl": "Dit is een brede, autovrije straat",
|
||||
"de": "Dies ist eine breite, autofreie Straße"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "highway=footway",
|
||||
"then": {
|
||||
"en": "This is a footway",
|
||||
"nl": "Dit is een voetpaadje"
|
||||
"nl": "Dit is een voetpaadje",
|
||||
"de": "Dies ist ein Fußweg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "highway=path",
|
||||
"then": {
|
||||
"en": "This is a small path",
|
||||
"nl": "Dit is een wegeltje of bospad"
|
||||
"nl": "Dit is een wegeltje of bospad",
|
||||
"de": "Dies ist ein schmaler Pfad"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "highway=bridleway",
|
||||
"then": {
|
||||
"en": "This is a bridleway",
|
||||
"nl": "Dit is een ruiterswegel"
|
||||
"nl": "Dit is een ruiterswegel",
|
||||
"de": "Dies ist ein Reitweg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "highway=track",
|
||||
"then": {
|
||||
"en": "This is a land access road",
|
||||
"nl": "Dit is een tractorspoor of weg om landbouwgrond te bereikken"
|
||||
"nl": "Dit is een tractorspoor of weg om landbouwgrond te bereikken",
|
||||
"de": "Dies ist eine Zufahrtsstraße"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -180,7 +193,8 @@
|
|||
{
|
||||
"question": {
|
||||
"en": "What surface does this road have?",
|
||||
"nl": "Wat is de wegverharding van dit pad?"
|
||||
"nl": "Wat is de wegverharding van dit pad?",
|
||||
"de": "Welche Oberfläche hat diese Straße?"
|
||||
},
|
||||
"render": {
|
||||
"nl": "De ondergrond is <b>{surface}</b>",
|
||||
|
@ -318,7 +332,8 @@
|
|||
"id": "slow_road_is_lit",
|
||||
"question": {
|
||||
"en": "Is this road lit at night?",
|
||||
"nl": "Is deze weg 's nachts verlicht?"
|
||||
"nl": "Is deze weg 's nachts verlicht?",
|
||||
"de": "Ist diese Straße nachts beleuchtet?"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
|
@ -329,7 +344,8 @@
|
|||
"if": "lit=no",
|
||||
"then": {
|
||||
"en": "Not lit",
|
||||
"nl": "Niet verlicht"
|
||||
"nl": "Niet verlicht",
|
||||
"de": "Nicht beleuchtet"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -487,7 +487,7 @@
|
|||
"nl": "Welke toiletten zijn dit?",
|
||||
"it": "Di che tipo di servizi igienici si tratta?",
|
||||
"ru": "Какие это туалеты?",
|
||||
"es": "¿Qué tipo de baños son estos?",
|
||||
"es": "¿Qué tipo de aseos son?",
|
||||
"da": "Hvilken slags toiletter er det?",
|
||||
"ca": "Quin tipus de lavabo són aquests?",
|
||||
"cs": "O jaký druh záchodů se jedná?"
|
||||
|
@ -707,7 +707,7 @@
|
|||
"en": "These toilets have a sink to wash your hands",
|
||||
"nl": "Deze toiletten hebben een lavabo waar men de handen kan wassen",
|
||||
"de": "Die Toilette hat ein Handwaschbecken",
|
||||
"es": "Estos baños tienen una pileta para lavarse las manos",
|
||||
"es": "Estos aseos tienen un lavabo para lavarse las manos",
|
||||
"fr": "Ces toilettes ont un lavabo pour se laver les mains",
|
||||
"da": "Dette toilet har en vask til at vaske dine hænder",
|
||||
"ca": "Aquests lavabos tenen una pica per a rentar-te les mans",
|
||||
|
@ -720,7 +720,7 @@
|
|||
"en": "These toilets <b>don't</b> have a sink to wash your hands",
|
||||
"nl": "Deze toiletten hebben <b>geen</b> lavabo waar men de handen kan wassen",
|
||||
"de": "Die Toilette hat <b>kein</b> Handwaschbecken",
|
||||
"es": "Estos baños <b>no</b> tienen una pileta para lavarse las manos",
|
||||
"es": "Estos aseos <b>no tienen lavabo</b> para lavarse las manos",
|
||||
"fr": "Ces toilettes <b>n'ont pas</b> de lavabo pour se laver les mains",
|
||||
"da": "Disse toiletter <b> har ikke </b> en vask til at vaske dine hænder",
|
||||
"ca": "Aquests lavabos <b>no</b> tenen una pica per a rentar-te les mans",
|
||||
|
|
|
@ -12,7 +12,8 @@
|
|||
},
|
||||
"description": {
|
||||
"en": "Waymarked trails",
|
||||
"nl": "Aangeduide wandeltochten"
|
||||
"nl": "Aangeduide wandeltochten",
|
||||
"de": "Markierte Wanderwege"
|
||||
},
|
||||
"source": {
|
||||
"osmTags": {
|
||||
|
@ -105,11 +106,13 @@
|
|||
{
|
||||
"question": {
|
||||
"en": "What is the name of this trail?",
|
||||
"nl": "Wat is de naam van deze wandeling?"
|
||||
"nl": "Wat is de naam van deze wandeling?",
|
||||
"de": "Wie heißt dieser Weg?"
|
||||
},
|
||||
"render": {
|
||||
"en": "This trail is called <b>{name}</b>",
|
||||
"nl": "Deze wandeling heet <b>{name}</b>"
|
||||
"nl": "Deze wandeling heet <b>{name}</b>",
|
||||
"de": "Dieser Weg heißt <b>{name}</b>"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "name"
|
||||
|
@ -119,11 +122,13 @@
|
|||
{
|
||||
"render": {
|
||||
"en": "This trail is maintained by {operator}",
|
||||
"nl": "Beheer door {operator}"
|
||||
"nl": "Beheer door {operator}",
|
||||
"de": "Dieser Weg wird von {operator} gepflegt"
|
||||
},
|
||||
"question": {
|
||||
"en": "Who maintains this trail?",
|
||||
"nl": "Wie beheert deze wandeltocht?"
|
||||
"nl": "Wie beheert deze wandeltocht?",
|
||||
"de": "Wer pflegt diesen Weg?"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "operator"
|
||||
|
@ -137,7 +142,8 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "This trail is maintained by Natuurpunt",
|
||||
"nl": "Dit gebied wordt beheerd door Natuurpunt"
|
||||
"nl": "Dit gebied wordt beheerd door Natuurpunt",
|
||||
"de": "Dieser Weg wird von Natuurpunt gepflegt"
|
||||
},
|
||||
"icon": {
|
||||
"path": "./assets/themes/buurtnatuur/Natuurpunt.jpg",
|
||||
|
@ -152,7 +158,8 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "This trail is maintained by {operator}",
|
||||
"nl": "Dit gebied wordt beheerd door {operator}"
|
||||
"nl": "Dit gebied wordt beheerd door {operator}",
|
||||
"de": "Dieser Weg wird von {operator} gepflegt"
|
||||
},
|
||||
"hideInAnswer": true,
|
||||
"icon": {
|
||||
|
@ -166,11 +173,13 @@
|
|||
{
|
||||
"question": {
|
||||
"en": "What is the reference colour of this trail?",
|
||||
"nl": "Welke kleur heeft deze wandeling?"
|
||||
"nl": "Welke kleur heeft deze wandeling?",
|
||||
"de": "Was ist die Referenzfarbe dieses Weges?"
|
||||
},
|
||||
"render": {
|
||||
"en": "The reference colour is {colour}",
|
||||
"nl": "Deze wandeling heeft kleur {colour}"
|
||||
"nl": "Deze wandeling heeft kleur {colour}",
|
||||
"de": "Die Referenzfarbe ist {colour}"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "colour",
|
||||
|
@ -231,20 +240,23 @@
|
|||
{
|
||||
"question": {
|
||||
"en": "Is this trail wheelchair accessible?",
|
||||
"nl": "Is deze wandeling toegankelijk met de rolstoel?"
|
||||
"nl": "Is deze wandeling toegankelijk met de rolstoel?",
|
||||
"de": "Ist dieser Weg rollstuhlgerecht?"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
"then": {
|
||||
"en": "This trail is wheelchair-accessible",
|
||||
"nl": "deze wandeltocht is toegankelijk met de rolstoel"
|
||||
"nl": "deze wandeltocht is toegankelijk met de rolstoel",
|
||||
"de": "Dieser Weg ist rollstuhlgerecht"
|
||||
},
|
||||
"if": "wheelchair=yes"
|
||||
},
|
||||
{
|
||||
"then": {
|
||||
"en": "This trail is not wheelchair accessible",
|
||||
"nl": "deze wandeltocht is niet toegankelijk met de rolstoel"
|
||||
"nl": "deze wandeltocht is niet toegankelijk met de rolstoel",
|
||||
"de": "Dieser Weg ist nicht rollstuhlgerecht"
|
||||
},
|
||||
"if": "wheelchair=no"
|
||||
}
|
||||
|
@ -254,20 +266,23 @@
|
|||
{
|
||||
"question": {
|
||||
"en": "Is this trail accessible with a pushchair?",
|
||||
"nl": "Is deze wandeltocht toegankelijk met de buggy?"
|
||||
"nl": "Is deze wandeltocht toegankelijk met de buggy?",
|
||||
"de": "Ist dieser Weg mit einem Kinderwagen zugänglich?"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
"then": {
|
||||
"en": "This trail is accessible with a pushchair",
|
||||
"nl": "deze wandeltocht is toegankelijk met de buggy"
|
||||
"nl": "deze wandeltocht is toegankelijk met de buggy",
|
||||
"de": "Dieser Weg ist mit einem Kinderwagen zugänglich"
|
||||
},
|
||||
"if": "pushchair=yes"
|
||||
},
|
||||
{
|
||||
"then": {
|
||||
"en": "This trail is not accessible with a pushchair",
|
||||
"nl": "deze wandeltocht is niet toegankelijk met de buggy"
|
||||
"nl": "deze wandeltocht is niet toegankelijk met de buggy",
|
||||
"de": "Dieser Weg ist nicht mit einem Kinderwagen zugänglich"
|
||||
},
|
||||
"if": "pushchair=no"
|
||||
}
|
||||
|
|
|
@ -319,7 +319,7 @@
|
|||
"pt_BR": "Qual a altura dessa árvore?",
|
||||
"ca": "Quina és l'alçada d'aquest arbre?",
|
||||
"cs": "Jaká je výška tohoto stromu?",
|
||||
"es": "¿Cuál es la altura de este árbol?"
|
||||
"es": "¿Qué altura tiene este árbol?"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "height",
|
||||
|
@ -440,7 +440,7 @@
|
|||
"en": "The tree is in a residential garden.",
|
||||
"it": "L’albero è un giardino residenziale.",
|
||||
"fr": "Cet arbre est dans une jardin de résidence.",
|
||||
"es": "El árbol está en un jardín privado o residencial.",
|
||||
"es": "El árbol está en un jardín de una vivienda.",
|
||||
"de": "Der Baum steht in einem Wohngarten.",
|
||||
"da": "Træet står i en villahave.",
|
||||
"ca": "L'arbre està en un jardí residencial.",
|
||||
|
@ -478,7 +478,7 @@
|
|||
"en": "The tree is in an urban area.",
|
||||
"it": "L’albero si trova in un’area urbana.",
|
||||
"fr": "L'arbre est dans une zone urbaine.",
|
||||
"es": "El árbol está en un zona urbana.",
|
||||
"es": "El árbol está en una zona urbana.",
|
||||
"de": "Der Baum steht in einem städtischen Gebiet.",
|
||||
"da": "Træet står i et byområde.",
|
||||
"ca": "L'arbre està en una àrea urbana.",
|
||||
|
|
|
@ -329,7 +329,8 @@
|
|||
"bicycle=yes"
|
||||
],
|
||||
"title": {
|
||||
"en": "a route marker for a node to node link"
|
||||
"en": "a route marker for a node to node link",
|
||||
"de": "Eine Routenmarkierung für eine Verbindung von Knoten zu Knoten"
|
||||
},
|
||||
"=exampleImages": [
|
||||
"./assets/layers/route_marker/bicycle_route_marker.jpg"
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
{
|
||||
"id": "icecream",
|
||||
"title": {
|
||||
"en": "Icecream"
|
||||
"en": "Icecream",
|
||||
"de": "Eiscreme"
|
||||
},
|
||||
"description": {
|
||||
"en": "A map showing ice cream parlors and ice cream vending machines"
|
||||
"en": "A map showing ice cream parlors and ice cream vending machines",
|
||||
"de": "Eine Karte, die Eisdielen und Eisautomaten zeigt"
|
||||
},
|
||||
"icon": "./assets/layers/ice_cream/ice_cream.svg",
|
||||
"layers": [
|
||||
|
|
|
@ -1,13 +1,33 @@
|
|||
{
|
||||
"id": "mapcomplete-changes",
|
||||
"title": {
|
||||
"en": "Changes made with MapComplete"
|
||||
"en": "Changes made with MapComplete",
|
||||
"ca": "Canvis fets amb MapComplete",
|
||||
"cs": "Změny provedené pomocí MapComplete",
|
||||
"de": "Mit MapComplete erstellte Änderungen",
|
||||
"es": "Cambios realizados con MapComplete",
|
||||
"fr": "Changements faits avec MapComplete",
|
||||
"nl": "Wijzigingen gemaakt met MapComplete",
|
||||
"pl": "Zmiany wprowadzone za pomocą MapComplete"
|
||||
},
|
||||
"shortDescription": {
|
||||
"en": "Shows changes made by MapComplete"
|
||||
"en": "Show changes made with MapComplete",
|
||||
"ca": "Mostra els canvis fets amb MapComplete",
|
||||
"cs": "Zobrazení změn provedených pomocí nástroje MapComplete",
|
||||
"de": "Mit MapComplete erstellte Änderungen anzeigen",
|
||||
"es": "Mostrar cambios realizados con MapComplete",
|
||||
"nl": "Toon wijzigingen gemaakt met MapComplete",
|
||||
"pl": "Pokaż zmiany wprowadzone za pomocą MapComplete"
|
||||
},
|
||||
"description": {
|
||||
"en": "This maps shows all the changes made with MapComplete"
|
||||
"en": "This maps shows all the changes made with MapComplete",
|
||||
"ca": "Aquest mapa mostra tots els canvis fets amb MapComplete",
|
||||
"cs": "Tato mapa zobrazuje všechny změny provedené pomocí MapComplete",
|
||||
"de": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen",
|
||||
"es": "Este mapa muestra todos los cambios realizados con MapComplete",
|
||||
"fr": "Cette carte montre tous les changements faits avec MapComplete",
|
||||
"nl": "Deze kaart toont alle wijzigingen die met MapComplete gemaakt werden",
|
||||
"pl": "Ta mapa pokazuje wszystkie zmiany wprowadzone za pomocą MapComplete"
|
||||
},
|
||||
"icon": "./assets/svg/logo.svg",
|
||||
"hideFromOverview": true,
|
||||
|
@ -20,7 +40,13 @@
|
|||
{
|
||||
"id": "mapcomplete-changes",
|
||||
"name": {
|
||||
"en": "Changeset centers"
|
||||
"en": "Changeset centers",
|
||||
"ca": "Centre del conjunt de canvis",
|
||||
"cs": "Centrum změn",
|
||||
"de": "Zentrum der Änderungssätze",
|
||||
"es": "Centro del conjunto de cambios",
|
||||
"nl": "Centerpunt van changeset",
|
||||
"pl": "Centra zmian"
|
||||
},
|
||||
"minzoom": 0,
|
||||
"source": {
|
||||
|
@ -31,41 +57,85 @@
|
|||
},
|
||||
"title": {
|
||||
"render": {
|
||||
"en": "Changeset for {theme}"
|
||||
"en": "Changeset for {theme}",
|
||||
"ca": "Conjunt de canvis per a {theme}",
|
||||
"cs": "Změna pro {theme}",
|
||||
"de": "Änderungssatz für {theme}",
|
||||
"es": "Conjunto de cambios para {theme}",
|
||||
"fr": "Groupe de modifications pour {theme}",
|
||||
"pl": "Zestaw zmian dla {theme}"
|
||||
}
|
||||
},
|
||||
"description": {
|
||||
"en": "Shows all MapComplete changes"
|
||||
"en": "Show all MapComplete changes",
|
||||
"ca": "Mostra tots els canvis de MapComplete",
|
||||
"cs": "Zobrazit všechny změny MapComplete",
|
||||
"de": "Alle MapComplete-Änderungen anzeigen",
|
||||
"es": "Mostrar todos los cambios de MapComplete",
|
||||
"nl": "Toon alle MapComplete wijzigingen",
|
||||
"pl": "Wyświetl wszystkie zmiany MapComplete"
|
||||
},
|
||||
"tagRenderings": [
|
||||
{
|
||||
"id": "show_changeset_id",
|
||||
"render": {
|
||||
"en": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
|
||||
"en": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
|
||||
"ca": "Conjunt de canvi <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
|
||||
"cs": "Změny <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
|
||||
"de": "Änderungssatz <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
|
||||
"es": "Conjunto de cambios <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
|
||||
"fr": "Groupe de modifications <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
|
||||
"pl": "Zestaw zmian <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "contributor",
|
||||
"question": {
|
||||
"en": "What contributor did make this change?"
|
||||
"en": "Which contributor made this change?",
|
||||
"ca": "Quin col·laborador va fer aquest canvi?",
|
||||
"cs": "Který přispěvatel tuto změnu provedl?",
|
||||
"de": "Wer hat diese Änderung vorgenommen?",
|
||||
"es": "¿Qué contribuidor hizo este cambio?",
|
||||
"fr": "Quel contributeur a fait cette modification ?",
|
||||
"nl": "Welke bijdrager maakte deze wijziging?",
|
||||
"pl": "Który współautor dokonał tej zmiany?"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "user"
|
||||
},
|
||||
"render": {
|
||||
"en": "Change made by <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>"
|
||||
"en": "Change made by <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
|
||||
"ca": "Canvi fet per <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
|
||||
"cs": "Změna provedená <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
|
||||
"de": "Änderung von <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
|
||||
"es": "Cambio realizado por <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
|
||||
"fr": "Modification faite par <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
|
||||
"nl": "Wijziging gemaakt door <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
|
||||
"pl": "Zmiana dokonana przez <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "theme-id",
|
||||
"question": {
|
||||
"en": "What theme was used to make this change?"
|
||||
"en": "What theme was used to make this change?",
|
||||
"ca": "Quin tema es va utilitzar per fer aquest canvi?",
|
||||
"cs": "Jaké téma bylo použito k provedení této změny?",
|
||||
"de": "Welches Thema wurde für diese Änderung verwendet?",
|
||||
"es": "¿Qué tema se utilizó para realizar este cambio?",
|
||||
"fr": "Quel thème a été utilisé pour faire cette modification ?",
|
||||
"pl": "Jakiego tematu użyto do wprowadzenia tej zmiany?"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "theme"
|
||||
},
|
||||
"render": {
|
||||
"en": "Change with theme <a href='https://mapcomplete.org/{theme}'>{theme}</a>"
|
||||
"en": "Change with theme <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
|
||||
"ca": "Canvi amb el tema <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
|
||||
"cs": "Změna s motivem <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
|
||||
"de": "Geändert mit Thema <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
|
||||
"es": "Cambio con tema <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
|
||||
"fr": "Modifié avec le thème <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
|
||||
"pl": "Zmiana za pomocą motywu <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -74,19 +144,45 @@
|
|||
"key": "locale"
|
||||
},
|
||||
"question": {
|
||||
"en": "What locale (language) was this change made in?"
|
||||
"en": "What locale (language) was this change made in?",
|
||||
"ca": "Amb quina configuració regional (idioma) s'ha fet aquest canvi?",
|
||||
"cs": "V jakém národním prostředí (jazyce) byla tato změna provedena?",
|
||||
"de": "In welcher Benutzersprache wurde diese Änderung vorgenommen?",
|
||||
"es": "¿En qué configuración regional (idioma) se realizó este cambio?",
|
||||
"fr": "En quelle langue est-ce que ce changement a été fait ?",
|
||||
"nl": "In welke locale (taal) werd deze wijziging gemaakt?",
|
||||
"pl": "W jakim języku wprowadzono tę zmianę?"
|
||||
},
|
||||
"render": {
|
||||
"en": "User locale is {locale}"
|
||||
"en": "User locale is {locale}",
|
||||
"ca": "La configuració regional de l'usuari és {locale}",
|
||||
"cs": "Uživatelské prostředí je {locale}",
|
||||
"de": "Benutzersprache {locale}",
|
||||
"es": "La configuración regional del usuario es {locale}",
|
||||
"nl": "De gebruikerstaal is {locale}",
|
||||
"pl": "Ustawienia regionalne użytkownika to {locale}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "host",
|
||||
"render": {
|
||||
"en": "Change with with <a href='{host}'>{host}</a>"
|
||||
"en": "Change made with <a href='{host}'>{host}</a>",
|
||||
"ca": "Canviat fet amb <a href='{host}'>{host}</a>",
|
||||
"cs": "Změna provedená pomocí <a href='{host}'>{host}</a>",
|
||||
"de": "Geändert über <a href='{host}'>{host}</a>",
|
||||
"es": "Cambio realizado con <a href='{host}'>{host}</a>",
|
||||
"fr": "Modification faite avec <a href='{host}'>{host}</a>",
|
||||
"nl": "Wijziging gemaakt met <a href='{host}'>{host}</a>",
|
||||
"pl": "Zmiana dokonana w <a href='{host}'>{host}</a>"
|
||||
},
|
||||
"question": {
|
||||
"en": "What host (website) was this change made with?"
|
||||
"en": "What host (website) was this change made with?",
|
||||
"ca": "Amb quin amfitrió (lloc web) es va fer aquest canvi?",
|
||||
"cs": "U jakého hostitele (webové stránky) byla tato změna provedena?",
|
||||
"de": "Über welchen Host (Webseite) wurde diese Änderung vorgenommen?",
|
||||
"es": "¿Con qué host (página web) se realizó este cambio?",
|
||||
"nl": "Met welke host (website) werd deze wijziging gemaakt?",
|
||||
"pl": "Na jakim hoście (stronie internetowej) dokonano tej zmiany?"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "host"
|
||||
|
@ -107,10 +203,22 @@
|
|||
{
|
||||
"id": "version",
|
||||
"question": {
|
||||
"en": "What version of MapComplete was used to make this change?"
|
||||
"en": "What version of MapComplete was used to make this change?",
|
||||
"ca": "Quina versió de MapComplete es va utilitzar per fer aquest canvi?",
|
||||
"cs": "Jaká verze aplikace MapComplete byla použita k provedení této změny?",
|
||||
"de": "Mit welcher Version von MapComplete wurde diese Änderung gemacht?",
|
||||
"es": "¿Qué versión de MapComplete se usó para realizar este cambio?",
|
||||
"fr": "Quelle version de MapComplete a été utilisée pour faire cette modification ?",
|
||||
"pl": "Która wersja MapComplete została wykorzystana, aby zrobić tę zmianę?"
|
||||
},
|
||||
"render": {
|
||||
"en": "Made with {editor}"
|
||||
"en": "Made with {editor}",
|
||||
"ca": "Fet amb {editor}",
|
||||
"cs": "Vyrobeno pomocí {editor}",
|
||||
"de": "Erstellt mit {editor}",
|
||||
"es": "Realizado con {editor}",
|
||||
"fr": "Fait avec {editor}",
|
||||
"pl": "Zrobione za pomocą {editor}"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "editor"
|
||||
|
@ -456,7 +564,13 @@
|
|||
}
|
||||
],
|
||||
"question": {
|
||||
"en": "Themename contains {search}"
|
||||
"en": "Theme name contains {search}",
|
||||
"ca": "El nom del tema conté {search}",
|
||||
"cs": "Název motivu obsahuje {search}",
|
||||
"de": "Themenname enthält {search}",
|
||||
"es": "El nombre del tema contiene {search}",
|
||||
"nl": "Themenaam bevat {search}",
|
||||
"pl": "Nazwa tematu zawiera {search}"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -472,7 +586,13 @@
|
|||
}
|
||||
],
|
||||
"question": {
|
||||
"en": "Made by contributor {search}"
|
||||
"en": "Made by contributor {search}",
|
||||
"ca": "Fet pel col·laborador {search}",
|
||||
"cs": "Vytvořil přispěvatel {search}",
|
||||
"de": "Erstellt von {search}",
|
||||
"es": "Hecho por el colaborador {search}",
|
||||
"nl": "Gemaakt door bijdrager {search}",
|
||||
"pl": "Wykonane przez współautora {search}"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -488,7 +608,13 @@
|
|||
}
|
||||
],
|
||||
"question": {
|
||||
"en": "<b>Not</b> made by contributor {search}"
|
||||
"en": "<b>Not</b> made by contributor {search}",
|
||||
"ca": "<b>No</b> fet pel col·laborador {search}",
|
||||
"cs": "<b>Není</b> vytvořeno přispěvatelem {search}",
|
||||
"de": "<b>Nicht</b> erstellt von {search}",
|
||||
"es": "<b>No</b> hecho por el colaborador {search}",
|
||||
"nl": "<b>Niet</b> gemaakt door bijdrager {search}",
|
||||
"pl": "<b>Nie</b> wykonane przez współautora {search}"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -505,7 +631,13 @@
|
|||
}
|
||||
],
|
||||
"question": {
|
||||
"en": "Made before {search}"
|
||||
"en": "Made before {search}",
|
||||
"ca": "Fet abans de {search}",
|
||||
"cs": "Vytvořeno před {search}",
|
||||
"de": "Erstellt vor {search}",
|
||||
"es": "Hecho antes de {search}",
|
||||
"nl": "Gemaakt voor {search}",
|
||||
"pl": "Stworzone przed {search}"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -522,7 +654,13 @@
|
|||
}
|
||||
],
|
||||
"question": {
|
||||
"en": "Made after {search}"
|
||||
"en": "Made after {search}",
|
||||
"ca": "Fet després de {search}",
|
||||
"cs": "Vytvořeno po {search}",
|
||||
"de": "Erstellt nach {search}",
|
||||
"es": "Hecho después de {search}",
|
||||
"nl": "Gemaakt na {search}",
|
||||
"pl": "Stworzone po {search}"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -538,7 +676,14 @@
|
|||
}
|
||||
],
|
||||
"question": {
|
||||
"en": "User language (iso-code) {search}"
|
||||
"en": "User language (iso-code) {search}",
|
||||
"ca": "Idioma de l'usuari (codi iso) {search}",
|
||||
"cs": "Jazyk uživatele (iso-kód) {search}",
|
||||
"de": "Benutzersprache (ISO-Code) {search}",
|
||||
"es": "Use idioma (ISO-code) {search}",
|
||||
"fr": "Langage utilisateur (code-ISO) {search}",
|
||||
"nl": "De taal van de bijdrager is {search}",
|
||||
"pl": "Język użytkownika (kod iso) {search}"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -554,7 +699,13 @@
|
|||
}
|
||||
],
|
||||
"question": {
|
||||
"en": "Made with host {search}"
|
||||
"en": "Made with host {search}",
|
||||
"ca": "Fet amb l'amfitrió {search}",
|
||||
"cs": "Vytvořeno pomocí hostitele {search}",
|
||||
"de": "Erstellt mit Host {search}",
|
||||
"es": "Hecho con el host {search}",
|
||||
"nl": "Gemaakt met host {search}",
|
||||
"pl": "Wykonane z hostem {search}"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -565,7 +716,14 @@
|
|||
{
|
||||
"osmTags": "add-image>0",
|
||||
"question": {
|
||||
"en": "Changeset added at least one image"
|
||||
"en": "Changeset added at least one image",
|
||||
"ca": "El conjunt de canvis ha afegit almenys una imatge",
|
||||
"cs": "Sada změn přidala alespoň jeden obrázek",
|
||||
"de": "Im Änderungssatz wurde mindestens ein Bild hinzugefügt",
|
||||
"es": "El conjunto de cambios ha añadido al menos una imagen",
|
||||
"fr": "Le groupe de modifications a ajouté au moins une image",
|
||||
"nl": "Changeset bevat minstens één afbeelding",
|
||||
"pl": "Zestaw zmian dodał co najmniej jedno zdjęcie"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -580,7 +738,13 @@
|
|||
{
|
||||
"id": "link_to_more",
|
||||
"render": {
|
||||
"en": "More statistics can be found <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>"
|
||||
"en": "More statistics can be found <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>",
|
||||
"ca": "Es pot trobar més estadística <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>aquí</a>",
|
||||
"cs": "Další statistiky najdete <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>",
|
||||
"de": "Mehr Statistiken gibt es <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>hier</a>",
|
||||
"es": "Puede encontrar más estadísticas <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>aquí</a>",
|
||||
"fr": "D'autres statistiques sont disponibles <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>ici</a>",
|
||||
"pl": "Więcej statystyk można znaleźć <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>tutaj</a>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -2,11 +2,13 @@
|
|||
"id": "walkingnodes",
|
||||
"title": {
|
||||
"en": "Walking Node Networks",
|
||||
"nl": "Wandelknooppuntnetwerken"
|
||||
"nl": "Wandelknooppuntnetwerken",
|
||||
"de": "Netzwerke von Wanderknoten"
|
||||
},
|
||||
"description": {
|
||||
"en": "This map shows walking node networks and allows you to add new nodes easily",
|
||||
"nl": "Deze kaart toont wandelknooppunten en laat je toe om eenvoudigweg nieuwe knooppunten toe te voegen"
|
||||
"nl": "Deze kaart toont wandelknooppunten en laat je toe om eenvoudigweg nieuwe knooppunten toe te voegen",
|
||||
"de": "Diese Karte zeigt Wandernetzwerke und ermöglicht es Ihnen, einfach neue Knoten hinzuzufügen"
|
||||
},
|
||||
"icon": "./assets/themes/walkingnodes/logo.svg",
|
||||
"startZoom": 11,
|
||||
|
@ -149,7 +151,8 @@
|
|||
"title": {
|
||||
"render": {
|
||||
"en": "Walking node <strong>{rwn_ref}</strong>",
|
||||
"nl": "Wandelknooppunt <strong>{rwn_ref}</strong>"
|
||||
"nl": "Wandelknooppunt <strong>{rwn_ref}</strong>",
|
||||
"de": "Wanderknoten <strong>{rwn_ref}</strong>"
|
||||
}
|
||||
},
|
||||
"tagRenderings": [
|
||||
|
@ -157,19 +160,22 @@
|
|||
"id": "node-rwn_ref",
|
||||
"question": {
|
||||
"en": "What is the reference number of this walking node?",
|
||||
"nl": "Wat is het referentienummer van dit wandelknooppunt?"
|
||||
"nl": "Wat is het referentienummer van dit wandelknooppunt?",
|
||||
"de": "Was ist die Referenznummer dieses Wanderknotens?"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "rwn_ref",
|
||||
"type": "int",
|
||||
"placeholder": {
|
||||
"en": "e.g. 1",
|
||||
"nl": "bijv. 1"
|
||||
"nl": "bijv. 1",
|
||||
"de": "z.B. 1"
|
||||
}
|
||||
},
|
||||
"render": {
|
||||
"en": "This walking node has reference number {rwn_ref}",
|
||||
"nl": "Dit wandelknooppunt heeft referentienummer {rwn_ref}"
|
||||
"nl": "Dit wandelknooppunt heeft referentienummer {rwn_ref}",
|
||||
"de": "Dieser Wanderknoten hat die Referenznummer {rwn_ref}"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -177,29 +183,34 @@
|
|||
"override": {
|
||||
"question": {
|
||||
"en": "When was this walking node last surveyed?",
|
||||
"nl": "Wanneer is dit wandelknooppunt het laatst gesurveyed?"
|
||||
"nl": "Wanneer is dit wandelknooppunt het laatst gesurveyed?",
|
||||
"de": "Wann wurde dieser Wanderknoten zuletzt überprüft?"
|
||||
},
|
||||
"render": {
|
||||
"en": "This walking node was last surveyed on {survey:date}",
|
||||
"nl": "Dit wandelknooppunt werd het laatst gesurveyed op {survey:date}"
|
||||
"nl": "Dit wandelknooppunt werd het laatst gesurveyed op {survey:date}",
|
||||
"de": "Dieser Wanderknoten wurde zuletzt am {survey:date} überprüft"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"question": {
|
||||
"en": "How many other walking nodes does this node link to?",
|
||||
"nl": "Met hoeveel andere wandelknooppunten heeft dit knooppunt een verbinding?"
|
||||
"nl": "Met hoeveel andere wandelknooppunten heeft dit knooppunt een verbinding?",
|
||||
"de": "Mit wie vielen anderen Wanderknoten ist dieser Knoten verbunden?"
|
||||
},
|
||||
"render": {
|
||||
"en": "This node links to {expected_rwn_route_relations} other walking nodes.",
|
||||
"nl": "Dit knooppunt verbindt met {expected_rwn_route_relations} andere wandelknooppunten."
|
||||
"nl": "Dit knooppunt verbindt met {expected_rwn_route_relations} andere wandelknooppunten.",
|
||||
"de": "Dieser Knoten ist mit {expected_rwn_route_relations} anderen Wanderknoten verbunden."
|
||||
},
|
||||
"freeform": {
|
||||
"key": "expected_rwn_route_relations",
|
||||
"type": "int",
|
||||
"placeholder": {
|
||||
"en": "e.g. 3",
|
||||
"nl": "bijv. 3"
|
||||
"nl": "bijv. 3",
|
||||
"de": "z.B. 3"
|
||||
}
|
||||
},
|
||||
"id": "node-expected_rwn_route_relations"
|
||||
|
@ -214,7 +225,8 @@
|
|||
],
|
||||
"title": {
|
||||
"en": "a walking node",
|
||||
"nl": "een wandelknooppunt"
|
||||
"nl": "een wandelknooppunt",
|
||||
"de": "ein Wanderknoten"
|
||||
},
|
||||
"snapToLayer": [
|
||||
"cycleways_and_roads"
|
||||
|
@ -246,11 +258,13 @@
|
|||
}
|
||||
],
|
||||
"name": {
|
||||
"en": "Hiking guideposts"
|
||||
"en": "Hiking guideposts",
|
||||
"de": "Wanderwegweiser"
|
||||
},
|
||||
"title": {
|
||||
"render": {
|
||||
"en": "Hiking guidepost"
|
||||
"en": "Hiking guidepost",
|
||||
"de": "Wanderwegweiser"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -280,7 +294,8 @@
|
|||
"hiking=yes"
|
||||
],
|
||||
"title": {
|
||||
"en": "a route marker for a node to node link"
|
||||
"en": "a route marker for a node to node link",
|
||||
"de": "Eine Routenmarkierung für eine Verbindung von Knoten zu Knoten"
|
||||
},
|
||||
"=exampleImages": [
|
||||
"./assets/layers/route_marker/walking_route_marker.jpg"
|
||||
|
|
|
@ -50,6 +50,15 @@
|
|||
"panelIntro": "<h3>Your personal theme</h3>Activate your favourite layers from all the official themes",
|
||||
"reload": "Reload the data"
|
||||
},
|
||||
"favouritePoi": {
|
||||
"button": {
|
||||
"isFavourite": "This location is currently marked as favourite and will show up on all thematic maps of MapComplete you visit.",
|
||||
"markAsFavouriteTitle": "Mark this location as favourite location",
|
||||
"markDescription": "Add this location to a personal list of your favourites",
|
||||
"unmark": "Remove from your personal list of favourites",
|
||||
"unmarkNotDeleted": "This point will not be deleted and still be visible on the appropriate map for you and others"
|
||||
}
|
||||
},
|
||||
"flyer": {
|
||||
"aerial": "This map uses a different background, namely aerial imagery by Agentschap Informatie Vlaanderen",
|
||||
"callToAction": "Test it on mapcomplete.org",
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -4662,6 +4662,18 @@
|
|||
"render": "Extinguishers"
|
||||
}
|
||||
},
|
||||
"favourite": {
|
||||
"description": "A generic map layer which shows locations that a contributor marked as favourite",
|
||||
"name": "Favourites",
|
||||
"tagRenderings": {
|
||||
"Explanation": {
|
||||
"render": "You marked this location as a personal favourite. As such, it is shown on every map you load."
|
||||
}
|
||||
},
|
||||
"title": {
|
||||
"render": "Favourite location"
|
||||
}
|
||||
},
|
||||
"filters": {
|
||||
"filter": {
|
||||
"0": {
|
||||
|
|
|
@ -35,16 +35,6 @@
|
|||
"1": {
|
||||
"title": "un mupi"
|
||||
},
|
||||
"10": {
|
||||
"description": "Se utiliza para carteles publicitarios, letreros de neón, logotipos y carteles en entradas institucionales",
|
||||
"title": "un señal"
|
||||
},
|
||||
"11": {
|
||||
"title": "una escultura"
|
||||
},
|
||||
"12": {
|
||||
"title": "una pared pintada"
|
||||
},
|
||||
"2": {
|
||||
"title": "un mupi sobre la pared"
|
||||
},
|
||||
|
@ -71,6 +61,16 @@
|
|||
},
|
||||
"9": {
|
||||
"title": "un tótem"
|
||||
},
|
||||
"10": {
|
||||
"description": "Se utiliza para carteles publicitarios, letreros de neón, logotipos y carteles en entradas institucionales",
|
||||
"title": "un señal"
|
||||
},
|
||||
"11": {
|
||||
"title": "una escultura"
|
||||
},
|
||||
"12": {
|
||||
"title": "una pared pintada"
|
||||
}
|
||||
},
|
||||
"tagRenderings": {
|
||||
|
@ -165,9 +165,6 @@
|
|||
"1": {
|
||||
"then": "Esto es un tablón de anuncios"
|
||||
},
|
||||
"10": {
|
||||
"then": "Esto es una pared pintada"
|
||||
},
|
||||
"2": {
|
||||
"then": "Esto es una columna"
|
||||
},
|
||||
|
@ -191,6 +188,9 @@
|
|||
},
|
||||
"9": {
|
||||
"then": "Esto es un tótem"
|
||||
},
|
||||
"10": {
|
||||
"then": "Esto es una pared pintada"
|
||||
}
|
||||
},
|
||||
"question": "¿Qué tipo de elemento publicitario es?",
|
||||
|
@ -205,9 +205,6 @@
|
|||
"1": {
|
||||
"then": "Tablon de anuncios"
|
||||
},
|
||||
"10": {
|
||||
"then": "Pared Pintada"
|
||||
},
|
||||
"2": {
|
||||
"then": "Mupi"
|
||||
},
|
||||
|
@ -231,6 +228,9 @@
|
|||
},
|
||||
"9": {
|
||||
"then": "Tótem"
|
||||
},
|
||||
"10": {
|
||||
"then": "Pared Pintada"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -353,15 +353,6 @@
|
|||
"1": {
|
||||
"then": "Mural"
|
||||
},
|
||||
"10": {
|
||||
"then": "Azulejo (Baldosas decorativas Españolas y Portuguesas)"
|
||||
},
|
||||
"11": {
|
||||
"then": "Cerámica"
|
||||
},
|
||||
"12": {
|
||||
"then": "Tallado en madera"
|
||||
},
|
||||
"2": {
|
||||
"then": "Pintura"
|
||||
},
|
||||
|
@ -385,6 +376,15 @@
|
|||
},
|
||||
"9": {
|
||||
"then": "Relieve"
|
||||
},
|
||||
"10": {
|
||||
"then": "Azulejo (Baldosas decorativas Españolas y Portuguesas)"
|
||||
},
|
||||
"11": {
|
||||
"then": "Cerámica"
|
||||
},
|
||||
"12": {
|
||||
"then": "Tallado en madera"
|
||||
}
|
||||
},
|
||||
"question": "¿Qué tipo de obra es esta pieza?",
|
||||
|
@ -1768,27 +1768,6 @@
|
|||
"0": {
|
||||
"question": "Todos los conectores"
|
||||
},
|
||||
"10": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>Tipo 2 con cable</b> (mennekes)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
|
||||
},
|
||||
"11": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (un tipo2_css de marca)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>"
|
||||
},
|
||||
"12": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>"
|
||||
},
|
||||
"13": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Tipo2 A con un cable de marca tesla)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
|
||||
},
|
||||
"14": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>USB</b> para cargar teléfonos y dispositivos electrónicos pequeños</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div>"
|
||||
},
|
||||
"15": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>Bosch Active Connect con 3 pines</b> y cable</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-3pin.svg'/></div>"
|
||||
},
|
||||
"16": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>Bosch Active Connect con 5 pines</b> y cable</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-5pin.svg'/></div>"
|
||||
},
|
||||
"2": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>enchufe de pared Europeo</b> con un pin de tierra (CEE7/4 tipo E)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div>"
|
||||
},
|
||||
|
@ -1812,6 +1791,27 @@
|
|||
},
|
||||
"9": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b>Tipo 2 CCS</b> (mennekes)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>"
|
||||
},
|
||||
"10": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>Tipo 2 con cable</b> (mennekes)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
|
||||
},
|
||||
"11": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (un tipo2_css de marca)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>"
|
||||
},
|
||||
"12": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>"
|
||||
},
|
||||
"13": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Tipo2 A con un cable de marca tesla)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
|
||||
},
|
||||
"14": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>USB</b> para cargar teléfonos y dispositivos electrónicos pequeños</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div>"
|
||||
},
|
||||
"15": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>Bosch Active Connect con 3 pines</b> y cable</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-3pin.svg'/></div>"
|
||||
},
|
||||
"16": {
|
||||
"question": "Tiene un conector <div style='display: inline-block'><b><b>Bosch Active Connect con 5 pines</b> y cable</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-5pin.svg'/></div>"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1866,6 +1866,30 @@
|
|||
"1": {
|
||||
"then": "<b>Enchufe de pared Schuko</b> sin pin de tierra (CEE7/4 tipo F)"
|
||||
},
|
||||
"2": {
|
||||
"then": "<b>Enchufe de pared Europeo</b> con pin de tierra (CEE7/4 tipo E)"
|
||||
},
|
||||
"3": {
|
||||
"then": "<b>Enchufe de pared Europeo</b> con pin de tierra (CEE7/4 tipo E)"
|
||||
},
|
||||
"4": {
|
||||
"then": "<b>Chademo</b>"
|
||||
},
|
||||
"5": {
|
||||
"then": "<b>Chademo</b>"
|
||||
},
|
||||
"6": {
|
||||
"then": "<b>Tipo 1 con cable</b> (J1772)"
|
||||
},
|
||||
"7": {
|
||||
"then": "<b>Tipo 1 con cable</b> (J1772)"
|
||||
},
|
||||
"8": {
|
||||
"then": "<b>Tipo 1 <i>sin</i> cable</b> (J1772)"
|
||||
},
|
||||
"9": {
|
||||
"then": "<b>Tipo 1 <i>sin</i> cable</b> (J1772)"
|
||||
},
|
||||
"10": {
|
||||
"then": "<b>CSS Tipo 1</b> (también conocido como Tipo 1 Combo)"
|
||||
},
|
||||
|
@ -1896,9 +1920,6 @@
|
|||
"19": {
|
||||
"then": "<b>Tipo 2 con cable</b> (mennekes)"
|
||||
},
|
||||
"2": {
|
||||
"then": "<b>Enchufe de pared Europeo</b> con pin de tierra (CEE7/4 tipo E)"
|
||||
},
|
||||
"20": {
|
||||
"then": "<b>CCS Supercargador Tesla</b> (un tipo2_css con marca)"
|
||||
},
|
||||
|
@ -1929,32 +1950,11 @@
|
|||
"29": {
|
||||
"then": "<b>Bosch Active Connect con 3 pines</b> y cable"
|
||||
},
|
||||
"3": {
|
||||
"then": "<b>Enchufe de pared Europeo</b> con pin de tierra (CEE7/4 tipo E)"
|
||||
},
|
||||
"30": {
|
||||
"then": "<b>Bosch Active Connect con 5 pines</b> y cable"
|
||||
},
|
||||
"31": {
|
||||
"then": "<b>Bosch Active Connect con 5 pines</b> y cable"
|
||||
},
|
||||
"4": {
|
||||
"then": "<b>Chademo</b>"
|
||||
},
|
||||
"5": {
|
||||
"then": "<b>Chademo</b>"
|
||||
},
|
||||
"6": {
|
||||
"then": "<b>Tipo 1 con cable</b> (J1772)"
|
||||
},
|
||||
"7": {
|
||||
"then": "<b>Tipo 1 con cable</b> (J1772)"
|
||||
},
|
||||
"8": {
|
||||
"then": "<b>Tipo 1 <i>sin</i> cable</b> (J1772)"
|
||||
},
|
||||
"9": {
|
||||
"then": "<b>Tipo 1 <i>sin</i> cable</b> (J1772)"
|
||||
}
|
||||
},
|
||||
"question": "¿Qué tipo de conexiones de carga están disponibles aquí?"
|
||||
|
@ -2349,12 +2349,6 @@
|
|||
"1": {
|
||||
"then": "Este carril bici está pavimentado"
|
||||
},
|
||||
"10": {
|
||||
"then": "Este carril bici está hecho de gravilla"
|
||||
},
|
||||
"12": {
|
||||
"then": "Este carril bici está hecho de tierra natural"
|
||||
},
|
||||
"2": {
|
||||
"then": "Este carril bici está hecho de asfalto"
|
||||
},
|
||||
|
@ -2369,6 +2363,12 @@
|
|||
},
|
||||
"9": {
|
||||
"then": "Este carril bici está hecho de grava"
|
||||
},
|
||||
"10": {
|
||||
"then": "Este carril bici está hecho de gravilla"
|
||||
},
|
||||
"12": {
|
||||
"then": "Este carril bici está hecho de tierra natural"
|
||||
}
|
||||
},
|
||||
"question": "¿De qué superficie está hecho este carril bici?",
|
||||
|
@ -2414,9 +2414,6 @@
|
|||
"1": {
|
||||
"then": "Este carril bici está pavimentado"
|
||||
},
|
||||
"10": {
|
||||
"then": "Este carril bici está hecho de gravilla"
|
||||
},
|
||||
"2": {
|
||||
"then": "Este carril bici está hecho de asfalto"
|
||||
},
|
||||
|
@ -2428,6 +2425,9 @@
|
|||
},
|
||||
"9": {
|
||||
"then": "Este carril bici está hecho de grava"
|
||||
},
|
||||
"10": {
|
||||
"then": "Este carril bici está hecho de gravilla"
|
||||
}
|
||||
},
|
||||
"question": "¿De qué esta hecha la superficie de esta calle?",
|
||||
|
@ -3069,18 +3069,6 @@
|
|||
"0": {
|
||||
"then": "Esto es una pizzería"
|
||||
},
|
||||
"10": {
|
||||
"then": "Aquí se sirven platos Chinos"
|
||||
},
|
||||
"11": {
|
||||
"then": "Aquí se sirven platos Griegos"
|
||||
},
|
||||
"12": {
|
||||
"then": "Aquí se sirven platos Indios"
|
||||
},
|
||||
"13": {
|
||||
"then": "Aquí se sirven platos Turcos"
|
||||
},
|
||||
"2": {
|
||||
"then": "Principalmente sirve pasta"
|
||||
},
|
||||
|
@ -3101,6 +3089,18 @@
|
|||
},
|
||||
"9": {
|
||||
"then": "Aquí se sirven platos Franceses"
|
||||
},
|
||||
"10": {
|
||||
"then": "Aquí se sirven platos Chinos"
|
||||
},
|
||||
"11": {
|
||||
"then": "Aquí se sirven platos Griegos"
|
||||
},
|
||||
"12": {
|
||||
"then": "Aquí se sirven platos Indios"
|
||||
},
|
||||
"13": {
|
||||
"then": "Aquí se sirven platos Turcos"
|
||||
}
|
||||
},
|
||||
"question": "¿Qué tipo de comida sirven aquí?",
|
||||
|
@ -3499,19 +3499,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"10": {
|
||||
"options": {
|
||||
"0": {
|
||||
"question": "Todas las notas"
|
||||
},
|
||||
"1": {
|
||||
"question": "Ocultar las notas de importación"
|
||||
},
|
||||
"2": {
|
||||
"question": "Solo mostrar las notas de importación"
|
||||
}
|
||||
}
|
||||
},
|
||||
"2": {
|
||||
"options": {
|
||||
"0": {
|
||||
|
@ -3567,6 +3554,19 @@
|
|||
"question": "Solo mostrar las notas abiertas"
|
||||
}
|
||||
}
|
||||
},
|
||||
"10": {
|
||||
"options": {
|
||||
"0": {
|
||||
"question": "Todas las notas"
|
||||
},
|
||||
"1": {
|
||||
"question": "Ocultar las notas de importación"
|
||||
},
|
||||
"2": {
|
||||
"question": "Solo mostrar las notas de importación"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Notas de OpenStreetMap",
|
||||
|
@ -4182,6 +4182,24 @@
|
|||
"1": {
|
||||
"question": "Reciclaje de baterías"
|
||||
},
|
||||
"3": {
|
||||
"question": "Reciclaje de latas"
|
||||
},
|
||||
"4": {
|
||||
"question": "Reciclaje de ropa"
|
||||
},
|
||||
"5": {
|
||||
"question": "Reciclaje de aceite de cocina"
|
||||
},
|
||||
"6": {
|
||||
"question": "Reciclaje de aceite de motor"
|
||||
},
|
||||
"8": {
|
||||
"question": "Reciclaje de residuos orgánicos"
|
||||
},
|
||||
"9": {
|
||||
"question": "Reciclaje de botellas de cristal"
|
||||
},
|
||||
"10": {
|
||||
"question": "Reciclaje de cristal"
|
||||
},
|
||||
|
@ -4208,24 +4226,6 @@
|
|||
},
|
||||
"18": {
|
||||
"question": "Reciclaje de pequeños electrodomésticos"
|
||||
},
|
||||
"3": {
|
||||
"question": "Reciclaje de latas"
|
||||
},
|
||||
"4": {
|
||||
"question": "Reciclaje de ropa"
|
||||
},
|
||||
"5": {
|
||||
"question": "Reciclaje de aceite de cocina"
|
||||
},
|
||||
"6": {
|
||||
"question": "Reciclaje de aceite de motor"
|
||||
},
|
||||
"8": {
|
||||
"question": "Reciclaje de residuos orgánicos"
|
||||
},
|
||||
"9": {
|
||||
"question": "Reciclaje de botellas de cristal"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4268,6 +4268,27 @@
|
|||
"0": {
|
||||
"then": "Aquí se pueden reciclar baterías"
|
||||
},
|
||||
"2": {
|
||||
"then": "Aquí se pueden reciclar latas"
|
||||
},
|
||||
"3": {
|
||||
"then": "Aquí se puede reciclar ropa"
|
||||
},
|
||||
"4": {
|
||||
"then": "Aquí se puede reciclar aceite de cocina"
|
||||
},
|
||||
"5": {
|
||||
"then": "Aquí se puede reciclar aceite de motor"
|
||||
},
|
||||
"7": {
|
||||
"then": "Los residuos orgánicos pueden reciclarse aquí"
|
||||
},
|
||||
"8": {
|
||||
"then": "Aquí se pueden reciclar residuos orgánicos"
|
||||
},
|
||||
"9": {
|
||||
"then": "Aquí se pueden reciclar botellas de cristal"
|
||||
},
|
||||
"10": {
|
||||
"then": "Aquí se puede reciclar cristal"
|
||||
},
|
||||
|
@ -4294,27 +4315,6 @@
|
|||
},
|
||||
"19": {
|
||||
"then": "El calzado se puede reciclar aquí"
|
||||
},
|
||||
"2": {
|
||||
"then": "Aquí se pueden reciclar latas"
|
||||
},
|
||||
"3": {
|
||||
"then": "Aquí se puede reciclar ropa"
|
||||
},
|
||||
"4": {
|
||||
"then": "Aquí se puede reciclar aceite de cocina"
|
||||
},
|
||||
"5": {
|
||||
"then": "Aquí se puede reciclar aceite de motor"
|
||||
},
|
||||
"7": {
|
||||
"then": "Los residuos orgánicos pueden reciclarse aquí"
|
||||
},
|
||||
"8": {
|
||||
"then": "Aquí se pueden reciclar residuos orgánicos"
|
||||
},
|
||||
"9": {
|
||||
"then": "Aquí se pueden reciclar botellas de cristal"
|
||||
}
|
||||
},
|
||||
"question": "¿Qué se puede reciclar aquí?"
|
||||
|
@ -4665,12 +4665,6 @@
|
|||
"1": {
|
||||
"then": "Esta lámpara utiliza LEDs"
|
||||
},
|
||||
"10": {
|
||||
"then": "Esta lámpara utiliza lámparas de sodio de alta presión (naranja con blanco)"
|
||||
},
|
||||
"11": {
|
||||
"then": "Esta lampara se ilumina con gas"
|
||||
},
|
||||
"2": {
|
||||
"then": "Esta lámpara utiliza iluminación incandescente"
|
||||
},
|
||||
|
@ -4691,6 +4685,12 @@
|
|||
},
|
||||
"9": {
|
||||
"then": "Esta lámpara utiliza lámparas de sodio de baja presión (naranja monocromo)"
|
||||
},
|
||||
"10": {
|
||||
"then": "Esta lámpara utiliza lámparas de sodio de alta presión (naranja con blanco)"
|
||||
},
|
||||
"11": {
|
||||
"then": "Esta lampara se ilumina con gas"
|
||||
}
|
||||
},
|
||||
"question": "¿Qué tipo de iluminación utiliza esta lámpara?"
|
||||
|
@ -5262,4 +5262,4 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4364,6 +4364,18 @@
|
|||
"render": "Brandblussers"
|
||||
}
|
||||
},
|
||||
"favourite": {
|
||||
"description": "Een laag met persoonlijke favourieten",
|
||||
"name": "Favorieten",
|
||||
"tagRenderings": {
|
||||
"Explanation": {
|
||||
"render": "Je hebt deze locatie als persoonlijke favoriet aangeduid en worden op alle MapComplete-kaarten getoond."
|
||||
}
|
||||
},
|
||||
"title": {
|
||||
"render": "Favoriete locatie"
|
||||
}
|
||||
},
|
||||
"filters": {
|
||||
"filter": {
|
||||
"0": {
|
||||
|
|
|
@ -1024,33 +1024,6 @@
|
|||
"onwheels": {
|
||||
"description": "Auf dieser Karte können Sie öffentlich zugängliche Orte für Rollstuhlfahrer ansehen, bearbeiten oder hinzufügen",
|
||||
"layers": {
|
||||
"19": {
|
||||
"override": {
|
||||
"=title": {
|
||||
"render": "Statistik"
|
||||
}
|
||||
}
|
||||
},
|
||||
"20": {
|
||||
"override": {
|
||||
"+tagRenderings": {
|
||||
"0": {
|
||||
"render": {
|
||||
"special": {
|
||||
"text": "Import"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1": {
|
||||
"render": {
|
||||
"special": {
|
||||
"message": "Alle vorgeschlagenen Tags hinzufügen"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"4": {
|
||||
"override": {
|
||||
"filter": {
|
||||
|
@ -1093,6 +1066,33 @@
|
|||
"override": {
|
||||
"name": "Barrierefreie Parkplätze"
|
||||
}
|
||||
},
|
||||
"19": {
|
||||
"override": {
|
||||
"=title": {
|
||||
"render": "Statistik"
|
||||
}
|
||||
}
|
||||
},
|
||||
"20": {
|
||||
"override": {
|
||||
"+tagRenderings": {
|
||||
"0": {
|
||||
"render": {
|
||||
"special": {
|
||||
"text": "Import"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1": {
|
||||
"render": {
|
||||
"special": {
|
||||
"message": "Alle vorgeschlagenen Tags hinzufügen"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"title": "Auf Rädern"
|
||||
|
@ -1253,6 +1253,10 @@
|
|||
"stations": {
|
||||
"description": "Bahnhofsdetails ansehen, bearbeiten und hinzufügen",
|
||||
"layers": {
|
||||
"3": {
|
||||
"description": "Ebene mit Bahnhöfen",
|
||||
"name": "Bahnhöfe"
|
||||
},
|
||||
"16": {
|
||||
"description": "Anzeigen der Züge, die von diesem Bahnhof abfahren",
|
||||
"name": "Abfahrtstafeln",
|
||||
|
@ -1284,10 +1288,6 @@
|
|||
"title": {
|
||||
"render": "Abfahrtstafel"
|
||||
}
|
||||
},
|
||||
"3": {
|
||||
"description": "Ebene mit Bahnhöfen",
|
||||
"name": "Bahnhöfe"
|
||||
}
|
||||
},
|
||||
"title": "Bahnhöfe"
|
||||
|
@ -1458,4 +1458,4 @@
|
|||
"shortDescription": "Eine Karte mit Abfalleimern",
|
||||
"title": "Abfalleimer"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -765,10 +765,6 @@ video {
|
|||
float: left;
|
||||
}
|
||||
|
||||
.m-8 {
|
||||
margin: 2rem;
|
||||
}
|
||||
|
||||
.m-4 {
|
||||
margin: 1rem;
|
||||
}
|
||||
|
@ -781,6 +777,10 @@ video {
|
|||
margin: 0px;
|
||||
}
|
||||
|
||||
.m-8 {
|
||||
margin: 2rem;
|
||||
}
|
||||
|
||||
.m-2 {
|
||||
margin: 0.5rem;
|
||||
}
|
||||
|
@ -841,6 +841,10 @@ video {
|
|||
margin-right: 3rem;
|
||||
}
|
||||
|
||||
.mb-4 {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.mt-4 {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
@ -877,10 +881,6 @@ video {
|
|||
margin-right: 0.25rem;
|
||||
}
|
||||
|
||||
.mb-4 {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.ml-1 {
|
||||
margin-left: 0.25rem;
|
||||
}
|
||||
|
|
157
src/Logic/FeatureSource/Sources/FavouritesFeatureSource.ts
Normal file
157
src/Logic/FeatureSource/Sources/FavouritesFeatureSource.ts
Normal file
|
@ -0,0 +1,157 @@
|
|||
import StaticFeatureSource from "./StaticFeatureSource"
|
||||
import { Feature } from "geojson"
|
||||
import { Store, UIEventSource } from "../../UIEventSource"
|
||||
import { OsmConnection } from "../../Osm/OsmConnection"
|
||||
import { OsmId } from "../../../Models/OsmFeature"
|
||||
import { GeoOperations } from "../../GeoOperations"
|
||||
import FeaturePropertiesStore from "../Actors/FeaturePropertiesStore"
|
||||
import { IndexedFeatureSource } from "../FeatureSource"
|
||||
import LayoutConfig from "../../../Models/ThemeConfig/LayoutConfig"
|
||||
|
||||
/**
|
||||
* Generates the favourites from the preferences and marks them as favourite
|
||||
*/
|
||||
export default class FavouritesFeatureSource extends StaticFeatureSource {
|
||||
public static readonly prefix = "mapcomplete-favourite-"
|
||||
private readonly _osmConnection: OsmConnection
|
||||
|
||||
constructor(
|
||||
connection: OsmConnection,
|
||||
indexedSource: FeaturePropertiesStore,
|
||||
allFeatures: IndexedFeatureSource,
|
||||
layout: LayoutConfig
|
||||
) {
|
||||
const detectedIds = new UIEventSource<Set<string>>(undefined)
|
||||
const features: Store<Feature[]> = connection.preferencesHandler.preferences.map(
|
||||
(prefs) => {
|
||||
const feats: Feature[] = []
|
||||
const allIds = new Set<string>()
|
||||
for (const key in prefs) {
|
||||
if (!key.startsWith(FavouritesFeatureSource.prefix)) {
|
||||
continue
|
||||
}
|
||||
const id = key.substring(FavouritesFeatureSource.prefix.length)
|
||||
const osmId = id.replace("-", "/")
|
||||
if (id.indexOf("-property-") > 0 || id.indexOf("-layer") > 0) {
|
||||
continue
|
||||
}
|
||||
allIds.add(osmId)
|
||||
const geometry = <[number, number]>JSON.parse(prefs[key])
|
||||
const properties = FavouritesFeatureSource.getPropertiesFor(connection, id)
|
||||
properties._orig_layer = prefs[FavouritesFeatureSource.prefix + id + "-layer"]
|
||||
if (layout.layers.some((l) => l.id === properties._orig_layer)) {
|
||||
continue
|
||||
}
|
||||
properties.id = osmId
|
||||
properties._favourite = "yes"
|
||||
feats.push({
|
||||
type: "Feature",
|
||||
properties,
|
||||
geometry: {
|
||||
type: "Point",
|
||||
coordinates: geometry,
|
||||
},
|
||||
})
|
||||
}
|
||||
console.log("Favouritess are", feats)
|
||||
detectedIds.setData(allIds)
|
||||
return feats
|
||||
}
|
||||
)
|
||||
|
||||
super(features)
|
||||
|
||||
this._osmConnection = connection
|
||||
detectedIds.addCallbackAndRunD((detected) =>
|
||||
this.markFeatures(detected, indexedSource, allFeatures)
|
||||
)
|
||||
// We use the indexedFeatureSource as signal to update
|
||||
allFeatures.features.map((_) =>
|
||||
this.markFeatures(detectedIds.data, indexedSource, allFeatures)
|
||||
)
|
||||
}
|
||||
|
||||
private static getPropertiesFor(
|
||||
osmConnection: OsmConnection,
|
||||
id: string
|
||||
): Record<string, string> {
|
||||
const properties: Record<string, string> = {}
|
||||
const prefs = osmConnection.preferencesHandler.preferences.data
|
||||
const minLength = FavouritesFeatureSource.prefix.length + id.length + "-property-".length
|
||||
for (const key in prefs) {
|
||||
if (key.length < minLength) {
|
||||
continue
|
||||
}
|
||||
if (!key.startsWith(FavouritesFeatureSource.prefix + id)) {
|
||||
continue
|
||||
}
|
||||
const propertyName = key.substring(minLength)
|
||||
properties[propertyName] = prefs[key]
|
||||
}
|
||||
return properties
|
||||
}
|
||||
|
||||
public markAsFavourite(
|
||||
feature: Feature,
|
||||
layer: string,
|
||||
theme: string,
|
||||
tags: UIEventSource<Record<string, string> & { id: OsmId }>,
|
||||
isFavourite: boolean = true
|
||||
) {
|
||||
{
|
||||
const id = tags.data.id.replace("/", "-")
|
||||
const pref = this._osmConnection.GetPreference("favourite-" + id)
|
||||
if (isFavourite) {
|
||||
const center = GeoOperations.centerpointCoordinates(feature)
|
||||
pref.setData(JSON.stringify(center))
|
||||
this._osmConnection.GetPreference("favourite-" + id + "-layer").setData(layer)
|
||||
this._osmConnection.GetPreference("favourite-" + id + "-theme").setData(theme)
|
||||
|
||||
for (const key in tags.data) {
|
||||
const pref = this._osmConnection.GetPreference(
|
||||
"favourite-" + id + "-property-" + key.replaceAll(":", "__")
|
||||
)
|
||||
pref.setData(tags.data[key])
|
||||
}
|
||||
} else {
|
||||
this._osmConnection.preferencesHandler.removeAllWithPrefix(
|
||||
"mapcomplete-favourite-" + id
|
||||
)
|
||||
}
|
||||
}
|
||||
if (isFavourite) {
|
||||
tags.data._favourite = "yes"
|
||||
tags.ping()
|
||||
} else {
|
||||
delete tags.data._favourite
|
||||
tags.ping()
|
||||
}
|
||||
}
|
||||
|
||||
private markFeatures(
|
||||
detected: Set<string>,
|
||||
featureProperties: FeaturePropertiesStore,
|
||||
allFeatures: IndexedFeatureSource
|
||||
) {
|
||||
const feature = allFeatures.features.data
|
||||
for (const f of feature) {
|
||||
const id = f.properties.id
|
||||
if (!id) {
|
||||
continue
|
||||
}
|
||||
const store = featureProperties.getStore(id)
|
||||
const origValue = store.data._favourite
|
||||
if (detected.has(id)) {
|
||||
if (origValue !== "yes") {
|
||||
store.data._favourite = "yes"
|
||||
store.ping()
|
||||
}
|
||||
} else {
|
||||
if (origValue) {
|
||||
store.data._favourite = ""
|
||||
store.ping()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,10 +6,14 @@ import FilteringFeatureSource from "./FilteringFeatureSource"
|
|||
import LayerState from "../../State/LayerState"
|
||||
|
||||
export default class NearbyFeatureSource implements FeatureSource {
|
||||
private readonly _result = new UIEventSource<Feature[]>(undefined)
|
||||
|
||||
public readonly features: Store<Feature[]>
|
||||
private readonly _targetPoint: Store<{ lon: number; lat: number }>
|
||||
private readonly _numberOfNeededFeatures: number
|
||||
private readonly _layerState?: LayerState
|
||||
private readonly _currentZoom: Store<number>
|
||||
private readonly _allSources: Store<{ feat: Feature; d: number }[]>[] = []
|
||||
|
||||
constructor(
|
||||
targetPoint: Store<{ lon: number; lat: number }>,
|
||||
|
@ -18,41 +22,44 @@ export default class NearbyFeatureSource implements FeatureSource {
|
|||
layerState?: LayerState,
|
||||
currentZoom?: Store<number>
|
||||
) {
|
||||
this._layerState = layerState
|
||||
this._targetPoint = targetPoint.stabilized(100)
|
||||
this._numberOfNeededFeatures = numberOfNeededFeatures
|
||||
this._currentZoom = currentZoom.stabilized(500)
|
||||
|
||||
const allSources: Store<{ feat: Feature; d: number }[]>[] = []
|
||||
this.features = Stores.ListStabilized(this._result)
|
||||
|
||||
sources.forEach((source, layer) => {})
|
||||
}
|
||||
|
||||
public registerSource(source: FeatureSource, layerId: string) {
|
||||
let minzoom = 999
|
||||
|
||||
const result = new UIEventSource<Feature[]>(undefined)
|
||||
this.features = Stores.ListStabilized(result)
|
||||
|
||||
function update() {
|
||||
let features: { feat: Feature; d: number }[] = []
|
||||
for (const src of allSources) {
|
||||
features.push(...src.data)
|
||||
}
|
||||
features.sort((a, b) => a.d - b.d)
|
||||
if (numberOfNeededFeatures !== undefined) {
|
||||
features = features.slice(0, numberOfNeededFeatures)
|
||||
}
|
||||
result.setData(features.map((f) => f.feat))
|
||||
const flayer = this._layerState?.filteredLayers.get(layerId)
|
||||
if (!flayer) {
|
||||
return
|
||||
}
|
||||
|
||||
sources.forEach((source, layer) => {
|
||||
const flayer = layerState?.filteredLayers.get(layer)
|
||||
minzoom = Math.min(minzoom, flayer.layerDef.minzoom)
|
||||
const calcSource = this.createSource(
|
||||
source.features,
|
||||
flayer.layerDef.minzoom,
|
||||
flayer.isDisplayed
|
||||
)
|
||||
calcSource.addCallbackAndRunD((features) => {
|
||||
update()
|
||||
})
|
||||
allSources.push(calcSource)
|
||||
minzoom = Math.min(minzoom, flayer.layerDef.minzoom)
|
||||
const calcSource = this.createSource(
|
||||
source.features,
|
||||
flayer.layerDef.minzoom,
|
||||
flayer.isDisplayed
|
||||
)
|
||||
calcSource.addCallbackAndRunD((features) => {
|
||||
this.update()
|
||||
})
|
||||
this._allSources.push(calcSource)
|
||||
}
|
||||
|
||||
private update() {
|
||||
let features: { feat: Feature; d: number }[] = []
|
||||
for (const src of this._allSources) {
|
||||
features.push(...src.data)
|
||||
}
|
||||
features.sort((a, b) => a.d - b.d)
|
||||
if (this._numberOfNeededFeatures !== undefined) {
|
||||
features = features.slice(0, this._numberOfNeededFeatures)
|
||||
}
|
||||
this._result.setData(features.map((f) => f.feat))
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -285,4 +285,13 @@ export class OsmPreferences {
|
|||
}
|
||||
)
|
||||
}
|
||||
|
||||
removeAllWithPrefix(prefix: string) {
|
||||
for (const key in this.preferences.data) {
|
||||
if (key.startsWith(prefix)) {
|
||||
this.GetPreference(key, undefined, { prefix: "" }).setData(undefined)
|
||||
console.log("Clearing preference", key)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ export default class Constants {
|
|||
"gps_track",
|
||||
"range",
|
||||
"last_click",
|
||||
"favourite",
|
||||
] as const
|
||||
/**
|
||||
* Special layers which are not included in a theme by default
|
||||
|
@ -131,6 +132,8 @@ export default class Constants {
|
|||
"clock",
|
||||
"invalid",
|
||||
"close",
|
||||
"heart",
|
||||
"heart_outline",
|
||||
] as const
|
||||
public static readonly defaultPinIcons: string[] = <any>Constants._defaultPinIcons
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ import predifined_filters from "../../../../assets/layers/filters/filters.json"
|
|||
import { TagConfigJson } from "../Json/TagConfigJson"
|
||||
import PointRenderingConfigJson, { IconConfigJson } from "../Json/PointRenderingConfigJson"
|
||||
import ValidationUtils from "./ValidationUtils"
|
||||
import { RenderingSpecification, SpecialVisualization } from "../../../UI/SpecialVisualization"
|
||||
import { RenderingSpecification } from "../../../UI/SpecialVisualization"
|
||||
import { QuestionableTagRenderingConfigJson } from "../Json/QuestionableTagRenderingConfigJson"
|
||||
import { ConfigMeta } from "../../../UI/Studio/configMeta"
|
||||
import LineRenderingConfigJson from "../Json/LineRenderingConfigJson"
|
||||
|
@ -639,6 +639,13 @@ export class AddEditingElements extends DesugaringStep<LayerConfigJson> {
|
|||
json.tagRenderings.push(this._desugaring.tagRenderings.get("last_edit"))
|
||||
}
|
||||
|
||||
if (!usedSpecialFunctions.has("favourite_status")) {
|
||||
json.tagRenderings.push({
|
||||
id: "favourite_status",
|
||||
render: { "*": "{favourite_status()}" },
|
||||
})
|
||||
}
|
||||
|
||||
if (!usedSpecialFunctions.has("all_tags")) {
|
||||
const trc: QuestionableTagRenderingConfigJson = {
|
||||
id: "all-tags",
|
||||
|
@ -1193,6 +1200,31 @@ class ExpandMarkerRenderings extends DesugaringStep<IconConfigJson> {
|
|||
}
|
||||
}
|
||||
|
||||
class AddFavouriteBadges extends DesugaringStep<LayerConfigJson> {
|
||||
constructor() {
|
||||
super(
|
||||
"Adds the favourite heart to the title and the rendering badges",
|
||||
[],
|
||||
"AddFavouriteBadges"
|
||||
)
|
||||
}
|
||||
|
||||
convert(json: LayerConfigJson, context: ConversionContext): LayerConfigJson {
|
||||
if (json.id === "favourite") {
|
||||
return json
|
||||
}
|
||||
const pr = json.pointRendering?.[0]
|
||||
if (pr) {
|
||||
pr.iconBadges ??= []
|
||||
if (!pr.iconBadges.some((ti) => ti.if === "_favourite=yes")) {
|
||||
pr.iconBadges.push({ if: "_favourite=yes", then: "circle:white;heart:red" })
|
||||
}
|
||||
}
|
||||
|
||||
return json
|
||||
}
|
||||
}
|
||||
|
||||
export class AddRatingBadge extends DesugaringStep<LayerConfigJson> {
|
||||
constructor() {
|
||||
super(
|
||||
|
@ -1206,6 +1238,10 @@ export class AddRatingBadge extends DesugaringStep<LayerConfigJson> {
|
|||
if (!json.tagRenderings) {
|
||||
return json
|
||||
}
|
||||
if (json.titleIcons.some((ti) => ti === "icons.rating" || ti["id"] === "rating")) {
|
||||
// already added
|
||||
return json
|
||||
}
|
||||
|
||||
const specialVis: Exclude<RenderingSpecification, string>[] = <
|
||||
Exclude<RenderingSpecification, string>[]
|
||||
|
@ -1247,6 +1283,7 @@ export class PrepareLayer extends Fuse<LayerConfigJson> {
|
|||
),
|
||||
new SetDefault("titleIcons", ["icons.defaults"]),
|
||||
new AddRatingBadge(),
|
||||
new AddFavouriteBadges(),
|
||||
new On(
|
||||
"titleIcons",
|
||||
(layer) =>
|
||||
|
|
|
@ -968,7 +968,7 @@ export class ValidateTagRenderings extends Fuse<TagRenderingConfigJson> {
|
|||
"Various validation on tagRenderingConfigs",
|
||||
new DetectShadowedMappings(layerConfig),
|
||||
new DetectConflictingAddExtraTags(),
|
||||
new DetectNonErasedKeysInMappings(),
|
||||
// new DetectNonErasedKeysInMappings(),
|
||||
new DetectMappingsWithImages(doesImageExist),
|
||||
new On("render", new ValidatePossibleLinks()),
|
||||
new On("question", new ValidatePossibleLinks()),
|
||||
|
|
|
@ -305,6 +305,9 @@ export default class LayoutConfig implements LayoutInformation {
|
|||
}
|
||||
for (const layer of this.layers) {
|
||||
if (!layer.source) {
|
||||
if (layer.isShown?.matchesProperties(tags)) {
|
||||
return layer
|
||||
}
|
||||
continue
|
||||
}
|
||||
if (layer.source.osmTags.matchesProperties(tags)) {
|
||||
|
|
|
@ -58,6 +58,7 @@ import { PreferredRasterLayerSelector } from "../Logic/Actors/PreferredRasterLay
|
|||
import { ImageUploadManager } from "../Logic/ImageProviders/ImageUploadManager"
|
||||
import { Imgur } from "../Logic/ImageProviders/Imgur"
|
||||
import NearbyFeatureSource from "../Logic/FeatureSource/Sources/NearbyFeatureSource"
|
||||
import FavouritesFeatureSource from "../Logic/FeatureSource/Sources/FavouritesFeatureSource"
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -96,10 +97,11 @@ export default class ThemeViewState implements SpecialVisualizationState {
|
|||
readonly indexedFeatures: IndexedFeatureSource & LayoutSource
|
||||
readonly currentView: FeatureSource<Feature<Polygon>>
|
||||
readonly featuresInView: FeatureSource
|
||||
readonly favourites: FavouritesFeatureSource
|
||||
/**
|
||||
* Contains a few (<10) >features that are near the center of the map.
|
||||
*/
|
||||
readonly closestFeatures: FeatureSource
|
||||
readonly closestFeatures: NearbyFeatureSource
|
||||
readonly newFeatures: WritableFeatureSource
|
||||
readonly layerState: LayerState
|
||||
readonly perLayer: ReadonlyMap<string, GeoIndexedStoreForLayer>
|
||||
|
@ -220,8 +222,6 @@ export default class ThemeViewState implements SpecialVisualizationState {
|
|||
this.fullNodeDatabase
|
||||
)
|
||||
|
||||
this.indexedFeatures = layoutSource
|
||||
|
||||
let currentViewIndex = 0
|
||||
const empty = []
|
||||
this.currentView = new StaticFeatureSource(
|
||||
|
@ -242,13 +242,19 @@ export default class ThemeViewState implements SpecialVisualizationState {
|
|||
this.featuresInView = new BBoxFeatureSource(layoutSource, this.mapProperties.bounds)
|
||||
|
||||
this.dataIsLoading = layoutSource.isLoading
|
||||
this.indexedFeatures = layoutSource
|
||||
this.featureProperties = new FeaturePropertiesStore(layoutSource)
|
||||
this.favourites = new FavouritesFeatureSource(
|
||||
this.osmConnection,
|
||||
this.featureProperties,
|
||||
layoutSource,
|
||||
layout
|
||||
)
|
||||
|
||||
const indexedElements = this.indexedFeatures
|
||||
this.featureProperties = new FeaturePropertiesStore(indexedElements)
|
||||
this.changes = new Changes(
|
||||
{
|
||||
dryRun: this.featureSwitches.featureSwitchIsTesting,
|
||||
allElements: indexedElements,
|
||||
allElements: layoutSource,
|
||||
featurePropertiesStore: this.featureProperties,
|
||||
osmConnection: this.osmConnection,
|
||||
historicalUserLocations: this.geolocation.historicalUserLocations,
|
||||
|
@ -258,7 +264,7 @@ export default class ThemeViewState implements SpecialVisualizationState {
|
|||
this.historicalUserLocations = this.geolocation.historicalUserLocations
|
||||
this.newFeatures = new NewGeometryFromChangesFeatureSource(
|
||||
this.changes,
|
||||
indexedElements,
|
||||
layoutSource,
|
||||
this.featureProperties
|
||||
)
|
||||
layoutSource.addSource(this.newFeatures)
|
||||
|
@ -627,7 +633,10 @@ export default class ThemeViewState implements SpecialVisualizationState {
|
|||
)
|
||||
),
|
||||
current_view: this.currentView,
|
||||
favourite: this.favourites,
|
||||
}
|
||||
|
||||
this.closestFeatures.registerSource(specialLayers.favourite, "favourite")
|
||||
if (this.layout?.lockLocation) {
|
||||
const bbox = new BBox(this.layout.lockLocation)
|
||||
this.mapProperties.maxbounds.setData(bbox)
|
||||
|
@ -663,12 +672,16 @@ export default class ThemeViewState implements SpecialVisualizationState {
|
|||
rangeIsDisplayed?.syncWith(this.featureSwitches.featureSwitchIsTesting, true)
|
||||
}
|
||||
|
||||
// enumarate all 'normal' layers and match them with the appropriate 'special' layer - if applicable
|
||||
this.layerState.filteredLayers.forEach((flayer) => {
|
||||
const id = flayer.layerDef.id
|
||||
const features: FeatureSource = specialLayers[id]
|
||||
if (features === undefined) {
|
||||
return
|
||||
}
|
||||
if (id === "favourite") {
|
||||
console.log("Matching special layer", id, flayer)
|
||||
}
|
||||
|
||||
this.featureProperties.trackFeatureSource(features)
|
||||
new ShowDataLayer(this.map, {
|
||||
|
|
|
@ -4,12 +4,10 @@
|
|||
import Translations from "../i18n/Translations";
|
||||
import Tr from "./Tr.svelte";
|
||||
|
||||
export let osmConnection: OsmConnection
|
||||
export let osmConnection: OsmConnection;
|
||||
</script>
|
||||
|
||||
<button on:click={() => {
|
||||
state.osmConnection.LogOut()
|
||||
}}>
|
||||
<Logout class="w-6 h-6"/>
|
||||
<Tr t={Translations.t.general.logout}/>
|
||||
<button on:click={() => {osmConnection.LogOut()}}>
|
||||
<Logout class="w-6 h-6" />
|
||||
<Tr t={Translations.t.general.logout} />
|
||||
</button>
|
||||
|
|
|
@ -1,27 +1,7 @@
|
|||
<script lang="ts">
|
||||
import { IconConfig } from "../../Models/ThemeConfig/PointRenderingConfig"
|
||||
import { Store } from "../../Logic/UIEventSource"
|
||||
import Pin from "../../assets/svg/Pin.svelte"
|
||||
import Square from "../../assets/svg/Square.svelte"
|
||||
import Circle from "../../assets/svg/Circle.svelte"
|
||||
import Checkmark from "../../assets/svg/Checkmark.svelte"
|
||||
import Clock from "../../assets/svg/Clock.svelte"
|
||||
import Close from "../../assets/svg/Close.svelte"
|
||||
import Crosshair from "../../assets/svg/Crosshair.svelte"
|
||||
import Help from "../../assets/svg/Help.svelte"
|
||||
import Home from "../../assets/svg/Home.svelte"
|
||||
import Invalid from "../../assets/svg/Invalid.svelte"
|
||||
import Location from "../../assets/svg/Location.svelte"
|
||||
import Location_empty from "../../assets/svg/Location_empty.svelte"
|
||||
import Location_locked from "../../assets/svg/Location_locked.svelte"
|
||||
import Note from "../../assets/svg/Note.svelte"
|
||||
import Resolved from "../../assets/svg/Resolved.svelte"
|
||||
import Ring from "../../assets/svg/Ring.svelte"
|
||||
import Scissors from "../../assets/svg/Scissors.svelte"
|
||||
import Teardrop from "../../assets/svg/Teardrop.svelte"
|
||||
import Teardrop_with_hole_green from "../../assets/svg/Teardrop_with_hole_green.svelte"
|
||||
import Triangle from "../../assets/svg/Triangle.svelte"
|
||||
import Icon from "./Icon.svelte"
|
||||
import { IconConfig } from "../../Models/ThemeConfig/PointRenderingConfig";
|
||||
import { Store } from "../../Logic/UIEventSource";
|
||||
import Icon from "./Icon.svelte";
|
||||
|
||||
/**
|
||||
* Renders a single icon.
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* Renders a 'marker', which consists of multiple 'icons'
|
||||
*/
|
||||
export let marker: IconConfig[] = config?.marker;
|
||||
export let rotation: TagRenderingConfig
|
||||
export let rotation: TagRenderingConfig;
|
||||
export let tags: Store<Record<string, string>>;
|
||||
let _rotation = rotation ? tags.map(tags => rotation.GetRenderValue(tags).Subs(tags).txt) : new ImmutableStore(0);
|
||||
</script>
|
||||
|
@ -16,7 +16,9 @@
|
|||
{#if marker && marker}
|
||||
<div class="relative h-full w-full" style={`transform: rotate(${$_rotation})`}>
|
||||
{#each marker as icon}
|
||||
<DynamicIcon {icon} {tags} />
|
||||
<div class="absolute top-0 left-0 h-full w-full">
|
||||
<DynamicIcon {icon} {tags} />
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
|
|
|
@ -1,27 +1,29 @@
|
|||
<script lang="ts">
|
||||
import Pin from "../../assets/svg/Pin.svelte"
|
||||
import Square from "../../assets/svg/Square.svelte"
|
||||
import Circle from "../../assets/svg/Circle.svelte"
|
||||
import Checkmark from "../../assets/svg/Checkmark.svelte"
|
||||
import Clock from "../../assets/svg/Clock.svelte"
|
||||
import Close from "../../assets/svg/Close.svelte"
|
||||
import Crosshair from "../../assets/svg/Crosshair.svelte"
|
||||
import Help from "../../assets/svg/Help.svelte"
|
||||
import Home from "../../assets/svg/Home.svelte"
|
||||
import Invalid from "../../assets/svg/Invalid.svelte"
|
||||
import Location from "../../assets/svg/Location.svelte"
|
||||
import Location_empty from "../../assets/svg/Location_empty.svelte"
|
||||
import Location_locked from "../../assets/svg/Location_locked.svelte"
|
||||
import Note from "../../assets/svg/Note.svelte"
|
||||
import Resolved from "../../assets/svg/Resolved.svelte"
|
||||
import Ring from "../../assets/svg/Ring.svelte"
|
||||
import Scissors from "../../assets/svg/Scissors.svelte"
|
||||
import Teardrop from "../../assets/svg/Teardrop.svelte"
|
||||
import Teardrop_with_hole_green from "../../assets/svg/Teardrop_with_hole_green.svelte"
|
||||
import Triangle from "../../assets/svg/Triangle.svelte"
|
||||
import Pin from "../../assets/svg/Pin.svelte";
|
||||
import Square from "../../assets/svg/Square.svelte";
|
||||
import Circle from "../../assets/svg/Circle.svelte";
|
||||
import Checkmark from "../../assets/svg/Checkmark.svelte";
|
||||
import Clock from "../../assets/svg/Clock.svelte";
|
||||
import Close from "../../assets/svg/Close.svelte";
|
||||
import Crosshair from "../../assets/svg/Crosshair.svelte";
|
||||
import Help from "../../assets/svg/Help.svelte";
|
||||
import Home from "../../assets/svg/Home.svelte";
|
||||
import Invalid from "../../assets/svg/Invalid.svelte";
|
||||
import Location from "../../assets/svg/Location.svelte";
|
||||
import Location_empty from "../../assets/svg/Location_empty.svelte";
|
||||
import Location_locked from "../../assets/svg/Location_locked.svelte";
|
||||
import Note from "../../assets/svg/Note.svelte";
|
||||
import Resolved from "../../assets/svg/Resolved.svelte";
|
||||
import Ring from "../../assets/svg/Ring.svelte";
|
||||
import Scissors from "../../assets/svg/Scissors.svelte";
|
||||
import Teardrop from "../../assets/svg/Teardrop.svelte";
|
||||
import Teardrop_with_hole_green from "../../assets/svg/Teardrop_with_hole_green.svelte";
|
||||
import Triangle from "../../assets/svg/Triangle.svelte";
|
||||
import Brick_wall_square from "../../assets/svg/Brick_wall_square.svelte";
|
||||
import Brick_wall_round from "../../assets/svg/Brick_wall_round.svelte";
|
||||
import Gps_arrow from "../../assets/svg/Gps_arrow.svelte";
|
||||
import { HeartIcon } from "@babeard/svelte-heroicons/solid";
|
||||
import { HeartIcon as HeartOutlineIcon } from "@babeard/svelte-heroicons/outline";
|
||||
|
||||
/**
|
||||
* Renders a single icon.
|
||||
|
@ -29,68 +31,72 @@
|
|||
* Icons -placed on top of each other- form a 'Marker' together
|
||||
*/
|
||||
|
||||
export let icon: string | undefined
|
||||
export let color: string | undefined
|
||||
export let icon: string | undefined;
|
||||
export let color: string | undefined;
|
||||
export let clss: string | undefined
|
||||
</script>
|
||||
|
||||
{#if icon}
|
||||
<div class="absolute top-0 left-0 h-full w-full">
|
||||
{#if icon === "pin"}
|
||||
<Pin {color} />
|
||||
<Pin {color} class={clss}/>
|
||||
{:else if icon === "square"}
|
||||
<Square {color} />
|
||||
<Square {color} class={clss}/>
|
||||
{:else if icon === "circle"}
|
||||
<Circle {color} />
|
||||
<Circle {color} class={clss}/>
|
||||
{:else if icon === "checkmark"}
|
||||
<Checkmark {color} />
|
||||
<Checkmark {color} class={clss}/>
|
||||
{:else if icon === "clock"}
|
||||
<Clock {color} />
|
||||
<Clock {color} class={clss}/>
|
||||
{:else if icon === "close"}
|
||||
<Close {color} />
|
||||
<Close {color} class={clss}/>
|
||||
{:else if icon === "crosshair"}
|
||||
<Crosshair {color} />
|
||||
<Crosshair {color} class={clss}/>
|
||||
{:else if icon === "help"}
|
||||
<Help {color} />
|
||||
<Help {color} class={clss}/>
|
||||
{:else if icon === "home"}
|
||||
<Home {color} />
|
||||
<Home {color} class={clss}/>
|
||||
{:else if icon === "invalid"}
|
||||
<Invalid {color} />
|
||||
<Invalid {color} class={clss}/>
|
||||
{:else if icon === "location"}
|
||||
<Location {color} />
|
||||
<Location {color} class={clss}/>
|
||||
{:else if icon === "location_empty"}
|
||||
<Location_empty {color} />
|
||||
<Location_empty {color} class={clss}/>
|
||||
{:else if icon === "location_locked"}
|
||||
<Location_locked {color} />
|
||||
<Location_locked {color} class={clss}/>
|
||||
{:else if icon === "note"}
|
||||
<Note {color} />
|
||||
<Note {color} class={clss}/>
|
||||
{:else if icon === "resolved"}
|
||||
<Resolved {color} />
|
||||
<Resolved {color} class={clss}/>
|
||||
{:else if icon === "ring"}
|
||||
<Ring {color} />
|
||||
<Ring {color} class={clss}/>
|
||||
{:else if icon === "scissors"}
|
||||
<Scissors {color} />
|
||||
<Scissors {color} class={clss}/>
|
||||
{:else if icon === "teardrop"}
|
||||
<Teardrop {color} />
|
||||
<Teardrop {color} class={clss}/>
|
||||
{:else if icon === "teardrop_with_hole_green"}
|
||||
<Teardrop_with_hole_green {color} />
|
||||
<Teardrop_with_hole_green {color} class={clss}/>
|
||||
{:else if icon === "triangle"}
|
||||
<Triangle {color} />
|
||||
<Triangle {color} class={clss}/>
|
||||
{:else if icon === "brick_wall_square"}
|
||||
<Brick_wall_square {color} />
|
||||
<Brick_wall_square {color} class={clss}/>
|
||||
{:else if icon === "brick_wall_round"}
|
||||
<Brick_wall_round {color} />
|
||||
<Brick_wall_round {color} class={clss}/>
|
||||
{:else if icon === "gps_arrow"}
|
||||
<Gps_arrow {color} />
|
||||
<Gps_arrow {color} class={clss}/>
|
||||
{:else if icon === "checkmark"}
|
||||
<Checkmark {color} />
|
||||
<Checkmark {color} class={clss}/>
|
||||
{:else if icon === "help"}
|
||||
<Help {color} />
|
||||
<Help {color} class={clss}/>
|
||||
{:else if icon === "close"}
|
||||
<Close {color} />
|
||||
<Close {color} class={clss}/>
|
||||
{:else if icon === "invalid"}
|
||||
<Invalid {color} />
|
||||
<Invalid {color} class={clss}/>
|
||||
{:else if icon === "heart"}
|
||||
<HeartIcon class={clss}/>
|
||||
{:else if icon === "heart_outline"}
|
||||
<HeartOutlineIcon class={clss}/>
|
||||
{:else}
|
||||
<img class="h-full w-full" src={icon} />
|
||||
<img class={clss ?? "h-full w-full"} src={icon} aria-hidden="true"
|
||||
alt="" />
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
<script lang="ts">
|
||||
import Icon from "./Icon.svelte"
|
||||
import Icon from "./Icon.svelte";
|
||||
|
||||
/**
|
||||
* Renders a 'marker', which consists of multiple 'icons'
|
||||
*/
|
||||
export let icons: { icon: string; color: string }[]
|
||||
export let icons: { icon: string; color: string }[];
|
||||
</script>
|
||||
|
||||
{#if icons !== undefined && icons.length > 0}
|
||||
<div class="relative h-full w-full">
|
||||
{#each icons as icon}
|
||||
<Icon icon={icon.icon} color={icon.color} />
|
||||
<div class="absolute top-0 left-0 h-full w-full">
|
||||
<Icon icon={icon.icon} color={icon.color} />
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
|
|
|
@ -12,11 +12,9 @@ import { Feature, Point } from "geojson"
|
|||
import LineRenderingConfig from "../../Models/ThemeConfig/LineRenderingConfig"
|
||||
import { Utils } from "../../Utils"
|
||||
import * as range_layer from "../../../assets/layers/range/range.json"
|
||||
import { LayerConfigJson } from "../../Models/ThemeConfig/Json/LayerConfigJson"
|
||||
import PerLayerFeatureSourceSplitter from "../../Logic/FeatureSource/PerLayerFeatureSourceSplitter"
|
||||
import FilteredLayer from "../../Models/FilteredLayer"
|
||||
import SimpleFeatureSource from "../../Logic/FeatureSource/Sources/SimpleFeatureSource"
|
||||
import { CLIENT_RENEG_LIMIT } from "tls"
|
||||
|
||||
class PointRenderingLayer {
|
||||
private readonly _config: PointRenderingConfig
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
...(state?.layoutToUse?.layers?.map((l) => l.calculatedTags?.map((c) => c[0]) ?? []) ?? [])
|
||||
)
|
||||
|
||||
const allTags = tags.map((tags) => {
|
||||
const allTags = tags.mapD((tags) => {
|
||||
const parts: (string | BaseUIElement)[][] = []
|
||||
for (const key in tags) {
|
||||
let v = tags[key]
|
||||
|
|
48
src/UI/Popup/MarkAsFavourite.svelte
Normal file
48
src/UI/Popup/MarkAsFavourite.svelte
Normal file
|
@ -0,0 +1,48 @@
|
|||
<script lang="ts">
|
||||
import type { SpecialVisualizationState } from "../SpecialVisualization";
|
||||
import { HeartIcon as HeartSolidIcon } from "@babeard/svelte-heroicons/solid";
|
||||
import { HeartIcon as HeartOutlineIcon } from "@babeard/svelte-heroicons/outline";
|
||||
import Tr from "../Base/Tr.svelte";
|
||||
import Translations from "../i18n/Translations";
|
||||
import LoginToggle from "../Base/LoginToggle.svelte";
|
||||
import type { Feature } from "geojson";
|
||||
import LayerConfig from "../../Models/ThemeConfig/LayerConfig";
|
||||
|
||||
/**
|
||||
* A full-blown 'mark as favourite'-button
|
||||
*/
|
||||
export let state: SpecialVisualizationState;
|
||||
export let feature: Feature
|
||||
export let tags: Record<string, string>;
|
||||
export let layer: LayerConfig
|
||||
let isFavourite = tags?.map(tags => tags._favourite === "yes");
|
||||
const t = Translations.t.favouritePoi;
|
||||
|
||||
function markFavourite(isFavourite: boolean) {
|
||||
state.favourites.markAsFavourite(feature, layer.id, state.layout.id, tags, isFavourite)
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<LoginToggle ignoreLoading={true} {state}>
|
||||
{#if $isFavourite}
|
||||
<div class="flex h-fit items-start">
|
||||
<HeartSolidIcon class="w-16 shrink-0 mr-2" on:click={() => markFavourite(false)} />
|
||||
<div class="flex flex-col w-full">
|
||||
<button class="flex flex-col items-start" on:click={() => markFavourite(false)}>
|
||||
<Tr t={t.button.unmark} />
|
||||
<Tr cls="normal-font subtle" t={t.button.unmarkNotDeleted}/>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<Tr cls="font-bold thanks m-2 p-2 block" t={t.button.isFavourite} />
|
||||
{:else}
|
||||
<div class="flex items-start">
|
||||
<HeartOutlineIcon class="w-16 shrink-0 mr-2" on:click={() => markFavourite(true)} />
|
||||
<button class="flex w-full flex-col items-start" on:click={() => markFavourite(true)}>
|
||||
<Tr t={t.button.markAsFavouriteTitle} />
|
||||
<Tr cls="normal-font subtle" t={t.button.markDescription}/>
|
||||
</button>
|
||||
</div>
|
||||
{/if}
|
||||
</LoginToggle>
|
36
src/UI/Popup/MarkAsFavouriteMini.svelte
Normal file
36
src/UI/Popup/MarkAsFavouriteMini.svelte
Normal file
|
@ -0,0 +1,36 @@
|
|||
<script lang="ts">
|
||||
import type { SpecialVisualizationState } from "../SpecialVisualization";
|
||||
import { HeartIcon as HeartSolidIcon } from "@babeard/svelte-heroicons/solid";
|
||||
import { HeartIcon as HeartOutlineIcon } from "@babeard/svelte-heroicons/outline";
|
||||
import Translations from "../i18n/Translations";
|
||||
import LoginToggle from "../Base/LoginToggle.svelte";
|
||||
import type { Feature } from "geojson";
|
||||
import LayerConfig from "../../Models/ThemeConfig/LayerConfig";
|
||||
|
||||
/**
|
||||
* A small 'mark as favourite'-button to serve as title-icon
|
||||
*/
|
||||
export let state: SpecialVisualizationState;
|
||||
export let feature: Feature;
|
||||
export let tags: Record<string, string>;
|
||||
export let layer: LayerConfig;
|
||||
let isFavourite = tags?.map(tags => tags._favourite === "yes");
|
||||
const t = Translations.t.favouritePoi;
|
||||
|
||||
function markFavourite(isFavourite: boolean) {
|
||||
state.favourites.markAsFavourite(feature, layer.id, state.layout.id, tags, isFavourite);
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<LoginToggle ignoreLoading={true} {state}>
|
||||
{#if $isFavourite}
|
||||
<button class="p-0 m-0 h-8 w-8" on:click={() => markFavourite(false)}>
|
||||
<HeartSolidIcon/>
|
||||
</button>
|
||||
{:else}
|
||||
<button class="p-0 m-0 h-8 w-8 no-image-background" on:click={() => markFavourite(true)} >
|
||||
<HeartOutlineIcon/>
|
||||
</button>
|
||||
{/if}
|
||||
</LoginToggle>
|
|
@ -6,6 +6,7 @@
|
|||
import { UIEventSource } from "../../../Logic/UIEventSource"
|
||||
import LayerConfig from "../../../Models/ThemeConfig/LayerConfig"
|
||||
import { twJoin } from "tailwind-merge"
|
||||
import Icon from "../../Map/Icon.svelte";
|
||||
|
||||
export let selectedElement: Feature
|
||||
export let tags: UIEventSource<Record<string, string>>
|
||||
|
@ -28,12 +29,7 @@
|
|||
|
||||
{#if mapping.icon !== undefined}
|
||||
<div class="inline-flex">
|
||||
<img
|
||||
class={twJoin(`mapping-icon-${mapping.iconClass}`, "mr-1")}
|
||||
src={mapping.icon}
|
||||
aria-hidden="true"
|
||||
alt=""
|
||||
/>
|
||||
<Icon icon={mapping.icon} clss={twJoin(`mapping-icon-${mapping.iconClass}`, "mr-1")}/>
|
||||
<SpecialTranslation t={mapping.then} {tags} {state} {layer} feature={selectedElement} />
|
||||
</div>
|
||||
{:else if mapping.then !== undefined}
|
||||
|
|
|
@ -17,6 +17,7 @@ import OsmObjectDownloader from "../Logic/Osm/OsmObjectDownloader"
|
|||
import { RasterLayerPolygon } from "../Models/RasterLayers"
|
||||
import { ImageUploadManager } from "../Logic/ImageProviders/ImageUploadManager"
|
||||
import { OsmTags } from "../Models/OsmFeature"
|
||||
import FavouritesFeatureSource from "../Logic/FeatureSource/Sources/FavouritesFeatureSource"
|
||||
|
||||
/**
|
||||
* The state needed to render a special Visualisation.
|
||||
|
@ -33,7 +34,6 @@ export interface SpecialVisualizationState {
|
|||
}
|
||||
|
||||
readonly indexedFeatures: IndexedFeatureSource
|
||||
|
||||
/**
|
||||
* Some features will create a new element that should be displayed.
|
||||
* These can be injected by appending them to this featuresource (and pinging it)
|
||||
|
@ -59,6 +59,8 @@ export interface SpecialVisualizationState {
|
|||
readonly selectedLayer: UIEventSource<LayerConfig>
|
||||
readonly selectedElementAndLayer: Store<{ feature: Feature; layer: LayerConfig }>
|
||||
|
||||
readonly favourites: FavouritesFeatureSource
|
||||
|
||||
/**
|
||||
* If data is currently being fetched from external sources
|
||||
*/
|
||||
|
|
|
@ -79,6 +79,8 @@ import ThemeViewState from "../Models/ThemeViewState"
|
|||
import LanguagePicker from "./InputElement/LanguagePicker.svelte"
|
||||
import LogoutButton from "./Base/LogoutButton.svelte"
|
||||
import OpenJosm from "./Base/OpenJosm.svelte"
|
||||
import MarkAsFavourite from "./Popup/MarkAsFavourite.svelte"
|
||||
import MarkAsFavouriteMini from "./Popup/MarkAsFavouriteMini.svelte"
|
||||
|
||||
class NearbyImageVis implements SpecialVisualization {
|
||||
// Class must be in SpecialVisualisations due to weird cyclical import that breaks the tests
|
||||
|
@ -1481,7 +1483,7 @@ export default class SpecialVisualizations {
|
|||
const tags = (<ThemeViewState>(
|
||||
state
|
||||
)).geolocation.currentUserLocation.features.map(
|
||||
(features) => features[0].properties
|
||||
(features) => features[0]?.properties
|
||||
)
|
||||
return new SvelteUIElement(AllTagsPanel, {
|
||||
state,
|
||||
|
@ -1489,6 +1491,46 @@ export default class SpecialVisualizations {
|
|||
})
|
||||
},
|
||||
},
|
||||
{
|
||||
funcName: "favourite_status",
|
||||
needsUrls: [],
|
||||
docs: "A button that allows a (logged in) contributor to mark a location as a favourite location",
|
||||
args: [],
|
||||
constr(
|
||||
state: SpecialVisualizationState,
|
||||
tagSource: UIEventSource<Record<string, string>>,
|
||||
argument: string[],
|
||||
feature: Feature,
|
||||
layer: LayerConfig
|
||||
): BaseUIElement {
|
||||
return new SvelteUIElement(MarkAsFavourite, {
|
||||
tags: tagSource,
|
||||
state,
|
||||
layer,
|
||||
feature,
|
||||
})
|
||||
},
|
||||
},
|
||||
{
|
||||
funcName: "favourite_icon",
|
||||
needsUrls: [],
|
||||
docs: "A small button that allows a (logged in) contributor to mark a location as a favourite location, sized to fit a title-icon",
|
||||
args: [],
|
||||
constr(
|
||||
state: SpecialVisualizationState,
|
||||
tagSource: UIEventSource<Record<string, string>>,
|
||||
argument: string[],
|
||||
feature: Feature,
|
||||
layer: LayerConfig
|
||||
): BaseUIElement {
|
||||
return new SvelteUIElement(MarkAsFavouriteMini, {
|
||||
tags: tagSource,
|
||||
state,
|
||||
layer,
|
||||
feature,
|
||||
})
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
specialVisualizations.push(new AutoApplyButton(specialVisualizations))
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
<script lang="ts">
|
||||
// Testing grounds
|
||||
import LanguagePicker from "./InputElement/LanguagePicker.svelte";
|
||||
import Translations from "./i18n/Translations";
|
||||
import Tr from "./Base/Tr.svelte";
|
||||
import Locale from "./i18n/Locale";
|
||||
import MarkAsFavourite from "./Popup/MarkAsFavourite.svelte";
|
||||
let language = Locale.language
|
||||
import { UIEventSource } from "../Logic/UIEventSource";
|
||||
import { OsmConnection } from "../Logic/Osm/OsmConnection";
|
||||
|
||||
const osmConnection = new OsmConnection({attemptLogin: true})
|
||||
function resetFavs(){
|
||||
osmConnection.preferencesHandler.removeAllWithPrefix("mapcomplete-favourite-")
|
||||
console.log("CLEARED!")
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<MarkAsFavourite/>
|
||||
|
||||
<button on:click={() => resetFavs()} >Clear</button>
|
||||
|
|
|
@ -76,7 +76,6 @@
|
|||
let showCrosshair = state.userRelatedState.showCrosshair;
|
||||
let arrowKeysWereUsed = state.mapProperties.lastKeyNavigation;
|
||||
let centerFeatures = state.closestFeatures.features;
|
||||
$: console.log("Centerfeatures are", $centerFeatures)
|
||||
const selectedElementView = selectedElement.map(
|
||||
(selectedElement) => {
|
||||
// Svelte doesn't properly reload some of the legacy UI-elements
|
||||
|
@ -232,7 +231,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{#if $arrowKeysWereUsed !== undefined}
|
||||
{#if $arrowKeysWereUsed !== undefined && $centerFeatures?.length > 0}
|
||||
<div class="pointer-events-auto interactive p-1">
|
||||
{#each $centerFeatures as feat, i (feat.properties.id)}
|
||||
<div class="flex">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue