@launchmenu/core
Version:
An environment for visual keyboard controlled applets
126 lines • 8.57 kB
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2V5UGF0dGVybi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXlIYW5kbGVyL0tleVBhdHRlcm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EsTUFBYSxVQUFVO0lBZ0JuQixZQUFtQixRQUFvQztRQUNuRCxJQUFJLE9BQU8sUUFBUSxJQUFJLFFBQVE7WUFBRSxRQUFRLEdBQUcsQ0FBQyxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNELElBQUk7WUFDSixVQUFVO1lBQ1YsT0FBTyxFQUNILE9BQU8sT0FBTyxJQUFJLFFBQVE7Z0JBQ3RCLENBQUMsQ0FBRSxVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBbUI7Z0JBQ3ZELENBQUMsQ0FBQyxPQUFPO1NBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksT0FBTyxDQUFDLEtBQWUsRUFBRSxhQUFzQixLQUFLO1FBQ3ZELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUMsRUFBRSxFQUFFO1lBQ25FLGtDQUFrQztZQUNsQyxJQUFJLENBQUMsVUFBVTtnQkFDWCxJQUFJLFNBQVMsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUFFLE9BQU8sS0FBSyxDQUFDO2lCQUM5RDtxQkFBTSxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSTtv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