summaryrefslogtreecommitdiff
path: root/web/js/keyboard.js
blob: 58ba0f387ce9d680ce868ce66d4e70e45c04a205 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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;
    }
  });
}