UNPKG

@enact/core

Version:

Enact is an open source JavaScript framework containing everything you need to create a fast, scalable mobile or web application.

188 lines (177 loc) 4.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.removeAll = exports.remove = exports.is = exports.addAll = exports.add = void 0; var _curry = _interopRequireDefault(require("ramda/src/curry")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } /* * The singleton map of names to keyCodes. If a name doesn't have any keyCodes mapped to it, it will * not exist in this map. If it does, its value will be an array of its keyCodes. * * @type {Object} * @private */ var map = {}; /* * Safely converts keymap name to lowercase. * * @function * @param {String} name Name for keyCode * * @returns {String} Name for keyCode in lowercase * @memberof core/keymap * @private */ var toLowerCase = function toLowerCase(name) { return name ? name.toLowerCase() : ''; }; /* * Iterates over `set` and invokes `fn` with the key and value of each item. * * @function * @param {Function} fn Function to invoke * @param {Object} set A map of names to keyCodes * * @returns {undefined} * @memberof core/keymap * @private */ var forEachObj = (0, _curry["default"])(function (fn, set) { Object.keys(set).forEach(function (name) { return fn(name, set[name]); }); }); /* * Invokes `fn` with `name` and `keyCode` for each key code provided. * * @function * @param {Function} fn Function to invoke * @param {String} name Name for the key codes * @param {Number|Number[]} keyCode A key code or array of key codes * * @returns {undefined} * @curried * @memberof core/keymap * @private */ var oneOrArray = (0, _curry["default"])(function (fn, name, keyCode) { if (Array.isArray(keyCode)) { keyCode.forEach(fn(name)); } else { fn(name, keyCode); } }); /* * Adds `keyCode` to `name`. * * @function * @param {String} name Name for the key code * @param {Number} keyCode A key code * * @returns {undefined} * @curried * @memberof core/keymap * @private */ var addOne = (0, _curry["default"])(function (name, keyCode) { name = toLowerCase(name); if (name in map) { var index = map[name].indexOf(keyCode); if (index === -1) { map[name].push(keyCode); } } else if (name) { map[name] = [keyCode]; } }); /* * Removes `keyCode` from `name`. * * @function * @param {String} name Name for the key code * @param {Number} keyCode A key code * * @returns {undefined} * @curried * @memberof core/keymap * @private */ var removeOne = (0, _curry["default"])(function (name, keyCode) { name = toLowerCase(name); if (name in map) { var keys = map[name]; var index = keys.indexOf(keyCode); if (index === -1) { delete map[name]; } else { keys.splice(index, 1); } } }); /** * Registers `keyCode` for `name`. * * @function add * @param {String} name Name for the key code * @param {Number|Number[]} keyCode A key code or array of key codes * * @returns {undefined} * @curried * @memberof core/keymap * @public */ var add = exports.add = oneOrArray(addOne); /** * Registers a set of key codes. * * @function addAll * @param {Object<String,Number|Number[]>} set A map of names to keyCodes * * @returns {undefined} * @curried * @memberof core/keymap * @public */ var addAll = exports.addAll = forEachObj(add); /** * Unregisters `keyCode` from `name`. * * @function remove * @param {String} name Name for the key code * @param {Number|Number[]} keyCode A key code or array of key codes * * @returns {undefined} * @curried * @memberof core/keymap * @public */ var remove = exports.remove = oneOrArray(removeOne); /** * Unregisters a set of key codes. * * @function removeAll * @param {Object} set A map of names to keyCodes * * @returns {undefined} * @curried * @memberof core/keymap * @public */ var removeAll = exports.removeAll = forEachObj(remove); /** * Determines if `keyCode` is mapped to `name`. * * @function is * @param {String} name Name for the key code * @param {Number} keyCode A key code * * @returns {Boolean} `true` if `keyCode` is mapped to `name` * @curried * @memberof core/keymap * @public */ var is = exports.is = (0, _curry["default"])(function (name, keyCode) { name = toLowerCase(name); return name in map && map[name].indexOf(keyCode) >= 0; });