diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index 4215d46d64..3328cd568f 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.384", - "_release": "1.4.384", + "version": "1.4.386", + "_release": "1.4.386", "_resolution": { "type": "version", - "tag": "1.4.384", - "commit": "33a70ba81ccaff31238d59704b18af9954a3628a" + "tag": "1.4.386", + "commit": "d7a42d3e191011d585f29c654d58409b853c5034" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.1", diff --git a/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js b/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js index be2d42b006..7ebb3cca97 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js +++ b/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js @@ -552,25 +552,6 @@ define(['browser'], function (browser) { maxLevel = '51'; } - if (browser.iOS) { - profile.ContainerProfiles.push({ - Type: 'Video', - Conditions: [ - { - Condition: 'NotEquals', - Property: 'HasAudioCodec', - Value: 'dca', - IsRequired: false - }, - { - Condition: 'NotEquals', - Property: 'HasAudioCodec', - Value: 'dts', - IsRequired: false - }] - }); - } - profile.CodecProfiles.push({ Type: 'Video', Codec: 'h264', diff --git a/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js b/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js index 0a32c1ef86..b92d051bb1 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js +++ b/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js @@ -813,7 +813,9 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana if (showMediaTitle) { - var name = options.showTitle === 'auto' && !item.IsFolder && item.MediaType === 'Photo' ? '' : itemHelper.getDisplayName(item); + var name = options.showTitle === 'auto' && !item.IsFolder && item.MediaType === 'Photo' ? '' : itemHelper.getDisplayName(item, { + includeParentInfo: options.includeParentInfoInTitle + }); lines.push(name); } diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.css b/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.css index 477d944c94..e86bf08dc0 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.css +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.css @@ -40,6 +40,18 @@ text-transform: uppercase; } +.emby-button-focusscale { + transition: transform 180ms ease-out !important; + -webkit-transform-origin: center center; + transform-origin: center center; +} + + .emby-button-focusscale:focus { + transform: scale(1.16); + z-index: 1; + box-shadow: 0 2px 4px rgba(0,0,0,0.1); + } + .emby-button > i { /* For non-fab buttons that have icons */ font-size: 1.36em; @@ -220,3 +232,14 @@ position: relative; z-index: 1; } + +.icon-button-focusscale { + transition: transform 180ms ease-out !important; + -webkit-transform-origin: center center; + transform-origin: center center; +} + + .icon-button-focusscale:focus { + transform: scale(1.3); + z-index: 1; + } diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.js b/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.js index 064c8ad39d..e9bc5685d1 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.js +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.js @@ -1,4 +1,4 @@ -define(['browser', 'dom', 'css!./emby-button', 'registerElement'], function (browser, dom) { +define(['browser', 'dom', 'layoutManager', 'css!./emby-button', 'registerElement'], function (browser, dom, layoutManager) { 'use strict'; var EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype); @@ -78,6 +78,10 @@ this.classList.add('emby-button-noflex'); } + if (layoutManager.tv) { + this.classList.add('emby-button-focusscale'); + } + if (enableAnimation()) { dom.addEventListener(this, 'keydown', onKeyDown, { passive: true diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-button/paper-icon-button-light.js b/dashboard-ui/bower_components/emby-webcomponents/emby-button/paper-icon-button-light.js index b70b9cb0e9..2204b894fb 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/emby-button/paper-icon-button-light.js +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-button/paper-icon-button-light.js @@ -1,4 +1,4 @@ -define(['browser', 'dom', 'css!./emby-button', 'registerElement'], function (browser, dom) { +define(['browser', 'dom', 'layoutManager', 'css!./emby-button', 'registerElement'], function (browser, dom, layoutManager) { 'use strict'; var EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype); @@ -61,6 +61,10 @@ this.classList.add('paper-icon-button-light'); + if (layoutManager.tv) { + this.classList.add('icon-button-focusscale'); + } + if (enableAnimation()) { dom.addEventListener(this, 'keydown', onKeyDown, { passive: true diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-tabs/emby-tabs.js b/dashboard-ui/bower_components/emby-webcomponents/emby-tabs/emby-tabs.js index 1962b08598..b1a3b5fc88 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/emby-tabs/emby-tabs.js +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-tabs/emby-tabs.js @@ -1,4 +1,4 @@ -define(['dom', 'scroller', 'browser', 'registerElement', 'css!./emby-tabs', 'scrollStyles'], function (dom, scroller, browser) { +define(['dom', 'scroller', 'browser', 'layoutManager', 'focusManager', 'registerElement', 'css!./emby-tabs', 'scrollStyles'], function (dom, scroller, browser, layoutManager, focusManager) { 'use strict'; var EmbyTabs = Object.create(HTMLDivElement.prototype); @@ -97,6 +97,23 @@ } } + function getFocusCallback(tabs, e) { + return function () { + onClick.call(tabs, e); + }; + } + + function onFocus(e) { + + if (layoutManager.tv) { + + if (this.focusTimeout) { + clearTimeout(this.focusTimeout); + } + this.focusTimeout = setTimeout(getFocusCallback(this, e), 700); + } + } + function onClick(e) { var tabs = this; @@ -204,14 +221,30 @@ return; } this.classList.add('emby-tabs'); + this.classList.add('focusable'); dom.addEventListener(this, 'click', onClick, { passive: true }); + dom.addEventListener(this, 'focus', onFocus, { + passive: true, + capture: true + }); initSelectionBar(this); }; + EmbyTabs.focus = function () { + + var selected = this.querySelector('.' + activeButtonClass); + + if (selected) { + focusManager.focus(selected); + } else { + focusManager.autoFocus(this); + } + }; + EmbyTabs.refresh = function () { if (this.scroller) { @@ -243,6 +276,10 @@ dom.removeEventListener(this, 'click', onClick, { passive: true }); + dom.removeEventListener(this, 'focus', onFocus, { + passive: true, + capture: true + }); this.selectionBar = null; }; diff --git a/dashboard-ui/bower_components/emby-webcomponents/focusmanager.js b/dashboard-ui/bower_components/emby-webcomponents/focusmanager.js index c7234809d6..4165f46576 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/focusmanager.js +++ b/dashboard-ui/bower_components/emby-webcomponents/focusmanager.js @@ -304,10 +304,12 @@ define(['dom'], function (dom) { var nearestElement = nearest[0].node; // See if there's a focusable container, and if so, send the focus command to that - var nearestElementFocusableParent = dom.parentWithClass(nearestElement, 'focusable'); - if (nearestElementFocusableParent && nearestElementFocusableParent !== nearestElement && activeElement) { - if (dom.parentWithClass(activeElement, 'focusable') !== nearestElementFocusableParent) { - nearestElement = nearestElementFocusableParent; + if (activeElement) { + var nearestElementFocusableParent = dom.parentWithClass(nearestElement, 'focusable'); + if (nearestElementFocusableParent && nearestElementFocusableParent !== nearestElement) { + if (focusableContainer !== nearestElementFocusableParent) { + nearestElement = nearestElementFocusableParent; + } } } focus(nearestElement); diff --git a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js index 85eb683fc8..69741d8d59 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js +++ b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js @@ -36,6 +36,18 @@ restartAutoRefresh(); }; + self.pause = function () { + stopAutoRefresh(); + }; + + self.resume = function (refreshData) { + if (refreshData) { + self.refresh(); + } else { + restartAutoRefresh(); + } + }; + self.destroy = function () { stopAutoRefresh(); @@ -493,7 +505,7 @@ timerAttributes += ' data-seriestimerid="' + program.SeriesTimerId + '"'; } - html += ' - @@ -35,7 +35,7 @@ ${Record} - diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index f85acefd0f..731c35f12c 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -1228,7 +1228,8 @@ lazy: true, showDetailsMenu: true, overlayPlayButton: true, - allowBottomPadding: !scrollX + allowBottomPadding: !scrollX, + includeParentInfoInTitle: false }); } } diff --git a/dashboard-ui/scripts/livetvitems.js b/dashboard-ui/scripts/livetvitems.js index f0e99ada44..0f4fbb789e 100644 --- a/dashboard-ui/scripts/livetvitems.js +++ b/dashboard-ui/scripts/livetvitems.js @@ -76,6 +76,7 @@ showChannelName: params.type != 'Recordings' && params.type != 'RecordingSeries', overlayMoreButton: !supportsImageAnalysis, showYear: query.IsMovie && params.type == 'Recordings', + showSeriesYear: params.type === 'RecordingSeries', coverImage: true, cardLayout: supportsImageAnalysis, vibrant: supportsImageAnalysis