Files
ueblueprint/js/input/KeyboardShortcut.js
2021-11-06 20:59:00 +01:00

47 lines
1.3 KiB
JavaScript

import Context from "./Context"
import Utility from "../Utility"
export default class KeyboardShortcut extends Context {
constructor(target, blueprint, options) {
super(target, blueprint, options)
/** @type {String[]} */
this.keys = this.options?.keys ?? []
/** @type Numeric */
this.currentKey = 0
let self = this
this.keyDownHandler = e => {
e.preventDefault()
if (Utility.equals(e.keys[self.currentKey], e.key)) {
if (++self.currentKey == this.keys.length) {
self.fire()
}
}
}
this.keyUpHandler = e => {
e.preventDefault()
for (let i = 0; i < self.currentKey; ++i) {
if (Utility.equals(e.keys[self.currentKey], e.key)) {
self.currentKey = i
break
}
}
}
if (this.keys.length > 0) {
this.target.addEventListener("keydown", this.keyDownHandler)
this.target.addEventListener("keyup", this.keyUpHandler)
}
}
unlistenDOMElement() {
this.target.removeEventListener('keydown', this.keyDownHandler)
this.target.removeEventListener('keyup', this.keyUpHandler)
}
fire() {
}
}