forked from MapComplete/MapComplete
		
	Themes(cafe_pub, toilets): add toilet information to pubs; forward wheelchair accessibility information to 'toilet_at_amenity'
This commit is contained in:
		
							parent
							
								
									7a0eed35e3
								
							
						
					
					
						commit
						455b2c641c
					
				
					 9 changed files with 75 additions and 118 deletions
				
			
		|  | @ -413,10 +413,9 @@ | |||
|     "service:electricity", | ||||
|     "seating", | ||||
|     "dog-access", | ||||
|     "internet", | ||||
|     "internet-fee", | ||||
|     "internet-ssid", | ||||
|     "reviews" | ||||
|     "internet-all", | ||||
|     "reviews", | ||||
|     "toilet_at_amenity_lib.all" | ||||
|   ], | ||||
|   "filter": [ | ||||
|     "open_now", | ||||
|  |  | |||
|  | @ -1158,12 +1158,23 @@ | |||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "builtin": | ||||
|     "description", | ||||
|       "override": { | ||||
|         "labels": [ | ||||
|           "amenity-no-prefix", | ||||
|           "no-prefix", | ||||
|           "relevant-questions" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "id": "wheelchair-group", | ||||
|       "labels": [ | ||||
|         "relevant-questions", | ||||
|         "prefixed" | ||||
|         "prefixed", | ||||
|         "amenity-prefixed" | ||||
|       ], | ||||
|       "render": { | ||||
|         "special": { | ||||
|  | @ -1179,7 +1190,8 @@ | |||
|         "relevant-questions", | ||||
|         "wheelchair", | ||||
|         "hidden", | ||||
|         "no-prefix" | ||||
|         "no-prefix", | ||||
|         "amenity-no-prefix" | ||||
|       ], | ||||
|       "question": { | ||||
|         "en": "Is there a dedicated toilet for wheelchair users?", | ||||
|  | @ -1190,7 +1202,8 @@ | |||
|         "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?" | ||||
|         "es": "¿Hay un baño dedicado para usuarios de sillas de ruedas?", | ||||
|         "sl": "Ali je tu stranišče namenjeno invalidom na vozičku?" | ||||
|       }, | ||||
|       "mappings": [ | ||||
|         { | ||||
|  | @ -1219,7 +1232,8 @@ | |||
|             "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" | ||||
|             "cs": "Žádný bezbariérový přístup", | ||||
|             "sl": "Ni dostopno invalidom na vozičku" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|  | @ -1253,7 +1267,8 @@ | |||
|         "wheelchair", | ||||
|         "hidden", | ||||
|         "relevant-questions", | ||||
|         "prefixed" | ||||
|         "prefixed", | ||||
|         "amenity-prefixed" | ||||
|       ], | ||||
|       "render": { | ||||
|         "special": { | ||||
|  | @ -1279,7 +1294,8 @@ | |||
|         "wheelchair", | ||||
|         "hidden", | ||||
|         "relevant-questions", | ||||
|         "prefixed" | ||||
|         "prefixed", | ||||
|         "amenity-prefixed" | ||||
|       ], | ||||
|       "render": { | ||||
|         "special": { | ||||
|  | @ -1297,7 +1313,8 @@ | |||
|       "labels": [ | ||||
|         "hidden", | ||||
|         "relevant-questions", | ||||
|         "prefixed" | ||||
|         "prefixed", | ||||
|         "amenity-prefixed" | ||||
|       ], | ||||
|       "render": { | ||||
|         "en": "Wheelchair accessible toilet", | ||||
|  | @ -1332,7 +1349,7 @@ | |||
|       ] | ||||
|     }, | ||||
|     { | ||||
|       "id": "wheelchair-access", | ||||
|       "id": "toilet-wheelchair-access", | ||||
|       "question": { | ||||
|         "en": "Is the wheelchair-accessible toilet locked?", | ||||
|         "nl": "Is de rolstoeltoegankelijke toilet op slot?" | ||||
|  | @ -1359,7 +1376,8 @@ | |||
|         "hidden", | ||||
|         "wheelchair", | ||||
|         "relevant-questions", | ||||
|         "prefixed" | ||||
|         "prefixed", | ||||
|         "amenity-prefixed" | ||||
|       ], | ||||
|       "mappings": [ | ||||
|         { | ||||
|  | @ -1477,7 +1495,8 @@ | |||
|       "labels": [ | ||||
|         "wheelchair", | ||||
|         "hidden", | ||||
|         "relevant-questions" | ||||
|         "relevant-questions", | ||||
|         "amenity-prefixed" | ||||
|       ], | ||||
|       "render": { | ||||
|         "special": { | ||||
|  | @ -1492,7 +1511,8 @@ | |||
|         "labels+": [ | ||||
|           "hidden", | ||||
|         "prefixed", | ||||
|         "adult-changing-table" | ||||
|           "adult-changing-table", | ||||
|           "amenity-prefixed" | ||||
|       ], | ||||
|         "condition": { | ||||
|           "and": [ | ||||
|  | @ -1508,7 +1528,8 @@ | |||
|         "prefixed", | ||||
|         "hidden", | ||||
|         "relevant-questions", | ||||
|         "adult-changing-table" | ||||
|         "adult-changing-table", | ||||
|         "amenity-prefixed" | ||||
|       ], | ||||
|       "question": { | ||||
|         "en": "Does this toilet have an adult changing table?", | ||||
|  | @ -1538,7 +1559,8 @@ | |||
|         "labels+": [ | ||||
|           "hidden", | ||||
|           "prefixed", | ||||
|           "adult-changing-table" | ||||
|           "adult-changing-table", | ||||
|           "amenity-prefixed" | ||||
|         ], | ||||
|         "condition": { | ||||
|           "and+": [ | ||||
|  | @ -1553,7 +1575,8 @@ | |||
|       "labels": [ | ||||
|         "hidden", | ||||
|         "relevant-questions", | ||||
|         "adult-changing-table" | ||||
|         "adult-changing-table", | ||||
|         "amenity-prefixed" | ||||
|       ], | ||||
|       "render": { | ||||
|         "special": { | ||||
|  |  | |||
|  | @ -188,93 +188,6 @@ | |||
|           "relevant_questions" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "id": "toilets-wheelchair", | ||||
|       "labels": [ | ||||
|         "wheelchair", | ||||
|         "hidden" | ||||
|       ], | ||||
|       "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": "Existuje vyhrazená toaleta pro vozíčkáře?", | ||||
|         "sl": "Ali je tu stranišče namenjeno invalidom na vozičku?", | ||||
|         "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 vyhrazená toaleta pro vozíčkáře" | ||||
|           }, | ||||
|           "if": "toilets:wheelchair=yes" | ||||
|         }, | ||||
|         { | ||||
|           "if": "toilets: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", | ||||
|             "sl": "Ni dostopno invalidom na vozičku" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "toilets: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": "Sols hi ha 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": "questions-wheelchair", | ||||
|       "labels": [ | ||||
|         "wheelchair", | ||||
|         "hidden" | ||||
|       ], | ||||
|       "render": { | ||||
|         "special": { | ||||
|           "type": "questions", | ||||
|           "labels": "wheelchair", | ||||
|           "show_all": "yes" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "builtin": "description", | ||||
|       "override": { | ||||
|         "render": "{toilets:description}", | ||||
|         "freeform": { | ||||
|           "key": "toilets:description", | ||||
|           "type": "string" | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   ], | ||||
|   "filter": [ | ||||
|  |  | |||
|  | @ -12,7 +12,8 @@ | |||
|         "special": { | ||||
|           "type": "group", | ||||
|           "header": "grouptitle", | ||||
|           "labels": "toilet-questions" | ||||
|           "labels": "toilet-questions", | ||||
|           "blacklist": "wheelchair;wheelchair-title;adult-changing-table" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|  |  | |||
|  | @ -270,7 +270,7 @@ class LayerBuilder extends Conversion<object, Map<string, LayerConfigJson>> { | |||
| 
 | ||||
|             for (let i = 0; i < level.ids.length; i++) { | ||||
|                 const id = level.ids[i] | ||||
|                 ScriptUtils.erasableLog(`Building level ${level.level}: validating layer ${i + 1}/${level.ids.length}: ${id}`) | ||||
|                 ScriptUtils.erasableLog(`Building level ${i}: validating layer ${i + 1}/${level.ids.length}: ${id}`) | ||||
|                 if (id === "questions") { | ||||
|                     continue | ||||
|                 } | ||||
|  | @ -362,7 +362,6 @@ class LayerOverviewUtils extends Script { | |||
|         for (const path of sourcefile) { | ||||
|             const hasChange = statSync(path).mtime > targetModified | ||||
|             if (hasChange) { | ||||
|                 console.log("File ", targetfile, " should be updated as ", path, "has been changed") | ||||
|                 return true | ||||
|             } | ||||
|         } | ||||
|  | @ -751,8 +750,13 @@ class LayerOverviewUtils extends Script { | |||
|         for (let i = 0; i < allPaths.length; i++) { | ||||
|             const path = allPaths[i] | ||||
|             ScriptUtils.erasableLog(`Parsing layerConfig ${i + 1}/${allPaths.length}: ${path}                   `) | ||||
|             try { | ||||
| 
 | ||||
|                 const data = JSON.parse(readFileSync(path, "utf8")) | ||||
|             results.push(data) | ||||
|             } catch (e) { | ||||
|                 throw "Could not parse layer file " + path | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -776,7 +780,10 @@ class LayerOverviewUtils extends Script { | |||
|         const layerState = new Map<string, "clean" | "dirty" | "changed">() | ||||
|         console.log("# BUILD PLAN\n\n") | ||||
|         for (const levelInfo of levels) { | ||||
|             console.log(`## LEVEL ${levelInfo.level}${levelInfo.loop ? " (LOOP)" : ""}`) | ||||
|             if (levelInfo.loop) { | ||||
|                 console.log(`(LOOP)`) | ||||
|             } | ||||
|             let allClean = true | ||||
|             for (const id of levelInfo.ids) { | ||||
|                 const deps = dependencyGraph.get(id) ?? [] | ||||
|                 const dirtyDeps = deps.filter(dep => { | ||||
|  | @ -795,8 +802,6 @@ class LayerOverviewUtils extends Script { | |||
|                 if (dirtyDeps.length > 0) { | ||||
|                     layerState.set(id, "dirty") | ||||
|                 } else { | ||||
| 
 | ||||
| 
 | ||||
|                     const sourcePath = `./assets/layers/${id}/${id}.json` | ||||
|                     const targetPath = `./public/assets/generated/layers/${id}.json` | ||||
| 
 | ||||
|  | @ -809,9 +814,15 @@ class LayerOverviewUtils extends Script { | |||
|                     } | ||||
|                 } | ||||
|                 const state = layerState.get(id) | ||||
|                 if (state !== "clean") { | ||||
|                     allClean = false | ||||
|                 console.log(`- ${id} (${state}; ${dirtyDeps.map(dd => dd + "*").join(", ")})`) | ||||
|                 } | ||||
|             } | ||||
|             if (allClean) { | ||||
|                 console.log("\n") | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         const builder = new LayerBuilder(allLayerConfigs, dependencyGraph, levels, layerState, sharedQuestions) | ||||
|  |  | |||
|  | @ -1,7 +1,6 @@ | |||
| import { LayerConfigJson } from "./Json/LayerConfigJson" | ||||
| 
 | ||||
| export interface LevelInfo { | ||||
|     level: number, | ||||
|     ids: string[], | ||||
|     loop?: boolean | ||||
| } | ||||
|  | @ -54,14 +53,11 @@ export class LayerConfigDependencyGraph { | |||
|     public static buildLevels(dependsOn: Map<string, string[]>): LevelInfo[]{ | ||||
| 
 | ||||
|         const levels: LevelInfo[] = [] | ||||
|         let levelIndex = 0 | ||||
|         const seenIds = new Set<string>() | ||||
|         while (Array.from(dependsOn.keys()).length > 0) { | ||||
|             const currentLevel: LevelInfo = { | ||||
|                 ids: <string[]>[], | ||||
|                 level: levelIndex, | ||||
|             } | ||||
|             levelIndex++ | ||||
|             levels.push(currentLevel) | ||||
|             for (const layerId of dependsOn.keys()) { | ||||
|                 const dependencies = dependsOn.get(layerId) | ||||
|  |  | |||
|  | @ -13,6 +13,7 @@ | |||
|   export let selectedElement: Feature | ||||
|   export let tags: UIEventSource<OsmTags> | ||||
|   export let labels: string[] | ||||
|   export let blacklist: string[] | ||||
|   export let header: string | ||||
|   export let layer: LayerConfig | ||||
| 
 | ||||
|  | @ -22,11 +23,15 @@ | |||
|   } | ||||
|   let tagRenderings: TagRenderingConfig[] = [] | ||||
|   let seenIds = new Set<string>() | ||||
|   let blacklistSet = new Set(blacklist) | ||||
|   for (const label of labels) { | ||||
|     for (const tr of layer.tagRenderings) { | ||||
|       if (seenIds.has(tr.id)) { | ||||
|         continue | ||||
|       } | ||||
|       if (blacklistSet.has(tr.id) || tr.labels.some(l => blacklistSet.has(l))) { | ||||
|         continue | ||||
|       } | ||||
|       if (label === tr.id || tr.labels.some((l) => l === label)) { | ||||
|         tagRenderings.push(tr) | ||||
|         seenIds.add(tr.id) | ||||
|  |  | |||
|  | @ -226,7 +226,9 @@ | |||
|           </button> | ||||
|         {/if} | ||||
|         {#if $debug} | ||||
|           Skipped questions are {Array.from($skippedQuestions).join(", ")} | ||||
|           <span class="subtle"> | ||||
|             DBG:Skipped questions are {Array.from($skippedQuestions).join(", ")} | ||||
|           </span> | ||||
|         {/if} | ||||
|       </div> | ||||
|     </LoginToggle> | ||||
|  |  | |||
|  | @ -186,6 +186,11 @@ export default class TagrenderingManipulationSpecialVisualisations { | |||
|                         name: "labels", | ||||
|                         doc: "A `;`-separated list of either identifiers or label names. All tagRenderings matching this value will be shown in the accordion", | ||||
|                     }, | ||||
|                     { | ||||
|                         name: "blacklist", | ||||
|                         required: false, | ||||
|                         doc: "A `;`-separated list of either identifiers or label names. Matching tagrenderings will _not_ be included, even if they are in `labels`" | ||||
|                     } | ||||
|                 ], | ||||
|                 constr( | ||||
|                     state: SpecialVisualizationState, | ||||
|  | @ -194,8 +199,9 @@ export default class TagrenderingManipulationSpecialVisualisations { | |||
|                     selectedElement: Feature, | ||||
|                     layer: LayerConfig | ||||
|                 ): SvelteUIElement { | ||||
|                     const [header, labelsStr] = argument | ||||
|                     const [header, labelsStr, blacklistStr] = argument | ||||
|                     const labels = labelsStr.split(";").map((x) => x.trim()) | ||||
|                     const blacklist = blacklistStr?.split(";")?.map(x => x.trim()) ?? [] | ||||
|                     return new SvelteUIElement(GroupedView, { | ||||
|                         state, | ||||
|                         tags, | ||||
|  | @ -203,6 +209,7 @@ export default class TagrenderingManipulationSpecialVisualisations { | |||
|                         layer, | ||||
|                         header, | ||||
|                         labels, | ||||
|                         blacklist | ||||
|                     }) | ||||
|                 }, | ||||
|             }, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue