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;
}
});
}
|