diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index 56d6368223..823318aad7 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -15,12 +15,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.4.97", - "_release": "1.4.97", + "version": "1.4.98", + "_release": "1.4.98", "_resolution": { "type": "version", - "tag": "1.4.97", - "commit": "8b11aa9b8f073cbcd9eacf3170efce38d43a5526" + "tag": "1.4.98", + "commit": "6e0ce46f8c48908f94a7f32e95fee78b994c16f5" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.0", diff --git a/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.css b/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.css index dc35703038..764f69c4f1 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.css +++ b/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.css @@ -58,8 +58,12 @@ height: 3.8vh; } - .layout-tv .playedIndicator i { - width: 2.6vh; - height: 2.6vh; - font-size: 2.6vh; - } +.layout-tv .countIndicator { + font-size: 80%; +} + +.layout-tv .playedIndicator i { + width: 2.6vh; + height: 2.6vh; + font-size: 2.6vh; +} diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js index 0346d41bcc..df3da7a0ad 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js +++ b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js @@ -120,7 +120,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter', }); } - if (options.playAllFromHere) { + if (options.playAllFromHere && item.Type != 'Program' && item.Type != 'TvChannel') { commands.push({ name: globalize.translate('sharedcomponents#PlayAllFromHere'), id: 'playallfromhere' diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemhovermenu/itemhovermenu.css b/dashboard-ui/bower_components/emby-webcomponents/itemhovermenu/itemhovermenu.css index 3786543ce8..cae70cf2bc 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/itemhovermenu/itemhovermenu.css +++ b/dashboard-ui/bower_components/emby-webcomponents/itemhovermenu/itemhovermenu.css @@ -7,11 +7,14 @@ background-color: rgba(0, 0, 0, .85); z-index: 998; line-height: initial; + font-size: initial; } .cardOverlayInner { - padding: 11px 12px 10px; + padding: .5em; color: #fff; + text-align: left; + } .cardOverlayInner button:last-child { diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemhovermenu/itemhovermenu.js b/dashboard-ui/bower_components/emby-webcomponents/itemhovermenu/itemhovermenu.js index 603642ed24..e82e85bdce 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/itemhovermenu/itemhovermenu.js +++ b/dashboard-ui/bower_components/emby-webcomponents/itemhovermenu/itemhovermenu.js @@ -25,7 +25,7 @@ showOverlayTimeout = null; } - elem = elem.querySelector('.cardOverlayTarget'); + elem = elem.classList.contains('cardOverlayTarget') ? elem : elem.querySelector('.cardOverlayTarget'); if (elem) { slideDownToHide(elem); @@ -47,7 +47,7 @@ var keyframes = [ { transform: 'translateY(0)', offset: 0 }, { transform: 'translateY(100%)', offset: 1 }]; - var timing = { duration: 300, iterations: 1, fill: 'forwards', easing: 'ease-out' }; + var timing = { duration: 180, iterations: 1, fill: 'forwards', easing: 'ease-out' }; elem.animate(keyframes, timing).onfinish = function () { elem.classList.add('hide'); @@ -72,12 +72,12 @@ var keyframes = [ { transform: 'translateY(100%)', offset: 0 }, { transform: 'translateY(0)', offset: 1 }]; - var timing = { duration: 300, iterations: 1, fill: 'forwards', easing: 'ease-out' }; + var timing = { duration: 200, iterations: 1, fill: 'forwards', easing: 'ease-out' }; elem.animate(keyframes, timing); }); } - function getOverlayHtml(item, currentUser, card) { + function getOverlayHtml(apiClient, item, currentUser, card) { var html = ''; @@ -93,12 +93,12 @@ var name = itemHelper.getDisplayName(item); html += '
'; - var logoHeight = isSmallItem || isMiniItem ? 20 : 26; + var logoHeight = 26; var imgUrl; if (parentName && item.ParentLogoItemId) { - imgUrl = ApiClient.getScaledImageUrl(item.ParentLogoItemId, { + imgUrl = apiClient.getScaledImageUrl(item.ParentLogoItemId, { maxHeight: logoHeight, type: 'logo', tag: item.ParentLogoImageTag @@ -109,7 +109,7 @@ } else if (item.ImageTags.Logo) { - imgUrl = ApiClient.getScaledImageUrl(item.Id, { + imgUrl = apiClient.getScaledImageUrl(item.Id, { maxHeight: logoHeight, type: 'logo', tag: item.ImageTags.Logo @@ -179,15 +179,14 @@ function onShowTimerExpired(elem) { - elem = elem.querySelector('a'); - var innerElem = elem.querySelector('.cardOverlayTarget'); if (!innerElem) { innerElem = document.createElement('div'); innerElem.classList.add('hide'); innerElem.classList.add('cardOverlayTarget'); - parentWithClass(elem, 'cardContent').appendChild(innerElem); + + elem.parentNode.appendChild(innerElem); } var dataElement = parentWithAttribute(elem, 'data-id'); @@ -210,11 +209,7 @@ var item = responses[0]; var user = responses[1]; - var card = elem; - - elem = parentWithAttribute(elem, 'data-id'); - - innerElem.innerHTML = getOverlayHtml(item, user, card); + innerElem.innerHTML = getOverlayHtml(apiClient, item, user, dataElement); }); slideUpToShow(innerElem); @@ -223,8 +218,9 @@ function onHoverIn(e) { var elem = e.target; + var card = parentWithClass(elem, 'cardImageContainer') || parentWithClass(elem, 'cardImage'); - if (!elem.classList.contains('cardImage')) { + if (!card) { return; } @@ -238,12 +234,10 @@ showOverlayTimeout = null; } - elem = parentWithAttribute(elem, 'data-id'); - showOverlayTimeout = setTimeout(function () { - onShowTimerExpired(elem); + onShowTimerExpired(card); - }, 1200); + }, 1000); } function preventTouchHover() { diff --git a/dashboard-ui/bower_components/emby-webcomponents/multiselect/multiselect.css b/dashboard-ui/bower_components/emby-webcomponents/multiselect/multiselect.css index 63acb6d5e6..f3b6d79b14 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/multiselect/multiselect.css +++ b/dashboard-ui/bower_components/emby-webcomponents/multiselect/multiselect.css @@ -14,10 +14,9 @@ top: 0; left: 0; right: 0; - height: 50px; background: #43A047; z-index: 1000; - padding: 0 .75em 0 .25em; + padding: .5em; display: flex; align-items: center; color: #fff; diff --git a/dashboard-ui/bower_components/emby-webcomponents/multiselect/multiselect.js b/dashboard-ui/bower_components/emby-webcomponents/multiselect/multiselect.js index 2c1c056178..7a932c186e 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/multiselect/multiselect.js +++ b/dashboard-ui/bower_components/emby-webcomponents/multiselect/multiselect.js @@ -1,4 +1,4 @@ -define(['browser', 'apphost', 'loading', 'connectionManager', 'globalize', 'embyRouter', 'css!./multiselect'], function (browser, appHost, loading, connectionManager, globalize, embyRouter) { +define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'globalize', 'embyRouter', 'css!./multiselect'], function (browser, appStorage, appHost, loading, connectionManager, globalize, embyRouter) { var selectedItems = []; var selectedElements = []; @@ -34,17 +34,17 @@ } } + var initCount = 0; function showTapHoldHelp(element) { - return; - var page = parentWithClass(element, 'page'); - - if (!page) { + if (initCount >= 15) { + // All done return; } - // Don't do this on the home page - if (page.classList.contains('homePage') || page.classList.contains('itemDetailPage') || page.classList.contains('liveTvPage')) { + initCount++; + + if (initCount < 15) { return; } @@ -55,9 +55,11 @@ appStorage.setItem("tapholdhelp", expectedValue); - Dashboard.alert({ - message: globalize.translate('TryMultiSelectMessage'), - title: globalize.translate('HeaderTryMultiSelect') + require(['alert'], function (alert) { + alert({ + text: globalize.translate('sharedcomponents#TryMultiSelectMessage'), + title: globalize.translate('sharedcomponents#TryMultiSelect') + }); }); } @@ -131,7 +133,7 @@ itemSelectionPanel = document.createElement('div'); itemSelectionPanel.classList.add('itemSelectionPanel'); - item.querySelector('.cardContent').appendChild(itemSelectionPanel); + item.querySelector('.cardContent,.cardBox').appendChild(itemSelectionPanel); var cssClass = 'chkItemSelect'; if (isChecked && !browser.firefox) { @@ -416,8 +418,7 @@ require(['alert'], function (alert) { alert({ - text: globalize.translate('sharedcomponents#PleaseSelectTwoItems'), - title: globalize.translate('sharedcomponents#Error') + text: globalize.translate('sharedcomponents#PleaseSelectTwoItems') }); }); return; diff --git a/dashboard-ui/bower_components/emby-webcomponents/scroller/smoothscroller.js b/dashboard-ui/bower_components/emby-webcomponents/scroller/smoothscroller.js index 2d14680fda..054049469a 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/scroller/smoothscroller.js +++ b/dashboard-ui/bower_components/emby-webcomponents/scroller/smoothscroller.js @@ -974,13 +974,13 @@ define(['browser', 'layoutManager', 'scrollStyles'], function (browser, layoutMa if (!transform) { if (o.horizontal) { - if (layoutManager.desktop && o.hiddenScroll === false) { + if (layoutManager.desktop) { slideeElement.classList.add('smoothScrollX'); } else { slideeElement.classList.add('hiddenScrollX'); } } else { - if (layoutManager.desktop && o.hiddenScroll === false) { + if (layoutManager.desktop) { slideeElement.classList.add('smoothScrollY'); } else { slideeElement.classList.add('hiddenScrollY'); @@ -990,9 +990,6 @@ define(['browser', 'layoutManager', 'scrollStyles'], function (browser, layoutMa slideeElement.style['will-change'] = 'transform'; } - // Scrolling navigation - scrollSource.addEventListener(wheelEvent, scrollHandler); - if (transform) { dragInitEventNames.forEach(function (eventName) { dragSourceElement.addEventListener(eventName, dragInitSlidee); @@ -1007,6 +1004,16 @@ define(['browser', 'layoutManager', 'scrollStyles'], function (browser, layoutMa passive: true }); } + + // Scrolling navigation + scrollSource.addEventListener(wheelEvent, scrollHandler); + + } else if (o.horizontal) { + + // Don't bind to mouse events with vertical scroll since the mouse wheel can handle this natively + + // Scrolling navigation + scrollSource.addEventListener(wheelEvent, scrollHandler); } // Mark instance as initialized diff --git a/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js b/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js index 56aeb0d7f0..5826915fae 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js +++ b/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js @@ -249,6 +249,19 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g editItem(item, serverId); }); } + + else if (action == 'playtrailer') { + getItem(target).then(playTrailer); + } + } + + function playTrailer(item) { + + var apiClient = connectionManager.getApiClient(item.ServerId); + + apiClient.getLocalTrailers(apiClient.getCurrentUserId(), item.Id).then(function (trailers) { + playbackManager.play({ items: trailers }); + }); } function editItem(item, serverId) { diff --git a/dashboard-ui/scripts/librarylist.js b/dashboard-ui/scripts/librarylist.js index 80acb79742..d11b6478f1 100644 --- a/dashboard-ui/scripts/librarylist.js +++ b/dashboard-ui/scripts/librarylist.js @@ -15,22 +15,6 @@ return false; } - function onCardClick(e) { - - var card = parentWithClass(e.target, 'card'); - - if (card) { - - var itemSelectionPanel = card.querySelector('.itemSelectionPanel'); - if (itemSelectionPanel) { - return onItemSelectionPanelClick(e, itemSelectionPanel); - } - else if (card.classList.contains('groupedCard')) { - return onGroupedCardClick(e, card); - } - } - } - function onGroupedCardClick(e, card) { var itemId = card.getAttribute('data-id'); @@ -73,25 +57,6 @@ return false; } - function parentWithClass(elem, className) { - - while (!elem.classList || !elem.classList.contains(className)) { - elem = elem.parentNode; - - if (!elem) { - return null; - } - } - - return elem; - } - - libraryBrowser.createCardMenus = function (curr, options) { - - curr.removeEventListener('click', onCardClick); - curr.addEventListener('click', onCardClick); - }; - function showSyncButtonsPerUser(page) { var apiClient = window.ApiClient; diff --git a/dashboard-ui/strings/en-US.json b/dashboard-ui/strings/en-US.json index ac576a7ed3..ea50b41d70 100644 --- a/dashboard-ui/strings/en-US.json +++ b/dashboard-ui/strings/en-US.json @@ -2279,8 +2279,6 @@ "TextPleaseEnterYourEmailAddressForSubscription": "Please enter your e-mail address.", "LoginDisclaimer": "Emby is designed to help you manage your personal media library, such as home videos and photos. Please see our terms of use. The use of any Emby software constitutes acceptance of these terms.", "TermsOfUse": "Terms of use", - "HeaderTryMultiSelect": "Try Multi-Select", - "TryMultiSelectMessage": "To edit multiple media items, just click and hold any poster and select the items you want to manage. Try it!", "NumLocationsValue": "{0} folders", "ButtonAddMediaLibrary": "Add Media Library", "ButtonManageFolders": "Manage folders",