forked from MapComplete/MapComplete
		
	Merge branch 'master' into develop
This commit is contained in:
		
						commit
						8d1ae657fc
					
				
					 28 changed files with 693 additions and 196 deletions
				
			
		|  | @ -2763,7 +2763,8 @@ | |||
|             "en": "<b>Type 2</b> (mennekes) outputs at most 16 A", | ||||
|             "nl": "<b>Type 2</b> (mennekes) levert een stroom van maximaal 16 A", | ||||
|             "da": "<b>Type 2</b> (mennekes) udgange højst 16 A", | ||||
|             "de": "<b>Typ 2</b> (Mennekes) liefert maximal 16 A" | ||||
|             "de": "<b>Typ 2</b> (Mennekes) liefert maximal 16 A", | ||||
|             "ca": "<b>Tipus 2</b> (menneks) surt com a màxim a 16 A" | ||||
|           }, | ||||
|           "icon": { | ||||
|             "path": "./assets/layers/charging_station/Type2_socket.svg", | ||||
|  | @ -2776,7 +2777,8 @@ | |||
|             "en": "<b>Type 2</b> (mennekes) outputs at most 32 A", | ||||
|             "nl": "<b>Type 2</b> (mennekes) levert een stroom van maximaal 32 A", | ||||
|             "da": "<b>Type 2</b> (mennekes) udgange højst 32 A", | ||||
|             "de": "<b>Typ 2</b> (Mennekes) liefert maximal 32 A" | ||||
|             "de": "<b>Typ 2</b> (Mennekes) liefert maximal 32 A", | ||||
|             "ca": "<b>Tipus 2</b> (menneks) surt com a màxim a 32 A" | ||||
|           }, | ||||
|           "icon": { | ||||
|             "path": "./assets/layers/charging_station/Type2_socket.svg", | ||||
|  | @ -3528,7 +3530,8 @@ | |||
|         "en": "What current do the plugs with <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (A Type 2 with cable branded as Tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> offer?", | ||||
|         "nl": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>?", | ||||
|         "da": "Hvilken strømstyrke har stikkene med <div style='display: inline-block'><b><b> Tesla Supercharger (Destination)</b> (A Type 2 med kabel med Tesla-mærket)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> ?", | ||||
|         "de": "Welche Stromstärke liefern die Stecker mit <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel von Tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>?" | ||||
|         "de": "Welche Stromstärke liefern die Stecker mit <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel von Tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>?", | ||||
|         "ca": "Quin corrent donen els endolls amb <div style='display: inline-block'><b><b>Tesla Supercharger (destinació)</b> (un tipus 2 amb cable amb la marca Tesla)</b> <img style ='amplada: 1rem; mostrar: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> oferta?" | ||||
|       }, | ||||
|       "render": { | ||||
|         "en": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (A Type 2 with cable branded as Tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs at most {socket:tesla_destination:current}A", | ||||
|  | @ -3546,7 +3549,8 @@ | |||
|             "en": "<b>Tesla Supercharger (Destination)</b> (A Type 2 with cable branded as tesla) outputs at most 16 A", | ||||
|             "nl": "<b>Tesla supercharger (Destination</b> (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 16 A", | ||||
|             "da": "<b>Tesla Supercharger (Destination)</b> (A Type 2 med kabel mærket som tesla) yder højst 16 A", | ||||
|             "de": "<b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel) liefert maximal 16 A" | ||||
|             "de": "<b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel) liefert maximal 16 A", | ||||
|             "ca": "<b>Supercarregador Tesla (destinació)</b> (Un Tipus 2 amb un cable de marca Tesla) surt com a màxim a 16 A" | ||||
|           }, | ||||
|           "icon": { | ||||
|             "path": "./assets/layers/charging_station/Type2_tethered.svg", | ||||
|  | @ -3559,7 +3563,8 @@ | |||
|             "en": "<b>Tesla Supercharger (Destination)</b> (A Type 2 with cable branded as Tesla) outputs at most 32 A", | ||||
|             "nl": "<b>Tesla Supercharger (Destination</b> (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 32 A", | ||||
|             "da": "<b>Tesla Supercharger (Destination)</b> (A Type 2 med kabel af Tesla-mærket) yder højst 32 A", | ||||
|             "de": "<b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel von Tesla) liefert maximal 32 A" | ||||
|             "de": "<b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel von Tesla) liefert maximal 32 A", | ||||
|             "ca": "<b>Supercarregador Tesla (destinació)</b> (Un Tipus 2 amb un cable de marca Tesla) surt com a màxim a 32 A" | ||||
|           }, | ||||
|           "icon": { | ||||
|             "path": "./assets/layers/charging_station/Type2_tethered.svg", | ||||
|  | @ -4949,7 +4954,7 @@ | |||
|           "question": { | ||||
|             "en": "Has a <div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> connector", | ||||
|             "nl": "Heeft een <div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>", | ||||
|             "ca": "Té un connector <div style='display: inline-block'><b><b> Tipus 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>", | ||||
|             "ca": "Té un connector <div style='display: inline-block'><b><b> CCS Tipus 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>", | ||||
|             "da": "Har en <div style='display: inline-block'><b><b> Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> connector", | ||||
|             "de": "Hat einen <div style='display: inline-block'><b><b>Typ 2 CCS</b> (Mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> Anschluss", | ||||
|             "es": "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>" | ||||
|  | @ -4971,7 +4976,7 @@ | |||
|           "question": { | ||||
|             "en": "Has a <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (a branded type2_css)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> connector", | ||||
|             "nl": "Heeft een <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>", | ||||
|             "ca": "Té un connector <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (un tipus2_css de marca)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>", | ||||
|             "ca": "Té un connector <div style='display: inline-block'><b><b>CCS Tesla Supercharger </b> (un tipus2_css de marca)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>", | ||||
|             "da": "Har et <div style='display: inline-block'><b><b> Tesla Supercharger CCS-stik</b> (et mærkevarer type2_css)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> stik", | ||||
|             "de": "Hat einen <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (Typ 2 CSS vonTesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> Anschluss", | ||||
|             "es": "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>" | ||||
|  |  | |||
|  | @ -160,7 +160,7 @@ | |||
|       }, | ||||
|       "render": { | ||||
|         "en": "<h3>Wikipedia article of the name giver</h3>{wikipedia(name:etymology:wikidata):max-height:20rem}", | ||||
|         "nl": "<h3>Wikipedia artikel van de naamgever</h3>{wikipedia(name:etymology:wikidata):max-height:20rem}", | ||||
|         "nl": "<h3>Wikipedia-artikel van de naamgever</h3>{wikipedia(name:etymology:wikidata):max-height:20rem}", | ||||
|         "de": "<h3>Wikipedia Artikel zur Namensherkunft</h3>{wikipedia(name:etymology:wikidata):max-height:20rem}", | ||||
|         "fr": "<h3>Article Wikipedia de la référence au nom</h3>{wikipedia(name:etymology:wikidata):max-height:20rem}", | ||||
|         "ca": "<h3> Article de la Viquipèdia del nom donant</h3>{wikipedia(name:etymology:wikidata):max-height:20rem}" | ||||
|  |  | |||
|  | @ -49,7 +49,7 @@ | |||
|         "nl": "een fastfood-zaak", | ||||
|         "ru": "быстрое питание", | ||||
|         "de": "ein Schnellimbiss", | ||||
|         "ca": "un de menjar ràpid", | ||||
|         "ca": "un negoci de menjar ràpid", | ||||
|         "fr": "un fast-food" | ||||
|       }, | ||||
|       "tags": [ | ||||
|  |  | |||
|  | @ -78,7 +78,8 @@ | |||
|         "fr": "Le nom de cette microbibliothèque est {name}", | ||||
|         "ru": "Название книжного шкафа — {name}", | ||||
|         "it": "Questa microbiblioteca si chiama {name}", | ||||
|         "hu": "Ennek a könyvespolcnak a neve: {name}" | ||||
|         "hu": "Ennek a könyvespolcnak a neve: {name}", | ||||
|         "ca": "El nom d'aquesta prestatgeria és {name}" | ||||
|       }, | ||||
|       "question": { | ||||
|         "en": "What is the name of this public bookcase?", | ||||
|  | @ -87,7 +88,8 @@ | |||
|         "fr": "Quel est le nom de cette microbibliothèque ?", | ||||
|         "ru": "Как называется этот общественный книжный шкаф?", | ||||
|         "it": "Come si chiama questa microbiblioteca pubblica?", | ||||
|         "hu": "Mi a neve ennek a nyilvános könyvespolcnak?" | ||||
|         "hu": "Mi a neve ennek a nyilvános könyvespolcnak?", | ||||
|         "ca": "Com es diu aquesta prestatgeria pública?" | ||||
|       }, | ||||
|       "freeform": { | ||||
|         "key": "name", | ||||
|  | @ -108,7 +110,8 @@ | |||
|             "fr": "Cette microbibliothèque n'a pas de nom", | ||||
|             "ru": "У этого книжного шкафа нет названия", | ||||
|             "it": "Questa microbiblioteca non ha un nome proprio", | ||||
|             "hu": "Ennek a könyvespolcnak nincs neve" | ||||
|             "hu": "Ennek a könyvespolcnak nincs neve", | ||||
|             "ca": "Aquesta prestatgeria no té un nom" | ||||
|           } | ||||
|         } | ||||
|       ], | ||||
|  | @ -122,7 +125,8 @@ | |||
|         "fr": "{capacity} livres peuvent entrer dans cette microbibliothèque", | ||||
|         "it": "Questa microbiblioteca può contenere fino a {capacity} libri", | ||||
|         "ru": "{capacity} книг помещается в этот книжный шкаф", | ||||
|         "hu": "Ezen a könyvespolcon {capacity} könyv fér el" | ||||
|         "hu": "Ezen a könyvespolcon {capacity} könyv fér el", | ||||
|         "ca": "Caben {capacity} llibres en aquesta prestatgeria" | ||||
|       }, | ||||
|       "question": { | ||||
|         "en": "How many books fit into this public bookcase?", | ||||
|  | @ -131,7 +135,8 @@ | |||
|         "fr": "Combien de livres peuvent entrer dans cette microbibliothèque ?", | ||||
|         "ru": "Сколько книг помещается в этом общественном книжном шкафу?", | ||||
|         "it": "Quanti libri può contenere questa microbiblioteca?", | ||||
|         "hu": "Hány könyv fér el ezen a nyilvános könyvespolcon?" | ||||
|         "hu": "Hány könyv fér el ezen a nyilvános könyvespolcon?", | ||||
|         "ca": "Quants llibres caben en aquesta prestatgeria pública?" | ||||
|       }, | ||||
|       "freeform": { | ||||
|         "key": "capacity", | ||||
|  | @ -149,7 +154,8 @@ | |||
|         "fr": "Quel type de livres peut-on dans cette microbibliothèque ?", | ||||
|         "it": "Che tipo di libri si possono trovare in questa microbiblioteca?", | ||||
|         "ru": "Какие книги можно найти в этом общественном книжном шкафу?", | ||||
|         "hu": "Milyen fajta könyvek találhatók ezen a közösségi könyvespolcon?" | ||||
|         "hu": "Milyen fajta könyvek találhatók ezen a közösségi könyvespolcon?", | ||||
|         "ca": "Quins tipus de llibres pots trobar a aquesta prestatgeria pública?" | ||||
|       }, | ||||
|       "render": { | ||||
|         "nl": "Deze plaats serveert vooral {books}", | ||||
|  | @ -174,7 +180,8 @@ | |||
|             "ru": "В основном детские книги", | ||||
|             "it": "Principalmente libri per l'infanzia", | ||||
|             "hu": "Többnyire gyermekkönyvek", | ||||
|             "es": "Mayoritariamente libros infantiles" | ||||
|             "es": "Mayoritariamente libros infantiles", | ||||
|             "ca": "Majoritàriament llibres infantils" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|  | @ -187,7 +194,8 @@ | |||
|             "ru": "В основном книги для взрослых", | ||||
|             "it": "Principalmente libri per persone in età adulta", | ||||
|             "hu": "Többnyire felnőtteknek szóló könyvek", | ||||
|             "es": "Mayoritariamente libros para adultos" | ||||
|             "es": "Mayoritariamente libros para adultos", | ||||
|             "ca": "Majoritàriament llibres per a adults" | ||||
|           } | ||||
|         } | ||||
|       ] | ||||
|  | @ -200,7 +208,8 @@ | |||
|         "de": "Befindet sich der Bücherschrank im Freien?", | ||||
|         "fr": "Cette microbiliothèque est-elle en extérieur ?", | ||||
|         "it": "Questa microbiblioteca si trova all'aperto?", | ||||
|         "hu": "A szabadban van-e ez a könyvespolc?" | ||||
|         "hu": "A szabadban van-e ez a könyvespolc?", | ||||
|         "ca": "Aquesta prestatgeria es troba a l'exterior?" | ||||
|       }, | ||||
|       "mappings": [ | ||||
|         { | ||||
|  | @ -210,7 +219,8 @@ | |||
|             "de": "Der Bücherschrank befindet sich im Innenbereich", | ||||
|             "fr": "Cette microbibliothèque est en intérieur", | ||||
|             "it": "Questa microbiblioteca si trova al chiuso", | ||||
|             "hu": "Ez a könyvespolc beltérben található" | ||||
|             "hu": "Ez a könyvespolc beltérben található", | ||||
|             "ca": "Aquesta prestatgeria es troba a l'interior" | ||||
|           }, | ||||
|           "if": "indoor=yes" | ||||
|         }, | ||||
|  | @ -221,7 +231,8 @@ | |||
|             "de": "Dieser Bücherschrank befindet sich im Freien", | ||||
|             "fr": "Cette microbibliothèque est en extérieur", | ||||
|             "it": "Questa microbiblioteca si trova all'aperto", | ||||
|             "hu": "Ez a könyvespolc a szabadban van" | ||||
|             "hu": "Ez a könyvespolc a szabadban van", | ||||
|             "ca": "Aquesta prestatgeria es troba a l'exterior" | ||||
|           }, | ||||
|           "if": "indoor=no" | ||||
|         }, | ||||
|  | @ -249,7 +260,8 @@ | |||
|         "fr": "Cette microbibliothèque est-elle librement accèssible ?", | ||||
|         "it": "Questa microbiblioteca è ad accesso libero?", | ||||
|         "ru": "Имеется ли свободный доступ к этому общественному книжному шкафу?", | ||||
|         "hu": "Szabadon hozzáférhető-e ez a közösségi könyvespolc?" | ||||
|         "hu": "Szabadon hozzáférhető-e ez a közösségi könyvespolc?", | ||||
|         "ca": "Aquesta prestatgeria pública és de lliure accés?" | ||||
|       }, | ||||
|       "condition": "indoor=yes", | ||||
|       "mappings": [ | ||||
|  | @ -275,7 +287,8 @@ | |||
|             "fr": "Accèssible aux clients", | ||||
|             "it": "L'accesso è riservato ai clienti", | ||||
|             "hu": "Csak ügyfelek használhatják", | ||||
|             "es": "Solo accesible a clientes" | ||||
|             "es": "Solo accesible a clientes", | ||||
|             "ca": "Només accessible per als clients" | ||||
|           }, | ||||
|           "if": "access=customers" | ||||
|         } | ||||
|  | @ -288,7 +301,8 @@ | |||
|         "de": "Wer betreibt den Bücherschrank?", | ||||
|         "fr": "Qui entretien cette microbibliothèque ?", | ||||
|         "it": "Chi mantiene questa microbiblioteca?", | ||||
|         "hu": "Ki tartja fenn ezt a nyilvános könyvespolcot?" | ||||
|         "hu": "Ki tartja fenn ezt a nyilvános könyvespolcot?", | ||||
|         "ca": "Qui gestiona aquesta prestatgeria pública?" | ||||
|       }, | ||||
|       "render": { | ||||
|         "en": "Operated by {operator}", | ||||
|  | @ -296,7 +310,8 @@ | |||
|         "de": "Betrieben von {operator}", | ||||
|         "fr": "Entretenue par {operator}", | ||||
|         "it": "È gestita da {operator}", | ||||
|         "hu": "Üzemeltető: {operator}" | ||||
|         "hu": "Üzemeltető: {operator}", | ||||
|         "ca": "Gestionant per {operator}" | ||||
|       }, | ||||
|       "freeform": { | ||||
|         "type": "string", | ||||
|  | @ -311,7 +326,8 @@ | |||
|         "de": "Gehört der Bücherschrank zu einem Netzwerk?", | ||||
|         "fr": "Cette microbibliothèque fait-elle partie d'un réseau/groupe ?", | ||||
|         "it": "Questa microbiblioteca fa parte di una rete?", | ||||
|         "hu": "Része-e egy nagyobb hálózatnak ez a nyilvános könyvespolc?" | ||||
|         "hu": "Része-e egy nagyobb hálózatnak ez a nyilvános könyvespolc?", | ||||
|         "ca": "Aquesta prestatgeria pública forma part d'una xarxa més gran?" | ||||
|       }, | ||||
|       "render": { | ||||
|         "en": "This public bookcase is part of {brand}", | ||||
|  | @ -319,7 +335,8 @@ | |||
|         "de": "Dieser Bücherschrank ist Teil von {brand}", | ||||
|         "fr": "Cette microbibliothèque fait partie du groupe {brand}", | ||||
|         "it": "Questa microbiblioteca fa parte di {brand}", | ||||
|         "hu": "Ez a nyilvános könyvespolc a(z) {brand} része" | ||||
|         "hu": "Ez a nyilvános könyvespolc a(z) {brand} része", | ||||
|         "ca": "Aquesta prestatgeria pública forma part de {brand}" | ||||
|       }, | ||||
|       "condition": "ref=", | ||||
|       "freeform": { | ||||
|  | @ -335,7 +352,8 @@ | |||
|             "it": "Fa parte della rete 'Little Free Library'", | ||||
|             "hu": "A „Little Free Library” hálózat része", | ||||
|             "es": "Parte de la red 'Little Free Library'", | ||||
|             "pl": "Część sieci \"Little Free Library\"" | ||||
|             "pl": "Część sieci \"Little Free Library\"", | ||||
|             "ca": "Part de la xarxa 'Little Free Library'" | ||||
|           }, | ||||
|           "if": { | ||||
|             "and": [ | ||||
|  | @ -397,7 +415,8 @@ | |||
|             "de": "Dieser Bücherschrank ist nicht Teil eines größeren Netzwerks", | ||||
|             "fr": "Cette microbibliothèque ne fait pas partie d'un réseau/groupe", | ||||
|             "it": "Questa microbiblioteca non fa parte di una rete", | ||||
|             "hu": "Ez a könyvespolc nem része egy nagyobb hálózatnak" | ||||
|             "hu": "Ez a könyvespolc nem része egy nagyobb hálózatnak", | ||||
|             "ca": "Aquesta prestatgeria no forma part d'una xarxa més gran" | ||||
|           }, | ||||
|           "if": { | ||||
|             "and": [ | ||||
|  | @ -449,7 +468,8 @@ | |||
|             "fr": "Plus d'infos sur le site web", | ||||
|             "ru": "Более подробная информация на сайте", | ||||
|             "it": "Maggiori informazioni sul sito web", | ||||
|             "hu": "További információ ezen a weboldalon" | ||||
|             "hu": "További információ ezen a weboldalon", | ||||
|             "ca": "Més informació al web" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|  | @ -488,7 +508,8 @@ | |||
|           "question": { | ||||
|             "en": "Has children books", | ||||
|             "nl": "Kinderboeken aanwezig", | ||||
|             "de": "Hat Kinderbücher" | ||||
|             "de": "Hat Kinderbücher", | ||||
|             "ca": "Té llibres infantils" | ||||
|           }, | ||||
|           "osmTags": "books~i~.*children.*" | ||||
|         } | ||||
|  | @ -501,7 +522,8 @@ | |||
|           "question": { | ||||
|             "en": "Has books for adults", | ||||
|             "nl": "Boeken voor volwassenen aanwezig", | ||||
|             "de": "Hat Bücher für Erwachsene" | ||||
|             "de": "Hat Bücher für Erwachsene", | ||||
|             "ca": "Té llibres per a adults" | ||||
|           }, | ||||
|           "osmTags": "books~i~.*adults.*" | ||||
|         } | ||||
|  | @ -516,14 +538,16 @@ | |||
|             "en": "Indoor or outdoor", | ||||
|             "de": "Innen oder Außen", | ||||
|             "hu": "Beltéri vagy kültéri", | ||||
|             "es": "Interior o exterior" | ||||
|             "es": "Interior o exterior", | ||||
|             "ca": "Interior o exterior" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "question": { | ||||
|             "en": "Located indoors", | ||||
|             "nl": "Bevindt zich binnen", | ||||
|             "de": "Befindet sich im Innenbereich" | ||||
|             "de": "Befindet sich im Innenbereich", | ||||
|             "ca": "Situat a l'interior" | ||||
|           }, | ||||
|           "osmTags": "indoor=yes" | ||||
|         }, | ||||
|  | @ -531,7 +555,8 @@ | |||
|           "question": { | ||||
|             "nl": "Bevindt zich buiten", | ||||
|             "en": "Located outdoors", | ||||
|             "de": "Befindet sich im Freien" | ||||
|             "de": "Befindet sich im Freien", | ||||
|             "ca": "Situat a l'exterior" | ||||
|           }, | ||||
|           "osmTags": { | ||||
|             "or": [ | ||||
|  |  | |||
|  | @ -1285,7 +1285,8 @@ | |||
|           "icon": "./assets/layers/questions/denominations/chf/5rp-2019-800px.png", | ||||
|           "then": { | ||||
|             "en": "5 centimes coins are accepted", | ||||
|             "nl": "Munten van 5 rappen worden geaccepteerd" | ||||
|             "nl": "Munten van 5 rappen worden geaccepteerd", | ||||
|             "ca": "S'accepten monedes de 5 cèntims" | ||||
|           }, | ||||
|           "hideInAnswer": "_currency!~.*CHF.*" | ||||
|         }, | ||||
|  | @ -1294,7 +1295,8 @@ | |||
|           "icon": "./assets/layers/questions/denominations/chf/10rp-2019-800px.png", | ||||
|           "then": { | ||||
|             "en": "10 centimes coins are accepted", | ||||
|             "nl": "Munten van 10 rappen worden geaccepteerd" | ||||
|             "nl": "Munten van 10 rappen worden geaccepteerd", | ||||
|             "ca": "S'accepten monedes de 10 cèntims" | ||||
|           }, | ||||
|           "hideInAnswer": "_currency!~.*CHF.*" | ||||
|         }, | ||||
|  | @ -1303,7 +1305,8 @@ | |||
|           "icon": "./assets/layers/questions/denominations/chf/20rp-2019-800px.png", | ||||
|           "then": { | ||||
|             "en": "20 centimes coins are accepted", | ||||
|             "nl": "Munten van 20 rappen worden geaccepteerd" | ||||
|             "nl": "Munten van 20 rappen worden geaccepteerd", | ||||
|             "ca": "S'accepten monedes de 20 cèntims" | ||||
|           }, | ||||
|           "hideInAnswer": "_currency!~.*CHF.*" | ||||
|         }, | ||||
|  | @ -2322,7 +2325,8 @@ | |||
|         "en": "When was this object last checked?", | ||||
|         "de": "Wann wurde dieses Objekt zuletzt kontrolliert?", | ||||
|         "nl": "Wanneer is dit object voor het laatst gecontroleerd?", | ||||
|         "pl": "Kiedy ten obiekt został ostatnio sprawdzony?" | ||||
|         "pl": "Kiedy ten obiekt został ostatnio sprawdzony?", | ||||
|         "ca": "Quan es va comprovar per última vegada aquest objecte?" | ||||
|       }, | ||||
|       "freeform": { | ||||
|         "key": "check_date", | ||||
|  | @ -2332,7 +2336,8 @@ | |||
|         "en": "This object was last checked on <b>{check_date}</b>", | ||||
|         "de": "Dieses Objekt wurde zuletzt kontrolliert am <b>{check_date}</b>", | ||||
|         "nl": "Dit object is voor het laatst gecontroleerd op <b>{check_date}</b>", | ||||
|         "pl": "Ten obiekt był ostatnio sprawdzony <b>{check_date}</b>" | ||||
|         "pl": "Ten obiekt był ostatnio sprawdzony <b>{check_date}</b>", | ||||
|         "ca": "Aquest objecte es va comprovar per darrera vegada el <b>{check_date}</b>" | ||||
|       }, | ||||
|       "mappings": [ | ||||
|         { | ||||
|  | @ -2341,7 +2346,8 @@ | |||
|             "en": "This object was last checked today", | ||||
|             "de": "Dieses Objekt wurde heute zuletzt kontrolliert", | ||||
|             "nl": "Dit object is vandaag voor het laatst gecontroleerd", | ||||
|             "pl": "Ten obiekt został ostatnio sprawdzony dzisiaj" | ||||
|             "pl": "Ten obiekt został ostatnio sprawdzony dzisiaj", | ||||
|             "ca": "Aquest objecte es va comprovar per última vegada avui" | ||||
|           } | ||||
|         } | ||||
|       ] | ||||
|  |  | |||
|  | @ -33,7 +33,8 @@ | |||
|       "de": "Überweg", | ||||
|       "nl": "Oversteekplaats", | ||||
|       "pa_PK": "کراسنگ", | ||||
|       "fr": "Passage" | ||||
|       "fr": "Passage", | ||||
|       "ca": "Creuament" | ||||
|     } | ||||
|   }, | ||||
|   "presets": [ | ||||
|  | @ -42,7 +43,8 @@ | |||
|         "en": "a crossing", | ||||
|         "de": "einen Überweg", | ||||
|         "nl": "een oversteekplaats", | ||||
|         "fr": "un passage" | ||||
|         "fr": "un passage", | ||||
|         "ca": "un creuament" | ||||
|       }, | ||||
|       "tags": [ | ||||
|         "highway=footway", | ||||
|  |  | |||
|  | @ -15,7 +15,8 @@ | |||
|       "nl": "School <i>{name}</i>", | ||||
|       "de": "Schule <i>{name}</i>", | ||||
|       "fr": "School <i>{name}</i>", | ||||
|       "pl": "Szkoła <i>{name}</i>" | ||||
|       "pl": "Szkoła <i>{name}</i>", | ||||
|       "ca": "Escola <i>{name}</i>" | ||||
|     } | ||||
|   }, | ||||
|   "calculatedTags": [ | ||||
|  | @ -79,7 +80,8 @@ | |||
|         "en": "What level of education is given on this school?", | ||||
|         "nl": "Wat is het onderwijsniveau van deze school?", | ||||
|         "de": "Welches Bildungsniveau wird an dieser Schule vermittelt?", | ||||
|         "fr": "Quel est le niveau d'enseignement dispensé dans cette école ?" | ||||
|         "fr": "Quel est le niveau d'enseignement dispensé dans cette école ?", | ||||
|         "ca": "Quin nivell d'educació s'imparteix en aquesta escola?" | ||||
|       }, | ||||
|       "mappings": [ | ||||
|         { | ||||
|  | @ -98,7 +100,8 @@ | |||
|             "en": "This is a school where one learns primary skills such as basic literacy and numerical skills. <div class='subtle'>Pupils typically enroll from 6 years old till 12 years old</div>", | ||||
|             "nl": "Dit is een lagere school", | ||||
|             "de": "In dieser Schule lernt man grundlegende Fähigkeiten wie Lesen, Schreiben und Rechnen. <div class='subtle'>Schüler besuchen die Schule in der Regel im Alter von 6 bis 12 Jahren</div>", | ||||
|             "fr": "C'est une école où l'on apprend les compétences primaires telles que l'alphabétisation de base et les compétences numériques.. <div class='subtle'>Les élèves s'inscrivent généralement de 6 à 12 ans.</div>" | ||||
|             "fr": "C'est une école où l'on apprend les compétences primaires telles que l'alphabétisation de base et les compétences numériques.. <div class='subtle'>Les élèves s'inscrivent généralement de 6 à 12 ans.</div>", | ||||
|             "ca": "Aquesta és una escola on s'aprèn competències primàries com ara l'alfabetització bàsica i les habilitats numèriques. <div class='subtle'>Els alumnes solen matricular-se des dels 6 anys fins als 12 anys</div>" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|  | @ -107,7 +110,8 @@ | |||
|             "en": "This is a secondary school which offers all grades", | ||||
|             "nl": "Dit is een middelbare school die alle schooljaren aanbiedt (dus van het eerste tot en met het zesde middelbaar)", | ||||
|             "de": "Dies ist eine weiterführende Schule, die alle Jahrgangsstufen anbietet", | ||||
|             "fr": "C'est une école secondaire qui offre toutes les classes" | ||||
|             "fr": "C'est une école secondaire qui offre toutes les classes", | ||||
|             "ca": "Aquesta és una escola secundària que ofereix tots els graus" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|  | @ -234,7 +238,8 @@ | |||
|             "en": "This is a school where students study skills at their age-adequate level. <div>There are little or no special facilities to cater for students with special needs or facilities are ad-hoc</div>", | ||||
|             "nl": "Deze school richt zich op studenten zonder extra zorgbehoefte. <div class='subtle>Dit omvat leerlingen waarbij kleine, ad-hoc maatregelen volstaan om de lessen te volgen.</div>", | ||||
|             "de": "Es handelt sich um eine Schule, in der die Schüler Fähigkeiten auf ihrem altersgemäßen Niveau erlernen. <div>Es gibt wenig oder keine speziellen Einrichtungen für Schüler mit besonderen Bedürfnissen oder die Einrichtungen sind ad-hoc</div>", | ||||
|             "fr": "C'est un établissement scolaire où les étudiants acquièrent des compétences à un niveau adapté à leur âge. <div>Il y a peu ou pas d'adaptations spéciales pour aider les étudiants ayant des besoins particuliers, ou les installations sont ad-hoc</div> Remark: isn't it contradictory to say there's no special facility + the facilities are ad-hoc?" | ||||
|             "fr": "C'est un établissement scolaire où les étudiants acquièrent des compétences à un niveau adapté à leur âge. <div>Il y a peu ou pas d'adaptations spéciales pour aider les étudiants ayant des besoins particuliers, ou les installations sont ad-hoc</div> Remark: isn't it contradictory to say there's no special facility + the facilities are ad-hoc?", | ||||
|             "ca": "Aquesta és una escola on els estudiants estudien habilitats al nivell adequat per a la seva edat. <div>Hi ha poques o cap instal·lació especial per atendre els estudiants amb necessitats especials o les instal·lacions són ad-hoc</div>" | ||||
|           }, | ||||
|           "hideInAnswer": true | ||||
|         }, | ||||
|  |  | |||
|  | @ -23,7 +23,8 @@ | |||
|     "render": { | ||||
|       "en": "Shelter", | ||||
|       "de": "Unterstand", | ||||
|       "nl": "Schuilplaats" | ||||
|       "nl": "Schuilplaats", | ||||
|       "ca": "Refugi" | ||||
|     } | ||||
|   }, | ||||
|   "mapRendering": [ | ||||
|  | @ -90,7 +91,8 @@ | |||
|       "question": { | ||||
|         "en": "What kind of shelter is this?", | ||||
|         "de": "Um welche Art von Unterstand handelt es sich?", | ||||
|         "nl": "Wat voor schuilplaats is dit?" | ||||
|         "nl": "Wat voor schuilplaats is dit?", | ||||
|         "ca": "Quin tipus de refugi és aquest?" | ||||
|       }, | ||||
|       "render": { | ||||
|         "en": "Shelter type: {shelter_type}", | ||||
|  |  | |||
|  | @ -101,7 +101,8 @@ | |||
|         "ja": "このお店の名前は何ですか?", | ||||
|         "nl": "Wat is de naam van deze winkel?", | ||||
|         "de": "Wie ist der Name dieses Geschäfts?", | ||||
|         "es": "¿Cual es el nombre de esta tienda?" | ||||
|         "es": "¿Cual es el nombre de esta tienda?", | ||||
|         "ca": "Quin és el nom d'aquesta botiga?" | ||||
|       }, | ||||
|       "render": { | ||||
|         "en": "This shop is called <i>{name}</i>", | ||||
|  | @ -122,13 +123,15 @@ | |||
|           "en": "What kind of shop is this?", | ||||
|           "nl": "Wat voor soort winkel is dit?", | ||||
|           "de": "Um was für ein Geschäft handelt es sich?", | ||||
|           "fr": "Quel genre de magasin est-ce?" | ||||
|           "fr": "Quel genre de magasin est-ce?", | ||||
|           "ca": "Quin tipus de botiga és aquesta?" | ||||
|         }, | ||||
|         "render": { | ||||
|           "en": "This is a {shop}", | ||||
|           "de": "Das ist ein {shop}", | ||||
|           "fr": "C'est une {shop}", | ||||
|           "nl": "Dit is een {shop}" | ||||
|           "nl": "Dit is een {shop}", | ||||
|           "ca": "Açò és una {shop}" | ||||
|         }, | ||||
|         "freeform": { | ||||
|           "key": "shop", | ||||
|  | @ -158,7 +161,8 @@ | |||
|         "en": "What paper formats does this shop offer?", | ||||
|         "de": "Welche Papierformate bietet das Geschäft an?", | ||||
|         "fr": "Quels formats de papier cette boutique propose-t-elle ?", | ||||
|         "nl": "Op welke papiergroottes kan deze zaak printen?" | ||||
|         "nl": "Op welke papiergroottes kan deze zaak printen?", | ||||
|         "ca": "Quins formats de paper ofereix aquesta botiga?" | ||||
|       }, | ||||
|       "multiAnswer": true, | ||||
|       "mappings": [ | ||||
|  | @ -168,7 +172,8 @@ | |||
|             "en": "This shop can print on papers of size A4", | ||||
|             "de": "Das Geschäft kann Unterlagen auf A4 Papier drucken", | ||||
|             "fr": "Cette boutique peut imprimer sur des papiers de format A4", | ||||
|             "nl": "Deze zaak kan printen op A4-formaat" | ||||
|             "nl": "Deze zaak kan printen op A4-formaat", | ||||
|             "ca": "Aquesta botiga pot imprimir en papers de mida A4" | ||||
|           }, | ||||
|           "ifnot": "service:print:A4=no" | ||||
|         }, | ||||
|  | @ -178,7 +183,8 @@ | |||
|             "en": "This shop can print on papers of size A3", | ||||
|             "de": "Das Geschäft kann Unterlagen auf A3 Papier drucken", | ||||
|             "fr": "Cette boutique peut imprimer sur des papiers de format A3", | ||||
|             "nl": "Deze zaak kan printen op A3-formaat" | ||||
|             "nl": "Deze zaak kan printen op A3-formaat", | ||||
|             "ca": "Aquesta botiga pot imprimir en papers de mida A3" | ||||
|           }, | ||||
|           "ifnot": "service:print:A3=no" | ||||
|         }, | ||||
|  | @ -188,7 +194,8 @@ | |||
|             "en": "This shop can print on papers of size A2", | ||||
|             "de": "Das Geschäft kann Unterlagen auf A2 Papier drucken", | ||||
|             "fr": "Cette boutique peut imprimer sur des papiers de format A2", | ||||
|             "nl": "Deze zaak kan printen op A2-formaat" | ||||
|             "nl": "Deze zaak kan printen op A2-formaat", | ||||
|             "ca": "Aquesta botiga pot imprimir en papers de mida A2" | ||||
|           }, | ||||
|           "ifnot": "service:print:A2=no" | ||||
|         }, | ||||
|  | @ -198,7 +205,8 @@ | |||
|             "en": "This shop can print on papers of size A1", | ||||
|             "de": "Das Geschäft kann Unterlagen auf A1 Papier drucken", | ||||
|             "fr": "Cette boutique peut imprimer sur des papiers de format A1", | ||||
|             "nl": "Deze zaak kan printen op A1-formaat" | ||||
|             "nl": "Deze zaak kan printen op A1-formaat", | ||||
|             "ca": "Aquesta botiga pot imprimir en papers de mida A1" | ||||
|           }, | ||||
|           "ifnot": "service:print:A1=no" | ||||
|         }, | ||||
|  | @ -208,7 +216,8 @@ | |||
|             "en": "This shop can print on papers of size A0", | ||||
|             "de": "Das Geschäft kann Unterlagen auf A0 Papier drucken", | ||||
|             "fr": "Cette boutique peut imprimer sur des papiers de format A0", | ||||
|             "nl": "Deze zaak kan printen op A0-formaat" | ||||
|             "nl": "Deze zaak kan printen op A0-formaat", | ||||
|             "ca": "Aquesta botiga pot imprimir en papers de mida A0" | ||||
|           }, | ||||
|           "ifnot": "service:print:A0=no" | ||||
|         } | ||||
|  | @ -294,7 +303,8 @@ | |||
|         "nl": "een winkel", | ||||
|         "de": "ein Geschäft", | ||||
|         "eo": "Butiko", | ||||
|         "es": "una tienda" | ||||
|         "es": "una tienda", | ||||
|         "ca": "una botiga" | ||||
|       }, | ||||
|       "description": { | ||||
|         "en": "Add a new shop", | ||||
|  | @ -304,7 +314,8 @@ | |||
|         "nl": "Voeg een nieuwe winkel toe", | ||||
|         "de": "Ein neues Geschäft hinzufügen", | ||||
|         "eo": "Enmeti novan butikon", | ||||
|         "es": "Añadir una nueva tienda" | ||||
|         "es": "Añadir una nueva tienda", | ||||
|         "ca": "Afegir una botiga nova" | ||||
|       } | ||||
|     } | ||||
|   ], | ||||
|  | @ -322,7 +333,8 @@ | |||
|           "en": "{title()} has closed down permanently", | ||||
|           "de": "{title()} wurde dauerhaft geschlossen", | ||||
|           "es": "{title()} ha cerrado permanentemente", | ||||
|           "fr": "{title()} a fermé définitivement" | ||||
|           "fr": "{title()} a fermé définitivement", | ||||
|           "ca": "{title()} ha tancat permanentment" | ||||
|         }, | ||||
|         "changesetMessage": "shop_closed" | ||||
|       } | ||||
|  | @ -410,7 +422,8 @@ | |||
|             "de": "Nur Geschäfte, die {search} verkaufen", | ||||
|             "nl": "Toon enkel winkels die {search} verkopen", | ||||
|             "es": "Solo mostrar tiendas que vendan {search}", | ||||
|             "fr": "N'afficher que les magasins vendant {search}" | ||||
|             "fr": "N'afficher que les magasins vendant {search}", | ||||
|             "ca": "Sols mostrar botigues que venen {search}" | ||||
|           } | ||||
|         } | ||||
|       ] | ||||
|  |  | |||
|  | @ -3,7 +3,8 @@ | |||
|   "name": { | ||||
|     "en": "Shower", | ||||
|     "de": "Dusche", | ||||
|     "fr": "Douche" | ||||
|     "fr": "Douche", | ||||
|     "ca": "Dutxa" | ||||
|   }, | ||||
|   "minzoom": 12, | ||||
|   "source": { | ||||
|  | @ -22,12 +23,14 @@ | |||
|       "title": { | ||||
|         "en": "a shower", | ||||
|         "de": "eine Dusche", | ||||
|         "fr": "une douche" | ||||
|         "fr": "une douche", | ||||
|         "ca": "una dutxa" | ||||
|       }, | ||||
|       "description": { | ||||
|         "en": "A (public) shower", | ||||
|         "de": "Eine (öffentliche) Dusche", | ||||
|         "fr": "Une douche (publique)" | ||||
|         "fr": "Une douche (publique)", | ||||
|         "ca": "Una dutxa (pública)" | ||||
|       }, | ||||
|       "tags": [ | ||||
|         "amenity=shower" | ||||
|  | @ -42,7 +45,8 @@ | |||
|       "question": { | ||||
|         "en": "Who can use this shower?", | ||||
|         "de": "Wer darf diese Dusche nutzen?", | ||||
|         "fr": "Qui peut utiliser cette douche ?" | ||||
|         "fr": "Qui peut utiliser cette douche ?", | ||||
|         "ca": "Qui pot utilitzar aquesta dutxa?" | ||||
|       }, | ||||
|       "mappings": [ | ||||
|         { | ||||
|  | @ -50,7 +54,8 @@ | |||
|           "then": { | ||||
|             "en": "Anyone can use this shower", | ||||
|             "de": "Jeder darf diese Dusche nutzen", | ||||
|             "fr": "Tout le monde peut utiliser cette douche" | ||||
|             "fr": "Tout le monde peut utiliser cette douche", | ||||
|             "ca": "Qualsevol pot utilitzar aquesta dutxa" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|  | @ -58,7 +63,8 @@ | |||
|           "then": { | ||||
|             "en": "Only customers can use this shower", | ||||
|             "de": "Nur Kunden dürfen diese Dusche nutzen", | ||||
|             "fr": "Seuls les clients peuvent utiliser cette douche" | ||||
|             "fr": "Seuls les clients peuvent utiliser cette douche", | ||||
|             "ca": "Només els clients poden utilitzar aquesta dutxa" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|  | @ -66,7 +72,8 @@ | |||
|           "then": { | ||||
|             "en": "Accesible, but one has to ask for a key", | ||||
|             "de": "Zugänglich, aber man muss nach einem Schlüssel fragen", | ||||
|             "fr": "Accessible, mais il faut demander une clé" | ||||
|             "fr": "Accessible, mais il faut demander une clé", | ||||
|             "ca": "Accessible, però s'ha de demanar una clau" | ||||
|           } | ||||
|         } | ||||
|       ] | ||||
|  | @ -109,7 +116,8 @@ | |||
|       "question": { | ||||
|         "en": "How much does it cost to use this shower?", | ||||
|         "de": "Wie viel kostet es, diese Dusche zu nutzen?", | ||||
|         "fr": "Quel est le prix pour utiliser cette douche ?" | ||||
|         "fr": "Quel est le prix pour utiliser cette douche ?", | ||||
|         "ca": "Quant costa utilitzar aquesta dutxa?" | ||||
|       }, | ||||
|       "freeform": { | ||||
|         "key": "charge", | ||||
|  | @ -117,7 +125,8 @@ | |||
|         "placeholder": { | ||||
|           "en": "e.g. 1.50 EUR", | ||||
|           "de": "z.B. 1,50 EUR", | ||||
|           "fr": "par ex. 1,50 EUR" | ||||
|           "fr": "par ex. 1,50 EUR", | ||||
|           "ca": "p. e. 1.50 eur" | ||||
|         } | ||||
|       }, | ||||
|       "render": { | ||||
|  | @ -187,7 +196,8 @@ | |||
|           "question": { | ||||
|             "en": "Hot water available", | ||||
|             "de": "Warmwasser verfügbar", | ||||
|             "fr": "Eau chaude disponible" | ||||
|             "fr": "Eau chaude disponible", | ||||
|             "ca": "Aigua calenta disponible" | ||||
|           }, | ||||
|           "osmTags": { | ||||
|             "or": [ | ||||
|  | @ -231,6 +241,7 @@ | |||
|   "description": { | ||||
|     "en": "A layer showing (public) showers", | ||||
|     "de": "Eine Ebene mit (öffentlichen) Duschen", | ||||
|     "fr": "Une couche affichant les douches (publiques)" | ||||
|     "fr": "Une couche affichant les douches (publiques)", | ||||
|     "ca": "Una capa que mostra dutxes (públiques)" | ||||
|   } | ||||
| } | ||||
|  | @ -162,7 +162,8 @@ | |||
|             "fr": "La surface est <b>non pavée</b>", | ||||
|             "it": "La superficie è <b>non pavimentata</b>", | ||||
|             "de": "Die Oberfläche ist <b>ohne festen Belag</b>", | ||||
|             "es": "La superficie está <b>sin pavimentar</b>" | ||||
|             "es": "La superficie está <b>sin pavimentar</b>", | ||||
|             "ca": "La superfície és <b>sense asfaltar</b>" | ||||
|           }, | ||||
|           "hideInAnswer": true | ||||
|         }, | ||||
|  | @ -289,6 +290,7 @@ | |||
|   "description": { | ||||
|     "en": "All carfree roads", | ||||
|     "nl": "Alle verkeersvrije wegen", | ||||
|     "de": "Alle autofreien Straßen" | ||||
|     "de": "Alle autofreien Straßen", | ||||
|     "ca": "Totes les carreteres sense cotxe" | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -4,20 +4,23 @@ | |||
|     "en": "Speed Camera", | ||||
|     "de": "Blitzer", | ||||
|     "nl": "Flitspaal", | ||||
|     "es": "Cámara de velocidad" | ||||
|     "es": "Cámara de velocidad", | ||||
|     "ca": "Càmera de velocitat" | ||||
|   }, | ||||
|   "description": { | ||||
|     "en": "Layer showing speed cameras", | ||||
|     "de": "Ebene mit Blitzern", | ||||
|     "nl": "Laag met flitspalen", | ||||
|     "es": "Capa con cámaras de velocidad" | ||||
|     "es": "Capa con cámaras de velocidad", | ||||
|     "ca": "Capa que mostra càmeres de velocitat" | ||||
|   }, | ||||
|   "title": { | ||||
|     "render": { | ||||
|       "en": "Speed Camera", | ||||
|       "de": "Blitzer", | ||||
|       "nl": "Flitspaal", | ||||
|       "es": "Cámara de velocidad" | ||||
|       "es": "Cámara de velocidad", | ||||
|       "ca": "Càmera de velocitat" | ||||
|     } | ||||
|   }, | ||||
|   "minzoom": 12, | ||||
|  | @ -32,7 +35,8 @@ | |||
|         "de": "Wie hoch ist die zulässige Höchstgeschwindigkeit an diesem Blitzer?", | ||||
|         "nl": "Wat is de maximum toegestane snelheid bij deze flitspaal?", | ||||
|         "es": "¿Cuál es la velocidad máxima permitida en este radar?", | ||||
|         "fr": "Quelle est la vitesse maximale autorisée au niveau de ce radar ?" | ||||
|         "fr": "Quelle est la vitesse maximale autorisée au niveau de ce radar ?", | ||||
|         "ca": "Quina és la velocitat màxima permesa en aquest radar?" | ||||
|       }, | ||||
|       "freeform": { | ||||
|         "key": "maxspeed", | ||||
|  | @ -42,7 +46,8 @@ | |||
|           "de": "Zulässige Höchstgeschwindigkeit", | ||||
|           "nl": "Maximum toegestane snelheid", | ||||
|           "es": "Velocidad máxima permitida", | ||||
|           "fr": "Vitesse maximale autorisée" | ||||
|           "fr": "Vitesse maximale autorisée", | ||||
|           "ca": "Velocitat màxima permesa" | ||||
|         } | ||||
|       }, | ||||
|       "render": { | ||||
|  | @ -50,7 +55,8 @@ | |||
|         "de": "Die zulässige Höchstgeschwindigkeit beträgt {canonical(maxspeed)}", | ||||
|         "nl": "De maximum toegestane snelheid is {canonical(maxspeed)}", | ||||
|         "es": "La velocidad máxima permitida es {canonical(maxspeed)}", | ||||
|         "fr": "La vitesse maximale autorisée est {canonical(maxspeed)}" | ||||
|         "fr": "La vitesse maximale autorisée est {canonical(maxspeed)}", | ||||
|         "ca": "La velocitat màxima permesa és {canonical(maxspeed)}" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|  | @ -73,7 +79,8 @@ | |||
|         "en": "a speed camera", | ||||
|         "de": "einen Blitzer", | ||||
|         "nl": "een flitspaal", | ||||
|         "es": "una cámara de velocidad" | ||||
|         "es": "una cámara de velocidad", | ||||
|         "ca": "una càmera de velocitat" | ||||
|       }, | ||||
|       "snapToLayer": [ | ||||
|         "maxspeed" | ||||
|  |  | |||
|  | @ -3,12 +3,14 @@ | |||
|   "name": { | ||||
|     "en": "Speed Display", | ||||
|     "de": "Geschwindigkeitsanzeigen", | ||||
|     "nl": "Snelheidsdisplay" | ||||
|     "nl": "Snelheidsdisplay", | ||||
|     "ca": "Radar pedagògic" | ||||
|   }, | ||||
|   "description": { | ||||
|     "en": "Layer showing speed displays that alert drivers of their speed.", | ||||
|     "de": "Ebene mit Geschwindigkeitsanzeigen, die Fahrer auf ihre Geschwindigkeit hinweisen.", | ||||
|     "nl": "Laag met snelheidsdisplays om bestuurders op hun snelheid te wijzen." | ||||
|     "nl": "Laag met snelheidsdisplays om bestuurders op hun snelheid te wijzen.", | ||||
|     "ca": "Capa que mostra radars pedagògics que alerten als conductors de la seva velocitat." | ||||
|   }, | ||||
|   "title": { | ||||
|     "render": { | ||||
|  | @ -62,13 +64,15 @@ | |||
|         "placeholder": { | ||||
|           "en": "Text on speed display (e.g. 'Your speed')", | ||||
|           "de": "Text auf der Geschwindigkeitsanzeige (z. B. \"Ihre Geschwindigkeit\")", | ||||
|           "nl": "Tekst op snelheidsdisplay (b.v. 'Uw snelheid')" | ||||
|           "nl": "Tekst op snelheidsdisplay (b.v. 'Uw snelheid')", | ||||
|           "ca": "Text al radar pedagògic (p. e. 'La seva velocitat')" | ||||
|         } | ||||
|       }, | ||||
|       "render": { | ||||
|         "en": "The text on this speed display is {inscription}", | ||||
|         "de": "Der Text auf dieser Geschwindigkeitsanzeige ist {inscription}", | ||||
|         "nl": "De tekst op dit snelheidsdisplay is {inscription}" | ||||
|         "nl": "De tekst op dit snelheidsdisplay is {inscription}", | ||||
|         "ca": "El text a aquest radar pedagogic és {inscription}" | ||||
|       } | ||||
|     } | ||||
|   ], | ||||
|  | @ -77,7 +81,8 @@ | |||
|       "title": { | ||||
|         "en": "a speed display", | ||||
|         "de": "eine Geschwindigkeitsanzeige", | ||||
|         "nl": "een snelheidsdisplay" | ||||
|         "nl": "een snelheidsdisplay", | ||||
|         "ca": "un radar pedagògic" | ||||
|       }, | ||||
|       "tags": [ | ||||
|         "highway=speed_display" | ||||
|  |  | |||
|  | @ -565,7 +565,8 @@ | |||
|         "ru": "Спортивная площадка", | ||||
|         "it": "una campo sportivo", | ||||
|         "de": "einen Sportplatz", | ||||
|         "es": "una pista de deportes" | ||||
|         "es": "una pista de deportes", | ||||
|         "ca": "una pista d'esports" | ||||
|       }, | ||||
|       "tags": [ | ||||
|         "leisure=pitch", | ||||
|  |  | |||
|  | @ -235,7 +235,7 @@ | |||
|           }, | ||||
|           "then": { | ||||
|             "en": "A public area is surveilled, such as a street, a bridge, a square, a park, a train station, a public corridor or tunnel, …", | ||||
|             "nl": "Bewaking van de publieke ruilmte, dus een straat, een brug, een park, een plein, een stationsgebouw, een publiek toegankelijke gang of tunnel…", | ||||
|             "nl": "Bewaking van de publieke ruimte, dus een straat, een brug, een park, een plein, een stationsgebouw, een publiek toegankelijke gang of tunnel…", | ||||
|             "fr": "Une zone publique est surveillée, telle qu'une rue, un pont, une place, un parc, une gare, un couloir, un tunnel public…", | ||||
|             "it": "Sorveglia un'area pubblica, come una strada, un ponte, una piazza, un parco, una stazione, un passaggio o un sottopasso pubblico, ...", | ||||
|             "de": "Die Kamera überwacht einen öffentlichen Bereich, z. B. Straßen, Brücken, Plätze, Parks, Bahnhöfe, öffentliche Gänge oder Tunnel, …", | ||||
|  |  | |||
|  | @ -11,7 +11,8 @@ | |||
|       "en": "Settings", | ||||
|       "nl": "Instellingen", | ||||
|       "de": "Einstellungen", | ||||
|       "fr": "Paramètres" | ||||
|       "fr": "Paramètres", | ||||
|       "da": "Indstillinger" | ||||
|     } | ||||
|   }, | ||||
|   "source": "special", | ||||
|  | @ -129,7 +130,8 @@ | |||
|             "cs": "Pořízené fotografie budou licencovány pod <b>CC0</b> a přidány do veřejné domény. To znamená, že kdokoli může vaše snímky použít k jakémukoli účelu.", | ||||
|             "ca": "Les imatges que feu tindran llicència <b>CC0</b> i s'afegiran al domini públic. Això vol dir que tothom pot utilitzar les vostres imatges per a qualsevol propòsit.", | ||||
|             "es": "Las fotografías que tome tendrán una licencia con <b>CC0</b> y se agregarán al dominio público. Esto significa que todos pueden usar sus imágenes para cualquier propósito.", | ||||
|             "pt": "As fotos que você tirar serão licenciadas com <b>CC0</b> e adicionadas ao domínio público. Isso significa que todos podem usar suas fotos para qualquer finalidade." | ||||
|             "pt": "As fotos que você tirar serão licenciadas com <b>CC0</b> e adicionadas ao domínio público. Isso significa que todos podem usar suas fotos para qualquer finalidade.", | ||||
|             "da": "Billeder, som du har taget, vil blive udgivet under <b>CC0</b>-licensen og lagt ud i fælleseje. Det betyder, at alle kan bruge dine billeder til ethvert formål." | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|  | @ -245,7 +247,8 @@ | |||
|             "en": "Allow to rotate the map", | ||||
|             "de": "Drehen der Karte zulassen", | ||||
|             "ca": "Permet girar el mapa", | ||||
|             "fr": "Autoriser la rotation de la carte" | ||||
|             "fr": "Autoriser la rotation de la carte", | ||||
|             "da": "Tillad rotation af kortet" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|  | @ -261,8 +264,21 @@ | |||
|     { | ||||
|       "id": "mangrove-keys", | ||||
|       "render": { | ||||
|         "en": "<a href='data:application/json,{mangroveidentity}' download='mangrove_private_key_{_name}'>Download the private key for your Mangrove Account</a> <p>Anyone possessing this file can make reviews with your identity</p>", | ||||
|         "de": "<a href='data:application/json,{mangroveidentity}' download='mangrove_private_key_{_name}'>Laden Sie den privaten Schlüssel für Ihr Mangrove-Konto herunter</a> <p>Jeder, der diese Datei besitzt, kann mit Ihrer Identität Rezensionen vornehmen</p>" | ||||
|         "special": { | ||||
|           "type": "link", | ||||
|           "href": "data:application/json,{mangroveidentity}", | ||||
|           "download": "mangrove_private_key_{_name}", | ||||
|           "text": { | ||||
|             "en": "Download the private key for your Mangrove Account", | ||||
|             "de": "Laden Sie den privaten Schlüssel für Ihr Mangrove-Konto herunter", | ||||
|             "da": "Hent den private nøgle til din Mangrove-konto" | ||||
|           } | ||||
|         }, | ||||
|         "after": { | ||||
|           "en": "Anyone possessing this file can make reviews with your identity", | ||||
|           "de": "Jeder, der diese Datei besitzt, kann mit Ihrer Identität Rezensionen vornehmen", | ||||
|           "da": "Enhver, der har denne fil, kan lave ændringer med din identitet" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|  | @ -305,7 +321,8 @@ | |||
|             "de": "Schaltfläche anzeigen zum schnellen Öffnen von Übersetzungen beim Verwenden von MapComplete auf einem großen Bildschirm", | ||||
|             "fr": "Afficher un bouton pour ouvrir rapidement les traductions lorsque vous utilisez MapComplete sur un grand écran", | ||||
|             "ca": "Mostra un botó per a obrir ràpidament les traduccions quan utilitzes MapComplet en una pantalla gran", | ||||
|             "pt": "Mostrar um botão para abrir traduções rapidamente ao usar o MapComplete em uma tela grande" | ||||
|             "pt": "Mostrar um botão para abrir traduções rapidamente ao usar o MapComplete em uma tela grande", | ||||
|             "da": "Vis en knap for hurtigt at åbne oversættelser, når du bruger MapComplete på en stor skærm" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|  | @ -447,7 +464,8 @@ | |||
|             "ca": "Has fet {_csCount} en diferents ocasions! Això és sorprenent!", | ||||
|             "fr": "Vous avez fait {_csCount} modifications ! C'est génial !", | ||||
|             "pt": "Você fez alterações em {_csCount} ocasiões diferentes! Isso é incrível!", | ||||
|             "nl": "Je hebt {_csCount} verschillende keren bijgedragen! Dat is indrukwekkend!" | ||||
|             "nl": "Je hebt {_csCount} verschillende keren bijgedragen! Dat is indrukwekkend!", | ||||
|             "da": "Du har lavet ændringer ved {_csCount} forskellige begivenheder! Det er fantastisk!" | ||||
|           }, | ||||
|           "icon": "party" | ||||
|         } | ||||
|  | @ -522,7 +540,8 @@ | |||
|             "en": "Don't show debug info", | ||||
|             "de": "Keine Debug-Informationen anzeigen", | ||||
|             "cs": "Nezobrazovat informace o ladění", | ||||
|             "pt": "Não mostrar informações de depuração" | ||||
|             "pt": "Não mostrar informações de depuração", | ||||
|             "da": "Vis ikke debug-informationer" | ||||
|           }, | ||||
|           "hideInAnswer": true | ||||
|         } | ||||
|  |  | |||
|  | @ -33,7 +33,8 @@ | |||
|       "id": "turbin angin", | ||||
|       "hu": "szélerőmű", | ||||
|       "da": "vindmølle", | ||||
|       "pl": "turbina wiatrowa" | ||||
|       "pl": "turbina wiatrowa", | ||||
|       "ca": "Turbina eòlica" | ||||
|     }, | ||||
|     "mappings": [ | ||||
|       { | ||||
|  |  | |||
|  | @ -1842,13 +1842,13 @@ | |||
|                         "question": "Té un connector <div style='display: inline-block'><b><b>Tipus 2</b> (mennekes)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div>" | ||||
|                     }, | ||||
|                     "9": { | ||||
|                         "question": "Té un connector <div style='display: inline-block'><b><b> Tipus 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>" | ||||
|                         "question": "Té un connector <div style='display: inline-block'><b><b> CCS Tipus 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>" | ||||
|                     }, | ||||
|                     "10": { | ||||
|                         "question": "Té un connector <div style='display: inline-block'><b><b>Tipus 2 amb cable</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>" | ||||
|                     }, | ||||
|                     "11": { | ||||
|                         "question": "Té un connector <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (un tipus2_css de marca)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>" | ||||
|                         "question": "Té un connector <div style='display: inline-block'><b><b>CCS Tesla Supercharger </b> (un tipus2_css de marca)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>" | ||||
|                     }, | ||||
|                     "12": { | ||||
|                         "question": "Té un connector <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>" | ||||
|  | @ -2141,6 +2141,17 @@ | |||
|                 "question": "Quin corrent fan els endolls amb <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> offer?", | ||||
|                 "render": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destinació)</b></b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> sortida com a màxim {socket:tesla_destination:current}A" | ||||
|             }, | ||||
|             "current-12": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "<b>Supercarregador Tesla (destinació)</b> (Un Tipus 2 amb un cable de marca Tesla) surt com a màxim a 16 A" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "<b>Supercarregador Tesla (destinació)</b> (Un Tipus 2 amb un cable de marca Tesla) surt com a màxim a 32 A" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "Quin corrent donen els endolls amb <div style='display: inline-block'><b><b>Tesla Supercharger (destinació)</b> (un tipus 2 amb cable amb la marca Tesla)</b> <img style ='amplada: 1rem; mostrar: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> oferta?" | ||||
|             }, | ||||
|             "current-13": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|  | @ -2161,6 +2172,16 @@ | |||
|                 }, | ||||
|                 "question": "Quin corrent ofereixen els endolls amb <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div>?" | ||||
|             }, | ||||
|             "current-7": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "<b>Tipus 2</b> (menneks) surt com a màxim a 16 A" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "<b>Tipus 2</b> (menneks) surt com a màxim a 32 A" | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             "current-8": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|  | @ -3957,7 +3978,7 @@ | |||
|             }, | ||||
|             "1": { | ||||
|                 "description": "Un negoci de menjar centrat en el servei ràpid sols en mostrador i menjar per a endur", | ||||
|                 "title": "un de menjar ràpid" | ||||
|                 "title": "un negoci de menjar ràpid" | ||||
|             }, | ||||
|             "2": { | ||||
|                 "description": "Un local de menjar ràpid centrat en les patates fregides", | ||||
|  | @ -5586,6 +5607,35 @@ | |||
|         } | ||||
|     }, | ||||
|     "public_bookcase": { | ||||
|         "filter": { | ||||
|             "0": { | ||||
|                 "options": { | ||||
|                     "0": { | ||||
|                         "question": "Té llibres infantils" | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             "1": { | ||||
|                 "options": { | ||||
|                     "0": { | ||||
|                         "question": "Té llibres per a adults" | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             "2": { | ||||
|                 "options": { | ||||
|                     "0": { | ||||
|                         "question": "Interior o exterior" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "question": "Situat a l'interior" | ||||
|                     }, | ||||
|                     "2": { | ||||
|                         "question": "Situat a l'exterior" | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "name": "Bústies per llibres", | ||||
|         "presets": { | ||||
|             "0": { | ||||
|  | @ -5593,28 +5643,77 @@ | |||
|             } | ||||
|         }, | ||||
|         "tagRenderings": { | ||||
|             "bookcase-booktypes": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Majoritàriament llibres infantils" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "Majoritàriament llibres per a adults" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "Quins tipus de llibres pots trobar a aquesta prestatgeria pública?" | ||||
|             }, | ||||
|             "bookcase-is-accessible": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Accessible al públic" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "Només accessible per als clients" | ||||
|                     } | ||||
|                 } | ||||
|                 }, | ||||
|                 "question": "Aquesta prestatgeria pública és de lliure accés?" | ||||
|             }, | ||||
|             "bookcase-is-indoors": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Aquesta prestatgeria es troba a l'interior" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "Aquesta prestatgeria es troba a l'exterior" | ||||
|                     }, | ||||
|                     "2": { | ||||
|                         "then": "La prestatgeria està ubicada a l'exterior" | ||||
|                     } | ||||
|                 } | ||||
|                 }, | ||||
|                 "question": "Aquesta prestatgeria es troba a l'exterior?" | ||||
|             }, | ||||
|             "public_bookcase-brand": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Part de la xarxa 'Little Free Library'" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "Aquesta prestatgeria pública no és part d'una xarxa més gran" | ||||
|                     } | ||||
|                 } | ||||
|                 }, | ||||
|                 "question": "Aquesta prestatgeria pública forma part d'una xarxa més gran?", | ||||
|                 "render": "Aquesta prestatgeria pública forma part de {brand}" | ||||
|             }, | ||||
|             "public_bookcase-capacity": { | ||||
|                 "question": "Quants llibres caben en aquesta prestatgeria pública?", | ||||
|                 "render": "Caben {capacity} llibres en aquesta prestatgeria" | ||||
|             }, | ||||
|             "public_bookcase-name": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Aquesta prestatgeria no té un nom" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "Com es diu aquesta prestatgeria pública?", | ||||
|                 "render": "El nom d'aquesta prestatgeria és {name}" | ||||
|             }, | ||||
|             "public_bookcase-operator": { | ||||
|                 "question": "Qui gestiona aquesta prestatgeria pública?", | ||||
|                 "render": "Gestionant per {operator}" | ||||
|             }, | ||||
|             "public_bookcase-ref": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Aquesta prestatgeria no forma part d'una xarxa més gran" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "Quin és el número de referència d'aquesta prestatgeria pública?" | ||||
|             }, | ||||
|             "public_bookcase-start_date": { | ||||
|  | @ -5622,7 +5721,12 @@ | |||
|                 "render": "Instal·lat el dia {start_date}" | ||||
|             }, | ||||
|             "public_bookcase-website": { | ||||
|                 "question": "Hi ha algun lloc web amb més informació sobre aquesta prestatgeria pública?" | ||||
|                 "question": "Hi ha algun lloc web amb més informació sobre aquesta prestatgeria pública?", | ||||
|                 "render": { | ||||
|                     "special": { | ||||
|                         "text": "Més informació al web" | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "title": { | ||||
|  | @ -5636,6 +5740,15 @@ | |||
|     }, | ||||
|     "questions": { | ||||
|         "tagRenderings": { | ||||
|             "check_date": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Aquest objecte es va comprovar per última vegada avui" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "Quan es va comprovar per última vegada aquest objecte?", | ||||
|                 "render": "Aquest objecte es va comprovar per darrera vegada el <b>{check_date}</b>" | ||||
|             }, | ||||
|             "denominations-coins": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|  | @ -5661,6 +5774,15 @@ | |||
|                     }, | ||||
|                     "7": { | ||||
|                         "then": "S'accepten monedes de 2 euros" | ||||
|                     }, | ||||
|                     "8": { | ||||
|                         "then": "S'accepten monedes de 5 cèntims" | ||||
|                     }, | ||||
|                     "9": { | ||||
|                         "then": "S'accepten monedes de 10 cèntims" | ||||
|                     }, | ||||
|                     "10": { | ||||
|                         "then": "S'accepten monedes de 20 cèntims" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "Quines monedes es poden utilitzar per a pagar aquí?" | ||||
|  | @ -5980,7 +6102,8 @@ | |||
|         "name": "Pasos de vianants pintats amb l'arc de Sant Martí", | ||||
|         "presets": { | ||||
|             "0": { | ||||
|                 "description": "Pas de vianants" | ||||
|                 "description": "Pas de vianants", | ||||
|                 "title": "un creuament" | ||||
|             } | ||||
|         }, | ||||
|         "tagRenderings": { | ||||
|  | @ -5998,6 +6121,9 @@ | |||
|                 }, | ||||
|                 "question": "Aquest pas de vianants està pintat amb l'arc de Sant Martí?" | ||||
|             } | ||||
|         }, | ||||
|         "title": { | ||||
|             "render": "Creuament" | ||||
|         } | ||||
|     }, | ||||
|     "reception_desk": { | ||||
|  | @ -6302,6 +6428,12 @@ | |||
|                     "0": { | ||||
|                         "then": "Aquesta és una escola amb una secció d’educació infantil on els més petits reben una educació que prepara la lectura i l’escriptura." | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "Aquesta és una escola on s'aprèn competències primàries com ara l'alfabetització bàsica i les habilitats numèriques. <div class='subtle'>Els alumnes solen matricular-se des dels 6 anys fins als 12 anys</div>" | ||||
|                     }, | ||||
|                     "2": { | ||||
|                         "then": "Aquesta és una escola secundària que ofereix tots els graus" | ||||
|                     }, | ||||
|                     "3": { | ||||
|                         "then": "Aquesta és una escola secundària que <i>no</i> ofereix tots els graus, però ofereix <b>primer i segon</b> grau" | ||||
|                     }, | ||||
|  | @ -6314,7 +6446,8 @@ | |||
|                     "6": { | ||||
|                         "then": "Aquesta escola ofereix educació post secundària (p.e. un sèptim o vuité any d'especialitzció)" | ||||
|                     } | ||||
|                 } | ||||
|                 }, | ||||
|                 "question": "Quin nivell d'educació s'imparteix en aquesta escola?" | ||||
|             }, | ||||
|             "gender": { | ||||
|                 "mappings": { | ||||
|  | @ -6349,6 +6482,9 @@ | |||
|             }, | ||||
|             "target-audience": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Aquesta és una escola on els estudiants estudien habilitats al nivell adequat per a la seva edat. <div>Hi ha poques o cap instal·lació especial per atendre els estudiants amb necessitats especials o les instal·lacions són ad-hoc</div>" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "Aquesta és una escola per a estudiants sense necessitats especials <div class='subtle'> Açò inclou alumnes que poden seguir les classes amb petites mesures</div>" | ||||
|                     }, | ||||
|  | @ -6377,18 +6513,77 @@ | |||
|                 "question": "Aquesta escola es dirigeix a estudiants amb necessitats especials? Quines instal·lacions estructurals té aquesta escola?", | ||||
|                 "render": "Aquesta escola té instal·lacions per a estudiants amb {school:for}" | ||||
|             } | ||||
|         }, | ||||
|         "title": { | ||||
|             "render": "Escola <i>{name}</i>" | ||||
|         } | ||||
|     }, | ||||
|     "selected_element": { | ||||
|         "description": "Ressalta l'element seleccionat actualment. Anul·leu aquesta capa per tenir diferents colors" | ||||
|     }, | ||||
|     "shelter": { | ||||
|         "name": "Refugi" | ||||
|         "name": "Refugi", | ||||
|         "tagRenderings": { | ||||
|             "shelter-type": { | ||||
|                 "question": "Quin tipus de refugi és aquest?" | ||||
|             } | ||||
|         }, | ||||
|         "title": { | ||||
|             "render": "Refugi" | ||||
|         } | ||||
|     }, | ||||
|     "shops": { | ||||
|         "deletion": { | ||||
|             "extraDeleteReasons": { | ||||
|                 "0": { | ||||
|                     "explanation": "{title()} ha tancat permanentment" | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "description": "Una botiga", | ||||
|         "filter": { | ||||
|             "1": { | ||||
|                 "options": { | ||||
|                     "0": { | ||||
|                         "question": "Sols mostrar botigues que venen {search}" | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "name": "Botiga", | ||||
|         "presets": { | ||||
|             "0": { | ||||
|                 "description": "Afegir una botiga nova", | ||||
|                 "title": "una botiga" | ||||
|             } | ||||
|         }, | ||||
|         "tagRenderings": { | ||||
|             "copyshop-print-sizes": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Aquesta botiga pot imprimir en papers de mida A4" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "Aquesta botiga pot imprimir en papers de mida A3" | ||||
|                     }, | ||||
|                     "2": { | ||||
|                         "then": "Aquesta botiga pot imprimir en papers de mida A2" | ||||
|                     }, | ||||
|                     "3": { | ||||
|                         "then": "Aquesta botiga pot imprimir en papers de mida A1" | ||||
|                     }, | ||||
|                     "4": { | ||||
|                         "then": "Aquesta botiga pot imprimir en papers de mida A0" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "Quins formats de paper ofereix aquesta botiga?" | ||||
|             }, | ||||
|             "id_presets.shop_types": { | ||||
|                 "override": { | ||||
|                     "question": "Quin tipus de botiga és aquesta?", | ||||
|                     "render": "Açò és una {shop}" | ||||
|                 } | ||||
|             }, | ||||
|             "organic": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|  | @ -6404,6 +6599,7 @@ | |||
|                 "question": "Aquesta botiga ofereix productes orgànics?" | ||||
|             }, | ||||
|             "shops-name": { | ||||
|                 "question": "Quin és el nom d'aquesta botiga?", | ||||
|                 "render": "La botiga s'anomena <i>{name}</i>" | ||||
|             } | ||||
|         }, | ||||
|  | @ -6420,8 +6616,43 @@ | |||
|         } | ||||
|     }, | ||||
|     "shower": { | ||||
|         "description": "Una capa que mostra dutxes (públiques)", | ||||
|         "filter": { | ||||
|             "1": { | ||||
|                 "options": { | ||||
|                     "0": { | ||||
|                         "question": "Aigua calenta disponible" | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "name": "Dutxa", | ||||
|         "presets": { | ||||
|             "0": { | ||||
|                 "description": "Una dutxa (pública)", | ||||
|                 "title": "una dutxa" | ||||
|             } | ||||
|         }, | ||||
|         "tagRenderings": { | ||||
|             "access": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Qualsevol pot utilitzar aquesta dutxa" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "Només els clients poden utilitzar aquesta dutxa" | ||||
|                     }, | ||||
|                     "2": { | ||||
|                         "then": "Accessible, però s'ha de demanar una clau" | ||||
|                     } | ||||
|                 }, | ||||
|                 "question": "Qui pot utilitzar aquesta dutxa?" | ||||
|             }, | ||||
|             "charge": { | ||||
|                 "freeform": { | ||||
|                     "placeholder": "p. e. 1.50 eur" | ||||
|                 }, | ||||
|                 "question": "Quant costa utilitzar aquesta dutxa?", | ||||
|                 "render": "Costa {charge} utilitzar aquesta dutxa" | ||||
|             }, | ||||
|             "fee": { | ||||
|  | @ -6455,6 +6686,7 @@ | |||
|         } | ||||
|     }, | ||||
|     "slow_roads": { | ||||
|         "description": "Totes les carreteres sense cotxe", | ||||
|         "tagRenderings": { | ||||
|             "slow_roads-surface": { | ||||
|                 "mappings": { | ||||
|  | @ -6464,6 +6696,9 @@ | |||
|                     "1": { | ||||
|                         "then": "La superfície és <b>terra</b>" | ||||
|                     }, | ||||
|                     "2": { | ||||
|                         "then": "La superfície és <b>sense asfaltar</b>" | ||||
|                     }, | ||||
|                     "3": { | ||||
|                         "then": "La superfície és <b>sorra</b>" | ||||
|                     } | ||||
|  | @ -6472,6 +6707,25 @@ | |||
|         } | ||||
|     }, | ||||
|     "speed_camera": { | ||||
|         "description": "Capa que mostra càmeres de velocitat", | ||||
|         "name": "Càmera de velocitat", | ||||
|         "presets": { | ||||
|             "0": { | ||||
|                 "title": "una càmera de velocitat" | ||||
|             } | ||||
|         }, | ||||
|         "tagRenderings": { | ||||
|             "maxspeed": { | ||||
|                 "freeform": { | ||||
|                     "placeholder": "Velocitat màxima permesa" | ||||
|                 }, | ||||
|                 "question": "Quina és la velocitat màxima permesa en aquest radar?", | ||||
|                 "render": "La velocitat màxima permesa és {canonical(maxspeed)}" | ||||
|             } | ||||
|         }, | ||||
|         "title": { | ||||
|             "render": "Càmera de velocitat" | ||||
|         }, | ||||
|         "units": { | ||||
|             "0": { | ||||
|                 "applicableUnits": { | ||||
|  | @ -6488,9 +6742,20 @@ | |||
|         } | ||||
|     }, | ||||
|     "speed_display": { | ||||
|         "description": "Capa que mostra radars pedagògics que alerten als conductors de la seva velocitat.", | ||||
|         "name": "Radar pedagògic", | ||||
|         "presets": { | ||||
|             "0": { | ||||
|                 "title": "un radar pedagògic" | ||||
|             } | ||||
|         }, | ||||
|         "tagRenderings": { | ||||
|             "inscription": { | ||||
|                 "question": "Quin text es mostra al radar pedagògic?" | ||||
|                 "freeform": { | ||||
|                     "placeholder": "Text al radar pedagògic (p. e. 'La seva velocitat')" | ||||
|                 }, | ||||
|                 "question": "Quin text es mostra al radar pedagògic?", | ||||
|                 "render": "El text a aquest radar pedagogic és {inscription}" | ||||
|             }, | ||||
|             "maxspeed": { | ||||
|                 "render": "La velocitat màxima permesa a aquest radar pedagògic és {canonical(maxspeed)}" | ||||
|  | @ -6541,6 +6806,11 @@ | |||
|             } | ||||
|         }, | ||||
|         "name": "Camps d'esports", | ||||
|         "presets": { | ||||
|             "1": { | ||||
|                 "title": "una pista d'esports" | ||||
|             } | ||||
|         }, | ||||
|         "tagRenderings": { | ||||
|             "sport-pitch-access": { | ||||
|                 "mappings": { | ||||
|  | @ -7607,7 +7877,8 @@ | |||
|                 "0": { | ||||
|                     "then": "{name}" | ||||
|                 } | ||||
|             } | ||||
|             }, | ||||
|             "render": "Turbina eòlica" | ||||
|         }, | ||||
|         "units": { | ||||
|             "0": { | ||||
|  |  | |||
|  | @ -2951,6 +2951,42 @@ | |||
|     }, | ||||
|     "usersettings": { | ||||
|         "tagRenderings": { | ||||
|             "cscount-thanks": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Du har lavet ændringer ved {_csCount} forskellige begivenheder! Det er fantastisk!" | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             "fixate-north": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Tillad rotation af kortet" | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             "mangrove-keys": { | ||||
|                 "render": { | ||||
|                     "after": "Enhver, der har denne fil, kan lave ændringer med din identitet", | ||||
|                     "special": { | ||||
|                         "text": "Hent den private nøgle til din Mangrove-konto" | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             "picture-license": { | ||||
|                 "mappings": { | ||||
|                     "1": { | ||||
|                         "then": "Billeder, som du har taget, vil blive udgivet under <b>CC0</b>-licensen og lagt ud i fælleseje. Det betyder, at alle kan bruge dine billeder til ethvert formål." | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             "show_debug": { | ||||
|                 "mappings": { | ||||
|                     "2": { | ||||
|                         "then": "Vis ikke debug-informationer" | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             "translation-completeness": { | ||||
|                 "render": "Oversættelser for {_theme} i {_language} er på {_translation_percentage}%: {_translation_translated_count} strenge ud af {_translation_total} er oversat" | ||||
|             }, | ||||
|  | @ -2960,7 +2996,17 @@ | |||
|                         "then": "Klik på 'oversæt'-ikonet ved siden af en streng for at indtaste eller opdatere et stykke tekst. Du skal have en Weblate-konto for at kunne gøre dette. Opret en med dit OSM-brugernavn for automatisk at låse oversættelsestilstanden op." | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             "translation-mode": { | ||||
|                 "mappings": { | ||||
|                     "1": { | ||||
|                         "then": "Vis en knap for hurtigt at åbne oversættelser, når du bruger MapComplete på en stor skærm" | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "title": { | ||||
|             "render": "Indstillinger" | ||||
|         } | ||||
|     }, | ||||
|     "veterinary": { | ||||
|  |  | |||
|  | @ -9592,7 +9592,12 @@ | |||
|                 } | ||||
|             }, | ||||
|             "mangrove-keys": { | ||||
|                 "render": "<a href='data:application/json,{mangroveidentity}' download='mangrove_private_key_{_name}'>Laden Sie den privaten Schlüssel für Ihr Mangrove-Konto herunter</a> <p>Jeder, der diese Datei besitzt, kann mit Ihrer Identität Rezensionen vornehmen</p>" | ||||
|                 "render": { | ||||
|                     "after": "Jeder, der diese Datei besitzt, kann mit Ihrer Identität Rezensionen vornehmen", | ||||
|                     "special": { | ||||
|                         "text": "Laden Sie den privaten Schlüssel für Ihr Mangrove-Konto herunter" | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             "picture-license": { | ||||
|                 "mappings": { | ||||
|  |  | |||
|  | @ -9680,7 +9680,12 @@ | |||
|                 } | ||||
|             }, | ||||
|             "mangrove-keys": { | ||||
|                 "render": "<a href='data:application/json,{mangroveidentity}' download='mangrove_private_key_{_name}'>Download the private key for your Mangrove Account</a> <p>Anyone possessing this file can make reviews with your identity</p>" | ||||
|                 "render": { | ||||
|                     "after": "Anyone possessing this file can make reviews with your identity", | ||||
|                     "special": { | ||||
|                         "text": "Download the private key for your Mangrove Account" | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             "picture-license": { | ||||
|                 "mappings": { | ||||
|  |  | |||
|  | @ -4279,7 +4279,7 @@ | |||
|             }, | ||||
|             "wikipedia-etymology": { | ||||
|                 "question": "Wat is het Wikidata-item van hetgeen dit object is naar vernoemd?", | ||||
|                 "render": "<h3>Wikipedia artikel van de naamgever</h3>{wikipedia(name:etymology:wikidata):max-height:20rem}" | ||||
|                 "render": "<h3>Wikipedia-artikel van de naamgever</h3>{wikipedia(name:etymology:wikidata):max-height:20rem}" | ||||
|             }, | ||||
|             "zoeken op inventaris onroerend erfgoed": { | ||||
|                 "render": "<a href='https://inventaris.onroerenderfgoed.be/erfgoedobjecten?tekst={name}' target='_blank'>Zoeken op inventaris onroerend erfgoed</a>" | ||||
|  | @ -8135,7 +8135,7 @@ | |||
|             "Surveillance type: public, outdoor, indoor": { | ||||
|                 "mappings": { | ||||
|                     "0": { | ||||
|                         "then": "Bewaking van de publieke ruilmte, dus een straat, een brug, een park, een plein, een stationsgebouw, een publiek toegankelijke gang of tunnel…" | ||||
|                         "then": "Bewaking van de publieke ruimte, dus een straat, een brug, een park, een plein, een stationsgebouw, een publiek toegankelijke gang of tunnel…" | ||||
|                     }, | ||||
|                     "1": { | ||||
|                         "then": "Een buitenruimte met privaat karakter (zoals een privé-oprit, een parking, tankstation, …)" | ||||
|  |  | |||
|  | @ -132,6 +132,9 @@ export class TagUtils { | |||
| 
 | ||||
|     /** | ||||
|      * Given multiple tagsfilters which can be used as answer, will take the tags with the same keys together as set. | ||||
|      * | ||||
|      * @see MatchesMultiAnswer to do the reverse | ||||
|      * | ||||
|      * E.g: | ||||
|      * | ||||
|      * const tag = TagUtils.ParseUploadableTag({"and": [ | ||||
|  |  | |||
|  | @ -243,7 +243,10 @@ export default class TagRenderingConfig { | |||
|                 if (txt === "") { | ||||
|                     throw context + " Rendering for language " + ln + " is empty" | ||||
|                 } | ||||
|                 if (txt.indexOf("{" + this.freeform.key + "}") >= 0 || txt.indexOf("&LBRACE" + this.freeform.key + "&RBRACE") ) { | ||||
|                 if ( | ||||
|                     txt.indexOf("{" + this.freeform.key + "}") >= 0 || | ||||
|                     txt.indexOf("&LBRACE" + this.freeform.key + "&RBRACE") | ||||
|                 ) { | ||||
|                     continue | ||||
|                 } | ||||
|                 if (txt.indexOf("{" + this.freeform.key + ":") >= 0) { | ||||
|  | @ -645,6 +648,16 @@ export default class TagRenderingConfig { | |||
|     /** | ||||
|      * Given a value for the freeform key and an overview of the selected mappings, construct the correct tagsFilter to apply | ||||
|      * | ||||
|      * const config = new TagRenderingConfig({"id":"bookcase-booktypes","render":{"en":"This place mostly serves {books}" }, | ||||
|      * "question":{"en":"What kind of books can be found in this public bookcase?"}, | ||||
|      * "freeform":{"key":"books","addExtraTags":["fixme=Freeform tag `books` used, to be doublechecked"], | ||||
|      * "inline":true}, | ||||
|      * "multiAnswer":true, | ||||
|      * "mappings":[{"if":"books=children","then":"Mostly children books"}, | ||||
|      * {"if":"books=adults","then": "Mostly books for adults"}]} | ||||
|      * , "testcase") | ||||
|      * config.constructChangeSpecification(undefined, undefined, [false, true, false], {amenity: "public_bookcase"}) // => new And([new Tag("books","adults")])
 | ||||
|      * | ||||
|      * @param freeformValue The freeform value which will be applied as 'freeform.key'. Ignored if 'freeform.key' is not set | ||||
|      * | ||||
|      * @param singleSelectedMapping (Only used if multiAnswer == false): the single mapping to apply. Use (mappings.length) for the freeform | ||||
|  |  | |||
|  | @ -1,18 +1,22 @@ | |||
| import Translations from "../i18n/Translations" | ||||
| import BaseUIElement from "../BaseUIElement" | ||||
| import { Store } from "../../Logic/UIEventSource" | ||||
| import { Utils } from "../../Utils" | ||||
| 
 | ||||
| export default class Link extends BaseUIElement { | ||||
|     private readonly _href: string | Store<string> | ||||
|     private readonly _embeddedShow: BaseUIElement | ||||
|     private readonly _newTab: boolean | ||||
|     private readonly _download: string | ||||
| 
 | ||||
|     constructor( | ||||
|         embeddedShow: BaseUIElement | string, | ||||
|         href: string | Store<string>, | ||||
|         newTab: boolean = false | ||||
|         newTab: boolean = false, | ||||
|         download: string = undefined | ||||
|     ) { | ||||
|         super() | ||||
|         this._download = download | ||||
|         this._embeddedShow = Translations.W(embeddedShow) | ||||
|         this._href = href | ||||
|         this._newTab = newTab | ||||
|  | @ -58,6 +62,9 @@ export default class Link extends BaseUIElement { | |||
|         if (this._newTab) { | ||||
|             el.target = "_blank" | ||||
|         } | ||||
|         if (this._download) { | ||||
|             el.download = this._download | ||||
|         } | ||||
|         el.appendChild(embeddedShow) | ||||
|         return el | ||||
|     } | ||||
|  |  | |||
|  | @ -1,76 +1,114 @@ | |||
| <script lang="ts"> | ||||
|   import { Store, UIEventSource } from "../../../Logic/UIEventSource" | ||||
|   import type { SpecialVisualizationState } from "../../SpecialVisualization" | ||||
|   import Tr from "../../Base/Tr.svelte" | ||||
|   import type { Feature } from "geojson" | ||||
|   import type { Mapping } from "../../../Models/ThemeConfig/TagRenderingConfig" | ||||
|   import TagRenderingConfig from "../../../Models/ThemeConfig/TagRenderingConfig" | ||||
|   import { TagsFilter } from "../../../Logic/Tags/TagsFilter" | ||||
|   import FreeformInput from "./FreeformInput.svelte" | ||||
|   import Translations from "../../i18n/Translations.js" | ||||
|   import ChangeTagAction from "../../../Logic/Osm/Actions/ChangeTagAction" | ||||
|   import { createEventDispatcher, onDestroy } from "svelte" | ||||
|   import LayerConfig from "../../../Models/ThemeConfig/LayerConfig" | ||||
|   import SpecialTranslation from "./SpecialTranslation.svelte" | ||||
|   import TagHint from "../TagHint.svelte" | ||||
|   import LoginToggle from "../../Base/LoginToggle.svelte" | ||||
|   import SubtleButton from "../../Base/SubtleButton.svelte" | ||||
|   import Loading from "../../Base/Loading.svelte" | ||||
|   import TagRenderingMappingInput from "./TagRenderingMappingInput.svelte" | ||||
|   import { Translation } from "../../i18n/Translation" | ||||
|   import Constants from "../../../Models/Constants" | ||||
|   import { Unit } from "../../../Models/Unit" | ||||
|   import UserRelatedState from "../../../Logic/State/UserRelatedState" | ||||
|   import { twJoin } from "tailwind-merge" | ||||
|   import { UIEventSource } from "../../../Logic/UIEventSource"; | ||||
|   import type { SpecialVisualizationState } from "../../SpecialVisualization"; | ||||
|   import Tr from "../../Base/Tr.svelte"; | ||||
|   import type { Feature } from "geojson"; | ||||
|   import type { Mapping } from "../../../Models/ThemeConfig/TagRenderingConfig"; | ||||
|   import TagRenderingConfig from "../../../Models/ThemeConfig/TagRenderingConfig"; | ||||
|   import { TagsFilter } from "../../../Logic/Tags/TagsFilter"; | ||||
|   import FreeformInput from "./FreeformInput.svelte"; | ||||
|   import Translations from "../../i18n/Translations.js"; | ||||
|   import ChangeTagAction from "../../../Logic/Osm/Actions/ChangeTagAction"; | ||||
|   import { createEventDispatcher, onDestroy } from "svelte"; | ||||
|   import LayerConfig from "../../../Models/ThemeConfig/LayerConfig"; | ||||
|   import SpecialTranslation from "./SpecialTranslation.svelte"; | ||||
|   import TagHint from "../TagHint.svelte"; | ||||
|   import LoginToggle from "../../Base/LoginToggle.svelte"; | ||||
|   import SubtleButton from "../../Base/SubtleButton.svelte"; | ||||
|   import Loading from "../../Base/Loading.svelte"; | ||||
|   import TagRenderingMappingInput from "./TagRenderingMappingInput.svelte"; | ||||
|   import { Translation } from "../../i18n/Translation"; | ||||
|   import Constants from "../../../Models/Constants"; | ||||
|   import { Unit } from "../../../Models/Unit"; | ||||
|   import UserRelatedState from "../../../Logic/State/UserRelatedState"; | ||||
|   import { twJoin } from "tailwind-merge"; | ||||
|   import { TagUtils } from "../../../Logic/Tags/TagUtils"; | ||||
| 
 | ||||
|   export let config: TagRenderingConfig | ||||
|   export let tags: UIEventSource<Record<string, string>> | ||||
|   export let selectedElement: Feature | ||||
|   export let state: SpecialVisualizationState | ||||
|   export let layer: LayerConfig | ||||
|   export let config: TagRenderingConfig; | ||||
|   export let tags: UIEventSource<Record<string, string>>; | ||||
|   export let selectedElement: Feature; | ||||
|   export let state: SpecialVisualizationState; | ||||
|   export let layer: LayerConfig; | ||||
| 
 | ||||
|   let feedback: UIEventSource<Translation> = new UIEventSource<Translation>(undefined) | ||||
|   let feedback: UIEventSource<Translation> = new UIEventSource<Translation>(undefined); | ||||
| 
 | ||||
|   let unit: Unit = layer.units?.find((unit) => unit.appliesToKeys.has(config.freeform?.key)) | ||||
|   let unit: Unit = layer.units?.find((unit) => unit.appliesToKeys.has(config.freeform?.key)); | ||||
| 
 | ||||
|   // Will be bound if a freeform is available | ||||
|   let freeformInput = new UIEventSource<string>(tags?.[config.freeform?.key]) | ||||
|   let selectedMapping: number = undefined | ||||
|   let checkedMappings: boolean[] | ||||
|   $: { | ||||
|     let tgs = $tags | ||||
|     mappings = config.mappings?.filter((m) => { | ||||
|   let freeformInput = new UIEventSource<string>(tags?.[config.freeform?.key]); | ||||
|   let selectedMapping: number = undefined; | ||||
|   let checkedMappings: boolean[]; | ||||
| 
 | ||||
|   /** | ||||
|    * Prepares and fills the checkedMappings | ||||
|    */ | ||||
|   function initialize(tgs: Record<string, string>, confg: TagRenderingConfig) { | ||||
|     mappings = confg.mappings?.filter((m) => { | ||||
|       if (typeof m.hideInAnswer === "boolean") { | ||||
|         return !m.hideInAnswer | ||||
|         return !m.hideInAnswer; | ||||
|       } | ||||
|       return !m.hideInAnswer.matchesProperties(tgs) | ||||
|     }) | ||||
|       return !m.hideInAnswer.matchesProperties(tgs); | ||||
|     }); | ||||
|     // We received a new config -> reinit | ||||
|     unit = layer.units.find((unit) => unit.appliesToKeys.has(config.freeform?.key)) | ||||
|     unit = layer.units.find((unit) => unit.appliesToKeys.has(confg.freeform?.key)); | ||||
| 
 | ||||
|     if ( | ||||
|       config.mappings?.length > 0 && | ||||
|       (checkedMappings === undefined || checkedMappings?.length + 1 < config.mappings.length) | ||||
|       confg.mappings?.length > 0 && | ||||
|       (checkedMappings === undefined || checkedMappings?.length < confg.mappings.length + (confg.freeform ? 1 : 0)) | ||||
|     ) { | ||||
|       const seenFreeforms = []; | ||||
|       TagUtils.FlattenMultiAnswer() | ||||
|       checkedMappings = [ | ||||
|         ...config.mappings.map((_) => false), | ||||
|         false /*One element extra in case a freeform value is added*/, | ||||
|       ] | ||||
|         ...confg.mappings.map((mapping) => { | ||||
|           const matches = TagUtils.MatchesMultiAnswer(mapping.if, tgs)  | ||||
|           if (matches && confg.freeform) { | ||||
|             const newProps = TagUtils.changeAsProperties(mapping.if.asChange()); | ||||
|             seenFreeforms.push(newProps[confg.freeform.key]); | ||||
|           } | ||||
|           return matches; | ||||
|         }) | ||||
|       ]; | ||||
|        | ||||
|       if(tgs !== undefined && confg.freeform){ | ||||
|         const unseenFreeformValues = tgs[confg.freeform.key]?.split(";") ?? [] | ||||
|         for (const seenFreeform of seenFreeforms) { | ||||
|           if(!seenFreeform){ | ||||
|             continue | ||||
|           } | ||||
|           const index = unseenFreeformValues.indexOf(seenFreeform) | ||||
|           if(index < 0){ | ||||
|             continue | ||||
|           } | ||||
|           unseenFreeformValues.splice(index, 1) | ||||
|         } | ||||
|         // TODO this has _to much_ values | ||||
|         freeformInput.setData(unseenFreeformValues.join(";")) | ||||
|         checkedMappings.push(unseenFreeformValues.length > 0) | ||||
|       } | ||||
|        | ||||
|        | ||||
|     } | ||||
|     if (config.freeform?.key) { | ||||
|       if (!config.multiAnswer) { | ||||
|         // Somehow, setting multianswer freeform values is broken if this is not set | ||||
|         freeformInput.setData(tgs[config.freeform.key]) | ||||
|     console.log("Inited 'checkMappings' to", checkedMappings); | ||||
|     if (confg.freeform?.key) { | ||||
|       if (!confg.multiAnswer) { | ||||
|         // Somehow, setting multi-answer freeform values is broken if this is not set | ||||
|         freeformInput.setData(tgs[confg.freeform.key]); | ||||
|       } | ||||
|     } else { | ||||
|       freeformInput.setData(undefined) | ||||
|       freeformInput.setData(undefined); | ||||
|     } | ||||
|     feedback.setData(undefined) | ||||
|     feedback.setData(undefined); | ||||
|   } | ||||
|   export let selectedTags: TagsFilter = undefined | ||||
| 
 | ||||
|   let mappings: Mapping[] = config?.mappings | ||||
|   let searchTerm: UIEventSource<string> = new UIEventSource("") | ||||
|   $: { | ||||
|     // Even though 'config' is not declared as a store, Svelte uses it as one to update the component | ||||
|     // We want to (re)-initialize whenever the 'tags' or 'config' change - but not when 'checkedConfig' changes | ||||
|     initialize($tags, config); | ||||
|   } | ||||
|   export let selectedTags: TagsFilter = undefined; | ||||
| 
 | ||||
|   let mappings: Mapping[] = config?.mappings; | ||||
|   let searchTerm: UIEventSource<string> = new UIEventSource(""); | ||||
| 
 | ||||
|   $: { | ||||
|     try { | ||||
|  | @ -79,10 +117,10 @@ | |||
|         selectedMapping, | ||||
|         checkedMappings, | ||||
|         tags.data | ||||
|       ) | ||||
|       ); | ||||
|     } catch (e) { | ||||
|       console.error("Could not calculate changeSpecification:", e) | ||||
|       selectedTags = undefined | ||||
|       console.error("Could not calculate changeSpecification:", e); | ||||
|       selectedTags = undefined; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|  | @ -91,53 +129,53 @@ | |||
|       config: TagRenderingConfig | ||||
|       applied: TagsFilter | ||||
|     } | ||||
|   }>() | ||||
|   }>(); | ||||
| 
 | ||||
|   function onSave() { | ||||
|     if (selectedTags === undefined) { | ||||
|       return | ||||
|       return; | ||||
|     } | ||||
|     if (layer.source === null) { | ||||
|       /** | ||||
|        * This is a special, priviliged layer. | ||||
|        * We simply apply the tags onto the records | ||||
|        */ | ||||
|       const kv = selectedTags.asChange(tags.data) | ||||
|       const kv = selectedTags.asChange(tags.data); | ||||
|       for (const { k, v } of kv) { | ||||
|         if (v === undefined) { | ||||
|           delete tags.data[k] | ||||
|           delete tags.data[k]; | ||||
|         } else { | ||||
|           tags.data[k] = v | ||||
|           tags.data[k] = v; | ||||
|         } | ||||
|       } | ||||
|       tags.ping() | ||||
|       return | ||||
|       tags.ping(); | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     dispatch("saved", { config, applied: selectedTags }) | ||||
|     dispatch("saved", { config, applied: selectedTags }); | ||||
|     const change = new ChangeTagAction(tags.data.id, selectedTags, tags.data, { | ||||
|       theme: state.layout.id, | ||||
|       changeType: "answer", | ||||
|     }) | ||||
|     freeformInput.setData(undefined) | ||||
|     selectedMapping = undefined | ||||
|     selectedTags = undefined | ||||
|       changeType: "answer" | ||||
|     }); | ||||
|     freeformInput.setData(undefined); | ||||
|     selectedMapping = undefined; | ||||
|     selectedTags = undefined; | ||||
| 
 | ||||
|     change | ||||
|       .CreateChangeDescriptions() | ||||
|       .then((changes) => state.changes.applyChanges(changes)) | ||||
|       .catch(console.error) | ||||
|       .catch(console.error); | ||||
|   } | ||||
| 
 | ||||
|   let featureSwitchIsTesting = state.featureSwitchIsTesting | ||||
|   let featureSwitchIsDebugging = state.featureSwitches.featureSwitchIsDebugging | ||||
|   let showTags = state.userRelatedState.showTags | ||||
|   let numberOfCs = state.osmConnection.userDetails.data.csCount | ||||
|   let featureSwitchIsTesting = state.featureSwitchIsTesting; | ||||
|   let featureSwitchIsDebugging = state.featureSwitches.featureSwitchIsDebugging; | ||||
|   let showTags = state.userRelatedState.showTags; | ||||
|   let numberOfCs = state.osmConnection.userDetails.data.csCount; | ||||
|   onDestroy( | ||||
|     state.osmConnection.userDetails.addCallbackAndRun((ud) => { | ||||
|       numberOfCs = ud.csCount | ||||
|       numberOfCs = ud.csCount; | ||||
|     }) | ||||
|   ) | ||||
|   ); | ||||
| </script> | ||||
| 
 | ||||
| {#if config.question !== undefined} | ||||
|  |  | |||
|  | @ -1155,19 +1155,24 @@ export default class SpecialVisualizations { | |||
|                         name: "class", | ||||
|                         doc: "CSS-classes to add to the element", | ||||
|                     }, | ||||
|                     { | ||||
|                         name: "download", | ||||
|                         doc: "If set, this link will act as a download-button. The contents of `href` will be offered for download; this parameter will act as the proposed filename", | ||||
|                     }, | ||||
|                 ], | ||||
|                 constr( | ||||
|                     state: SpecialVisualizationState, | ||||
|                     tagSource: UIEventSource<Record<string, string>>, | ||||
|                     args: string[] | ||||
|                 ): BaseUIElement { | ||||
|                     const [text, href, classnames] = args | ||||
|                     const [text, href, classnames, download] = args | ||||
|                     return new VariableUiElement( | ||||
|                         tagSource.map((tags) => | ||||
|                             new Link( | ||||
|                                 Utils.SubstituteKeys(text, tags), | ||||
|                                 Utils.SubstituteKeys(href, tags), | ||||
|                                 true | ||||
|                                 download === undefined, | ||||
|                                 Utils.SubstituteKeys(download, tags) | ||||
|                             ).SetClass(classnames) | ||||
|                         ) | ||||
|                     ) | ||||
|  |  | |||
|  | @ -471,7 +471,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|      */ | ||||
|     public static SubstituteKeys( | ||||
|         txt: string | undefined, | ||||
|         tags?: Record<string, any>, | ||||
|         tags: Record<string, any> | undefined, | ||||
|         useLang?: string | ||||
|     ): string | undefined { | ||||
|         if (txt === undefined) { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue