From ccb70e2cd444fde95b630911c7d0d6e44ae4838c Mon Sep 17 00:00:00 2001 From: rhenck <richard.henck@iqb.hu-berlin.de> Date: Fri, 10 Dec 2021 23:12:25 +0100 Subject: [PATCH] [editor] Refactor cloze parser --- .../editor/src/app/services/unit.service.ts | 2 +- projects/editor/src/app/util/cloze-parser.ts | 18 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/projects/editor/src/app/services/unit.service.ts b/projects/editor/src/app/services/unit.service.ts index cf8ca0c3e..d37fcd65b 100644 --- a/projects/editor/src/app/services/unit.service.ts +++ b/projects/editor/src/app/services/unit.service.ts @@ -256,7 +256,7 @@ export class UnitService { this.idService.removeId(element.id); this.idService.addID(<string>value); } else if (property === 'text' && element.type === 'cloze') { - element.setProperty('parts', ClozeParser.parse(value as string, this.idService)); + element.setProperty('parts', ClozeParser.createClozeParts(value as string, this.idService)); } else { element.setProperty(property, value); } diff --git a/projects/editor/src/app/util/cloze-parser.ts b/projects/editor/src/app/util/cloze-parser.ts index 3899137fd..9a7d75cf5 100644 --- a/projects/editor/src/app/util/cloze-parser.ts +++ b/projects/editor/src/app/util/cloze-parser.ts @@ -9,12 +9,8 @@ import { ToggleButtonElement } from '../../../../common/ui-elements/toggle-butto import { IdService } from '../services/id.service'; export abstract class ClozeParser { - static parse(text: string, idService: IdService): ClozePart[][] { - return ClozeParser.createParts(text, idService); - } - - private static createParts(htmlText: string, idService: IdService): ClozePart[][] { - const elementList = ClozeParser.readElementArray(htmlText); + static createClozeParts(htmlText: string, idService: IdService): ClozePart[][] { + const elementList = ClozeParser.createElementList(htmlText); const parts: ClozePart[][] = []; elementList.forEach((element: HTMLParagraphElement | HTMLHeadingElement, i: number) => { @@ -23,7 +19,7 @@ export abstract class ClozeParser { return parts; } - private static readElementArray(htmlText: string): (HTMLParagraphElement | HTMLHeadingElement)[] { + private static createElementList(htmlText: string): (HTMLParagraphElement | HTMLHeadingElement)[] { const el = document.createElement('html'); el.innerHTML = htmlText; return Array.from(el.children[1].children) as (HTMLParagraphElement | HTMLHeadingElement)[]; @@ -34,7 +30,7 @@ export abstract class ClozeParser { element: HTMLParagraphElement | HTMLHeadingElement, partIndex: number, parts: ClozePart[][], idService: IdService ): ClozePart[][] { parts[partIndex] = []; - let [nextSpecialElementIndex, nextElementType] = ClozeParser.getNextSpecialElement(element.innerHTML); + let [nextSpecialElementIndex, nextElementType] = ClozeParser.getNextElementMarker(element.innerHTML); let indexOffset = 0; while (nextSpecialElementIndex !== -1) { @@ -50,7 +46,7 @@ export abstract class ClozeParser { indexOffset = nextSpecialElementIndex + 2; // + 2 to get rid of the marker, i.e. '\b' [nextSpecialElementIndex, nextElementType] = - ClozeParser.getNextSpecialElement(element.innerHTML.substring(indexOffset)); + ClozeParser.getNextElementMarker(element.innerHTML.substring(indexOffset)); } parts[partIndex].push({ type: element.localName, @@ -60,7 +56,7 @@ export abstract class ClozeParser { return parts; } - private static getNextSpecialElement(p: string): [number, string] { + private static getNextElementMarker(p: string): [number, string] { const x = []; if (p.indexOf('\\d') > 0) { x.push(p.indexOf('\\d')); @@ -106,7 +102,7 @@ export abstract class ClozeParser { break; case 'drop-list': newElement = new DropListSimpleElement(elementModel); - newElement.height = 25; + newElement.height = 25; // TODO weg? newElement.width = 100; break; case 'toggle-button': -- GitLab