diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index 12295e25e1..9c9d45962c 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -14,12 +14,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.4.461", - "_release": "1.4.461", + "version": "1.4.462", + "_release": "1.4.462", "_resolution": { "type": "version", - "tag": "1.4.461", - "commit": "4f817f597ac06d80fe41e3d7d096f4fd5d9b7be2" + "tag": "1.4.462", + "commit": "1beaad6a5a112a404e518ad16acfbdc6ca0c57cb" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.1", diff --git a/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js b/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js index ac03b063cb..8e75fc6b07 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js +++ b/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js @@ -294,9 +294,10 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana for (var i = 0, length = items.length; i < length; i++) { var item = items[i]; + var serverId = item.ServerId || options.serverId; - if (item.ServerId !== lastServerId) { - lastServerId = item.ServerId; + if (serverId !== lastServerId) { + lastServerId = serverId; apiClient = connectionManager.getApiClient(lastServerId); } @@ -440,7 +441,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana } var cardClass = className; - currentItemHtml += buildCard(i, renderItem, connectionManager.getApiClient(renderItem.ServerId), options, cardClass); + currentItemHtml += buildCard(i, renderItem, connectionManager.getApiClient(renderItem.ServerId || options.serverId), options, cardClass); itemsInRow++; diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.css b/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.css index da14f584aa..e3de631611 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.css +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.css @@ -220,9 +220,9 @@ _:-ms-input-placeholder, :root .mdl-slider { .sliderBubble { position: absolute; - top: -3.7em; + top: 0; left: 0; - padding: .5em 1em; + transform: translate3d(-48%, -115%, 0); background: #282828; color: #fff; display: flex; @@ -232,4 +232,5 @@ _:-ms-input-placeholder, :root .mdl-slider { .sliderBubbleText { margin: 0; + padding: .5em .75em; } diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.js b/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.js index 3bb92a5050..7b0625646a 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.js +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.js @@ -38,15 +38,20 @@ function updateBubble(range, value, bubble, bubbleText) { - bubble.style.left = (value - 1) + '%'; + bubble.style.left = value + '%'; - if (range.getBubbleText) { - value = range.getBubbleText(value); + if (range.getBubbleHtml) { + value = range.getBubbleHtml(value); } else { - value = Math.round(value); + if (range.getBubbleText) { + value = range.getBubbleText(value); + } else { + value = Math.round(value); + } + value = '

' + value + '

'; } - bubbleText.innerHTML = value; + bubble.innerHTML = value; } EmbySliderPrototype.attachedCallback = function () { @@ -73,21 +78,20 @@ htmlToInsert += '
'; } - htmlToInsert += '

'; + htmlToInsert += '
'; containerElement.insertAdjacentHTML('beforeend', htmlToInsert); var backgroundLower = containerElement.querySelector('.mdl-slider__background-lower'); var backgroundUpper = containerElement.querySelector('.mdl-slider__background-upper'); var sliderBubble = containerElement.querySelector('.sliderBubble'); - var sliderBubbleText = containerElement.querySelector('.sliderBubbleText'); var hasHideClass = sliderBubble.classList.contains('hide'); dom.addEventListener(this, 'input', function (e) { this.dragging = true; - updateBubble(this, this.value, sliderBubble, sliderBubbleText); + updateBubble(this, this.value, sliderBubble); if (hasHideClass) { sliderBubble.classList.remove('hide'); @@ -117,7 +121,7 @@ var clientX = e.clientX; var bubbleValue = (clientX - rect.left) / rect.width; bubbleValue *= 100; - updateBubble(this, bubbleValue, sliderBubble, sliderBubbleText); + updateBubble(this, bubbleValue, sliderBubble); if (hasHideClass) { sliderBubble.classList.remove('hide'); diff --git a/dashboard-ui/scripts/videoosd.js b/dashboard-ui/scripts/videoosd.js index 40fe2ad7c5..7b95ba0304 100644 --- a/dashboard-ui/scripts/videoosd.js +++ b/dashboard-ui/scripts/videoosd.js @@ -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 = '
'; + html += ''; + + html += '
'; + html += '
'; + html += chapter.Name; + html += '
'; + html += '

'; + html += datetime.getDisplayRunningTime(positionTicks); + html += '

'; + html += '
'; + + html += '
'; + + 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 '

' + datetime.getDisplayRunningTime(ticks) + '

'; }; 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 += ''; - } - - 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); diff --git a/dashboard-ui/videoosd.html b/dashboard-ui/videoosd.html index 98486bb9d5..f5fe2167c3 100644 --- a/dashboard-ui/videoosd.html +++ b/dashboard-ui/videoosd.html @@ -27,34 +27,40 @@ opacity: 0; } - .scenePicker { - position: fixed; - left: 12%; - bottom: 20%; - right: 0; - display: flex; - flex-direction: row; - align-items: center; - } - - .chapterThumb { - height: 24vh; - background-position: center center; - background-size: contain; - background-repeat: no-repeat; + .chapterThumbContainer { -moz-box-shadow: 0 0 1.9vh #000; -webkit-box-shadow: 0 0 1.9vh #000; box-shadow: 0 0 1.9vh #000; - border: solid 1px #222; - margin: 1vh; - transition: opacity ease-out .3s; + flex-grow: 1; + position: relative; } - .chapterThumb:not(.selectedChapterThumb) { - height: 22vh; - opacity: .2; - border-color: black; - } + .chapterThumb { + background-position: center center; + background-size: contain; + background-repeat: no-repeat; + border: 0; + height: 20vh; + } + + .chapterThumbTextContainer { + position: absolute; + bottom: 0; + left: 0; + right: 0; + background: rgba(0, 0, 0, 0.7); + padding: .25em .5em; + } + + .chapterThumbText { + padding: .25em 0; + margin: 0; + opacity: 1; + } + + .chapterThumbText-dim { + opacity: .6; + } .videoOsdBottom { position: fixed; @@ -181,8 +187,6 @@
-
-