UNPKG

ng-keyboard-shortcuts

Version:

Dead Simple Keyboard Shortcuts Management for Angular 2+

89 lines 9.11 kB
import { Directive, ElementRef, Input } from '@angular/core'; import { AllowIn } from './ng-keyboard-shortcuts.interfaces'; import { KeyboardShortcutsService } from './ng-keyboard-shortcuts.service'; import * as i0 from "@angular/core"; import * as i1 from "./ng-keyboard-shortcuts.service"; /** * A directive to be used with "focusable" elements, like: * textarea, input, select. */ export class KeyboardShortcutsDirective { /** * @ignore * @param {KeyboardShortcutsService} keyboard * @param {ElementRef} el */ constructor(keyboard, el) { this.keyboard = keyboard; this.el = el; /** * @ignore * @type {boolean} * @private */ this._disabled = false; } /** * whether to disable the shortcuts for this directive * @param value */ set disabled(value) { this._disabled = value; if (this.clearIds) { this.keyboard.remove(this.clearIds); } setTimeout(() => { if (value === false && this.ngKeyboardShortcuts) { this.clearIds = this.keyboard.add(this.transformInput(this.ngKeyboardShortcuts)); } }); } /** * @ignore * @param {Shortcut[]} shortcuts * @returns {any} */ transformInput(shortcuts) { return shortcuts.map(shortcut => ({ ...shortcut, target: this.el.nativeElement, allowIn: [AllowIn.Select, AllowIn.Input, AllowIn.Textarea] })); } /** * @ignore */ ngOnDestroy() { if (!this.clearIds) { return; } this.keyboard.remove(this.clearIds); } /** * @ignore * @param {SimpleChanges} changes */ ngOnChanges(changes) { const { ngKeyboardShortcuts } = changes; if (this.clearIds) { this.keyboard.remove(this.clearIds); } if (!ngKeyboardShortcuts || !ngKeyboardShortcuts.currentValue) { return; } this.clearIds = this.keyboard.add(this.transformInput(ngKeyboardShortcuts.currentValue)); } } KeyboardShortcutsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: KeyboardShortcutsDirective, deps: [{ token: i1.KeyboardShortcutsService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); KeyboardShortcutsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.7", type: KeyboardShortcutsDirective, selector: "[ngKeyboardShortcuts]", inputs: { ngKeyboardShortcuts: "ngKeyboardShortcuts", disabled: "disabled" }, usesOnChanges: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: KeyboardShortcutsDirective, decorators: [{ type: Directive, args: [{ selector: '[ngKeyboardShortcuts]' }] }], ctorParameters: function () { return [{ type: i1.KeyboardShortcutsService }, { type: i0.ElementRef }]; }, propDecorators: { ngKeyboardShortcuts: [{ type: Input }], disabled: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcta2V5Ym9hcmQtc2hvcnRjdXRzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmcta2V5Ym9hcmQtc2hvcnRjdXRzL3NyYy9saWIvbmcta2V5Ym9hcmQtc2hvcnRjdXRzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQXNDLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBQyxPQUFPLEVBQVcsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQzs7O0FBRXpFOzs7R0FHRztBQUlILE1BQU0sT0FBTywwQkFBMEI7SUFrQ25DOzs7O09BSUc7SUFDSCxZQUFvQixRQUFrQyxFQUFVLEVBQWM7UUFBMUQsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBN0I5RTs7OztXQUlHO1FBQ0ssY0FBUyxHQUFHLEtBQUssQ0FBQztJQXlCMUIsQ0FBQztJQXZCRDs7O09BR0c7SUFDSCxJQUFhLFFBQVEsQ0FBQyxLQUFLO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2QztRQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUM3QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQzthQUNwRjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBRVAsQ0FBQztJQVVEOzs7O09BSUc7SUFDSyxjQUFjLENBQUMsU0FBcUI7UUFDeEMsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixHQUFHLFFBQVE7WUFDWCxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhO1lBQzdCLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO1NBQzdELENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLE1BQU0sRUFBQyxtQkFBbUIsRUFBQyxHQUFHLE9BQU8sQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUU7WUFDM0QsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQzs7dUhBOUVRLDBCQUEwQjsyR0FBMUIsMEJBQTBCOzJGQUExQiwwQkFBMEI7a0JBSHRDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHVCQUF1QjtpQkFDcEM7d0lBVVksbUJBQW1CO3NCQUEzQixLQUFLO2dCQVlPLFFBQVE7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWxsb3dJbiwgU2hvcnRjdXR9IGZyb20gJy4vbmcta2V5Ym9hcmQtc2hvcnRjdXRzLmludGVyZmFjZXMnO1xuaW1wb3J0IHtLZXlib2FyZFNob3J0Y3V0c1NlcnZpY2V9IGZyb20gJy4vbmcta2V5Ym9hcmQtc2hvcnRjdXRzLnNlcnZpY2UnO1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIGJlIHVzZWQgd2l0aCBcImZvY3VzYWJsZVwiIGVsZW1lbnRzLCBsaWtlOlxuICogdGV4dGFyZWEsIGlucHV0LCBzZWxlY3QuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW25nS2V5Ym9hcmRTaG9ydGN1dHNdJ1xufSlcbmV4cG9ydCBjbGFzcyBLZXlib2FyZFNob3J0Y3V0c0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgICAvKipcbiAgICAgKiBjbGVhcklkIHRvIHJlbW92ZSBzaG9ydGN1dHMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjbGVhcklkcztcbiAgICAvKipcbiAgICAgKiBTaG9ydGN1dCBpbnB1dHMgZm9yIHRoZSBkaXJlY3RpdmUuXG4gICAgICogd2lsbCBvbmx5IHdvcmsgd2hlbiB0aGUgZWxlbWVudCBpcyBpbiBmb2N1c1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG5nS2V5Ym9hcmRTaG9ydGN1dHM6IFNob3J0Y3V0W107XG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgc2hvcnRjdXRzIGZvciB0aGlzIGRpcmVjdGl2ZVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5jbGVhcklkcykge1xuICAgICAgICAgICAgdGhpcy5rZXlib2FyZC5yZW1vdmUodGhpcy5jbGVhcklkcyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGZhbHNlICYmIHRoaXMubmdLZXlib2FyZFNob3J0Y3V0cykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJJZHMgPSB0aGlzLmtleWJvYXJkLmFkZCh0aGlzLnRyYW5zZm9ybUlucHV0KHRoaXMubmdLZXlib2FyZFNob3J0Y3V0cykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAcGFyYW0ge0tleWJvYXJkU2hvcnRjdXRzU2VydmljZX0ga2V5Ym9hcmRcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnRSZWZ9IGVsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBrZXlib2FyZDogS2V5Ym9hcmRTaG9ydGN1dHNTZXJ2aWNlLCBwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBwYXJhbSB7U2hvcnRjdXRbXX0gc2hvcnRjdXRzXG4gICAgICogQHJldHVybnMge2FueX1cbiAgICAgKi9cbiAgICBwcml2YXRlIHRyYW5zZm9ybUlucHV0KHNob3J0Y3V0czogU2hvcnRjdXRbXSkge1xuICAgICAgICByZXR1cm4gc2hvcnRjdXRzLm1hcChzaG9ydGN1dCA9PiAoe1xuICAgICAgICAgICAgLi4uc2hvcnRjdXQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZWwubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIGFsbG93SW46IFtBbGxvd0luLlNlbGVjdCwgQWxsb3dJbi5JbnB1dCwgQWxsb3dJbi5UZXh0YXJlYV1cbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsZWFySWRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5rZXlib2FyZC5yZW1vdmUodGhpcy5jbGVhcklkcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBwYXJhbSB7U2ltcGxlQ2hhbmdlc30gY2hhbmdlc1xuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgY29uc3Qge25nS2V5Ym9hcmRTaG9ydGN1dHN9ID0gY2hhbmdlcztcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJJZHMpIHtcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmQucmVtb3ZlKHRoaXMuY2xlYXJJZHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbmdLZXlib2FyZFNob3J0Y3V0cyB8fCAhbmdLZXlib2FyZFNob3J0Y3V0cy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFySWRzID0gdGhpcy5rZXlib2FyZC5hZGQodGhpcy50cmFuc2Zvcm1JbnB1dChuZ0tleWJvYXJkU2hvcnRjdXRzLmN1cnJlbnRWYWx1ZSkpO1xuICAgIH1cbn1cbiJdfQ==