From 850f0d11c594077fe475185e9d76b4b6d89f922a Mon Sep 17 00:00:00 2001 From: rhenck <richard.henck@iqb.hu-berlin.de> Date: Tue, 20 Jul 2021 16:31:12 +0200 Subject: [PATCH] Make textfield and textarea different Elements --- projects/common/app.module.ts | 12 ++++--- projects/common/component-utils.ts | 3 ++ .../element-components/text-area.component.ts | 27 ++++++++++++++++ .../text-field.component.ts | 31 ++++++++----------- projects/common/unit.ts | 10 ++++-- .../ui-element-toolbox.component.html | 6 +++- projects/editor/src/app/id.service.ts | 1 + projects/editor/src/app/model/UnitFactory.ts | 14 +++++++-- projects/editor/src/app/unit.service.ts | 3 ++ 9 files changed, 79 insertions(+), 28 deletions(-) create mode 100644 projects/common/element-components/text-area.component.ts diff --git a/projects/common/app.module.ts b/projects/common/app.module.ts index f7121802c..7cb261088 100644 --- a/projects/common/app.module.ts +++ b/projects/common/app.module.ts @@ -19,16 +19,17 @@ import { MatFormFieldModule } from '@angular/material/form-field'; import { MatSnackBarModule } from '@angular/material/snack-bar'; import { MatTooltipModule } from '@angular/material/tooltip'; +import { TextComponent } from './element-components/text.component'; import { ButtonComponent } from './element-components/button.component'; -import { CorrectionComponent } from './element-components/compound-components/correction.component'; -import { RadioButtonGroupComponent } from './element-components/radio-button-group.component'; -import { CheckboxComponent } from './element-components/checkbox.component'; import { TextFieldComponent } from './element-components/text-field.component'; +import { TextAreaComponent } from './element-components/text-area.component'; +import { CheckboxComponent } from './element-components/checkbox.component'; +import { DropdownComponent } from './element-components/dropdown.component'; +import { RadioButtonGroupComponent } from './element-components/radio-button-group.component'; import { ImageComponent } from './element-components/image.component'; import { VideoComponent } from './element-components/video.component'; import { AudioComponent } from './element-components/audio.component'; -import { TextComponent } from './element-components/text.component'; -import { DropdownComponent } from './element-components/dropdown.component'; +import { CorrectionComponent } from './element-components/compound-components/correction.component'; @NgModule({ imports: [ @@ -47,6 +48,7 @@ import { DropdownComponent } from './element-components/dropdown.component'; ButtonComponent, TextComponent, TextFieldComponent, + TextAreaComponent, ImageComponent, AudioComponent, VideoComponent, diff --git a/projects/common/component-utils.ts b/projects/common/component-utils.ts index 535f412b0..c257cdc6c 100644 --- a/projects/common/component-utils.ts +++ b/projects/common/component-utils.ts @@ -2,6 +2,7 @@ import { ComponentFactory, ComponentFactoryResolver } from '@angular/core'; import { TextComponent } from './element-components/text.component'; import { ButtonComponent } from './element-components/button.component'; import { TextFieldComponent } from './element-components/text-field.component'; +import { TextAreaComponent } from './element-components/text-area.component'; import { CheckboxComponent } from './element-components/checkbox.component'; import { DropdownComponent } from './element-components/dropdown.component'; import { RadioButtonGroupComponent } from './element-components/radio-button-group.component'; @@ -21,6 +22,8 @@ export function getComponentFactory( return componentFactoryResolver.resolveComponentFactory(ButtonComponent); case 'text-field': return componentFactoryResolver.resolveComponentFactory(TextFieldComponent); + case 'text-area': + return componentFactoryResolver.resolveComponentFactory(TextAreaComponent); case 'checkbox': return componentFactoryResolver.resolveComponentFactory(CheckboxComponent); case 'dropdown': diff --git a/projects/common/element-components/text-area.component.ts b/projects/common/element-components/text-area.component.ts new file mode 100644 index 000000000..99c030b62 --- /dev/null +++ b/projects/common/element-components/text-area.component.ts @@ -0,0 +1,27 @@ +import { Component } from '@angular/core'; +import { TextAreaElement } from '../unit'; +import { FormElementComponent } from '../form-element-component.directive'; + +@Component({ + selector: 'app-text-area', + template: ` + <mat-form-field [style.width.px]="elementModel.width" + [style.height.px]="elementModel.height" + [style.background-color]="elementModel.backgroundColor" + [style.color]="elementModel.fontColor" + [style.font-family]="elementModel.font" + [style.font-size.px]="elementModel.fontSize" + [style.font-weight]="elementModel.bold ? 'bold' : ''" + [style.font-style]="elementModel.italic ? 'italic' : ''" + [style.text-decoration]="elementModel.underline ? 'underline' : ''"> + <textarea matInput [formControl]="formElementControl" + placeholder="{{elementModel.label}}" + [(ngModel)]="elementModel.text" + [style.resize]="elementModel.resizeEnabled ? 'both' : 'none'"> + </textarea> + </mat-form-field> + ` +}) +export class TextAreaComponent extends FormElementComponent { + elementModel!: TextAreaElement; +} diff --git a/projects/common/element-components/text-field.component.ts b/projects/common/element-components/text-field.component.ts index 1ea51cd9d..dafcb4456 100644 --- a/projects/common/element-components/text-field.component.ts +++ b/projects/common/element-components/text-field.component.ts @@ -5,24 +5,19 @@ import { FormElementComponent } from '../form-element-component.directive'; @Component({ selector: 'app-text-field', template: ` - <mat-form-field> - <input *ngIf="elementModel.multiline === false" matInput - placeholder="{{elementModel.placeholder}}" - [formControl]="formElementControl"> - <textarea *ngIf="elementModel.multiline === true" matInput - placeholder="{{elementModel.placeholder}}" - [formControl]="formElementControl" - [style.width.px]="elementModel.width" - [style.height.px]="elementModel.height" - [style.background-color]="elementModel.backgroundColor" - [style.color]="elementModel.fontColor" - [style.font-family]="elementModel.font" - [style.font-size.px]="elementModel.fontSize" - [style.font-weight]="elementModel.bold ? 'bold' : ''" - [style.font-style]="elementModel.italic ? 'italic' : ''" - [style.text-decoration]="elementModel.underline ? 'underline' : ''"> - </textarea> - </mat-form-field> + <mat-form-field [style.width.px]="elementModel.width" + [style.height.px]="elementModel.height" + [style.background-color]="elementModel.backgroundColor" + [style.color]="elementModel.fontColor" + [style.font-family]="elementModel.font" + [style.font-size.px]="elementModel.fontSize" + [style.font-weight]="elementModel.bold ? 'bold' : ''" + [style.font-style]="elementModel.italic ? 'italic' : ''" + [style.text-decoration]="elementModel.underline ? 'underline' : ''"> + <input matInput [formControl]="formElementControl" + placeholder="{{elementModel.label}}" + [(ngModel)]="elementModel.text"> + </mat-form-field> ` }) export class TextFieldComponent extends FormElementComponent { diff --git a/projects/common/unit.ts b/projects/common/unit.ts index 09e532081..8795ee351 100644 --- a/projects/common/unit.ts +++ b/projects/common/unit.ts @@ -55,8 +55,14 @@ export interface ButtonElement extends TextUIElement, SurfaceUIElement { } export interface TextFieldElement extends TextUIElement, SurfaceUIElement { - placeholder: string; - multiline: boolean; + label: string; + text: string; +} + +export interface TextAreaElement extends TextUIElement, SurfaceUIElement { + label: string; + text: string; + resizeEnabled: boolean; } export interface CheckboxElement extends TextUIElement, SurfaceUIElement { diff --git a/projects/editor/src/app/components/unit-view/page-view/ui-element-toolbox/ui-element-toolbox.component.html b/projects/editor/src/app/components/unit-view/page-view/ui-element-toolbox/ui-element-toolbox.component.html index 79f516893..646d1bc48 100644 --- a/projects/editor/src/app/components/unit-view/page-view/ui-element-toolbox/ui-element-toolbox.component.html +++ b/projects/editor/src/app/components/unit-view/page-view/ui-element-toolbox/ui-element-toolbox.component.html @@ -13,8 +13,12 @@ Button </button> <button mat-raised-button (click)="addUIElement('text-field')"> + <mat-icon>text_fields</mat-icon> + Eingabefeld + </button> + <button mat-raised-button (click)="addUIElement('text-area')"> <mat-icon>notes</mat-icon> - Textfeld + Eingabefeld (mehrzeilig) </button> <button mat-raised-button (click)="addUIElement('checkbox')"> <mat-icon>check_box</mat-icon> diff --git a/projects/editor/src/app/id.service.ts b/projects/editor/src/app/id.service.ts index 58c63e365..b04ac6f60 100644 --- a/projects/editor/src/app/id.service.ts +++ b/projects/editor/src/app/id.service.ts @@ -12,6 +12,7 @@ export class IdService { text: 0, button: 0, 'text-field': 0, + 'text-area': 0, checkbox: 0, dropdown: 0, radio: 0, diff --git a/projects/editor/src/app/model/UnitFactory.ts b/projects/editor/src/app/model/UnitFactory.ts index 0643051ec..b01723915 100644 --- a/projects/editor/src/app/model/UnitFactory.ts +++ b/projects/editor/src/app/model/UnitFactory.ts @@ -80,13 +80,23 @@ export function createButtonElement(): ButtonElement { export function createTextfieldElement(): TextFieldElement { return { - placeholder: 'DUMMY', - multiline: true, + label: 'Example Label', + text: '', ...createTextUIElement('text-field'), ...createSurfaceUIElement('text-field') }; } +export function createTextareaElement(): TextFieldElement { + return { + label: 'Example Label', + text: '', + ...createTextUIElement('text-area'), + ...createSurfaceUIElement('text-area'), + height: 100 + }; +} + export function createCheckboxElement(): CheckboxElement { return { label: 'Label Checkbox', diff --git a/projects/editor/src/app/unit.service.ts b/projects/editor/src/app/unit.service.ts index 0431bce5c..76697ed92 100644 --- a/projects/editor/src/app/unit.service.ts +++ b/projects/editor/src/app/unit.service.ts @@ -134,6 +134,9 @@ export class UnitService { case 'text-field': newElement = UnitFactory.createTextfieldElement(); break; + case 'text-area': + newElement = UnitFactory.createTextareaElement(); + break; case 'checkbox': newElement = UnitFactory.createCheckboxElement(); break; -- GitLab