diff --git a/dashboard-ui/css/card.css b/dashboard-ui/css/card.css index 41a4fac79a..e8f245d55f 100644 --- a/dashboard-ui/css/card.css +++ b/dashboard-ui/css/card.css @@ -246,6 +246,21 @@ background-position: center center; } +.iconCardImage { + text-align: center; + position: relative; +} + +.cardImage .fa { + color: rgb(255, 255, 255); + position: absolute; + left: 0; + right: 0; + font-size: 50px; + margin: auto; + top: 25%; +} + .bannerCard { width: 100%; } diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index dca882b45d..40e862b53f 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -1116,54 +1116,52 @@ squareSize = posterInfo.smallSquareSize; } + var dateText; + for (var i = 0, length = items.length; i < length; i++) { var item = items[i]; + dateText = null; + primaryImageAspectRatio = LibraryBrowser.getAveragePrimaryImageAspectRatio([item]); if (options.showPremiereDateIndex) { - var futureDateText; - if (item.PremiereDate) { try { - futureDateText = LibraryBrowser.getFutureDateText(parseISO8601Date(item.PremiereDate, { toLocal: true }), true); + dateText = LibraryBrowser.getFutureDateText(parseISO8601Date(item.PremiereDate, { toLocal: true }), true); } catch (err) { - } } - var val = futureDateText || Globalize.translate('HeaderUnknownDate'); + var newIndexValue = dateText || Globalize.translate('HeaderUnknownDate'); - if (val != currentIndexValue) { + if (newIndexValue != currentIndexValue) { - html += '

' + val + '

'; - currentIndexValue = val; + html += '

' + newIndexValue + '

'; + currentIndexValue = newIndexValue; } } else if (options.showStartDateIndex) { - var futureDateText; - if (item.StartDate) { try { - futureDateText = LibraryBrowser.getFutureDateText(parseISO8601Date(item.StartDate, { toLocal: true }), true); + dateText = LibraryBrowser.getFutureDateText(parseISO8601Date(item.StartDate, { toLocal: true }), true); } catch (err) { - } } - var val = futureDateText || Globalize.translate('HeaderUnknownDate'); + var newIndexValue = dateText || Globalize.translate('HeaderUnknownDate'); - if (val != currentIndexValue) { + if (newIndexValue != currentIndexValue) { - html += '

' + val + '

'; - currentIndexValue = val; + html += '

' + newIndexValue + '

'; + currentIndexValue = newIndexValue; } } else if (options.timeline) { var year = item.ProductionYear || Globalize.translate('HeaderUnknownYear'); @@ -1175,343 +1173,359 @@ } } - var imgUrl = null; - var background = null; - var width = null; - var height = null; + html += LibraryBrowser.getPosterViewItemHtml(item, i, options, primaryImageAspectRatio, thumbWidth, posterWidth, squareSize, bannerWidth); + } - var forceName = false; + return html; + }, - var enableImageEnhancers = options.enableImageEnhancers !== false; - - if (options.autoThumb && item.ImageTags && item.ImageTags.Primary && item.PrimaryImageAspectRatio && item.PrimaryImageAspectRatio >= 1.5) { - - width = posterWidth; - height = primaryImageAspectRatio ? Math.round(posterWidth / primaryImageAspectRatio) : null; - - imgUrl = ApiClient.getImageUrl(item.Id, { - type: "Primary", - height: height, - width: width, - tag: item.ImageTags.Primary, - enableImageEnhancers: enableImageEnhancers - }); - - } else if (options.autoThumb && item.ImageTags && item.ImageTags.Thumb) { - - imgUrl = ApiClient.getScaledImageUrl(item.Id, { - type: "Thumb", - maxWidth: thumbWidth, - tag: item.ImageTags.Thumb, - enableImageEnhancers: enableImageEnhancers - }); - - } else if (options.preferBackdrop && item.BackdropImageTags && item.BackdropImageTags.length) { - - imgUrl = ApiClient.getScaledImageUrl(item.Id, { - type: "Backdrop", - maxWidth: thumbWidth, - tag: item.BackdropImageTags[0], - enableImageEnhancers: enableImageEnhancers - }); - - } else if (options.preferThumb && item.ImageTags && item.ImageTags.Thumb) { - - imgUrl = ApiClient.getScaledImageUrl(item.Id, { - type: "Thumb", - maxWidth: thumbWidth, - tag: item.ImageTags.Thumb, - enableImageEnhancers: enableImageEnhancers - }); - - } else if (options.preferBanner && item.ImageTags && item.ImageTags.Banner) { - - imgUrl = ApiClient.getScaledImageUrl(item.Id, { - type: "Banner", - maxWidth: bannerWidth, - tag: item.ImageTags.Banner, - enableImageEnhancers: enableImageEnhancers - }); - - } else if (options.preferThumb && item.SeriesThumbImageTag && options.inheritThumb !== false) { - - imgUrl = ApiClient.getScaledImageUrl(item.SeriesId, { - type: "Thumb", - maxWidth: thumbWidth, - tag: item.SeriesThumbImageTag, - enableImageEnhancers: enableImageEnhancers - }); - - } else if (options.preferThumb && item.ParentThumbItemId && options.inheritThumb !== false) { - - imgUrl = ApiClient.getThumbImageUrl(item.ParentThumbItemId, { - type: "Thumb", - maxWidth: thumbWidth, - enableImageEnhancers: enableImageEnhancers - }); - - } else if (options.preferThumb && item.BackdropImageTags && item.BackdropImageTags.length) { - - imgUrl = ApiClient.getScaledImageUrl(item.Id, { - type: "Backdrop", - maxWidth: thumbWidth, - tag: item.BackdropImageTags[0], - enableImageEnhancers: enableImageEnhancers - }); - - forceName = true; - - } else if (item.ImageTags && item.ImageTags.Primary) { - - width = posterWidth; - height = primaryImageAspectRatio ? Math.round(posterWidth / primaryImageAspectRatio) : null; - - imgUrl = ApiClient.getImageUrl(item.Id, { - type: "Primary", - height: height, - width: width, - tag: item.ImageTags.Primary, - enableImageEnhancers: enableImageEnhancers - }); - - } - else if (item.ParentPrimaryImageTag) { - - imgUrl = ApiClient.getImageUrl(item.ParentPrimaryImageItemId, { - type: "Primary", - width: posterWidth, - tag: item.ParentPrimaryImageTag, - enableImageEnhancers: enableImageEnhancers - }); - } - else if (item.AlbumId && item.AlbumPrimaryImageTag) { - - height = squareSize; - width = primaryImageAspectRatio ? Math.round(height * primaryImageAspectRatio) : null; - - imgUrl = ApiClient.getScaledImageUrl(item.AlbumId, { - type: "Primary", - height: height, - width: width, - tag: item.AlbumPrimaryImageTag, - enableImageEnhancers: enableImageEnhancers - }); - - } - else if (item.Type == 'Season' && item.ImageTags && item.ImageTags.Thumb) { - - imgUrl = ApiClient.getScaledImageUrl(item.Id, { - type: "Thumb", - maxWidth: thumbWidth, - tag: item.ImageTags.Thumb, - enableImageEnhancers: enableImageEnhancers - }); - - } - else if (item.BackdropImageTags && item.BackdropImageTags.length) { - - imgUrl = ApiClient.getScaledImageUrl(item.Id, { - type: "Backdrop", - maxWidth: thumbWidth, - tag: item.BackdropImageTags[0], - enableImageEnhancers: enableImageEnhancers - }); - - } else if (item.ImageTags && item.ImageTags.Thumb) { - - imgUrl = ApiClient.getScaledImageUrl(item.Id, { - type: "Thumb", - maxWidth: thumbWidth, - tag: item.ImageTags.Thumb, - enableImageEnhancers: enableImageEnhancers - }); - - } else if (item.SeriesThumbImageTag) { - - imgUrl = ApiClient.getScaledImageUrl(item.SeriesId, { - type: "Thumb", - maxWidth: thumbWidth, - tag: item.SeriesThumbImageTag, - enableImageEnhancers: enableImageEnhancers - }); - - } else if (item.ParentThumbItemId) { - - imgUrl = ApiClient.getThumbImageUrl(item, { - type: "Thumb", - maxWidth: thumbWidth, - enableImageEnhancers: enableImageEnhancers - }); - - } else if (item.MediaType == "Audio" || item.Type == "MusicAlbum" || item.Type == "MusicArtist") { - - if (item.Name && options.showTitle) { - imgUrl = 'css/images/items/list/audio.png'; - } - background = defaultBackground; - - } else if (item.Type == "Recording" || item.Type == "Program" || item.Type == "TvChannel") { - - if (item.Name && options.showTitle) { - imgUrl = 'css/images/items/list/collection.png'; - } - - background = defaultBackground; - } else if (item.MediaType == "Video" || item.Type == "Season" || item.Type == "Series") { - - if (item.Name && options.showTitle) { - imgUrl = 'css/images/items/list/video.png'; - } - background = defaultBackground; - } else if (item.Type == "Person") { - - if (item.Name && options.showTitle) { - imgUrl = 'css/images/items/list/person.png'; - } - background = defaultBackground; - } else { - if (item.Name && options.showTitle) { - imgUrl = 'css/images/items/list/collection.png'; - } - background = defaultBackground; - } - - var cssClass = "card"; - - if (options.transparent !== false) { - cssClass += " transparentCard"; - } - - cssClass += ' ' + options.shape + 'Card'; - - var mediaSourceCount = item.MediaSourceCount || 1; - - var href = options.linkItem === false ? '#' : LibraryBrowser.getHref(item, options.context); - - if (item.UserData) { - cssClass += ' ' + LibraryBrowser.getUserDataCssClass(item.UserData.Key); - } - - if (options.showChildCountIndicator && item.ChildCount) { - cssClass += ' groupedCard'; - } - - if (options.showTitle && !options.overlayText) { - cssClass += ' bottomPaddedCard'; - } - - var dataAttributes = LibraryBrowser.getItemDataAttributes(item, options, i); - - var defaultAction = options.defaultAction; - if (defaultAction == 'play' || defaultAction == 'playallfromhere') { - if (item.PlayAccess != 'Full') { - defaultAction = null; - } - } - var defaultActionAttribute = defaultAction ? (' data-action="' + defaultAction + '"') : ''; - - // card - html += ''; - - var style = ""; - - if (imgUrl && !options.lazy) { - style += 'background-image:url(\'' + imgUrl + '\');'; - } - - if (background) { - style += "background-color:" + background + ";"; - } - - var imageCssClass = 'cardImage'; - if (options.coverImage) { - imageCssClass += " coveredCardImage"; - } - if (options.centerImage) { - imageCssClass += " centeredCardImage"; - } - - var dataSrc = ""; - - if (options.lazy && imgUrl) { - imageCssClass += " lazy"; - dataSrc = ' data-src="' + imgUrl + '"'; - } - - var cardboxCssClass = 'cardBox'; - - if (options.cardLayout) { - cardboxCssClass += ' visualCardBox'; - } - html += '
'; - html += ''; - - if (!options.overlayText && !footerOverlayed) { - html += LibraryBrowser.getCardFooterText(item, options, imgUrl, forceName, 'cardFooter outerCardFooter', progressHtml); - } - - // cardBox - html += '
'; - - // card - html += ""; + getPosterViewItemHtml: function (item, index, options, primaryImageAspectRatio, thumbWidth, posterWidth, squareSize, bannerWidth) { + + var html = ''; + var imgUrl = null; + var icon; + var background = null; + var width = null; + var height = null; + + var forceName = false; + + var enableImageEnhancers = options.enableImageEnhancers !== false; + + if (options.autoThumb && item.ImageTags && item.ImageTags.Primary && item.PrimaryImageAspectRatio && item.PrimaryImageAspectRatio >= 1.5) { + + width = posterWidth; + height = primaryImageAspectRatio ? Math.round(posterWidth / primaryImageAspectRatio) : null; + + imgUrl = ApiClient.getImageUrl(item.Id, { + type: "Primary", + height: height, + width: width, + tag: item.ImageTags.Primary, + enableImageEnhancers: enableImageEnhancers + }); + + } else if (options.autoThumb && item.ImageTags && item.ImageTags.Thumb) { + + imgUrl = ApiClient.getScaledImageUrl(item.Id, { + type: "Thumb", + maxWidth: thumbWidth, + tag: item.ImageTags.Thumb, + enableImageEnhancers: enableImageEnhancers + }); + + } else if (options.preferBackdrop && item.BackdropImageTags && item.BackdropImageTags.length) { + + imgUrl = ApiClient.getScaledImageUrl(item.Id, { + type: "Backdrop", + maxWidth: thumbWidth, + tag: item.BackdropImageTags[0], + enableImageEnhancers: enableImageEnhancers + }); + + } else if (options.preferThumb && item.ImageTags && item.ImageTags.Thumb) { + + imgUrl = ApiClient.getScaledImageUrl(item.Id, { + type: "Thumb", + maxWidth: thumbWidth, + tag: item.ImageTags.Thumb, + enableImageEnhancers: enableImageEnhancers + }); + + } else if (options.preferBanner && item.ImageTags && item.ImageTags.Banner) { + + imgUrl = ApiClient.getScaledImageUrl(item.Id, { + type: "Banner", + maxWidth: bannerWidth, + tag: item.ImageTags.Banner, + enableImageEnhancers: enableImageEnhancers + }); + + } else if (options.preferThumb && item.SeriesThumbImageTag && options.inheritThumb !== false) { + + imgUrl = ApiClient.getScaledImageUrl(item.SeriesId, { + type: "Thumb", + maxWidth: thumbWidth, + tag: item.SeriesThumbImageTag, + enableImageEnhancers: enableImageEnhancers + }); + + } else if (options.preferThumb && item.ParentThumbItemId && options.inheritThumb !== false) { + + imgUrl = ApiClient.getThumbImageUrl(item.ParentThumbItemId, { + type: "Thumb", + maxWidth: thumbWidth, + enableImageEnhancers: enableImageEnhancers + }); + + } else if (options.preferThumb && item.BackdropImageTags && item.BackdropImageTags.length) { + + imgUrl = ApiClient.getScaledImageUrl(item.Id, { + type: "Backdrop", + maxWidth: thumbWidth, + tag: item.BackdropImageTags[0], + enableImageEnhancers: enableImageEnhancers + }); + + forceName = true; + + } else if (item.ImageTags && item.ImageTags.Primary) { + + width = posterWidth; + height = primaryImageAspectRatio ? Math.round(posterWidth / primaryImageAspectRatio) : null; + + imgUrl = ApiClient.getImageUrl(item.Id, { + type: "Primary", + height: height, + width: width, + tag: item.ImageTags.Primary, + enableImageEnhancers: enableImageEnhancers + }); } + else if (item.ParentPrimaryImageTag) { + + imgUrl = ApiClient.getImageUrl(item.ParentPrimaryImageItemId, { + type: "Primary", + width: posterWidth, + tag: item.ParentPrimaryImageTag, + enableImageEnhancers: enableImageEnhancers + }); + } + else if (item.AlbumId && item.AlbumPrimaryImageTag) { + + height = squareSize; + width = primaryImageAspectRatio ? Math.round(height * primaryImageAspectRatio) : null; + + imgUrl = ApiClient.getScaledImageUrl(item.AlbumId, { + type: "Primary", + height: height, + width: width, + tag: item.AlbumPrimaryImageTag, + enableImageEnhancers: enableImageEnhancers + }); + + } + else if (item.Type == 'Season' && item.ImageTags && item.ImageTags.Thumb) { + + imgUrl = ApiClient.getScaledImageUrl(item.Id, { + type: "Thumb", + maxWidth: thumbWidth, + tag: item.ImageTags.Thumb, + enableImageEnhancers: enableImageEnhancers + }); + + } + else if (item.BackdropImageTags && item.BackdropImageTags.length) { + + imgUrl = ApiClient.getScaledImageUrl(item.Id, { + type: "Backdrop", + maxWidth: thumbWidth, + tag: item.BackdropImageTags[0], + enableImageEnhancers: enableImageEnhancers + }); + + } else if (item.ImageTags && item.ImageTags.Thumb) { + + imgUrl = ApiClient.getScaledImageUrl(item.Id, { + type: "Thumb", + maxWidth: thumbWidth, + tag: item.ImageTags.Thumb, + enableImageEnhancers: enableImageEnhancers + }); + + } else if (item.SeriesThumbImageTag) { + + imgUrl = ApiClient.getScaledImageUrl(item.SeriesId, { + type: "Thumb", + maxWidth: thumbWidth, + tag: item.SeriesThumbImageTag, + enableImageEnhancers: enableImageEnhancers + }); + + } else if (item.ParentThumbItemId) { + + imgUrl = ApiClient.getThumbImageUrl(item, { + type: "Thumb", + maxWidth: thumbWidth, + enableImageEnhancers: enableImageEnhancers + }); + + } else if (item.MediaType == "Audio" || item.Type == "MusicAlbum" || item.Type == "MusicArtist") { + + if (item.Name && options.showTitle) { + icon = 'fa-music'; + } + background = defaultBackground; + + } else if (item.Type == "Recording" || item.Type == "Program" || item.Type == "TvChannel") { + + if (item.Name && options.showTitle) { + icon = 'fa-folder-open'; + } + + background = defaultBackground; + } else if (item.MediaType == "Video" || item.Type == "Season" || item.Type == "Series") { + + if (item.Name && options.showTitle) { + icon = 'fa-video-camera'; + } + background = defaultBackground; + } else if (item.Type == "Person") { + + if (item.Name && options.showTitle) { + icon = 'fa-user'; + } + background = defaultBackground; + } else { + if (item.Name && options.showTitle) { + icon = 'fa-folder-open'; + } + background = defaultBackground; + } + + var cssClass = "card"; + + if (options.transparent !== false) { + cssClass += " transparentCard"; + } + + cssClass += ' ' + options.shape + 'Card'; + + var mediaSourceCount = item.MediaSourceCount || 1; + + var href = options.linkItem === false ? '#' : LibraryBrowser.getHref(item, options.context); + + if (item.UserData) { + cssClass += ' ' + LibraryBrowser.getUserDataCssClass(item.UserData.Key); + } + + if (options.showChildCountIndicator && item.ChildCount) { + cssClass += ' groupedCard'; + } + + if (options.showTitle && !options.overlayText) { + cssClass += ' bottomPaddedCard'; + } + + var dataAttributes = LibraryBrowser.getItemDataAttributes(item, options, index); + + var defaultAction = options.defaultAction; + if (defaultAction == 'play' || defaultAction == 'playallfromhere') { + if (item.PlayAccess != 'Full') { + defaultAction = null; + } + } + var defaultActionAttribute = defaultAction ? (' data-action="' + defaultAction + '"') : ''; + + // card + html += ''; + + var style = ""; + + if (imgUrl && !options.lazy) { + style += 'background-image:url(\'' + imgUrl + '\');'; + } + + if (background) { + style += "background-color:" + background + ";"; + } + + var imageCssClass = 'cardImage'; + + if (icon) { + imageCssClass += " iconCardImage"; + } + if (options.coverImage) { + imageCssClass += " coveredCardImage"; + } + if (options.centerImage) { + imageCssClass += " centeredCardImage"; + } + + var dataSrc = ""; + + if (options.lazy && imgUrl) { + imageCssClass += " lazy"; + dataSrc = ' data-src="' + imgUrl + '"'; + } + + var cardboxCssClass = 'cardBox'; + + if (options.cardLayout) { + cardboxCssClass += ' visualCardBox'; + } + html += '
'; + html += ''; + + if (!options.overlayText && !footerOverlayed) { + html += LibraryBrowser.getCardFooterText(item, options, imgUrl, forceName, 'cardFooter outerCardFooter', progressHtml); + } + + // cardBox + html += '
'; + + // card + html += ""; return html; }, diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js index 6dfe34fa08..b464e18e82 100644 --- a/dashboard-ui/scripts/librarymenu.js +++ b/dashboard-ui/scripts/librarymenu.js @@ -317,10 +317,12 @@ html += Globalize.translate('ButtonHome'); html += ''; - - html += '
'; } + html += '' + Globalize.translate('ButtonRemote') + ''; + + html += '
'; + html += getViewsHtml(); html += ''; diff --git a/dashboard-ui/scripts/mypreferencesdisplay.js b/dashboard-ui/scripts/mypreferencesdisplay.js index 74a8fb8099..bb213c2dc8 100644 --- a/dashboard-ui/scripts/mypreferencesdisplay.js +++ b/dashboard-ui/scripts/mypreferencesdisplay.js @@ -13,7 +13,9 @@ currentHtml += ''; - var isChecked = user.Configuration.ExcludeFoldersFromGrouping.indexOf(i.Id) == -1; + var isChecked = (user.Configuration.ExcludeFoldersFromGrouping != null && user.Configuration.ExcludeFoldersFromGrouping.indexOf(i.Id) == -1) || + user.Configuration.GroupedFolders.indexOf(i.Id) != -1; + var checkedHtml = isChecked ? ' checked="checked"' : ''; currentHtml += ''; @@ -209,7 +211,9 @@ return i.getAttribute('data-folderid'); }); - user.Configuration.ExcludeFoldersFromGrouping = $(".chkGroupFolder:not(:checked)", page).get().map(function (i) { + user.Configuration.ExcludeFoldersFromGrouping = null; + + user.Configuration.GroupedFolders = $(".chkGroupFolder:checked", page).get().map(function (i) { return i.getAttribute('data-folderid'); }); diff --git a/dashboard-ui/scripts/nowplayingpage.js b/dashboard-ui/scripts/nowplayingpage.js index 90e85a01c1..9a0f89cb8b 100644 --- a/dashboard-ui/scripts/nowplayingpage.js +++ b/dashboard-ui/scripts/nowplayingpage.js @@ -615,12 +615,14 @@ function showIntro() { - if (store.getItem('remotecontrolswipedown') != '1') { + var expected = '2'; + + if (store.getItem('remotecontrolswipedown') != expected) { Dashboard.alert({ message: Globalize.translate('MessageSwipeDownOnRemoteControl'), title: Globalize.translate('HeaderAlert') }); - store.setItem('remotecontrolswipedown', '1'); + store.setItem('remotecontrolswipedown', expected); } } diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 8a5be3b93d..d8df42335e 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -1489,7 +1489,6 @@ var AppInfo = {}; if (isCordova) { AppInfo.enableBottomTabs = true; - AppInfo.resetOnLibraryChange = true; } } else { @@ -1499,7 +1498,7 @@ var AppInfo = {}; } } - if (!AppInfo.hasLowImageBandwidth) { + if (!AppInfo.hasLowImageBandwidth || !isCordova) { AppInfo.enableLatestChannelItems = true; AppInfo.enableStudioTabs = true; AppInfo.enablePeopleTabs = true;