diff --git a/assets/layers/cafe_pub/cafe_pub.json b/assets/layers/cafe_pub/cafe_pub.json index daa55af8f..5aab7dad0 100644 --- a/assets/layers/cafe_pub/cafe_pub.json +++ b/assets/layers/cafe_pub/cafe_pub.json @@ -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", diff --git a/assets/layers/toilet/toilet.json b/assets/layers/toilet/toilet.json index bd7988e06..861637781 100644 --- a/assets/layers/toilet/toilet.json +++ b/assets/layers/toilet/toilet.json @@ -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": { diff --git a/assets/layers/toilet_at_amenity/toilet_at_amenity.json b/assets/layers/toilet_at_amenity/toilet_at_amenity.json index f73cc490d..02b329cf6 100644 --- a/assets/layers/toilet_at_amenity/toilet_at_amenity.json +++ b/assets/layers/toilet_at_amenity/toilet_at_amenity.json @@ -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": [ diff --git a/assets/layers/toilet_at_amenity_lib/toilet_at_amenity_lib.json b/assets/layers/toilet_at_amenity_lib/toilet_at_amenity_lib.json index 1fe0f8169..f084377f3 100644 --- a/assets/layers/toilet_at_amenity_lib/toilet_at_amenity_lib.json +++ b/assets/layers/toilet_at_amenity_lib/toilet_at_amenity_lib.json @@ -12,7 +12,8 @@ "special": { "type": "group", "header": "grouptitle", - "labels": "toilet-questions" + "labels": "toilet-questions", + "blacklist": "wheelchair;wheelchair-title;adult-changing-table" } } }, diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index f5f88ec57..93e83d907 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -270,7 +270,7 @@ class LayerBuilder extends Conversion> { 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} `) - const data = JSON.parse(readFileSync(path, "utf8")) + 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() 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,7 +814,13 @@ 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") } } diff --git a/src/Models/ThemeConfig/LayerConfigDependencyGraph.ts b/src/Models/ThemeConfig/LayerConfigDependencyGraph.ts index a4930b639..f15a4c51d 100644 --- a/src/Models/ThemeConfig/LayerConfigDependencyGraph.ts +++ b/src/Models/ThemeConfig/LayerConfigDependencyGraph.ts @@ -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): LevelInfo[]{ const levels: LevelInfo[] = [] - let levelIndex = 0 const seenIds = new Set() while (Array.from(dependsOn.keys()).length > 0) { const currentLevel: LevelInfo = { ids: [], - level: levelIndex, } - levelIndex++ levels.push(currentLevel) for (const layerId of dependsOn.keys()) { const dependencies = dependsOn.get(layerId) diff --git a/src/UI/Popup/GroupedView.svelte b/src/UI/Popup/GroupedView.svelte index 3255509f0..cb3405d42 100644 --- a/src/UI/Popup/GroupedView.svelte +++ b/src/UI/Popup/GroupedView.svelte @@ -13,6 +13,7 @@ export let selectedElement: Feature export let tags: UIEventSource 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() + 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) diff --git a/src/UI/Popup/TagRendering/Questionbox.svelte b/src/UI/Popup/TagRendering/Questionbox.svelte index 152b0978b..4c9ed9ffe 100644 --- a/src/UI/Popup/TagRendering/Questionbox.svelte +++ b/src/UI/Popup/TagRendering/Questionbox.svelte @@ -226,7 +226,9 @@ {/if} {#if $debug} - Skipped questions are {Array.from($skippedQuestions).join(", ")} + + DBG:Skipped questions are {Array.from($skippedQuestions).join(", ")} + {/if} diff --git a/src/UI/SpecialVisualisations/TagrenderingManipulationSpecialVisualisations.ts b/src/UI/SpecialVisualisations/TagrenderingManipulationSpecialVisualisations.ts index 9700e6af6..62e5dd633 100644 --- a/src/UI/SpecialVisualisations/TagrenderingManipulationSpecialVisualisations.ts +++ b/src/UI/SpecialVisualisations/TagrenderingManipulationSpecialVisualisations.ts @@ -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 }) }, },