+import { ViewportScroller } from '@angular/common'
import truncate from 'lodash-es/truncate'
import { Subject } from 'rxjs'
import { debounceTime, distinctUntilChanged } from 'rxjs/operators'
import { Component, ElementRef, forwardRef, Input, OnInit, ViewChild } from '@angular/core'
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'
-import { MarkdownService } from '@app/core'
+import { MarkdownService, ScreenService } from '@app/core'
@Component({
selector: 'my-markdown-textarea',
previewHTML = ''
isMaximized = false
+ maximizeInText = $localize`Maximize editor`
+ maximizeOutText = $localize`Exit maximized editor`
+
private contentChanged = new Subject<string>()
+ private scrollPosition: [number, number]
- constructor (private markdownService: MarkdownService) {}
+ constructor (
+ private viewportScroller: ViewportScroller,
+ private screenService: ScreenService,
+ private markdownService: MarkdownService
+ ) { }
ngOnInit () {
this.contentChanged
this.isMaximized = !this.isMaximized
// Make sure textarea have the focus
- this.textareaElement.nativeElement.focus()
+ // Except on touchscreens devices, the virtual keyboard may move up and hide the textarea in maximized mode
+ if (!this.screenService.isInTouchScreen()) {
+ this.textareaElement.nativeElement.focus()
+ }
// Make sure the window has no scrollbars
if (!this.isMaximized) {
}
private lockBodyScroll () {
+ this.scrollPosition = this.viewportScroller.getScrollPosition()
document.getElementById('content').classList.add('lock-scroll')
}
private unlockBodyScroll () {
document.getElementById('content').classList.remove('lock-scroll')
+ this.viewportScroller.scrollToPosition(this.scrollPosition)
}
private async updatePreviews () {