2
0

keyevents.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. const keyboardMap = [ // https://stackoverflow.com/a/23377822/7200161
  2. "", // [0]
  3. "", // [1]
  4. "", // [2]
  5. "CANCEL", // [3]
  6. "", // [4]
  7. "", // [5]
  8. "HELP", // [6]
  9. "", // [7]
  10. "BACK_SPACE", // [8]
  11. "TAB", // [9]
  12. "", // [10]
  13. "", // [11]
  14. "CLEAR", // [12]
  15. "ENTER", // [13]
  16. "ENTER_SPECIAL", // [14]
  17. "", // [15]
  18. "SHIFT", // [16]
  19. "CONTROL", // [17]
  20. "ALT", // [18]
  21. "PAUSE", // [19]
  22. "CAPS_LOCK", // [20]
  23. "KANA", // [21]
  24. "EISU", // [22]
  25. "JUNJA", // [23]
  26. "FINAL", // [24]
  27. "HANJA", // [25]
  28. "", // [26]
  29. "ESCAPE", // [27]
  30. "CONVERT", // [28]
  31. "NONCONVERT", // [29]
  32. "ACCEPT", // [30]
  33. "MODECHANGE", // [31]
  34. "SPACE", // [32]
  35. "PAGE_UP", // [33]
  36. "PAGE_DOWN", // [34]
  37. "END", // [35]
  38. "HOME", // [36]
  39. "LEFT", // [37]
  40. "UP", // [38]
  41. "RIGHT", // [39]
  42. "DOWN", // [40]
  43. "SELECT", // [41]
  44. "PRINT", // [42]
  45. "EXECUTE", // [43]
  46. "PRINTSCREEN", // [44]
  47. "INSERT", // [45]
  48. "DELETE", // [46]
  49. "", // [47]
  50. "0", // [48]
  51. "1", // [49]
  52. "2", // [50]
  53. "3", // [51]
  54. "4", // [52]
  55. "5", // [53]
  56. "6", // [54]
  57. "7", // [55]
  58. "8", // [56]
  59. "9", // [57]
  60. "COLON", // [58]
  61. "SEMICOLON", // [59]
  62. "LESS_THAN", // [60]
  63. "EQUALS", // [61]
  64. "GREATER_THAN", // [62]
  65. "QUESTION_MARK", // [63]
  66. "AT", // [64]
  67. "A", // [65]
  68. "B", // [66]
  69. "C", // [67]
  70. "D", // [68]
  71. "E", // [69]
  72. "F", // [70]
  73. "G", // [71]
  74. "H", // [72]
  75. "I", // [73]
  76. "J", // [74]
  77. "K", // [75]
  78. "L", // [76]
  79. "M", // [77]
  80. "N", // [78]
  81. "O", // [79]
  82. "P", // [80]
  83. "Q", // [81]
  84. "R", // [82]
  85. "S", // [83]
  86. "T", // [84]
  87. "U", // [85]
  88. "V", // [86]
  89. "W", // [87]
  90. "X", // [88]
  91. "Y", // [89]
  92. "Z", // [90]
  93. "OS_KEY", // [91] Windows Key (Windows) or Command Key (Mac)
  94. "", // [92]
  95. "CONTEXT_MENU", // [93]
  96. "", // [94]
  97. "SLEEP", // [95]
  98. "NUMPAD0", // [96]
  99. "NUMPAD1", // [97]
  100. "NUMPAD2", // [98]
  101. "NUMPAD3", // [99]
  102. "NUMPAD4", // [100]
  103. "NUMPAD5", // [101]
  104. "NUMPAD6", // [102]
  105. "NUMPAD7", // [103]
  106. "NUMPAD8", // [104]
  107. "NUMPAD9", // [105]
  108. "MULTIPLY", // [106]
  109. "ADD", // [107]
  110. "SEPARATOR", // [108]
  111. "SUBTRACT", // [109]
  112. "DECIMAL", // [110]
  113. "DIVIDE", // [111]
  114. "F1", // [112]
  115. "F2", // [113]
  116. "F3", // [114]
  117. "F4", // [115]
  118. "F5", // [116]
  119. "F6", // [117]
  120. "F7", // [118]
  121. "F8", // [119]
  122. "F9", // [120]
  123. "F10", // [121]
  124. "F11", // [122]
  125. "F12", // [123]
  126. "F13", // [124]
  127. "F14", // [125]
  128. "F15", // [126]
  129. "F16", // [127]
  130. "F17", // [128]
  131. "F18", // [129]
  132. "F19", // [130]
  133. "F20", // [131]
  134. "F21", // [132]
  135. "F22", // [133]
  136. "F23", // [134]
  137. "F24", // [135]
  138. "", // [136]
  139. "", // [137]
  140. "", // [138]
  141. "", // [139]
  142. "", // [140]
  143. "", // [141]
  144. "", // [142]
  145. "", // [143]
  146. "NUM_LOCK", // [144]
  147. "SCROLL_LOCK", // [145]
  148. "WIN_OEM_FJ_JISHO", // [146]
  149. "WIN_OEM_FJ_MASSHOU", // [147]
  150. "WIN_OEM_FJ_TOUROKU", // [148]
  151. "WIN_OEM_FJ_LOYA", // [149]
  152. "WIN_OEM_FJ_ROYA", // [150]
  153. "", // [151]
  154. "", // [152]
  155. "", // [153]
  156. "", // [154]
  157. "", // [155]
  158. "", // [156]
  159. "", // [157]
  160. "", // [158]
  161. "", // [159]
  162. "CIRCUMFLEX", // [160]
  163. "EXCLAMATION", // [161]
  164. "DOUBLE_QUOTE", // [162]
  165. "HASH", // [163]
  166. "DOLLAR", // [164]
  167. "PERCENT", // [165]
  168. "AMPERSAND", // [166]
  169. "UNDERSCORE", // [167]
  170. "OPEN_PAREN", // [168]
  171. "CLOSE_PAREN", // [169]
  172. "ASTERISK", // [170]
  173. "PLUS", // [171]
  174. "PIPE", // [172]
  175. "HYPHEN_MINUS", // [173]
  176. "OPEN_CURLY_BRACKET", // [174]
  177. "CLOSE_CURLY_BRACKET", // [175]
  178. "TILDE", // [176]
  179. "", // [177]
  180. "", // [178]
  181. "", // [179]
  182. "", // [180]
  183. "VOLUME_MUTE", // [181]
  184. "VOLUME_DOWN", // [182]
  185. "VOLUME_UP", // [183]
  186. "", // [184]
  187. "", // [185]
  188. "SEMICOLON", // [186]
  189. "EQUALS", // [187]
  190. "COMMA", // [188]
  191. "MINUS", // [189]
  192. "PERIOD", // [190]
  193. "SLASH", // [191]
  194. "BACK_QUOTE", // [192]
  195. "", // [193]
  196. "", // [194]
  197. "", // [195]
  198. "", // [196]
  199. "", // [197]
  200. "", // [198]
  201. "", // [199]
  202. "", // [200]
  203. "", // [201]
  204. "", // [202]
  205. "", // [203]
  206. "", // [204]
  207. "", // [205]
  208. "", // [206]
  209. "", // [207]
  210. "", // [208]
  211. "", // [209]
  212. "", // [210]
  213. "", // [211]
  214. "", // [212]
  215. "", // [213]
  216. "", // [214]
  217. "", // [215]
  218. "", // [216]
  219. "", // [217]
  220. "", // [218]
  221. "OPEN_BRACKET", // [219]
  222. "BACK_SLASH", // [220]
  223. "CLOSE_BRACKET", // [221]
  224. "QUOTE", // [222]
  225. "", // [223]
  226. "META", // [224]
  227. "ALTGR", // [225]
  228. "", // [226]
  229. "WIN_ICO_HELP", // [227]
  230. "WIN_ICO_00", // [228]
  231. "", // [229]
  232. "WIN_ICO_CLEAR", // [230]
  233. "", // [231]
  234. "", // [232]
  235. "WIN_OEM_RESET", // [233]
  236. "WIN_OEM_JUMP", // [234]
  237. "WIN_OEM_PA1", // [235]
  238. "WIN_OEM_PA2", // [236]
  239. "WIN_OEM_PA3", // [237]
  240. "WIN_OEM_WSCTRL", // [238]
  241. "WIN_OEM_CUSEL", // [239]
  242. "WIN_OEM_ATTN", // [240]
  243. "WIN_OEM_FINISH", // [241]
  244. "WIN_OEM_COPY", // [242]
  245. "WIN_OEM_AUTO", // [243]
  246. "WIN_OEM_ENLW", // [244]
  247. "WIN_OEM_BACKTAB", // [245]
  248. "ATTN", // [246]
  249. "CRSEL", // [247]
  250. "EXSEL", // [248]
  251. "EREOF", // [249]
  252. "PLAY", // [250]
  253. "ZOOM", // [251]
  254. "", // [252]
  255. "PA1", // [253]
  256. "WIN_OEM_CLEAR", // [254]
  257. "" // [255]
  258. ];
  259. $(window).keyup(function(event){
  260. if ($(event.target).closest("input")[0]) { // don't fire if any input-field has focus
  261. return;
  262. }
  263. let actionShortcuts = ['Q','W','E','R','T'];
  264. let key = keyboardMap[event.keyCode];
  265. switch(key){
  266. case '1':
  267. case 'NUMPAD1':
  268. setup.executeActionOfIndex(0);break;
  269. case '2':
  270. case 'NUMPAD2':
  271. setup.executeActionOfIndex(1);break;
  272. case '3':
  273. case 'NUMPAD3':
  274. setup.executeActionOfIndex(2);break;
  275. case '4':
  276. case 'NUMPAD4':
  277. setup.executeActionOfIndex(3);break;
  278. case '5':
  279. case 'NUMPAD5':
  280. setup.executeActionOfIndex(4);break;
  281. case '6':
  282. case 'NUMPAD6':
  283. setup.executeActionOfIndex(5);break;
  284. case '7':
  285. case 'NUMPAD7':
  286. setup.executeActionOfIndex(6);break;
  287. case '8':
  288. case 'NUMPAD8':
  289. setup.executeActionOfIndex(7);break;
  290. case '9':
  291. case 'NUMPAD9':
  292. setup.executeActionOfIndex(8);break;
  293. case '0':
  294. case 'NUMPAD0':
  295. setup.executeActionOfIndex(9);break;
  296. /*case 'F5':
  297. return;
  298. case 'ESCAPE':
  299. setup.executeESCLocation();break;
  300. case '1':
  301. case 'NUMPAD1':
  302. setup.executeConnectedLocationOfIndex(1);break;
  303. case '2':
  304. case 'NUMPAD2':
  305. setup.executeConnectedLocationOfIndex(2);break;
  306. case '3':
  307. case 'NUMPAD3':
  308. setup.executeConnectedLocationOfIndex(3);break;
  309. case '4':
  310. case 'NUMPAD4':
  311. setup.executeConnectedLocationOfIndex(4);break;
  312. case '5':
  313. case 'NUMPAD5':
  314. setup.executeConnectedLocationOfIndex(5);break;
  315. case '6':
  316. case 'NUMPAD6':
  317. setup.executeConnectedLocationOfIndex(6);break;
  318. case '7':
  319. case 'NUMPAD7':
  320. setup.executeConnectedLocationOfIndex(7);break;
  321. case '8':
  322. case 'NUMPAD8':
  323. setup.executeConnectedLocationOfIndex(8);break;
  324. case '9':
  325. case 'NUMPAD9':
  326. setup.executeConnectedLocationOfIndex(9);break;
  327. case '0':
  328. case 'NUMPAD0':
  329. setup.executeConnectedLocationOfIndex(10);break;
  330. case actionShortcuts[0]:
  331. setup.executeActionOfIndex(0);break;
  332. case actionShortcuts[1]:
  333. setup.executeActionOfIndex(1);break;
  334. case actionShortcuts[2]:
  335. setup.executeActionOfIndex(2);break;
  336. case actionShortcuts[3]:
  337. setup.executeActionOfIndex(3);break;
  338. case actionShortcuts[4]:
  339. setup.executeActionOfIndex(4);break;
  340. default:
  341. setup.executeConnectedLocationByHotkey(key);*/
  342. }
  343. console.log('Key-Event',key);
  344. });
  345. setup.executeActionOfIndex = function(index){
  346. let _actions = State.temporary.actions;
  347. if(!_actions)
  348. return; //There are no actions in the current scene
  349. if(!_actions[index])
  350. return; //The requested action is not defined
  351. _actions[index].execute();
  352. }
  353. /*setup.executeConnectedLocationOfIndex = function(index){
  354. if(State.variables.connectedLocations.length < index)
  355. return; // Index doesn't exist
  356. index -= 1; //The first item has array-index 0
  357. console.log('EXECUTING KEY COMMAND GOTO',index,State.variables.connectedLocations);
  358. setup.connectionExecute(State.variables.connectedLocations[index]);
  359. }
  360. setup.executeConnectedLocationByHotkey = function(hotkey){
  361. let connectedLocations = State.variables.connectedLocations;
  362. let possibleLocations = connectedLocations.filter(connectedLocationData => ("hotkeys" in connectedLocationData && connectedLocationData.hotkeys.includes(hotkey)));
  363. if(possibleLocations.length == 0)
  364. return;
  365. possibleLocations.sortByPriority();
  366. //State.temporary.excutedConnectionData = possibleLocations[0];
  367. //$.wiki('<<ConnectionExecute _excutedConnectionData>>');
  368. setup.connectionExecute(possibleLocations[0]);
  369. }
  370. setup.executeESCLocation = function(){
  371. let escPassage = State.temporary.escPassage;
  372. if(!escPassage)
  373. return; //No Esc-Passage has been set
  374. let gotoCommand = '<<gt '+escPassage+'>>';
  375. console.log('ESCAPE-GT:',escPassage);
  376. $.wiki(gotoCommand);
  377. }*/