Source: admin/javascript/engine/libs/shortcuts.js

/* --------------------------------------------------------------
 shortcuts.js 2016-09-13
 Gambio GmbH
 http://www.gambio.de
 Copyright (c) 2016 Gambio GmbH
 Released under the GNU General Public License (Version 2)
 [http://www.gnu.org/licenses/gpl-2.0.html]
 --------------------------------------------------------------
 */

jse.libs.shortcuts = jse.libs.shortcuts || {};

/**
 * ## Shortcuts library.
 *
 * This module holds the registered shortcuts and provides predefined constants for event key codes.
 * Additionally, you are allowed to register a custom shortcut by using the `registerShortcut()` function.
 *
 * Example on how to register a custom shortcut:
 *  jse.libs.shortcuts.registerShortcut('myShortcut', [17, 16, 70], _doThis);
 *
 * @module Admin/Libs/shortcuts
 * @exports jse.libs.shortcuts
 */
(function(exports) {
	// Event key codes map.
	exports.KEY_CODES = {
		// Left control key.
		CTRL_L: 17,

		// Left shift key.
		SHIFT_L: 16,

		// Above number key 1.
		NUM_1: 49,
		NUM_2: 50,
		NUM_3: 51,
		NUM_4: 52,
		NUM_5: 53,
		NUM_6: 54,
		NUM_7: 55,
		NUM_8: 56,
		NUM_9: 57
	};

	// List of registered shortcuts.
	// Structure:
	// [
	//      {
	//          name: 'openSearch',
	//          combination: [17, 16, 70],
	//          callback: () => 'Hello world!'
	//      }
	// ]
	exports.registeredShortcuts = [];

	/**
	 * Registers a shortcut by adding the key combination and the respective callback function to the register object.
	 *
	 * @param {String} name Name of the key combination.
	 * @param {Number[]} combination Array of event key numbers that represent a key combination.
	 * @param {Function} callback Function to be invoked on key combination match.
	 */
	exports.registerShortcut = (name, combination, callback) => {
		// Check combination name.
		if (!name || typeof name !== 'string') {
			throw new Error('Key combination name parameter is missing or invalid');
		}

		// Check combination.
		if (!combination || !Array.isArray(combination)) {
			throw new Error('Key combination parameter is missing or invalid');
		}

		// Check callback function.
		if (!callback || typeof callback !== 'function') {
			throw new Error('Callback function parameter is missing or invalid');
		}

		// Register shortcut.
		exports.registeredShortcuts.push({name, combination, callback});
	}
}(jse.libs.shortcuts));