diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index 56d636822..823318aad 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 dc3570303..764f69c4f 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 0346d41bc..df3da7a0a 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 3786543ce..cae70cf2b 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 603642ed2..e82e85bdc 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 63acb6d5e..f3b6d79b1 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 2c1c05617..7a932c186 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 2d14680fd..054049469 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 56aeb0d7f..5826915fa 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 80acb7974..d11b6478f 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 ac576a7ed..ea50b41d7 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",