ngx-hotkey
Version:
An easy way to use Hotkeys in Angular.
131 lines • 8.53 kB
JavaScript
/**
* @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=