From fd06f2e24e2e1cea9e4ae24166a9c1e48d8d3b95 Mon Sep 17 00:00:00 2001 From: jojohoch <joachim.hoch@iqb.hu-berlin.de> Date: Fri, 28 Apr 2023 15:28:29 +0200 Subject: [PATCH] [player] Add optional backspace key to keypad with custom preset --- projects/common/models/elements/element.ts | 3 +++ .../text-field-element-properties.component.ts | 6 ++++++ projects/editor/src/assets/i18n/de.json | 1 + .../key-input/components/keypad/keypad.component.ts | 3 ++- projects/player/modules/key-input/configs/key-layout.ts | 9 +++++++-- .../floating-keypad/floating-keypad.component.html | 1 + .../layouts/player-layout/player-layout.component.html | 3 ++- 7 files changed, 22 insertions(+), 4 deletions(-) diff --git a/projects/common/models/elements/element.ts b/projects/common/models/elements/element.ts index aa98e3cba..8d66352c6 100644 --- a/projects/common/models/elements/element.ts +++ b/projects/common/models/elements/element.ts @@ -55,6 +55,7 @@ export abstract class UIElement { (this.player as PlayerProperties)[property] = value; } + // eslint-disable-next-line class-methods-use-this getChildElements(): UIElement[] { return []; } @@ -140,6 +141,7 @@ export abstract class TextInputElement extends InputElement { inputAssistanceFloatingStartPosition: 'startBottom' | 'endCenter' = 'startBottom'; restrictedToInputAssistanceChars: boolean = true; hasArrowKeys: boolean = false; + hasBackspaceKey: boolean = false; showSoftwareKeyboard: boolean = false; softwareKeyboardShowFrench: boolean = false; protected constructor(element: Partial<TextInputElement>) { @@ -156,6 +158,7 @@ export abstract class TextInputElement extends InputElement { this.restrictedToInputAssistanceChars = element.restrictedToInputAssistanceChars; } if (element.hasArrowKeys) this.hasArrowKeys = element.hasArrowKeys; + if (element.hasBackspaceKey) this.hasBackspaceKey = element.hasBackspaceKey; if (element.showSoftwareKeyboard) this.showSoftwareKeyboard = element.showSoftwareKeyboard; if (element.softwareKeyboardShowFrench) this.softwareKeyboardShowFrench = element.softwareKeyboardShowFrench; } diff --git a/projects/editor/src/app/components/properties-panel/model-properties-tab/input-groups/text-field-element-properties.component.ts b/projects/editor/src/app/components/properties-panel/model-properties-tab/input-groups/text-field-element-properties.component.ts index 7644cbc1b..afa65f210 100644 --- a/projects/editor/src/app/components/properties-panel/model-properties-tab/input-groups/text-field-element-properties.component.ts +++ b/projects/editor/src/app/components/properties-panel/model-properties-tab/input-groups/text-field-element-properties.component.ts @@ -165,6 +165,12 @@ import { CombinedProperties } from 'editor/src/app/components/properties-panel/e {{'propertiesPanel.hasArrowKeys' | translate }} </mat-checkbox> + <mat-checkbox *ngIf="combinedProperties.inputAssistancePreset === 'custom'" + [checked]="$any(combinedProperties.hasBackspaceKey)" + (change)="updateModel.emit({ property: 'hasBackspaceKey', value: $event.checked })"> + {{'propertiesPanel.hasBackspaceKey' | translate }} + </mat-checkbox> + <mat-checkbox *ngIf="combinedProperties.type === 'text-area' && combinedProperties.inputAssistancePreset !== null && combinedProperties.hasReturnKey !== undefined" [checked]="$any(combinedProperties.hasReturnKey)" diff --git a/projects/editor/src/assets/i18n/de.json b/projects/editor/src/assets/i18n/de.json index 30a73a693..15ee009a7 100644 --- a/projects/editor/src/assets/i18n/de.json +++ b/projects/editor/src/assets/i18n/de.json @@ -125,6 +125,7 @@ "inputAssistance": "Eingabehilfe", "restrictedToInputAssistanceChars": "Bearbeitung anderer Zeichen verhindern", "hasReturnKey": "Eingabetaste hinzufügen", + "hasBackspaceKey": "Löschtaste hinzufügen", "hasArrowKeys": "Pfeiltasten hinzufügen", "none": "keine", "french": "Französische Sonderzeichen", diff --git a/projects/player/modules/key-input/components/keypad/keypad.component.ts b/projects/player/modules/key-input/components/keypad/keypad.component.ts index e5a96b6b7..1cfedef01 100644 --- a/projects/player/modules/key-input/components/keypad/keypad.component.ts +++ b/projects/player/modules/key-input/components/keypad/keypad.component.ts @@ -17,6 +17,7 @@ export class KeypadComponent implements OnInit { @Input() restrictToAllowedKeys!: boolean; @Input() hasArrowKeys!: boolean; @Input() hasReturnKey!: boolean; + @Input() hasBackspaceKey!: boolean; @Output() backSpaceClicked = new EventEmitter(); @Output() keyClicked = new EventEmitter<string>(); @@ -25,7 +26,7 @@ export class KeypadComponent implements OnInit { layout: KeyInputLayout = { default: [], shift: [], additional: [] }; ngOnInit(): void { - this.layout = KeyLayout.get(this.preset, this.customKeys); + this.layout = KeyLayout.get(this.preset, this.customKeys, this.hasBackspaceKey); } evaluateClickedKeyValue(key: string): void { diff --git a/projects/player/modules/key-input/configs/key-layout.ts b/projects/player/modules/key-input/configs/key-layout.ts index 06430e0fb..0b0f1e4eb 100644 --- a/projects/player/modules/key-input/configs/key-layout.ts +++ b/projects/player/modules/key-input/configs/key-layout.ts @@ -7,7 +7,11 @@ export interface KeyInputLayout { } export class KeyLayout { - static get = (preset: InputAssistancePreset | 'keyboard', customKeys: string = ''): KeyInputLayout => { + static get = ( + preset: InputAssistancePreset | 'keyboard', + customKeys: string = '', + hasBackspaceKey: boolean = false + ): KeyInputLayout => { switch (preset) { case 'french': { return { @@ -134,9 +138,10 @@ export class KeyLayout { }; } default: { // custom + const keys = hasBackspaceKey ? customKeys.split('').concat('Backspace') : customKeys.split(''); return { default: [ - customKeys.split('') + keys ], shift: [[]], additional: [[]] diff --git a/projects/player/src/app/components/floating-keypad/floating-keypad.component.html b/projects/player/src/app/components/floating-keypad/floating-keypad.component.html index a02f478bd..87133764f 100644 --- a/projects/player/src/app/components/floating-keypad/floating-keypad.component.html +++ b/projects/player/src/app/components/floating-keypad/floating-keypad.component.html @@ -15,6 +15,7 @@ [customKeys]="keypadService.elementComponent.elementModel.inputAssistanceCustomKeys" [restrictToAllowedKeys]="keypadService.elementComponent.elementModel.restrictedToInputAssistanceChars" [hasArrowKeys]="keypadService.elementComponent.elementModel.hasArrowKeys" + [hasBackspaceKey]="keypadService.elementComponent.elementModel.hasBackspaceKey" [hasReturnKey]="keypadService.elementComponent.elementModel | hasReturnKey" (backSpaceClicked)="keypadService.deleteCharacters(true)" (keyClicked)="keypadService.enterKey($event)"> diff --git a/projects/player/src/app/components/layouts/player-layout/player-layout.component.html b/projects/player/src/app/components/layouts/player-layout/player-layout.component.html index 333805192..0186c5402 100644 --- a/projects/player/src/app/components/layouts/player-layout/player-layout.component.html +++ b/projects/player/src/app/components/layouts/player-layout/player-layout.component.html @@ -14,7 +14,8 @@ [customKeys]="keypadService.elementComponent.elementModel.inputAssistanceCustomKeys" [restrictToAllowedKeys]="keypadService.elementComponent.elementModel.restrictedToInputAssistanceChars" [hasArrowKeys]="keypadService.elementComponent.elementModel.hasArrowKeys" - [hasReturnKey]="!!keypadService.elementComponent.elementModel.hasReturnKey" + [hasBackspaceKey]="keypadService.elementComponent.elementModel.hasBackspaceKey" + [hasReturnKey]="keypadService.elementComponent.elementModel | hasReturnKey" (backSpaceClicked)="keypadService.deleteCharacters(true)" (keyClicked)="keypadService.enterKey($event)"> </aspect-keypad> -- GitLab