UNPKG

ng-keyboard-shortcuts

Version:

Dead Simple Keyboard Shortcuts Management for Angular 2+

85 lines 8.3 kB
import { Component, Input } from '@angular/core'; import { KeyboardShortcutsService } from './ng-keyboard-shortcuts.service'; import * as i0 from "@angular/core"; import * as i1 from "./ng-keyboard-shortcuts.service"; /** * A component to bind global shortcuts, can be used multiple times across the app * will remove registered shortcuts when element is removed from DOM. */ export class KeyboardShortcutsComponent { /** * @ignore * @param {KeyboardShortcutsService} keyboard */ constructor(keyboard) { this.keyboard = keyboard; /** * A list of shortcuts. */ this.shortcuts = []; /** * @ignore * list of registered keyboard shortcuts * used for clean up on NgDestroy. */ this.clearIds = []; /** * @ignore */ this._disabled = false; } /** * Disable all shortcuts for this component. */ set disabled(value) { this._disabled = value; if (this.clearIds) { this.keyboard.remove(this.clearIds); this.clearIds = []; } if (value) { return; } this.clearIds = this.keyboard.add(this.shortcuts); } /** * Select a key to listen to, will emit when the selected key is pressed. */ select(key) { return this.keyboard.select(key); } /** * @ignore */ ngOnChanges(changes) { if (!changes['shortcuts'] || !changes['shortcuts'].currentValue) { return; } if (this.clearIds) { this.keyboard.remove(this.clearIds); } if (!this._disabled) { setTimeout(() => (this.clearIds = this.keyboard.add(changes['shortcuts'].currentValue))); } } /** * @ignore */ ngOnDestroy() { this.keyboard.remove(this.clearIds); } } KeyboardShortcutsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: KeyboardShortcutsComponent, deps: [{ token: i1.KeyboardShortcutsService }], target: i0.ɵɵFactoryTarget.Component }); KeyboardShortcutsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.7", type: KeyboardShortcutsComponent, selector: "ng-keyboard-shortcuts", inputs: { shortcuts: "shortcuts", disabled: "disabled" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: KeyboardShortcutsComponent, decorators: [{ type: Component, args: [{ selector: 'ng-keyboard-shortcuts', template: '' }] }], ctorParameters: function () { return [{ type: i1.KeyboardShortcutsService }]; }, propDecorators: { shortcuts: [{ type: Input }], disabled: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcta2V5Ym9hcmQtc2hvcnRjdXRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmcta2V5Ym9hcmQtc2hvcnRjdXRzL3NyYy9saWIvbmcta2V5Ym9hcmQtc2hvcnRjdXRzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULEtBQUssRUFLUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQzs7O0FBSXpFOzs7R0FHRztBQUtILE1BQU0sT0FBTywwQkFBMEI7SUFnQ25DOzs7T0FHRztJQUNILFlBQW9CLFFBQWtDO1FBQWxDLGFBQVEsR0FBUixRQUFRLENBQTBCO1FBbkN0RDs7V0FFRztRQUNNLGNBQVMsR0FBb0MsRUFBRSxDQUFDO1FBRXpEOzs7O1dBSUc7UUFDSyxhQUFRLEdBQWEsRUFBRSxDQUFDO1FBRWhDOztXQUVHO1FBQ0ssY0FBUyxHQUFHLEtBQUssQ0FBQztJQXFCMUIsQ0FBQztJQXBCRDs7T0FFRztJQUNILElBQWEsUUFBUSxDQUFDLEtBQUs7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxLQUFLLEVBQUU7WUFDUCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBU0Q7O09BRUc7SUFDSSxNQUFNLENBQUMsR0FBVztRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQVksRUFBRTtZQUM3RCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUY7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7O3VIQWxFUSwwQkFBMEI7MkdBQTFCLDBCQUEwQiw0SUFGekIsRUFBRTsyRkFFSCwwQkFBMEI7a0JBSnRDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7K0dBS1ksU0FBUztzQkFBakIsS0FBSztnQkFnQk8sUUFBUTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7S2V5Ym9hcmRTaG9ydGN1dHNTZXJ2aWNlfSBmcm9tICcuL25nLWtleWJvYXJkLXNob3J0Y3V0cy5zZXJ2aWNlJztcbmltcG9ydCB7U2hvcnRjdXRJbnB1dCwgU2hvcnRjdXRFdmVudE91dHB1dH0gZnJvbSAnLi9uZy1rZXlib2FyZC1zaG9ydGN1dHMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IHRvIGJpbmQgZ2xvYmFsIHNob3J0Y3V0cywgY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMgYWNyb3NzIHRoZSBhcHBcbiAqIHdpbGwgcmVtb3ZlIHJlZ2lzdGVyZWQgc2hvcnRjdXRzIHdoZW4gZWxlbWVudCBpcyByZW1vdmVkIGZyb20gRE9NLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25nLWtleWJvYXJkLXNob3J0Y3V0cycsXG4gICAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGNsYXNzIEtleWJvYXJkU2hvcnRjdXRzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiBzaG9ydGN1dHMuXG4gICAgICovXG4gICAgQElucHV0KCkgc2hvcnRjdXRzOiBTaG9ydGN1dElucHV0W10gfCBTaG9ydGN1dElucHV0ID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICogbGlzdCBvZiByZWdpc3RlcmVkIGtleWJvYXJkIHNob3J0Y3V0c1xuICAgICAqIHVzZWQgZm9yIGNsZWFuIHVwIG9uIE5nRGVzdHJveS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNsZWFySWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBhbGwgc2hvcnRjdXRzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJJZHMpIHtcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmQucmVtb3ZlKHRoaXMuY2xlYXJJZHMpO1xuICAgICAgICAgICAgdGhpcy5jbGVhcklkcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJJZHMgPSB0aGlzLmtleWJvYXJkLmFkZCh0aGlzLnNob3J0Y3V0cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBwYXJhbSB7S2V5Ym9hcmRTaG9ydGN1dHNTZXJ2aWNlfSBrZXlib2FyZFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUga2V5Ym9hcmQ6IEtleWJvYXJkU2hvcnRjdXRzU2VydmljZSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBhIGtleSB0byBsaXN0ZW4gdG8sIHdpbGwgZW1pdCB3aGVuIHRoZSBzZWxlY3RlZCBrZXkgaXMgcHJlc3NlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxTaG9ydGN1dEV2ZW50T3V0cHV0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmtleWJvYXJkLnNlbGVjdChrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICghY2hhbmdlc1snc2hvcnRjdXRzJ10gfHwgIWNoYW5nZXNbJ3Nob3J0Y3V0cyddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNsZWFySWRzKSB7XG4gICAgICAgICAgICB0aGlzLmtleWJvYXJkLnJlbW92ZSh0aGlzLmNsZWFySWRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLmNsZWFySWRzID0gdGhpcy5rZXlib2FyZC5hZGQoY2hhbmdlc1snc2hvcnRjdXRzJ10uY3VycmVudFZhbHVlKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmtleWJvYXJkLnJlbW92ZSh0aGlzLmNsZWFySWRzKTtcbiAgICB9XG59XG4iXX0=