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