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
JavaScript
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==