diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index 480e8f3a08..bb119d5cba 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.369", - "_release": "1.4.369", + "version": "1.4.370", + "_release": "1.4.370", "_resolution": { "type": "version", - "tag": "1.4.369", - "commit": "ffc05de380954c16b3621824d3034dc2c1a5a1ee" + "tag": "1.4.370", + "commit": "13cf9a90d0c2a763e6d453e004f528136456062f" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.1", diff --git a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css index 52efbb2bba..cf2fff6dbd 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css +++ b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css @@ -441,25 +441,6 @@ opacity: .7; } -.visibleGuideScroller::-webkit-scrollbar { - width: 10px; - height: 10px; -} - -.visibleGuideScroller::-webkit-scrollbar-button:start:decrement, -.visibleGuideScroller::-webkit-scrollbar-button:end:increment { - display: none; -} - -.visibleGuideScroller::-webkit-scrollbar-track-piece { - background-color: #3b3b3b; -} - -.visibleGuideScroller::-webkit-scrollbar-thumb:vertical, .visibleGuideScroller::-webkit-scrollbar-thumb:horizontal { - -webkit-border-radius: 2px; - background: #888 no-repeat center; -} - .guideOptions { color: #eee; flex-shrink: 0; diff --git a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js index 25bd342899..9de47d0bda 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js +++ b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js @@ -903,9 +903,9 @@ context.innerHTML = globalize.translateDocument(template, 'sharedcomponents'); if (layoutManager.desktop) { - var visibleGuideScrollers = context.querySelectorAll('.guideScroller'); - for (var i = 0, length = visibleGuideScrollers.length; i < length; i++) { - visibleGuideScrollers[i].classList.add('visibleGuideScroller'); + var guideScrollers = context.querySelectorAll('.guideScroller'); + for (var i = 0, length = guideScrollers.length; i < length; i++) { + guideScrollers[i].classList.add('darkScroller'); } } diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js index 7c574d471e..e1bc10e555 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js +++ b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js @@ -51,7 +51,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter', }); } - if (item.CanDelete) { + if (item.CanDelete && options.deleteItem !== false) { if (item.Type === 'Playlist' || item.Type === 'BoxSet') { commands.push({ diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingfields.css b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingfields.css index c3e7cd04e3..3b56f3c651 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingfields.css +++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingfields.css @@ -5,7 +5,6 @@ .recordingButton { margin-left: 0; min-width: 10em; - font-size: 92%; } .recordingIcon { diff --git a/dashboard-ui/bower_components/emby-webcomponents/scrollstyles.css b/dashboard-ui/bower_components/emby-webcomponents/scrollstyles.css index 3be6d92dad..99aa0005ba 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/scrollstyles.css +++ b/dashboard-ui/bower_components/emby-webcomponents/scrollstyles.css @@ -33,3 +33,22 @@ width: 0 !important; display: none; } + +.darkScroller::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +.darkScroller::-webkit-scrollbar-button:start:decrement, +.darkScroller::-webkit-scrollbar-button:end:increment { + display: none; +} + +.darkScroller::-webkit-scrollbar-track-piece { + background-color: #3b3b3b; +} + +.darkScroller::-webkit-scrollbar-thumb:vertical, .darkScroller::-webkit-scrollbar-thumb:horizontal { + -webkit-border-radius: 2px; + background: #888 no-repeat center; +} diff --git a/dashboard-ui/bower_components/emby-webcomponents/sync/sync.js b/dashboard-ui/bower_components/emby-webcomponents/sync/sync.js index 12f8dd93c4..98356f3ff2 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/sync/sync.js +++ b/dashboard-ui/bower_components/emby-webcomponents/sync/sync.js @@ -135,6 +135,8 @@ var selectQuality = form.querySelector('#selectQuality'); if (selectQuality) { job.Quality = selectQuality.value; + + appSettings.set('sync-lastquality', job.Quality || ''); } var selectProfile = form.querySelector('#selectProfile'); @@ -590,6 +592,15 @@ }).join(''); + var lastQuality = appSettings.get('sync-lastquality'); + if (lastQuality && options.QualityOptions.filter(function (i) { + + return i.Id === lastQuality; + + }).length) { + selectQuality.value = lastQuality; + } + selectQuality.dispatchEvent(new CustomEvent('change', { bubbles: true })); diff --git a/dashboard-ui/css/dashboard.css b/dashboard-ui/css/dashboard.css index 487116c344..272f9abb9f 100644 --- a/dashboard-ui/css/dashboard.css +++ b/dashboard-ui/css/dashboard.css @@ -616,3 +616,26 @@ div[data-role="controlgroup"] a.ui-btn-active { .supporterMembershipDisabled .tabSupporterMembership { display: none; } + +a[data-role='button'] { + -webkit-font-smoothing: antialiased; + -webkit-user-select: none; + background-clip: padding-box; + border-radius: .3125em; + border: 1px solid #ddd !important; + color: rgb(51, 51, 51) !important; + cursor: pointer !important; + font-family: inherit !important; + font-size: inherit !important; + font-weight: 500 !important; + margin: 0 .25em !important; + display: inline-block; + padding: .8em 1em; + text-align: center; + text-decoration: none !important; + background: #f6f6f6 !important; + font-size: 16px; + -webkit-box-shadow: 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.15) /*{global-box-shadow-color}*/; + -moz-box-shadow: 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.15) /*{global-box-shadow-color}*/; + box-shadow: 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.15) /*{global-box-shadow-color}*/; +} diff --git a/dashboard-ui/css/librarybrowser.css b/dashboard-ui/css/librarybrowser.css index 8a96ee82dc..984964081b 100644 --- a/dashboard-ui/css/librarybrowser.css +++ b/dashboard-ui/css/librarybrowser.css @@ -12,7 +12,7 @@ } .background-theme-b .backgroundContainer.withBackdrop { - background-color: rgba(6, 6,6, .76); + background-color: rgba(6, 6,6, .72); } .ui-body-b { @@ -158,8 +158,6 @@ } .detailPageContent { - margin: 3em auto 0; - padding: 0; border-spacing: 0; border-collapse: collapse; } @@ -355,8 +353,8 @@ span.itemCommunityRating:not(:empty) + .userDataIcons { .detailImageContainer { position: absolute; - top: -130px; - left: 3%; + top: -90px; + left: 5%; } .itemDetailImage { @@ -400,6 +398,7 @@ span.itemCommunityRating:not(:empty) + .userDataIcons { position: absolute; right: 5%; background-color: #52B54B !important; + z-index: 1; } .emby-button.btnFloatingRecord { @@ -500,6 +499,10 @@ span.itemCommunityRating:not(:empty) + .userDataIcons { margin-right: .5em; } + .mainDetailButtons.hide + .recordingFields { + margin-top: 1.5em !important; + } + .detailImageProgressContainer { position: absolute; bottom: 4px; @@ -575,18 +578,18 @@ span.itemCommunityRating:not(:empty) + .userDataIcons { } .detailPageContent { - max-width: 94%; + padding: 3em 3% 0; } @media all and (min-width: 750px) { .detailPageContent { - max-width: 94%; + padding: 3em 3% 0; } } @media all and (min-width: 1200px) { .detailPageContent { - max-width: 90%; + padding: 3em 5% 0; } } diff --git a/dashboard-ui/itemdetails.html b/dashboard-ui/itemdetails.html index 46f8cbaa3e..86b1303d08 100644 --- a/dashboard-ui/itemdetails.html +++ b/dashboard-ui/itemdetails.html @@ -17,7 +17,7 @@
@@ -52,9 +52,10 @@  
+ -
+
diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index 8d2e04e82e..d2ab686d81 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -75,7 +75,8 @@ positionTo: button, cancelTimer: false, record: false, - editImages: false + editImages: false, + deleteItem: item.IsFolder === true }; if (appHost.supports('sync')) { @@ -116,9 +117,13 @@ setInitialCollapsibleState(page, item, context, user); renderDetails(page, item, context); - backdrop.setBackdrops([item], { - blur: 32 - }, false); + if (dom.getWindowSize().innerWidth >= 800) { + backdrop.setBackdrops([item], { + blur: 30 + }, false); + } else { + backdrop.clear(); + } LibraryBrowser.renderDetailPageBackdrop(page, item, imageLoader); @@ -145,12 +150,22 @@ hideAll(page, 'btnPlay'); } + var hasAnyButton = canPlay; + if ((item.LocalTrailerCount || (item.RemoteTrailers && item.RemoteTrailers.length)) && item.PlayAccess == 'Full') { hideAll(page, 'btnPlayTrailer', true); + hasAnyButton = true; } else { hideAll(page, 'btnPlayTrailer'); } + if (item.CanDelete && !item.IsFolder) { + hideAll(page, 'btnDeleteItem', true); + hasAnyButton = true; + } else { + hideAll(page, 'btnDeleteItem'); + } + if (itemHelper.canSync(user, item)) { if (appHost.supports('sync')) { hideAll(page, 'syncLocalContainer', true); @@ -165,6 +180,12 @@ hideAll(page, 'syncLocalContainer'); } + if (hasAnyButton || item.Type !== 'Program') { + hideAll(page, 'mainDetailButtons', true); + } else { + hideAll(page, 'mainDetailButtons'); + } + showRecordingFields(page, item, user); var groupedVersions = (item.MediaSources || []).filter(function (g) { @@ -228,34 +249,6 @@ } }); - //if (item.LocationType == "Offline") { - - // page.querySelector('.offlineIndicator').classList.remove('hide'); - //} - //else { - // page.querySelector('.offlineIndicator').classList.add('hide'); - //} - - var isMissingEpisode = false; - - if (item.LocationType == "Virtual" && item.Type == "Episode") { - try { - if (item.PremiereDate && (new Date().getTime() >= datetime.parseISO8601Date(item.PremiereDate, true).getTime())) { - isMissingEpisode = true; - } - } catch (err) { - - } - } - - //if (isMissingEpisode) { - - // page.querySelector('.missingIndicator').classList.remove('hide'); - //} - //else { - // page.querySelector('.missingIndicator').classList.add('hide'); - //} - setPeopleHeader(page, item); page.dispatchEvent(new CustomEvent("displayingitem", { @@ -402,11 +395,64 @@ else return "#" + (0x100000000 + (f[3] > -1 && t[3] > -1 ? r(((t[3] - f[3]) * p + f[3]) * 255) : t[3] > -1 ? r(t[3] * 255) : f[3] > -1 ? r(f[3] * 255) : 255) * 0x1000000 + r((t[0] - f[0]) * p + f[0]) * 0x10000 + r((t[1] - f[1]) * p + f[1]) * 0x100 + r((t[2] - f[2]) * p + f[2])).toString(16).slice(f[3] > -1 || t[3] > -1 ? 1 : 3); } + function loadSwatch(page, item) { + + var imageTags = item.ImageTags || {}; + + if (item.PrimaryImageTag) { + imageTags.Primary = item.PrimaryImageTag; + } + + var url; + var imageHeight = 300; + + if (item.SeriesId && item.SeriesPrimaryImageTag) { + + url = ApiClient.getScaledImageUrl(item.SeriesId, { + type: "Primary", + maxHeight: imageHeight, + tag: item.SeriesPrimaryImageTag + }); + } + else if (imageTags.Primary) { + + url = ApiClient.getScaledImageUrl(item.Id, { + type: "Primary", + maxHeight: imageHeight, + tag: item.ImageTags.Primary + }); + } + + if (!url) { + return; + } + + var img = new Image(); + img.onload = function () { + + imageLoader.getVibrantInfoFromElement(img, url).then(function (vibrantInfo) { + + vibrantInfo = vibrantInfo.split('|'); + var detailPageContent = page.querySelector('.detailPageContent'); + var detailPagePrimaryContainer = page.querySelector('.detailPagePrimaryContainer'); + + detailPageContent.style.color = vibrantInfo[1]; + + detailPagePrimaryContainer.style.backgroundColor = vibrantInfo[0]; + + }); + }; + + img.src = url; + } + function renderImage(page, item, user) { var container = page.querySelector('.detailImageContainer'); LibraryBrowser.renderDetailImage(container, item, user.Policy.IsAdministrator && item.MediaType != 'Photo', null, imageLoader, indicators); + + //loadSwatch(page, item); } function refreshDetailImageUserData(elem, item) { @@ -1105,6 +1151,7 @@ var isList = false; var scrollClass = 'hiddenScrollX'; + var childrenItemsContainer = page.querySelector('.childrenItemsContainer'); if (item.Type == "MusicAlbum") { @@ -1137,6 +1184,10 @@ } else if (item.Type == "Season" || item.Type == "Episode") { + if (item.Type === 'Episode') { + childrenItemsContainer.classList.add('darkScroller'); + } + scrollX = item.Type == "Episode"; scrollClass = 'smoothScrollX'; @@ -1164,26 +1215,25 @@ }); } - var elem = page.querySelector('.childrenItemsContainer'); if (scrollX) { - elem.classList.add(scrollClass); - elem.classList.remove('vertical-wrap'); - elem.classList.remove('vertical-list'); + childrenItemsContainer.classList.add(scrollClass); + childrenItemsContainer.classList.remove('vertical-wrap'); + childrenItemsContainer.classList.remove('vertical-list'); } else { - elem.classList.remove('hiddenScrollX'); - elem.classList.remove('smoothScrollX'); + childrenItemsContainer.classList.remove('hiddenScrollX'); + childrenItemsContainer.classList.remove('smoothScrollX'); if (isList) { - elem.classList.add('vertical-list'); - elem.classList.remove('vertical-wrap'); + childrenItemsContainer.classList.add('vertical-list'); + childrenItemsContainer.classList.remove('vertical-wrap'); } else { - elem.classList.add('vertical-wrap'); - elem.classList.remove('vertical-list'); + childrenItemsContainer.classList.add('vertical-wrap'); + childrenItemsContainer.classList.remove('vertical-list'); } } - elem.innerHTML = html; - imageLoader.lazyChildren(elem); + childrenItemsContainer.innerHTML = html; + imageLoader.lazyChildren(childrenItemsContainer); if (item.Type == "BoxSet") { @@ -2087,6 +2137,42 @@ playCurrentItem(this); } + function onDeleteClick() { + + var item = currentItem; + var itemId = item.Id; + var parentId = item.ParentId; + var serverId = item.ServerId; + + var msg = globalize.translate('sharedcomponents#ConfirmDeleteItem'); + var title = globalize.translate('sharedcomponents#HeaderDeleteItem'); + var apiClient = ApiClient; + + require(['confirm'], function (confirm) { + + confirm({ + + title: title, + text: msg, + confirmText: globalize.translate('sharedcomponents#Delete'), + primary: 'cancel' + + }).then(function () { + + apiClient.deleteItem(itemId).then(function () { + + if (parentId) { + Emby.Page.showItem(parentId, serverId); + } else { + Emby.Page.goHome(); + } + }); + + }); + + }); + } + return function (view, params) { function resetSyncStatus() { @@ -2161,6 +2247,11 @@ elems[i].addEventListener('click', onPlayTrailerClick); } + elems = view.querySelectorAll('.btnDeleteItem'); + for (i = 0, length = elems.length; i < length; i++) { + elems[i].addEventListener('click', onDeleteClick); + } + view.querySelector('.btnSplitVersions').addEventListener('click', function () { splitVersions(view, params); diff --git a/dashboard-ui/strings/en-US.json b/dashboard-ui/strings/en-US.json index 6be4fd3014..f102e8b76e 100644 --- a/dashboard-ui/strings/en-US.json +++ b/dashboard-ui/strings/en-US.json @@ -24,6 +24,7 @@ "LabelAddConnectSupporterHelp": "To add a user who isn't listed, you'll need to first link their account to Emby Connect from their user profile page.", "LabelPinCode": "Pin code:", "OptionHideWatchedContentFromLatestMedia": "Hide watched content from latest media", + "DeleteMedia": "Delete media", "HeaderSync": "Sync", "ButtonOk": "Ok", "ButtonCancel": "Cancel",