angular2-hotkeys
Version:
Angular 16 and Ivy Compatible. Older versions might work but isn't officially tested.
61 lines • 8.23 kB
JavaScript
export class Hotkey {
static symbolize(combo) {
const map = {
command: '\u2318',
shift: '\u21E7',
left: '\u2190',
right: '\u2192',
up: '\u2191',
down: '\u2193',
// tslint:disable-next-line:object-literal-key-quotes
'return': '\u23CE',
backspace: '\u232B' // ⌫
};
const comboSplit = combo.split('+');
for (let i = 0; i < comboSplit.length; i++) {
// try to resolve command / ctrl based on OS:
if (comboSplit[i] === 'mod') {
if (window.navigator && window.navigator.platform.indexOf('Mac') >= 0) {
comboSplit[i] = 'command';
}
else {
comboSplit[i] = 'ctrl';
}
}
comboSplit[i] = map[comboSplit[i]] || comboSplit[i];
}
return comboSplit.join(' + ');
}
/**
* Creates a new Hotkey for Mousetrap binding
*
* @param combo mousetrap key binding
* @param callback method to call when key is pressed
* @param allowIn an array of tag names to allow this combo in ('INPUT', 'SELECT', and/or 'TEXTAREA')
* @param description description for the help menu
* @param action the type of event to listen for (for mousetrap)
* @param persistent if true, the binding is preserved upon route changes
*/
constructor(combo, callback, allowIn, description, action, persistent) {
this.combo = combo;
this.callback = callback;
this.allowIn = allowIn;
this.description = description;
this.action = action;
this.persistent = persistent;
this.combo = (Array.isArray(combo) ? combo : [combo]);
this.allowIn = allowIn || [];
this.description = description || '';
}
get formatted() {
if (!this.formattedHotkey) {
const sequence = [...this.combo];
for (let i = 0; i < sequence.length; i++) {
sequence[i] = Hotkey.symbolize(sequence[i]);
}
this.formattedHotkey = sequence;
}
return this.formattedHotkey;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90a2V5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ob3RrZXkubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxPQUFPLE1BQU07SUFHZixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQWE7UUFDMUIsTUFBTSxHQUFHLEdBQVE7WUFDYixPQUFPLEVBQUUsUUFBUTtZQUNqQixLQUFLLEVBQUUsUUFBUTtZQUNmLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLFFBQVE7WUFDZixFQUFFLEVBQUUsUUFBUTtZQUNaLElBQUksRUFBRSxRQUFRO1lBQ2QscURBQXFEO1lBQ3JELFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFNBQVMsRUFBRSxRQUFRLENBQU0sSUFBSTtTQUNoQyxDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQWEsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4Qyw2Q0FBNkM7WUFDN0MsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO2dCQUN6QixJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbkUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztpQkFDN0I7cUJBQU07b0JBQ0gsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztpQkFDMUI7YUFDSjtZQUVELFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFtQixLQUF3QixFQUFTLFFBQWtGLEVBQ25ILE9BQWtCLEVBQVMsV0FBK0IsRUFBUyxNQUFlLEVBQ2xGLFVBQW9CO1FBRnBCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBMEU7UUFDbkgsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVM7UUFDbEYsZUFBVSxHQUFWLFVBQVUsQ0FBVTtRQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQWUsQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFFdkIsTUFBTSxRQUFRLEdBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQWtCLENBQUM7WUFDNUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9DO1lBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7U0FDbkM7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBFeHRlbmRlZEtleWJvYXJkRXZlbnQgZXh0ZW5kcyBLZXlib2FyZEV2ZW50IHtcbiAgICByZXR1cm5WYWx1ZTogYm9vbGVhbjsgLy8gSUUgcmV0dXJuVmFsdWVcbn1cblxuZXhwb3J0IGNsYXNzIEhvdGtleSB7XG4gICAgcHJpdmF0ZSBmb3JtYXR0ZWRIb3RrZXk6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIHN5bWJvbGl6ZShjb21ibzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWFwOiBhbnkgPSB7XG4gICAgICAgICAgICBjb21tYW5kOiAnXFx1MjMxOCcsICAgICAgIC8vIOKMmFxuICAgICAgICAgICAgc2hpZnQ6ICdcXHUyMUU3JywgICAgICAgICAvLyDih6dcbiAgICAgICAgICAgIGxlZnQ6ICdcXHUyMTkwJywgICAgICAgICAgLy8g4oaQXG4gICAgICAgICAgICByaWdodDogJ1xcdTIxOTInLCAgICAgICAgIC8vIOKGklxuICAgICAgICAgICAgdXA6ICdcXHUyMTkxJywgICAgICAgICAgICAvLyDihpFcbiAgICAgICAgICAgIGRvd246ICdcXHUyMTkzJywgICAgICAgICAgLy8g4oaTXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6b2JqZWN0LWxpdGVyYWwta2V5LXF1b3Rlc1xuICAgICAgICAgICAgJ3JldHVybic6ICdcXHUyM0NFJywgICAgICAvLyDij45cbiAgICAgICAgICAgIGJhY2tzcGFjZTogJ1xcdTIzMkInICAgICAgLy8g4oyrXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNvbWJvU3BsaXQ6IHN0cmluZ1tdID0gY29tYm8uc3BsaXQoJysnKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbWJvU3BsaXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8vIHRyeSB0byByZXNvbHZlIGNvbW1hbmQgLyBjdHJsIGJhc2VkIG9uIE9TOlxuICAgICAgICAgICAgaWYgKGNvbWJvU3BsaXRbaV0gPT09ICdtb2QnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCdNYWMnKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbWJvU3BsaXRbaV0gPSAnY29tbWFuZCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tYm9TcGxpdFtpXSA9ICdjdHJsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbWJvU3BsaXRbaV0gPSBtYXBbY29tYm9TcGxpdFtpXV0gfHwgY29tYm9TcGxpdFtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21ib1NwbGl0LmpvaW4oJyArICcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgSG90a2V5IGZvciBNb3VzZXRyYXAgYmluZGluZ1xuICAgICAqXG4gICAgICogQHBhcmFtIGNvbWJvICAgICAgIG1vdXNldHJhcCBrZXkgYmluZGluZ1xuICAgICAqIEBwYXJhbSBjYWxsYmFjayAgICBtZXRob2QgdG8gY2FsbCB3aGVuIGtleSBpcyBwcmVzc2VkXG4gICAgICogQHBhcmFtIGFsbG93SW4gICAgIGFuIGFycmF5IG9mIHRhZyBuYW1lcyB0byBhbGxvdyB0aGlzIGNvbWJvIGluICgnSU5QVVQnLCAnU0VMRUNUJywgYW5kL29yICdURVhUQVJFQScpXG4gICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uIGZvciB0aGUgaGVscCBtZW51XG4gICAgICogQHBhcmFtIGFjdGlvbiAgICAgIHRoZSB0eXBlIG9mIGV2ZW50IHRvIGxpc3RlbiBmb3IgKGZvciBtb3VzZXRyYXApXG4gICAgICogQHBhcmFtIHBlcnNpc3RlbnQgIGlmIHRydWUsIHRoZSBiaW5kaW5nIGlzIHByZXNlcnZlZCB1cG9uIHJvdXRlIGNoYW5nZXNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tYm86IHN0cmluZyB8IHN0cmluZ1tdLCBwdWJsaWMgY2FsbGJhY2s6IChldmVudDogS2V5Ym9hcmRFdmVudCwgY29tYm86IHN0cmluZykgPT4gRXh0ZW5kZWRLZXlib2FyZEV2ZW50IHwgYm9vbGVhbixcbiAgICAgICAgICAgICAgICBwdWJsaWMgYWxsb3dJbj86IHN0cmluZ1tdLCBwdWJsaWMgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBGdW5jdGlvbiwgcHVibGljIGFjdGlvbj86IHN0cmluZyxcbiAgICAgICAgICAgICAgICBwdWJsaWMgcGVyc2lzdGVudD86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jb21ibyA9IChBcnJheS5pc0FycmF5KGNvbWJvKSA/IGNvbWJvIDogW2NvbWJvIGFzIHN0cmluZ10pO1xuICAgICAgICB0aGlzLmFsbG93SW4gPSBhbGxvd0luIHx8IFtdO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgJyc7XG4gICAgfVxuXG4gICAgZ2V0IGZvcm1hdHRlZCgpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtYXR0ZWRIb3RrZXkpIHtcblxuICAgICAgICAgICAgY29uc3Qgc2VxdWVuY2U6IHN0cmluZ1tdID0gWy4uLnRoaXMuY29tYm9dIGFzIEFycmF5PHN0cmluZz47XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcXVlbmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc2VxdWVuY2VbaV0gPSBIb3RrZXkuc3ltYm9saXplKHNlcXVlbmNlW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkSG90a2V5ID0gc2VxdWVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVkSG90a2V5O1xuICAgIH1cbn1cbiJdfQ==