@launchmenu/core
Version:
An environment for visual keyboard controlled applets
95 lines • 7.82 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.KeyEvent = void 0;
class KeyEvent {
/**
* Creates a new keyboard event
* @param event The data for the event to create
* @param heldKeys The keys that are also held currently
*/
constructor(event, heldKeys) {
/** The keys that were held down when this event was fired */
this.held = [];
this.type = event.type;
this.key = event.key;
this.original = event.original;
if (heldKeys)
this.setHeldKeys(heldKeys);
}
/**
* Sets the keys that are also held while this event was created
* @param keys The keys that are held, overrides the previous keys
*/
setHeldKeys(keys) {
this.held = [...keys];
this.ctrl = !!this.held.find(k => k.name == "ctrl");
this.shift = !!this.held.find(k => k.name == "shift");
this.alt = !!this.held.find(k => k.name == "alt");
this.meta = !!this.held.find(k => k.name == "meta");
// Make sure the key type is consistent with the held keys
if (this.type == "down") {
// Change type to repeat if the key was already held
if (this.held.find(k => k.id == this.key.id))
this.type = "repeat";
}
else if (this.type == "up") {
// Remove the key from held if type is false
this.held = this.held.filter(k => k.id != this.key.id);
}
}
/**
* Checks whether this event is equal to the given description
* @param keys The keys to check for
* @param type The event type to check for, defaults to "down"
*/
is(keys, type = "down") {
// Check whether the event type corresponds
if (type &&
(type instanceof Array ? !type.includes(this.type) : type != this.type))
return false;
// Make sure nothing more than the specified keys was pressed
if (!(keys instanceof Array))
keys = [keys];
if (keys.length != this.held.length + (this.type == "repeat" ? 0 : 1))
return false;
return this.includes(keys);
}
/**
* Checks whether this event includes the pressed sequence (more keys may be held)
* @param keys The keys to check for
* @param type The event type to check for, defaults to "down"
*/
matches(keys, type = "down") {
// Check whether the event type corresponds
if (type &&
(type instanceof Array ? !type.includes(this.type) : type != this.type))
return false;
// Make sure that the specified event is included
if (!(keys instanceof Array))
keys = [keys];
const sequenceIncludesEvent = keys.find(key => this.key.id == key || this.key.name == key);
if (!sequenceIncludesEvent)
return false;
return this.includes(keys);
}
/**
* Determines whether the held keys include all the specified key(s)
* @param keys The key(s) to check
* @returns Whether it is included
*/
includes(keys) {
if (!(keys instanceof Array))
keys = [keys];
const all = [...this.held, this.key];
const unmatched = keys.filter(key => !all.find(held => held.id == key || held.name == key));
return unmatched.length == 0;
}
/**
* Checks whether any of the modifier keys were held
*/
hasModifiers() {
return this.alt || this.ctrl || this.meta || this.shift;
}
}
exports.KeyEvent = KeyEvent;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2V5RXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2V5SGFuZGxlci9LZXlFdmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSxNQUFhLFFBQVE7SUFxQmpCOzs7O09BSUc7SUFDSCxZQUFtQixLQUFxQixFQUFFLFFBQWlCO1FBekIzRCw2REFBNkQ7UUFDdEQsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQXlCckIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFFL0IsSUFBSSxRQUFRO1lBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVyxDQUFDLElBQVk7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksR0FBRyxD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