ngx-hotkey
Version:
An easy way to use Hotkeys in Angular.
188 lines (180 loc) • 6.87 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core')) :
typeof define === 'function' && define.amd ? define('ngx-hotkey', ['exports', '@angular/core'], factory) :
(factory((global['ngx-hotkey'] = {}),global.ng.core));
}(this, (function (exports,i0) { 'use strict';
/**
* @fileoverview added by tsickle
* Generated from: lib/hotkey.model.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var Hotkey = /** @class */ (function () {
function Hotkey(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 {?} */
var shortcutFormatted = shortcut.replace(/ /g, '').toLowerCase();
/** @type {?} */
var shortcutSplit = shortcutFormatted.split('+');
for (var i = 0; i < shortcutSplit.length; i++) {
/** @type {?} */
var 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!");
}
}
}
return Hotkey;
}());
/**
* @fileoverview added by tsickle
* Generated from: lib/ngx-hotkey.service.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
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: i0.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;
}());
/**
* @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
*/
exports.NgxHotkeyService = NgxHotkeyService;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=ngx-hotkey.umd.js.map