Themes(toilets): improve tagging of wheelchair accessible toilets, various fixes to make this possible

This commit is contained in:
Pieter Vander Vennet 2025-04-05 04:01:19 +02:00
parent 1e84c2cc4d
commit 089017b136
19 changed files with 617 additions and 223 deletions

View file

@ -121,7 +121,9 @@
"if": { "if": {
"or": [ "or": [
"wheelchair=yes", "wheelchair=yes",
"wheelchair=designated" "wheelchair=designated",
"toilets:wheelchair=yes",
"toilets:wheelchair=designated"
] ]
}, },
"then": "./assets/layers/toilet/wheelchair.svg" "then": "./assets/layers/toilet/wheelchair.svg"
@ -453,7 +455,8 @@
] ]
}, },
"=labels": [ "=labels": [
"relevant-questions" "relevant-questions",
"no-prefix"
], ],
"question": { "question": {
"en": "When are these toilets opened?", "en": "When are these toilets opened?",
@ -467,110 +470,11 @@
} }
} }
}, },
{
"id": "toilets-wheelchair",
"labels": [
"relevant-questions"
],
"question": {
"en": "Is there a dedicated toilet for wheelchair users?",
"de": "Können Rollstuhlfahrer die Toilette benutzen?",
"fr": "Y a-t-il des toilettes réservées aux personnes en fauteuil roulant ?",
"nl": "Is er een rolstoeltoegankelijke toilet voorzien?",
"it": "C'è un WC riservato alle persone in sedia a rotelle?",
"da": "Er der et særligt toilet til kørestolsbrugere?",
"ca": "Hi ha un lavabo específic per a usuaris amb cadira de rodes?",
"cs": "Je zde vyhrazená toaleta pro vozíčkáře?",
"es": "¿Hay un baño dedicado para usuarios de sillas de ruedas?"
},
"mappings": [
{
"then": {
"en": "There is a dedicated toilet for wheelchair users",
"de": "Rollstuhlfahrer können die Toilette benutzen",
"fr": "Il y a des toilettes réservées pour les personnes à mobilité réduite",
"nl": "Er is een toilet voor rolstoelgebruikers",
"it": "C'è un WC riservato alle persone in sedia a rotelle",
"es": "Hay un baño dedicado para usuarios de sillas de ruedas",
"da": "Der er et særligt toilet til kørestolsbrugere",
"ca": "Hi ha un lavabo dedicat per a usuaris amb cadira de rodes",
"cs": "K dispozici je speciální toaleta pro vozíčkáře"
},
"if": "wheelchair=yes"
},
{
"if": "wheelchair=no",
"then": {
"en": "No wheelchair access",
"de": "Rollstuhlfahrer können die Toilette nicht benutzen",
"fr": "Non accessible aux personnes à mobilité réduite",
"nl": "Niet toegankelijk voor rolstoelgebruikers",
"it": "Non accessibile in sedia a rotelle",
"ru": "Недоступно пользователям кресел-колясок",
"es": "Sin acceso para sillas de ruedas",
"da": "Ingen kørestolsadgang",
"ca": "Sense accés per a cadires de rodes",
"cs": "Žádný bezbariérový přístup"
}
},
{
"if": "wheelchair=designated",
"then": {
"en": "There is only a dedicated toilet for wheelchair users",
"nl": "Er is alleen een toilet voor rolstoelgebruikers",
"de": "Es gibt nur eine barrierefreie Toilette für Rollstuhlfahrer",
"da": "Der er kun et særligt toilet til kørestolsbrugere",
"ca": "És només un lavabo per a usuaris amb cadira de rodes",
"cs": "K dispozici je pouze vyhrazená toaleta pro vozíčkáře",
"es": "Solo hay un baño dedicado para usuarios de sillas de ruedas"
}
}
]
},
{
"id": "wheelchair-door-width",
"condition": {
"and": [
{
"or": [
"wheelchair=yes",
"wheelchair=designated"
]
}
]
},
"labels": [
"relevant-questions"
],
"question": {
"en": "What is the width of the door to the wheelchair accessible toilet?",
"nl": "Hoe breed is de deur van de rolstoeltoegankelijke toilet?",
"fr": "Quelle est la largeur de la porte des toilettes accessibles aux fauteuils roulants ?",
"de": "Wie breit ist die Tür zur rollstuhlgerechten Toilette?",
"da": "Hvad er bredden på døren til det kørestolsvenlige toilet?",
"ca": "Quina és l'amplada de la porta per al lavabo accéssible?",
"cs": "Jaká je šířka dveří na bezbariérovou toaletu?",
"es": "¿Cuál es el ancho de la puerta del baño accesible para sillas de ruedas?"
},
"render": {
"en": "The door to the wheelchair-accessible toilet is {canonical(door:width)} wide",
"nl": "De deur naar de rolstoeltoegankelijke toilet is {canonical(door:width)} wide",
"fr": "La porte des toilettes accessibles aux fauteuils roulants a une large de {canonical(door:width)}",
"de": "Die Tür zur rollstuhlgerechten Toilette ist {canonical(door:width)} breit",
"da": "Døren til det kørestolsvenlige toilet er {canonical(door:width)} bred",
"ca": "La porta del vàter accessible amb cadira de rodes té {canonical(door:width)} d'ample",
"cs": "Dveře na bezbariérovou toaletu mají šířku {canonical(door:width)}",
"es": "La puerta del baño accesible para sillas de ruedas tiene {canonical(door:width)} de ancho"
},
"freeform": {
"key": "door:width",
"type": "pfloat"
}
},
{ {
"id": "toilets-type", "id": "toilets-type",
"labels": [ "labels": [
"relevant-questions" "relevant-questions",
"prefixed"
], ],
"question": { "question": {
"en": "Which kind of toilets are these?", "en": "Which kind of toilets are these?",
@ -643,8 +547,16 @@
] ]
}, },
{ {
"condition": "toilets:position!=urinal", "condition": {
"and": [
"toilets:position!=urinal"
]
},
"id": "gender_segregated", "id": "gender_segregated",
"labels": [
"relevant-questions",
"no-prefix"
],
"question": { "question": {
"en": "Are these toilets gender-segregated?", "en": "Are these toilets gender-segregated?",
"nl": "Zijn deze toiletten gescheiden op basis van geslacht?", "nl": "Zijn deze toiletten gescheiden op basis van geslacht?",
@ -688,6 +600,10 @@
}, },
{ {
"id": "menstrual_products", "id": "menstrual_products",
"labels": [
"relevant-questions",
"prefixed"
],
"question": { "question": {
"en": "Are free, menstrual products distributed here?", "en": "Are free, menstrual products distributed here?",
"nl": "Zijn er gratis menstruatieproducten beschikbaar?", "nl": "Zijn er gratis menstruatieproducten beschikbaar?",
@ -747,6 +663,10 @@
}, },
{ {
"id": "menstrual_products_location", "id": "menstrual_products_location",
"labels": [
"relevant-questions",
"prefixed"
],
"question": { "question": {
"en": "Where are the free menstrual products located?", "en": "Where are the free menstrual products located?",
"nl": "Waar bevinden de gratis menstruatieproducten zich?", "nl": "Waar bevinden de gratis menstruatieproducten zich?",
@ -756,10 +676,14 @@
"ca": "On estan ubicats els productes menstruals gratuïts?" "ca": "On estan ubicats els productes menstruals gratuïts?"
}, },
"condition": { "condition": {
"and": [
{
"or": [ "or": [
"toilets:menstrual_products=limited", "toilets:menstrual_products=limited",
"toilets:menstrual_products:location~*" "toilets:menstrual_products:location~*"
] ]
}
]
}, },
"render": { "render": {
"en": "The menstrual products are located in {toilets:menstrual_products:location}", "en": "The menstrual products are located in {toilets:menstrual_products:location}",
@ -812,7 +736,8 @@
{ {
"id": "toilets-changing-table", "id": "toilets-changing-table",
"labels": [ "labels": [
"relevant-questions" "relevant-questions",
"no-prefix"
], ],
"question": { "question": {
"en": "Is a changing table (to change diapers) available?", "en": "Is a changing table (to change diapers) available?",
@ -859,7 +784,12 @@
}, },
{ {
"labels": [ "labels": [
"relevant-questions" "relevant-questions",
"no-prefix"
],
"labels": [
"relevant-questions",
"no-prefix"
], ],
"question": { "question": {
"en": "Where is the changing table located?", "en": "Where is the changing table located?",
@ -955,6 +885,10 @@
}, },
{ {
"id": "toilet-supervised", "id": "toilet-supervised",
"labels": [
"relevant-questions",
"no-prefix"
],
"question": { "question": {
"en": "Is this toilets supervised by a person?", "en": "Is this toilets supervised by a person?",
"nl": "Is er toezicht op deze toilet?" "nl": "Is er toezicht op deze toilet?"
@ -999,6 +933,10 @@
}, },
{ {
"id": "toilet-has-paper", "id": "toilet-has-paper",
"labels": [
"relevant-questions",
"prefixed"
],
"labels": [ "labels": [
"relevant-questions" "relevant-questions"
], ],
@ -1051,6 +989,10 @@
"labels": [ "labels": [
"relevant-questions" "relevant-questions"
], ],
"labels": [
"relevant-questions",
"prefixed"
],
"id": "toilet-handwashing", "id": "toilet-handwashing",
"question": { "question": {
"en": "Do these toilets have a sink to wash your hands?", "en": "Do these toilets have a sink to wash your hands?",
@ -1093,6 +1035,10 @@
}, },
{ {
"id": "toilet-drying", "id": "toilet-drying",
"labels": [
"relevant-questions",
"prefixed"
],
"question": { "question": {
"en": "Do these toilets have a device to dry your hands?", "en": "Do these toilets have a device to dry your hands?",
"nl": "Hebben deze toiletten een apparaat om je handen te drogen?" "nl": "Hebben deze toiletten een apparaat om je handen te drogen?"
@ -1135,9 +1081,285 @@
} }
} }
], ],
"condition": "toilets:handwashing=yes" "condition": {
"and": [
"toilets:handwashing=yes"
]
}
}, },
"description" "description",
{
"id": "wheelchair-group",
"labels": [
"relevant-questions",
"prefixed"
],
"render": {
"special": {
"type": "group",
"header": "wheelchair-title",
"labels": "wheelchair"
}
}
},
{
"id": "toilets-wheelchair",
"labels": [
"relevant-questions",
"wheelchair",
"hidden",
"no-prefix"
],
"question": {
"en": "Is there a dedicated toilet for wheelchair users?",
"de": "Können Rollstuhlfahrer die Toilette benutzen?",
"fr": "Y a-t-il des toilettes réservées aux personnes en fauteuil roulant ?",
"nl": "Is er een rolstoeltoegankelijke toilet voorzien?",
"it": "C'è un WC riservato alle persone in sedia a rotelle?",
"da": "Er der et særligt toilet til kørestolsbrugere?",
"ca": "Hi ha un lavabo específic per a usuaris amb cadira de rodes?",
"cs": "Je zde vyhrazená toaleta pro vozíčkáře?",
"es": "¿Hay un baño dedicado para usuarios de sillas de ruedas?"
},
"mappings": [
{
"then": {
"en": "There is a dedicated toilet for wheelchair users",
"de": "Rollstuhlfahrer können die Toilette benutzen",
"fr": "Il y a des toilettes réservées pour les personnes à mobilité réduite",
"nl": "Er is een toilet voor rolstoelgebruikers",
"it": "C'è un WC riservato alle persone in sedia a rotelle",
"es": "Hay un baño dedicado para usuarios de sillas de ruedas",
"da": "Der er et særligt toilet til kørestolsbrugere",
"ca": "Hi ha un lavabo dedicat per a usuaris amb cadira de rodes",
"cs": "K dispozici je speciální toaleta pro vozíčkáře"
},
"if": "wheelchair=yes"
},
{
"if": "wheelchair=no",
"then": {
"en": "No wheelchair access",
"de": "Rollstuhlfahrer können die Toilette nicht benutzen",
"fr": "Non accessible aux personnes à mobilité réduite",
"nl": "Niet toegankelijk voor rolstoelgebruikers",
"it": "Non accessibile in sedia a rotelle",
"ru": "Недоступно пользователям кресел-колясок",
"es": "Sin acceso para sillas de ruedas",
"da": "Ingen kørestolsadgang",
"ca": "Sense accés per a cadires de rodes",
"cs": "Žádný bezbariérový přístup"
}
},
{
"if": "wheelchair=designated",
"then": {
"en": "There is only a dedicated toilet for wheelchair users",
"nl": "Er is alleen een toilet voor rolstoelgebruikers",
"de": "Es gibt nur eine barrierefreie Toilette für Rollstuhlfahrer",
"da": "Der er kun et særligt toilet til kørestolsbrugere",
"ca": "És només un lavabo per a usuaris amb cadira de rodes",
"cs": "K dispozici je pouze vyhrazená toaleta pro vozíčkáře",
"es": "Solo hay un baño dedicado para usuarios de sillas de ruedas"
}
}
]
},
{
"id": "wheelchair-picture-carousel",
"condition": {
"and": [
{
"or": [
"wheelchair=yes",
"wheelchair=designated",
"toilets:wheelchair=yes",
"toilets:wheelchair=designated"
]
}
]
},
"labels": [
"wheelchair",
"hidden",
"relevant-questions",
"prefixed"
],
"render": {
"special": {
"type": "image_carousel",
"image_key": "toilets:wheelchair:panoramax;toilets:wheelchair:image;toilets:wheelchair:mapillary"
}
}
},
{
"id": "wheelchair-picture",
"condition": {
"and": [
{
"or": [
"wheelchair=yes",
"wheelchair=designated",
"toilets:wheelchair=yes",
"toilets:wheelchair=designated"
]
}
]
},
"labels": [
"wheelchair",
"hidden",
"relevant-questions",
"prefixed"
],
"render": {
"special": {
"type": "image_upload",
"image_key": "toilets:wheelchair:panoramax",
"label": {
"en": "Add a picture of the wheelchair accessible toilet",
"nl": "Voeg een foto van de rolstoeltoegankelijke toilet toe"
}
}
}
},
{
"id": "wheelchair-title",
"labels": [
"hidden",
"relevant-questions",
"prefixed"
],
"render": {
"en": "Wheelchair accessible toilet",
"nl": "Rolstoeltoegankelijke toilet"
},
"icon": "./assets/layers/toilet/wheelchair.svg",
"mappings": [
{
"if": {
"or": [
"wheelchair=no",
"toilets:wheelchair=no"
]
},
"then": {
"en": "No wheelchair accessible toilet",
"nl": "Geen rolstoeltoegankelijke toilet"
}
}
]
},
{
"id": "wheelchair-access",
"question": {
"en": "Is the wheelchair-accessible toilet locked?",
"nl": "Is de rolstoeltoegankelijke toilet op slot?"
},
"condition": {
"and": [
{
"or": [
"wheelchair=yes",
"wheelchair=designated",
"toilets:wheelchair=yes",
"toilets:wheelchair=designated"
]
},
{
"or": [
"access=yes",
"access=public",
"access=customers"
]
}
]
},
"labels": [
"hidden",
"wheelchair",
"relevant-questions",
"prefixed"
],
"mappings": [
{
"if": "toilets:wheelchair:access=yes",
"alsoShowIf": "toilets:wheelchair:access=",
"then": {
"en": "The wheelchair accessible toilets are freely accessible",
"nl": "De rolstoeltoegankelijke toilet is vrij toegankelijk"
}
},
{
"if": "toilets:wheelchair:access=key",
"icon": "key",
"then": {
"en": "One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key",
"nl": "Men moet toestemming vragen om de rolstoeltoegankelijke toilet te gebruiken, bv. door een sleutel te vragen"
}
}
]
},
{
"id": "wheelchair-door-width",
"condition": {
"and": [
{
"or": [
"wheelchair=yes",
"wheelchair=designated",
"toilets:wheelchair=yes",
"toilets:wheelchair=designated"
]
}
]
},
"labels": [
"relevant-questions",
"wheelchair",
"hidden",
"prefixed"
],
"question": {
"en": "What is the width of the door to the wheelchair accessible toilet?",
"nl": "Hoe breed is de deur van de rolstoeltoegankelijke toilet?",
"fr": "Quelle est la largeur de la porte des toilettes accessibles aux fauteuils roulants ?",
"de": "Wie breit ist die Tür zur rollstuhlgerechten Toilette?",
"da": "Hvad er bredden på døren til det kørestolsvenlige toilet?",
"ca": "Quina és l'amplada de la porta per al lavabo accéssible?",
"cs": "Jaká je šířka dveří na bezbariérovou toaletu?",
"es": "¿Cuál es el ancho de la puerta del baño accesible para sillas de ruedas?"
},
"render": {
"en": "The door to the wheelchair-accessible toilet is {canonical(door:width)} wide",
"nl": "De deur naar de rolstoeltoegankelijke toilet is {canonical(door:width)} wide",
"fr": "La porte des toilettes accessibles aux fauteuils roulants a une large de {canonical(door:width)}",
"de": "Die Tür zur rollstuhlgerechten Toilette ist {canonical(door:width)} breit",
"da": "Døren til det kørestolsvenlige toilet er {canonical(door:width)} bred",
"ca": "La porta del vàter accessible amb cadira de rodes té {canonical(door:width)} d'ample",
"cs": "Dveře na bezbariérovou toaletu mají šířku {canonical(door:width)}",
"es": "La puerta del baño accesible para sillas de ruedas tiene {canonical(door:width)} de ancho"
},
"freeform": {
"key": "door:width",
"type": "pfloat"
}
},
{
"id": "questions-wheelchair",
"labels": [
"wheelchair",
"hidden",
"relevant-questions"
],
"render": {
"special": {
"type": "questions",
"show_all": "yes",
"labels": "wheelchair"
}
}
}
], ],
"filter": [ "filter": [
{ {
@ -1159,7 +1381,9 @@
"osmTags": { "osmTags": {
"or": [ "or": [
"wheelchair=yes", "wheelchair=yes",
"wheelchair=designated" "wheelchair=designated",
"toilets:wheelchair=yes",
"toilets:wheelchair=designated"
] ]
} }
} }

View file

@ -349,6 +349,10 @@
}, },
{ {
"id": "toilets-wheelchair", "id": "toilets-wheelchair",
"labels": [
"wheelchair",
"hidden"
],
"question": { "question": {
"en": "Is there a dedicated toilet for wheelchair users?", "en": "Is there a dedicated toilet for wheelchair users?",
"de": "Können Rollstuhlfahrer die Toilette benutzen?", "de": "Können Rollstuhlfahrer die Toilette benutzen?",
@ -406,48 +410,21 @@
} }
] ]
}, },
"toilet.prefixed",
{ {
"id": "wheelchair-door-width", "id": "questions-wheelchair",
"condition": { "labels": [
"or": [ "wheelchair",
"toilets:wheelchair=yes", "hidden"
"toilets:wheelchair=designated" ],
]
},
"question": {
"en": "What is the width of the door to the wheelchair accessible toilet?",
"nl": "Hoe breed is de deur van de rolstoeltoegankelijke toilet?",
"fr": "Quelle est la largeur de la porte des toilettes accessibles aux fauteuils roulants ?",
"de": "Wie breit ist die Tür zur rollstuhlgerechten Toilette?",
"da": "Hvad er bredden på døren til det kørestolsvenlige toilet?",
"ca": "Quina és l'amplada de la porta del lavabo accessible per a cadira de rodes?",
"cs": "Jaká je šířka dveří na bezbariérovou toaletu?",
"sl": "Koliko so široka vrata v stranišče za invalide na vozičku?",
"es": "¿Cuál es el ancho de la puerta del baño accesible para sillas de ruedas?"
},
"render": { "render": {
"en": "The door to the wheelchair-accessible toilet is {canonical(toilets:door:width)} wide", "special": {
"nl": "De deur naar de rolstoeltoegankelijke toilet is {canonical(toilets:door:width)} wide", "type": "questions",
"fr": "La porte des toilettes accessibles aux fauteuils roulants a une large de {canonical(toilets:door:width)}", "labels": "wheelchair",
"de": "Die Tür zur rollstuhlgerechten Toilette ist {canonical(toilets:door:width)} breit", "show_all": "yes"
"da": "Døren til det kørestolsvenlige toilet er {canonical(toilets:door:width)} bred", }
"ca": "La porta del vàter accessible amb cadira de rodes és {canonical(toilets:door:width)} d'ample",
"cs": "Dveře na toaletu pro vozíčkáře jsou {canonical(toilets:door:width)} široké",
"sl": "Vrata v stranišče za invalide na vozičku so široka {canonical(toilets:door:width)}",
"es": "La puerta del baño accesible para sillas de ruedas tiene {canonical(toilets:door:width)} de ancho"
},
"freeform": {
"key": "toilets:door:width",
"type": "pfloat"
} }
}, },
"toilet.toilets-type",
"toilet.toilets-changing-table",
"toilet.toilet-changing_table:location",
"toilet.toilet-handwashing",
"toilet.toilet-has-paper",
"toilet.menstrual_products",
"toilet.menstrual_products_location",
{ {
"builtin": "description", "builtin": "description",
"override": { "override": {

View file

@ -858,21 +858,24 @@
{ {
"question": { "question": {
"en": "All platforms", "en": "All platforms",
"cs": "Všechny platformy" "cs": "Všechny platformy",
"de": "Alle Plattformen"
}, },
"quesiton": "All platforms" "quesiton": "All platforms"
}, },
{ {
"question": { "question": {
"en": "Made with Android", "en": "Made with Android",
"cs": "Vytvořeno s Androidem" "cs": "Vytvořeno s Androidem",
"de": "Mit Android erstellt"
}, },
"osmTags": "android=yes" "osmTags": "android=yes"
}, },
{ {
"question": { "question": {
"en": "Made on the web", "en": "Made on the web",
"cs": "Vytvořeno na webu" "cs": "Vytvořeno na webu",
"de": "Im Internet erstellt"
}, },
"osmTags": "android=" "osmTags": "android="
} }

View file

@ -5242,8 +5242,12 @@
"questionHint": "Això podria estar escrit al cartell del nom del carrer", "questionHint": "Això podria estar escrit al cartell del nom del carrer",
"render": "Anomenat en honor a {name:etymology}" "render": "Anomenat en honor a {name:etymology}"
}, },
"street-name-sign-image": { "streetsign-upload": {
"render": "{image_carousel(image:streetsign)}<br/>{image_upload(image:streetsign, Afegeix una imatge de la placa amb el nom del carrer)}" "render": {
"special": {
"label": "Afegeix una imatge de la placa amb el nom del carrer"
}
}
}, },
"wikipedia": { "wikipedia": {
"render": "Existeix un article de la Viquipèdia sobre aquest <b>carrer</b>:<br/>{wikipedia():max-height:25rem}" "render": "Existeix un article de la Viquipèdia sobre aquest <b>carrer</b>:<br/>{wikipedia():max-height:25rem}"

View file

@ -5057,8 +5057,12 @@
"questionHint": "To může být napsáno na ceduli s názvem ulice", "questionHint": "To může být napsáno na ceduli s názvem ulice",
"render": "Pojmenováno po {name:etymology}" "render": "Pojmenováno po {name:etymology}"
}, },
"street-name-sign-image": { "streetsign-upload": {
"render": "{image_carousel(image:streetsign)}<br/>{image_upload(image:streetsign, Add image of a street name sign)}" "render": {
"special": {
"label": "Add image of a street name sign"
}
}
}, },
"wikipedia": { "wikipedia": {
"render": "Článek na Wikipedii o této <b>ulici</b> existuje:<br/>{wikipedia():max-height:25rem}" "render": "Článek na Wikipedii o této <b>ulici</b> existuje:<br/>{wikipedia():max-height:25rem}"

View file

@ -1589,8 +1589,12 @@
"question": "Hvad er dette objekt opkaldt efter?", "question": "Hvad er dette objekt opkaldt efter?",
"render": "Opkaldt efter {name:etymology}" "render": "Opkaldt efter {name:etymology}"
}, },
"street-name-sign-image": { "streetsign-upload": {
"render": "{image_carousel(image:streetsign)}<br/>{image_upload(image:streetsign, Tilføj foto af gadenavneskilt)}" "render": {
"special": {
"label": "Tilføj foto af gadenavneskilt"
}
}
}, },
"wikipedia": { "wikipedia": {
"render": "Der findes en Wikipedia-artikel om denne <b>gade</b>:<br/>{wikipedia():max-height:25rem}" "render": "Der findes en Wikipedia-artikel om denne <b>gade</b>:<br/>{wikipedia():max-height:25rem}"

View file

@ -5220,8 +5220,12 @@
"questionHint": "Das könnte auf einem Straßenschild stehen", "questionHint": "Das könnte auf einem Straßenschild stehen",
"render": "Benannt nach {name:etymology}" "render": "Benannt nach {name:etymology}"
}, },
"street-name-sign-image": { "streetsign-upload": {
"render": "{image_carousel(image:streetsign)}<br/>{image_upload(image:streetsign, Bild eines Straßenschildes hinzufügen)}" "render": {
"special": {
"label": "Bild eines Straßenschildes hinzufügen"
}
}
}, },
"wikipedia": { "wikipedia": {
"render": "Zu dieser <b>Straße</b> existiert ein Wikipedia-Artikel:<br/>{wikipedia():max-height:25rem}" "render": "Zu dieser <b>Straße</b> existiert ein Wikipedia-Artikel:<br/>{wikipedia():max-height:25rem}"

View file

@ -759,6 +759,19 @@
}, },
"question": "What notes can you withdraw here?" "question": "What notes can you withdraw here?"
}, },
"indoor": {
"override": {
"mappings": {
"0": {
"then": "This ATM is located indoors"
},
"1": {
"then": "This ATM is located outdoors"
}
},
"question": "Is this ATM located indoors?"
}
},
"name": { "name": {
"render": "The name of this ATM is {name}" "render": "The name of this ATM is {name}"
}, },
@ -5382,8 +5395,12 @@
"questionHint": "This might be written on the street name sign", "questionHint": "This might be written on the street name sign",
"render": "Named after {name:etymology}" "render": "Named after {name:etymology}"
}, },
"street-name-sign-image": { "streetsign-upload": {
"render": "{image_carousel(image:streetsign)}<br/>{image_upload(image:streetsign, Add image of a street name sign)}" "render": {
"special": {
"label": "Add image of a street name sign"
}
}
}, },
"wikipedia": { "wikipedia": {
"render": "A Wikipedia article about this <b>street</b> exists:<br/>{wikipedia():max-height:25rem}" "render": "A Wikipedia article about this <b>street</b> exists:<br/>{wikipedia():max-height:25rem}"
@ -6731,6 +6748,14 @@
}, },
"question": "What type of hydrant is it?", "question": "What type of hydrant is it?",
"render": " Hydrant type: {fire_hydrant:type}" "render": " Hydrant type: {fire_hydrant:type}"
},
"ref": {
"freeform": {
"placeholder": "Reference number of the hydrant"
},
"question": "What is the reference number of this hydrant?",
"questionHint": "This can usually be found on the hydrant or on a nearby sign.",
"render": "Reference number: {ref}"
} }
}, },
"title": { "title": {
@ -7419,6 +7444,10 @@
"0": { "0": {
"description": "A memorial is a physical object which remembers a person or event.", "description": "A memorial is a physical object which remembers a person or event.",
"title": "a memorial" "title": "a memorial"
},
"1": {
"description": "A memorial is a physical object which remembers a person or event and is attached to a wall.",
"title": "a memorial on a wall"
} }
}, },
"tagRenderings": { "tagRenderings": {
@ -8856,6 +8885,9 @@
"presets": { "presets": {
"0": { "0": {
"title": "a bookcase" "title": "a bookcase"
},
"1": {
"title": "a bookcase on a wall"
} }
}, },
"tagRenderings": { "tagRenderings": {
@ -11658,6 +11690,17 @@
} }
}, },
"question": "How is this street lamp mounted?" "question": "How is this street lamp mounted?"
},
"utility_pole": {
"mappings": {
"0": {
"then": "This lamp is mounted on a utility pole"
},
"1": {
"then": "This lamp is not mounted on a utility pole"
}
},
"question": "Is this lamp mounted on a utility pole?"
} }
}, },
"title": { "title": {
@ -12324,9 +12367,35 @@
}, },
"question": "Is there a dedicated toilet for wheelchair users?" "question": "Is there a dedicated toilet for wheelchair users?"
}, },
"wheelchair-access": {
"mappings": {
"0": {
"then": "The wheelchair accessible toilets are freely accessible"
},
"1": {
"then": "One needs to ask permission to access wheelchair-accessible toilet, e.g. by asking a key"
}
},
"question": "Is the wheelchair-accessible toilet locked?"
},
"wheelchair-door-width": { "wheelchair-door-width": {
"question": "What is the width of the door to the wheelchair accessible toilet?", "question": "What is the width of the door to the wheelchair accessible toilet?",
"render": "The door to the wheelchair-accessible toilet is {canonical(door:width)} wide" "render": "The door to the wheelchair-accessible toilet is {canonical(door:width)} wide"
},
"wheelchair-picture": {
"render": {
"special": {
"label": "Add a picture of the wheelchair accessible toilet"
}
}
},
"wheelchair-title": {
"mappings": {
"0": {
"then": "No wheelchair accessible toilet"
}
},
"render": "Wheelchair accessible toilet"
} }
}, },
"title": { "title": {
@ -13509,6 +13578,29 @@
"render": "Settings" "render": "Settings"
} }
}, },
"utility_pole": {
"description": "Layer showing various types of utility poles.",
"name": "Utility Poles",
"presets": {
"0": {
"title": "a utility pole"
}
},
"tagRenderings": {
"street_lamp": {
"mappings": {
"0": {
"then": "This utility pole has a street lamp mounted on it."
},
"1": {
"then": "This utility pole does not have a street lamp mounted on it."
}
},
"question": "Does this utility pole have a street lamp mounted on it?"
}
},
"title": "Utility Pole"
},
"vending_machine": { "vending_machine": {
"description": "Layer showing vending machines", "description": "Layer showing vending machines",
"filter": { "filter": {
@ -14031,6 +14123,9 @@
"3": { "3": {
"description": "A wayside cross is a christian cross that is placed by a road or pathway. This cross is mounted on a wall", "description": "A wayside cross is a christian cross that is placed by a road or pathway. This cross is mounted on a wall",
"title": "a wayside cross mounted on a wall" "title": "a wayside cross mounted on a wall"
},
"4": {
"title": "a mother mary shrine on the first floor"
} }
}, },
"tagRenderings": { "tagRenderings": {
@ -14169,6 +14264,23 @@
}, },
"question": "What's the name of this {title()}?", "question": "What's the name of this {title()}?",
"render": "The name of this {title()} is <b>{name}</b>" "render": "The name of this {title()} is <b>{name}</b>"
},
"subject:wikidata": {
"mappings": {
"0": {
"then": "Mother mary is depicted"
},
"1": {
"then": "Jesus Christ as a child is depicted"
},
"2": {
"then": "Jesus Christ (as an adult) is depicted"
},
"3": {
"then": "Saint Anne (mother of Mary) is depicted"
}
},
"question": "Who is depicted?"
} }
}, },
"title": { "title": {

View file

@ -4912,8 +4912,12 @@
"questionHint": "Esto podría estar escrito en el letrero del nombre de la calle", "questionHint": "Esto podría estar escrito en el letrero del nombre de la calle",
"render": "Nombrado en honor a {name:etymology}" "render": "Nombrado en honor a {name:etymology}"
}, },
"street-name-sign-image": { "streetsign-upload": {
"render": "{image_carousel(image:streetsign)}<br/>{image_upload(image:streetsign, Agregar imagen de un letrero de nombre de calle)}" "render": {
"special": {
"label": "Agregar imagen de un letrero de nombre de calle"
}
}
}, },
"wikipedia": { "wikipedia": {
"render": "Existe un artículo de Wikipedia sobre esta <b>calle</b>:<br/>{wikipedia():max-height:25rem}" "render": "Existe un artículo de Wikipedia sobre esta <b>calle</b>:<br/>{wikipedia():max-height:25rem}"

View file

@ -3476,8 +3476,12 @@
"questionHint": "Cela peut être indiqué sur le panneau de la rue", "questionHint": "Cela peut être indiqué sur le panneau de la rue",
"render": "Nommé en référence à {name:etymology}" "render": "Nommé en référence à {name:etymology}"
}, },
"street-name-sign-image": { "streetsign-upload": {
"render": "{image_carousel(image:streetsign)}<br/>{image_upload(image:streetsign, Ajouter une photo de la plaque de rue)}" "render": {
"special": {
"label": "Ajouter une photo de la plaque de rue"
}
}
}, },
"wikipedia": { "wikipedia": {
"render": "Un article Wikipédia à propos de cette <b>rue</b> existe :<br/>{wikipedia():max-height:25rem}" "render": "Un article Wikipédia à propos de cette <b>rue</b> existe :<br/>{wikipedia():max-height:25rem}"

View file

@ -735,6 +735,19 @@
}, },
"question": "Welke bankbiljetten kan je hier afhalen?" "question": "Welke bankbiljetten kan je hier afhalen?"
}, },
"indoor": {
"override": {
"mappings": {
"0": {
"then": "Deze geldautomaat bevindt zich binnen"
},
"1": {
"then": "Deze geldautomaat bevindt zich buiten"
}
},
"question": "Bevindt deze geldautomaat zich binnen?"
}
},
"name": { "name": {
"render": "De naam van deze geldautomaat is {name}" "render": "De naam van deze geldautomaat is {name}"
}, },
@ -5041,8 +5054,12 @@
"questionHint": "Dit staat mogelijks vermeld op het straatnaambordje", "questionHint": "Dit staat mogelijks vermeld op het straatnaambordje",
"render": "Vernoemd naar {name:etymology}" "render": "Vernoemd naar {name:etymology}"
}, },
"street-name-sign-image": { "streetsign-upload": {
"render": "{image_carousel(image:streetsign)}<br/>{image_upload(image:streetsign, Voeg afbeelding van straatnaambordje toe)}" "render": {
"special": {
"label": "Voeg afbeelding van straatnaambordje toe"
}
}
}, },
"wikipedia": { "wikipedia": {
"render": "Een Wikipedia artikel over deze <b>straat</b> bestaat:<br/>{wikipedia():max-height:25rem}" "render": "Een Wikipedia artikel over deze <b>straat</b> bestaat:<br/>{wikipedia():max-height:25rem}"
@ -5971,6 +5988,14 @@
}, },
"question": "Wat voor soort brandkraan is dit?", "question": "Wat voor soort brandkraan is dit?",
"render": " Het type brandkraan is {fire_hydrant:type}" "render": " Het type brandkraan is {fire_hydrant:type}"
},
"ref": {
"freeform": {
"placeholder": "Referentienummer van de brandkraan"
},
"question": "Wat is het referentienummer van deze brandkraan?",
"questionHint": "Dit nummer is meestal te vinden op de brandkraan of op een nabijgelegen bord.",
"render": "Referentienummer: {ref}"
} }
}, },
"title": { "title": {
@ -6469,7 +6494,12 @@
"name": "Gedenktekens", "name": "Gedenktekens",
"presets": { "presets": {
"0": { "0": {
"description": "Een fysiek object dat een persoon of gebeurtenis herdenkt",
"title": "een gedenkteken" "title": "een gedenkteken"
},
"1": {
"description": "Een fysiek object dat een persoon of gebeurtenis herdenkt en dat ophangt aan een muur.",
"title": "een gedenkteken dat aan een muur hangt"
} }
}, },
"tagRenderings": { "tagRenderings": {
@ -9902,9 +9932,35 @@
}, },
"question": "Is er een rolstoeltoegankelijke toilet voorzien?" "question": "Is er een rolstoeltoegankelijke toilet voorzien?"
}, },
"wheelchair-access": {
"mappings": {
"0": {
"then": "De rolstoeltoegankelijke toilet is vrij toegankelijk"
},
"1": {
"then": "Men moet toestemming vragen om de rolstoeltoegankelijke toilet te gebruiken, bv. door een sleutel te vragen"
}
},
"question": "Is de rolstoeltoegankelijke toilet op slot?"
},
"wheelchair-door-width": { "wheelchair-door-width": {
"question": "Hoe breed is de deur van de rolstoeltoegankelijke toilet?", "question": "Hoe breed is de deur van de rolstoeltoegankelijke toilet?",
"render": "De deur naar de rolstoeltoegankelijke toilet is {canonical(door:width)} wide" "render": "De deur naar de rolstoeltoegankelijke toilet is {canonical(door:width)} wide"
},
"wheelchair-picture": {
"render": {
"special": {
"label": "Voeg een foto van de rolstoeltoegankelijke toilet toe"
}
}
},
"wheelchair-title": {
"mappings": {
"0": {
"then": "Geen rolstoeltoegankelijke toilet"
}
},
"render": "Rolstoeltoegankelijke toilet"
} }
}, },
"title": { "title": {

View file

@ -1280,8 +1280,12 @@
"etymology_multi_apply": { "etymology_multi_apply": {
"render": "{multi_apply(_same_name_ids, name:etymology:wikidata;name:etymology, Автоматичне застосування даних до всіх сегментів з однаковою назвою, true)}" "render": "{multi_apply(_same_name_ids, name:etymology:wikidata;name:etymology, Автоматичне застосування даних до всіх сегментів з однаковою назвою, true)}"
}, },
"street-name-sign-image": { "streetsign-upload": {
"render": "{image_carousel(image:streetsign)}<br/>{image_upload(image:streetsign, Додати зображення таблички з назвою вулиці)}" "render": {
"special": {
"label": "Додати зображення таблички з назвою вулиці"
}
}
}, },
"wikipedia-etymology": { "wikipedia-etymology": {
"question": "На честь якого елемента Вікіданих названо цей об'єкт?" "question": "На честь якого елемента Вікіданих названо цей об'єкт?"

View file

@ -3354,11 +3354,6 @@ input[type="range"].range-lg::-moz-range-thumb {
background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)) !important; background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)) !important;
} }
.bg-black {
--tw-bg-opacity: 1;
background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));
}
.bg-blue-100 { .bg-blue-100 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(225 239 254 / var(--tw-bg-opacity, 1)); background-color: rgb(225 239 254 / var(--tw-bg-opacity, 1));

View file

@ -53,7 +53,7 @@ export default class FeaturePropertiesStore {
public getStore(id: string): UIEventSource<Record<string, string>> { public getStore(id: string): UIEventSource<Record<string, string>> {
const store = this._elements.get(id) const store = this._elements.get(id)
if (store === undefined) { if (store === undefined) {
console.error("PANIC: no store for", id) console.warn("PANIC: no properties store for", id)
} }
return store return store
} }

View file

@ -4,39 +4,11 @@ export class ThemeMetaTagging {
public static readonly themeName = "usersettings" public static readonly themeName = "usersettings"
public metaTaggging_for_usersettings(feat: {properties: Record<string, string>}) { public metaTaggging_for_usersettings(feat: {properties: Record<string, string>}) {
Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_md", () => Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_md', () => feat.properties._description.match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)?.at(1) )
feat.properties._description Utils.AddLazyProperty(feat.properties, '_d', () => feat.properties._description?.replace(/&lt;/g,'<')?.replace(/&gt;/g,'>') ?? '' )
.match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/) Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_a', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.href.match(/mastodon|en.osm.town/) !== null)[0]?.href }) (feat) )
?.at(1) Utils.AddLazyProperty(feat.properties, '_mastodon_link', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.getAttribute("rel")?.indexOf('me') >= 0)[0]?.href})(feat) )
) Utils.AddLazyProperty(feat.properties, '_mastodon_candidate', () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a )
Utils.AddLazyProperty( feat.properties['__current_backgroun'] = 'initial_value'
feat.properties,
"_d",
() => feat.properties._description?.replace(/&lt;/g, "<")?.replace(/&gt;/g, ">") ?? ""
)
Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_a", () =>
((feat) => {
const e = document.createElement("div")
e.innerHTML = feat.properties._d
return Array.from(e.getElementsByTagName("a")).filter(
(a) => a.href.match(/mastodon|en.osm.town/) !== null
)[0]?.href
})(feat)
)
Utils.AddLazyProperty(feat.properties, "_mastodon_link", () =>
((feat) => {
const e = document.createElement("div")
e.innerHTML = feat.properties._d
return Array.from(e.getElementsByTagName("a")).filter(
(a) => a.getAttribute("rel")?.indexOf("me") >= 0
)[0]?.href
})(feat)
)
Utils.AddLazyProperty(
feat.properties,
"_mastodon_candidate",
() => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a
)
feat.properties["__current_backgroun"] = "initial_value"
} }
} }

View file

@ -17,7 +17,10 @@
export let layer: LayerConfig export let layer: LayerConfig
let headerTr = layer.tagRenderings.find((tr) => tr.id === header) let headerTr = layer.tagRenderings.find((tr) => tr.id === header)
let trgs: TagRenderingConfig[] = [] if (headerTr === undefined) {
console.error("Header tagRendering with ID", header, "was not found")
}
let tagRenderings: TagRenderingConfig[] = []
let seenIds = new Set<string>() let seenIds = new Set<string>()
for (const label of labels) { for (const label of labels) {
for (const tr of layer.tagRenderings) { for (const tr of layer.tagRenderings) {
@ -25,20 +28,30 @@
continue continue
} }
if (label === tr.id || tr.labels.some((l) => l === label)) { if (label === tr.id || tr.labels.some((l) => l === label)) {
trgs.push(tr) tagRenderings.push(tr)
seenIds.add(tr.id) seenIds.add(tr.id)
} }
} }
} }
</script> </script>
{#if tagRenderings.length > 0}
<div class="mb-8">
<AccordionSingle> <AccordionSingle>
<div slot="header"> <div slot="header">
{#if headerTr}
<TagRenderingAnswer {tags} {layer} config={headerTr} {state} {selectedElement} /> <TagRenderingAnswer {tags} {layer} config={headerTr} {state} {selectedElement} />
{:else}
{header}
{/if}
</div> </div>
{#each trgs as config (config.id)} {#each tagRenderings as config (config.id)}
{#if config.IsKnown($tags) && (config.condition === undefined || config.condition.matchesProperties($tags))} {#if config.IsKnown($tags) && (config.condition === undefined || config.condition.matchesProperties($tags))}
<TagRenderingEditableDynamic {tags} {config} {state} {selectedElement} {layer} /> <TagRenderingEditableDynamic {tags} {config} {state} {selectedElement} {layer} />
{/if} {/if}
{/each} {/each}
</AccordionSingle> </AccordionSingle>
</div>
{/if}

View file

@ -31,7 +31,7 @@
*/ */
export let notForLabels: string[] | undefined = undefined export let notForLabels: string[] | undefined = undefined
const _notForLabels = new Set(notForLabels) const _notForLabels = new Set(notForLabels)
let showAllQuestionsAtOnce: Store<boolean> = export let showAllQuestionsAtOnce: Store<boolean> =
state.userRelatedState?.showAllQuestionsAtOnce ?? new ImmutableStore(false) state.userRelatedState?.showAllQuestionsAtOnce ?? new ImmutableStore(false)
function allowed(labels: string[]) { function allowed(labels: string[]) {

View file

@ -22,7 +22,8 @@
export let id: string = undefined export let id: string = undefined
if (config === undefined) { if (config === undefined) {
throw "Config is undefined in tagRenderingAnswer" console.error("TagRenderingAnswer: Config is undefined")
throw ("Config is undefined in tagRenderingAnswer")
} }
let trs: Store<{ then: Translation; icon?: string; iconClass?: string }[]> = tags.mapD((tags) => let trs: Store<{ then: Translation; icon?: string; iconClass?: string }[]> = tags.mapD((tags) =>
Utils.NoNull(config?.GetRenderValues(tags)) Utils.NoNull(config?.GetRenderValues(tags))

View file

@ -1,6 +1,6 @@
import { SpecialVisualizationState, SpecialVisualizationSvelte } from "../SpecialVisualization" import { SpecialVisualizationState, SpecialVisualizationSvelte } from "../SpecialVisualization"
import SvelteUIElement from "../Base/SvelteUIElement" import SvelteUIElement from "../Base/SvelteUIElement"
import { UIEventSource } from "../../Logic/UIEventSource" import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
import { Feature } from "geojson" import { Feature } from "geojson"
import LayerConfig from "../../Models/ThemeConfig/LayerConfig" import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
import Questionbox from "../Popup/TagRendering/Questionbox.svelte" import Questionbox from "../Popup/TagRendering/Questionbox.svelte"
@ -31,6 +31,11 @@ class QuestionViz implements SpecialVisualizationSvelte {
name: "blacklisted-labels", name: "blacklisted-labels",
doc: "One or more ';'-separated labels of questions which should _not_ be included. Note that the questionbox which is added by default will blacklist 'hidden'" doc: "One or more ';'-separated labels of questions which should _not_ be included. Note that the questionbox which is added by default will blacklist 'hidden'"
}, },
{
name: "show_all",
default: "user-preference",
doc: "Either `no`, `yes` or `user-preference`. Indicates if all questions should be shown at once"
}
] ]
svelteBased = true svelteBased = true
group: "default" group: "default"
@ -50,6 +55,13 @@ class QuestionViz implements SpecialVisualizationSvelte {
?.split(";") ?.split(";")
?.map((s) => s.trim()) ?.map((s) => s.trim())
?.filter((s) => s !== "") ?.filter((s) => s !== "")
const showAll = args[2]
let showAllQuestionsAtOnce: Store<boolean> = state.userRelatedState?.showAllQuestionsAtOnce
if (showAll === "yes") {
showAllQuestionsAtOnce = new ImmutableStore(true)
} else if (showAll === "no") {
showAllQuestionsAtOnce = new ImmutableStore(false)
}
return new SvelteUIElement(Questionbox, { return new SvelteUIElement(Questionbox, {
layer, layer,
tags, tags,
@ -57,6 +69,7 @@ class QuestionViz implements SpecialVisualizationSvelte {
state, state,
onlyForLabels: labels, onlyForLabels: labels,
notForLabels: blacklist, notForLabels: blacklist,
showAllQuestionsAtOnce
}) })
} }
} }