diff --git a/dashboard-ui/css/librarybrowser.css b/dashboard-ui/css/librarybrowser.css
index 9ce0576fe4..b68354d80a 100644
--- a/dashboard-ui/css/librarybrowser.css
+++ b/dashboard-ui/css/librarybrowser.css
@@ -776,6 +776,10 @@ a.itemTag:hover {
max-width: 950px;
}
+ .detailPageContent {
+ max-width: 930px;
+ }
+
.primaryDetailPageContent {
max-width: 850px;
}
@@ -788,9 +792,6 @@ a.itemTag:hover {
}
}
-@media all and (min-width: 1920px) {
-}
-
.detailPageParentLink {
text-decoration: none;
}
diff --git a/dashboard-ui/css/posteritem.css b/dashboard-ui/css/posteritem.css
index 8b3d4958f2..2219aef369 100644
--- a/dashboard-ui/css/posteritem.css
+++ b/dashboard-ui/css/posteritem.css
@@ -308,14 +308,6 @@
@media all and (min-width: 1920px) {
- .portraitPosterItem {
- width: 160px;
- }
-
- .portraitPosterItem .posterItemImage {
- height: 240px;
- }
-
.squarePosterItem {
width: 190px;
}
diff --git a/dashboard-ui/itemdetails.html b/dashboard-ui/itemdetails.html
index bbc0a18c59..44b6097f65 100644
--- a/dashboard-ui/itemdetails.html
+++ b/dashboard-ui/itemdetails.html
@@ -160,10 +160,10 @@
-
diff --git a/dashboard-ui/scripts/edititemmetadata.js b/dashboard-ui/scripts/edititemmetadata.js
index be2c17f00c..47b24ebf72 100644
--- a/dashboard-ui/scripts/edititemmetadata.js
+++ b/dashboard-ui/scripts/edititemmetadata.js
@@ -287,7 +287,17 @@
$('#fldYear', page).show();
}
- if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "AdultVideo" || item.Type == "Series" || item.Type == "Game" || item.Type == "BoxSet" || item.Type == "Person" || item.Type == "Book") {
+ if (item.Type == "Movie" ||
+ item.Type == "Trailer" ||
+ item.Type == "AdultVideo" ||
+ item.Type == "Series" ||
+ item.Type == "Game" ||
+ item.Type == "BoxSet" ||
+ item.Type == "Person" ||
+ item.Type == "Book" ||
+ item.Type == "MusicAlbum" ||
+ item.Type == "MusicArtist") {
+
$('#btnIdentify', page).show();
} else {
$('#btnIdentify', page).hide();
diff --git a/dashboard-ui/scripts/editorsidebar.js b/dashboard-ui/scripts/editorsidebar.js
index b3dbdd9810..b4b8071974 100644
--- a/dashboard-ui/scripts/editorsidebar.js
+++ b/dashboard-ui/scripts/editorsidebar.js
@@ -46,7 +46,7 @@
}
if (!item.BackdropImageTags || !item.BackdropImageTags.length) {
- if (item.Type !== "Episode" && item.Type !== "Season" && item.MediaType !== "Audio" && item.Type !== "Channel") {
+ if (item.Type !== "Episode" && item.Type !== "Season" && item.MediaType !== "Audio" && item.Type !== "Channel" && item.Type !== "MusicAlbum") {
htmlName += '

';
}
}
diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js
index afb52cf254..a6b54ae506 100644
--- a/dashboard-ui/scripts/itemdetailpage.js
+++ b/dashboard-ui/scripts/itemdetailpage.js
@@ -36,13 +36,6 @@
$('#editButtonContainer', page).hide();
}
- if (user.Configuration.IsAdministrator && item.Type == "BoxSet") {
- $('#btnEditCollectionTitles', page).show().attr('href', 'editcollectionitems.html?id=' + item.Id);
-
- } else {
- $('#btnEditCollectionTitles', page).hide();
- }
-
if (MediaPlayer.canPlay(item, user)) {
var url = MediaPlayer.getPlayUrl(item);
@@ -184,8 +177,15 @@
function setInitialCollapsibleState(page, item, context, user) {
+ $('.collectionItems', page).empty();
+
if (item.IsFolder) {
- $('#childrenCollapsible', page).removeClass('hide');
+
+ if (item.Type == "BoxSet") {
+ $('#childrenCollapsible', page).addClass('hide');
+ } else {
+ $('#childrenCollapsible', page).removeClass('hide');
+ }
renderChildren(page, item, user);
}
else {
@@ -579,7 +579,7 @@
var html = '';
- if (item.Type == "Series" || item.Type == "BoxSet") {
+ if (item.Type == "Series") {
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
@@ -608,9 +608,20 @@
});
}
-
$('#childrenContent', page).html(html).createPosterItemHoverMenu();
+ if (item.Type == "BoxSet") {
+
+ var collectionItemTypes = [
+ { name: 'Movies', type: 'Movie' },
+ { name: 'Series', type: 'Series' },
+ { name: 'Albums', type: 'MusicAlbum' },
+ { name: 'Games', type: 'Game' },
+ { name: 'Books', type: 'Book' }
+ ];
+
+ renderCollectionItems(page, collectionItemTypes, result.Items, user);
+ }
}
});
@@ -620,9 +631,6 @@
else if (item.Type == "Series") {
$('#childrenTitle', page).html('Seasons');
}
- else if (item.Type == "BoxSet") {
- $('#childrenTitle', page).html('Titles');
- }
else if (item.Type == "MusicAlbum") {
$('#childrenTitle', page).html('Tracks');
}
@@ -633,6 +641,82 @@
$('#childrenTitle', page).html('Items');
}
}
+
+ function renderCollectionItems(page, types, items, user) {
+
+ for (var i = 0, length = types.length; i < length; i++) {
+
+ var type = types[i];
+
+ var typeItems = items.filter(function (curr) {
+
+ return curr.Type == type.type;
+
+ });
+
+ if (!typeItems.length) {
+ continue;
+ }
+
+ renderCollectionItemType(page, type, typeItems, user);
+ }
+
+ var otherType = { name: 'Other Items' };
+
+ var otherTypeItems = items.filter(function (curr) {
+
+ return !types.filter(function(t) {
+
+ return t.type == curr.Type;
+
+ }).length;
+
+ });
+
+ if (otherTypeItems.length) {
+ renderCollectionItemType(page, otherType, otherTypeItems, user);
+ }
+
+ if (!items.length) {
+ renderCollectionItemType(page, {name: 'Titles'}, items, user);
+ }
+
+ $('.collectionItems', page).trigger('create').createPosterItemHoverMenu();
+ }
+
+ function renderCollectionItemType(page, type, items, user) {
+
+ var html = '';
+
+ html += '
';
+
+ html += '';
+
+ html += '
';
+
+ var shape = type.type == 'MusicAlbum' ? 'square' : 'portrait';
+
+ html += LibraryBrowser.getPosterViewHtml({
+ items: items,
+ shape: shape,
+ useAverageAspectRatio: true,
+ showTitle: true,
+ centerText: true
+ });
+ html += '
';
+
+ html += '
';
+
+ $('.collectionItems', page).append(html);
+ }
+
function renderUserDataIcons(page, item) {
$('.userDataIcons', page).html(LibraryBrowser.getUserDataIconsHtml(item));
}
diff --git a/dashboard-ui/scripts/libraryreport.js b/dashboard-ui/scripts/libraryreport.js
index 4575595da5..6669a92c06 100644
--- a/dashboard-ui/scripts/libraryreport.js
+++ b/dashboard-ui/scripts/libraryreport.js
@@ -1,9 +1,11 @@
(function ($, document, window) {
+ var defaultSortBy = "SortName";
+
// The base query options
var query = {
- SortBy: "SeriesSortName,SortName",
+ SortBy: defaultSortBy,
SortOrder: "Ascending",
Recursive: true,
Fields: "MediaStreams,DateCreated,Settings,Studios",
@@ -21,21 +23,22 @@
{
return [
{},
- { name: 'Series' },
- { name: 'Season' },
- { name: 'Date Added' }
+ { name: 'Series', sortField: 'SeriesSortName,SortName' },
+ { name: 'Season', sortField: 'SortName' },
+ { name: 'Date Added', sortField: 'DateCreated,SortName' }
];
}
case 'Series':
{
return [
{},
- { name: 'Name' },
- { name: 'Network' },
- { name: 'Date Added' },
- { name: 'Year' },
- { name: 'Rating' },
- { name: 'Runtime' },
+ { name: 'Name', sortField: 'SortName' },
+ { name: 'Network', sortField: 'Studio,SortName' },
+ { name: 'Date Added', sortField: 'DateCreated,SortName' },
+ { name: 'Year', sortField: 'ProductionYear,PremiereDate,SortName' },
+ { name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
+ { name: 'Community Rating', sortField: 'CommunityRating,SortName' },
+ { name: 'Runtime', sortField: 'Runtime,SortName' },
{ name: 'Trailers' },
{ name: 'Specials' }
];
@@ -44,12 +47,13 @@
{
return [
{},
- { name: 'Name' },
- { name: 'Game System' },
- { name: 'Date Added' },
- { name: 'Release Date' },
- { name: 'Rating' },
- { name: 'Players' },
+ { name: 'Name', sortField: 'SortName' },
+ { name: 'Game System', sortField: 'GameSystem,SortName' },
+ { name: 'Date Added', sortField: 'DateCreated,GameSystem,SortName' },
+ { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,GameSystem,SortName' },
+ { name: 'Parental Rating', sortField: 'OfficialRating,GameSystem,SortName' },
+ { name: 'Community Rating', sortField: 'CommunityRating,GameSystem,SortName' },
+ { name: 'Players', sortField: 'Players,GameSystem,SortName' },
{ name: 'Trailers' }
];
}
@@ -57,13 +61,14 @@
{
return [
{},
- { name: 'Album Artist' },
- { name: 'Album' },
- { name: 'Track' },
- { name: 'Name' },
- { name: 'Date Added' },
- { name: 'Release Date' },
- { name: 'Runtime' },
+ { name: 'Album Artist', sortField: 'AlbumArtist,SortName' },
+ { name: 'Album', sortField: 'Album,SortName' },
+ { name: 'Disc', sortField: 'Album,SortName' },
+ { name: 'Track', sortField: 'Album,SortName' },
+ { name: 'Name', sortField: 'Name' },
+ { name: 'Date Added', sortField: 'DateCreated,SortName' },
+ { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
+ { name: 'Runtime', sortField: 'Runtime,SortName' },
{ name: 'Audio' },
{ name: 'Embedded Image' }
];
@@ -72,12 +77,13 @@
{
return [
{},
- { name: 'Series' },
+ { name: 'Series', sortField: 'SeriesSortName,SortName' },
{ name: 'Season' },
- { name: 'Name' },
- { name: 'Date Added' },
- { name: 'Release Date' },
- { name: 'Runtime' },
+ { name: 'Name', sortField: 'SortName' },
+ { name: 'Date Added', sortField: 'DateCreated,SortName' },
+ { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
+ { name: 'Community Rating', sortField: 'CommunityRating,SortName' },
+ { name: 'Runtime', sortField: 'Runtime,SortName' },
{ name: 'Video' },
{ name: 'Audio' },
{ name: 'Subtitles' }
@@ -87,10 +93,11 @@
{
return [
{},
- { name: 'Name' },
- { name: 'Date Added' },
- { name: 'Release Date' },
- { name: 'Rating' },
+ { name: 'Name', sortField: 'SortName' },
+ { name: 'Date Added', sortField: 'DateCreated,SortName' },
+ { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
+ { name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
+ { name: 'Community Rating', sortField: 'CommunityRating,SortName' },
{ name: 'Trailers' }
];
}
@@ -99,41 +106,44 @@
return [
{},
{ name: 'Series' },
- { name: 'Name' },
- { name: 'Date Added' },
- { name: 'Release Date' },
- { name: 'Rating' }
+ { name: 'Name', sortField: 'SortName' },
+ { name: 'Date Added', sortField: 'DateCreated,SortName' },
+ { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
+ { name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
+ { name: 'Community Rating', sortField: 'CommunityRating,SortName' }
];
}
case 'MusicArtist':
{
return [
{},
- { name: 'Name' },
- { name: 'Date Added' }
+ { name: 'Name', sortField: 'SortName' },
+ { name: 'Date Added', sortField: 'DateCreated,SortName' }
];
}
case 'MusicAlbum':
{
return [
{},
- { name: 'Album Artist' },
- { name: 'Name' },
- { name: 'Date Added' },
- { name: 'Release Date' },
- { name: 'Rating' },
- { name: 'Runtime' }
+ { name: 'Album Artist', sortField: 'AlbumArtist,SortName' },
+ { name: 'Name', sortField: 'SortName' },
+ { name: 'Date Added', sortField: 'DateCreated,SortName' },
+ { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
+ { name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
+ { name: 'Community Rating', sortField: 'CommunityRating,SortName' },
+ { name: 'Runtime', sortField: 'Runtime,SortName' }
];
}
default:
{
return [
{},
- { name: 'Name' },
- { name: 'Date Added' },
- { name: 'Release Date' },
- { name: 'Rating' },
- { name: 'Runtime' },
+ { name: 'Name', sortField: 'SortName' },
+ { name: 'Date Added', sortField: 'DateCreated,SortName' },
+ { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
+ { name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
+ { name: 'Community Rating', sortField: 'CommunityRating,SortName' },
+ { name: 'Runtime', sortField: 'Runtime,SortName' },
{ name: 'Video' },
{ name: 'Audio' },
{ name: 'Subtitles' },
@@ -178,6 +188,11 @@
html += item.Studios.length ? item.Studios[0].Name : ' ';
break;
}
+ case 'Disc':
+ {
+ html += item.ParentIndexNumber == null ? '' : item.ParentIndexNumber;
+ break;
+ }
case 'Track':
{
html += item.IndexNumber == null ? '' : item.IndexNumber;
@@ -265,7 +280,7 @@
}
break;
}
-
+
case 'Season':
{
if (item.Type == "Episode") {
@@ -281,12 +296,17 @@
html += '
' + LibraryBrowser.getPosterViewDisplayName(item, false, false) + '';
break;
}
- case 'Rating':
+ case 'Community Rating':
+ {
+ html += item.CommunityRating || ' ';
+ break;
+ }
+ case 'Parental Rating':
{
html += item.OfficialRating || ' ';
break;
}
-
+
case 'Year':
case 'Release Date':
{
@@ -357,7 +377,7 @@
}
if (!item.BackdropImageTags || !item.BackdropImageTags.length) {
- if (item.Type !== "Episode" && item.Type !== "Season" && item.MediaType !== "Audio" && item.Type !== "Channel") {
+ if (item.Type !== "Episode" && item.Type !== "Season" && item.MediaType !== "Audio" && item.Type !== "Channel" && item.Type !== "MusicAlbum") {
html += '

';
}
}
@@ -378,11 +398,11 @@
}).join('');
}
- function getReportHtml(items, reportType) {
+ function getReportHtml(items, reportType, currentSortField, currentSortDirection) {
var html = '';
- html += '
';
+ html += '';
html += '';
html += '';
@@ -391,7 +411,31 @@
html += cells.map(function (c) {
- return '' + (c.name || ' ') + ' | ';
+ var cellHtml = '';
+
+ if (c.sortField) {
+ cellHtml += '';
+ }
+
+ cellHtml += (c.name || ' ');
+
+ if (c.sortField) {
+
+ cellHtml += '';
+
+ if (c.sortField == currentSortField) {
+
+ if (currentSortDirection == "Descending") {
+ cellHtml += '↓';
+ } else {
+ cellHtml += '↑';
+ }
+ }
+ }
+
+ cellHtml += ' | ';
+
+ return cellHtml;
}).join('');
@@ -427,7 +471,7 @@
$('.listBottomPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount)).trigger('create');
- $('.reportContainer', page).html(getReportHtml(result.Items, reportType)).trigger('create');
+ $('.reportContainer', page).html(getReportHtml(result.Items, reportType, query.SortBy, query.SortOrder)).trigger('create');
$('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit;
@@ -444,6 +488,34 @@
query.StartIndex = 0;
reloadItems(page);
});
+
+ $('.lnkColumnSort', page).on('click', function () {
+
+ var order = this.getAttribute('data-sortfield');
+
+ if (query.SortBy == order) {
+
+ if (query.SortOrder == "Descending") {
+
+ query.SortOrder = "Ascending";
+ query.SortBy = defaultSortBy;
+
+ } else {
+
+ query.SortOrder = "Descending";
+ query.SortBy = order;
+ }
+
+ } else {
+
+ query.SortOrder = "Ascending";
+ query.SortBy = order;
+ }
+
+ query.StartIndex = 0;
+
+ reloadItems(page);
+ });
}
function reloadItems(page) {
diff --git a/dashboard-ui/scripts/moviesrecommended.js b/dashboard-ui/scripts/moviesrecommended.js
index bab40a53a0..99d6ad1e06 100644
--- a/dashboard-ui/scripts/moviesrecommended.js
+++ b/dashboard-ui/scripts/moviesrecommended.js
@@ -11,7 +11,7 @@
SortBy: "DateCreated",
SortOrder: "Descending",
IncludeItemTypes: "Movie",
- Limit: screenWidth >= 1920 ? 21 : (screenWidth >= 1440 ? 16 : 12),
+ Limit: screenWidth >= 1920 ? 24 : (screenWidth >= 1440 ? 16 : 12),
Recursive: true,
Fields: "PrimaryImageAspectRatio,DateCreated,UserData",
Filters: "IsUnplayed"
@@ -62,7 +62,7 @@
SortBy: "DateCreated",
SortOrder: "Descending",
IncludeItemTypes: "Trailer",
- Limit: screenWidth >= 1920 ? 7 : (screenWidth >= 1440 ? 8 : 6),
+ Limit: screenWidth >= 1920 ? 8 : (screenWidth >= 1440 ? 8 : 6),
Recursive: true,
Fields: "PrimaryImageAspectRatio,DateCreated,UserData",
Filters: "IsUnplayed"