diagram-js
Version:
A toolbox for displaying and modifying diagrams on the web
98 lines (83 loc) • 2.08 kB
JavaScript
import { isArray } from 'min-dash';
export var KEYS_COPY = [ 'c', 'C' ];
export var KEYS_PASTE = [ 'v', 'V' ];
export var KEYS_DUPLICATE = [ 'd', 'D' ];
export var KEYS_CUT = [ 'x', 'X' ];
export var KEYS_REDO = [ 'y', 'Y' ];
export var KEYS_UNDO = [ 'z', 'Z' ];
/**
* Returns true if event was triggered with any modifier
* @param {KeyboardEvent} event
*/
export function hasModifier(event) {
return (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey);
}
/**
* @param {KeyboardEvent} event
* @return {boolean}
*/
export function isCmd(event) {
// ensure we don't react to AltGr
// (mapped to CTRL + ALT)
if (event.altKey) {
return false;
}
return event.ctrlKey || event.metaKey;
}
/**
* Checks if key pressed is one of provided keys.
*
* @param {string|string[]} keys
* @param {KeyboardEvent} event
* @return {boolean}
*/
export function isKey(keys, event) {
keys = isArray(keys) ? keys : [ keys ];
return keys.indexOf(event.key) !== -1 || keys.indexOf(event.code) !== -1;
}
/**
* @param {KeyboardEvent} event
*/
export function isShift(event) {
return event.shiftKey;
}
/**
* @param {KeyboardEvent} event
*/
export function isCopy(event) {
return isCmd(event) && isKey(KEYS_COPY, event);
}
/**
* @param {KeyboardEvent} event
*/
export function isPaste(event) {
return isCmd(event) && isKey(KEYS_PASTE, event);
}
/**
* @param {KeyboardEvent} event
*/
export function isDuplicate(event) {
return isCmd(event) && isKey(KEYS_DUPLICATE, event);
}
/**
* @param {KeyboardEvent} event
*/
export function isCut(event) {
return isCmd(event) && isKey(KEYS_CUT, event);
}
/**
* @param {KeyboardEvent} event
*/
export function isUndo(event) {
return isCmd(event) && !isShift(event) && isKey(KEYS_UNDO, event);
}
/**
* @param {KeyboardEvent} event
*/
export function isRedo(event) {
return isCmd(event) && (
isKey(KEYS_REDO, event) || (
isKey(KEYS_UNDO, event) && isShift(event)
)
);
}