diff --git a/src/boot.ts b/src/boot.ts
index 1f238682..b5ad99c4 100644
--- a/src/boot.ts
+++ b/src/boot.ts
@@ -4,10 +4,12 @@ import { HTTP_PROVIDERS } from 'angular2/http';
import { MainAppComponent } from './main-app.component';
import {DataProviderService} from './services/data-provider.service';
+import {MapperService} from './services/mapper.service';
process.stdout = require('browser-stdout')();
bootstrap(MainAppComponent, [
HTTP_PROVIDERS,
- DataProviderService
+ DataProviderService,
+ MapperService
]).catch(err => console.error(err));
diff --git a/src/components/svg-keyboard-key.component.ts b/src/components/svg-keyboard-key.component.ts
index 6502eb05..83c22929 100644
--- a/src/components/svg-keyboard-key.component.ts
+++ b/src/components/svg-keyboard-key.component.ts
@@ -4,7 +4,12 @@ import {KeyAction} from '../../config-serializer/config-items/KeyAction';
import {KeystrokeAction} from '../../config-serializer/config-items/KeystrokeAction';
import {KeystrokeModifiersAction, KeyModifiers} from '../../config-serializer/config-items/KeystrokeModifiersAction';
import {SwitchLayerAction, LayerName} from '../../config-serializer/config-items/SwitchLayerAction';
-import {Mapper} from '../utils/mapper';
+import {MapperService} from '../services/mapper.service';
+
+enum LabelTypes {
+ Text,
+ Path
+}
@Component({
selector: 'g[svg-keyboard-key]',
@@ -22,20 +27,26 @@ import {Mapper} from '../utils/mapper';
[attr.font-family]="'Helvetica'"
[attr.fill]="'#ffffff'"
[attr.style]="'dominant-baseline: central'"
- *ngIf="labels && labels.length > 0">
+ *ngIf="(labelType === enumLabelTypes.Text) && labelSource && labelSource.length > 0">
{{ labels[0] }}
+ >{{ labelSource[0] }}
{{ label }}
+
+
`
})
export class SvgKeyboardKeyComponent implements OnInit, OnChanges {
@@ -46,9 +57,15 @@ export class SvgKeyboardKeyComponent implements OnInit, OnChanges {
@Input() width: string;
@Input() keyAction: KeyAction;
- private labels: any[];
+ /* tslint:disable:no-unused-variable */
+ /* It is used in the template */
+ private enumLabelTypes = LabelTypes;
+ /* tslint:enable:no-unused-variable */
- constructor() { }
+ private labelSource: any;
+ private labelType: LabelTypes;
+
+ constructor(private mapperService: MapperService) { }
ngOnInit() {
this.setLabels();
@@ -60,59 +77,70 @@ export class SvgKeyboardKeyComponent implements OnInit, OnChanges {
this.setLabels();
}
/* tslint:enable:no-string-literal */
-
}
private setLabels(): void {
if (!this.keyAction) {
return;
}
- let newLabels: string[] = [];
+
+ this.labelType = LabelTypes.Text;
+
if (this.keyAction instanceof KeystrokeModifiersAction) {
- let keyAction: KeystrokeModifiersAction = this.keyAction;
+ let keyAction: KeystrokeModifiersAction = this.keyAction as KeystrokeModifiersAction;
+ let newLabelSource: string[] = [];
if (keyAction.isOnlyOneModifierActive()) {
switch (keyAction.modifierMask) {
case KeyModifiers.leftCtrl:
case KeyModifiers.rightCtrl:
- newLabels.push('Ctrl');
+ newLabelSource.push('Ctrl');
break;
case KeyModifiers.leftShift:
case KeyModifiers.rightShift:
- newLabels.push('Shift');
+ newLabelSource.push('Shift');
break;
case KeyModifiers.leftAlt:
case KeyModifiers.rightAlt:
- newLabels.push('Alt');
+ newLabelSource.push('Alt');
break;
case KeyModifiers.leftGui:
case KeyModifiers.rightGui:
- newLabels.push('Super');
+ newLabelSource.push('Super');
break;
default:
- newLabels.push('Undefined');
+ newLabelSource.push('Undefined');
break;
}
}
+ this.labelSource = newLabelSource;
} else if (this.keyAction instanceof KeystrokeAction) {
- let keyAction: KeystrokeAction = this.keyAction;
- newLabels = Mapper.scanCodeToText((keyAction as KeystrokeAction).scancode);
+ let scancode: number = (this.keyAction as KeystrokeAction).scancode;
+ let newLabelSource: string[] = this.mapperService.scanCodeToText(scancode);
+ if (newLabelSource) {
+ this.labelSource = newLabelSource;
+ } else {
+ this.labelSource = this.mapperService.scanCodeToSvgImagePath(scancode);
+ this.labelType = LabelTypes.Path;
+ }
} else if (this.keyAction instanceof SwitchLayerAction) {
- let keyAction: SwitchLayerAction = this.keyAction;
+ let keyAction: SwitchLayerAction = this.keyAction as SwitchLayerAction;
+ let newLabelSource: string[] = [];
switch (keyAction.layer) {
case LayerName.mod:
- newLabels.push('Mod');
+ newLabelSource.push('Mod');
break;
case LayerName.fn:
- newLabels.push('Fn');
+ newLabelSource.push('Fn');
break;
case LayerName.mouse:
- newLabels.push('Mouse');
+ newLabelSource.push('Mouse');
break;
default:
break;
}
+ this.labelSource = newLabelSource;
}
- this.labels = newLabels;
+
}
}
diff --git a/src/services/mapper.service.ts b/src/services/mapper.service.ts
new file mode 100644
index 00000000..83d0ed1e
--- /dev/null
+++ b/src/services/mapper.service.ts
@@ -0,0 +1,121 @@
+import { Injectable } from 'angular2/core';
+
+@Injectable()
+export class MapperService {
+
+ private scanCodeTextMap = [
+ [], // 0
+ [], // 1
+ [], // 2
+ [], // 3
+ ['A'], // 4
+ ['B'], // 5
+ ['C'], // 6
+ ['D'], // 7
+ ['E'], // 8
+ ['F'], // 9
+ ['G'], // 10
+ ['H'], // 11
+ ['I'], // 12
+ ['J'], // 13
+ ['K'], // 14
+ ['L'], // 15
+ ['M'], // 16
+ ['N'], // 17
+ ['O'], // 18
+ ['P'], // 19
+ ['Q'], // 20
+ ['R'], // 21
+ ['S'], // 22
+ ['T'], // 23
+ ['U'], // 24
+ ['V'], // 25
+ ['W'], // 26
+ ['X'], // 27
+ ['Y'], // 28
+ ['Z'], // 29
+ ['1', '!'], // 30
+ ['2', '@'], // 31
+ ['3', '#'], // 32
+ ['4', '$'], // 33
+ ['5', '%'], // 34
+ ['6', '^'], // 35
+ ['7', '&'], // 36
+ ['8', '*'], // 37
+ ['9', '('], // 38
+ ['0', ')'], // 39
+ ['Enter'], // 40 - Enter
+ ['Esc'], // 41 - Escape
+ ['←'], // 42 - Backspace
+ ['Tab'], // 43 - Tab
+ ['Space'], // 44 - Space
+ ['-', '_'], // 45
+ ['=', '+'], // 46
+ ['[', '{'], // 47
+ [']', '}'], // 48
+ ['\\', '|'], // 49
+ [], // 50 NON_US_HASHMARK_AND_TILDE
+ [';', ':'], // 51
+ ['\'', '"'], // 52
+ ['`', '~'], // 53
+ [',', '<'], // 54
+ ['.', '>'], // 55
+ ['/', '?'], // 56
+ ['Caps Lock'], // 57
+ ['F1'], // 58
+ ['F2'], // 59
+ ['F3'], // 60
+ ['F4'], // 61
+ ['F5'], // 62
+ ['F6'], // 63
+ ['F7'], // 64
+ ['F8'], // 65
+ ['F9'], // 66
+ ['F10'], // 67
+ ['F11'], // 68
+ ['F12'], // 69
+ ['PrtScn'], // 70 - Print Screen
+ ['Scroll Lock'], // 71
+ ['Pause'], // 72
+ ['Insert'], // 73
+ ['Home'], // 74
+ ['PgUp'], // 75
+ ['Del'], // 76
+ ['End'], // 77
+ ['PgDn'], // 78
+ undefined, // 79 Right arrow
+ undefined, // 80 Left arrow
+ undefined, // 81 Down arrow
+ undefined // 82 Up arrow
+ ];
+
+ private scanCodeFileName: Map;
+
+ constructor() {
+ this.initScanCodeFileName();
+ }
+
+ public scanCodeToText(scanCode: number): string[] {
+ if (this.scanCodeTextMap.length < scanCode) {
+ return [];
+ }
+ return this.scanCodeTextMap[scanCode];
+ }
+
+ public scanCodeToSvgImagePath(scanCode: number): string {
+ let fileName: string = this.scanCodeFileName[scanCode];
+ if (fileName) {
+ return 'build/compiled_sprite.svg#' + fileName;
+ }
+ return undefined;
+ }
+
+ private initScanCodeFileName(): void {
+ this.scanCodeFileName = new Map();
+ this.scanCodeFileName[79] = 'icon-kbd__mod--arrow-right';
+ this.scanCodeFileName[80] = 'icon-kbd__mod--arrow-left';
+ this.scanCodeFileName[81] = 'icon-kbd__mod--arrow-down';
+ this.scanCodeFileName[82] = 'icon-kbd__mod--arrow-up';
+ }
+
+}
diff --git a/src/utils/mapper.ts b/src/utils/mapper.ts
deleted file mode 100644
index 94be7323..00000000
--- a/src/utils/mapper.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-export class Mapper {
-
- private static scanCodeMap = [
- [], // 0
- [], // 1
- [], // 2
- [], // 3
- ['A'], // 4
- ['B'], // 5
- ['C'], // 6
- ['D'], // 7
- ['E'], // 8
- ['F'], // 9
- ['G'], // 10
- ['H'], // 11
- ['I'], // 12
- ['J'], // 13
- ['K'], // 14
- ['L'], // 15
- ['M'], // 16
- ['N'], // 17
- ['O'], // 18
- ['P'], // 19
- ['Q'], // 20
- ['R'], // 21
- ['S'], // 22
- ['T'], // 23
- ['U'], // 24
- ['V'], // 25
- ['W'], // 26
- ['X'], // 27
- ['Y'], // 28
- ['Z'], // 29
- ['1', '!'], // 30
- ['2', '@'], // 31
- ['3', '#'], // 32
- ['4', '$'], // 33
- ['5', '%'], // 34
- ['6', '^'], // 35
- ['7', '&'], // 36
- ['8', '*'], // 37
- ['9', '('], // 38
- ['0', ')'], // 39
- ['Enter'], // 40 - Enter
- ['Esc'], // 41 - Escape
- ['←'], // 42 - Backspace
- ['Tab'], // 43 - Tab
- ['Space'], // 44 - Space
- ['-', '_'], // 45
- ['=', '+'], // 46
- ['[', '{'], // 47
- [']', '}'], // 48
- ['\\', '|'], // 49
- [], // 50 NON_US_HASHMARK_AND_TILDE
- [';', ':'], // 51
- ['\'', '"'], // 52
- ['`', '~'], // 53
- [',', '<'], // 54
- ['.', '>'], // 55
- ['/', '?'], // 56
- ['Caps Lock'] // 57
- ];
-
- public static scanCodeToText(scanCode: number): string[] {
- if (Mapper.scanCodeMap.length < scanCode) {
- return [];
- }
- return Mapper.scanCodeMap[scanCode];
- }
-}