keymap-inspector 0.1.0 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,207 @@
1
+ // Keymap Inspector - Browser Build v0.1.1
2
+ // Compatible with browsers, UMD format
3
+ (function(global, factory) {
4
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
5
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
6
+ (global = global || self, factory(global.KeymapInspector = {}));
7
+ }(this, (function(exports) {
8
+ 'use strict';
9
+
10
+ // KeymapInspector class
11
+ class KeymapInspector {
12
+ constructor(layouts) {
13
+ this.layouts = layouts;
14
+ this.reversedLayouts = {};
15
+
16
+ for (const layoutName in layouts) {
17
+ this.reversedLayouts[layoutName] = {};
18
+ const layout = layouts[layoutName];
19
+ for (const char in layout) {
20
+ const keyDef = layout[char];
21
+ const currentCode = keyDef.code;
22
+
23
+ if (!keyDef.shiftKey) {
24
+ this.reversedLayouts[layoutName][currentCode] = char;
25
+ } else {
26
+ this.reversedLayouts[layoutName][currentCode + '_SHIFT'] = char;
27
+ }
28
+ }
29
+ }
30
+ }
31
+
32
+ inspect(char) {
33
+ let baseLayoutName = null;
34
+ let keyDefinition = null;
35
+
36
+ for (const layoutName in this.layouts) {
37
+ if (this.layouts[layoutName][char]) {
38
+ baseLayoutName = layoutName;
39
+ keyDefinition = this.layouts[layoutName][char];
40
+ break;
41
+ }
42
+ }
43
+
44
+ if (!keyDefinition || !baseLayoutName) {
45
+ return null;
46
+ }
47
+
48
+ const layouts = {};
49
+ for (const layoutName in this.reversedLayouts) {
50
+ if (keyDefinition.shiftKey) {
51
+ layouts[layoutName] = this.reversedLayouts[layoutName][keyDefinition.code + '_SHIFT'] || null;
52
+ } else {
53
+ layouts[layoutName] = this.reversedLayouts[layoutName][keyDefinition.code] || null;
54
+ }
55
+ }
56
+
57
+ return {
58
+ char,
59
+ keyDefinition,
60
+ layouts,
61
+ };
62
+ }
63
+
64
+ inspectByCode(code) {
65
+ const char = this.findCharByCode(code);
66
+ return char ? this.inspect(char) : null;
67
+ }
68
+
69
+ inspectByKeyCode(keyCode) {
70
+ const char = this.findCharByKeyCode(keyCode);
71
+ return char ? this.inspect(char) : null;
72
+ }
73
+
74
+ findCharByCode(code) {
75
+ for (const layoutName in this.layouts) {
76
+ const layout = this.layouts[layoutName];
77
+ for (const char in layout) {
78
+ if (layout[char].code === code && !layout[char].shiftKey) {
79
+ return char;
80
+ }
81
+ }
82
+ }
83
+ for (const layoutName in this.layouts) {
84
+ const layout = this.layouts[layoutName];
85
+ for (const char in layout) {
86
+ if (layout[char].code === code && layout[char].shiftKey) {
87
+ return char;
88
+ }
89
+ }
90
+ }
91
+ return null;
92
+ }
93
+
94
+ findCharByKeyCode(keyCode) {
95
+ for (const layoutName in this.layouts) {
96
+ const layout = this.layouts[layoutName];
97
+ for (const char in layout) {
98
+ if (layout[char].keyCode === keyCode && !layout[char].shiftKey) {
99
+ return char;
100
+ }
101
+ }
102
+ }
103
+ for (const layoutName in this.layouts) {
104
+ const layout = this.layouts[layoutName];
105
+ for (const char in layout) {
106
+ if (layout[char].keyCode === keyCode && layout[char].shiftKey) {
107
+ return char;
108
+ }
109
+ }
110
+ }
111
+ return null;
112
+ }
113
+ }
114
+
115
+ // Basic layouts (EN + RU for smaller file size)
116
+ const en = {
117
+ "1": { "key": "1", "code": "Digit1", "keyCode": 49 },
118
+ "2": { "key": "2", "code": "Digit2", "keyCode": 50 },
119
+ "3": { "key": "3", "code": "Digit3", "keyCode": 51 },
120
+ "4": { "key": "4", "code": "Digit4", "keyCode": 52 },
121
+ "5": { "key": "5", "code": "Digit5", "keyCode": 53 },
122
+ "6": { "key": "6", "code": "Digit6", "keyCode": 54 },
123
+ "7": { "key": "7", "code": "Digit7", "keyCode": 55 },
124
+ "8": { "key": "8", "code": "Digit8", "keyCode": 56 },
125
+ "9": { "key": "9", "code": "Digit9", "keyCode": 57 },
126
+ "0": { "key": "0", "code": "Digit0", "keyCode": 48 },
127
+ "q": { "key": "q", "code": "KeyQ", "keyCode": 81 },
128
+ "w": { "key": "w", "code": "KeyW", "keyCode": 87 },
129
+ "e": { "key": "e", "code": "KeyE", "keyCode": 69 },
130
+ "r": { "key": "r", "code": "KeyR", "keyCode": 82 },
131
+ "t": { "key": "t", "code": "KeyT", "keyCode": 84 },
132
+ "y": { "key": "y", "code": "KeyY", "keyCode": 89 },
133
+ "u": { "key": "u", "code": "KeyU", "keyCode": 85 },
134
+ "i": { "key": "i", "code": "KeyI", "keyCode": 73 },
135
+ "o": { "key": "o", "code": "KeyO", "keyCode": 79 },
136
+ "p": { "key": "p", "code": "KeyP", "keyCode": 80 },
137
+ "a": { "key": "a", "code": "KeyA", "keyCode": 65 },
138
+ "s": { "key": "s", "code": "KeyS", "keyCode": 83 },
139
+ "d": { "key": "d", "code": "KeyD", "keyCode": 68 },
140
+ "f": { "key": "f", "code": "KeyF", "keyCode": 70 },
141
+ "g": { "key": "g", "code": "KeyG", "keyCode": 71 },
142
+ "h": { "key": "h", "code": "KeyH", "keyCode": 72 },
143
+ "j": { "key": "j", "code": "KeyJ", "keyCode": 74 },
144
+ "k": { "key": "k", "code": "KeyK", "keyCode": 75 },
145
+ "l": { "key": "l", "code": "KeyL", "keyCode": 76 },
146
+ "z": { "key": "z", "code": "KeyZ", "keyCode": 90 },
147
+ "x": { "key": "x", "code": "KeyX", "keyCode": 88 },
148
+ "c": { "key": "c", "code": "KeyC", "keyCode": 67 },
149
+ "v": { "key": "v", "code": "KeyV", "keyCode": 86 },
150
+ "b": { "key": "b", "code": "KeyB", "keyCode": 66 },
151
+ "n": { "key": "n", "code": "KeyN", "keyCode": 78 },
152
+ "m": { "key": "m", "code": "KeyM", "keyCode": 77 },
153
+ " ": { "key": " ", "code": "Space", "keyCode": 32 }
154
+ };
155
+
156
+ const ru = {
157
+ "1": { "key": "1", "code": "Digit1", "keyCode": 49 },
158
+ "2": { "key": "2", "code": "Digit2", "keyCode": 50 },
159
+ "3": { "key": "3", "code": "Digit3", "keyCode": 51 },
160
+ "4": { "key": "4", "code": "Digit4", "keyCode": 52 },
161
+ "5": { "key": "5", "code": "Digit5", "keyCode": 53 },
162
+ "6": { "key": "6", "code": "Digit6", "keyCode": 54 },
163
+ "7": { "key": "7", "code": "Digit7", "keyCode": 55 },
164
+ "8": { "key": "8", "code": "Digit8", "keyCode": 56 },
165
+ "9": { "key": "9", "code": "Digit9", "keyCode": 57 },
166
+ "0": { "key": "0", "code": "Digit0", "keyCode": 48 },
167
+ "й": { "key": "й", "code": "KeyQ", "keyCode": 81 },
168
+ "ц": { "key": "ц", "code": "KeyW", "keyCode": 87 },
169
+ "у": { "key": "у", "code": "KeyE", "keyCode": 69 },
170
+ "к": { "key": "к", "code": "KeyR", "keyCode": 82 },
171
+ "е": { "key": "е", "code": "KeyT", "keyCode": 84 },
172
+ "н": { "key": "н", "code": "KeyY", "keyCode": 89 },
173
+ "г": { "key": "г", "code": "KeyU", "keyCode": 85 },
174
+ "ш": { "key": "ш", "code": "KeyI", "keyCode": 73 },
175
+ "щ": { "key": "щ", "code": "KeyO", "keyCode": 79 },
176
+ "з": { "key": "з", "code": "KeyP", "keyCode": 80 },
177
+ "ф": { "key": "ф", "code": "KeyA", "keyCode": 65 },
178
+ "ы": { "key": "ы", "code": "KeyS", "keyCode": 83 },
179
+ "в": { "key": "в", "code": "KeyD", "keyCode": 68 },
180
+ "а": { "key": "а", "code": "KeyF", "keyCode": 70 },
181
+ "п": { "key": "п", "code": "KeyG", "keyCode": 71 },
182
+ "р": { "key": "р", "code": "KeyH", "keyCode": 72 },
183
+ "о": { "key": "о", "code": "KeyJ", "keyCode": 74 },
184
+ "л": { "key": "л", "code": "KeyK", "keyCode": 75 },
185
+ "д": { "key": "д", "code": "KeyL", "keyCode": 76 },
186
+ "я": { "key": "я", "code": "KeyZ", "keyCode": 90 },
187
+ "ч": { "key": "ч", "code": "KeyX", "keyCode": 88 },
188
+ "с": { "key": "с", "code": "KeyC", "keyCode": 67 },
189
+ "м": { "key": "м", "code": "KeyV", "keyCode": 86 },
190
+ "и": { "key": "и", "code": "KeyB", "keyCode": 66 },
191
+ "т": { "key": "т", "code": "KeyN", "keyCode": 78 },
192
+ "ь": { "key": "ь", "code": "KeyM", "keyCode": 77 },
193
+ " ": { "key": " ", "code": "Space", "keyCode": 32 }
194
+ };
195
+
196
+ // Export for different module systems
197
+ exports.KeymapInspector = KeymapInspector;
198
+ exports.en = en;
199
+ exports.ru = ru;
200
+
201
+ // Global access for script tag usage
202
+ if (typeof window !== 'undefined') {
203
+ window.KeymapInspector = KeymapInspector;
204
+ window.KeymapLayouts = { en, ru };
205
+ }
206
+
207
+ })));