diff --git a/projects/common/app.module.ts b/projects/common/app.module.ts index f7121802cc7617dc5fcef79c7e4aa1b57d02e7ae..7cb261088e86308b5515f87d0daa9e0febd2e686 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 535f412b02d06a9bc7a7ad361dffa947c0363059..c257cdc6cf7b576cb2f184e298bf89e74ca8c8a6 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 0000000000000000000000000000000000000000..99c030b62e33686b3a4a7f91d70396d41d7d8e31 --- /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 1ea51cd9d577f7dbd1e2c51e0d95db1b47829567..dafcb4456b90a358d037a39c6e5ac2551d3cb71b 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 09e5320818590da93cfdff4bfa9c415f38d3ded4..8795ee35183115c70084c293ca631bbd4f32fb80 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 79f51689364ca5473e02c4f0fb0e4f0aad9573db..646d1bc48c6795dba91f0022b5c49efa0d64cc38 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 58c63e365b2844e4095af24fc9971d0093ded24b..b04ac6f606053abe70f2c5e4a438409f5763921a 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 0643051ecace56d21bf6253fa55353b5b8d76c10..b017239151fcb4c6dc943c7cf94bbc8f67beba66 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 0431bce5c8e8d8926ea7d266c2ade9fad0228e7f..76697ed92a4deb596ff91e2962388d7ec35447f9 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;