From 47ee418448e3d4d102d4917b1e325ec375e61a40 Mon Sep 17 00:00:00 2001
From: jojohoch <joachim.hoch@iqb.hu-berlin.de>
Date: Thu, 2 Jun 2022 13:53:47 +0200
Subject: [PATCH] Fix default for all classes (elements, section, page)

- problem with nullish values
---
 projects/common/models/elements/button/button.ts |  2 +-
 .../cloze-child-elements/text-field-simple.ts    | 16 +++++++++-------
 .../cloze/cloze-child-elements/toggle-button.ts  |  2 +-
 projects/common/models/elements/element.ts       | 10 +++++-----
 .../models/elements/input-elements/slider.ts     |  4 ++--
 .../elements/input-elements/spell-correct.ts     |  4 +++-
 .../models/elements/input-elements/text-area.ts  |  4 +++-
 .../models/elements/input-elements/text-field.ts |  4 +++-
 .../models/elements/media-elements/audio.ts      |  2 +-
 .../models/elements/media-elements/image.ts      |  2 +-
 projects/common/models/elements/text/text.ts     |  1 -
 projects/common/models/page.ts                   |  2 +-
 projects/common/models/section.ts                | 11 +++++------
 .../modules/logging/services/log.service.ts      |  2 +-
 14 files changed, 36 insertions(+), 30 deletions(-)

diff --git a/projects/common/models/elements/button/button.ts b/projects/common/models/elements/button/button.ts
index 271df54bc..595b107c5 100644
--- a/projects/common/models/elements/button/button.ts
+++ b/projects/common/models/elements/button/button.ts
@@ -17,7 +17,7 @@ export class ButtonElement extends UIElement implements PositionedUIElement {
 
   constructor(element: Partial<ButtonElement>, ...args: unknown[]) {
     super(element, ...args);
-    if (element.label) this.label = element.label;
+    if (element.label !== undefined) this.label = element.label;
     if (element.imageSrc) this.imageSrc = element.imageSrc;
     if (element.asLink) this.asLink = element.asLink;
     if (element.action) this.action = element.action;
diff --git a/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/text-field-simple.ts b/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/text-field-simple.ts
index 672d4cca1..8f16d4557 100644
--- a/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/text-field-simple.ts
+++ b/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/text-field-simple.ts
@@ -7,11 +7,11 @@ import {
 } from 'common/components/compound-elements/cloze/cloze-child-elements/text-field-simple.component';
 
 export class TextFieldSimpleElement extends InputElement {
-  minLength: number | undefined;
+  minLength: number | null = null;
   minLengthWarnMessage: string = 'Eingabe zu kurz';
-  maxLength: number | undefined;
+  maxLength: number | null = null;
   maxLengthWarnMessage: string = 'Eingabe zu lang';
-  pattern: string | undefined;
+  pattern: string | null = null;
   patternWarnMessage: string = 'Eingabe entspricht nicht der Vorgabe';
   inputAssistancePreset: InputAssistancePreset = null;
   inputAssistancePosition: 'floating' | 'right' = 'floating';
@@ -26,14 +26,16 @@ export class TextFieldSimpleElement extends InputElement {
   constructor(element: Partial<TextFieldSimpleElement>, ...args: unknown[]) {
     super({ width: 150, height: 30, ...element }, ...args);
     if (element.minLength) this.minLength = element.minLength;
-    if (element.minLengthWarnMessage) this.minLengthWarnMessage = element.minLengthWarnMessage;
+    if (element.minLengthWarnMessage !== undefined) this.minLengthWarnMessage = element.minLengthWarnMessage;
     if (element.maxLength) this.maxLength = element.maxLength;
-    if (element.maxLengthWarnMessage) this.maxLengthWarnMessage = element.maxLengthWarnMessage;
+    if (element.maxLengthWarnMessage !== undefined) this.maxLengthWarnMessage = element.maxLengthWarnMessage;
     if (element.pattern) this.pattern = element.pattern;
-    if (element.patternWarnMessage) this.patternWarnMessage = element.patternWarnMessage;
+    if (element.patternWarnMessage !== undefined) this.patternWarnMessage = element.patternWarnMessage;
     if (element.inputAssistancePreset) this.inputAssistancePreset = element.inputAssistancePreset;
     if (element.inputAssistancePosition) this.inputAssistancePosition = element.inputAssistancePosition;
-    if (element.restrictedToInputAssistanceChars) this.restrictedToInputAssistanceChars = element.restrictedToInputAssistanceChars;
+    if (element.restrictedToInputAssistanceChars !== undefined) {
+      this.restrictedToInputAssistanceChars = element.restrictedToInputAssistanceChars;
+    }
     if (element.showSoftwareKeyboard) this.showSoftwareKeyboard = element.showSoftwareKeyboard;
     if (element.softwareKeyboardShowFrench) this.softwareKeyboardShowFrench = element.softwareKeyboardShowFrench;
     if (element.clearable) this.clearable = element.clearable;
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 155297b27..73ecc5c91 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
@@ -21,7 +21,7 @@ export class ToggleButtonElement extends InputElement {
     if (element.richTextOptions) this.richTextOptions = element.richTextOptions;
     if (element.strikeOtherOptions) this.strikeOtherOptions = element.strikeOtherOptions;
     if (element.verticalOrientation) this.verticalOrientation = element.verticalOrientation;
-    if (element.dynamicWidth !== undefined) this.dynamicWidth = element.dynamicWidth; // TODO klappt das?
+    if (element.dynamicWidth !== undefined) this.dynamicWidth = element.dynamicWidth;
     this.styling = {
       ...ElementFactory.initStylingProps({
         lineHeight: 135,
diff --git a/projects/common/models/elements/element.ts b/projects/common/models/elements/element.ts
index f33d0b191..a8ef1c4f4 100644
--- a/projects/common/models/elements/element.ts
+++ b/projects/common/models/elements/element.ts
@@ -46,8 +46,8 @@ export abstract class UIElement {
       throw Error('No ID for element!');
     }
 
-    if (element.width) this.width = element.width;
-    if (element.height) this.height = element.height;
+    if (element.width !== undefined) this.width = element.width;
+    if (element.height !== undefined) this.height = element.height;
   }
 
   setProperty(property: string, value: UIElementValue): void {
@@ -84,10 +84,10 @@ export abstract class InputElement extends UIElement {
 
   protected constructor(element: Partial<InputElement>, ...args: unknown[]) {
     super(element, ...args);
-    if (element.label) this.label = element.label;
-    if (element.value) this.value = element.value;
+    if (element.label !== undefined) this.label = element.label;
+    if (element.value !== undefined) this.value = element.value;
     if (element.required) this.required = element.required;
-    if (element.requiredWarnMessage) this.requiredWarnMessage = element.requiredWarnMessage;
+    if (element.requiredWarnMessage !== undefined) this.requiredWarnMessage = element.requiredWarnMessage;
     if (element.readOnly) this.readOnly = element.readOnly;
   }
 }
diff --git a/projects/common/models/elements/input-elements/slider.ts b/projects/common/models/elements/input-elements/slider.ts
index 99a58c2dc..f71a9cfb1 100644
--- a/projects/common/models/elements/input-elements/slider.ts
+++ b/projects/common/models/elements/input-elements/slider.ts
@@ -18,8 +18,8 @@ export class SliderElement extends InputElement implements PositionedUIElement {
   constructor(element: Partial<SliderElement>, ...args: unknown[]) {
     super(element, ...args);
     if (element.minValue) this.minValue = element.minValue;
-    if (element.maxValue) this.maxValue = element.maxValue;
-    if (element.showValues) this.showValues = element.showValues;
+    if (element.maxValue !== undefined) this.maxValue = element.maxValue;
+    if (element.showValues !== undefined) this.showValues = element.showValues;
     if (element.barStyle) this.barStyle = element.barStyle;
     if (element.thumbLabel) this.thumbLabel = element.thumbLabel;
     this.position = ElementFactory.initPositionProps(element.position);
diff --git a/projects/common/models/elements/input-elements/spell-correct.ts b/projects/common/models/elements/input-elements/spell-correct.ts
index 7ab614fe5..bbaa278a7 100644
--- a/projects/common/models/elements/input-elements/spell-correct.ts
+++ b/projects/common/models/elements/input-elements/spell-correct.ts
@@ -23,7 +23,9 @@ export class SpellCorrectElement extends InputElement implements PositionedUIEle
     super({ width: 230, height: 80, ...element }, ...args);
     if (element.inputAssistancePreset) this.inputAssistancePreset = element.inputAssistancePreset;
     if (element.inputAssistancePosition) this.inputAssistancePosition = element.inputAssistancePosition;
-    if (element.restrictedToInputAssistanceChars) this.restrictedToInputAssistanceChars = element.restrictedToInputAssistanceChars;
+    if (element.restrictedToInputAssistanceChars !== undefined) {
+      this.restrictedToInputAssistanceChars = element.restrictedToInputAssistanceChars;
+    }
     if (element.showSoftwareKeyboard) this.showSoftwareKeyboard = element.showSoftwareKeyboard;
     if (element.softwareKeyboardShowFrench) this.softwareKeyboardShowFrench = element.softwareKeyboardShowFrench;
     this.position = ElementFactory.initPositionProps(element.position);
diff --git a/projects/common/models/elements/input-elements/text-area.ts b/projects/common/models/elements/input-elements/text-area.ts
index c46037632..df2645318 100644
--- a/projects/common/models/elements/input-elements/text-area.ts
+++ b/projects/common/models/elements/input-elements/text-area.ts
@@ -31,7 +31,9 @@ export class TextAreaElement extends InputElement implements PositionedUIElement
     if (element.rowCount) this.rowCount = element.rowCount;
     if (element.inputAssistancePreset) this.inputAssistancePreset = element.inputAssistancePreset;
     if (element.inputAssistancePosition) this.inputAssistancePosition = element.inputAssistancePosition;
-    if (element.restrictedToInputAssistanceChars) this.restrictedToInputAssistanceChars = element.restrictedToInputAssistanceChars;
+    if (element.restrictedToInputAssistanceChars !== undefined) {
+      this.restrictedToInputAssistanceChars = element.restrictedToInputAssistanceChars;
+    }
     if (element.showSoftwareKeyboard) this.showSoftwareKeyboard = element.showSoftwareKeyboard;
     if (element.softwareKeyboardShowFrench) this.softwareKeyboardShowFrench = element.softwareKeyboardShowFrench;
     this.position = ElementFactory.initPositionProps(element.position);
diff --git a/projects/common/models/elements/input-elements/text-field.ts b/projects/common/models/elements/input-elements/text-field.ts
index d97e86461..aec57c7dd 100644
--- a/projects/common/models/elements/input-elements/text-field.ts
+++ b/projects/common/models/elements/input-elements/text-field.ts
@@ -37,7 +37,9 @@ export class TextFieldElement extends InputElement implements PositionedUIElemen
     if (element.patternWarnMessage) this.patternWarnMessage = element.patternWarnMessage;
     if (element.inputAssistancePreset) this.inputAssistancePreset = element.inputAssistancePreset;
     if (element.inputAssistancePosition) this.inputAssistancePosition = element.inputAssistancePosition;
-    if (element.restrictedToInputAssistanceChars) this.restrictedToInputAssistanceChars = element.restrictedToInputAssistanceChars;
+    if (element.restrictedToInputAssistanceChars !== undefined) {
+      this.restrictedToInputAssistanceChars = element.restrictedToInputAssistanceChars;
+    }
     if (element.showSoftwareKeyboard) this.showSoftwareKeyboard = element.showSoftwareKeyboard;
     if (element.softwareKeyboardShowFrench) this.softwareKeyboardShowFrench = element.softwareKeyboardShowFrench;
     if (element.clearable) this.clearable = element.clearable;
diff --git a/projects/common/models/elements/media-elements/audio.ts b/projects/common/models/elements/media-elements/audio.ts
index e64dd2345..ca2c2712d 100644
--- a/projects/common/models/elements/media-elements/audio.ts
+++ b/projects/common/models/elements/media-elements/audio.ts
@@ -5,7 +5,7 @@ import { ElementComponent } from 'common/directives/element-component.directive'
 import { AudioComponent } from 'common/components/media-elements/audio.component';
 
 export class AudioElement extends PlayerElement implements PositionedUIElement {
-  src: string | undefined;
+  src: string | null = null;
   position: PositionProperties;
 
   constructor(element: Partial<AudioElement>, ...args: unknown[]) {
diff --git a/projects/common/models/elements/media-elements/image.ts b/projects/common/models/elements/media-elements/image.ts
index 9a1c5bebd..4ce17a75b 100644
--- a/projects/common/models/elements/media-elements/image.ts
+++ b/projects/common/models/elements/media-elements/image.ts
@@ -5,7 +5,7 @@ import { ElementComponent } from 'common/directives/element-component.directive'
 import { ImageComponent } from 'common/components/media-elements/image.component';
 
 export class ImageElement extends UIElement implements PositionedUIElement {
-  src: string | undefined;
+  src: string | null = null;
   scale: boolean = false;
   magnifier: boolean = false;
   magnifierSize: number = 100;
diff --git a/projects/common/models/elements/text/text.ts b/projects/common/models/elements/text/text.ts
index 6236b5b4b..8186aedd7 100644
--- a/projects/common/models/elements/text/text.ts
+++ b/projects/common/models/elements/text/text.ts
@@ -8,7 +8,6 @@ import {
 import { Type } from '@angular/core';
 import { ElementComponent } from 'common/directives/element-component.directive';
 import { TextComponent } from 'common/components/text/text.component';
-import { IDManager } from 'common/util/id-manager';
 
 export class TextElement extends UIElement implements PositionedUIElement {
   text: string = 'Lorem ipsum dolor sit amet';
diff --git a/projects/common/models/page.ts b/projects/common/models/page.ts
index e431cf035..f63488b37 100644
--- a/projects/common/models/page.ts
+++ b/projects/common/models/page.ts
@@ -16,7 +16,7 @@ export class Page {
   constructor(page?: Partial<Page>, idManager?: IDManager) {
     if (page?.hasMaxWidth) this.hasMaxWidth = page.hasMaxWidth;
     if (page?.maxWidth) this.maxWidth = page.maxWidth;
-    if (page?.margin) this.margin = page.margin;
+    if (page?.margin !== undefined) this.margin = page.margin;
     if (page?.backgroundColor) this.backgroundColor = page.backgroundColor;
     if (page?.alwaysVisible) this.alwaysVisible = page.alwaysVisible;
     if (page?.alwaysVisiblePagePosition) this.alwaysVisiblePagePosition = page.alwaysVisiblePagePosition;
diff --git a/projects/common/models/section.ts b/projects/common/models/section.ts
index eca8a7555..3fbd1d2fd 100644
--- a/projects/common/models/section.ts
+++ b/projects/common/models/section.ts
@@ -1,5 +1,4 @@
 import { PositionedUIElement, UIElement } from 'common/models/elements/element';
-import { ElementFactory } from 'common/util/element.factory';
 import { ButtonElement } from 'common/models/elements/button/button';
 import { TextElement } from 'common/models/elements/text/text';
 import { TextFieldElement } from 'common/models/elements/input-elements/text-field';
@@ -64,11 +63,11 @@ export class Section {
   constructor(section?: Partial<Section>, idManager?: IDManager) {
     if (section?.height) this.height = section.height;
     if (section?.backgroundColor) this.backgroundColor = section.backgroundColor;
-    if (section?.dynamicPositioning) this.dynamicPositioning = section.dynamicPositioning;
-    if (section?.autoColumnSize) this.autoColumnSize = section.autoColumnSize;
-    if (section?.autoRowSize) this.autoRowSize = section.autoRowSize;
-    if (section?.gridColumnSizes) this.gridColumnSizes = section.gridColumnSizes;
-    if (section?.gridRowSizes) this.gridRowSizes = section.gridRowSizes;
+    if (section?.dynamicPositioning !== undefined) this.dynamicPositioning = section.dynamicPositioning;
+    if (section?.autoColumnSize !== undefined) this.autoColumnSize = section.autoColumnSize;
+    if (section?.autoRowSize !== undefined) this.autoRowSize = section.autoRowSize;
+    if (section?.gridColumnSizes !== undefined) this.gridColumnSizes = section.gridColumnSizes;
+    if (section?.gridRowSizes !== undefined) this.gridRowSizes = section.gridRowSizes;
     if (section?.activeAfterID) this.activeAfterID = section.activeAfterID;
     this.elements =
       section?.elements?.map(element => Section.createElement(element, idManager)) ||
diff --git a/projects/player/modules/logging/services/log.service.ts b/projects/player/modules/logging/services/log.service.ts
index 5083b1370..b66d829bd 100644
--- a/projects/player/modules/logging/services/log.service.ts
+++ b/projects/player/modules/logging/services/log.service.ts
@@ -6,7 +6,7 @@ export enum LogLevel { LOG = 0, INFO = 1, WARN = 2, ERROR = 3, NONE = 4}
   providedIn: 'root'
 })
 export class LogService {
-  static level: LogLevel = 2;
+  static level: LogLevel = 1;
 
   // eslint-disable-next-line  @typescript-eslint/no-explicit-any
   static error(...args: any[]): void {
-- 
GitLab