From ccbbba56280f0ac0771f2dfa3967eef8233a70cb Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 3 Jul 2025 01:47:22 +0200 Subject: [PATCH] Fix: fix sauna theme --- .../sauna_at_leisure/sauna_at_leisure.json | 157 ++++++++---------- assets/themes/sauna/sauna.json | 6 +- .../AddPrefixToTagRenderingConfig.ts | 40 ++++- 3 files changed, 115 insertions(+), 88 deletions(-) diff --git a/assets/layers/sauna_at_leisure/sauna_at_leisure.json b/assets/layers/sauna_at_leisure/sauna_at_leisure.json index bf6082d12..1bb01a292 100644 --- a/assets/layers/sauna_at_leisure/sauna_at_leisure.json +++ b/assets/layers/sauna_at_leisure/sauna_at_leisure.json @@ -30,90 +30,79 @@ "images", "reviews", { - "builtin": "toilet_at_amenity.toilet-access", - "override": { - "condition": "leisure!=water_park", - "question": { - "en": "Is this sauna publicly accessible?", - "de": "Ist die Sauna öffentlich zugänglich?" - }, - "render": { - "en": "Access is {sauna:access}", - "de": "Zugang ist {sauna:access}", - "fr": "{sauna:access}", - "nl": "{sauna:access}", - "it": "{sauna:access}", - "es": "{sauna:access}", - "da": "{sauna:access}", - "ca": "{sauna:access}", - "cs": "{sauna:access}", - "sl": "{sauna:access}", - "uk": "{sauna:access}" - }, - "freeform": { - "key": "sauna:access" - }, - "mappings": [ - { - "if": "sauna:access=yes", - "then": { - "en": "Public access", - "de": "Der Zugang ist öffentlich", - "fr": "Accès publique", - "nl": "Publiek toegankelijk", - "it": "Accesso pubblico", - "ru": "Свободный доступ", - "es": "Acceso público", - "da": "Offentlig adgang", - "ca": "Accés públic", - "cs": "Veřejný přístup", - "sl": "Javno dostopno" - } - }, - { - "if": "sauna:access=customers", - "then": { - "en": "Only access to customers of the amenity", - "de": "Nur Zugang für Kunden der Einrichtung", - "nl": "Enkel toegankelijk voor klanten van de voorziening", - "fr": "Accessibles uniquement au clients du lieu", - "ca": "Només accessible a clients de l'instal·lació", - "cs": "Přístup pouze zákazníkům zařízení občanské vybavenosti", - "sl": "Samo za stranke lokala", - "es": "Solo acceso para clientes del servicio" - } - }, - { - "if": "sauna:access=no", - "then": { - "en": "Not accessible, even for customers of the amenity", - "de": "Nicht zugänglich, auch nicht für Kunden der Einrichtung", - "nl": "Niet toegankelijk, ook niet voor klanten van de voorziening", - "fr": "Non accessibles, même pour les clients du lieu", - "ca": "No accessible, inclús per als clients de la instal·lació", - "cs": "Není přístupný, a to ani pro zákazníky občanské vybavenosti", - "sl": "Ni dostopno niti za stranke lokala", - "es": "Inaccesible, incluso para clientes del servicio" - } - }, - { - "if": "sauna:access=public", - "then": { - "en": "Public access", - "de": "Öffentlicher Zugang", - "fr": "Accès publique", - "nl": "Publiek toegankelijk", - "it": "Accesso pubblico", - "ru": "Свободный доступ", - "es": "Acceso público", - "da": "Offentlig adgang", - "ca": "Accés públic", - "cs": "Veřejný přístup" - }, - "hideInAnswer": true + "id": "sauna_access", + "condition": "leisure!=water_park", + "question": { + "en": "Is this sauna publicly accessible?", + "de": "Ist die Sauna öffentlich zugänglich?" + }, + "render": { + "en": "Access is {sauna:access}", + "de": "Zugang ist {sauna:access}" + }, + "freeform": { + "key": "sauna:access" + }, + "mappings": [ + { + "if": "sauna:access=yes", + "then": { + "en": "Public access", + "de": "Der Zugang ist öffentlich", + "fr": "Accès publique", + "nl": "Publiek toegankelijk", + "it": "Accesso pubblico", + "ru": "Свободный доступ", + "es": "Acceso público", + "da": "Offentlig adgang", + "ca": "Accés públic", + "cs": "Veřejný přístup", + "sl": "Javno dostopno" } - ] - } + }, + { + "if": "sauna:access=customers", + "then": { + "en": "Only access to customers of the amenity", + "de": "Nur Zugang für Kunden der Einrichtung", + "nl": "Enkel toegankelijk voor klanten van de voorziening", + "fr": "Accessibles uniquement au clients du lieu", + "ca": "Només accessible a clients de l'instal·lació", + "cs": "Přístup pouze zákazníkům zařízení občanské vybavenosti", + "sl": "Samo za stranke lokala", + "es": "Solo acceso para clientes del servicio" + } + }, + { + "if": "sauna:access=no", + "then": { + "en": "Not accessible, even for customers of the amenity", + "de": "Nicht zugänglich, auch nicht für Kunden der Einrichtung", + "nl": "Niet toegankelijk, ook niet voor klanten van de voorziening", + "fr": "Non accessibles, même pour les clients du lieu", + "ca": "No accessible, inclús per als clients de la instal·lació", + "cs": "Není přístupný, a to ani pro zákazníky občanské vybavenosti", + "sl": "Ni dostopno niti za stranke lokala", + "es": "Inaccesible, incluso para clientes del servicio" + } + }, + { + "if": "sauna:access=public", + "then": { + "en": "Public access", + "de": "Öffentlicher Zugang", + "fr": "Accès publique", + "nl": "Publiek toegankelijk", + "it": "Accesso pubblico", + "ru": "Свободный доступ", + "es": "Acceso público", + "da": "Offentlig adgang", + "ca": "Accés públic", + "cs": "Veřejný přístup" + }, + "hideInAnswer": true + } + ] }, "contact", "fixme" @@ -159,4 +148,4 @@ "en": "{name}" } } -} \ No newline at end of file +} diff --git a/assets/themes/sauna/sauna.json b/assets/themes/sauna/sauna.json index c03f737da..b0056e88c 100644 --- a/assets/themes/sauna/sauna.json +++ b/assets/themes/sauna/sauna.json @@ -6,11 +6,11 @@ "en": "Sauna" }, "layers": [ - "./assets/layers/sauna/sauna.json", - "./assets/layers/sauna/sauna_at_leisure.json" + "sauna", + "sauna_at_leisure" ], "description": { "en": "Sauna" }, "icon": "./assets/layers/sauna/sauna.svg" -} \ No newline at end of file +} diff --git a/src/Models/ThemeConfig/Conversion/AddPrefixToTagRenderingConfig.ts b/src/Models/ThemeConfig/Conversion/AddPrefixToTagRenderingConfig.ts index 5feb391f7..176b39459 100644 --- a/src/Models/ThemeConfig/Conversion/AddPrefixToTagRenderingConfig.ts +++ b/src/Models/ThemeConfig/Conversion/AddPrefixToTagRenderingConfig.ts @@ -6,6 +6,7 @@ import { MappingConfigJson, QuestionableTagRenderingConfigJson, } from "../Json/QuestionableTagRenderingConfigJson" +import { Utils } from "../../../Utils" export default class AddPrefixToTagRenderingConfig extends DesugaringStep { private readonly _prefix: string @@ -18,6 +19,40 @@ export default class AddPrefixToTagRenderingConfig extends DesugaringStep "Some argument with a {PREFIX:key}" + * + * // Don't rewrite metatags + * new AddPrefixToTagRenderingConfig("PREFIX").rewriteArguments("Some argument with a {_calculated_key}") // => "Some argument with a {_calculated_key}" + * + + */ + private rewriteArguments(txt: string) { + const regex = /(.*?){([^}]*)}(.*)/s + let match = txt.match(regex) + if (!match) { + return txt + } + let result = "" + while (match) { + const [_, normal, key, leftover] = match + if (key.startsWith("_")) { + result += normal + "{" + key + "}" + } else { + result += normal + "{" + this._prefix + ":" + key + "}" + } + match = leftover.match(regex) + if (!match) { + result += leftover + } + } + if(txt !== result){ + console.log(">>> Rewritten", txt, "into", result) + } + return result + } + /** * * const edit = new AddPrefixToTagRenderingConfig("PREFIX") @@ -29,6 +64,9 @@ export default class AddPrefixToTagRenderingConfig extends DesugaringStep "{opening_hours_table(PREFIX:opening_hours,,)}" + * + * // Should prefix links, e.g. for 'phone' + * new AddPrefixToTagRenderingConfig("PREFIX").updateString("{link({phone},tel:{phone},,,,)}") // => "{link({PREFIX:phone},tel:{PREFIX:phone},,,,)}" */ private updateString(str: string): string { const parsed = SpecialVisualizations.constructSpecification(str) @@ -45,7 +83,7 @@ export default class AddPrefixToTagRenderingConfig extends DesugaringStep