UNPKG

ngx-hotkey

Version:

An easy way to use Hotkeys in Angular.

154 lines (148 loc) 4.81 kB
import { Injectable, defineInjectable } from '@angular/core'; /** * @fileoverview added by tsickle * Generated from: lib/hotkey.model.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class Hotkey { /** * @param {?} shortcut * @param {?} callback */ constructor(shortcut, callback) { this.shortcut = shortcut; this.callback = callback; this.altKey = false; this.ctrlKey = false; this.metaKey = false; this.shiftKey = false; this.aliases = { 'ctrl': 'control' }; /** @type {?} */ const shortcutFormatted = shortcut.replace(/ /g, '').toLowerCase(); /** @type {?} */ const shortcutSplit = shortcutFormatted.split('+'); for (let i = 0; i < shortcutSplit.length; i++) { /** @type {?} */ let item = shortcutSplit[i]; item = this.aliases[item] || item; if (i === shortcutSplit.length - 1) { this.key = item; continue; } switch (item) { case 'shift': this.shiftKey = true; break; case 'control': this.ctrlKey = true; break; case 'alt': this.altKey = true; break; case 'meta': this.metaKey = true; break; default: console.error(`They shortcut '${shortcut}' is not valid!`); } } } } /** * @fileoverview added by tsickle * Generated from: lib/ngx-hotkey.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ 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 = defineInjectable({ factory: function NgxHotkeyService_Factory() { return new NgxHotkeyService(); }, token: NgxHotkeyService, providedIn: "root" }); /** * @fileoverview added by tsickle * Generated from: public-api.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * Generated from: ngx-hotkey.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { NgxHotkeyService }; //# sourceMappingURL=ngx-hotkey.js.map