UNPKG

ngx-hotkey

Version:

An easy way to use Hotkeys in Angular.

131 lines 8.53 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"; var NgxHotkeyService = /** @class */ (function () { function NgxHotkeyService() { this.hotkeys = []; document.addEventListener('keydown', this.checkKeyDown.bind(this), false); document.addEventListener('keyup', this.onKeyUp.bind(this), false); } /** * @param {?} shortcut * @param {?} callback * @return {?} */ NgxHotkeyService.prototype.add = /** * @param {?} shortcut * @param {?} callback * @return {?} */ function (shortcut, callback) { this.hotkeys.push(new Hotkey(shortcut, callback)); }; /** * @param {?} shortcut * @return {?} */ NgxHotkeyService.prototype.remove = /** * @param {?} shortcut * @return {?} */ function (shortcut) { this.hotkeys = this.hotkeys.filter((/** * @param {?} x * @return {?} */ function (x) { return x.shortcut !== shortcut; })); }; /** * @private * @param {?} event * @return {?} */ NgxHotkeyService.prototype.checkKeyDown = /** * @private * @param {?} event * @return {?} */ function (event) { for (var i = 0; i < this.hotkeys.length; i++) { /** @type {?} */ var hotkey = this.hotkeys[i]; if (this.checkHotKey(event, hotkey) && !this.isTheSameLastHotkeyFired(hotkey)) { this.lastHotkeyFired = hotkey; return hotkey.callback(event); } } return false; }; /** * @private * @return {?} */ NgxHotkeyService.prototype.onKeyUp = /** * @private * @return {?} */ function () { this.lastHotkeyFired = null; return false; }; /** * @private * @param {?} event * @param {?} hotkey * @return {?} */ NgxHotkeyService.prototype.checkHotKey = /** * @private * @param {?} event * @param {?} hotkey * @return {?} */ function (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 {?} */ NgxHotkeyService.prototype.isTheSameLastHotkeyFired = /** * @private * @param {?} hotkey * @return {?} */ function (hotkey) { return hotkey === this.lastHotkeyFired; }; NgxHotkeyService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NgxHotkeyService.ctorParameters = function () { return []; }; /** @nocollapse */ NgxHotkeyService.ngInjectableDef = i0.defineInjectable({ factory: function NgxHotkeyService_Factory() { return new NgxHotkeyService(); }, token: NgxHotkeyService, providedIn: "root" }); return NgxHotkeyService; }()); export { NgxHotkeyService }; if (false) { /** * @type {?} * @private */ NgxHotkeyService.prototype.hotkeys; /** * @type {?} * @private */ NgxHotkeyService.prototype.lastHotkeyFired; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWhvdGtleS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWhvdGtleS8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtaG90a2V5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sTUFBTSxNQUFNLGdCQUFnQixDQUFDOztBQUVwQztJQU9JO1FBSFEsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUkzQixRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkUsQ0FBQzs7Ozs7O0lBRUQsOEJBQUc7Ozs7O0lBQUgsVUFBSSxRQUFnQixFQUFFLFFBQTJDO1FBQzdELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Ozs7O0lBRUQsaUNBQU07Ozs7SUFBTixVQUFPLFFBQWdCO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBdkIsQ0FBdUIsRUFBQyxDQUFDO0lBQ3JFLENBQUM7Ozs7OztJQUVPLHVDQUFZOzs7OztJQUFwQixVQUFxQixLQUFvQjtRQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O2dCQUNwQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDM0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7Z0JBQzlCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNqQztTQUNKO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7Ozs7SUFFTyxrQ0FBTzs7OztJQUFmO1FBQ0ksSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7Ozs7OztJQUVPLHNDQUFXOzs7Ozs7SUFBbkIsVUFBb0IsS0FBb0IsRUFBRSxNQUFjO1FBQ3BELE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTTtlQUM5QixLQUFLLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxPQUFPO2VBQ2hDLEtBQUssQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLE9BQU87ZUFDaEMsS0FBSyxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsUUFBUTtlQUNsQyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDbEQsQ0FBQzs7Ozs7O0lBRU8sbURBQXdCOzs7OztJQUFoQyxVQUFpQyxNQUFjO1FBQzNDLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDM0MsQ0FBQzs7Z0JBL0NKLFVBQVUsU0FBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7Ozs7OzJCQUxEO0NBbURDLEFBaERELElBZ0RDO1NBN0NZLGdCQUFnQjs7Ozs7O0lBQ3pCLG1DQUErQjs7Ozs7SUFDL0IsMkNBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgSG90a2V5IGZyb20gJy4vaG90a2V5Lm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4SG90a2V5U2VydmljZSB7XHJcbiAgICBwcml2YXRlIGhvdGtleXM6IEhvdGtleVtdID0gW107XHJcbiAgICBwcml2YXRlIGxhc3RIb3RrZXlGaXJlZDogSG90a2V5O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmNoZWNrS2V5RG93bi5iaW5kKHRoaXMpLCBmYWxzZSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uS2V5VXAuYmluZCh0aGlzKSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZChzaG9ydGN1dDogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5ob3RrZXlzLnB1c2gobmV3IEhvdGtleShzaG9ydGN1dCwgY2FsbGJhY2spKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUoc2hvcnRjdXQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaG90a2V5cyA9IHRoaXMuaG90a2V5cy5maWx0ZXIoeCA9PiB4LnNob3J0Y3V0ICE9PSBzaG9ydGN1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0tleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaG90a2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBob3RrZXkgPSB0aGlzLmhvdGtleXNbaV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrSG90S2V5KGV2ZW50LCBob3RrZXkpICYmICF0aGlzLmlzVGhlU2FtZUxhc3RIb3RrZXlGaXJlZChob3RrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RIb3RrZXlGaXJlZCA9IGhvdGtleTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBob3RrZXkuY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbktleVVwKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHRoaXMubGFzdEhvdGtleUZpcmVkID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0hvdEtleShldmVudDogS2V5Ym9hcmRFdmVudCwgaG90a2V5OiBIb3RrZXkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZXZlbnQuYWx0S2V5ID09PSBob3RrZXkuYWx0S2V5XHJcbiAgICAgICAgICAgICYmIGV2ZW50LmN0cmxLZXkgPT09IGhvdGtleS5jdHJsS2V5XHJcbiAgICAgICAgICAgICYmIGV2ZW50Lm1ldGFLZXkgPT09IGhvdGtleS5tZXRhS2V5XHJcbiAgICAgICAgICAgICYmIGV2ZW50LnNoaWZ0S2V5ID09PSBob3RrZXkuc2hpZnRLZXlcclxuICAgICAgICAgICAgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09IGhvdGtleS5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc1RoZVNhbWVMYXN0SG90a2V5RmlyZWQoaG90a2V5OiBIb3RrZXkpIHtcclxuICAgICAgICByZXR1cm4gaG90a2V5ID09PSB0aGlzLmxhc3RIb3RrZXlGaXJlZDtcclxuICAgIH1cclxufVxyXG4iXX0=