UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

1,101 lines (1,100 loc) 96.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Injectable } from '@angular/core'; var /** @type {?} */ KEY_MODIFIER = ["ctrl", "shift", "option", "alt", "command", "control"]; var /** @type {?} */ KEY_MODIFIER_CODE = [17, 16, 18, 91, 93, 224]; var KeyboardShortcutService = /** @class */ (function () { function KeyboardShortcutService() { var _this = this; this.DEFAULT_KEYDOWN_MS = 1000; this.DEFAULT_BADGE_SPACE = 3; this.DEFAULT_FADEOUT_MS = 300; this.nameMapping = {}; this.nameHandler = {}; this.keyHandler = {}; this.keyHintAnchor = {}; this.bindedKeys = []; // check key up & down $(document).on('keydown', function (keyEvent) { if (_this.keydownTimer === undefined) { _this.keydownTimer = setTimeout(function () { for (var /** @type {?} */ keyHint in _this.keyHintAnchor) { var /** @type {?} */ shortcutArray = _this.keyHintAnchor[keyHint]; var /** @type {?} */ pass = (keyHint === KEY_MODIFIER[0] && key.control) || (keyHint === KEY_MODIFIER[1] && key.shift) || (keyHint === KEY_MODIFIER[2] && key.option) || (keyHint === KEY_MODIFIER[3] && key.alt) || (keyHint === KEY_MODIFIER[4] && key.command); var /** @type {?} */ outOfModify = true; var /** @type {?} */ passedArray = key.getPressedKeyCodes(); try { for (var passedArray_1 = tslib_1.__values(passedArray), passedArray_1_1 = passedArray_1.next(); !passedArray_1_1.done; passedArray_1_1 = passedArray_1.next()) { var passed = passedArray_1_1.value; if (KEY_MODIFIER_CODE.indexOf(passed) < 0) { outOfModify = false; } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (passedArray_1_1 && !passedArray_1_1.done && (_a = passedArray_1.return)) _a.call(passedArray_1); } finally { if (e_1) throw e_1.error; } } if (pass && outOfModify) { try { for (var shortcutArray_1 = tslib_1.__values(shortcutArray), shortcutArray_1_1 = shortcutArray_1.next(); !shortcutArray_1_1.done; shortcutArray_1_1 = shortcutArray_1.next()) { var shortcut = shortcutArray_1_1.value; var /** @type {?} */ keysArray = _this.getNameKeyControls(shortcut.shortcut); // shortcut as name if (keysArray !== null && keysArray !== undefined) { try { for (var keysArray_1 = tslib_1.__values(keysArray), keysArray_1_1 = keysArray_1.next(); !keysArray_1_1.done; keysArray_1_1 = keysArray_1.next()) { var keyCtrl = keysArray_1_1.value; if (_this.isModifierKeyEqual(keyCtrl, keyEvent)) { _this.addHintKey(shortcut.hintAnchorElements, keyCtrl, shortcut.hintLabel); } /* open here if u want to show all */ // this.addHintKey(shortcut.hintAnchorElements, keyCtrl, shortcut.hintLabel); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (keysArray_1_1 && !keysArray_1_1.done && (_b = keysArray_1.return)) _b.call(keysArray_1); } finally { if (e_2) throw e_2.error; } } } else { // keyCtrl as shortcut var /** @type {?} */ keyCtrl = shortcut.shortcut; _this.addHintKey(shortcut.hintAnchorElements, keyCtrl, shortcut.hintLabel); } } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (shortcutArray_1_1 && !shortcutArray_1_1.done && (_c = shortcutArray_1.return)) _c.call(shortcutArray_1); } finally { if (e_3) throw e_3.error; } } } } var e_1, _a, e_3, _c, e_2, _b; }, _this.DEFAULT_KEYDOWN_MS); } }); $(document).on('keyup', function () { if (_this.keydownTimer !== null && typeof _this.keydownTimer !== 'undefined') { clearTimeout(_this.keydownTimer); } // remove all hint key for (var /** @type {?} */ keyHint in _this.keyHintAnchor) { var /** @type {?} */ shortcutArray = _this.keyHintAnchor[keyHint]; try { for (var shortcutArray_2 = tslib_1.__values(shortcutArray), shortcutArray_2_1 = shortcutArray_2.next(); !shortcutArray_2_1.done; shortcutArray_2_1 = shortcutArray_2.next()) { var shortcut = shortcutArray_2_1.value; _this.removeHintKey(shortcut.hintAnchorElements); } } catch (e_4_1) { e_4 = { error: e_4_1 }; } finally { try { if (shortcutArray_2_1 && !shortcutArray_2_1.done && (_a = shortcutArray_2.return)) _a.call(shortcutArray_2); } finally { if (e_4) throw e_4.error; } } } _this.keydownTimer = undefined; var e_4, _a; }); } /** * @param {?} modKey * @return {?} */ KeyboardShortcutService.prototype.isModifierKey = /** * @param {?} modKey * @return {?} */ function (modKey) { if (modKey === null || modKey === undefined) { return; } return KEY_MODIFIER.indexOf(modKey) >= 0; }; /** * @param {?} keyCtrl * @param {?} keyEvent * @return {?} */ KeyboardShortcutService.prototype.isModifierKeyEqual = /** * @param {?} keyCtrl * @param {?} keyEvent * @return {?} */ function (keyCtrl, keyEvent) { if (keyEvent === undefined || keyCtrl === undefined) { return false; } var /** @type {?} */ index = keyCtrl.indexOf('+'); if (index >= 0) { // has + var /** @type {?} */ split = keyCtrl.split("+"); var /** @type {?} */ singleKey = split[0].toLowerCase(); var /** @type {?} */ currentKey = (keyEvent.key !== undefined) ? keyEvent.key.toLowerCase() : undefined; if (singleKey === 'ctrl') { singleKey = "control"; } else if (singleKey === 'cmd') { singleKey = "command"; } // check cmd btn if (currentKey === 'meta' && (keyEvent.keyCode === 91 || keyEvent.keyCode === 93)) { // for chrome currentKey = "command"; } else if (currentKey === 'meta' && (keyEvent.keyCode === 224)) { // for firefox currentKey = "command"; } if (singleKey === currentKey) { return true; } } return false; }; /** * @param {?} value * @return {?} */ KeyboardShortcutService.prototype.capitalizeFirstLetter = /** * @param {?} value * @return {?} */ function (value) { if (value === null || value === undefined) { return value; } return value.charAt(0).toUpperCase() + value.slice(1); }; /** * @param {?} shortcut * @return {?} */ KeyboardShortcutService.prototype.addNameHintAnchorMap = /** * @param {?} shortcut * @return {?} */ function (shortcut) { if (shortcut === null || shortcut === undefined) { return; } var /** @type {?} */ name = shortcut.shortcut; if (name === null || name === undefined) { return; } name = name.toLowerCase(); var /** @type {?} */ keysArray = this.getNameKeyControls(name); if (keysArray !== null && keysArray !== undefined) { try { for (var keysArray_2 = tslib_1.__values(keysArray), keysArray_2_1 = keysArray_2.next(); !keysArray_2_1.done; keysArray_2_1 = keysArray_2.next()) { var keyCtrl = keysArray_2_1.value; this.addKeyHintAnchorMap(keyCtrl, shortcut); } } catch (e_5_1) { e_5 = { error: e_5_1 }; } finally { try { if (keysArray_2_1 && !keysArray_2_1.done && (_a = keysArray_2.return)) _a.call(keysArray_2); } finally { if (e_5) throw e_5.error; } } } var e_5, _a; }; /** * @param {?} shortcut * @return {?} */ KeyboardShortcutService.prototype.removeNameHintAnchorMap = /** * @param {?} shortcut * @return {?} */ function (shortcut) { if (shortcut === null || shortcut === undefined) { return; } var /** @type {?} */ name = shortcut.shortcut; if (name === null || name === undefined) { return; } name = name.toLowerCase(); var /** @type {?} */ keysArray = this.getNameKeyControls(name); if (keysArray !== null && keysArray !== undefined) { try { for (var keysArray_3 = tslib_1.__values(keysArray), keysArray_3_1 = keysArray_3.next(); !keysArray_3_1.done; keysArray_3_1 = keysArray_3.next()) { var keyCtrl = keysArray_3_1.value; this.removeKeyHintAnchorMap(keyCtrl, shortcut); } } catch (e_6_1) { e_6 = { error: e_6_1 }; } finally { try { if (keysArray_3_1 && !keysArray_3_1.done && (_a = keysArray_3.return)) _a.call(keysArray_3); } finally { if (e_6) throw e_6.error; } } } var e_6, _a; }; /** * @param {?} keyCtrl * @param {?} shortcut * @return {?} */ KeyboardShortcutService.prototype.addKeyHintAnchorMap = /** * @param {?} keyCtrl * @param {?} shortcut * @return {?} */ function (keyCtrl, shortcut) { if (keyCtrl === null || keyCtrl === undefined) { return; } keyCtrl = keyCtrl.toLowerCase(); if (shortcut === null || shortcut === undefined) { return; } var /** @type {?} */ index = keyCtrl.indexOf('+'); if (index >= 0) { // has + var /** @type {?} */ split = keyCtrl.split("+"); try { for (var split_1 = tslib_1.__values(split), split_1_1 = split_1.next(); !split_1_1.done; split_1_1 = split_1.next()) { var sKey = split_1_1.value; if (this.isModifierKey(sKey)) { // add hintAnchor var /** @type {?} */ anchors = this.keyHintAnchor[sKey]; if (anchors === null || anchors === undefined) { this.keyHintAnchor[sKey] = []; } this.keyHintAnchor[sKey].push(shortcut); } } } catch (e_7_1) { e_7 = { error: e_7_1 }; } finally { try { if (split_1_1 && !split_1_1.done && (_a = split_1.return)) _a.call(split_1); } finally { if (e_7) throw e_7.error; } } } var e_7, _a; }; /** * @param {?} keyCtrl * @param {?} shortcut * @return {?} */ KeyboardShortcutService.prototype.removeKeyHintAnchorMap = /** * @param {?} keyCtrl * @param {?} shortcut * @return {?} */ function (keyCtrl, shortcut) { if (keyCtrl === null || keyCtrl === undefined) { return; } keyCtrl = keyCtrl.toLowerCase(); var /** @type {?} */ index = keyCtrl.indexOf('+'); if (index >= 0) { // has + var /** @type {?} */ split = keyCtrl.split("+"); var /** @type {?} */ handler = shortcut.handler; try { for (var split_2 = tslib_1.__values(split), split_2_1 = split_2.next(); !split_2_1.done; split_2_1 = split_2.next()) { var sKey = split_2_1.value; if (this.isModifierKey(sKey)) { // add hintAnchor var /** @type {?} */ anchors = this.keyHintAnchor[sKey]; if (anchors === null || anchors === undefined) { continue; } var /** @type {?} */ toDeleteObjs = []; try { for (var _a = tslib_1.__values(this.keyHintAnchor[sKey]), _b = _a.next(); !_b.done; _b = _a.next()) { var check = _b.value; if ((check.shortcut === shortcut.shortcut) && (check.handler.toString() === handler.toString())) { toDeleteObjs.push(check); } } } catch (e_8_1) { e_8 = { error: e_8_1 }; } finally { try { if (_b && !_b.done && (_c = _a.return)) _c.call(_a); } finally { if (e_8) throw e_8.error; } } try { // remove for (var toDeleteObjs_1 = tslib_1.__values(toDeleteObjs), toDeleteObjs_1_1 = toDeleteObjs_1.next(); !toDeleteObjs_1_1.done; toDeleteObjs_1_1 = toDeleteObjs_1.next()) { var delObj = toDeleteObjs_1_1.value; var /** @type {?} */ index_1 = this.keyHintAnchor[sKey].indexOf(delObj); this.keyHintAnchor[sKey].splice(index_1, 1); } } catch (e_9_1) { e_9 = { error: e_9_1 }; } finally { try { if (toDeleteObjs_1_1 && !toDeleteObjs_1_1.done && (_d = toDeleteObjs_1.return)) _d.call(toDeleteObjs_1); } finally { if (e_9) throw e_9.error; } } if (this.keyHintAnchor[sKey].length <= 0) { delete this.keyHintAnchor[sKey]; } } } } catch (e_10_1) { e_10 = { error: e_10_1 }; } finally { try { if (split_2_1 && !split_2_1.done && (_e = split_2.return)) _e.call(split_2); } finally { if (e_10) throw e_10.error; } } } var e_10, _e, e_8, _c, e_9, _d; }; /** * @param {?} name * @return {?} */ KeyboardShortcutService.prototype.bindName = /** * @param {?} name * @return {?} */ function (name) { if (name === null || name === undefined) { return; } name = name.toLowerCase(); var /** @type {?} */ keysArray = this.getNameKeyControls(name); if (keysArray === null || keysArray === undefined || keysArray.length <= 0) { return; } try { for (var keysArray_4 = tslib_1.__values(keysArray), keysArray_4_1 = keysArray_4.next(); !keysArray_4_1.done; keysArray_4_1 = keysArray_4.next()) { var keyCtrl = keysArray_4_1.value; // no bind if key already bind overide nameHandler with key if (this.keyHandler[keyCtrl] !== undefined) { continue; } if (this.nameHandler[name] !== undefined) { this.bind(keyCtrl, this.nameHandler[name]); } } } catch (e_11_1) { e_11 = { error: e_11_1 }; } finally { try { if (keysArray_4_1 && !keysArray_4_1.done && (_a = keysArray_4.return)) _a.call(keysArray_4); } finally { if (e_11) throw e_11.error; } } var e_11, _a; }; /** * @param {?} keyCtrl * @return {?} */ KeyboardShortcutService.prototype.bindKey = /** * @param {?} keyCtrl * @return {?} */ function (keyCtrl) { if (this.keyHandler[keyCtrl] !== undefined) { this.bind(keyCtrl, this.keyHandler[keyCtrl]); } }; /** * @param {?} keyCtrl * @param {?} handlers * @return {?} */ KeyboardShortcutService.prototype.bind = /** * @param {?} keyCtrl * @param {?} handlers * @return {?} */ function (keyCtrl, handlers) { var _this = this; if (keyCtrl === null || keyCtrl === undefined) { return; } keyCtrl = keyCtrl.toLowerCase(); key(keyCtrl, function () { if (handlers !== null && handlers !== undefined) { try { for (var handlers_1 = tslib_1.__values(handlers), handlers_1_1 = handlers_1.next(); !handlers_1_1.done; handlers_1_1 = handlers_1.next()) { var func = handlers_1_1.value; if (typeof func === 'function') { func.call(_this, _this); // inject keyboard service } } } catch (e_12_1) { e_12 = { error: e_12_1 }; } finally { try { if (handlers_1_1 && !handlers_1_1.done && (_a = handlers_1.return)) _a.call(handlers_1); } finally { if (e_12) throw e_12.error; } } } var e_12, _a; }); }; /** * @param {?} name * @return {?} */ KeyboardShortcutService.prototype.unbindName = /** * @param {?} name * @return {?} */ function (name) { if (name === null || name === undefined) { return; } var /** @type {?} */ keysArray = this.getNameKeyControls(name); if (keysArray !== null && keysArray !== undefined) { try { for (var keysArray_5 = tslib_1.__values(keysArray), keysArray_5_1 = keysArray_5.next(); !keysArray_5_1.done; keysArray_5_1 = keysArray_5.next()) { var keyCtrl = keysArray_5_1.value; this.unbindKey(keyCtrl); } } catch (e_13_1) { e_13 = { error: e_13_1 }; } finally { try { if (keysArray_5_1 && !keysArray_5_1.done && (_a = keysArray_5.return)) _a.call(keysArray_5); } finally { if (e_13) throw e_13.error; } } } var e_13, _a; }; /** * @param {?} keyCtrl * @return {?} */ KeyboardShortcutService.prototype.unbindKey = /** * @param {?} keyCtrl * @return {?} */ function (keyCtrl) { if (keyCtrl === null || keyCtrl === undefined) { return; } keyCtrl = keyCtrl.toLowerCase(); key.unbind(keyCtrl); }; /** * @param {?} hintAnchorElements * @param {?} name * @param {?} hintLabel * @return {?} */ KeyboardShortcutService.prototype.addHintName = /** * @param {?} hintAnchorElements * @param {?} name * @param {?} hintLabel * @return {?} */ function (hintAnchorElements, name, hintLabel) { if (hintAnchorElements === null || hintAnchorElements === undefined) { return; } if (name === null || name === undefined) { return; } var /** @type {?} */ keysArray = this.getNameKeyControls(name); if (keysArray !== null && keysArray !== undefined) { try { for (var keysArray_6 = tslib_1.__values(keysArray), keysArray_6_1 = keysArray_6.next(); !keysArray_6_1.done; keysArray_6_1 = keysArray_6.next()) { var keyCtrl = keysArray_6_1.value; this.addHintKey(hintAnchorElements, keyCtrl, hintLabel); } } catch (e_14_1) { e_14 = { error: e_14_1 }; } finally { try { if (keysArray_6_1 && !keysArray_6_1.done && (_a = keysArray_6.return)) _a.call(keysArray_6); } finally { if (e_14) throw e_14.error; } } } var e_14, _a; }; /** * @param {?} hintAnchorElements * @param {?} keyCtrl * @param {?} hintLabel * @return {?} */ KeyboardShortcutService.prototype.addHintKey = /** * @param {?} hintAnchorElements * @param {?} keyCtrl * @param {?} hintLabel * @return {?} */ function (hintAnchorElements, keyCtrl, hintLabel) { if (hintAnchorElements === null || hintAnchorElements === undefined) { return; } if (keyCtrl === null || keyCtrl === undefined) { return; } keyCtrl = keyCtrl.toLowerCase(); var /** @type {?} */ elements = []; if (Array.isArray(hintAnchorElements)) { elements = hintAnchorElements; } else { elements.push(hintAnchorElements); } var /** @type {?} */ title = hintLabel; // default if no hintLabel if (title === null || title === undefined) { title = this.capitalizeFirstLetter(keyCtrl); var /** @type {?} */ name_1 = this.getKeyMappingName(keyCtrl); if (name_1 !== null && name_1 !== undefined) { title = this.capitalizeFirstLetter(name_1) + "</br>(" + title + ")"; } } try { for (var elements_1 = tslib_1.__values(elements), elements_1_1 = elements_1.next(); !elements_1_1.done; elements_1_1 = elements_1.next()) { var anyElement = elements_1_1.value; var /** @type {?} */ badgeHTML = '<span class="badge scService">' + title + '</span>'; if (typeof anyElement === 'string') { // jqSelector: String var /** @type {?} */ width = $(anyElement).width() - this.DEFAULT_BADGE_SPACE; var /** @type {?} */ badgeElement = $(badgeHTML); badgeElement.css({ "max-width": width }); $(anyElement).append(badgeElement); } else if (anyElement !== undefined && typeof anyElement.innerHTML === 'function') { // DOM/Native Element var /** @type {?} */ width = $(anyElement).width() - this.DEFAULT_BADGE_SPACE; var /** @type {?} */ badgeElement = $(badgeHTML); badgeElement.css({ "max-width": width }); $(anyElement).append(badgeElement); } else if (anyElement !== undefined) { // NgComp if (typeof anyElement["getElementRef"] === 'function') { var /** @type {?} */ eleRef = anyElement.getElementRef(); if (eleRef !== null && eleRef !== undefined) { var /** @type {?} */ width = $(eleRef.nativeElement).width() - this.DEFAULT_BADGE_SPACE; var /** @type {?} */ badgeElement = $(badgeHTML); badgeElement.css({ "max-width": width }); $(eleRef.nativeElement).append(badgeElement); } } } } } catch (e_15_1) { e_15 = { error: e_15_1 }; } finally { try { if (elements_1_1 && !elements_1_1.done && (_a = elements_1.return)) _a.call(elements_1); } finally { if (e_15) throw e_15.error; } } var e_15, _a; }; /** * @param {?} hintAnchorElements * @return {?} */ KeyboardShortcutService.prototype.removeHintKey = /** * @param {?} hintAnchorElements * @return {?} */ function (hintAnchorElements) { if (hintAnchorElements === null || hintAnchorElements === undefined) { return; } var /** @type {?} */ elements = []; if (Array.isArray(hintAnchorElements)) { elements = hintAnchorElements; } else { elements.push(hintAnchorElements); } var _loop_1 = function (anyElement) { if (typeof anyElement === 'string') { // jqSelector: String $(anyElement).find(".scService").addClass("fadeout"); setTimeout(function () { $(anyElement).find(".scService.fadeout").remove(); }, this_1.DEFAULT_FADEOUT_MS); } else if (anyElement !== undefined && typeof anyElement.innerHTML === 'function') { // DOM/Native Element $(anyElement).find(".scService").addClass("fadeout"); setTimeout(function () { $(anyElement).find(".scService.fadeout").remove(); }, this_1.DEFAULT_FADEOUT_MS); } else if (anyElement !== undefined) { // NgComp if (typeof anyElement["getElementRef"] === 'function') { var /** @type {?} */ eleRef_1 = anyElement.getElementRef(); if (eleRef_1 !== null && eleRef_1 !== undefined) { $(eleRef_1.nativeElement).find(".scService").addClass("fadeout"); setTimeout(function () { $(eleRef_1.nativeElement).find(".scService.fadeout").remove(); }, this_1.DEFAULT_FADEOUT_MS); } } } }; var this_1 = this; try { for (var elements_2 = tslib_1.__values(elements), elements_2_1 = elements_2.next(); !elements_2_1.done; elements_2_1 = elements_2.next()) { var anyElement = elements_2_1.value; _loop_1(anyElement); } } catch (e_16_1) { e_16 = { error: e_16_1 }; } finally { try { if (elements_2_1 && !elements_2_1.done && (_a = elements_2.return)) _a.call(elements_2); } finally { if (e_16) throw e_16.error; } } var e_16, _a; }; /** * @param {?} key * @param {?} handler * @return {?} */ KeyboardShortcutService.prototype._addKeyHandler = /** * @param {?} key * @param {?} handler * @return {?} */ function (key, handler) { if (key === null || key === undefined) { return; } var /** @type {?} */ handlers = this.keyHandler[key]; if (handlers === null || handlers === undefined) { handlers = []; this.keyHandler[key] = handlers; } this.keyHandler[key].push(handler); if (this.bindedKeys.indexOf(key) >= 0) { // unbind then bind this.unbindKey(key); this.bindKey(key); } else { // bind and add bindedKeys this.bindKey(key); this.bindedKeys.push(key); } }; /** * @param {?} key * @return {?} */ KeyboardShortcutService.prototype.getKeyMappingName = /** * @param {?} key * @return {?} */ function (key) { for (var /** @type {?} */ name_2 in this.nameMapping) { var /** @type {?} */ keyArray = this.nameMapping[name_2]; if (keyArray.indexOf(key) >= 0) { return name_2; } } return null; }; /** * @param {?} name * @param {?} key * @return {?} */ KeyboardShortcutService.prototype.setNameMapping = /** * @param {?} name * @param {?} key * @return {?} */ function (name, key) { var /** @type {?} */ keysArray = this.nameMapping[name]; if (keysArray === null || keysArray === undefined) { this.nameMapping[name] = []; this.nameMapping[name].push(key); } else { // if no key just push it if (this.nameMapping[name].indexOf(key) < 0) { this.nameMapping[name].push(key); } } }; /** * @param {?} name * @return {?} */ KeyboardShortcutService.prototype.getNameKeyControls = /** * @param {?} name * @return {?} */ function (name) { return this.nameMapping[name]; }; /** * @param {?} mappings * @return {?} */ KeyboardShortcutService.prototype.mergeNameMappings = /** * @param {?} mappings * @return {?} */ function (mappings) { if (mappings === null || mappings === undefined) { return; } for (var /** @type {?} */ name_3 in mappings) { var /** @type {?} */ val = mappings[name_3]; if (typeof val === 'string') { this.setNameMapping(name_3, val); } else if (Array.isArray(val)) { try { for (var val_1 = tslib_1.__values(val), val_1_1 = val_1.next(); !val_1_1.done; val_1_1 = val_1.next()) { var innerVal = val_1_1.value; this.setNameMapping(name_3, innerVal); } } catch (e_17_1) { e_17 = { error: e_17_1 }; } finally { try { if (val_1_1 && !val_1_1.done && (_a = val_1.return)) _a.call(val_1); } finally { if (e_17) throw e_17.error; } } } } var e_17, _a; }; /** * @return {?} */ KeyboardShortcutService.prototype.getNameMapping = /** * @return {?} */ function () { return this.nameMapping; }; /** * @return {?} */ KeyboardShortcutService.prototype.getNames = /** * @return {?} */ function () { var /** @type {?} */ result = []; for (var /** @type {?} */ key_1 in this.nameMapping) { result.push(key_1); } return result; }; /** * @return {?} */ KeyboardShortcutService.prototype.clearNameMappings = /** * @return {?} */ function () { this.nameMapping = {}; }; /** * @param {?} shortcut * @return {?} */ KeyboardShortcutService.prototype.addNameHandler = /** * @param {?} shortcut * @return {?} */ function (shortcut) { if (shortcut === null || shortcut === undefined) { return; } var /** @type {?} */ name = shortcut.shortcut; if (name === null || name === undefined) { return; } name = name.toLowerCase(); if (name === null || name === undefined) { return; } var /** @type {?} */ handlers = this.nameHandler[name]; if (handlers === null || handlers === undefined) { handlers = []; this.nameHandler[name] = handlers; } this.nameHandler[name].push(shortcut.handler); // add hint this.addNameHintAnchorMap(shortcut); this.bindName(name); }; /** * @param {?} shortcut * @return {?} */ KeyboardShortcutService.prototype.removeNameHandler = /** * @param {?} shortcut * @return {?} */ function (shortcut) { if (shortcut === null || shortcut === undefined) { return; } var /** @type {?} */ name = shortcut.shortcut; var /** @type {?} */ handler = shortcut.handler; if (name === null || name === undefined) { return; } name = name.toLowerCase(); var /** @type {?} */ handlers = this.nameHandler[name]; if (handlers === null || handlers === undefined) { return; } var /** @type {?} */ index = -1; try { for (var handlers_2 = tslib_1.__values(handlers), handlers_2_1 = handlers_2.next(); !handlers_2_1.done; handlers_2_1 = handlers_2.next()) { var h = handlers_2_1.value; index += 1; if (h.toString() === handler.toString()) { break; } } } catch (e_18_1) { e_18 = { error: e_18_1 }; } finally { try { if (handlers_2_1 && !handlers_2_1.done && (_a = handlers_2.return)) _a.call(handlers_2); } finally { if (e_18) throw e_18.error; } } if (index >= 0) { handlers.splice(index, 1); } // remove name hint this.removeNameHintAnchorMap(shortcut); this.unbindName(name); if (handlers.length > 0) { this.bindName(name); } var e_18, _a; }; /** * @param {?} name * @return {?} */ KeyboardShortcutService.prototype.removeAllNameHandler = /** * @param {?} name * @return {?} */ function (name) { if (name === null || name === undefined) { return; } delete this.nameHandler[name]; this.unbindName(name); // remove binded Key var /** @type {?} */ keysArray = this.getNameKeyControls(name); if (keysArray !== null && keysArray !== undefined) { try { for (var keysArray_7 = tslib_1.__values(keysArray), keysArray_7_1 = keysArray_7.next(); !keysArray_7_1.done; keysArray_7_1 = keysArray_7.next()) { var keyCtrl = keysArray_7_1.value; if (keyCtrl !== null && keyCtrl !== undefined) { if (this.bindedKeys.indexOf(keyCtrl) >= 0) { this.bindedKeys.splice(this.bindedKeys.indexOf(keyCtrl), 1); } } } } catch (e_19_1) { e_19 = { error: e_19_1 }; } finally { try { if (keysArray_7_1 && !keysArray_7_1.done && (_a = keysArray_7.return)) _a.call(keysArray_7); } finally { if (e_19) throw e_19.error; } } } var e_19, _a; }; /** * @param {?} name * @return {?} */ KeyboardShortcutService.prototype.getNameHandlers = /** * @param {?} name * @return {?} */ function (name) { if (name === null || name === undefined) { return null; } return this.nameHandler[name]; }; /** * @param {?} shortcut * @return {?} */ KeyboardShortcutService.prototype.addKeyHandler = /** * @param {?} shortcut * @return {?} */ function (shortcut) { var /** @type {?} */ key = shortcut.shortcut; var /** @type {?} */ handler = shortcut.handler; var /** @type {?} */ hintAnchorElements = shortcut.hintAnchorElements; this._addKeyHandler(key, handler); // add hint this.addKeyHintAnchorMap(key, shortcut); }; /** * @param {?} shortcut * @return {?} */ KeyboardShortcutService.prototype.removeKeyHandler = /** * @param {?} shortcut * @return {?} */ function (shortcut) { if (shortcut === null || shortcut === undefined) { return; } var /** @type {?} */ key = shortcut.shortcut; var /** @type {?} */ handler = shortcut.handler; var /** @type {?} */ hintAnchorElements = shortcut.hintAnchorElements; if (key === null || key === undefined) { return; } var /** @type {?} */ handlers = this.keyHandler[key]; if (handlers === null || handlers === undefined) { return; } var /** @type {?} */ index = -1; try { for (var handlers_3 = tslib_1.__values(handlers), handlers_3_1 = handlers_3.next(); !handlers_3_1.done; handlers_3_1 = handlers_3.next()) { var h = handlers_3_1.value; index += 1; if (h.toString() === handler.toString()) { break; } } } catch (e_20_1) { e_20 = { error: e_20_1 }; } finally { try { if (handlers_3_1 && !handlers_3_1.done && (_a = handlers_3.return)) _a.call(handlers_3); } finally { if (e_20) throw e_20.error; } } if (index >= 0) { handlers.splice(index, 1); } // remove hint this.removeKeyHintAnchorMap(key, shortcut); this.unbindKey(key); if (handlers.length > 0) { this.bindKey(key); } var e_20, _a; }; /** * @param {?} key * @return {?} */ KeyboardShortcutService.prototype.removeAllKeyHandler = /** * @param {?} key * @return {?} */ function (key) { if (key === null || key === undefined) { return; } delete this.keyHandler[key]; delete this.keyHintAnchor[key]; this.unbindKey(key); // remove binded Key if (this.bindedKeys.indexOf(key) >= 0) { this.bindedKeys.splice(this.bindedKeys.indexOf(key), 1); } }; /** * @param {?} key * @return {?} */ KeyboardShortcutService.prototype.getKeyHandlers = /** * @param {?} key * @return {?} */ function (key) { if (key === null || key === undefined) { return null; } return this.keyHandler[key]; }; KeyboardShortcutService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ KeyboardShortcutService.ctorParameters = function () { return []; }; return KeyboardShortcutService; }()); export { KeyboardShortcutService }; function KeyboardShortcutService_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ KeyboardShortcutService.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ KeyboardShortcutService.ctorParameters; /** @type {?} */ KeyboardShortcutService.prototype.DEFAULT_KEYDOWN_MS; /** @type {?} */ KeyboardShortcutService.prototype.DEFAULT_BADGE_SPACE; /** @type {?} */ KeyboardShortcutService.prototype.DEFAULT_FADEOUT_MS; /** @type {?} */ KeyboardShortcutService.prototype.nameMapping; /** @type {?} */ KeyboardShortcutService.prototype.nameHandler; /** @type {?} */ KeyboardShortcutService.prototype.keyHandler; /** @type {?} */ KeyboardShortcutService.prototype.keyHintAnchor; /** @type {?} */ KeyboardShortcutService.prototype.bindedKeys; /** @type {?} */ KeyboardShortcutService.prototype.keydownTimer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2V5Ym9hcmRTaG9ydGN1dFNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2UvS2V5Ym9hcmRTaG9ydGN1dFNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBVSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFLN0QscUJBQU0sWUFBWSxHQUFhLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN4RixxQkFBTSxpQkFBaUIsR0FBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7O0lBZTVEO1FBQUEsaUJBaUVDO2tDQTNFb0MsSUFBSTttQ0FDSCxDQUFDO2tDQUNGLEdBQUc7UUFTdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7O1FBR3JCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQUMsUUFBYTtZQUN0QyxFQUFFLENBQUMsQ0FBQyxLQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLEtBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDO29CQUM3QixHQUFHLENBQUMsQ0FBQyxxQkFBSSxPQUFPLElBQUksS0FBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLHFCQUFJLGFBQWEsR0FBRyxLQUFJLENBQUMs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