summaryrefslogtreecommitdiff
path: root/web/js/keyboard.js
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-29 20:19:34 +0300
committerPaul Buetow <paul@buetow.org>2026-04-29 20:19:34 +0300
commit4a70c0ea083306cb79d0fa325d331ffa4333154a (patch)
tree84df7e2f781974ef45ac8c34f1a59e80fdd5c41d /web/js/keyboard.js
parentcf30414c2a0696cc75c615f4da66ea85d0522c42 (diff)
feat: create web PWA frontend
Diffstat (limited to 'web/js/keyboard.js')
-rw-r--r--web/js/keyboard.js28
1 files changed, 28 insertions, 0 deletions
diff --git a/web/js/keyboard.js b/web/js/keyboard.js
new file mode 100644
index 0000000..58ba0f3
--- /dev/null
+++ b/web/js/keyboard.js
@@ -0,0 +1,28 @@
+export function initKeyboard(handlers) {
+ document.addEventListener('keydown', (e) => {
+ const tag = e.target.tagName;
+ const editing = tag === 'INPUT' || tag === 'TEXTAREA' || e.target.isContentEditable;
+ if (editing) {
+ if (e.key === 'Escape') {
+ e.target.blur();
+ handlers.escape?.(e);
+ }
+ return;
+ }
+ switch (e.key) {
+ case 'ArrowUp': e.preventDefault(); handlers.navUp?.(e); break;
+ case 'ArrowDown': e.preventDefault(); handlers.navDown?.(e); break;
+ case 'ArrowLeft': handlers.navLeft?.(e); break;
+ case 'ArrowRight': handlers.navRight?.(e); break;
+ case 'Enter': handlers.enter?.(e); break;
+ case ' ': e.preventDefault(); handlers.playPause?.(e); break;
+ case 'p': handlers.playPause?.(e); break;
+ case 'f': handlers.fullscreen?.(e); break;
+ case 'Escape': handlers.escape?.(e); break;
+ case 'r': handlers.shuffle?.(e); break;
+ case 's': handlers.share?.(e); break;
+ case '/': e.preventDefault(); handlers.search?.(e); break;
+ case 'n': handlers.notes?.(e); break;
+ }
+ });
+}