From 740a7d00c4a703601ecf8aeef8705e8b567e8ee3 Mon Sep 17 00:00:00 2001 From: Hykilpikonna Date: Sat, 11 Dec 2021 18:45:08 -0500 Subject: [PATCH] [+] Encapsulate key bind vue --- src/utils.ts | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/utils.ts b/src/utils.ts index e3d12f1..8bb1937 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,3 +1,6 @@ +import {Options, Vue} from "vue-class-component"; +import {withKeys} from "vue"; + /** * Same as python's range * @@ -32,3 +35,38 @@ export function minMax(val: number, min: number, max: number): number { return val > max ? max : val < min ? min: val } + +/** + * Keybinds[key string] = (event) => Prevent default or not (Default: true) + */ +export type Keybinds = {[id: string]: (e: KeyboardEvent) => unknown} + +/** + * Key handler mixin + */ +export class KeyHandler extends Vue +{ + keybinds?: Keybinds + + mounted(): void + { + document.addEventListener('keydown', this.keyListener) + } + + unmounted(): void + { + document.removeEventListener('keydown', this.keyListener) + } + + keyListener(e: KeyboardEvent): void + { + if (!this.keybinds) return + if (e.key in this.keybinds) + { + if (this.keybinds[e.key](e) !== false) + { + e.preventDefault() + } + } + } +}