diff options
Diffstat (limited to 'web/js/keyboard.js')
| -rw-r--r-- | web/js/keyboard.js | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/web/js/keyboard.js b/web/js/keyboard.js index 62dc652..1206559 100644 --- a/web/js/keyboard.js +++ b/web/js/keyboard.js @@ -2,6 +2,38 @@ export function initKeyboard(handlers) { document.addEventListener('keydown', (e) => { const tag = e.target.tagName; const editing = tag === 'INPUT' || tag === 'TEXTAREA' || e.target.isContentEditable; + + // Shares modal keyboard navigation (overrides global keys while open) + if (handlers.isSharesOpen?.()) { + switch (e.key) { + case 'ArrowUp': + case 'k': + e.preventDefault(); + handlers.sharesNavUp?.(e); + return; + case 'ArrowDown': + case 'j': + e.preventDefault(); + handlers.sharesNavDown?.(e); + return; + case 'Enter': + e.preventDefault(); + handlers.sharesCopy?.(e); + return; + case 'Delete': + case 'd': + e.preventDefault(); + handlers.sharesDelete?.(e); + return; + case 'Escape': + e.preventDefault(); + handlers.sharesToggle?.(e); + return; + } + // Allow only Escape/Enter/Arrows/k/j/d inside the shares modal; ignore everything else + return; + } + if (editing) { if (e.key === 'Escape') { e.target.blur(); @@ -79,6 +111,7 @@ export function initKeyboard(handlers) { case 'Backspace': handlers.backspace?.(e); break; case 'r': handlers.shuffle?.(e); break; case 's': handlers.sidebar?.(e); break; + case 'S': handlers.share?.(e); break; case '/': e.preventDefault(); handlers.search?.(e); @@ -87,6 +120,7 @@ export function initKeyboard(handlers) { case 't': handlers.toolbar?.(e); break; case 'd': handlers.download?.(e); break; case 'u': handlers.upload?.(e); break; + case 'L': handlers.sharesToggle?.(e); break; case '?': e.preventDefault(); handlers.help?.(e); |
