handsontable
Version:
Handsontable is a JavaScript Data Grid available for React, Angular and Vue.
56 lines (55 loc) • 1.75 kB
JavaScript
import "core-js/modules/es.set.difference.v2.js";
import "core-js/modules/es.set.intersection.v2.js";
import "core-js/modules/es.set.is-disjoint-from.v2.js";
import "core-js/modules/es.set.is-subset-of.v2.js";
import "core-js/modules/es.set.is-superset-of.v2.js";
import "core-js/modules/es.set.symmetric-difference.v2.js";
import "core-js/modules/es.set.union.v2.js";
/* eslint-disable jsdoc/require-description-complete-sentence */
/**
* Create a key observer.
*
* @returns {object}
*/
export function createKeysObserver() {
const PRESSED_KEYS = new Set();
return {
/**
* Press a key.
*
* @param {string} key Names of the shortcut's keys,
* (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
* in lowercase or uppercase, unified across browsers
*/
press(key) {
PRESSED_KEYS.add(key);
},
/**
* Release a pressed key.
*
* @param {string} key Names of the shortcut's keys,
* (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
* in lowercase or uppercase, unified across browsers
*/
release(key) {
PRESSED_KEYS.delete(key);
},
/**
* Release all pressed keys.
*/
releaseAll() {
PRESSED_KEYS.clear();
},
/**
* Check if a key is pressed.
*
* @param {string} key Names of the shortcut's keys,
* (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
* in lowercase or uppercase, unified across browsers
* @returns {boolean}
*/
isPressed(key) {
return PRESSED_KEYS.has(key);
}
};
}