From 3d4755db4145d1f67d0da4fd793be1db1be12a19 Mon Sep 17 00:00:00 2001 From: jojohoch <joachim.hoch@iqb.hu-berlin.de> Date: Fri, 9 Dec 2022 10:59:09 +0100 Subject: [PATCH] Convert the labels of variables for the schemer to plain text HTML labels can cause errors in the Test Center for units in XML format. --- docs/release-notes-player.md | 4 ++++ .../cloze/cloze-child-elements/toggle-button.ts | 5 ++++- .../models/elements/compound-elements/likert/likert-row.ts | 2 +- projects/common/models/elements/element.ts | 6 ++++++ projects/common/models/elements/input-elements/drop-list.ts | 2 +- projects/common/models/elements/input-elements/dropdown.ts | 5 ++++- .../elements/input-elements/radio-button-group-complex.ts | 5 ++++- .../models/elements/input-elements/radio-button-group.ts | 5 ++++- 8 files changed, 28 insertions(+), 6 deletions(-) diff --git a/docs/release-notes-player.md b/docs/release-notes-player.md index 926ad8cdd..21fba67db 100644 --- a/docs/release-notes-player.md +++ b/docs/release-notes-player.md @@ -1,9 +1,13 @@ Player ====== + ## 1.28.2 ### Verbesserungen - Ermöglicht die Interaktion mit Elementen, die sich hinter einem Rahmenelement befinden +### Fehlerbehebungen +- Behebt Fehler beim Hochladen von Aufgaben mit HTML-Sonderzeichen ins Testcenter + ## 1.28.1 ### Verbesserungen - Darstellung und Verhalten der Warnmeldung von Formelelementen diff --git a/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/toggle-button.ts b/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/toggle-button.ts index 106a94634..37e173e17 100644 --- a/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/toggle-button.ts +++ b/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/toggle-button.ts @@ -53,7 +53,10 @@ export class ToggleButtonElement extends InputElement { private getAnswerSchemeValues(): AnswerSchemeValue[] { return this.options - .map((option, index) => ({ value: (index + 1).toString(), label: option.text })); + .map((option, index) => ({ + value: (index + 1).toString(), + label: InputElement.stripHTML(option.text) + })); } getElementComponent(): Type<ElementComponent> { diff --git a/projects/common/models/elements/compound-elements/likert/likert-row.ts b/projects/common/models/elements/compound-elements/likert/likert-row.ts index a84d6eead..ac773cfd0 100644 --- a/projects/common/models/elements/compound-elements/likert/likert-row.ts +++ b/projects/common/models/elements/compound-elements/likert/likert-row.ts @@ -41,7 +41,7 @@ export class LikertRowElement extends InputElement { return [ { value: !this.value && this.value !== 0 ? 'null' : (this.value as number + 1).toString(), - label: this.rowLabel.text + label: InputElement.stripHTML(this.rowLabel.text) } // TODO Image ]; } diff --git a/projects/common/models/elements/element.ts b/projects/common/models/elements/element.ts index 647013a97..5a81785c1 100644 --- a/projects/common/models/elements/element.ts +++ b/projects/common/models/elements/element.ts @@ -125,6 +125,12 @@ export abstract class InputElement extends UIElement { } abstract getAnswerScheme(options?: unknown): AnswerScheme; + + static stripHTML(htmlString: string): string { + const parser = new DOMParser(); + const htmlDocument = parser.parseFromString(htmlString, 'text/html'); + return htmlDocument.documentElement.textContent || ''; + } } export abstract class TextInputElement extends InputElement { diff --git a/projects/common/models/elements/input-elements/drop-list.ts b/projects/common/models/elements/input-elements/drop-list.ts index ed39996e0..45532688d 100644 --- a/projects/common/models/elements/input-elements/drop-list.ts +++ b/projects/common/models/elements/input-elements/drop-list.ts @@ -86,7 +86,7 @@ export class DropListElement extends InputElement { return [this, ...valueDropLists] .map(dropList => dropList.value as DragNDropValueObject[]) .flat() - .map(option => ({ value: option.id, label: option.text as string })); + .map(option => ({ value: option.id, label: InputElement.stripHTML(option.text) })); } return []; } diff --git a/projects/common/models/elements/input-elements/dropdown.ts b/projects/common/models/elements/input-elements/dropdown.ts index a9ee3d3ed..c56937718 100644 --- a/projects/common/models/elements/input-elements/dropdown.ts +++ b/projects/common/models/elements/input-elements/dropdown.ts @@ -40,7 +40,10 @@ export class DropdownElement extends InputElement implements PositionedUIElement private getAnswerSchemeValues(): AnswerSchemeValue[] { return this.options - .map((option, index) => ({ value: (index + 1).toString(), label: option.text })); + .map((option, index) => ({ + value: (index + 1).toString(), + label: InputElement.stripHTML(option.text) + })); } getElementComponent(): Type<ElementComponent> { diff --git a/projects/common/models/elements/input-elements/radio-button-group-complex.ts b/projects/common/models/elements/input-elements/radio-button-group-complex.ts index 4cbba18d2..9bea4d8ef 100644 --- a/projects/common/models/elements/input-elements/radio-button-group-complex.ts +++ b/projects/common/models/elements/input-elements/radio-button-group-complex.ts @@ -41,7 +41,10 @@ export class RadioButtonGroupComplexElement extends InputElement implements Posi private getAnswerSchemeValues(): AnswerSchemeValue[] { return this.options - .map((option, index) => ({ value: (index + 1).toString(), label: option.text })); + .map((option, index) => ({ + value: (index + 1).toString(), + label: InputElement.stripHTML(option.text) + })); } getElementComponent(): Type<ElementComponent> { diff --git a/projects/common/models/elements/input-elements/radio-button-group.ts b/projects/common/models/elements/input-elements/radio-button-group.ts index 61e4ec934..2bb84414d 100644 --- a/projects/common/models/elements/input-elements/radio-button-group.ts +++ b/projects/common/models/elements/input-elements/radio-button-group.ts @@ -48,7 +48,10 @@ export class RadioButtonGroupElement extends InputElement implements PositionedU private getAnswerSchemeValues(): AnswerSchemeValue[] { return this.options - .map((option, index) => ({ value: (index + 1).toString(), label: option.text })); + .map((option, index) => ({ + value: (index + 1).toString(), + label: InputElement.stripHTML(option.text) + })); } getElementComponent(): Type<ElementComponent> { -- GitLab