summaryrefslogtreecommitdiff
path: root/web/js/keyboard.js
diff options
context:
space:
mode:
Diffstat (limited to 'web/js/keyboard.js')
-rw-r--r--web/js/keyboard.js34
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);