-
Notifications
You must be signed in to change notification settings - Fork 0
/
mcdu-keyboard.js
68 lines (59 loc) · 1.6 KB
/
mcdu-keyboard.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
const _mcduFunctionalKeys = {
Tab: 'DIR',
Insert: 'PROG',
Home: 'PERF',
PageUp: 'INIT',
Enter: 'DATA',
NumpadEnter: 'DATA',
Delete: 'FPLN',
End: 'RAD',
PageDown: 'FUEL',
Escape: 'MENU',
ShiftLeft: 'AIRPORT',
ArrowLeft: 'PREVPAGE',
ArrowRight: 'NEXTPAGE',
ArrowUp: 'UP',
ArrowDown: 'DOWN',
Backspace: 'CLR',
Space: 'SP',
Minus: 'PLUSMINUS',
NumpadSubtract: 'PLUSMINUS',
NumpadAdd: 'PLUSMINUS',
Period: 'DOT',
NumpadDecimal: 'DOT',
NumpadDivide: 'DIV',
Slash: 'DIV',
NumpadMultiply: 'OVFY',
};
const _mcduGetKey = (keyEvent) => {
// match mcdu L/R row input for F keys
if (keyEvent.code.match(/F\d+/)) {
const fn = parseInt(keyEvent.code.replace('F', ''));
return fn <= 6 ? `L${fn}` : `R${fn - 6}`;
}
// match a-z
if (keyEvent.code.match(/Key[A-Z]/)) {
return keyEvent.code.replace('Key', '').toLocaleUpperCase();
}
// match 0-9
if (keyEvent.code.match(/(Digit|Numpad)\d/i)) {
return keyEvent.code.replace(/Digit|Numpad/i, '').toLocaleUpperCase();
}
// match mcdu function keys
return _mcduFunctionalKeys[keyEvent.code];
};
let _mcduKeyboardInput = (keyEvent) => {
//console.log('event', { key: keyEvent.key, code: keyEvent.code });
const key = _mcduGetKey(keyEvent);
if (key) {
keyEvent.preventDefault();
keyEvent.stopPropagation();
} else {
return;
}
console.log(`mcdu key: ${key}`);
window._mcduSoc?.send(`event:left:${key}`);
};
window.onbeforeunload = () => { return false; }
window._mcduSoc = new WebSocket(`ws://${window.location.host}/interfaces/v1/mcdu`);
window.addEventListener('keydown', _mcduKeyboardInput);