UNPKG

ngx-hotkey

Version:

An easy way to use Hotkeys in Angular.

100 lines 7.52 kB
/** * @fileoverview added by tsickle * Generated from: lib/ngx-hotkey.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import Hotkey from './hotkey.model'; import * as i0 from "@angular/core"; export class NgxHotkeyService { constructor() { this.hotkeys = []; document.addEventListener('keydown', this.checkKeyDown.bind(this), false); document.addEventListener('keyup', this.onKeyUp.bind(this), false); } /** * @param {?} shortcut * @param {?} callback * @return {?} */ add(shortcut, callback) { this.hotkeys.push(new Hotkey(shortcut, callback)); } /** * @param {?} shortcut * @return {?} */ remove(shortcut) { this.hotkeys = this.hotkeys.filter((/** * @param {?} x * @return {?} */ x => x.shortcut !== shortcut)); } /** * @private * @param {?} event * @return {?} */ checkKeyDown(event) { for (let i = 0; i < this.hotkeys.length; i++) { /** @type {?} */ const hotkey = this.hotkeys[i]; if (this.checkHotKey(event, hotkey) && !this.isTheSameLastHotkeyFired(hotkey)) { this.lastHotkeyFired = hotkey; return hotkey.callback(event); } } return false; } /** * @private * @return {?} */ onKeyUp() { this.lastHotkeyFired = null; return false; } /** * @private * @param {?} event * @param {?} hotkey * @return {?} */ checkHotKey(event, hotkey) { return event.altKey === hotkey.altKey && event.ctrlKey === hotkey.ctrlKey && event.metaKey === hotkey.metaKey && event.shiftKey === hotkey.shiftKey && event.key.toLowerCase() === hotkey.key; } /** * @private * @param {?} hotkey * @return {?} */ isTheSameLastHotkeyFired(hotkey) { return hotkey === this.lastHotkeyFired; } } NgxHotkeyService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NgxHotkeyService.ctorParameters = () => []; /** @nocollapse */ NgxHotkeyService.ngInjectableDef = i0.defineInjectable({ factory: function NgxHotkeyService_Factory() { return new NgxHotkeyService(); }, token: NgxHotkeyService, providedIn: "root" }); if (false) { /** * @type {?} * @private */ NgxHotkeyService.prototype.hotkeys; /** * @type {?} * @private */ NgxHotkeyService.prototype.lastHotkeyFired; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWhvdGtleS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWhvdGtleS8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtaG90a2V5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sTUFBTSxNQUFNLGdCQUFnQixDQUFDOztBQUtwQyxNQUFNLE9BQU8sZ0JBQWdCO0lBSXpCO1FBSFEsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUkzQixRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkUsQ0FBQzs7Ozs7O0lBRUQsR0FBRyxDQUFDLFFBQWdCLEVBQUUsUUFBMkM7UUFDN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7Ozs7SUFFRCxNQUFNLENBQUMsUUFBZ0I7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07Ozs7UUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFDLENBQUM7SUFDckUsQ0FBQzs7Ozs7O0lBRU8sWUFBWSxDQUFDLEtBQW9CO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs7a0JBQ3BDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMzRSxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztnQkFDOUIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pDO1NBQ0o7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOzs7OztJQUVPLE9BQU87UUFDWCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOzs7Ozs7O0lBRU8sV0FBVyxDQUFDLEtBQW9CLEVBQUUsTUFBYztRQUNwRCxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU07ZUFDOUIsS0FBSyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsT0FBTztlQUNoQyxLQUFLLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxPQUFPO2VBQ2hDLEtBQUssQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLFFBQVE7ZUFDbEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2xELENBQUM7Ozs7OztJQUVPLHdCQUF3QixDQUFDLE1BQWM7UUFDM0MsT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUMzQyxDQUFDOzs7WUEvQ0osVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7Ozs7Ozs7O0lBRUcsbUNBQStCOzs7OztJQUMvQiwyQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBIb3RrZXkgZnJvbSAnLi9ob3RrZXkubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hIb3RrZXlTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgaG90a2V5czogSG90a2V5W10gPSBbXTtcclxuICAgIHByaXZhdGUgbGFzdEhvdGtleUZpcmVkOiBIb3RrZXk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuY2hlY2tLZXlEb3duLmJpbmQodGhpcyksIGZhbHNlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25LZXlVcC5iaW5kKHRoaXMpLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkKHNob3J0Y3V0OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmhvdGtleXMucHVzaChuZXcgSG90a2V5KHNob3J0Y3V0LCBjYWxsYmFjaykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZShzaG9ydGN1dDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5ob3RrZXlzID0gdGhpcy5ob3RrZXlzLmZpbHRlcih4ID0+IHguc2hvcnRjdXQgIT09IHNob3J0Y3V0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ob3RrZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhvdGtleSA9IHRoaXMuaG90a2V5c1tpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tIb3RLZXkoZXZlbnQsIGhvdGtleSkgJiYgIXRoaXMuaXNUaGVTYW1lTGFzdEhvdGtleUZpcmVkKGhvdGtleSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEhvdGtleUZpcmVkID0gaG90a2V5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdGtleS5jYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uS2V5VXAoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy5sYXN0SG90a2V5RmlyZWQgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrSG90S2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50LCBob3RrZXk6IEhvdGtleSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBldmVudC5hbHRLZXkgPT09IGhvdGtleS5hbHRLZXlcclxuICAgICAgICAgICAgJiYgZXZlbnQuY3RybEtleSA9PT0gaG90a2V5LmN0cmxLZXlcclxuICAgICAgICAgICAgJiYgZXZlbnQubWV0YUtleSA9PT0gaG90a2V5Lm1ldGFLZXlcclxuICAgICAgICAgICAgJiYgZXZlbnQuc2hpZnRLZXkgPT09IGhvdGtleS5zaGlmdEtleVxyXG4gICAgICAgICAgICAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gaG90a2V5LmtleTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzVGhlU2FtZUxhc3RIb3RrZXlGaXJlZChob3RrZXk6IEhvdGtleSkge1xyXG4gICAgICAgIHJldHVybiBob3RrZXkgPT09IHRoaXMubGFzdEhvdGtleUZpcmVkO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==