Skip to content
Snippets Groups Projects
Commit 0ba9b457 authored by jojohoch's avatar jojohoch
Browse files

Fix start value of TextAreaMath

parent 37c16a07
No related branches found
No related tags found
No related merge requests found
...@@ -10,11 +10,11 @@ import { BehaviorSubject } from 'rxjs'; ...@@ -10,11 +10,11 @@ import { BehaviorSubject } from 'rxjs';
template: ` template: `
@if (type === 'math') { @if (type === 'math') {
<aspect-math-input #inputComponent <aspect-math-input #inputComponent
[fullWidth]="false" [fullWidth]="false"
[value]="value" [value]="value"
(focusIn)="onFocusIn($event)" (focusIn)="onFocusIn($event)"
(focusOut)="focusOut.emit($event)" (focusOut)="focusOut.emit($event)"
(valueChange)="valueChanged.emit({ index: index, value: $event})"> (valueChange)="valueChanged.emit({ index: index, value: $event})">
</aspect-math-input> </aspect-math-input>
} @else { } @else {
<aspect-area-input #inputComponent <aspect-area-input #inputComponent
......
...@@ -33,7 +33,8 @@ import { TextInputComponent } from 'common/directives/text-input-component.direc ...@@ -33,7 +33,8 @@ import { TextInputComponent } from 'common/directives/text-input-component.direc
[style.font-size.px]="elementModel.styling.fontSize" [style.font-size.px]="elementModel.styling.fontSize"
[style.font-weight]="elementModel.styling.bold ? 'bold' : ''" [style.font-weight]="elementModel.styling.bold ? 'bold' : ''"
[style.font-style]="elementModel.styling.italic ? 'italic' : ''" [style.font-style]="elementModel.styling.italic ? 'italic' : ''"
[style.text-decoration]="elementModel.styling.underline ? 'underline' : ''"> [style.text-decoration]="elementModel.styling.underline ? 'underline' : ''"
(click)="selectLastSegment()">
<span class="alignment-fix">&nbsp;</span> <span class="alignment-fix">&nbsp;</span>
@for (segment of segments; track segment; let i = $index) { @for (segment of segments; track segment; let i = $index) {
<aspect-text-area-math-segment <aspect-text-area-math-segment
...@@ -46,7 +47,8 @@ import { TextInputComponent } from 'common/directives/text-input-component.direc ...@@ -46,7 +47,8 @@ import { TextInputComponent } from 'common/directives/text-input-component.direc
(onKeyDown)="onKeyDown.emit($event)" (onKeyDown)="onKeyDown.emit($event)"
(focusIn)="focusChanged.emit({ inputElement: $event, focused: true })" (focusIn)="focusChanged.emit({ inputElement: $event, focused: true })"
(focusOut)="focusChanged.emit({ inputElement: $event, focused: false })" (focusOut)="focusChanged.emit({ inputElement: $event, focused: false })"
(remove)="removeSegment($event)"> (remove)="removeSegment($event)"
(click)="$event.preventDefault(); $event.stopPropagation()">
</aspect-text-area-math-segment> </aspect-text-area-math-segment>
} }
</div> </div>
...@@ -74,13 +76,27 @@ export class TextAreaMathComponent extends TextInputComponent implements OnInit ...@@ -74,13 +76,27 @@ export class TextAreaMathComponent extends TextInputComponent implements OnInit
ngOnInit(): void { ngOnInit(): void {
super.ngOnInit(); super.ngOnInit();
if (this.parentForm) this.segments = this.elementFormControl.value; if (this.parentForm) this.segments = this.elementFormControl.value;
}
private addStartSegment() {
this.segments.push({
type: 'text',
value: ''
});
super.setElementValue(this.segments);
}
addFormula() {
if (this.segments.length === 0) { if (this.segments.length === 0) {
this.segments.push({ type: 'text', value: '' }); this.addStartSegment();
super.setElementValue(this.segments); // wait for rendering of segments
setTimeout(() => this.addNewSegments());
} else {
this.addNewSegments();
} }
} }
addFormula() { private addNewSegments() {
this.segments = this.elementFormControl.value; this.segments = this.elementFormControl.value;
this.updateFocus(this.selectedFocus.value); this.updateFocus(this.selectedFocus.value);
const range = RangeSelectionService.getRange(); const range = RangeSelectionService.getRange();
...@@ -106,6 +122,7 @@ export class TextAreaMathComponent extends TextInputComponent implements OnInit ...@@ -106,6 +122,7 @@ export class TextAreaMathComponent extends TextInputComponent implements OnInit
this.addSegments(true, false, segmentIndex, '', ''); this.addSegments(true, false, segmentIndex, '', '');
} }
super.setElementValue(this.segments); super.setElementValue(this.segments);
// wait for rendering of segments and keyboard animation
setTimeout(() => this.updateFocus(newSegmentIndex), 250); setTimeout(() => this.updateFocus(newSegmentIndex), 250);
} }
...@@ -165,4 +182,12 @@ export class TextAreaMathComponent extends TextInputComponent implements OnInit ...@@ -165,4 +182,12 @@ export class TextAreaMathComponent extends TextInputComponent implements OnInit
private updateFocus(index: number, offset?: number): void { private updateFocus(index: number, offset?: number): void {
this.segmentComponents.toArray()[index].setFocus(offset); this.segmentComponents.toArray()[index].setFocus(offset);
} }
selectLastSegment() {
if (this.segments.length === 0) {
this.addStartSegment();
}
// wait for rendering of segments
setTimeout(() => this.updateFocus(this.segments.length - 1));
}
} }
...@@ -89,7 +89,6 @@ export abstract class TextInputGroupDirective extends ElementFormGroupDirective ...@@ -89,7 +89,6 @@ export abstract class TextInputGroupDirective extends ElementFormGroupDirective
} }
detectHardwareKeyboard(elementModel: UIElement): void { detectHardwareKeyboard(elementModel: UIElement): void {
console.log('detectHardwareKeyboard', elementModel);
if (elementModel.showSoftwareKeyboard) { if (elementModel.showSoftwareKeyboard) {
this.deviceService.hasHardwareKeyboard = true; this.deviceService.hasHardwareKeyboard = true;
this.keyboardService.close(); this.keyboardService.close();
......
...@@ -10,18 +10,15 @@ export abstract class ScrollToInputService extends InputService { ...@@ -10,18 +10,15 @@ export abstract class ScrollToInputService extends InputService {
scrollElement(): void { scrollElement(): void {
if (this.isOpen && this.isElementHiddenByKeyboard()) { if (this.isOpen && this.isElementHiddenByKeyboard()) {
const scrollPositionTarget = this.isViewHighEnoughToCenterElement() ? 'center' : 'start'; const scrollPositionTarget = this.isViewHighEnoughToCenterElement() ? 'center' : 'start';
console.log('scrollPositionTarget', scrollPositionTarget);
this.elementComponent.domElement.scrollIntoView({ block: scrollPositionTarget }); this.elementComponent.domElement.scrollIntoView({ block: scrollPositionTarget });
} }
} }
private isViewHighEnoughToCenterElement(): boolean { private isViewHighEnoughToCenterElement(): boolean {
return window.innerHeight - this.keyboardHeight > return window.innerHeight - this.keyboardHeight > this.elementComponent.domElement.getBoundingClientRect().height;
this.elementComponent.domElement.getBoundingClientRect().height;
} }
private isElementHiddenByKeyboard(): boolean { private isElementHiddenByKeyboard(): boolean {
return window.innerHeight - this.elementComponent.domElement.getBoundingClientRect().bottom < return window.innerHeight - this.elementComponent.domElement.getBoundingClientRect().bottom < this.keyboardHeight;
this.keyboardHeight;
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment