mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
use shared voice components
This commit is contained in:
parent
aece94029c
commit
07da989bfd
28 changed files with 413 additions and 185 deletions
242
dashboard-ui/bower_components/emby-webcomponents/inputmanager.js
vendored
Normal file
242
dashboard-ui/bower_components/emby-webcomponents/inputmanager.js
vendored
Normal file
|
@ -0,0 +1,242 @@
|
|||
define(['playbackManager', 'focusManager', 'embyRouter'], function (playbackManager, focusManager, embyRouter) {
|
||||
|
||||
var lastInputTime = new Date().getTime();
|
||||
|
||||
function notify() {
|
||||
lastInputTime = new Date().getTime();
|
||||
}
|
||||
|
||||
function idleTime() {
|
||||
return new Date().getTime() - lastInputTime;
|
||||
}
|
||||
|
||||
function select(sourceElement) {
|
||||
|
||||
sourceElement.click();
|
||||
}
|
||||
|
||||
var eventListenerCount = 0;
|
||||
function on(scope, fn) {
|
||||
eventListenerCount++;
|
||||
scope.addEventListener('command', fn);
|
||||
}
|
||||
|
||||
function off(scope, fn) {
|
||||
|
||||
if (eventListenerCount) {
|
||||
eventListenerCount--;
|
||||
}
|
||||
|
||||
scope.removeEventListener('command', fn);
|
||||
}
|
||||
|
||||
var commandTimes = {};
|
||||
|
||||
function checkCommandTime(command) {
|
||||
|
||||
var last = commandTimes[command] || 0;
|
||||
var now = new Date().getTime();
|
||||
|
||||
if ((now - last) < 1000) {
|
||||
return false;
|
||||
}
|
||||
|
||||
commandTimes[command] = now;
|
||||
return true;
|
||||
}
|
||||
|
||||
function handleCommand(name, options) {
|
||||
|
||||
notify();
|
||||
|
||||
var sourceElement = (options ? options.sourceElement : null);
|
||||
|
||||
if (sourceElement) {
|
||||
sourceElement = focusManager.focusableParent(sourceElement);
|
||||
}
|
||||
|
||||
sourceElement = sourceElement || document.activeElement || window;
|
||||
|
||||
if (eventListenerCount) {
|
||||
var customEvent = new CustomEvent("command", {
|
||||
detail: {
|
||||
command: name
|
||||
},
|
||||
bubbles: true,
|
||||
cancelable: true
|
||||
});
|
||||
|
||||
var eventResult = sourceElement.dispatchEvent(customEvent);
|
||||
if (!eventResult) {
|
||||
// event cancelled
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
switch (name) {
|
||||
|
||||
case 'up':
|
||||
focusManager.moveUp(sourceElement);
|
||||
break;
|
||||
case 'down':
|
||||
focusManager.moveDown(sourceElement);
|
||||
break;
|
||||
case 'left':
|
||||
focusManager.moveLeft(sourceElement);
|
||||
break;
|
||||
case 'right':
|
||||
focusManager.moveRight(sourceElement);
|
||||
break;
|
||||
case 'home':
|
||||
embyRouter.goHome();
|
||||
break;
|
||||
case 'settings':
|
||||
embyRouter.showSettings();
|
||||
break;
|
||||
case 'back':
|
||||
embyRouter.back();
|
||||
break;
|
||||
case 'forward':
|
||||
// TODO
|
||||
break;
|
||||
case 'select':
|
||||
select(sourceElement);
|
||||
break;
|
||||
case 'pageup':
|
||||
// TODO
|
||||
break;
|
||||
case 'pagedown':
|
||||
// TODO
|
||||
break;
|
||||
case 'end':
|
||||
// TODO
|
||||
break;
|
||||
case 'menu':
|
||||
case 'info':
|
||||
// TODO
|
||||
break;
|
||||
case 'next':
|
||||
if (playbackManager.isPlayingVideo()) {
|
||||
playbackManager.nextChapter();
|
||||
} else if (playbackManager.isPlaying()) {
|
||||
playbackManager.nextTrack();
|
||||
}
|
||||
break;
|
||||
case 'previous':
|
||||
|
||||
if (playbackManager.isPlayingVideo()) {
|
||||
playbackManager.previousChapter();
|
||||
} else if (playbackManager.isPlaying()) {
|
||||
playbackManager.previousTrack();
|
||||
}
|
||||
break;
|
||||
case 'guide':
|
||||
embyRouter.showGuide();
|
||||
break;
|
||||
case 'recordedtv':
|
||||
embyRouter.showRecordedTV();
|
||||
break;
|
||||
case 'record':
|
||||
// TODO
|
||||
break;
|
||||
case 'livetv':
|
||||
embyRouter.showLiveTV();
|
||||
break;
|
||||
case 'mute':
|
||||
playbackManager.mute();
|
||||
break;
|
||||
case 'unmute':
|
||||
playbackManager.unMute();
|
||||
break;
|
||||
case 'togglemute':
|
||||
playbackManager.toggleMute();
|
||||
break;
|
||||
case 'volumedown':
|
||||
playbackManager.volumeDown();
|
||||
break;
|
||||
case 'volumeup':
|
||||
playbackManager.volumeUp();
|
||||
break;
|
||||
case 'play':
|
||||
playbackManager.unpause();
|
||||
break;
|
||||
case 'pause':
|
||||
playbackManager.pause();
|
||||
break;
|
||||
case 'playpause':
|
||||
playbackManager.playPause();
|
||||
break;
|
||||
case 'stop':
|
||||
if (checkCommandTime('stop')) {
|
||||
playbackManager.stop();
|
||||
}
|
||||
break;
|
||||
case 'changezoom':
|
||||
// TODO
|
||||
break;
|
||||
case 'changeaudiotrack':
|
||||
// TODO
|
||||
break;
|
||||
case 'changesubtitletrack':
|
||||
break;
|
||||
case 'search':
|
||||
embyRouter.showSearch();
|
||||
break;
|
||||
case 'favorites':
|
||||
embyRouter.showFavorites();
|
||||
break;
|
||||
case 'fastforward':
|
||||
playbackManager.fastForward();
|
||||
break;
|
||||
case 'rewind':
|
||||
playbackManager.rewind();
|
||||
break;
|
||||
case 'togglefullscreen':
|
||||
// TODO
|
||||
break;
|
||||
case 'disabledisplaymirror':
|
||||
playbackManager.enableDisplayMirroring(false);
|
||||
break;
|
||||
case 'enabledisplaymirror':
|
||||
playbackManager.enableDisplayMirroring(true);
|
||||
break;
|
||||
case 'toggledisplaymirror':
|
||||
playbackManager.toggleDisplayMirroring();
|
||||
break;
|
||||
case 'movies':
|
||||
// TODO
|
||||
break;
|
||||
case 'music':
|
||||
// TODO
|
||||
break;
|
||||
case 'tv':
|
||||
// TODO
|
||||
break;
|
||||
case 'latestepisodes':
|
||||
// TODO
|
||||
break;
|
||||
case 'nowplaying':
|
||||
// TODO
|
||||
break;
|
||||
case 'upcomingtv':
|
||||
// TODO
|
||||
break;
|
||||
case 'nextup':
|
||||
// TODO
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('click', notify);
|
||||
|
||||
return {
|
||||
trigger: handleCommand,
|
||||
handle: handleCommand,
|
||||
notify: notify,
|
||||
idleTime: idleTime,
|
||||
on: on,
|
||||
off: off
|
||||
};
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue