UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

126 lines 8.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KeyPattern = void 0; class KeyPattern { constructor(patterns) { if (typeof patterns == "string") patterns = [{ pattern: patterns, type: "down" }]; this.patterns = patterns.map(({ pattern, type, allowExtra }) => ({ type, allowExtra, pattern: typeof pattern == "string" ? KeyPattern.toArrayPattern(pattern) : pattern, })); } /** * Checks whether the given event matches the * @param event The event to check * @param ignoreType Whether to ignore the event type * @returns Whether a given event matches this pattern */ matches(event, ignoreType = false) { return !!this.patterns.find(({ pattern, type: eventType, allowExtra }) => { // Check if the event type matches if (!ignoreType) if (eventType == "down or repeat") { if (!["down", "repeat"].includes(event.type)) return false; } else if (eventType != event.type) return false; if (allowExtra && allowExtra.length > 0) { // Check if all pattern keys are included if (!event.includes(pattern)) return false; // Check if all event keys are allowed const all = [...allowExtra, ...pattern]; const notAllowed = event.held.find(({ name, id }) => !all.includes(name) && !all.includes(id)); if (notAllowed) return false; // Make sure that the key that just triggered was part of the pattern if (!pattern.includes(event.key.name) && !pattern.includes(event.key.id)) return false; } else { // Check if the event matches exactly if (!event.is(pattern, null)) return false; } return true; }); } /** * Checks whether the event matches this pattern as a modifier key * @param event The event to check */ matchesModifier(event) { // TODO: move this behavior to a dedicated modifier class return !!this.patterns.find(({ pattern }) => { return event.includes(pattern); }); } /** * Simplifies the pattern to a string (leaving out some data) */ toString() { return this.patterns .map(({ pattern }) => KeyPattern.toStringPattern(pattern)) .join(", "); } // Serialization /** * Serializes the pattern * @returns The serialized pattern */ serialize() { return this.patterns; } // Helpers /** * Retrieves the purely string representation of a key pattern * @param keys The keys in the pattern * @returns The string form */ static toStringPattern(keys) { return keys.join(this.keySeparator); } /** * Retrieves the array representation of a key pattern * @param keys The key pattern * @returns The array form */ static toArrayPattern(keys) { return keys.split(this.keySeparator).map(k => k.trim()); } /** * Sorts the given keys * @param keys The keys to sort * @returns The sorted sequence of keys */ static sortKeys(keys) { const codes = { meta: -4, metaLeft: -4, metaRight: -4, ctrl: -3, controlLeft: -3, controlRight: -3, shift: -2, shiftLeft: -2, shiftRight: -2, alt: -1, altLeft: -1, altRight: -1, }; return [...keys].sort((a, b) => { var _a, _b; const code1 = (_a = codes[a]) !== null && _a !== void 0 ? _a : a.charCodeAt(0); const code2 = (_b = codes[b]) !== null && _b !== void 0 ? _b : b.charCodeAt(0); return code1 - code2; }); } } exports.KeyPattern = KeyPattern; KeyPattern.keySeparator = "+"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2V5UGF0dGVybi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXlIYW5kbGVyL0tleVBhdHRlcm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EsTUFBYSxVQUFVO0lBZ0JuQixZQUFtQixRQUFvQztRQUNuRCxJQUFJLE9BQU8sUUFBUSxJQUFJLFFBQVE7WUFBRSxRQUFRLEdBQUcsQ0FBQyxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNELElBQUk7WUFDSixVQUFVO1lBQ1YsT0FBTyxFQUNILE9BQU8sT0FBTyxJQUFJLFFBQVE7Z0JBQ3RCLENBQUMsQ0FBRSxVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBbUI7Z0JBQ3ZELENBQUMsQ0FBQyxPQUFPO1NBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksT0FBTyxDQUFDLEtBQWUsRUFBRSxhQUFzQixLQUFLO1FBQ3ZELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUMsRUFBRSxFQUFFO1lBQ25FLGtDQUFrQztZQUNsQyxJQUFJLENBQUMsVUFBVTtnQkFDWCxJQUFJLFNBQVMsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUFFLE9BQU8sS0FBSyxDQUFDO2lCQUM5RDtxQkFBTSxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSTtvQkFBRSxPQUFPLEtBQUssQ0FBQztZQUVyRCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDckMseUNBQXlDO2dCQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7b0JBQUUsT0FBTyxLQUFLLENBQUM7Z0JBRTNDLHNDQUFzQztnQkFDdEMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDOUIsQ0FBQyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FDM0QsQ0FBQztnQkFDRixJQUFJLFVBQVU7b0JBQUUsT0FBTyxLQUFLLENBQUM7Z0JBRTdCLHFFQUFxRTtnQkFDckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3BFLE9BQU8sS0FBSyxDQUFDO2FBQ3BCO2lCQUFNO2dCQUNILHFDQUFxQztnQkFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztvQkFBRSxPQUFPLEtBQUssQ0FBQzthQUM5QztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWUsQ0FBQyxLQUFlO1FBQ2xDLHlEQUF5RDtRQUN6RCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBRTtZQUN0QyxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRO1FBQ1gsT0FBTyxJQUFJLENBQUMsUUFBUTthQUNmLEdBQUcsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEI7OztPQUdHO0lBQ0ksU0FBUztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVTtJQUNWOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsZUFBZSxDQUFDLElBQW1CO1FBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQVk7UUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBYztRQUNqQyxNQUFNLEtBQUssR0FBRztZQUNWLElBQUksRUFBRSxDQUFDLENBQUM7WUFDUixRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ1osU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNiLElBQUksRUFBRSxDQUFDLENBQUM7WUFDUixXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2YsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNoQixLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ1QsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNiLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDZCxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ1AsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNYLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDWSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTs7WUFDM0IsTUFBTSxLQUFLLFNBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxtQ0FBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sS0FBSyxTQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsbUNBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxPQUFPLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztBQTFJTCxnQ0EySUM7QUExSWlCLHVCQUFZLEdBQUcsR0FBRyxDQUFDIn0=