mirror of
https://github.com/0PandaDEV/Qopy.git
synced 2025-04-21 21:24:05 +02:00
refactor: improve keybind saving logic and error handling
This commit is contained in:
parent
6656af8ab1
commit
0c28a5b0db
8 changed files with 478 additions and 154 deletions
|
@ -1,6 +1,6 @@
|
|||
diff --git a/node_modules/wrdu-keyboard/.DS_Store b/.DS_Store
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..fabbd951c2d14c46fd10fa167b8836d116bc0db6
|
||||
index 0000000000000000000000000000000000000000..4b7e9446f3580fab3e4feaba097bcdaf98c5833c
|
||||
Binary files /dev/null and b/.DS_Store differ
|
||||
diff --git a/dist/runtime/keyboard.d.ts b/dist/runtime/keyboard.d.ts
|
||||
index aeae40f3d2bc3efd459cce04c29c21c43884154d..6131bab4895ebb3048a5225f366430d23c5f1f13 100644
|
||||
|
@ -27,10 +27,10 @@ index aeae40f3d2bc3efd459cce04c29c21c43884154d..6131bab4895ebb3048a5225f366430d2
|
|||
up: New;
|
||||
prevent: {
|
||||
diff --git a/dist/runtime/keyboard.js b/dist/runtime/keyboard.js
|
||||
index e16f600258cee90d185ffc52777bed95c14bd93e..e4ce2678db649ec82e5a67fcdb74f5cdb37820aa 100644
|
||||
index e16f600258cee90d185ffc52777bed95c14bd93e..5ddec447a5dc66ffe063eb9f9dd765c9045bdaf7 100644
|
||||
--- a/dist/runtime/keyboard.js
|
||||
+++ b/dist/runtime/keyboard.js
|
||||
@@ -1,13 +1,14 @@
|
||||
@@ -1,45 +1,54 @@
|
||||
import { Key } from "./types/keys.js";
|
||||
import { defineNuxtPlugin } from "#app";
|
||||
-const getKeyString = (keys) => keys[0] == Key.All ? keys.sort().join("+") : "All";
|
||||
|
@ -45,18 +45,31 @@ index e16f600258cee90d185ffc52777bed95c14bd93e..e4ce2678db649ec82e5a67fcdb74f5cd
|
|||
+ const key = event.code;
|
||||
+ pressedKeys.add(key);
|
||||
const pressedArray = Array.from(pressedKeys);
|
||||
const keyString = getKeyString(pressedArray);
|
||||
if (handlers.down[keyString]) {
|
||||
@@ -17,13 +18,16 @@ const onKeydown = (event) => {
|
||||
}
|
||||
eventHandler.handler(event);
|
||||
if (eventHandler.once) {
|
||||
- const keyString = getKeyString(pressedArray);
|
||||
- if (handlers.down[keyString]) {
|
||||
- handlers.down[keyString].forEach((eventHandler) => {
|
||||
- if (eventHandler.prevent) {
|
||||
- event.preventDefault();
|
||||
- }
|
||||
- eventHandler.handler(event);
|
||||
- if (eventHandler.once) {
|
||||
- handlers.down[keyString] = handlers.down[keyString].filter((h) => h !== eventHandler);
|
||||
+ handlers.down[keyString] = handlers.down[keyString].filter(
|
||||
+ (h) => h !== eventHandler
|
||||
+ );
|
||||
}
|
||||
});
|
||||
- }
|
||||
- });
|
||||
+ for (const keyString of [getKeyString(pressedArray), "All"]) {
|
||||
+ if (handlers.down[keyString]) {
|
||||
+ handlers.down[keyString].forEach((eventHandler) => {
|
||||
+ if (eventHandler.prevent) {
|
||||
+ event.preventDefault();
|
||||
+ }
|
||||
+ eventHandler.handler(event);
|
||||
+ if (eventHandler.once) {
|
||||
+ handlers.down[keyString] = handlers.down[keyString].filter(
|
||||
+ (h) => h !== eventHandler
|
||||
+ );
|
||||
+ }
|
||||
+ });
|
||||
+ }
|
||||
}
|
||||
};
|
||||
const onKeyup = (event) => {
|
||||
|
@ -64,18 +77,31 @@ index e16f600258cee90d185ffc52777bed95c14bd93e..e4ce2678db649ec82e5a67fcdb74f5cd
|
|||
+ const key = event.code;
|
||||
+ pressedKeys.delete(key);
|
||||
const releasedArray = Array.from(pressedKeys);
|
||||
const keyString = getKeyString(releasedArray);
|
||||
if (handlers.up[keyString]) {
|
||||
@@ -33,13 +37,16 @@ const onKeyup = (event) => {
|
||||
}
|
||||
eventHandler.handler(event);
|
||||
if (eventHandler.once) {
|
||||
- const keyString = getKeyString(releasedArray);
|
||||
- if (handlers.up[keyString]) {
|
||||
- handlers.up[keyString].forEach((eventHandler) => {
|
||||
- if (eventHandler.prevent) {
|
||||
- event.preventDefault();
|
||||
- }
|
||||
- eventHandler.handler(event);
|
||||
- if (eventHandler.once) {
|
||||
- handlers.up[keyString] = handlers.up[keyString].filter((h) => h !== eventHandler);
|
||||
+ handlers.up[keyString] = handlers.up[keyString].filter(
|
||||
+ (h) => h !== eventHandler
|
||||
+ );
|
||||
}
|
||||
});
|
||||
- }
|
||||
- });
|
||||
+ for (const keyString of [getKeyString(releasedArray), "All"]) {
|
||||
+ if (handlers.up[keyString]) {
|
||||
+ handlers.up[keyString].forEach((eventHandler) => {
|
||||
+ if (eventHandler.prevent) {
|
||||
+ event.preventDefault();
|
||||
+ }
|
||||
+ eventHandler.handler(event);
|
||||
+ if (eventHandler.once) {
|
||||
+ handlers.up[keyString] = handlers.up[keyString].filter(
|
||||
+ (h) => h !== eventHandler
|
||||
+ );
|
||||
+ }
|
||||
+ });
|
||||
+ }
|
||||
}
|
||||
};
|
||||
const init = () => {
|
||||
|
@ -84,36 +110,18 @@ index e16f600258cee90d185ffc52777bed95c14bd93e..e4ce2678db649ec82e5a67fcdb74f5cd
|
|||
window.addEventListener("keydown", onKeydown);
|
||||
window.addEventListener("keyup", onKeyup);
|
||||
};
|
||||
@@ -47,6 +54,20 @@ const stop = () => {
|
||||
@@ -47,6 +56,10 @@ const stop = () => {
|
||||
window.removeEventListener("keydown", onKeydown);
|
||||
window.removeEventListener("keyup", onKeyup);
|
||||
};
|
||||
+const unregisterAll = () => {
|
||||
+ Object.keys(handlers.down).forEach((key) => {
|
||||
+ handlers.down[key].forEach((handler) => {
|
||||
+ console.log(`Unregistering ${key} ${handler.handler.toString()}`);
|
||||
+ });
|
||||
+ });
|
||||
+ Object.keys(handlers.up).forEach((key) => {
|
||||
+ handlers.up[key].forEach((handler) => {
|
||||
+ console.log(`Unregistering ${key} ${handler.handler.toString()}`);
|
||||
+ });
|
||||
+ });
|
||||
+ handlers.down = {};
|
||||
+ handlers.up = {};
|
||||
+};
|
||||
const down = (keys, handler, config = {}) => {
|
||||
if (keys.includes(Key.All)) {
|
||||
keys = [Key.All];
|
||||
@@ -59,6 +80,7 @@ const down = (keys, handler, config = {}) => {
|
||||
handlers.down[key] = [];
|
||||
}
|
||||
const { once = false, prevent = false } = config;
|
||||
+ console.log(key, handler.toString());
|
||||
handlers.down[key].push({ handler, prevent, once });
|
||||
};
|
||||
const up = (keys, handler, config = {}) => {
|
||||
@@ -84,6 +106,7 @@ const keyboard = defineNuxtPlugin((nuxtApp) => {
|
||||
@@ -84,6 +97,7 @@ const keyboard = defineNuxtPlugin((nuxtApp) => {
|
||||
keyboard: {
|
||||
init,
|
||||
stop,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue