diff --git a/src/app.module.ts b/src/app.module.ts
index b4795fe0..67e6df69 100644
--- a/src/app.module.ts
+++ b/src/app.module.ts
@@ -58,6 +58,8 @@ import { SvgModuleComponent } from './components/svg/module';
import { SvgKeyboardWrapComponent } from './components/svg/wrap';
import { MainAppComponent, appRoutingProviders, routing } from './main-app';
+import { CancelableDirective } from './directives';
+
import { MapperService } from './services/mapper.service';
import { KeymapEffects, MacroEffects } from './store/effects';
@@ -121,7 +123,8 @@ const storeConfig = {
MacroMouseTabComponent,
MacroTextTabComponent,
AddOnComponent,
- SettingsComponent
+ SettingsComponent,
+ CancelableDirective
],
imports: [
BrowserModule,
diff --git a/src/components/keymap/header/keymap-header.component.html b/src/components/keymap/header/keymap-header.component.html
index 724fbf02..be8f3de9 100644
--- a/src/components/keymap/header/keymap-header.component.html
+++ b/src/components/keymap/header/keymap-header.component.html
@@ -1,13 +1,15 @@
- keymap
- (
-
diff --git a/src/directives/cancelable/cancelable.directive.ts b/src/directives/cancelable/cancelable.directive.ts
new file mode 100644
index 00000000..13c2e131
--- /dev/null
+++ b/src/directives/cancelable/cancelable.directive.ts
@@ -0,0 +1,21 @@
+import { Directive, ElementRef, HostListener, Renderer } from '@angular/core';
+
+@Directive({
+ selector: '[cancelable]'
+})
+export class CancelableDirective {
+
+ private originalValue: string;
+
+ constructor(private elementRef: ElementRef, private renderer: Renderer) { }
+
+ @HostListener('focus') onFocus(): void {
+ this.originalValue = this.elementRef.nativeElement.value;
+ }
+
+ @HostListener('keyup.escape') onEscape(): void {
+ this.renderer.setElementProperty(this.elementRef.nativeElement, 'value', this.originalValue);
+ this.renderer.invokeElementMethod(this.elementRef.nativeElement, 'blur');
+ }
+
+}
diff --git a/src/directives/cancelable/index.ts b/src/directives/cancelable/index.ts
new file mode 100644
index 00000000..a64c3c34
--- /dev/null
+++ b/src/directives/cancelable/index.ts
@@ -0,0 +1 @@
+export { CancelableDirective } from './cancelable.directive';
diff --git a/src/directives/index.ts b/src/directives/index.ts
new file mode 100644
index 00000000..a6e0c1b6
--- /dev/null
+++ b/src/directives/index.ts
@@ -0,0 +1 @@
+export * from './cancelable';