From c1b68812401bd7acb473f03befbe04cb74696ccd Mon Sep 17 00:00:00 2001 From: rhenck <richard.henck@iqb.hu-berlin.de> Date: Thu, 7 Oct 2021 16:44:10 +0200 Subject: [PATCH] [editor] Allow images for buttons This replaces the label text with an image, which can be uploaded. --- projects/common/element-components/button.component.ts | 5 ++++- projects/common/unit.ts | 1 + .../properties/element-properties.component.html | 9 +++++++++ .../page-view/properties/element-properties.component.ts | 8 ++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/projects/common/element-components/button.component.ts b/projects/common/element-components/button.component.ts index ca4c613c1..ec2be98c2 100644 --- a/projects/common/element-components/button.component.ts +++ b/projects/common/element-components/button.component.ts @@ -5,7 +5,7 @@ import { ButtonElement } from '../unit'; @Component({ selector: 'app-button', template: ` - <button mat-button + <button *ngIf="!elementModel.imageSrc" mat-button (focusin)="onFocusin.emit()" [style.width.%]="100" [style.height.%]="100" @@ -18,6 +18,9 @@ import { ButtonElement } from '../unit'; [style.text-decoration]="elementModel.underline ? 'underline' : ''"> {{elementModel.label}} </button> + <input *ngIf="elementModel.imageSrc" type="image" [src]="elementModel.imageSrc" + [width]="elementModel.width" [height]="elementModel.height" + [style.object-fit]="'scale-down'" alt="Bild nicht gefunden"> ` }) export class ButtonComponent extends ElementComponent { diff --git a/projects/common/unit.ts b/projects/common/unit.ts index a5e0ba089..65dbd7352 100644 --- a/projects/common/unit.ts +++ b/projects/common/unit.ts @@ -83,6 +83,7 @@ export interface TextElement extends SurfaceUIElement { export interface ButtonElement extends TextUIElement, SurfaceUIElement { label: string; + imageSrc?: string; action: undefined | 'previous' | 'next' | 'end'; } diff --git a/projects/editor/src/app/components/unit-view/page-view/properties/element-properties.component.html b/projects/editor/src/app/components/unit-view/page-view/properties/element-properties.component.html index bc6db46b9..4f616d4ec 100644 --- a/projects/editor/src/app/components/unit-view/page-view/properties/element-properties.component.html +++ b/projects/editor/src/app/components/unit-view/page-view/properties/element-properties.component.html @@ -25,6 +25,15 @@ </div> </ng-container> + <div *ngIf="combinedProperties.type === 'button'"> + <input #imageUpload type="file" hidden (click)="loadImage()"> + <button mat-raised-button (click)="imageUpload.click()">Bild laden</button> + <button mat-raised-button (click)="removeImage()">Bild entfernen</button> + <img [src]="combinedProperties.imageSrc" + [style.object-fit]="'scale-down'" + [width]="200"> + </div> + <mat-form-field *ngIf="combinedProperties.appearance" appearance="fill"> <mat-label>Aussehen</mat-label> <mat-select [value]="combinedProperties.appearance" diff --git a/projects/editor/src/app/components/unit-view/page-view/properties/element-properties.component.ts b/projects/editor/src/app/components/unit-view/page-view/properties/element-properties.component.ts index 0ff662218..829ac3d3c 100644 --- a/projects/editor/src/app/components/unit-view/page-view/properties/element-properties.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/properties/element-properties.component.ts @@ -127,4 +127,12 @@ export class ElementPropertiesComponent implements OnInit, OnDestroy { valueList.splice(valueList.indexOf(option), 1); this.updateModel(property, valueList); } + + async loadImage(): Promise<void> { + this.updateModel('imageSrc', await FileService.loadImage()); + } + + removeImage(): void { + this.updateModel('imageSrc', undefined); + } } -- GitLab