| /* |
| * from noVNC: HTML5 VNC client |
| * Copyright (C) 2010 Joel Martin |
| * Licensed under LGPL-3 (see LICENSE.txt) |
| */ |
| |
| /* Translate DOM key down/up event to keysym value */ |
| function getKeysym(e) { |
| var evt, keysym; |
| evt = (e ? e : window.event); |
| |
| /* Remap modifier and special keys */ |
| switch ( evt.keyCode ) { |
| case 8 : keysym = 0xFF08; break; // BACKSPACE |
| case 9 : keysym = 0xFF09; break; // TAB |
| case 13 : keysym = 0xFF0D; break; // ENTER |
| case 27 : keysym = 0xFF1B; break; // ESCAPE |
| case 45 : keysym = 0xFF63; break; // INSERT |
| case 46 : keysym = 0xFFFF; break; // DELETE |
| case 36 : keysym = 0xFF50; break; // HOME |
| case 35 : keysym = 0xFF57; break; // END |
| case 33 : keysym = 0xFF55; break; // PAGE_UP |
| case 34 : keysym = 0xFF56; break; // PAGE_DOWN |
| case 37 : keysym = 0xFF51; break; // LEFT |
| case 38 : keysym = 0xFF52; break; // UP |
| case 39 : keysym = 0xFF53; break; // RIGHT |
| case 40 : keysym = 0xFF54; break; // DOWN |
| case 112 : keysym = 0xFFBE; break; // F1 |
| case 113 : keysym = 0xFFBF; break; // F2 |
| case 114 : keysym = 0xFFC0; break; // F3 |
| case 115 : keysym = 0xFFC1; break; // F4 |
| case 116 : keysym = 0xFFC2; break; // F5 |
| case 117 : keysym = 0xFFC3; break; // F6 |
| case 118 : keysym = 0xFFC4; break; // F7 |
| case 119 : keysym = 0xFFC5; break; // F8 |
| case 120 : keysym = 0xFFC6; break; // F9 |
| case 121 : keysym = 0xFFC7; break; // F10 |
| case 122 : keysym = 0xFFC8; break; // F11 |
| case 123 : keysym = 0xFFC9; break; // F12 |
| case 16 : keysym = 0xFFE1; break; // SHIFT |
| case 17 : keysym = 0xFFE3; break; // CONTROL |
| //case 18 : keysym = 0xFFE7; break; // Left Meta (Mac Option) |
| case 18 : keysym = 0xFFE9; break; // Left ALT (Mac Command) |
| default : keysym = evt.keyCode; break; |
| } |
| |
| /* Remap symbols */ |
| switch (keysym) { |
| case 186 : keysym = 59; break; // ; (IE) |
| case 187 : keysym = 61; break; // = (IE) |
| case 188 : keysym = 44; break; // , (Mozilla, IE) |
| case 109 : // - (Mozilla) |
| if (Util.Engine.gecko) { |
| keysym = 45; } |
| break; |
| case 189 : keysym = 45; break; // - (IE) |
| case 190 : keysym = 46; break; // . (Mozilla, IE) |
| case 191 : keysym = 47; break; // / (Mozilla, IE) |
| case 192 : keysym = 96; break; // ` (Mozilla, IE) |
| case 219 : keysym = 91; break; // [ (Mozilla, IE) |
| case 220 : keysym = 92; break; // \ (Mozilla, IE) |
| case 221 : keysym = 93; break; // ] (Mozilla, IE) |
| case 222 : keysym = 39; break; // ' (Mozilla, IE) |
| } |
| |
| /* Remap shifted and unshifted keys */ |
| if (!!evt.shiftKey) { |
| switch (keysym) { |
| case 48 : keysym = 41 ; break; // ) (shifted 0) |
| case 49 : keysym = 33 ; break; // ! (shifted 1) |
| case 50 : keysym = 64 ; break; // @ (shifted 2) |
| case 51 : keysym = 35 ; break; // # (shifted 3) |
| case 52 : keysym = 36 ; break; // $ (shifted 4) |
| case 53 : keysym = 37 ; break; // % (shifted 5) |
| case 54 : keysym = 94 ; break; // ^ (shifted 6) |
| case 55 : keysym = 38 ; break; // & (shifted 7) |
| case 56 : keysym = 42 ; break; // * (shifted 8) |
| case 57 : keysym = 40 ; break; // ( (shifted 9) |
| |
| case 59 : keysym = 58 ; break; // : (shifted `) |
| case 61 : keysym = 43 ; break; // + (shifted ;) |
| case 44 : keysym = 60 ; break; // < (shifted ,) |
| case 45 : keysym = 95 ; break; // _ (shifted -) |
| case 46 : keysym = 62 ; break; // > (shifted .) |
| case 47 : keysym = 63 ; break; // ? (shifted /) |
| case 96 : keysym = 126; break; // ~ (shifted `) |
| case 91 : keysym = 123; break; // { (shifted [) |
| case 92 : keysym = 124; break; // | (shifted \) |
| case 93 : keysym = 125; break; // } (shifted ]) |
| case 39 : keysym = 34 ; break; // " (shifted ') |
| } |
| } else if ((keysym >= 65) && (keysym <=90)) { |
| /* Remap unshifted A-Z */ |
| keysym += 32; |
| } |
| |
| return keysym; |
| } |
| |