keyboardShortcuts.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { useConfigStore } from "@/stores/config";
  2. const shortcuts = {};
  3. let _shortcuts = [];
  4. const lib = {
  5. handleKeyDown(event, keyCode, shift, ctrl, alt) {
  6. _shortcuts.forEach(shortcut => {
  7. if (
  8. shortcut.keyCode === keyCode &&
  9. shortcut.shift === shift &&
  10. shortcut.ctrl === ctrl &&
  11. shortcut.alt === alt
  12. ) {
  13. console.log(
  14. `Executing shortcut ${shortcut.name}. Prevent default: ${shortcut.preventDefault}`
  15. );
  16. if (shortcut.preventDefault === true) event.preventDefault();
  17. shortcut.handler(event);
  18. }
  19. });
  20. },
  21. registerShortcut(name, shortcut) {
  22. shortcuts[name] = shortcut;
  23. shortcuts[name].name = name;
  24. shortcuts[name].alt = shortcuts[name].alt ? shortcuts[name].alt : false;
  25. shortcuts[name].ctrl = shortcuts[name].ctrl
  26. ? shortcuts[name].ctrl
  27. : false;
  28. shortcuts[name].shift = shortcuts[name].shift
  29. ? shortcuts[name].shift
  30. : false;
  31. const configStore = useConfigStore();
  32. const overrides = configStore.shortcutOverrides;
  33. if (overrides && overrides[name])
  34. shortcuts[name] = Object.assign(shortcuts[name], overrides[name]);
  35. lib.remakeShortcutsArray();
  36. },
  37. unregisterShortcut: name => {
  38. delete shortcuts[name];
  39. lib.remakeShortcutsArray();
  40. },
  41. remakeShortcutsArray: () => {
  42. _shortcuts = Object.keys(shortcuts).map(key => shortcuts[key]);
  43. }
  44. };
  45. export default lib;