KeyboardUtil.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { isArray } from 'min-dash';
  2. export var KEYS_COPY = [ 'c', 'C' ];
  3. export var KEYS_PASTE = [ 'v', 'V' ];
  4. export var KEYS_REDO = [ 'y', 'Y' ];
  5. export var KEYS_UNDO = [ 'z', 'Z' ];
  6. /**
  7. * Returns true if event was triggered with any modifier
  8. * @param {KeyboardEvent} event
  9. */
  10. export function hasModifier(event) {
  11. return (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey);
  12. }
  13. /**
  14. * @param {KeyboardEvent} event
  15. */
  16. export function isCmd(event) {
  17. // ensure we don't react to AltGr
  18. // (mapped to CTRL + ALT)
  19. if (event.altKey) {
  20. return false;
  21. }
  22. return event.ctrlKey || event.metaKey;
  23. }
  24. /**
  25. * Checks if key pressed is one of provided keys.
  26. *
  27. * @param {string|Array<string>} keys
  28. * @param {KeyboardEvent} event
  29. */
  30. export function isKey(keys, event) {
  31. keys = isArray(keys) ? keys : [ keys ];
  32. return keys.indexOf(event.key) !== -1 || keys.indexOf(event.code) !== -1;
  33. }
  34. /**
  35. * @param {KeyboardEvent} event
  36. */
  37. export function isShift(event) {
  38. return event.shiftKey;
  39. }
  40. export function isCopy(event) {
  41. return isCmd(event) && isKey(KEYS_COPY, event);
  42. }
  43. export function isPaste(event) {
  44. return isCmd(event) && isKey(KEYS_PASTE, event);
  45. }
  46. export function isUndo(event) {
  47. return isCmd(event) && !isShift(event) && isKey(KEYS_UNDO, event);
  48. }
  49. export function isRedo(event) {
  50. return isCmd(event) && (
  51. isKey(KEYS_REDO, event) || (
  52. isKey(KEYS_UNDO, event) && isShift(event)
  53. )
  54. );
  55. }