KeyCode.js 6.8 KB

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