ng-keyboard-shortcuts
Version:
Dead Simple Keyboard Shortcuts Management for Angular 2+
89 lines • 9.11 kB
JavaScript
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==