Files
mal/static/player/keyboard.ts

73 lines
1.7 KiB
TypeScript

import { state } from './state';
import {
displayTimeFromAbsolute,
absoluteTimeFromDisplay,
absoluteTimeFromRatio,
getBounds,
} from './timeline';
import {
showControls,
toggleMute,
togglePlayPause,
toggleFullscreen,
seekBy,
setVolume,
formatTime,
} from './controls';
export const setupKeyboard = (): void => {
document.addEventListener('keydown', e => {
const target = e.target as HTMLElement;
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable)
return;
switch (e.code) {
case 'Space':
case 'KeyK':
e.preventDefault();
togglePlayPause();
showControls();
break;
case 'ArrowLeft':
case 'KeyJ':
e.preventDefault();
seekBy(-10);
break;
case 'ArrowRight':
case 'KeyL':
e.preventDefault();
seekBy(10);
break;
case 'ArrowUp':
e.preventDefault();
setVolume(state.video.volume + 0.05);
showControls();
break;
case 'ArrowDown':
e.preventDefault();
setVolume(state.video.volume - 0.05);
showControls();
break;
case 'KeyM':
e.preventDefault();
toggleMute();
showControls();
break;
case 'KeyF':
e.preventDefault();
toggleFullscreen();
showControls();
break;
default:
if (/^\d$/.test(e.key)) {
const b = getBounds();
if (b.duration > 0) {
e.preventDefault();
state.video.currentTime = absoluteTimeFromRatio(parseInt(e.key, 10) / 10);
showControls();
}
}
}
});
};