From f6a345ee0d1d68091a33893c3413fee1aed5b474 Mon Sep 17 00:00:00 2001 From: rhenck <richard.henck@iqb.hu-berlin.de> Date: Wed, 15 Dec 2021 12:38:51 +0100 Subject: [PATCH] Fix reading of exiting cloze elements The child elements are created directly in the component when reading a serialized cloze. The whole parsing process of cloze elements will be reworked soon. So this probably is a temporary fix. --- .../common/ui-elements/cloze/cloze-element.ts | 41 ++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/projects/common/ui-elements/cloze/cloze-element.ts b/projects/common/ui-elements/cloze/cloze-element.ts index a60430429..2f4901d8d 100644 --- a/projects/common/ui-elements/cloze/cloze-element.ts +++ b/projects/common/ui-elements/cloze/cloze-element.ts @@ -2,11 +2,18 @@ import { ClozePart, CompoundElement, FontElement, - FontProperties, + FontProperties, InputElement, PositionedElement, PositionProperties, UIElement } from '../../models/uI-element'; import { initFontElement, initPositionedElement } from '../../util/unit-interface-initializer'; +import { TextFieldSimpleElement } from '../textfield-simple/text-field-simple-element'; +import { TextFieldElement } from '../text-field/text-field-element'; +import { TextAreaElement } from '../text-area/text-area-element'; +import { CheckboxElement } from '../checkbox/checkbox-element'; +import { DropdownElement } from '../dropdown/dropdown-element'; +import { DropListSimpleElement } from '../drop-list-simple/drop-list-simple'; +import { ToggleButtonElement } from '../toggle-button/toggle-button'; // TODO styles like em dont continue after inserted components @@ -27,7 +34,7 @@ export class ClozeElement extends CompoundElement implements PositionedElement, serializedElement?.parts.forEach((subParts: ClozePart[]) => { subParts.forEach((part: ClozePart) => { if (!['p', 'h1', 'h2', 'h3', 'h4'].includes(part.type)) { - part.value = this.createElement(part.value as UIElement); + part.value = ClozeElement.createElement(part.value as UIElement); } }); }); @@ -36,4 +43,34 @@ export class ClozeElement extends CompoundElement implements PositionedElement, this.width = serializedElement.width || 450; this.height = serializedElement.height || 200; } + + static createElement(elementModel: Partial<UIElement>): InputElement { + let newElement: InputElement; + switch (elementModel.type) { + case 'text-field': + newElement = new TextFieldSimpleElement(elementModel); + (newElement as TextFieldElement).label = ''; + break; + case 'text-area': + newElement = new TextAreaElement(elementModel); + break; + case 'checkbox': + newElement = new CheckboxElement(elementModel); + break; + case 'dropdown': + newElement = new DropdownElement(elementModel); + break; + case 'drop-list': + newElement = new DropListSimpleElement(elementModel); + newElement.height = 25; // TODO weg? + newElement.width = 100; + break; + case 'toggle-button': + newElement = new ToggleButtonElement(elementModel); + break; + default: + throw new Error(`ElementType ${elementModel.type} not found!`); + } + return newElement; + } } -- GitLab