unicode.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import { arrayEach } from './array';
  2. export const KEY_CODES = {
  3. MOUSE_LEFT: 1,
  4. MOUSE_RIGHT: 3,
  5. MOUSE_MIDDLE: 2,
  6. BACKSPACE: 8,
  7. COMMA: 188,
  8. INSERT: 45,
  9. DELETE: 46,
  10. END: 35,
  11. ENTER: 13,
  12. ESCAPE: 27,
  13. CONTROL: 17,
  14. COMMAND_LEFT: 91,
  15. COMMAND_RIGHT: 93,
  16. COMMAND_FIREFOX: 224,
  17. ALT: 18,
  18. HOME: 36,
  19. PAGE_DOWN: 34,
  20. PAGE_UP: 33,
  21. PERIOD: 190,
  22. SPACE: 32,
  23. SHIFT: 16,
  24. CAPS_LOCK: 20,
  25. TAB: 9,
  26. ARROW_RIGHT: 39,
  27. ARROW_LEFT: 37,
  28. ARROW_UP: 38,
  29. ARROW_DOWN: 40,
  30. F1: 112,
  31. F2: 113,
  32. F3: 114,
  33. F4: 115,
  34. F5: 116,
  35. F6: 117,
  36. F7: 118,
  37. F8: 119,
  38. F9: 120,
  39. F10: 121,
  40. F11: 122,
  41. F12: 123,
  42. A: 65,
  43. C: 67,
  44. D: 68,
  45. F: 70,
  46. L: 76,
  47. O: 79,
  48. P: 80,
  49. S: 83,
  50. V: 86,
  51. X: 88,
  52. };
  53. /**
  54. * Returns true if keyCode represents a printable character.
  55. *
  56. * @param {Number} keyCode
  57. * @returns {Boolean}
  58. */
  59. export function isPrintableChar(keyCode) {
  60. return ((keyCode === 32) || // space
  61. (keyCode >= 48 && keyCode <= 57) || // 0-9
  62. (keyCode >= 96 && keyCode <= 111) || // numpad
  63. (keyCode >= 186 && keyCode <= 192) || // ;=,-./`
  64. (keyCode >= 219 && keyCode <= 222) || // []{}\|"'
  65. keyCode >= 226 || // special chars (229 for Asian chars)
  66. (keyCode >= 65 && keyCode <= 90)); // a-z
  67. }
  68. /**
  69. * @param {Number} keyCode
  70. * @returns {Boolean}
  71. */
  72. export function isMetaKey(keyCode) {
  73. const metaKeys = [
  74. KEY_CODES.ARROW_DOWN,
  75. KEY_CODES.ARROW_UP,
  76. KEY_CODES.ARROW_LEFT,
  77. KEY_CODES.ARROW_RIGHT,
  78. KEY_CODES.HOME,
  79. KEY_CODES.END,
  80. KEY_CODES.DELETE,
  81. KEY_CODES.BACKSPACE,
  82. KEY_CODES.F1,
  83. KEY_CODES.F2,
  84. KEY_CODES.F3,
  85. KEY_CODES.F4,
  86. KEY_CODES.F5,
  87. KEY_CODES.F6,
  88. KEY_CODES.F7,
  89. KEY_CODES.F8,
  90. KEY_CODES.F9,
  91. KEY_CODES.F10,
  92. KEY_CODES.F11,
  93. KEY_CODES.F12,
  94. KEY_CODES.TAB,
  95. KEY_CODES.PAGE_DOWN,
  96. KEY_CODES.PAGE_UP,
  97. KEY_CODES.ENTER,
  98. KEY_CODES.ESCAPE,
  99. KEY_CODES.SHIFT,
  100. KEY_CODES.CAPS_LOCK,
  101. KEY_CODES.ALT
  102. ];
  103. return metaKeys.indexOf(keyCode) !== -1;
  104. }
  105. /**
  106. * Checks if passed key code is ctrl or cmd key. Depends on what OS the code runs it check key code based on
  107. * different meta key codes.
  108. *
  109. * @param {Number} keyCode Key code to check.
  110. * @returns {Boolean}
  111. */
  112. export function isCtrlKey(keyCode) {
  113. const keys = [];
  114. if (window.navigator.platform.includes('Mac')) {
  115. keys.push(KEY_CODES.COMMAND_LEFT, KEY_CODES.COMMAND_RIGHT, KEY_CODES.COMMAND_FIREFOX);
  116. } else {
  117. keys.push(KEY_CODES.CONTROL);
  118. }
  119. return keys.includes(keyCode);
  120. }
  121. /**
  122. * Checks if passed key code is ctrl or cmd key. This helper checks if the key code matches to meta keys
  123. * regardless of the OS on which it is running.
  124. *
  125. * @param {Number} keyCode Key code to check.
  126. * @returns {Boolean}
  127. */
  128. export function isCtrlMetaKey(keyCode) {
  129. return [KEY_CODES.CONTROL, KEY_CODES.COMMAND_LEFT, KEY_CODES.COMMAND_RIGHT, KEY_CODES.COMMAND_FIREFOX].includes(keyCode);
  130. }
  131. /**
  132. * @param {Number} keyCode
  133. * @param {String} baseCode
  134. * @returns {Boolean}
  135. */
  136. export function isKey(keyCode, baseCode) {
  137. const keys = baseCode.split('|');
  138. let result = false;
  139. arrayEach(keys, (key) => {
  140. if (keyCode === KEY_CODES[key]) {
  141. result = true;
  142. return false;
  143. }
  144. });
  145. return result;
  146. }