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.

keycode.js 3.4KB

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