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.
- package/README.md +438 -0
- package/dist/browser.js +141 -0
- package/dist/keymap-inspector.browser.js +207 -0
- package/dist/keymap-inspector.esm.js +780 -0
- package/dist/keymap-inspector.esm.js.map +1 -0
- package/dist/keymap-inspector.umd.js +797 -0
- package/dist/keymap-inspector.umd.js.map +1 -0
- package/dist/types/KeymapInspector.d.ts +13 -0
- package/dist/types/cli/index.d.ts +2 -0
- package/dist/types/index.d.ts +10 -17
- package/dist/types/layouts/de.d.ts +2 -0
- package/dist/types/layouts/en.d.ts +2 -0
- package/dist/types/layouts/es.d.ts +2 -0
- package/dist/types/layouts/fr.d.ts +2 -0
- package/dist/types/layouts/he.d.ts +2 -0
- package/dist/types/layouts/index.d.ts +13 -0
- package/dist/types/layouts/ru.d.ts +2 -0
- package/dist/types/layouts/ua.d.ts +2 -0
- package/dist/types/types/index.d.ts +17 -0
- package/package.json +13 -3
package/README.md
ADDED
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
# 🔍 Keymap Inspector
|
|
2
|
+
|
|
3
|
+
[](https://badge.fury.io/js/keymap-inspector)
|
|
4
|
+
[](https://www.npmjs.com/package/keymap-inspector)
|
|
5
|
+
|
|
6
|
+
*[🇺🇸 English](#english) | [🇷🇺 Русский](#русский) | [🇩🇪 Deutsch](#deutsch) | [🇫🇷 Français](#français) | [🇪🇸 Español](#español) | [🇺🇦 Українська](#українська) | [🇮🇱 עברית](#עברית)*
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## English
|
|
11
|
+
|
|
12
|
+
Inspect keyboard events and characters across different layouts. Find which physical key corresponds to a character and see what characters are on that key in other keyboard layouts.
|
|
13
|
+
|
|
14
|
+
### 🚀 Features
|
|
15
|
+
|
|
16
|
+
- **7 keyboard layouts**: English, Russian, German, French, Spanish, Ukrainian, Hebrew
|
|
17
|
+
- **Bidirectional mapping**: Character → Key info, Key code → Characters
|
|
18
|
+
- **CLI tool** for quick inspections
|
|
19
|
+
- **TypeScript** support with full type definitions
|
|
20
|
+
- **Lightweight**: Only 6.5KB package size
|
|
21
|
+
|
|
22
|
+
### 📦 Installation
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Install globally for CLI usage
|
|
26
|
+
npm install -g keymap-inspector
|
|
27
|
+
|
|
28
|
+
# Install locally for library usage
|
|
29
|
+
npm install keymap-inspector
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 🖥️ CLI Usage
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
keymap-inspector a
|
|
36
|
+
# Output:
|
|
37
|
+
{
|
|
38
|
+
"char": "a",
|
|
39
|
+
"keyDefinition": {
|
|
40
|
+
"key": "a",
|
|
41
|
+
"code": "KeyA",
|
|
42
|
+
"keyCode": 65
|
|
43
|
+
},
|
|
44
|
+
"layouts": {
|
|
45
|
+
"en": "a",
|
|
46
|
+
"ru": "ф",
|
|
47
|
+
"de": "a",
|
|
48
|
+
"fr": "q",
|
|
49
|
+
"es": "a",
|
|
50
|
+
"ua": "ф",
|
|
51
|
+
"he": "ש"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 📚 Library Usage
|
|
57
|
+
|
|
58
|
+
**Node.js:**
|
|
59
|
+
```javascript
|
|
60
|
+
import { KeymapInspector, en, ru, de, fr, es, ua, he } from 'keymap-inspector';
|
|
61
|
+
|
|
62
|
+
const inspector = new KeymapInspector({ en, ru, de, fr, es, ua, he });
|
|
63
|
+
|
|
64
|
+
// Inspect a character
|
|
65
|
+
const result = inspector.inspect('a');
|
|
66
|
+
console.log(result);
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Browser (ES Modules):**
|
|
70
|
+
```html
|
|
71
|
+
<script type="module">
|
|
72
|
+
import { KeymapInspector, en, ru } from 'https://unpkg.com/keymap-inspector@latest/dist/keymap-inspector.browser.js';
|
|
73
|
+
|
|
74
|
+
const inspector = new KeymapInspector({ en, ru });
|
|
75
|
+
const result = inspector.inspect('a');
|
|
76
|
+
console.log(result);
|
|
77
|
+
</script>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Browser (Script Tag):**
|
|
81
|
+
```html
|
|
82
|
+
<script src="https://unpkg.com/keymap-inspector@latest/dist/keymap-inspector.browser.js"></script>
|
|
83
|
+
<script>
|
|
84
|
+
const inspector = new KeymapInspector.KeymapInspector({
|
|
85
|
+
en: KeymapInspector.en,
|
|
86
|
+
ru: KeymapInspector.ru
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
// Find by key code
|
|
90
|
+
const byCode = inspector.inspectByCode('KeyA');
|
|
91
|
+
console.log(byCode);
|
|
92
|
+
|
|
93
|
+
// Find by keyCode number
|
|
94
|
+
const byKeyCode = inspector.inspectByKeyCode(65);
|
|
95
|
+
console.log(byKeyCode);
|
|
96
|
+
</script>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Русский
|
|
102
|
+
|
|
103
|
+
Инспектор клавиатурных раскладок. Определяет, какая физическая клавиша соответствует символу, и показывает, какие символы находятся на этой клавише в других раскладках.
|
|
104
|
+
|
|
105
|
+
### 🚀 Возможности
|
|
106
|
+
|
|
107
|
+
- **7 раскладок клавиатуры**: английская, русская, немецкая, французская, испанская, украинская, иврит
|
|
108
|
+
- **Двустороннее сопоставление**: символ → информация о клавише, код клавиши → символы
|
|
109
|
+
- **CLI утилита** для быстрых проверок
|
|
110
|
+
- **TypeScript** поддержка с полными определениями типов
|
|
111
|
+
- **Легковесный**: размер пакета всего 6.5KB
|
|
112
|
+
|
|
113
|
+
### 📦 Установка
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Глобальная установка для CLI
|
|
117
|
+
npm install -g keymap-inspector
|
|
118
|
+
|
|
119
|
+
# Локальная установка для библиотеки
|
|
120
|
+
npm install keymap-inspector
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### 🖥️ Использование CLI
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
keymap-inspector ф
|
|
127
|
+
# Вывод:
|
|
128
|
+
{
|
|
129
|
+
"char": "ф",
|
|
130
|
+
"keyDefinition": {
|
|
131
|
+
"key": "ф",
|
|
132
|
+
"code": "KeyA",
|
|
133
|
+
"keyCode": 65
|
|
134
|
+
},
|
|
135
|
+
"layouts": {
|
|
136
|
+
"en": "a",
|
|
137
|
+
"ru": "ф",
|
|
138
|
+
"de": "a",
|
|
139
|
+
"fr": "q",
|
|
140
|
+
"es": "a",
|
|
141
|
+
"ua": "ф",
|
|
142
|
+
"he": "ש"
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Deutsch
|
|
150
|
+
|
|
151
|
+
Tastaturlayout-Inspektor. Ermittelt, welche physische Taste einem Zeichen entspricht und zeigt, welche Zeichen sich auf dieser Taste in anderen Tastaturlayouts befinden.
|
|
152
|
+
|
|
153
|
+
### 🚀 Features
|
|
154
|
+
|
|
155
|
+
- **7 Tastaturlayouts**: Englisch, Russisch, Deutsch, Französisch, Spanisch, Ukrainisch, Hebräisch
|
|
156
|
+
- **Bidirektionale Zuordnung**: Zeichen → Tasteninformationen, Tastencode → Zeichen
|
|
157
|
+
- **CLI-Tool** für schnelle Inspektionen
|
|
158
|
+
- **TypeScript** Unterstützung mit vollständigen Typdefinitionen
|
|
159
|
+
- **Leichtgewichtig**: Nur 6.5KB Paketgröße
|
|
160
|
+
|
|
161
|
+
### 📦 Installation
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# Global installieren für CLI-Nutzung
|
|
165
|
+
npm install -g keymap-inspector
|
|
166
|
+
|
|
167
|
+
# Lokal installieren für Bibliotheksnutzung
|
|
168
|
+
npm install keymap-inspector
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### 🖥️ CLI-Nutzung
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
keymap-inspector ä
|
|
175
|
+
# Ausgabe:
|
|
176
|
+
{
|
|
177
|
+
"char": "ä",
|
|
178
|
+
"keyDefinition": {
|
|
179
|
+
"key": "ä",
|
|
180
|
+
"code": "Quote",
|
|
181
|
+
"keyCode": 222
|
|
182
|
+
},
|
|
183
|
+
"layouts": {
|
|
184
|
+
"en": "'",
|
|
185
|
+
"ru": "э",
|
|
186
|
+
"de": "ä",
|
|
187
|
+
"fr": "ù",
|
|
188
|
+
"es": "´",
|
|
189
|
+
"ua": "є",
|
|
190
|
+
"he": ","
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Français
|
|
198
|
+
|
|
199
|
+
Inspecteur de dispositions de clavier. Détermine quelle touche physique correspond à un caractère et montre quels caractères se trouvent sur cette touche dans d'autres dispositions de clavier.
|
|
200
|
+
|
|
201
|
+
### 🚀 Fonctionnalités
|
|
202
|
+
|
|
203
|
+
- **7 dispositions de clavier**: Anglais, Russe, Allemand, Français, Espagnol, Ukrainien, Hébreu
|
|
204
|
+
- **Mappage bidirectionnel**: Caractère → Informations de touche, Code de touche → Caractères
|
|
205
|
+
- **Outil CLI** pour des inspections rapides
|
|
206
|
+
- **Support TypeScript** avec des définitions de types complètes
|
|
207
|
+
- **Léger**: Seulement 6.5KB de taille de paquet
|
|
208
|
+
|
|
209
|
+
### 📦 Installation
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# Installer globalement pour l'usage CLI
|
|
213
|
+
npm install -g keymap-inspector
|
|
214
|
+
|
|
215
|
+
# Installer localement pour l'usage de bibliothèque
|
|
216
|
+
npm install keymap-inspector
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### 🖥️ Usage CLI
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
keymap-inspector é
|
|
223
|
+
# Sortie:
|
|
224
|
+
{
|
|
225
|
+
"char": "é",
|
|
226
|
+
"keyDefinition": {
|
|
227
|
+
"key": "é",
|
|
228
|
+
"code": "Digit2",
|
|
229
|
+
"keyCode": 50
|
|
230
|
+
},
|
|
231
|
+
"layouts": {
|
|
232
|
+
"en": "2",
|
|
233
|
+
"ru": "2",
|
|
234
|
+
"de": "2",
|
|
235
|
+
"fr": "é",
|
|
236
|
+
"es": "2",
|
|
237
|
+
"ua": "2",
|
|
238
|
+
"he": "2"
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Español
|
|
246
|
+
|
|
247
|
+
Inspector de distribuciones de teclado. Determina qué tecla física corresponde a un carácter y muestra qué caracteres están en esa tecla en otras distribuciones de teclado.
|
|
248
|
+
|
|
249
|
+
### 🚀 Características
|
|
250
|
+
|
|
251
|
+
- **7 distribuciones de teclado**: Inglés, Ruso, Alemán, Francés, Español, Ucraniano, Hebreo
|
|
252
|
+
- **Mapeo bidireccional**: Carácter → Información de tecla, Código de tecla → Caracteres
|
|
253
|
+
- **Herramienta CLI** para inspecciones rápidas
|
|
254
|
+
- **Soporte TypeScript** con definiciones de tipos completas
|
|
255
|
+
- **Ligero**: Solo 6.5KB de tamaño de paquete
|
|
256
|
+
|
|
257
|
+
### 📦 Instalación
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
# Instalar globalmente para uso CLI
|
|
261
|
+
npm install -g keymap-inspector
|
|
262
|
+
|
|
263
|
+
# Instalar localmente para uso de biblioteca
|
|
264
|
+
npm install keymap-inspector
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### 🖥️ Uso CLI
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
keymap-inspector ñ
|
|
271
|
+
# Salida:
|
|
272
|
+
{
|
|
273
|
+
"char": "ñ",
|
|
274
|
+
"keyDefinition": {
|
|
275
|
+
"key": "ñ",
|
|
276
|
+
"code": "Semicolon",
|
|
277
|
+
"keyCode": 186
|
|
278
|
+
},
|
|
279
|
+
"layouts": {
|
|
280
|
+
"en": ";",
|
|
281
|
+
"ru": "ж",
|
|
282
|
+
"de": "ö",
|
|
283
|
+
"fr": "m",
|
|
284
|
+
"es": "ñ",
|
|
285
|
+
"ua": "ж",
|
|
286
|
+
"he": "ף"
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Українська
|
|
294
|
+
|
|
295
|
+
Інспектор клавіатурних розкладок. Визначає, яка фізична клавіша відповідає символу, та показує, які символи знаходяться на цій клавіші в інших розкладках клавіатури.
|
|
296
|
+
|
|
297
|
+
### 🚀 Можливості
|
|
298
|
+
|
|
299
|
+
- **7 розкладок клавіатури**: англійська, російська, німецька, французька, іспанська, українська, іврит
|
|
300
|
+
- **Двостороннє зіставлення**: символ → інформація про клавішу, код клавіші → символи
|
|
301
|
+
- **CLI утиліта** для швидких перевірок
|
|
302
|
+
- **TypeScript** підтримка з повними визначеннями типів
|
|
303
|
+
- **Легкий**: розмір пакету лише 6.5KB
|
|
304
|
+
|
|
305
|
+
### 📦 Встановлення
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
# Глобальне встановлення для CLI
|
|
309
|
+
npm install -g keymap-inspector
|
|
310
|
+
|
|
311
|
+
# Локальне встановлення для бібліотеки
|
|
312
|
+
npm install keymap-inspector
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### 🖥️ Використання CLI
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
keymap-inspector і
|
|
319
|
+
# Вивід:
|
|
320
|
+
{
|
|
321
|
+
"char": "і",
|
|
322
|
+
"keyDefinition": {
|
|
323
|
+
"key": "і",
|
|
324
|
+
"code": "KeyS",
|
|
325
|
+
"keyCode": 83
|
|
326
|
+
},
|
|
327
|
+
"layouts": {
|
|
328
|
+
"en": "s",
|
|
329
|
+
"ru": "ы",
|
|
330
|
+
"de": "s",
|
|
331
|
+
"fr": "s",
|
|
332
|
+
"es": "s",
|
|
333
|
+
"ua": "і",
|
|
334
|
+
"he": "ד"
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## עברית
|
|
342
|
+
|
|
343
|
+
בודק פריסות מקלדת. קובע איזה מקש פיזי מתאים לתו ומראה אילו תווים נמצאים על המקש הזה בפריסות מקלדת אחרות.
|
|
344
|
+
|
|
345
|
+
### 🚀 תכונות
|
|
346
|
+
|
|
347
|
+
- **7 פריסות מקלדת**: אנגלית, רוסית, גרמנית, צרפתית, ספרדית, אוקראינית, עברית
|
|
348
|
+
- **מיפוי דו-כיווני**: תו ← מידע על מקש, קוד מקש ← תווים
|
|
349
|
+
- **כלי CLI** לבדיקות מהירות
|
|
350
|
+
- **תמיכה ב-TypeScript** עם הגדרות טיפוסים מלאות
|
|
351
|
+
- **קל משקל**: גודל חבילה של 6.5KB בלבד
|
|
352
|
+
|
|
353
|
+
### 📦 התקנה
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
# התקנה גלובלית לשימוש CLI
|
|
357
|
+
npm install -g keymap-inspector
|
|
358
|
+
|
|
359
|
+
# התקנה מקומית לשימוש ספרייה
|
|
360
|
+
npm install keymap-inspector
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### 🖥️ שימוש ב-CLI
|
|
364
|
+
|
|
365
|
+
```bash
|
|
366
|
+
keymap-inspector ש
|
|
367
|
+
# פלט:
|
|
368
|
+
{
|
|
369
|
+
"char": "ש",
|
|
370
|
+
"keyDefinition": {
|
|
371
|
+
"key": "ש",
|
|
372
|
+
"code": "KeyA",
|
|
373
|
+
"keyCode": 65
|
|
374
|
+
},
|
|
375
|
+
"layouts": {
|
|
376
|
+
"en": "a",
|
|
377
|
+
"ru": "ф",
|
|
378
|
+
"de": "a",
|
|
379
|
+
"fr": "q",
|
|
380
|
+
"es": "a",
|
|
381
|
+
"ua": "ф",
|
|
382
|
+
"he": "ש"
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
## 🔧 API Reference
|
|
390
|
+
|
|
391
|
+
### KeymapInspector
|
|
392
|
+
|
|
393
|
+
```typescript
|
|
394
|
+
interface KeyDefinition {
|
|
395
|
+
key?: string;
|
|
396
|
+
code: string;
|
|
397
|
+
keyCode: number;
|
|
398
|
+
shiftKey?: boolean;
|
|
399
|
+
location?: number;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
interface InspectionResult {
|
|
403
|
+
char: string;
|
|
404
|
+
keyDefinition: KeyDefinition;
|
|
405
|
+
layouts: {
|
|
406
|
+
[layoutName: string]: string | null;
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
class KeymapInspector {
|
|
411
|
+
constructor(layouts: { [name: string]: Keymap });
|
|
412
|
+
inspect(char: string): InspectionResult | null;
|
|
413
|
+
inspectByCode(code: string): InspectionResult | null;
|
|
414
|
+
inspectByKeyCode(keyCode: number): InspectionResult | null;
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### Available Layouts
|
|
419
|
+
|
|
420
|
+
- `en` - English (QWERTY)
|
|
421
|
+
- `ru` - Russian (ЙЦУКЕН)
|
|
422
|
+
- `de` - German (QWERTZ)
|
|
423
|
+
- `fr` - French (AZERTY)
|
|
424
|
+
- `es` - Spanish (QWERTY)
|
|
425
|
+
- `ua` - Ukrainian (ЙЦУКЕН)
|
|
426
|
+
- `he` - Hebrew
|
|
427
|
+
|
|
428
|
+
## 📄 License
|
|
429
|
+
|
|
430
|
+
MIT © [mikyviz](https://github.com/MikyViz)
|
|
431
|
+
|
|
432
|
+
## 🤝 Contributing
|
|
433
|
+
|
|
434
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
435
|
+
|
|
436
|
+
## 🐛 Issues
|
|
437
|
+
|
|
438
|
+
Found a bug? Please [open an issue](https://github.com/MikyViz/keymap-inspector/issues).
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
// Browser-compatible build
|
|
2
|
+
(function(global, factory) {
|
|
3
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
|
4
|
+
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
|
5
|
+
(global = global || self, factory(global.KeymapInspector = {}));
|
|
6
|
+
}(this, (function(exports) {
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
// Types (for documentation only in browser)
|
|
10
|
+
|
|
11
|
+
// KeymapInspector class
|
|
12
|
+
class KeymapInspector {
|
|
13
|
+
constructor(layouts) {
|
|
14
|
+
this.layouts = layouts;
|
|
15
|
+
this.reversedLayouts = {};
|
|
16
|
+
|
|
17
|
+
for (const layoutName in layouts) {
|
|
18
|
+
this.reversedLayouts[layoutName] = {};
|
|
19
|
+
const layout = layouts[layoutName];
|
|
20
|
+
for (const char in layout) {
|
|
21
|
+
const keyDef = layout[char];
|
|
22
|
+
// Сохраняем все символы, но с учетом Shift
|
|
23
|
+
const currentCode = keyDef.code;
|
|
24
|
+
|
|
25
|
+
// Если это символ без Shift, сохраняем как основной
|
|
26
|
+
if (!keyDef.shiftKey) {
|
|
27
|
+
this.reversedLayouts[layoutName][currentCode] = char;
|
|
28
|
+
}
|
|
29
|
+
// Если это символ с Shift, сохраняем с префиксом
|
|
30
|
+
else {
|
|
31
|
+
this.reversedLayouts[layoutName][currentCode + '_SHIFT'] = char;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
inspect(char) {
|
|
38
|
+
let baseLayoutName = null;
|
|
39
|
+
let keyDefinition = null;
|
|
40
|
+
|
|
41
|
+
for (const layoutName in this.layouts) {
|
|
42
|
+
if (this.layouts[layoutName][char]) {
|
|
43
|
+
baseLayoutName = layoutName;
|
|
44
|
+
keyDefinition = this.layouts[layoutName][char];
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!keyDefinition || !baseLayoutName) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const layouts = {};
|
|
54
|
+
for (const layoutName in this.reversedLayouts) {
|
|
55
|
+
// Ищем символ с учетом Shift
|
|
56
|
+
if (keyDefinition.shiftKey) {
|
|
57
|
+
layouts[layoutName] = this.reversedLayouts[layoutName][keyDefinition.code + '_SHIFT'] || null;
|
|
58
|
+
} else {
|
|
59
|
+
layouts[layoutName] = this.reversedLayouts[layoutName][keyDefinition.code] || null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return {
|
|
64
|
+
char,
|
|
65
|
+
keyDefinition,
|
|
66
|
+
layouts,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
inspectByCode(code) {
|
|
71
|
+
const char = this.findCharByCode(code);
|
|
72
|
+
return char ? this.inspect(char) : null;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
inspectByKeyCode(keyCode) {
|
|
76
|
+
const char = this.findCharByKeyCode(keyCode);
|
|
77
|
+
return char ? this.inspect(char) : null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
findCharByCode(code) {
|
|
81
|
+
// Сначала ищем символ без Shift
|
|
82
|
+
for (const layoutName in this.layouts) {
|
|
83
|
+
const layout = this.layouts[layoutName];
|
|
84
|
+
for (const char in layout) {
|
|
85
|
+
if (layout[char].code === code && !layout[char].shiftKey) {
|
|
86
|
+
return char;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Если не нашли без Shift, ищем с Shift
|
|
91
|
+
for (const layoutName in this.layouts) {
|
|
92
|
+
const layout = this.layouts[layoutName];
|
|
93
|
+
for (const char in layout) {
|
|
94
|
+
if (layout[char].code === code && layout[char].shiftKey) {
|
|
95
|
+
return char;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
findCharByKeyCode(keyCode) {
|
|
103
|
+
// Сначала ищем символ без Shift
|
|
104
|
+
for (const layoutName in this.layouts) {
|
|
105
|
+
const layout = this.layouts[layoutName];
|
|
106
|
+
for (const char in layout) {
|
|
107
|
+
if (layout[char].keyCode === keyCode && !layout[char].shiftKey) {
|
|
108
|
+
return char;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Если не нашли без Shift, ищем с Shift
|
|
113
|
+
for (const layoutName in this.layouts) {
|
|
114
|
+
const layout = this.layouts[layoutName];
|
|
115
|
+
for (const char in layout) {
|
|
116
|
+
if (layout[char].keyCode === keyCode && layout[char].shiftKey) {
|
|
117
|
+
return char;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Layouts data - inserting main layouts
|
|
126
|
+
const en = ${JSON.stringify(require('./dist/layouts/en.js').en, null, 4)};
|
|
127
|
+
|
|
128
|
+
const ru = ${JSON.stringify(require('./dist/layouts/ru.js').ru, null, 4)};
|
|
129
|
+
|
|
130
|
+
// Export for browser
|
|
131
|
+
exports.KeymapInspector = KeymapInspector;
|
|
132
|
+
exports.en = en;
|
|
133
|
+
exports.ru = ru;
|
|
134
|
+
|
|
135
|
+
// Global access for script tag usage
|
|
136
|
+
if (typeof window !== 'undefined') {
|
|
137
|
+
window.KeymapInspector = KeymapInspector;
|
|
138
|
+
window.KeymapLayouts = { en, ru };
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
})));
|