KeyCode.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512
  1. /**
  2. * @ignore
  3. * some key-codes definition and utils from closure-library
  4. * @author yiminghe@gmail.com
  5. */
  6. const KeyCode = {
  7. /**
  8. * MAC_ENTER
  9. */
  10. MAC_ENTER: 3,
  11. /**
  12. * BACKSPACE
  13. */
  14. BACKSPACE: 8,
  15. /**
  16. * TAB
  17. */
  18. TAB: 9,
  19. /**
  20. * NUMLOCK on FF/Safari Mac
  21. */
  22. NUM_CENTER: 12,
  23. /**
  24. * ENTER
  25. */
  26. ENTER: 13,
  27. /**
  28. * SHIFT
  29. */
  30. SHIFT: 16,
  31. /**
  32. * CTRL
  33. */
  34. CTRL: 17,
  35. /**
  36. * ALT
  37. */
  38. ALT: 18,
  39. /**
  40. * PAUSE
  41. */
  42. PAUSE: 19,
  43. /**
  44. * CAPS_LOCK
  45. */
  46. CAPS_LOCK: 20,
  47. /**
  48. * ESC
  49. */
  50. ESC: 27,
  51. /**
  52. * SPACE
  53. */
  54. SPACE: 32,
  55. /**
  56. * PAGE_UP
  57. */
  58. PAGE_UP: 33,
  59. /**
  60. * PAGE_DOWN
  61. */
  62. PAGE_DOWN: 34,
  63. /**
  64. * END
  65. */
  66. END: 35,
  67. /**
  68. * HOME
  69. */
  70. HOME: 36,
  71. /**
  72. * LEFT
  73. */
  74. LEFT: 37,
  75. /**
  76. * UP
  77. */
  78. UP: 38,
  79. /**
  80. * RIGHT
  81. */
  82. RIGHT: 39,
  83. /**
  84. * DOWN
  85. */
  86. DOWN: 40,
  87. /**
  88. * PRINT_SCREEN
  89. */
  90. PRINT_SCREEN: 44,
  91. /**
  92. * INSERT
  93. */
  94. INSERT: 45,
  95. /**
  96. * DELETE
  97. */
  98. DELETE: 46,
  99. /**
  100. * ZERO
  101. */
  102. ZERO: 48,
  103. /**
  104. * ONE
  105. */
  106. ONE: 49,
  107. /**
  108. * TWO
  109. */
  110. TWO: 50,
  111. /**
  112. * THREE
  113. */
  114. THREE: 51,
  115. /**
  116. * FOUR
  117. */
  118. FOUR: 52,
  119. /**
  120. * FIVE
  121. */
  122. FIVE: 53,
  123. /**
  124. * SIX
  125. */
  126. SIX: 54,
  127. /**
  128. * SEVEN
  129. */
  130. SEVEN: 55,
  131. /**
  132. * EIGHT
  133. */
  134. EIGHT: 56,
  135. /**
  136. * NINE
  137. */
  138. NINE: 57,
  139. /**
  140. * QUESTION_MARK
  141. */
  142. QUESTION_MARK: 63,
  143. /**
  144. * A
  145. */
  146. A: 65,
  147. /**
  148. * B
  149. */
  150. B: 66,
  151. /**
  152. * C
  153. */
  154. C: 67,
  155. /**
  156. * D
  157. */
  158. D: 68,
  159. /**
  160. * E
  161. */
  162. E: 69,
  163. /**
  164. * F
  165. */
  166. F: 70,
  167. /**
  168. * G
  169. */
  170. G: 71,
  171. /**
  172. * H
  173. */
  174. H: 72,
  175. /**
  176. * I
  177. */
  178. I: 73,
  179. /**
  180. * J
  181. */
  182. J: 74,
  183. /**
  184. * K
  185. */
  186. K: 75,
  187. /**
  188. * L
  189. */
  190. L: 76,
  191. /**
  192. * M
  193. */
  194. M: 77,
  195. /**
  196. * N
  197. */
  198. N: 78,
  199. /**
  200. * O
  201. */
  202. O: 79,
  203. /**
  204. * P
  205. */
  206. P: 80,
  207. /**
  208. * Q
  209. */
  210. Q: 81,
  211. /**
  212. * R
  213. */
  214. R: 82,
  215. /**
  216. * S
  217. */
  218. S: 83,
  219. /**
  220. * T
  221. */
  222. T: 84,
  223. /**
  224. * U
  225. */
  226. U: 85,
  227. /**
  228. * V
  229. */
  230. V: 86,
  231. /**
  232. * W
  233. */
  234. W: 87,
  235. /**
  236. * X
  237. */
  238. X: 88,
  239. /**
  240. * Y
  241. */
  242. Y: 89,
  243. /**
  244. * Z
  245. */
  246. Z: 90,
  247. /**
  248. * META
  249. */
  250. META: 91,
  251. /**
  252. * WIN_KEY_RIGHT
  253. */
  254. WIN_KEY_RIGHT: 92,
  255. /**
  256. * CONTEXT_MENU
  257. */
  258. CONTEXT_MENU: 93,
  259. /**
  260. * NUM_ZERO
  261. */
  262. NUM_ZERO: 96,
  263. /**
  264. * NUM_ONE
  265. */
  266. NUM_ONE: 97,
  267. /**
  268. * NUM_TWO
  269. */
  270. NUM_TWO: 98,
  271. /**
  272. * NUM_THREE
  273. */
  274. NUM_THREE: 99,
  275. /**
  276. * NUM_FOUR
  277. */
  278. NUM_FOUR: 100,
  279. /**
  280. * NUM_FIVE
  281. */
  282. NUM_FIVE: 101,
  283. /**
  284. * NUM_SIX
  285. */
  286. NUM_SIX: 102,
  287. /**
  288. * NUM_SEVEN
  289. */
  290. NUM_SEVEN: 103,
  291. /**
  292. * NUM_EIGHT
  293. */
  294. NUM_EIGHT: 104,
  295. /**
  296. * NUM_NINE
  297. */
  298. NUM_NINE: 105,
  299. /**
  300. * NUM_MULTIPLY
  301. */
  302. NUM_MULTIPLY: 106,
  303. /**
  304. * NUM_PLUS
  305. */
  306. NUM_PLUS: 107,
  307. /**
  308. * NUM_MINUS
  309. */
  310. NUM_MINUS: 109,
  311. /**
  312. * NUM_PERIOD
  313. */
  314. NUM_PERIOD: 110,
  315. /**
  316. * NUM_DIVISION
  317. */
  318. NUM_DIVISION: 111,
  319. /**
  320. * F1
  321. */
  322. F1: 112,
  323. /**
  324. * F2
  325. */
  326. F2: 113,
  327. /**
  328. * F3
  329. */
  330. F3: 114,
  331. /**
  332. * F4
  333. */
  334. F4: 115,
  335. /**
  336. * F5
  337. */
  338. F5: 116,
  339. /**
  340. * F6
  341. */
  342. F6: 117,
  343. /**
  344. * F7
  345. */
  346. F7: 118,
  347. /**
  348. * F8
  349. */
  350. F8: 119,
  351. /**
  352. * F9
  353. */
  354. F9: 120,
  355. /**
  356. * F10
  357. */
  358. F10: 121,
  359. /**
  360. * F11
  361. */
  362. F11: 122,
  363. /**
  364. * F12
  365. */
  366. F12: 123,
  367. /**
  368. * NUMLOCK
  369. */
  370. NUMLOCK: 144,
  371. /**
  372. * SEMICOLON
  373. */
  374. SEMICOLON: 186,
  375. /**
  376. * DASH
  377. */
  378. DASH: 189,
  379. /**
  380. * EQUALS
  381. */
  382. EQUALS: 187,
  383. /**
  384. * COMMA
  385. */
  386. COMMA: 188,
  387. /**
  388. * PERIOD
  389. */
  390. PERIOD: 190,
  391. /**
  392. * SLASH
  393. */
  394. SLASH: 191,
  395. /**
  396. * APOSTROPHE
  397. */
  398. APOSTROPHE: 192,
  399. /**
  400. * SINGLE_QUOTE
  401. */
  402. SINGLE_QUOTE: 222,
  403. /**
  404. * OPEN_SQUARE_BRACKET
  405. */
  406. OPEN_SQUARE_BRACKET: 219,
  407. /**
  408. * BACKSLASH
  409. */
  410. BACKSLASH: 220,
  411. /**
  412. * CLOSE_SQUARE_BRACKET
  413. */
  414. CLOSE_SQUARE_BRACKET: 221,
  415. /**
  416. * WIN_KEY
  417. */
  418. WIN_KEY: 224,
  419. /**
  420. * MAC_FF_META
  421. */
  422. MAC_FF_META: 224,
  423. /**
  424. * WIN_IME
  425. */
  426. WIN_IME: 229,
  427. // ======================== Function ========================
  428. /**
  429. * whether text and modified key is entered at the same time.
  430. */
  431. isTextModifyingKeyEvent: function isTextModifyingKeyEvent(e) {
  432. const {
  433. keyCode
  434. } = e;
  435. if (e.altKey && !e.ctrlKey || e.metaKey ||
  436. // Function keys don't generate text
  437. keyCode >= KeyCode.F1 && keyCode <= KeyCode.F12) {
  438. return false;
  439. }
  440. // The following keys are quite harmless, even in combination with
  441. // CTRL, ALT or SHIFT.
  442. switch (keyCode) {
  443. case KeyCode.ALT:
  444. case KeyCode.CAPS_LOCK:
  445. case KeyCode.CONTEXT_MENU:
  446. case KeyCode.CTRL:
  447. case KeyCode.DOWN:
  448. case KeyCode.END:
  449. case KeyCode.ESC:
  450. case KeyCode.HOME:
  451. case KeyCode.INSERT:
  452. case KeyCode.LEFT:
  453. case KeyCode.MAC_FF_META:
  454. case KeyCode.META:
  455. case KeyCode.NUMLOCK:
  456. case KeyCode.NUM_CENTER:
  457. case KeyCode.PAGE_DOWN:
  458. case KeyCode.PAGE_UP:
  459. case KeyCode.PAUSE:
  460. case KeyCode.PRINT_SCREEN:
  461. case KeyCode.RIGHT:
  462. case KeyCode.SHIFT:
  463. case KeyCode.UP:
  464. case KeyCode.WIN_KEY:
  465. case KeyCode.WIN_KEY_RIGHT:
  466. return false;
  467. default:
  468. return true;
  469. }
  470. },
  471. /**
  472. * whether character is entered.
  473. */
  474. isCharacterKey: function isCharacterKey(keyCode) {
  475. if (keyCode >= KeyCode.ZERO && keyCode <= KeyCode.NINE) {
  476. return true;
  477. }
  478. if (keyCode >= KeyCode.NUM_ZERO && keyCode <= KeyCode.NUM_MULTIPLY) {
  479. return true;
  480. }
  481. if (keyCode >= KeyCode.A && keyCode <= KeyCode.Z) {
  482. return true;
  483. }
  484. // Safari sends zero key code for non-latin characters.
  485. if (window.navigator.userAgent.indexOf('WebKit') !== -1 && keyCode === 0) {
  486. return true;
  487. }
  488. switch (keyCode) {
  489. case KeyCode.SPACE:
  490. case KeyCode.QUESTION_MARK:
  491. case KeyCode.NUM_PLUS:
  492. case KeyCode.NUM_MINUS:
  493. case KeyCode.NUM_PERIOD:
  494. case KeyCode.NUM_DIVISION:
  495. case KeyCode.SEMICOLON:
  496. case KeyCode.DASH:
  497. case KeyCode.EQUALS:
  498. case KeyCode.COMMA:
  499. case KeyCode.PERIOD:
  500. case KeyCode.SLASH:
  501. case KeyCode.APOSTROPHE:
  502. case KeyCode.SINGLE_QUOTE:
  503. case KeyCode.OPEN_SQUARE_BRACKET:
  504. case KeyCode.BACKSLASH:
  505. case KeyCode.CLOSE_SQUARE_BRACKET:
  506. return true;
  507. default:
  508. return false;
  509. }
  510. }
  511. };
  512. export default KeyCode;