UNPKG

gentics-ui-core

Version:

This is the common core framework for the Gentics CMS and Mesh UI, and other Angular applications.

102 lines 11.7 kB
import { Directive, ElementRef, Input } from '@angular/core'; import * as i0 from "@angular/core"; /** * Handles autofocus for all ui-core form elements. */ export class AutofocusDirective { constructor(element) { this.element = element; this._autofocus = false; } get autofocus() { return this._autofocus; } set autofocus(value) { this._autofocus = value != null && value !== false; } ngAfterViewInit() { if (this.element && this.element.nativeElement) { this.inputElement = this.element.nativeElement.querySelector('input, .select-input, textarea, button'); if (this._autofocus) { if (!(this.inputElement instanceof HTMLDivElement)) { this.inputElement.autofocus = true; } this.focusNativeInput(); } } } ngOnChanges(changes) { const change = changes['autofocus']; if (change && this.inputElement) { if (!(this.inputElement instanceof HTMLDivElement)) { this.inputElement.autofocus = this._autofocus; } } } ngOnDestroy() { this.cleanupTimer(); this.inputElement = undefined; } // HTML autofocus does not work with ngIf or modals. // Therefore, the input element is focused programatically. focusNativeInput() { this.cleanupTimer(); this.timeout = setTimeout(() => { this.inputElement.focus(); if (typeof HTMLInputElement.prototype.scrollIntoViewIfNeeded === 'function') { // Chrome only (1/2017) this.inputElement.scrollIntoViewIfNeeded(); } else { // Browser support varies try { this.inputElement.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' }); } catch (err) { try { this.inputElement.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'start' }); } catch (err) { this.inputElement.scrollIntoView({ block: 'start' }); } } } }, 50); } cleanupTimer() { if (this.timeout) { clearTimeout(this.timeout); this.timeout = undefined; } } } /** @nocollapse */ AutofocusDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AutofocusDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); /** @nocollapse */ AutofocusDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: AutofocusDirective, selector: "\n gtx-button[autofocus],\n gtx-checkbox[autofocus],\n gtx-date-time-picker[autofocus],\n gtx-file-picker[autofocus],\n gtx-input[autofocus],\n gtx-radio-button[autofocus],\n gtx-search-bar[autofocus],\n gtx-select[autofocus],\n gtx-textarea[autofocus]", inputs: { autofocus: "autofocus" }, usesOnChanges: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AutofocusDirective, decorators: [{ type: Directive, args: [{ selector: ` gtx-button[autofocus], gtx-checkbox[autofocus], gtx-date-time-picker[autofocus], gtx-file-picker[autofocus], gtx-input[autofocus], gtx-radio-button[autofocus], gtx-search-bar[autofocus], gtx-select[autofocus], gtx-textarea[autofocus]` }] }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { autofocus: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2ZvY3VzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kaXJlY3RpdmVzL2F1dG9mb2N1cy9hdXRvZm9jdXMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQXNDLE1BQU0sZUFBZSxDQUFDOztBQUUvRzs7R0FFRztBQWFILE1BQU0sT0FBTyxrQkFBa0I7SUFjM0IsWUFBb0IsT0FBbUI7UUFBbkIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUwvQixlQUFVLEdBQVksS0FBSyxDQUFDO0lBS08sQ0FBQztJQVo1QyxJQUFhLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUFjO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDO0lBQ3ZELENBQUM7SUFTRCxlQUFlO1FBQ1gsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7WUFFdkcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxZQUFZLGNBQWMsQ0FBQyxFQUFFO29CQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7aUJBQ3RDO2dCQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQzNCO1NBQ0o7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLFlBQVksY0FBYyxDQUFDLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDakQ7U0FDSjtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsMkRBQTJEO0lBQ25ELGdCQUFnQjtRQUNwQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFMUIsSUFBSSxPQUFjLGdCQUFnQixDQUFDLFNBQVUsQ0FBQyxzQkFBc0IsS0FBSyxVQUFVLEVBQUU7Z0JBQ2pGLHVCQUF1QjtnQkFDaEIsSUFBSSxDQUFDLFlBQWEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2FBQ3REO2lCQUFNO2dCQUNILHlCQUF5QjtnQkFDekIsSUFBSTtvQkFDQSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQzt3QkFDN0IsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLEtBQUssRUFBRSxTQUFTO3dCQUNoQixNQUFNLEVBQUUsU0FBUztxQkFDcEIsQ0FBQyxDQUFDO2lCQUNOO2dCQUFDLE9BQU8sR0FBRyxFQUFFO29CQUNWLElBQUk7d0JBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7NEJBQzdCLFFBQVEsRUFBRSxRQUFROzRCQUNsQixLQUFLLEVBQUUsT0FBTzs0QkFDZCxNQUFNLEVBQUUsT0FBTzt5QkFDbEIsQ0FBQyxDQUFDO3FCQUNOO29CQUFDLE9BQU8sR0FBRyxFQUFFO3dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDOzRCQUM3QixLQUFLLEVBQUUsT0FBTzt5QkFDakIsQ0FBQyxDQUFDO3FCQUNOO2lCQUNKO2FBQ0o7UUFDTCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sWUFBWTtRQUNoQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1NBQzVCO0lBQ0wsQ0FBQzs7a0lBbkZRLGtCQUFrQjtzSEFBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBWjlCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFOzs7Ozs7Ozs7Z0NBU2tCO2lCQUMvQjtpR0FHZ0IsU0FBUztzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEhhbmRsZXMgYXV0b2ZvY3VzIGZvciBhbGwgdWktY29yZSBmb3JtIGVsZW1lbnRzLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogYFxuICAgICAgICBndHgtYnV0dG9uW2F1dG9mb2N1c10sXG4gICAgICAgIGd0eC1jaGVja2JveFthdXRvZm9jdXNdLFxuICAgICAgICBndHgtZGF0ZS10aW1lLXBpY2tlclthdXRvZm9jdXNdLFxuICAgICAgICBndHgtZmlsZS1waWNrZXJbYXV0b2ZvY3VzXSxcbiAgICAgICAgZ3R4LWlucHV0W2F1dG9mb2N1c10sXG4gICAgICAgIGd0eC1yYWRpby1idXR0b25bYXV0b2ZvY3VzXSxcbiAgICAgICAgZ3R4LXNlYXJjaC1iYXJbYXV0b2ZvY3VzXSxcbiAgICAgICAgZ3R4LXNlbGVjdFthdXRvZm9jdXNdLFxuICAgICAgICBndHgtdGV4dGFyZWFbYXV0b2ZvY3VzXWBcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2ZvY3VzRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgZ2V0IGF1dG9mb2N1cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9mb2N1cztcbiAgICB9XG4gICAgc2V0IGF1dG9mb2N1cyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9hdXRvZm9jdXMgPSB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hdXRvZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIGlucHV0RWxlbWVudDogSFRNTEJ1dHRvbkVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTERpdkVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgIHByaXZhdGUgdGltZW91dDogYW55O1xuXG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHsgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50ICYmIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCAuc2VsZWN0LWlucHV0LCB0ZXh0YXJlYSwgYnV0dG9uJyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9hdXRvZm9jdXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoISh0aGlzLmlucHV0RWxlbWVudCBpbnN0YW5jZW9mIEhUTUxEaXZFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5hdXRvZm9jdXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTmF0aXZlSW5wdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2hhbmdlID0gY2hhbmdlc1snYXV0b2ZvY3VzJ107XG4gICAgICAgIGlmIChjaGFuZ2UgJiYgdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmICghKHRoaXMuaW5wdXRFbGVtZW50IGluc3RhbmNlb2YgSFRNTERpdkVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuYXV0b2ZvY3VzID0gdGhpcy5fYXV0b2ZvY3VzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYW51cFRpbWVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIEhUTUwgYXV0b2ZvY3VzIGRvZXMgbm90IHdvcmsgd2l0aCBuZ0lmIG9yIG1vZGFscy5cbiAgICAvLyBUaGVyZWZvcmUsIHRoZSBpbnB1dCBlbGVtZW50IGlzIGZvY3VzZWQgcHJvZ3JhbWF0aWNhbGx5LlxuICAgIHByaXZhdGUgZm9jdXNOYXRpdmVJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwVGltZXIoKTtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5mb2N1cygpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mICg8YW55PiBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSkuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIC8vIENocm9tZSBvbmx5ICgxLzIwMTcpXG4gICAgICAgICAgICAgICAgKDxhbnk+IHRoaXMuaW5wdXRFbGVtZW50KS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEJyb3dzZXIgc3VwcG9ydCB2YXJpZXNcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lOiAnbmVhcmVzdCdcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZTogJ3N0YXJ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrOiAnc3RhcnQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgNTApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYW51cFRpbWVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMudGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==