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