510 lines
10 KiB
JavaScript
510 lines
10 KiB
JavaScript
/*
|
|
* Copyright (c) 2015 Sylvain Peyrefitte
|
|
*
|
|
* This file is part of mstsc.js.
|
|
*
|
|
* mstsc.js is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
(function() {
|
|
// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code
|
|
var KeyMap = {
|
|
"" : 0x0000,
|
|
"Escape" : 0x0001,
|
|
"Digit1" : 0x0002,
|
|
"Digit2" : 0x0003,
|
|
"Digit3" : 0x0004,
|
|
"Digit4" : 0x0005,
|
|
"Digit5" : 0x0006,
|
|
"Digit6" : 0x0007,
|
|
"Digit7" : 0x0008,
|
|
"Digit8" : 0x0009,
|
|
"Digit9" : 0x000A,
|
|
"Digit0" : 0x000B,
|
|
"Minus" : 0x000C,
|
|
"Equal" : 0x000D,
|
|
"Backspace" : 0x000E,
|
|
"Tab" : 0x000F,
|
|
"KeyQ" : 0x0010,
|
|
"KeyW" : 0x0011,
|
|
"KeyE" : 0x0012,
|
|
"KeyR" : 0x0013,
|
|
"KeyT" : 0x0014,
|
|
"KeyY" : 0x0015,
|
|
"KeyU" : 0x0016,
|
|
"KeyI" : 0x0017,
|
|
"KeyO" : 0x0018,
|
|
"KeyP" : 0x0019,
|
|
"BracketLeft" : 0x001A,
|
|
"BracketRight" : 0x001B,
|
|
"Enter" : 0x001C,
|
|
"ControlLeft" : 0x001D,
|
|
"KeyA" : 0x001E,
|
|
"KeyS" : 0x001F,
|
|
"KeyD" : 0x0020,
|
|
"KeyF" : 0x0021,
|
|
"KeyG" : 0x0022,
|
|
"KeyH" : 0x0023,
|
|
"KeyJ" : 0x0024,
|
|
"KeyK" : 0x0025,
|
|
"KeyL" : 0x0026,
|
|
"Semicolon" : 0x0027,
|
|
"Quote" : 0x0028,
|
|
"Backquote" : 0x0029,
|
|
"ShiftLeft" : 0x002A,
|
|
"Backslash" : 0x002B,
|
|
"KeyZ" : 0x002C,
|
|
"KeyX" : 0x002D,
|
|
"KeyC" : 0x002E,
|
|
"KeyV" : 0x002F,
|
|
"KeyB" : 0x0030,
|
|
"KeyN" : 0x0031,
|
|
"KeyM" : 0x0032,
|
|
"Comma" : 0x0033,
|
|
"Period" : 0x0034,
|
|
"Slash" : 0x0035,
|
|
"ShiftRight" : 0x0036,
|
|
"NumpadMultiply" : 0x0037,
|
|
"AltLeft" : 0x0038,
|
|
"Space" : 0x0039,
|
|
"CapsLock" : 0x003A,
|
|
"F1" : 0x003B,
|
|
"F2" : 0x003C,
|
|
"F3" : 0x003D,
|
|
"F4" : 0x003E,
|
|
"F5" : 0x003F,
|
|
"F6" : 0x0040,
|
|
"F7" : 0x0041,
|
|
"F8" : 0x0042,
|
|
"F9" : 0x0043,
|
|
"F10" : 0x0044,
|
|
"Pause" : 0x0045,
|
|
"ScrollLock" : 0x0046,
|
|
"Numpad7" : 0x0047,
|
|
"Numpad8" : 0x0048,
|
|
"Numpad9" : 0x0049,
|
|
"NumpadSubtract" : 0x004A,
|
|
"Numpad4" : 0x004B,
|
|
"Numpad5" : 0x004C,
|
|
"Numpad6" : 0x004D,
|
|
"NumpadAdd" : 0x004E,
|
|
"Numpad1" : 0x004F,
|
|
"Numpad2" : 0x0050,
|
|
"Numpad3" : 0x0051,
|
|
"Numpad0" : 0x0052,
|
|
"NumpadDecimal" : 0x0053,
|
|
"PrintScreen" : 0x0054,
|
|
"IntlBackslash" : 0x0056,
|
|
"F11" : 0x0057,
|
|
"F12" : 0x0058,
|
|
"NumpadEqual" : 0x0059,
|
|
"F13" : 0x0064,
|
|
"F14" : 0x0065,
|
|
"F15" : 0x0066,
|
|
"F16" : 0x0067,
|
|
"F17" : 0x0068,
|
|
"F18" : 0x0069,
|
|
"F19" : 0x006A,
|
|
"F20" : 0x006B,
|
|
"F21" : 0x006C,
|
|
"F22" : 0x006D,
|
|
"F23" : 0x006E,
|
|
"KanaMode" : 0x0070,
|
|
"Lang2" : 0x0071,
|
|
"Lang1" : 0x0072,
|
|
"IntlRo" : 0x0073,
|
|
"F24" : 0x0076,
|
|
"Convert" : 0x0079,
|
|
"NonConvert" : 0x007B,
|
|
"IntlYen" : 0x007D,
|
|
"NumpadComma" : 0x007E,
|
|
"MediaTrackPrevious" : 0xE010,
|
|
"MediaTrackNext" : 0xE019,
|
|
"NumpadEnter" : 0xE01C,
|
|
"ControlRight" : 0xE01D,
|
|
"VolumeMute" : 0xE020,
|
|
"LaunchApp2" : 0xE021,
|
|
"MediaPlayPause" : 0xE022,
|
|
"MediaStop" : 0xE024,
|
|
"VolumeDown" : 0xE02E,
|
|
"VolumeUp" : 0xE030,
|
|
"BrowserHome" : 0xE032,
|
|
"NumpadDivide" : 0xE035,
|
|
"PrintScreen" : 0xE037,
|
|
"AltRight" : 0xE038,
|
|
"NumLock" : 0xE045,
|
|
"Pause" : 0xE046,
|
|
"Home" : 0xE047,
|
|
"ArrowUp" : 0xE048,
|
|
"PageUp" : 0xE049,
|
|
"ArrowLeft" : 0xE04B,
|
|
"ArrowRight" : 0xE04D,
|
|
"End" : 0xE04F,
|
|
"ArrowDown" : 0xE050,
|
|
"PageDown" : 0xE051,
|
|
"Insert" : 0xE052,
|
|
"Delete" : 0xE053,
|
|
"OSLeft" : 0xE05B,
|
|
"OSRight" : 0xE05C,
|
|
"ContextMenu" : 0xE05D,
|
|
"Power" : 0xE05E,
|
|
"BrowserSearch" : 0xE065,
|
|
"BrowserFavorites" : 0xE066,
|
|
"BrowserRefresh" : 0xE067,
|
|
"BrowserStop" : 0xE068,
|
|
"BrowserForward" : 0xE069,
|
|
"BrowserBack" : 0xE06A,
|
|
"LaunchApp1" : 0xE06B,
|
|
"LaunchMail" : 0xE06C,
|
|
"MediaSelect" : 0xE06D
|
|
};
|
|
|
|
var UnicodeToCodeFirefox_FR = {
|
|
27 : "Escape",
|
|
112 : "F1",
|
|
113 : "F2",
|
|
114 : "F3",
|
|
115 : "F4",
|
|
116 : "F5",
|
|
117 : "F6",
|
|
118 : "F7",
|
|
119 : "F8",
|
|
120 : "F9",
|
|
121 : "F10",
|
|
122 : "F11",
|
|
123 : "F12",
|
|
0 : "Backquote",
|
|
49 : "Digit1",
|
|
50 : "Digit2",
|
|
51 : "Digit3",
|
|
52 : "Digit4",
|
|
53 : "Digit5",
|
|
54 : "Digit6",
|
|
55 : "Digit7",
|
|
56 : "Digit8",
|
|
57 : "Digit9",
|
|
48 : "Digit0",
|
|
169 : "Minus",
|
|
61 : "Equal",
|
|
8 : "Backspace",
|
|
9 : "Tab",
|
|
65 : "KeyQ",
|
|
90 : "KeyW",
|
|
69 : "KeyE",
|
|
82 : "KeyR",
|
|
84 : "KeyT",
|
|
89 : "KeyY",
|
|
85 : "KeyU",
|
|
73 : "KeyI",
|
|
79 : "KeyO",
|
|
80 : "KeyP",
|
|
160 : "BracketLeft",
|
|
164 : "BracketRight",
|
|
13 : "Enter",
|
|
20 : "CapsLock",
|
|
20 : "CapsLock",
|
|
81 : "KeyA",
|
|
83 : "KeyS",
|
|
68 : "KeyD",
|
|
70 : "KeyF",
|
|
71 : "KeyG",
|
|
72 : "KeyH",
|
|
74 : "KeyJ",
|
|
75 : "KeyK",
|
|
76 : "KeyL",
|
|
77 : "Semicolon",
|
|
165 : "Quote",
|
|
170 : "Backslash",
|
|
16 : "ShiftLeft",
|
|
60 : "IntlBackslash",
|
|
87 : "KeyZ",
|
|
88 : "KeyX",
|
|
67 : "KeyC",
|
|
86 : "KeyV",
|
|
66 : "KeyB",
|
|
78 : "KeyN",
|
|
188 : "KeyM",
|
|
59 : "Comma",
|
|
58 : "Period",
|
|
161 : "Slash",
|
|
16 : "ShiftRight",
|
|
17 : "ControlLeft",
|
|
91 : "OSLeft",
|
|
18 : "AltLeft",
|
|
32 : "Space",
|
|
17 : "ControlLeft",
|
|
18 : "AltRight",
|
|
91 : "OSRight",
|
|
93 : "ContextMenu",
|
|
17 : "ControlRight",
|
|
37 : "ArrowLeft",
|
|
38 : "ArrowUp",
|
|
40 : "ArrowDown",
|
|
39 : "ArrowRight",
|
|
144 : "NumLock",
|
|
144 : "NumLock",
|
|
111 : "NumpadDivide",
|
|
106 : "NumpadMultiply",
|
|
109 : "NumpadSubtract",
|
|
103 : "Numpad7",
|
|
104 : "Numpad8",
|
|
105 : "Numpad9",
|
|
107 : "NumpadAdd",
|
|
100 : "Numpad4",
|
|
101 : "Numpad5",
|
|
102 : "Numpad6",
|
|
97 : "Numpad1",
|
|
98 : "Numpad2",
|
|
99 : "Numpad3",
|
|
96 : "Numpad0",
|
|
110 : "NumpadDecimal",
|
|
13 : "NumpadEnter",
|
|
17 : "ControlLeft",
|
|
67 : "KeyC",
|
|
17 : "ControlLeft"
|
|
};
|
|
|
|
var UnicodeToCodeChrome_FR = {
|
|
27 : "Escape",
|
|
112 : "F1",
|
|
113 : "F2",
|
|
114 : "F3",
|
|
115 : "F4",
|
|
116 : "F5",
|
|
117 : "F6",
|
|
118 : "F7",
|
|
119 : "F8",
|
|
120 : "F9",
|
|
121 : "F10",
|
|
122 : "F11",
|
|
123 : "F12",
|
|
0 : "Backquote",
|
|
49 : "Digit1",
|
|
50 : "Digit2",
|
|
51 : "Digit3",
|
|
52 : "Digit4",
|
|
53 : "Digit5",
|
|
54 : "Digit6",
|
|
55 : "Digit7",
|
|
56 : "Digit8",
|
|
57 : "Digit9",
|
|
48 : "Digit0",
|
|
219 : "Minus",
|
|
187 : "Equal",
|
|
8 : "Backspace",
|
|
9 : "Tab",
|
|
65 : "KeyQ",
|
|
90 : "KeyW",
|
|
69 : "KeyE",
|
|
82 : "KeyR",
|
|
84 : "KeyT",
|
|
89 : "KeyY",
|
|
85 : "KeyU",
|
|
73 : "KeyI",
|
|
79 : "KeyO",
|
|
80 : "KeyP",
|
|
221 : "BracketLeft",
|
|
186 : "BracketRight",
|
|
13 : "Enter",
|
|
20 : "CapsLock",
|
|
20 : "CapsLock",
|
|
81 : "KeyA",
|
|
83 : "KeyS",
|
|
68 : "KeyD",
|
|
70 : "KeyF",
|
|
71 : "KeyG",
|
|
72 : "KeyH",
|
|
74 : "KeyJ",
|
|
75 : "KeyK",
|
|
76 : "KeyL",
|
|
77 : "Semicolon",
|
|
192 : "Quote",
|
|
220 : "Backslash",
|
|
16 : "ShiftLeft",
|
|
60 : "IntlBackslash",
|
|
87 : "KeyZ",
|
|
88 : "KeyX",
|
|
67 : "KeyC",
|
|
86 : "KeyV",
|
|
66 : "KeyB",
|
|
78 : "KeyN",
|
|
188 : "KeyM",
|
|
190 : "Comma",
|
|
191 : "Period",
|
|
223 : "Slash",
|
|
16 : "ShiftRight",
|
|
17 : "ControlLeft",
|
|
91 : "OSLeft",
|
|
18 : "AltLeft",
|
|
32 : "Space",
|
|
17 : "ControlLeft",
|
|
18 : "AltRight",
|
|
91 : "OSRight",
|
|
93 : "ContextMenu",
|
|
17 : "ControlRight",
|
|
37 : "ArrowLeft",
|
|
38 : "ArrowUp",
|
|
40 : "ArrowDown",
|
|
39 : "ArrowRight",
|
|
144 : "NumLock",
|
|
144 : "NumLock",
|
|
111 : "NumpadDivide",
|
|
106 : "NumpadMultiply",
|
|
109 : "NumpadSubtract",
|
|
103 : "Numpad7",
|
|
104 : "Numpad8",
|
|
105 : "Numpad9",
|
|
107 : "NumpadAdd",
|
|
100 : "Numpad4",
|
|
101 : "Numpad5",
|
|
102 : "Numpad6",
|
|
97 : "Numpad1",
|
|
98 : "Numpad2",
|
|
99 : "Numpad3",
|
|
96 : "Numpad0",
|
|
110 : "NumpadDecimal",
|
|
13 : "NumpadEnter",
|
|
17 : "ControlLeft",
|
|
67 : "KeyC",
|
|
17 : "ControlLeft"
|
|
};
|
|
|
|
var UnicodeToCode_EN = {
|
|
27 : "Escape",
|
|
112 : "F1",
|
|
113 : "F2",
|
|
114 : "F3",
|
|
115 : "F4",
|
|
116 : "F5",
|
|
117 : "F6",
|
|
118 : "F7",
|
|
119 : "F8",
|
|
120 : "F9",
|
|
121 : "F10",
|
|
122 : "F11",
|
|
123 : "F12",
|
|
192 : "Backquote",
|
|
49 : "Digit1",
|
|
50 : "Digit2",
|
|
51 : "Digit3",
|
|
52 : "Digit4",
|
|
53 : "Digit5",
|
|
54 : "Digit6",
|
|
55 : "Digit7",
|
|
56 : "Digit8",
|
|
57 : "Digit9",
|
|
48 : "Digit0",
|
|
173 : "Minus",
|
|
61 : "Equal",
|
|
8 : "Backspace",
|
|
9 : "Tab",
|
|
81 : "KeyQ",
|
|
87 : "KeyW",
|
|
69 : "KeyE",
|
|
82 : "KeyR",
|
|
84 : "KeyT",
|
|
89 : "KeyY",
|
|
85 : "KeyU",
|
|
73 : "KeyI",
|
|
79 : "KeyO",
|
|
80 : "KeyP",
|
|
219 : "BracketLeft",
|
|
221 : "BracketRight",
|
|
13 : "Enter",
|
|
20 : "CapsLock",
|
|
65 : "KeyA",
|
|
83 : "KeyS",
|
|
68 : "KeyD",
|
|
70 : "KeyF",
|
|
71 : "KeyG",
|
|
72 : "KeyH",
|
|
74 : "KeyJ",
|
|
75 : "KeyK",
|
|
76 : "KeyL",
|
|
59 : "Semicolon",
|
|
222 : "Quote",
|
|
220 : "Backslash",
|
|
16 : "ShiftLeft",
|
|
220 : "IntlBackslash",
|
|
90 : "KeyZ",
|
|
88 : "KeyX",
|
|
67 : "KeyC",
|
|
86 : "KeyV",
|
|
66 : "KeyB",
|
|
78 : "KeyN",
|
|
77 : "KeyM",
|
|
188 : "Comma",
|
|
190 : "Period",
|
|
191 : "Slash",
|
|
16 : "ShiftRight",
|
|
17 : "ControlLeft",
|
|
18 : "AltLeft",
|
|
91 : "OSLeft",
|
|
32 : "Space",
|
|
18 : "AltRight",
|
|
91 : "OSRight",
|
|
93 : "ContextMenu",
|
|
17 : "ControlRight",
|
|
37 : "ArrowLeft",
|
|
38 : "ArrowUp",
|
|
40 : "ArrowDown",
|
|
39 : "ArrowRight",
|
|
144 : "NumLock",
|
|
144 : "NumLock",
|
|
111 : "NumpadDivide",
|
|
106 : "NumpadMultiply",
|
|
109 : "NumpadSubtract",
|
|
103 : "Numpad7",
|
|
104 : "Numpad8",
|
|
105 : "Numpad9",
|
|
107 : "NumpadAdd",
|
|
100 : "Numpad4",
|
|
101 : "Numpad5",
|
|
102 : "Numpad6",
|
|
97 : "Numpad1",
|
|
98 : "Numpad2",
|
|
99 : "Numpad3",
|
|
13 : "NumpadEnter",
|
|
96 : "Numpad0",
|
|
110 : "NumpadDecimal",
|
|
17 : "ControlLeft"
|
|
};
|
|
|
|
|
|
var UnicodeToCode = {
|
|
'firefox' : {
|
|
'fr' : UnicodeToCodeFirefox_FR,
|
|
'en' : UnicodeToCode_EN
|
|
},
|
|
|
|
'chrome' : {
|
|
'fr' : UnicodeToCodeChrome_FR,
|
|
'en' : UnicodeToCode_EN
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Scancode of keyevent
|
|
* @param e {keyboardevent}
|
|
* @return {integer} scancode
|
|
*/
|
|
function scancode (e) {
|
|
var locale = Mstsc.locale();
|
|
locale = (['fr', 'en'].indexOf(locale) > 0 && locale) || 'en';
|
|
return KeyMap[e.code || UnicodeToCode[Mstsc.browser() || 'firefox'][locale][e.keyCode]];
|
|
}
|
|
|
|
Mstsc.scancode = scancode;
|
|
|
|
})(); |