ng-keyboard-shortcuts
Version:
Dead Simple Keyboard Shortcuts Management for Angular 2+
40 lines • 5.14 kB
JavaScript
import { Injectable, NgZone } from "@angular/core";
import { KeyboardShortcutsService } from './ng-keyboard-shortcuts.service';
import * as i0 from "@angular/core";
import * as i1 from "./ng-keyboard-shortcuts.service";
export class KeyboardShortcutsPlugin {
constructor(ngZone, keyboard) {
this.ngZone = ngZone;
this.keyboard = keyboard;
}
supports(eventName) {
return eventName.split('.').includes('shortcut');
}
addEventListener(element, eventName, originalHandler) {
const shortcut = eventName
.split('.');
const preventDefault = shortcut.includes("prevent");
if (shortcut.length === 0) {
throw new Error("please provide a shortcut");
}
const [, key, description, label] = shortcut;
const id = this.keyboard.add({
key,
command(event) {
originalHandler(event);
},
description,
preventDefault,
label
});
return () => {
this.keyboard.remove(id);
};
}
}
KeyboardShortcutsPlugin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: KeyboardShortcutsPlugin, deps: [{ token: i0.NgZone }, { token: i1.KeyboardShortcutsService }], target: i0.ɵɵFactoryTarget.Injectable });
KeyboardShortcutsPlugin.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: KeyboardShortcutsPlugin });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: KeyboardShortcutsPlugin, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.KeyboardShortcutsService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcta2V5Ym9hcmQtc2hvcnRjdXRzLnBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmcta2V5Ym9hcmQtc2hvcnRjdXRzL3NyYy9saWIvbmcta2V5Ym9hcmQtc2hvcnRjdXRzLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQzs7O0FBS3pFLE1BQU0sT0FBTyx1QkFBdUI7SUFHaEMsWUFBb0IsTUFBYyxFQUFVLFFBQWtDO1FBQTFELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUEwQjtJQUM5RSxDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQWlCO1FBQ3RCLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQUVELGdCQUFnQixDQUNaLE9BQU8sRUFDUCxTQUFTLEVBQ1QsZUFBZTtRQUVmLE1BQU0sUUFBUSxHQUFHLFNBQVM7YUFDckIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRWYsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFHO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUNoRDtRQUNELE1BQU0sQ0FBQyxFQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzVDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ3pCLEdBQUc7WUFDSCxPQUFPLENBQUMsS0FBMEI7Z0JBQzlCLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUMxQixDQUFDO1lBQ0QsV0FBVztZQUNYLGNBQWM7WUFDZCxLQUFLO1NBQ1IsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxHQUFHLEVBQUU7WUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUM7SUFDTixDQUFDOztvSEFuQ1EsdUJBQXVCO3dIQUF2Qix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgTmdab25lfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtFVkVOVF9NQU5BR0VSX1BMVUdJTlMsIEV2ZW50TWFuYWdlcn0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7S2V5Ym9hcmRTaG9ydGN1dHNTZXJ2aWNlfSBmcm9tICcuL25nLWtleWJvYXJkLXNob3J0Y3V0cy5zZXJ2aWNlJztcbmltcG9ydCB7U2hvcnRjdXRFdmVudE91dHB1dH0gZnJvbSAnLi9uZy1rZXlib2FyZC1zaG9ydGN1dHMuaW50ZXJmYWNlcyc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEtleWJvYXJkU2hvcnRjdXRzUGx1Z2luIHtcbiAgICBtYW5hZ2VyOiBFdmVudE1hbmFnZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lLCBwcml2YXRlIGtleWJvYXJkOiBLZXlib2FyZFNob3J0Y3V0c1NlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBzdXBwb3J0cyhldmVudE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnROYW1lLnNwbGl0KCcuJykuaW5jbHVkZXMoJ3Nob3J0Y3V0JylcbiAgICB9XG5cbiAgICBhZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIG9yaWdpbmFsSGFuZGxlclxuICAgICk6IEZ1bmN0aW9uIHtcbiAgICAgICAgY29uc3Qgc2hvcnRjdXQgPSBldmVudE5hbWVcbiAgICAgICAgICAgIC5zcGxpdCgnLicpXG5cbiAgICAgICAgY29uc3QgcHJldmVudERlZmF1bHQgPSBzaG9ydGN1dC5pbmNsdWRlcyhcInByZXZlbnRcIik7XG4gICAgICAgIGlmIChzaG9ydGN1dC5sZW5ndGggPT09IDApICB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwbGVhc2UgcHJvdmlkZSBhIHNob3J0Y3V0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFssa2V5LCBkZXNjcmlwdGlvbiwgbGFiZWxdID0gc2hvcnRjdXQ7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5rZXlib2FyZC5hZGQoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgY29tbWFuZChldmVudDogU2hvcnRjdXRFdmVudE91dHB1dCk6IGFueSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxIYW5kbGVyKGV2ZW50KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQsXG4gICAgICAgICAgICBsYWJlbFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5rZXlib2FyZC5yZW1vdmUoaWQpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==