keycode.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. export { keyCode, toKey, toKeyCode, keys };
  2. const ignorables = {
  3. Alt: 18,
  4. AltGraph: 18,
  5. ArrowDown: 40,
  6. ArrowLeft: 37,
  7. ArrowRight: 39,
  8. ArrowUp: 38,
  9. Backspace: 8,
  10. CapsLock: 20,
  11. Control: 17,
  12. ContextMenu: 93,
  13. Dead: 221,
  14. Delete: 46,
  15. End: 35,
  16. Escape: 27,
  17. F1: 112,
  18. F2: 113,
  19. F3: 114,
  20. F4: 115,
  21. F5: 116,
  22. F6: 117,
  23. F7: 118,
  24. F8: 119,
  25. F9: 120,
  26. F10: 121,
  27. F11: 122,
  28. F12: 123,
  29. Home: 36,
  30. Insert: 45,
  31. NumLock: 144,
  32. PageDown: 34,
  33. PageUp: 33,
  34. Pause: 19,
  35. PrintScreen: 44,
  36. Process: 229,
  37. Shift: 16,
  38. ScrollLock: 145,
  39. Tab: 9,
  40. Unidentified: 229
  41. };
  42. var keyCode = {
  43. c: 67,
  44. x: 88,
  45. z: 90,
  46. BACKSPACE_SAFARI: 127,
  47. Enter: 13,
  48. Meta_LEFT: 91,
  49. Meta_RIGHT: 92,
  50. Space: 32,
  51. ...ignorables
  52. };
  53. const keyCodeRev = Object.entries(keyCode).reduce(
  54. (acc, [key, value]) =>
  55. (
  56. // eslint-disable-next-line no-sequences
  57. (acc[value] = acc[value] === undefined ? key : acc[value]), acc
  58. ),
  59. {}
  60. ),
  61. keys = Object.entries(keyCode).reduce(
  62. // eslint-disable-next-line no-sequences
  63. (acc, [key, value]) => ((acc[key] = key === "Space" ? " " : key), acc),
  64. {}
  65. );
  66. function toKey(keyCode, shiftKey) {
  67. return (
  68. keyCodeRev[keyCode] ||
  69. (shiftKey
  70. ? String.fromCharCode(keyCode)
  71. : String.fromCharCode(keyCode).toLowerCase())
  72. );
  73. }
  74. function toKeyCode(key) {
  75. return keyCode[key];
  76. }