diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-29 20:19:34 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-29 20:19:34 +0300 |
| commit | 4a70c0ea083306cb79d0fa325d331ffa4333154a (patch) | |
| tree | 84df7e2f781974ef45ac8c34f1a59e80fdd5c41d /web/js/keyboard.js | |
| parent | cf30414c2a0696cc75c615f4da66ea85d0522c42 (diff) | |
feat: create web PWA frontend
Diffstat (limited to 'web/js/keyboard.js')
| -rw-r--r-- | web/js/keyboard.js | 28 |
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; + } + }); +} |
