From a0d5a58f8bd65b1656466dd6c649c64bcd83bb0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Farkas=20J=C3=B3zsef?= Date: Mon, 12 Dec 2016 20:58:42 +0100 Subject: [PATCH] Refactor: extract keyboard-slider --- src/app.module.ts | 4 +- src/components/keyboard/index.ts | 1 + src/components/keyboard/slider/index.ts | 1 + .../slider/keyboard-slider.component.html | 6 ++ .../slider/keyboard-slider.component.scss | 8 ++ .../slider/keyboard-slider.component.ts | 101 ++++++++++++++++++ .../svg/wrap/svg-keyboard-wrap.component.html | 13 +-- .../svg/wrap/svg-keyboard-wrap.component.scss | 13 +-- .../svg/wrap/svg-keyboard-wrap.component.ts | 52 +-------- 9 files changed, 130 insertions(+), 69 deletions(-) create mode 100644 src/components/keyboard/index.ts create mode 100644 src/components/keyboard/slider/index.ts create mode 100644 src/components/keyboard/slider/keyboard-slider.component.html create mode 100644 src/components/keyboard/slider/keyboard-slider.component.scss create mode 100644 src/components/keyboard/slider/keyboard-slider.component.ts diff --git a/src/app.module.ts b/src/app.module.ts index ad946407..ea2ed124 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -11,6 +11,7 @@ import { DragulaModule } from 'ng2-dragula/ng2-dragula'; import { Select2Module } from 'ng2-select2/ng2-select2'; import { AddOnComponent } from './components/add-on'; +import { KeyboardSliderComponent } from './components/keyboard/slider'; import { KeymapAddComponent, KeymapEditComponent, KeymapHeaderComponent } from './components/keymap'; import { LayersComponent } from './components/layers'; import { @@ -57,7 +58,7 @@ import { } from './components/svg/keys'; import { SvgModuleComponent } from './components/svg/module'; import { SvgKeyboardWrapComponent } from './components/svg/wrap'; -import { MainAppComponent, appRoutingProviders, routing } from './main-app'; +import { MainAppComponent, appRoutingProviders, routing } from './main-app'; import { CancelableDirective } from './directives'; @@ -126,6 +127,7 @@ const storeConfig = { MacroNotFoundComponent, AddOnComponent, SettingsComponent, + KeyboardSliderComponent, CancelableDirective ], imports: [ diff --git a/src/components/keyboard/index.ts b/src/components/keyboard/index.ts new file mode 100644 index 00000000..eb0742f8 --- /dev/null +++ b/src/components/keyboard/index.ts @@ -0,0 +1 @@ +export * from './slider'; diff --git a/src/components/keyboard/slider/index.ts b/src/components/keyboard/slider/index.ts new file mode 100644 index 00000000..5ea6c5f6 --- /dev/null +++ b/src/components/keyboard/slider/index.ts @@ -0,0 +1 @@ +export { KeyboardSliderComponent } from './keyboard-slider.component'; diff --git a/src/components/keyboard/slider/keyboard-slider.component.html b/src/components/keyboard/slider/keyboard-slider.component.html new file mode 100644 index 00000000..19690d00 --- /dev/null +++ b/src/components/keyboard/slider/keyboard-slider.component.html @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/src/components/keyboard/slider/keyboard-slider.component.scss b/src/components/keyboard/slider/keyboard-slider.component.scss new file mode 100644 index 00000000..5250ea1c --- /dev/null +++ b/src/components/keyboard/slider/keyboard-slider.component.scss @@ -0,0 +1,8 @@ +svg-keyboard { + width: 95%; + max-width: 1400px; + position: absolute; + left: 0; + transform: translateX(-101%); + user-select: none; +} diff --git a/src/components/keyboard/slider/keyboard-slider.component.ts b/src/components/keyboard/slider/keyboard-slider.component.ts new file mode 100644 index 00000000..39e450bb --- /dev/null +++ b/src/components/keyboard/slider/keyboard-slider.component.ts @@ -0,0 +1,101 @@ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + OnChanges, + Output, + SimpleChanges, + animate, + keyframes, + state, + style, + transition, + trigger +} from '@angular/core'; + +import { Layer } from '../../../config-serializer/config-items/Layer'; + +@Component({ + selector: 'keyboard-slider', + template: require('./keyboard-slider.component.html'), + styles: [require('./keyboard-slider.component.scss')], + changeDetection: ChangeDetectionStrategy.Default, + // We use 101%, because there was still a trace of the keyboard in the screen when animation was done + animations: [ + trigger('layerState', [ + state('leftIn, rightIn', style({ + transform: 'translateX(-50%)', + left: '50%' + })), + state('leftOut', style({ + transform: 'translateX(-101%)', + left: '0' + })), + state('rightOut', style({ + transform: 'translateX(0)', + left: '101%' + })), + transition('leftOut => leftIn, rightOut => leftIn', [ + animate('400ms ease-out', keyframes([ + style({ transform: 'translateX(0%)', left: '101%', offset: 0 }), + style({ transform: 'translateX(-50%)', left: '50%', offset: 1 }) + ])) + ]), + transition('leftIn => leftOut, rightIn => leftOut', [ + animate('400ms ease-out', keyframes([ + style({ transform: 'translateX(-50%)', left: '50%', offset: 0 }), + style({ transform: 'translateX(-101%)', left: '0%', offset: 1 }) + ])) + ]), + transition('* => rightIn', [ + animate('400ms ease-out', keyframes([ + style({ transform: 'translateX(-101%)', left: '0%', offset: 0 }), + style({ transform: 'translateX(-50%)', left: '50%', offset: 1 }) + ])) + ]), + transition('* => rightOut', [ + animate('400ms ease-out', keyframes([ + style({ transform: 'translateX(-50%)', left: '50%', offset: 0 }), + style({ transform: 'translateX(0%)', left: '101%', offset: 1 }) + ])) + ]), + transition(':leave', [ + animate('2000ms ease-out', keyframes([ + style({ opacity: 1, offset: 0 }), + style({ opacity: 0, offset: 1 }) + ])) + ]) + ]) + ] +}) +export class KeyboardSliderComponent implements OnChanges { + @Input() layers: Layer[]; + @Input() currentLayer: number; + @Output() keyClick = new EventEmitter(); + @Output() keyHover = new EventEmitter(); + + ngOnChanges(changes: SimpleChanges) { + const layerChange = changes['currentLayer']; + if (layerChange) { + const prevValue = layerChange.isFirstChange() ? layerChange.currentValue : layerChange.previousValue; + this.onLayerChange(prevValue, layerChange.currentValue); + } + } + + trackKeyboard(index: number) { + return index; + } + + onLayerChange(oldIndex: number, index: number): void { + if (index > oldIndex) { + this.layers[oldIndex].animation = 'leftOut'; + this.layers[index].animation = 'leftIn'; + } else { + this.layers[oldIndex].animation = 'rightOut'; + this.layers[index].animation = 'rightIn'; + } + + } + +} diff --git a/src/components/svg/wrap/svg-keyboard-wrap.component.html b/src/components/svg/wrap/svg-keyboard-wrap.component.html index 89b7fcc4..f4764794 100644 --- a/src/components/svg/wrap/svg-keyboard-wrap.component.html +++ b/src/components/svg/wrap/svg-keyboard-wrap.component.html @@ -1,14 +1,9 @@