ngx-hotkey
Version:
An easy way to use Hotkeys in Angular.
154 lines (148 loc) • 4.81 kB
JavaScript
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