@eclipse-scout/core
Version:
Eclipse Scout runtime
274 lines (264 loc) • 5.27 kB
text/typescript
/*
* Copyright (c) 2010, 2023 BSI Business Systems Integration AG
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*/
import {Device} from '../index';
export const keys = {
BACKSPACE: 8,
TAB: 9,
ENTER: 13,
SHIFT: 16,
CTRL: 17,
ALT: 18,
PAUSE: 19,
CAPS_LOCK: 20,
ESC: 27,
/**
* The duplicate ESC / ESCAPE constant is required for Scout classic
* where keys defined in IKeyStroke are mapped to keys defined in keys.js
*/
ESCAPE: 27,
PAGE_UP: 33,
PAGE_DOWN: 34,
END: 35,
HOME: 36,
LEFT: 37,
UP: 38,
RIGHT: 39,
DOWN: 40,
SPACE: 32,
PRINT_SCREEN: 44,
INSERT: 45,
DELETE: 46,
0: 48,
1: 49,
2: 50,
3: 51,
4: 52,
5: 53,
6: 54,
7: 55,
8: 56,
9: 57,
A: 65,
B: 66,
C: 67,
D: 68,
E: 69,
F: 70,
G: 71,
H: 72,
I: 73,
J: 74,
K: 75,
L: 76,
M: 77,
N: 78,
O: 79,
P: 80,
Q: 81,
R: 82,
S: 83,
T: 84,
U: 85,
V: 86,
W: 87,
X: 88,
Y: 89,
Z: 90,
F1: 112,
F2: 113,
F3: 114,
F4: 115,
F5: 116,
F6: 117,
F7: 118,
F8: 119,
F9: 120,
F10: 121,
F11: 122,
F12: 123,
WIN_LEFT: 91, // Left Windows key / left command key
WIN_RIGHT: 92, // Right Windows key / right command key
SELECT: 93, // Menu key
NUMPAD_0: 96,
NUMPAD_1: 97,
NUMPAD_2: 98,
NUMPAD_3: 99,
NUMPAD_4: 100,
NUMPAD_5: 101,
NUMPAD_6: 102,
NUMPAD_7: 103,
NUMPAD_8: 104,
NUMPAD_9: 105,
MULTIPLY: 106,
ADD: 107,
SUBTRACT: 109,
DECIMAL_POINT: 110,
DIVIDE: 111,
NUM_LOCK: 144,
SCROLL_LOCK: 145,
SEMICOLON: 186, // ü
DASH: 189,
COMMA: 188,
POINT: 190,
FORWARD_SLASH: 191, // §
OPEN_BRACKET: 219, // '
BACK_SLASH: 220, // ä
CLOSE_BRACKET: 221, // ^
SINGLE_QUOTE: 222, // ö,
ANGULAR_BRACKET: 226,
codesToKeys: {
8: 'Backspace',
9: 'Tab',
13: 'Enter',
16: 'SHIFT',
17: 'CTRL',
18: 'ALT',
19: 'PAUSE',
20: 'Caps lock',
27: 'Esc',
33: 'Page up',
34: 'Page down',
35: 'End',
36: 'Home',
37: 'Left',
38: 'Up',
39: 'Right',
40: 'Down',
32: 'Space',
44: 'Print screen',
45: 'Insert',
46: 'Delete',
48: '0',
49: '1',
50: '2',
51: '3',
52: '4',
53: '5',
54: '6',
55: '7',
56: '8',
57: '9',
65: 'A',
66: 'B',
67: 'C',
68: 'D',
69: 'E',
70: 'F',
71: 'G',
72: 'H',
73: 'I',
74: 'J',
75: 'K',
76: 'L',
77: 'M',
78: 'N',
79: 'O',
80: 'P',
81: 'Q',
82: 'R',
83: 'S',
84: 'T',
85: 'U',
86: 'V',
87: 'W',
88: 'X',
89: 'Y',
90: 'Z',
91: 'WIN_LEFT',
92: 'WIN_RIGHT',
93: 'SELECT',
112: 'F1',
113: 'F2',
114: 'F3',
115: 'F4',
116: 'F5',
117: 'F6',
118: 'F7',
119: 'F8',
120: 'F9',
121: 'F10',
122: 'F11',
123: 'F12',
96: 'NUMPAD_0',
97: 'NUMPAD_1',
98: 'NUMPAD_2',
99: 'NUMPAD_3',
100: 'NUMPAD_4',
101: 'NUMPAD_5',
102: 'NUMPAD_6',
103: 'NUMPAD_7',
104: 'NUMPAD_8',
105: 'NUMPAD_9',
106: 'MULTIPLY',
107: '+',
109: 'SUBTRACT',
110: 'DECIMAL_POINT',
111: '/',
144: 'Num lock',
145: 'Scroll lock',
186: 'ü', // ü
189: '-',
188: ',',
190: '.',
191: '§',
219: '\'',
220: 'ä',
221: '^',
222: 'ö',
226: '<'
},
/**
* This map defines key-codes which are not the same in various browsers. Use the forBrowser function to access it.
*/
browserMap: {
[Device.Browser.FIREFOX]: {
226: 60
},
[Device.Browser.SAFARI]: {
226: 188,
ctrl: {
226: 192
}
}
},
browserMapReverse: {},
/**
* If a browser has a non-standard key-code for one of the keys defined in this file this function returns the correct key code for that browser.
*
* @param [modifier] some key codes change when a modifier is pressed
*/
forBrowser: (keyCode: number, modifier?: PropertyKey): number => keys.mapKey(keys.browserMap, keyCode, modifier),
/**
* If a browser has a non-standard key-code for one of the keys defined in this file this function returns the original key for that browser.
*/
fromBrowser: (keyCode: number): number => keys.mapKey(keys.browserMapReverse, keyCode),
mapKey: (map: Record<string, object>, keyCode: number, modifier?: PropertyKey): number => {
let browserMap = map[Device.get().browser];
if (browserMap && modifier) {
browserMap = browserMap[modifier];
}
if (browserMap && browserMap.hasOwnProperty(keyCode)) {
// A mapping is defined for this browser and key-code
return browserMap[keyCode];
}
// No mapping is defined, use standard
return keyCode;
}
};
// Create a map with reverse key mappings for browser specific keys
for (let browser in keys.browserMap) {
let reverseMap = {};
let mappedKeysForBrowser = keys.browserMap[browser];
for (let origKey in mappedKeysForBrowser) {
let browserKey = mappedKeysForBrowser[origKey];
reverseMap[browserKey] = parseInt(origKey, 10);
}
keys.browserMapReverse[browser] = reverseMap;
}