diff --git a/docs/release-notes-player.md b/docs/release-notes-player.md index 926ad8cdd1615c8abbd736ccdd7f504ab9cd9896..21fba67dbe55249860734657f2f00c863cbe7e22 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 106a9463468692eada8edf885cfd179dd5c32f44..37e173e17d5791c789c78b03fd953ec93c52f6d3 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 a84d6eead7ea1c86313b9e37af2224df9d7ce814..ac773cfd0918b09607acacea67b9de688231b426 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 647013a97c73bf661d88483f256e3582fecea545..5a81785c1e79e585145b12d0cd80b066e2c4b90e 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 ed39996e0e3f410b64e602be73e9e9f18c52c057..45532688d138c1130eccf969388799c7123eec39 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 a9ee3d3ed916605ed6b078ee9aedea0d0ed3046c..c56937718a986f2c2695c8182df1a4931d2f85f1 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 4cbba18d254ff681d0be883327c763d030bf747a..9bea4d8ef814696a8d1b566863e71b10e79729a6 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 61e4ec93467b318af80f6a14a050e1698ae5d309..2bb84414de92f741c2d355566612ef5bd81c201e 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> {