From 12ac229d1b708c816766d8e91c93f743b720c826 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 8 Mar 2023 03:37:48 +0100 Subject: [PATCH] chore: improve script to extract questionhints --- Models/ThemeConfig/Conversion/Validation.ts | 25 +++++++++++---------- scripts/fixQuestionHint.ts | 14 ++++++++++-- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Models/ThemeConfig/Conversion/Validation.ts b/Models/ThemeConfig/Conversion/Validation.ts index f77adc5452..bab2435d4f 100644 --- a/Models/ThemeConfig/Conversion/Validation.ts +++ b/Models/ThemeConfig/Conversion/Validation.ts @@ -613,18 +613,19 @@ class MiscTagRenderingChecks extends DesugaringStep { new TypedTranslation(json["question"]), context + ".question" ) - const html = question.ConstructElement() - const divs = Array.from(html.getElementsByTagName("div")) - const spans = Array.from(html.getElementsByTagName("span")) - const brs = Array.from(html.getElementsByTagName("br")) - const subtles = Array.from(html.getElementsByClassName("subtle")) - if (divs.length + spans.length + brs.length + subtles.length > 0) { - warnings.push( - "At " + - context + - ": the question contains a div, a span, a br or an element with class 'subtle'. Please, use a `questionHint` instead.\n The question is: " + - question.textFor("en") - ) + for (const lng of question.SupportedLanguages()) { + const html = document.createElement("p") + html.innerHTML = question.textFor(lng) + const divs = Array.from(html.getElementsByTagName("div")) + const spans = Array.from(html.getElementsByTagName("span")) + const brs = Array.from(html.getElementsByTagName("br")) + const subtles = Array.from(html.getElementsByClassName("subtle")) + if (divs.length + spans.length + brs.length + subtles.length > 0) { + warnings.push( + `At ${context}: the question for ${lng} contains a div, a span, a br or an element with class 'subtle'. Please, use a \`questionHint\` instead. + The question is: ${question.textFor(lng)}` + ) + } } } return { diff --git a/scripts/fixQuestionHint.ts b/scripts/fixQuestionHint.ts index 2574d50367..7f52bbab6c 100644 --- a/scripts/fixQuestionHint.ts +++ b/scripts/fixQuestionHint.ts @@ -37,10 +37,20 @@ class ExtractQuestionHint extends DesugaringStep = {} for (const language in json.question) { - const parts = json.question[language].split(/
/i) + const q = json.question[language] + const parts = q.split(/
/i) if (parts.length == 2) { json.question[language] = parts[0] hint[language] = new FixedUiElement(parts[1]).ConstructElement().textContent + continue + } + + const divStart = q.indexOf(" 0) { + json.question[language] = q.substring(0, divStart) + hint[language] = new FixedUiElement( + q.substring(divStart) + ).ConstructElement().textContent } } if (Object.keys(hint).length > 0) { @@ -83,7 +93,7 @@ class FixQuestionHint extends Script { } const layers: LayerConfigJson[] = contents["layers"] ?? [contents] for (const layer of layers) { - for (let i = 0; i < layer.tagRenderings.length; i++) { + for (let i = 0; i < layer.tagRenderings?.length; i++) { const tagRendering = layer.tagRenderings[i] if (typeof tagRendering !== "object" || tagRendering["question"] === undefined) { continue