UNPKG

json-joy

Version:

Collection of libraries for building collaborative editing apps.

50 lines (49 loc) 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KeyController = void 0; /** * Keeps track of all pressed down keys. */ class KeyController { constructor(opts) { this.opts = opts; /** * All currently pressed keys. */ this.pressed = new Set(); } start() { const onKeyDown = (event) => { if (event.isComposing || event.key === 'Dead') return; this.pressed.add(event.key); }; const onKeyUp = (event) => { if (event.isComposing || event.key === 'Dead') return; this.pressed.delete(event.key); }; const onReset = () => { this.pressed.clear(); }; document.addEventListener('keydown', onKeyDown); document.addEventListener('keyup', onKeyUp); document.addEventListener('focus', onReset); document.addEventListener('compositionstart', onReset); document.addEventListener('compositionend', onReset); this.opts.source.addEventListener('blur', onReset); return () => { document.removeEventListener('keydown', onKeyDown); document.removeEventListener('keyup', onKeyUp); document.removeEventListener('focus', onReset); document.removeEventListener('compositionstart', onReset); document.removeEventListener('compositionend', onReset); this.opts.source.removeEventListener('blur', onReset); }; } /** ----------------------------------------------------- {@link Printable} */ toString(tab) { return `keys { pressed: [ ${[...this.pressed].map((key) => JSON.stringify(key)).join(', ')} ] }`; } } exports.KeyController = KeyController;