1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

update video osd

This commit is contained in:
Luke Pulverenti 2017-01-11 03:00:03 -05:00
parent e9b1b4ad5f
commit 0444d44461
6 changed files with 128 additions and 222 deletions

View file

@ -88,6 +88,7 @@
var currentRuntimeTicks = 0;
var lastUpdateTime = 0;
var isEnabled;
var currentItem;
var nowPlayingVolumeSlider = view.querySelector('.osdVolumeSlider');
var nowPlayingVolumeSliderContainer = view.querySelector('.osdVolumeSliderContainer');
@ -98,8 +99,6 @@
var nowPlayingDurationText = view.querySelector('.osdDurationText');
var endsAtText = view.querySelector('.endsAtText');
var scenePicker = view.querySelector('.scenePicker');
var isScenePickerRendered;
var btnRewind = view.querySelector('.btnRewind');
var btnFastForward = view.querySelector('.btnFastForward');
@ -115,10 +114,8 @@
function updateNowPlayingInfo(state) {
scenePicker.innerHTML = '';
isScenePickerRendered = false;
var item = state.NowPlayingItem;
currentItem = item;
setPoster(item);
@ -380,10 +377,10 @@
function updateFullscreenIcon() {
if (playbackManager.isFullscreen(currentPlayer)) {
view.querySelector('.btnFullscreen').setAttribute('title', globalize.translate('core#ExitFullscreen'));
view.querySelector('.btnFullscreen').setAttribute('title', globalize.translate('ExitFullscreen'));
view.querySelector('.btnFullscreen i').innerHTML = '';
} else {
view.querySelector('.btnFullscreen').setAttribute('title', globalize.translate('core#Fullscreen'));
view.querySelector('.btnFullscreen').setAttribute('title', globalize.translate('Fullscreen'));
view.querySelector('.btnFullscreen i').innerHTML = '';
}
}
@ -712,10 +709,10 @@
}
if (isMuted) {
view.querySelector('.buttonMute').setAttribute('title', globalize.translate('core#Unmute'));
view.querySelector('.buttonMute').setAttribute('title', globalize.translate('Unmute'));
view.querySelector('.buttonMute i').innerHTML = '';
} else {
view.querySelector('.buttonMute').setAttribute('title', globalize.translate('core#Mute'));
view.querySelector('.buttonMute').setAttribute('title', globalize.translate('Mute'));
view.querySelector('.buttonMute i').innerHTML = '';
}
@ -955,7 +952,6 @@
nowPlayingPositionSlider.addEventListener('change', function () {
stopScenePickerTimer();
if (currentPlayer) {
var newPercent = parseFloat(this.value);
@ -964,7 +960,65 @@
}
});
nowPlayingPositionSlider.getBubbleText = function (value) {
function getImgUrl(item, chapter, index, maxWidth, apiClient) {
if (chapter.ImageTag) {
return apiClient.getScaledImageUrl(item.Id, {
maxWidth: maxWidth,
tag: chapter.ImageTag,
type: "Chapter",
index: index
});
}
return null;
}
function getChapterBubbleHtml(apiClient, item, chapters, positionTicks) {
var chapter;
var index = -1;
for (var i = 0, length = chapters.length; i < length; i++) {
var currentChapter = chapters[i];
if (positionTicks >= currentChapter.StartPositionTicks) {
chapter = currentChapter;
index = i;
}
}
if (!chapter) {
return null;
}
var src = getImgUrl(item, chapter, index, 400, apiClient);
if (src) {
var html = '<div class="chapterThumbContainer">';
html += '<img class="chapterThumb" src="' + src + '" />';
html += '<div class="chapterThumbTextContainer">';
html += '<div class="chapterThumbText chapterThumbText-dim">';
html += chapter.Name;
html += '</div>';
html += '<h1 class="chapterThumbText">';
html += datetime.getDisplayRunningTime(positionTicks);
html += '</h1>';
html += '</div>';
html += '</div>';
return html;
}
return null;
}
nowPlayingPositionSlider.getBubbleHtml = function (value) {
if (!currentRuntimeTicks) {
return '--:--';
@ -974,7 +1028,16 @@
ticks /= 100;
ticks *= value;
return datetime.getDisplayRunningTime(ticks);
var item = currentItem;
if (item && item.Chapters && item.Chapters[0].ImageTag) {
var html = getChapterBubbleHtml(connectionManager.getApiClient(item.ServerId), item, item.Chapters, ticks);
if (html) {
return html;
}
}
return '<h1 class="sliderBubbleText">' + datetime.getDisplayRunningTime(ticks) + '</h1>';
};
view.querySelector('.btnPreviousTrack').addEventListener('click', function () {
@ -1005,112 +1068,6 @@
view.querySelector('.btnAudio').addEventListener('click', showAudioTrackSelection);
view.querySelector('.btnSubtitles').addEventListener('click', showSubtitleTrackSelection);
function getChapterHtml(item, chapter, index, maxWidth, apiClient) {
var html = '';
var src = getImgUrl(item, chapter, index, maxWidth, apiClient);
if (src) {
var pct = currentRuntimeTicks ? (chapter.StartPositionTicks / currentRuntimeTicks) : 0;
pct *= 100;
chapterPcts[index] = pct;
html += '<img data-index="' + index + '" class="chapterThumb" src="' + src + '" />';
}
return html;
}
function getImgUrl(item, chapter, index, maxWidth, apiClient) {
if (chapter.ImageTag) {
return apiClient.getScaledImageUrl(item.Id, {
maxWidth: maxWidth,
tag: chapter.ImageTag,
type: "Chapter",
index: index
});
}
return null;
}
function renderScenePicker(progressPct) {
chapterPcts = [];
var item = playbackManager.currentItem(currentPlayer);
if (!item) {
return;
}
var chapters = item.Chapters || [];
var currentIndex = -1;
var apiClient = connectionManager.getApiClient(item.ServerId);
scenePicker.innerHTML = chapters.map(function (chapter) {
currentIndex++;
return getChapterHtml(item, chapter, currentIndex, 400, apiClient);
}).join('');
imageLoader.lazyChildren(scenePicker);
fadeIn(scenePicker, progressPct);
}
var hideScenePickerTimeout;
var chapterPcts = [];
function showScenePicker() {
var progressPct = nowPlayingPositionSlider.value;
if (!isScenePickerRendered) {
isScenePickerRendered = true;
renderScenePicker();
} else {
fadeIn(scenePicker, progressPct);
}
if (hideScenePickerTimeout) {
clearTimeout(hideScenePickerTimeout);
}
hideScenePickerTimeout = setTimeout(hideScenePicker, 1600);
}
function hideScenePicker() {
fadeOut(scenePicker);
}
var showScenePickerTimeout;
function startScenePickerTimer() {
if (!showScenePickerTimeout) {
showScenePickerTimeout = setTimeout(showScenePicker, 100);
}
}
function stopScenePickerTimer() {
if (showScenePickerTimeout) {
clearTimeout(showScenePickerTimeout);
showScenePickerTimeout = null;
}
}
dom.addEventListener(nowPlayingPositionSlider, 'input', function () {
if (scenePicker.classList.contains('hide')) {
startScenePickerTimer();
} else {
showScenePicker();
}
}, {
passive: true
});
function onViewHideStopPlayback() {
if (playbackManager.isPlayingVideo()) {
@ -1129,67 +1086,6 @@
}
}
function fadeIn(elem, pct) {
if (!elem.classList.contains('hide')) {
selectChapterThumb(elem, pct);
return;
}
elem.classList.remove('hide');
var keyframes = [
{ opacity: '0', offset: 0 },
{ opacity: '1', offset: 1 }
];
var timing = { duration: 300, iterations: 1 };
elem.animate(keyframes, timing).onfinish = function () {
selectChapterThumb(elem, pct);
};
}
function selectChapterThumb(elem, pct) {
var index = -1;
for (var i = 0, length = chapterPcts.length; i < length; i++) {
if (pct >= chapterPcts[i]) {
index = i;
}
}
if (index === -1) {
index = 0;
}
var selected = elem.querySelector('.selectedChapterThumb');
var newSelected = elem.querySelector('.chapterThumb[data-index="' + index + '"]');
if (selected !== newSelected) {
if (selected) {
selected.classList.remove('selectedChapterThumb');
}
newSelected.classList.add('selectedChapterThumb');
scrollHelper.toCenter(elem, newSelected, true);
}
}
function fadeOut(elem) {
if (elem.classList.contains('hide')) {
return;
}
var keyframes = [
{ opacity: '1', offset: 0 },
{ opacity: '0', offset: 1 }
];
var timing = { duration: 300, iterations: 1 };
elem.animate(keyframes, timing).onfinish = function () {
elem.classList.add('hide');
};
}
function enableStopOnBack(enabled) {
view.removeEventListener('viewbeforehide', onViewHideStopPlayback);