You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

keycodes.js 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /**
  2. * Enumerates the supported keys.
  3. * NOTE: The maps represents physical keys on the keyboard, not chars.
  4. *
  5. * @readonly
  6. * @enum {string}
  7. */
  8. export const KEYS = {
  9. BACKSPACE: 'backspace',
  10. DELETE: 'delete',
  11. RETURN: 'enter',
  12. TAB: 'tab',
  13. ESCAPE: 'escape',
  14. UP: 'up',
  15. DOWN: 'down',
  16. RIGHT: 'right',
  17. LEFT: 'left',
  18. HOME: 'home',
  19. END: 'end',
  20. PAGEUP: 'pageup',
  21. PAGEDOWN: 'pagedown',
  22. F1: 'f1',
  23. F2: 'f2',
  24. F3: 'f3',
  25. F4: 'f4',
  26. F5: 'f5',
  27. F6: 'f6',
  28. F7: 'f7',
  29. F8: 'f8',
  30. F9: 'f9',
  31. F10: 'f10',
  32. F11: 'f11',
  33. F12: 'f12',
  34. META: 'command',
  35. CMD_L: 'command',
  36. CMD_R: 'command',
  37. ALT: 'alt',
  38. CONTROL: 'control',
  39. SHIFT: 'shift',
  40. CAPS_LOCK: 'caps_lock', // not supported by robotjs
  41. SPACE: 'space',
  42. PRINTSCREEN: 'printscreen',
  43. INSERT: 'insert',
  44. NUMPAD_0: 'numpad_0',
  45. NUMPAD_1: 'numpad_1',
  46. NUMPAD_2: 'numpad_2',
  47. NUMPAD_3: 'numpad_3',
  48. NUMPAD_4: 'numpad_4',
  49. NUMPAD_5: 'numpad_5',
  50. NUMPAD_6: 'numpad_6',
  51. NUMPAD_7: 'numpad_7',
  52. NUMPAD_8: 'numpad_8',
  53. NUMPAD_9: 'numpad_9',
  54. COMMA: ',',
  55. PERIOD: '.',
  56. SEMICOLON: ';',
  57. QUOTE: '\'',
  58. BRACKET_LEFT: '[',
  59. BRACKET_RIGHT: ']',
  60. BACKQUOTE: '`',
  61. BACKSLASH: '\\',
  62. MINUS: '-',
  63. EQUAL: '=',
  64. SLASH: '/'
  65. };
  66. /* eslint-disable max-len */
  67. /**
  68. * Mapping between the key codes and keys defined in KEYS.
  69. * The mappings are based on
  70. * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Specifications.
  71. */
  72. /* eslint-enable max-len */
  73. const keyCodeToKey = {
  74. 8: KEYS.BACKSPACE,
  75. 9: KEYS.TAB,
  76. 13: KEYS.RETURN,
  77. 16: KEYS.SHIFT,
  78. 17: KEYS.CONTROL,
  79. 18: KEYS.ALT,
  80. 20: KEYS.CAPS_LOCK,
  81. 27: KEYS.ESCAPE,
  82. 32: KEYS.SPACE,
  83. 33: KEYS.PAGEUP,
  84. 34: KEYS.PAGEDOWN,
  85. 35: KEYS.END,
  86. 36: KEYS.HOME,
  87. 37: KEYS.LEFT,
  88. 38: KEYS.UP,
  89. 39: KEYS.RIGHT,
  90. 40: KEYS.DOWN,
  91. 42: KEYS.PRINTSCREEN,
  92. 44: KEYS.PRINTSCREEN,
  93. 45: KEYS.INSERT,
  94. 46: KEYS.DELETE,
  95. 59: KEYS.SEMICOLON,
  96. 61: KEYS.EQUAL,
  97. 91: KEYS.CMD_L,
  98. 92: KEYS.CMD_R,
  99. 93: KEYS.CMD_R,
  100. 96: KEYS.NUMPAD_0,
  101. 97: KEYS.NUMPAD_1,
  102. 98: KEYS.NUMPAD_2,
  103. 99: KEYS.NUMPAD_3,
  104. 100: KEYS.NUMPAD_4,
  105. 101: KEYS.NUMPAD_5,
  106. 102: KEYS.NUMPAD_6,
  107. 103: KEYS.NUMPAD_7,
  108. 104: KEYS.NUMPAD_8,
  109. 105: KEYS.NUMPAD_9,
  110. 112: KEYS.F1,
  111. 113: KEYS.F2,
  112. 114: KEYS.F3,
  113. 115: KEYS.F4,
  114. 116: KEYS.F5,
  115. 117: KEYS.F6,
  116. 118: KEYS.F7,
  117. 119: KEYS.F8,
  118. 120: KEYS.F9,
  119. 121: KEYS.F10,
  120. 122: KEYS.F11,
  121. 123: KEYS.F12,
  122. 124: KEYS.PRINTSCREEN,
  123. 173: KEYS.MINUS,
  124. 186: KEYS.SEMICOLON,
  125. 187: KEYS.EQUAL,
  126. 188: KEYS.COMMA,
  127. 189: KEYS.MINUS,
  128. 190: KEYS.PERIOD,
  129. 191: KEYS.SLASH,
  130. 192: KEYS.BACKQUOTE,
  131. 219: KEYS.BRACKET_LEFT,
  132. 220: KEYS.BACKSLASH,
  133. 221: KEYS.BRACKET_RIGHT,
  134. 222: KEYS.QUOTE,
  135. 224: KEYS.META,
  136. 229: KEYS.SEMICOLON
  137. };
  138. /**
  139. * Generate codes for digit keys (0-9).
  140. */
  141. for (let i = 0; i < 10; i++) {
  142. keyCodeToKey[i + 48] = `${i}`;
  143. }
  144. /**
  145. * Generate codes for letter keys (a-z).
  146. */
  147. for (let i = 0; i < 26; i++) {
  148. const keyCode = i + 65;
  149. keyCodeToKey[keyCode] = String.fromCharCode(keyCode).toLowerCase();
  150. }
  151. /**
  152. * Returns key associated with the keyCode from the passed event.
  153. *
  154. * @param {KeyboardEvent} event - The event.
  155. * @returns {KEYS} - The key on the keyboard.
  156. */
  157. export function keyboardEventToKey(event) {
  158. return keyCodeToKey[event.which];
  159. }