1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Tim Hobbs 2014-03-13 06:26:20 -07:00
commit c79be9075a
77 changed files with 1575 additions and 1480 deletions

View file

@ -14,6 +14,7 @@
$('#txtPortNumber', page).val(config.HttpServerPortNumber);
$('#txtDdns', page).val(config.WanDdns || '');
$('#txtServerName', page).val(config.ServerName || '');
$('#chkEnableUpnp', page).checked(config.EnableUPnP).checkboxradio('refresh');
@ -52,6 +53,7 @@
config.EnableUPnP = $('#chkEnableUpnp', form).checked();
config.WanDdns = $('#txtDdns', form).val();
config.ServerName = $('#txtServerName', form).val();
ApiClient.updateServerConfiguration(config).done(Dashboard.processServerConfigurationUpdateResult);
});

View file

@ -71,6 +71,9 @@
$('#txtMultiEpisodePattern', page).val(tvOptions.MultiEpisodeNamePattern).trigger('change');
$('#txtDeleteLeftOverFiles', page).val(tvOptions.LeftOverFileExtensionsToDelete.join(';'));
$('#copyOrMoveFile', page).val(tvOptions.CopyOriginalFile.toString()).selectmenu('refresh');
}
$(document).on('pageinit', "#libraryFileOrganizerPage", function () {
@ -150,6 +153,8 @@
var watchLocation = $('#txtWatchFolder', form).val();
tvOptions.WatchLocations = watchLocation ? [watchLocation] : [];
tvOptions.CopyOriginalFile = $('#copyOrMoveFile', form).val();
ApiClient.updateServerConfiguration(config).done(Dashboard.processServerConfigurationUpdateResult);
});

View file

@ -7,7 +7,7 @@
var page = this;
DashboardPage.newsStartIndex = 0;
Dashboard.showLoadingMsg();
DashboardPage.pollForInfo(page);
DashboardPage.startInterval();
@ -58,7 +58,7 @@
pagingHtml += '<div>';
pagingHtml += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false);
pagingHtml += '</div>';
html = html.join('') + pagingHtml;
var elem = $('.latestNewsItems', page).html(html).trigger('create');
@ -135,9 +135,9 @@
var html = '';
var table = $('.tblConnections', page);
var container = $('.connections', page);
$('.trSession', table).addClass('deadSession');
$('.sessionPosterItem', container).addClass('deadSession');
var deviceId = ApiClient.deviceId();
@ -145,98 +145,181 @@
var connection = dashboardInfo.ActiveConnections[i];
var rowId = 'trSession' + connection.Id;
var itemId = 'session' + connection.Id;
var elem = $('#' + rowId, page);
var elem = $('#' + itemId, page);
if (elem.length) {
DashboardPage.updateSession(elem, connection);
continue;
}
html += '<tr class="trSession" id="' + rowId + '">';
html += '<td class="clientType" style="text-align:center;">';
html += DashboardPage.getClientType(connection);
html += '</td>';
html += '<td>';
html += '<div>';
if (deviceId == connection.DeviceId) {
html += connection.Client;
} else {
html += '<a href="#" onclick="RemoteControl.showMenu({sessionId:\'' + connection.Id + '\'});">' + connection.Client + '</a>';
}
html += '</div>';
html += '<div>' + connection.ApplicationVersion + '</div>';
html += '<div>' + connection.DeviceName + '</div>';
html += '</td>';
html += '<td class="username">';
html += DashboardPage.getUsersHtml(connection);
html += '</td>';
html += '<div class="sessionPosterItem posterItem squarePosterItem" id="' + itemId + '" style="vertical-align:top;margin-bottom:2em;">';
var nowPlayingItem = connection.NowPlayingItem;
var imageUrl = DashboardPage.getNowPlayingImage(nowPlayingItem);
html += '<td class="nowPlayingImage">';
html += DashboardPage.getNowPlayingImage(nowPlayingItem);
html += '</td>';
var style = "";
html += '<td class="nowPlayingText">';
html += DashboardPage.getNowPlayingText(connection, nowPlayingItem);
html += '</td>';
if (imageUrl) {
style += 'background-image:url(\'' + imageUrl + '\');';
}
html += '</tr>';
var onclick = connection.DeviceId == deviceId ? '' : ' onclick="RemoteControl.showMenu({sessionId:\'' + connection.Id + '\'});"';
html += '<a' + onclick + ' data-imageurl="' + imageUrl + '" href="#" class="posterItemImage coveredPosterItemImage" style="' + style + 'background-color:#f2f2f2;display:block;">';
var defaultTextStyle = '';
if (nowPlayingItem) {
defaultTextStyle = "display:none;";
}
html += '<div class="posterItemDefaultText" style="' + defaultTextStyle + '">Nothing currently playing</div>';
html += '<div class="posterItemTextOverlay">';
var itemNameStyle='';
if (!nowPlayingItem) {
itemNameStyle = "display:none;";
}
html += '<div class="posterItemText posterItemName" style="' + itemNameStyle + '">' + (nowPlayingItem ? nowPlayingItem.Name : '') + '</div>';
var progressStyle='';
if (!nowPlayingItem) {
progressStyle = "display:none;";
}
html += "<div class='posterItemText posterItemProgress' style='" + progressStyle + "'>";
html += '<progress class="itemProgressBar" min="0" max="100" value="' + DashboardPage.getPlaybackProgress(connection) + '" style="opacity:.9;"></progress>';
html += "</div>";
html += "</div>";
html += '<img src="' + DashboardPage.getClientImage(connection) + '" style="top:10px;left:10px;height:24px;position:absolute;opacity: .95;" />';
html += '</a>';
html += '<div class="sessionItemText">' + DashboardPage.getSessionItemText(connection) + '</div>';
//html += '<td class="clientType" style="text-align:center;">';
//html += DashboardPage.getClientType(connection);
//html += '</td>';
//html += '<td>';
//html += '<div>';
//if (deviceId == connection.DeviceId) {
// html += connection.Client;
//} else {
// html += '<a href="#" onclick="RemoteControl.showMenu({sessionId:\'' + connection.Id + '\'});">' + connection.Client + '</a>';
//}
//html += '</div>';
//html += '</td>';
//html += '<td class="nowPlayingImage">';
//html += DashboardPage.getNowPlayingImage(nowPlayingItem);
//html += '</td>';
//html += '<td class="nowPlayingText">';
//html += DashboardPage.getNowPlayingText(connection, nowPlayingItem);
//html += '</td>';
html += '</div>';
}
table.append(html).trigger('create');
container.append(html).trigger('create');
$('.deadSession', table).remove();
$('.deadSession', container).remove();
},
getPlaybackProgress: function (session) {
if (session.NowPlayingItem) {
if (session.NowPlayingItem.RunTimeTicks) {
var pct = (session.NowPlayingPositionTicks || 0) / session.NowPlayingItem.RunTimeTicks;
return pct * 100;
}
}
return 0;
},
getUsersHtml: function (session) {
var html = '';
var html = '<div>';
if (session.UserId) {
html += '<div><a href="useredit.html?userid=' + session.UserId + '">' + session.UserName + '</a><div>';
html += session.UserName;
}
html += session.AdditionalUsers.map(function (currentSession) {
return '<div><a href="useredit.html?userid=' + currentSession.UserId + '">' + currentSession.UserName + '</a><div>';
return ', ' + currentSession.UserName;
});
html += '</div>';
return html;
},
updateSession: function (row, session) {
updateSession: function (elem, session) {
row.removeClass('deadSession');
elem.removeClass('deadSession');
$('.username', row).html(DashboardPage.getUsersHtml(session)).trigger('create');
$('.sessionItemText', elem).html(DashboardPage.getSessionItemText(session));
var nowPlayingItem = session.NowPlayingItem;
$('.nowPlayingText', row).html(DashboardPage.getNowPlayingText(session, nowPlayingItem)).trigger('create');
if (nowPlayingItem) {
$('.posterItemDefaultText', elem).hide();
$('.posterItemProgress', elem).show();
$('.posterItemName', elem).show().html(nowPlayingItem.Name);
var imageRow = $('.nowPlayingImage', row);
$('progress', elem).val(DashboardPage.getPlaybackProgress(session));
} else {
$('.posterItemDefaultText', elem).show();
$('.posterItemProgress', elem).hide();
$('.posterItemName', elem).hide().html('');
}
var image = $('img', imageRow)[0];
var imageUrl = DashboardPage.getNowPlayingImage(nowPlayingItem);
var nowPlayingItemId = nowPlayingItem ? nowPlayingItem.Id : null;
var nowPlayingItemImageTag = nowPlayingItem ? nowPlayingItem.PrimaryImageTag : null;
var image = $('.posterItemImage', elem)[0];
if (!image || image.getAttribute('data-itemid') != nowPlayingItemId || image.getAttribute('data-tag') != nowPlayingItemImageTag) {
imageRow.html(DashboardPage.getNowPlayingImage(nowPlayingItem));
if (imageUrl && imageUrl != image.getAttribute('data-imageurl')) {
image.style.backgroundImage = 'url(\'' + imageUrl + '\')';
image.setAttribute('data-imageurl', imageUrl);
} else if (!imageUrl && image.getAttribute('data-imageurl')) {
image.style.backgroundImage = null;
image.setAttribute('data-imageurl', '');
}
},
getClientType: function (connection) {
getSessionItemText: function (connection) {
var html = '';
html += '<div class="posterItemText">';
html += DashboardPage.getUsersHtml(connection);
html += '</div>';
//html += '<div class="posterItemText">' + connection.Client + '</div>';
//html += '<div class="posterItemText">' + connection.ApplicationVersion + '</div>';
html += '<div class="posterItemText">' + connection.DeviceName + '</div>';
return html;
},
getClientImage: function (connection) {
var clientLowered = connection.Client.toLowerCase();
@ -262,91 +345,81 @@
imgUrl = 'css/images/clients/html5.png';
}
return "<img src='" + imgUrl + "' alt='Dashboard' />";
return imgUrl;
}
if (clientLowered == "mb-classic") {
return "<img src='css/images/clients/mbc.png' alt='Media Browser Classic' />";
return "css/images/clients/mbc.png";
}
if (clientLowered == "media browser theater") {
return "<img src='css/images/clients/mb.png' alt='Media Browser Theater' />";
return "css/images/clients/mb.png";
}
if (clientLowered == "android") {
return "<img src='css/images/clients/android.png' alt='Android' />";
return "css/images/clients/android.png";
}
if (clientLowered == "roku") {
return "<img src='css/images/clients/roku.jpg' alt='Roku' />";
return "css/images/clients/roku.jpg";
}
if (clientLowered == "ios") {
return "<img src='css/images/clients/ios.png' alt='iOS' />";
return "css/images/clients/ios.png";
}
if (clientLowered == "windows rt") {
return "<img src='css/images/clients/windowsrt.png' alt='Windows RT' />";
return "css/images/clients/windowsrt.png";
}
if (clientLowered == "windows phone") {
return "<img src='css/images/clients/windowsphone.png' alt='Windows Phone' />";
return "css/images/clients/windowsphone.png";
}
if (clientLowered == "dlna") {
return "<img src='css/images/clients/dlna.png' alt='Dlna' />";
return "css/images/clients/dlna.png";
}
if (clientLowered == "mbkinect") {
return "<img src='css/images/clients/mbkinect.png' alt='MB Kinect' />";
return "css/images/clients/mbkinect.png";
}
if (clientLowered == "xbmc") {
return "<img src='css/images/clients/xbmc.png' alt='Xbmc' />";
return "css/images/clients/xbmc.png";
}
return connection.Client;
return "css/images/clients/mb.png";
},
getNowPlayingImage: function (item) {
if (item && item.ThumbItemId) {
return ApiClient.getImageUrl(item.ThumbItemId, {
type: "Thumb",
height: 300,
tag: item.ThumbImageTag
});
}
if (item && item.BackdropItemId) {
return ApiClient.getImageUrl(item.BackdropItemId, {
type: "Backdrop",
height: 300,
tag: item.BackdropImageTag
});
}
if (item && item.PrimaryImageTag) {
var url = ApiClient.getImageUrl(item.Id, {
return ApiClient.getImageUrl(item.Id, {
type: "Primary",
height: 100,
height: 300,
tag: item.PrimaryImageTag
});
url += "&xxx=" + new Date().getTime();
return "<img data-itemid='" + item.Id + "' data-tag='" + item.PrimaryImageTag + "' class='clientNowPlayingImage' src='" + url + "' alt='" + item.Name + "' title='" + item.Name + "' />";
}
return "";
},
getNowPlayingText: function (connection, item) {
var html = "";
if (item) {
html += "<div><a href='itemdetails.html?id=" + item.Id + "'>" + item.Name + "</a></div>";
html += "<div>";
if (item.RunTimeTicks) {
html += Dashboard.getDisplayTime(connection.NowPlayingPositionTicks || 0) + " / ";
html += Dashboard.getDisplayTime(item.RunTimeTicks);
}
html += "</div>";
}
return html;
},
renderRunningTasks: function (dashboardInfo) {
var page = $.mobile.activePage;
@ -422,9 +495,9 @@
DashboardPage.renderPluginUpdateInfo(page, dashboardInfo);
DashboardPage.renderPendingInstallations(page, dashboardInfo.SystemInfo);
},
renderUrls: function (page, systemInfo) {
var url = ApiClient.serverAddress() + "/mediabrowser";
$('#bookmarkUrl', page).html(url).attr("href", url);

View file

@ -0,0 +1,45 @@
(function ($, document, window) {
function loadPage(page, config) {
$('#chkEnablePlayTo', page).checked(config.DlnaOptions.EnablePlayTo).checkboxradio("refresh");
Dashboard.hideLoadingMsg();
}
$(document).on('pageshow', "#dlnaSettingsPage", function () {
Dashboard.showLoadingMsg();
var page = this;
ApiClient.getServerConfiguration().done(function (config) {
loadPage(page, config);
});
});
function onSubmit() {
Dashboard.showLoadingMsg();
var form = this;
ApiClient.getServerConfiguration().done(function (config) {
config.DlnaOptions.EnablePlayTo = $('#chkEnablePlayTo', form).checked();
ApiClient.updateServerConfiguration(config).done(Dashboard.processServerConfigurationUpdateResult);
});
// Disable default form submission
return false;
}
window.DlnaSettingsPage = {
onSubmit: onSubmit
};
})(jQuery, document, window);

View file

@ -0,0 +1,306 @@
(function ($, document, window, FileReader, escape) {
var currentItem;
function updateTabs(page, item) {
var query = MetadataEditor.getEditQueryString(item);
$('#btnEditMetadata', page).attr('href', 'edititemmetadata.html?' + query);
$('#btnEditImages', page).attr('href', 'edititemimages.html?' + query);
}
function reload(page) {
Dashboard.showLoadingMsg();
$('#btnRemoveItems', page).buttonEnabled(false);
MetadataEditor.getItemPromise().done(function (item) {
currentItem = item;
LibraryBrowser.renderName(item, $('.itemName', page), true);
updateTabs(page, item);
reloadTitles(page, item);
});
}
function getTitleHtml(item) {
var html = '<div style="display:inline-block;margin:5px;vertical-align:top;">';
html += '<div style="width:120px;height:180px;">';
if (item.ImageTags.Primary) {
var imgUrl = ApiClient.getImageUrl(item.Id, {
type: "Primary",
width: 300,
tag: item.ImageTags.Primary
});
html += '<img src="' + imgUrl + '" style="max-width:120px;max-height:180px;" />';
}
html += '</div>';
html += '<div style="text-align:center;margin-top:4px;max-width:100px;overflow:hidden;height: 32px;">' + item.Name + '</div>';
if (item.ParentId != currentItem.Id) {
html += '<label for="chkRemove' + item.Id + '">Remove</label><input id="chkRemove' + item.Id + '" class="chkRemoveItem" type="checkbox" data-itemid="' + item.Id + '" data-mini="true" />';
}
html += '</div>';
return html;
}
function getSearchResultHtml(item) {
var html = '<div style="display:inline-block;margin:3px;vertical-align:top;">';
html += '<div style="width:100px;height:150px;">';
if (item.PrimaryImageTag) {
var imgUrl = ApiClient.getImageUrl(item.ItemId, {
type: "Primary",
width: 200,
tag: item.PrimaryImageTag
});
html += '<img src="' + imgUrl + '" style="max-width:100px;max-height:150px;" />';
}
html += '</div>';
html += '<div style="text-align:center;margin-top:4px;max-width:100px;overflow:hidden;height: 32px;">' + item.Name + '</div>';
html += '<label for="chkAdd' + item.ItemId + '">Add</label><input id="chkAdd' + item.ItemId + '" class="chkAddItem" type="checkbox" data-itemid="' + item.ItemId + '" data-mini="true" />';
html += '</div>';
return html;
}
function reloadTitles(page, item) {
ApiClient.getItems(Dashboard.getCurrentUserId(), {
ParentId: item.Id
}).done(function (result) {
// Scroll back up so they can see the results from the beginning
$(document).scrollTop(0);
var html = result.Items.map(getTitleHtml).join('');
var elem = $('.collectionItems', page).html(html).trigger('create');
$('.chkRemoveItem', elem).on('change', function () {
if ($('.chkRemoveItem:checked', elem).length) {
$('#btnRemoveItems', page).buttonEnabled(true);
} else {
$('#btnRemoveItems', page).buttonEnabled(false);
}
});
Dashboard.hideLoadingMsg();
});
}
function showSearchResults(page, searchTerm) {
ApiClient.getSearchHints({
userId: Dashboard.getCurrentUserId(),
searchTerm: searchTerm,
limit: 30,
includePeople: false,
includeGenres: false,
includeStudios: false,
includeArtists: false,
IncludeItemTypes: "Movie,Series,Game,MusicAlbum,Book"
}).done(function (result) {
renderSearchResults(page, result.SearchHints);
});
}
function renderSearchResults(page, items) {
var existingIds = $('.chkRemoveItem', page).get().map(function (c) {
return c.getAttribute('data-itemid');
});
var html = items.filter(function (i) {
return existingIds.indexOf(i.ItemId) == -1;
}).map(getSearchResultHtml).join('');
var elem = $('.collectionItemSearchResults', page).html(html).trigger('create');
$('.chkAddItem', elem).on('change', function () {
if ($('.chkAddItem:checked', elem).length) {
$('#btnAddItems', page).buttonEnabled(true);
} else {
$('#btnAddItems', page).buttonEnabled(false);
}
});
}
function addItemsToCollection(page) {
var items = $('.chkAddItem:checked', page).get().map(function (c) {
return c.getAttribute('data-itemid');
});
if (!items.length) {
Dashboard.alert('Please select at least one item.');
return;
}
var url = ApiClient.getUrl("Collections/" + currentItem.Id + "/Items", {
Ids: items.join(',')
});
$.ajax({
type: "POST",
url: url
}).done(function () {
Dashboard.hideLoadingMsg();
$('.popupIdentify', page).popup('close');
reload(page);
});
}
function removeItemsFromCollection(page) {
var items = $('.chkRemoveItem:checked', page).get().map(function (c) {
return c.getAttribute('data-itemid');
});
if (!items.length) {
Dashboard.alert('Please select at least one item.');
return;
}
var url = ApiClient.getUrl("Collections/" + currentItem.Id + "/Items", {
Ids: items.join(',')
});
$.ajax({
type: "DELETE",
url: url
}).done(function () {
Dashboard.hideLoadingMsg();
reload(page);
});
}
$(document).on('pageinit', "#editCollectionTitlesPage", function () {
var page = this;
$('.libraryTree', page).on('itemclicked', function (event, data) {
if (data.itemType == "libraryreport") {
Dashboard.navigate('libraryreport.html');
return;
}
if (data.itemType == "livetvservice") {
return;
}
if (data.id != currentItem.Id) {
MetadataEditor.currentItemId = data.id;
MetadataEditor.currentItemName = data.itemName;
MetadataEditor.currentItemType = data.itemType;
//Dashboard.navigate('edititemmetadata.html?id=' + data.id);
//$.mobile.urlHistory.ignoreNextHashChange = true;
window.location.hash = 'editItemImagesPage?id=' + data.id;
reload(page);
}
});
$('#btnAddItem', page).on('click', function () {
var popup = $('.popupIdentify', page).popup('open');
$('#txtLookupName', popup).val('');
$('.collectionItemSearchResults', popup).empty();
$('#btnAddItems', popup).buttonEnabled(false);
});
$('#btnAddItems', page).on('click', function () {
addItemsToCollection(page);
});
$('#btnRemoveItems', page).on('click', function () {
removeItemsFromCollection(page);
});
}).on('pagebeforeshow', "#editCollectionTitlesPage", function () {
var page = this;
reload(page);
}).on('pagehide', "#editCollectionTitlesPage", function () {
var page = this;
currentItem = null;
});
window.EditCollectionItemsPage = {
onSearchFormSubmit: function () {
var page = $(this).parents('.page');
showSearchResults(page, $('#txtLookupName', page).val());
return false;
}
};
})(jQuery, document, window, window.FileReader, escape);

View file

@ -14,6 +14,7 @@
$('#btnEditPeople', page).attr('href', 'edititempeople.html?' + query);
$('#btnEditMetadata', page).attr('href', 'edititemmetadata.html?' + query);
$('#btnEditCollectionTitles', page).attr('href', 'editcollectionitems.html?' + query);
}
function getBaseRemoteOptions() {
@ -268,12 +269,18 @@
updateTabs(page, item);
if (item.Type == "Person" || item.Type == "Studio" || item.Type == "MusicGenre" || item.Type == "Genre" || item.Type == "MusicArtist" || item.Type == "GameGenre" || item.Type == "Channel") {
if (item.Type == "Person" || item.Type == "Studio" || item.Type == "MusicGenre" || item.Type == "Genre" || item.Type == "MusicArtist" || item.Type == "GameGenre" || item.Type == "Channel" || item.Type == "BoxSet") {
$('#btnEditPeople', page).hide();
} else {
$('#btnEditPeople', page).show();
}
if (item.Type == "BoxSet") {
$('#btnEditCollectionTitles', page).show();
} else {
$('#btnEditCollectionTitles', page).hide();
}
ApiClient.getRemoteImageProviders(getBaseRemoteOptions()).done(function (providers) {
if (providers.length) {

View file

@ -16,6 +16,7 @@
$('#btnEditPeople', page).attr('href', 'edititempeople.html?' + query);
$('#btnEditImages', page).attr('href', 'edititemimages.html?' + query);
$('#btnEditCollectionTitles', page).attr('href', 'editcollectionitems.html?' + query);
}
function reload(page) {
@ -82,12 +83,18 @@
setFieldVisibilities(page, item);
fillItemInfo(page, item);
if (item.Type == "Person" || item.Type == "Studio" || item.Type == "MusicGenre" || item.Type == "Genre" || item.Type == "MusicArtist" || item.Type == "GameGenre" || item.Type == "Channel") {
if (item.Type == "Person" || item.Type == "Studio" || item.Type == "MusicGenre" || item.Type == "Genre" || item.Type == "MusicArtist" || item.Type == "GameGenre" || item.Type == "Channel" || item.Type == "BoxSet") {
$('#btnEditPeople', page).hide();
} else {
$('#btnEditPeople', page).show();
}
if (item.Type == "BoxSet") {
$('#btnEditCollectionTitles', page).show();
} else {
$('#btnEditCollectionTitles', page).hide();
}
Dashboard.hideLoadingMsg();
});
}
@ -280,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();

View file

@ -8,6 +8,7 @@
$('#btnEditMetadata', page).attr('href', 'edititemmetadata.html?' + query);
$('#btnEditImages', page).attr('href', 'edititemimages.html?' + query);
$('#btnEditCollectionTitles', page).attr('href', 'editcollectionitems.html?' + query);
}
function reload(page) {

View file

@ -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 += '<img src="css/images/editor/missingbackdrop.png" title="Missing backdrop image." />';
}
}
@ -114,6 +114,13 @@
nodes.push({ attr: { id: 'libraryreport', rel: 'default', itemtype: 'libraryreport' }, data: 'Reports' });
callback(nodes);
if (!selectedId) {
if (window.location.toString().toLowerCase().indexOf('report.html') != -1) {
selectedId = 'libraryreport';
}
}
if (selectedId && nodes.filter(function (f) {

View file

@ -7,7 +7,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "Episode",
Recursive: true,
Fields: "DateCreated,SeriesInfo,PrimaryImageAspectRatio",
Fields: "SeriesInfo,PrimaryImageAspectRatio",
StartIndex: 0,
IsMissing: false,
IsVirtualUnaired: false

View file

@ -25,9 +25,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
@ -65,36 +62,12 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
}
$(document).on('pageinit', "#gameGenresPage", function () {
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
@ -66,36 +63,12 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
}
$(document).on('pageinit', "#gameStudiosPage", function () {
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -174,7 +174,7 @@
var views = [];
if (counts.MovieCount || counts.TrailerCount) {
views.push({ id: "moviesView", name: "Movies", url: "moviesrecommended.html", img: "css/images/items/list/chapter.png", background: "#0094FF" });
views.push({ id: "moviesView", name: "Movies", url: "movieslatest.html", img: "css/images/items/list/chapter.png", background: "#0094FF" });
}
if (counts.EpisodeCount || counts.SeriesCount) {

View file

@ -396,7 +396,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "",
Recursive: true,
Fields: "DateCreated,AudioInfo,SeriesInfo,ParentId,PrimaryImageAspectRatio",
Fields: "AudioInfo,SeriesInfo,ParentId,PrimaryImageAspectRatio",
Limit: LibraryBrowser.getDefaultPageSize(),
StartIndex: 0
};
@ -477,10 +477,11 @@
}
else {
html += LibraryBrowser.getPosterDetailViewHtml({
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
preferBackdrop: shape == "backdrop",
shape: shape
shape: "square",
useAverageAspectRatio: true,
showTitle: true
});
}

View file

@ -31,6 +31,7 @@
if (user.Configuration.IsAdministrator) {
$('#editButtonContainer', page).show();
} else {
$('#editButtonContainer', page).hide();
}
@ -122,7 +123,7 @@
if (item.Type == "Episode" || item.Type == "Series" || item.Type == "Season") {
return "tv";
}
if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "BoxSet") {
if (item.Type == "Movie" || item.Type == "Trailer") {
return "movies";
}
if (item.Type == "Audio" || item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "MusicVideo") {
@ -131,6 +132,9 @@
if (item.MediaType == "Game") {
return "games";
}
if (item.Type == "BoxSet") {
return "boxsets";
}
return "";
}
@ -162,10 +166,6 @@
$('#gameSystemTabs', page).show();
}
if (item.Type == "BoxSet") {
$('#boxsetTabs', page).show();
}
if (item.Type == "Trailer") {
$('#trailerTabs', page).show();
}
@ -177,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 {
@ -346,7 +353,7 @@
ApiClient.getItems(Dashboard.getCurrentUserId(), {
Ids: item.SoundtrackIds.join(","),
ItemFields: "PrimaryImageAspectRatio,ItemCounts,DateCreated,AudioInfo",
ItemFields: "PrimaryImageAspectRatio,ItemCounts,AudioInfo",
SortBy: "SortName"
}).done(function (result) {
@ -425,7 +432,7 @@
var options = {
userId: Dashboard.getCurrentUserId(),
limit: item.Type == "MusicAlbum" ? 4 : 5,
fields: "PrimaryImageAspectRatio,DateCreated,UserData"
fields: "PrimaryImageAspectRatio,UserData"
};
if (item.Type == "Movie") {
@ -527,7 +534,7 @@
function renderChildren(page, item, user) {
var fields = "ItemCounts,DateCreated,AudioInfo,PrimaryImageAspectRatio";
var fields = "ItemCounts,AudioInfo,PrimaryImageAspectRatio";
var query = {
ParentId: item.Id,
@ -570,15 +577,9 @@
} else {
var shape = "smallPoster";
var html = '';
if (item.Type == "Season") {
shape = "smallBackdrop";
}
var html;
if (item.Type == "Series" || item.Type == "BoxSet") {
if (item.Type == "Series") {
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
@ -606,18 +607,21 @@
centerText: true
});
}
else {
html = LibraryBrowser.getPosterDetailViewHtml({
items: result.Items,
useAverageAspectRatio: true,
shape: shape,
showParentName: false,
displayAsSpecial: item.Type == "Season" && item.IndexNumber
});
}
$('#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);
}
}
});
@ -627,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');
}
@ -640,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 += '<div class="detailSection">';
html += '<div class="detailSectionHeader" style="position: relative;">';
html += '<span>' + type.name + '</span>';
if (user.Configuration.IsAdministrator) {
html += '<a href="editcollectionitems.html?id=' + currentItem.Id + '" data-role="button" data-icon="edit" data-iconpos="notext" data-inline="true" style="position: absolute; right: 0; top: 6px; margin-top: 0; margin-bottom: 0;">Edit</a>';
}
html += '</div>';
html += '<div class="detailSectionContent">';
var shape = type.type == 'MusicAlbum' ? 'square' : 'portrait';
html += LibraryBrowser.getPosterViewHtml({
items: items,
shape: shape,
useAverageAspectRatio: true,
showTitle: true,
centerText: true
});
html += '</div>';
html += '</div>';
$('.collectionItems', page).append(html);
}
function renderUserDataIcons(page, item) {
$('.userDataIcons', page).html(LibraryBrowser.getUserDataIconsHtml(item));
}

View file

@ -34,14 +34,23 @@
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
if (view == "Backdrop") {
html += LibraryBrowser.getPosterDetailViewHtml({
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "smallBackdrop",
useAverageAspectRatio: true,
showTitle: true,
centerText: true,
preferBackdrop: true
});
}
else if (view == "Poster") {
html += LibraryBrowser.getPosterDetailViewHtml({
items: result.Items
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
useAverageAspectRatio: true,
showTitle: true,
centerText: true
});
}

View file

@ -71,219 +71,6 @@
return "" + d.getFullYear() + formatDigit(d.getMonth() + 1) + formatDigit(d.getDate()) + formatDigit(d.getHours()) + formatDigit(d.getMinutes()) + formatDigit(d.getSeconds());
},
getPosterDetailViewHtml: function (options) {
var items = options.items;
var currentIndexValue;
if (!options.shape) {
options.shape = options.preferBackdrop ? "backdrop" : "poster";
}
var html = '';
for (var i = 0, length = items.length; i < length; i++) {
var item = items[i];
if (options.timeline) {
var year = item.ProductionYear || "Unknown Year";
if (year != currentIndexValue) {
html += '<h2 class="timelineHeader detailSectionHeader">' + year + '</h2>';
currentIndexValue = year;
}
}
var imgUrl = null;
var isDefault = false;
var height = null;
var cssClass = "tileItem";
if (options.shape) {
cssClass += " " + options.shape + "TileItem";
}
html += '<a class="' + cssClass + '" href="' + LibraryBrowser.getHref(item, options.context) + '">';
if (options.preferBackdrop && item.BackdropImageTags && item.BackdropImageTags.length) {
imgUrl = LibraryBrowser.getImageUrl(item, 'Backdrop', 0, {
height: 198,
width: 352
});
}
else if (options.preferBackdrop && item.ImageTags && item.ImageTags.Thumb) {
imgUrl = ApiClient.getImageUrl(item.Id, {
type: "Thumb",
height: 198,
width: 352,
tag: item.ImageTags.Thumb
});
}
else if (item.ImageTags && item.ImageTags.Primary) {
height = 300;
imgUrl = LibraryBrowser.getImageUrl(item, 'Primary', 0, {
maxheight: height
});
}
else if (item.AlbumId && item.AlbumPrimaryImageTag) {
height = 300;
imgUrl = ApiClient.getImageUrl(item.AlbumId, {
type: "Primary",
height: 100,
tag: item.AlbumPrimaryImageTag
});
}
else if (item.BackdropImageTags && item.BackdropImageTags.length) {
imgUrl = LibraryBrowser.getImageUrl(item, 'Backdrop', 0, {
height: 198,
width: 352
});
}
else if (item.MediaType == "Audio" || item.Type == "MusicAlbum" || item.Type == "MusicArtist") {
imgUrl = "css/images/items/list/audio.png";
isDefault = true;
}
else if (item.MediaType == "Video" || item.Type == "Season" || item.Type == "Series") {
imgUrl = "css/images/items/list/video.png";
isDefault = true;
}
else if (item.Type == "Person") {
imgUrl = "css/images/items/list/person.png";
isDefault = true;
}
else if (item.Type == "MusicArtist") {
imgUrl = "css/images/items/list/audiocollection.png";
isDefault = true;
}
else if (item.MediaType == "Game") {
imgUrl = "css/images/items/list/game.png";
isDefault = true;
}
else if (item.Type == "Studio" || item.Type == "Genre" || item.Type == "MusicGenre" || item.Type == "GameGenre") {
if (options.context == "games") {
imgUrl = "css/images/items/list/game.png";
}
else if (options.context == "music") {
imgUrl = "css/images/items/list/audio.png";
}
else if (options.context == "movies") {
imgUrl = "css/images/items/list/chapter.png";
}
else {
imgUrl = "css/images/items/list/collection.png";
}
isDefault = true;
}
else {
imgUrl = "css/images/items/list/collection.png";
isDefault = true;
}
cssClass = isDefault ? "tileImage defaultTileImage" : "tileImage";
html += '<div class="' + cssClass + '" style="background-image: url(\'' + imgUrl + '\');"></div>';
html += '<div class="tileContent">';
if (options.showParentName !== false) {
if (item.SeriesName || item.Album || item.AlbumArtist) {
var seriesName = item.SeriesName || item.Album || item.AlbumArtist;
html += '<div class="tileName">' + seriesName + '</div>';
}
}
var name = LibraryBrowser.getPosterViewDisplayName(item, options.displayAsSpecial);
html += '<div class="tileName">' + name + '</div>';
if (item.CommunityRating || item.CriticRating) {
html += '<p>' + LibraryBrowser.getRatingHtml(item) + '</p>';
}
var childText = null;
if (item.Type == "BoxSet") {
childText = item.ChildCount == 1 ? "1 Movie" : item.ChildCount + " Movies";
html += '<p class="itemMiscInfo">' + childText + '</p>';
}
else if (item.Type == "GameSystem") {
childText = item.ChildCount == 1 ? "1 Game" : item.ChildCount + " Games";
html += '<p class="itemMiscInfo">' + childText + '</p>';
}
else if (item.Type == "MusicAlbum") {
//childText = item.ChildCount == 1 ? "1 Song" : item.ChildCount + " Songs";
//html += '<p class="itemMiscInfo">' + childText + '</p>';
}
else if (item.Type == "Genre" || item.Type == "Studio" || item.Type == "Person" || item.Type == "MusicArtist" || item.Type == "MusicGenre" || item.Type == "GameGenre") {
var itemCountHtml = LibraryBrowser.getItemCountsHtml(options, item);
if (itemCountHtml) {
html += '<p class="itemMiscInfo">' + itemCountHtml + '</p>';
}
}
else if (item.Type == "Game") {
html += '<p class="itemMiscInfo">' + (item.GameSystem) + '</p>';
}
else if (item.Type == "Episode") {
// Skip it. Just clutter
}
else {
html += '<p class="itemMiscInfo">' + LibraryBrowser.getMiscInfoHtml(item) + '</p>';
}
if (item.Type == "MusicAlbum") {
html += '<p class="itemMiscInfo">' + LibraryBrowser.getMiscInfoHtml(item) + '</p>';
}
html += '<p class="userDataIcons">' + LibraryBrowser.getUserDataIconsHtml(item) + '</p>';
html += '</div>';
if (item.LocationType == "Offline" || item.LocationType == "Virtual") {
html += LibraryBrowser.getOfflineIndicatorHtml(item);
} else {
html += LibraryBrowser.getPlayedIndicatorHtml(item);
}
html += "</a>";
}
return html;
},
getItemCountsHtml: function (options, item) {
var counts = [];

View file

@ -73,7 +73,7 @@
if (counts.MovieCount) {
html += '<a class="viewMenuLink viewMenuTextLink desktopViewMenuLink' + (view == 'movies' ? selectedCssClass : '') + '" href="moviesrecommended.html">' + (view == 'movies' ? selectedHtml : '') + '<span class="viewName">Movies</span></a>';
html += '<a class="viewMenuLink viewMenuTextLink desktopViewMenuLink' + (view == 'movies' ? selectedCssClass : '') + '" href="movieslatest.html">' + (view == 'movies' ? selectedHtml : '') + '<span class="viewName">Movies</span></a>';
}
if (counts.SeriesCount) {
@ -92,6 +92,10 @@
html += '<a class="viewMenuLink viewMenuTextLink desktopViewMenuLink' + (view == 'games' ? selectedCssClass : '') + '" href="gamesrecommended.html">' + (view == 'games' ? selectedHtml : '') + '<span class="viewName">Games</span></a>';
}
if (counts.BoxSetCount) {
html += '<a class="viewMenuLink viewMenuTextLink desktopViewMenuLink' + (view == 'boxsets' ? selectedCssClass : '') + '" href="collections.html">' + (view == 'boxsets' ? selectedHtml : '') + '<span class="viewName">Collections</span></a>';
}
$('.viewMenuRemoteControlButton', page).before(html);
}
@ -122,74 +126,33 @@
html += '<p class="libraryPanelHeader"><a href="index.html" class="imageLink"><img src="css/images/mblogoicon.png" /><span>MEDIA</span><span class="mediaBrowserAccent">BROWSER</span></a></p>';
html += '<div data-role="collapsible-set" data-inset="false" data-mini="true">';
html += '<ul data-role="listview">';
if (counts.MovieCount) {
html += getCollapsibleHtml('Movies', [
{ text: 'Suggested', href: 'moviesrecommended.html' },
{ text: 'Movies', href: 'movies.html' },
{ text: 'Collections', href: 'boxsets.html' },
{ text: 'Trailers', href: 'movietrailers.html' },
{ text: 'Genres', href: 'moviegenres.html' },
{ text: 'People', href: 'moviepeople.html' },
{ text: 'Studios', href: 'moviestudios.html' }
]);
html += '<li><a class="libraryPanelLink" href="movieslatest.html">Movies</a></li>';
}
if (counts.SeriesCount) {
html += getCollapsibleHtml('TV', [
{ text: 'Suggested', href: 'tvrecommended.html' },
{ text: 'Latest', href: 'tvlatest.html' },
{ text: 'Upcoming', href: 'tvupcoming.html' },
{ text: 'Shows', href: 'tvshows.html' },
{ text: 'Episodes', href: 'episodes.html' },
{ text: 'Genres', href: 'tvgenres.html' },
{ text: 'People', href: 'tvpeople.html' },
{ text: 'Networks', href: 'tvstudios.html' }
]);
html += '<li><a class="libraryPanelLink" href="tvrecommended.html">TV</a></li>';
}
if (liveTvInfo.EnabledUsers.indexOf(Dashboard.getCurrentUserId()) != -1) {
html += getCollapsibleHtml('Live TV', [
{ text: 'Suggested', href: 'livetvsuggested.html' },
{ text: 'Guide', href: 'livetvguide.html' },
{ text: 'Channels', href: 'livetvchannels.html' },
{ text: 'Recordings', href: 'livetvrecordings.html' },
{ text: 'Scheduled', href: 'livetvtimers.html' },
{ text: 'Series', href: 'livetvseriestimers.html' }
]);
html += '<li><a class="libraryPanelLink" href="livetvsuggested.html">Live TV</a></li>';
}
if (counts.SongCount || counts.MusicVideoCount) {
html += getCollapsibleHtml('Music', [
{ text: 'Suggested', href: 'musicrecommended.html' },
{ text: 'Songs', href: 'songs.html' },
{ text: 'Albums', href: 'musicalbums.html' },
{ text: 'Album Artists', href: 'musicalbumartists.html' },
{ text: 'Artists', href: 'musicartists.html' },
{ text: 'Music Videos', href: 'musicvideos.html' },
{ text: 'Genres', href: 'musicgenres.html' }
]);
html += '<li><a class="libraryPanelLink" href="musicrecommended.html">Music</a></li>';
}
if (counts.GameCount) {
html += getCollapsibleHtml('Games', [
{ text: 'Suggested', href: 'gamesrecommended.html' },
{ text: 'Games', href: 'games.html' },
{ text: 'Game Systems', href: 'gamesystems.html' },
{ text: 'Genres', href: 'gamegenres.html' },
{ text: 'Studios', href: 'gamestudios.html' }
]);
html += '<li><a class="libraryPanelLink" href="gamesrecommended.html">Games</a></li>';
}
html += '</div>';
if (counts.BoxSetCount) {
html += '<li><a class="libraryPanelLink" href="collections.html">Collections</a></li>';
}
html += '</ul>';
html += '</div>';
$(page).append(html);
@ -200,50 +163,23 @@
return panel;
}
function getCollapsibleHtml(title, links) {
var i, length;
var selectedIndex = -1;
var collapsed = 'true';
var currentUrl = window.location.toString().toLowerCase();
for (i = 0, length = links.length; i < length; i++) {
if (currentUrl.indexOf(links[i].href.toLowerCase()) != -1) {
collapsed = 'false';
selectedIndex = i;
break;
}
}
var html = '';
html += '<div data-role="collapsible" data-mini="true" data-collapsed="' + collapsed + '">';
html += '<h4 class="libraryPanelCollapsibleHeader">' + title + '</h4>';
html += '<ul data-role="listview" data-inset="false">';
for (i = 0, length = links.length; i < length; i++) {
var link = links[i];
var href = selectedIndex == i ? '#' : link.href;
html += '<li><a class="libraryPanelLink" href="' + href + '">' + link.text + '</a></li>';
}
html += '</ul>';
html += '</div>';
return html;
}
window.LibraryMenu = {
showLibraryMenu: showLibraryMenu
};
$(document).on('pagebeforeshow', ".libraryPage", function () {
$(document).on('pageinit', ".libraryPage", function () {
var page = this;
$('.libraryViewNav', page).wrapInner('<div class="libraryViewNavInner"></div>');
$('.libraryViewNav a', page).each(function () {
this.innerHTML = '<span class="libraryViewNavLinkContent">' + this.innerHTML + '</span>';
});
}).on('pagebeforeshow', ".libraryPage", function () {
var page = this;

View file

@ -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: 'Album Artist', sortField: 'AlbumArtist,Album,SortName' },
{ name: 'Album', sortField: 'Album,SortName' },
{ name: 'Disc' },
{ name: 'Track' },
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Runtime' },
{ 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,13 +77,15 @@
{
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: 'Resolution' },
{ name: 'Audio' },
{ name: 'Subtitles' }
];
@ -87,10 +94,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,42 +107,46 @@
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: 'Resolution' },
{ name: 'Audio' },
{ name: 'Subtitles' },
{ name: 'Trailers' },
@ -144,6 +156,53 @@
}
}
function getDefaultSortOrder(reportType) {
switch (reportType) {
case 'Season':
{
return "SeriesSortName,SortName";
}
case 'Series':
{
return "SortName";
}
case 'Game':
{
return "GameSystem,SortName";
}
case 'Audio':
{
return "AlbumArtist,Album,SortName";
}
case 'Episode':
{
return "SeriesSortName,SortName";
}
case 'BoxSet':
{
return "SortName";
}
case 'Book':
{
return "SortName";
}
case 'MusicArtist':
{
return "SortName";
}
case 'MusicAlbum':
{
return "AlbumArtist,SortName";
}
default:
{
return "SortName";
}
}
}
function getItemCellsHtml(item, headercells) {
return headercells.map(function (cell) {
@ -151,6 +210,8 @@
var html = '';
html += '<td>';
var stream;
switch (cell.type || cell.name) {
case 'Album Artist':
@ -178,6 +239,11 @@
html += item.Studios.length ? item.Studios[0].Name : '&nbsp;';
break;
}
case 'Disc':
{
html += item.ParentIndexNumber == null ? '' : item.ParentIndexNumber;
break;
}
case 'Track':
{
html += item.IndexNumber == null ? '' : item.IndexNumber;
@ -190,7 +256,7 @@
}
case 'Audio':
{
var stream = (item.MediaStreams || []).filter(function (s) {
stream = (item.MediaStreams || []).filter(function (s) {
return s.Type == 'Audio';
@ -205,7 +271,7 @@
}
case 'Video':
{
var stream = (item.MediaStreams || []).filter(function (s) {
stream = (item.MediaStreams || []).filter(function (s) {
return s.Type == 'Video';
@ -216,6 +282,19 @@
}
break;
}
case 'Resolution':
{
stream = (item.MediaStreams || []).filter(function (s) {
return s.Type == 'Video';
})[0];
if (stream && stream.Width) {
html += stream.Width + "*" + (stream.Height || "-");
}
break;
}
case 'Embedded Image':
{
if ((item.MediaStreams || []).filter(function (s) {
@ -265,7 +344,7 @@
}
break;
}
case 'Season':
{
if (item.Type == "Episode") {
@ -281,12 +360,17 @@
html += '<a href="edititemmetadata.html?id=' + item.Id + '">' + LibraryBrowser.getPosterViewDisplayName(item, false, false) + '</a>';
break;
}
case 'Rating':
case 'Community Rating':
{
html += item.CommunityRating || '&nbsp;';
break;
}
case 'Parental Rating':
{
html += item.OfficialRating || '&nbsp;';
break;
}
case 'Year':
case 'Release Date':
{
@ -357,7 +441,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 += '<a href="edititemimages.html?id=' + item.Id + '"><img src="css/images/editor/missingbackdrop.png" title="Missing backdrop image." /></a>';
}
}
@ -378,11 +462,11 @@
}).join('');
}
function getReportHtml(items, reportType) {
function getReportHtml(items, reportType, currentSortField, currentSortDirection) {
var html = '';
html += '<table data-role="table" data-mode="reflow" class="tblLibraryReport detailTable stripedTable ui-responsive table-stroke" style="display: table;">';
html += '<table id="tblReport" data-role="table" data-mode="reflow" class="tblLibraryReport stripedTable ui-responsive table-stroke detailTable" style="display:table;">';
html += '<thead>';
html += '<tr>';
@ -391,7 +475,31 @@
html += cells.map(function (c) {
return '<th>' + (c.name || '&nbsp;') + '</th>';
var cellHtml = '<th data-priority="' + (c.priority || 'persist') + '">';
if (c.sortField) {
cellHtml += '<a class="lnkColumnSort" href="#" data-sortfield="' + c.sortField + '" style="text-decoration:underline;">';
}
cellHtml += (c.name || '&nbsp;');
if (c.sortField) {
cellHtml += '</a>';
if (c.sortField == currentSortField) {
if (currentSortDirection == "Descending") {
cellHtml += '<span style="font-weight:bold;margin-left:5px;vertical-align:top;font-size:12px;">&darr;</span>';
} else {
cellHtml += '<span style="font-weight:bold;margin-left:5px;vertical-align:top;font-size:12px;">&uarr;</span>';
}
}
}
cellHtml += '</th>';
return cellHtml;
}).join('');
@ -427,7 +535,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 +552,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) {
@ -536,6 +672,9 @@
query.StartIndex = 0;
query.IncludeItemTypes = this.value;
query.SortBy = getDefaultSortOrder(this.value);
query.SortOrder = "Ascending";
reloadItems(page);
});
@ -710,6 +849,9 @@
query.StartIndex = 0;
}
query.SortBy = getDefaultSortOrder($('#selectView', page).val());
query.SortOrder = "Ascending";
reloadItems(page);
}).on('pageshow', "#libraryReportPage", function () {

View file

@ -153,14 +153,15 @@
html += '<li><a href="livetvtimer.html?id=' + timer.Id + '">';
var program = timer.ProgramInfo;
var program = timer.ProgramInfo || {};
var imgUrl;
if (program.ImageTags && program.ImageTags.Primary) {
var programImages = program.ImageTags || {};
if (programImages.Primary) {
imgUrl = ApiClient.getImageUrl(program.Id, {
height: 160,
tag: program.ImageTags.Primary,
tag: programImages.Primary,
type: "Primary"
});
} else {
@ -234,9 +235,9 @@
userId: Dashboard.getCurrentUserId(),
seriesTimerId: id
}).done(function (result) {
}).done(function (recordingResult) {
renderRecordings(page, result);
renderRecordings(page, recordingResult);
});
@ -244,9 +245,9 @@
seriesTimerId: id
}).done(function (result) {
}).done(function (timerResult) {
renderSchedule(page, result);
renderSchedule(page, timerResult);
});
}

View file

@ -8,14 +8,14 @@
userId: Dashboard.getCurrentUserId(),
IsAiring: true,
limit: 10
limit: 12
}).done(function (result) {
var html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
shape: "square",
showTitle: true,
showParentTitle: true,
overlayText: true,
@ -31,14 +31,14 @@
userId: Dashboard.getCurrentUserId(),
IsAiring: false,
HasAired: false,
limit: 10
limit: 12
}).done(function (result) {
var html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
shape: "square",
showTitle: true,
showParentTitle: true,
overlayText: true,

View file

@ -7,7 +7,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "BoxSet",
Recursive: true,
Fields: "DateCreated,PrimaryImageAspectRatio",
Fields: "PrimaryImageAspectRatio",
StartIndex: 0
};
@ -26,19 +26,26 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
if (result.TotalRecordCount) {
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
context: 'movies',
useAverageAspectRatio: true,
showTitle: true,
centerText: true
});
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
context: 'movies',
useAverageAspectRatio: true,
showTitle: true,
centerText: true
});
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
} else {
html += '<p>Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating Collections.</p>';
}
$('#items', page).html(html).trigger('create').createPosterItemHoverMenu();
@ -60,6 +67,16 @@
LibraryBrowser.saveQueryValues('boxsets', query);
Dashboard.getCurrentUser().done(function(user) {
if (user.Configuration.IsAdministrator) {
$('#btnNewCollection', page).removeClass('hide');
} else {
$('#btnNewCollection', page).addClass('hide');
}
});
Dashboard.hideLoadingMsg();
});
}
@ -95,6 +112,13 @@
$('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater);
}
function showNewCollectionPanel(page) {
$('#newCollectionPanel', page).panel('toggle');
$('#txtNewCollectionName', page).val('').focus();
}
$(document).on('pageinit', "#boxsetsPage", function () {
var page = this;
@ -164,6 +188,11 @@
reloadItems(page);
});
$('#btnNewCollection', page).on('click', function () {
showNewCollectionPanel(page);
});
}).on('pagebeforeshow', "#boxsetsPage", function () {
var limit = LibraryBrowser.getDefaultPageSize();
@ -183,4 +212,37 @@
updateFilterControls(this);
});
window.BoxSetsPage = {
onNewCollectionSubmit: function () {
Dashboard.showLoadingMsg();
var page = $(this).parents('.page');
var url = ApiClient.getUrl("Collections", {
Name: $('#txtNewCollectionName', page).val(),
IsLocked: !$('#chkEnableInternetMetadata', page).checked()
});
$.ajax({
type: "POST",
url: url
}).done(function () {
Dashboard.hideLoadingMsg();
$('#newCollectionPanel', page).panel('toggle');
reloadItems(page);
});
return false;
}
};
})(jQuery, document);

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
@ -66,36 +63,12 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
}
$(document).on('pageinit', "#movieGenresPage", function () {
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -27,9 +27,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
@ -68,19 +65,6 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.chkPersonTypeFilter', page).each(function () {
var filters = "," + (query.PersonTypes || "");
@ -97,18 +81,6 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -9,7 +9,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "Movie",
Recursive: true,
Fields: "DateCreated,PrimaryImageAspectRatio",
Fields: "PrimaryImageAspectRatio",
StartIndex: 0
};

View file

@ -0,0 +1,60 @@
(function ($, document) {
$(document).on('pagebeforeshow', "#moviesLatestPage", function () {
var screenWidth = $(window).width();
var page = this;
var options = {
SortBy: "DateCreated",
SortOrder: "Descending",
IncludeItemTypes: "Movie",
Limit: screenWidth >= 1920 ? 32 : (screenWidth >= 1440 ? 24 : (screenWidth >= 800 ? 18 : 12)),
Recursive: true,
Fields: "PrimaryImageAspectRatio",
Filters: "IsUnplayed"
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
$('#recentlyAddedItems', page).html(LibraryBrowser.getPosterViewHtml({
items: result.Items,
useAverageAspectRatio: true
})).createPosterItemHoverMenu();
});
options = {
SortBy: "DateCreated",
SortOrder: "Descending",
IncludeItemTypes: "Trailer",
Limit: screenWidth >= 1920 ? 8 : (screenWidth >= 1440 ? 8 : 6),
Recursive: true,
Fields: "PrimaryImageAspectRatio",
Filters: "IsUnplayed"
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
if (result.Items.length) {
$('#trailerSection', page).show();
} else {
$('#trailerSection', page).hide();
}
$('#trailerItems', page).html(LibraryBrowser.getPosterViewHtml({
items: result.Items,
useAverageAspectRatio: true
})).createPosterItemHoverMenu();
});
});
})(jQuery, document);

View file

@ -1,5 +1,41 @@
(function ($, document) {
function getRecommendationHtml(recommendation) {
var html = '';
var title = '';
switch (recommendation.RecommendationType) {
case 'SimilarToRecentlyPlayed':
title = 'Because you watched ' + recommendation.BaselineItemName;
break;
case 'SimilarToLikedItem':
title = 'Because you like ' + recommendation.BaselineItemName;
break;
case 'HasDirectorFromRecentlyPlayed':
case 'HasLikedDirector':
title = 'Directed by ' + recommendation.BaselineItemName;
break;
case 'HasActorFromRecentlyPlayed':
case 'HasLikedActor':
title = 'Starring ' + recommendation.BaselineItemName;
break;
}
html += '<h1 class="listHeader">' + title + '</h1>';
html += '<div>';
html += LibraryBrowser.getPosterViewHtml({
items: recommendation.Items,
useAverageAspectRatio: true
});
html += '</div>';
return html;
}
$(document).on('pagebeforeshow', "#moviesRecommendedPage", function () {
var screenWidth = $(window).width();
@ -8,34 +44,13 @@
var options = {
SortBy: "DateCreated",
SortOrder: "Descending",
IncludeItemTypes: "Movie",
Limit: screenWidth >= 1920 ? 21 : (screenWidth >= 1440 ? 16 : 12),
Recursive: true,
Fields: "PrimaryImageAspectRatio,DateCreated,UserData",
Filters: "IsUnplayed"
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
$('#recentlyAddedItems', page).html(LibraryBrowser.getPosterViewHtml({
items: result.Items,
useAverageAspectRatio: true
})).createPosterItemHoverMenu();
});
options = {
SortBy: "DatePlayed",
SortOrder: "Descending",
IncludeItemTypes: "Movie",
Filters: "IsResumable",
Limit: screenWidth >= 1920 ? 4 : (screenWidth >= 1440 ? 4 : 3),
Recursive: true,
Fields: "DateCreated,UserData"
Fields: "PrimaryImageAspectRatio"
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
@ -57,33 +72,26 @@
});
options = {
SortBy: "DateCreated",
SortOrder: "Descending",
IncludeItemTypes: "Trailer",
Limit: screenWidth >= 1920 ? 7 : (screenWidth >= 1440 ? 8 : 6),
Recursive: true,
Fields: "PrimaryImageAspectRatio,DateCreated,UserData",
Filters: "IsUnplayed"
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
if (result.Items.length) {
$('#trailerSection', page).show();
} else {
$('#trailerSection', page).hide();
}
$('#trailerItems', page).html(LibraryBrowser.getPosterViewHtml({
items: result.Items,
useAverageAspectRatio: true
})).createPosterItemHoverMenu();
var url = ApiClient.getUrl("Movies/Recommendations", {
userId: Dashboard.getCurrentUserId(),
categoryLimit: screenWidth >= 1200 ? 6 : 3,
itemLimit: screenWidth >= 1920 ? 8 : (screenWidth >= 1440 ? 8 : 6),
Fields: "PrimaryImageAspectRatio"
});
$.getJSON(url).done(function(recommendations) {
if (!recommendations.length) {
$('.recommendations', page).html('<br/><p>No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.</p>');
return;
}
var html = recommendations.map(getRecommendationHtml).join('');
$('.recommendations', page).html(html).createPosterItemHoverMenu();
});
});

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
@ -65,37 +62,12 @@
}
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
}
$(document).on('pageinit', "#movieStudiosPage", function () {
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -7,7 +7,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "Trailer",
Recursive: true,
Fields: "DateCreated,PrimaryImageAspectRatio",
Fields: "PrimaryImageAspectRatio",
StartIndex: 0
};

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "square",
@ -66,19 +63,6 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater);
}
@ -86,18 +70,6 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -9,7 +9,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "MusicAlbum",
Recursive: true,
Fields: "DateCreated,PrimaryImageAspectRatio",
Fields: "PrimaryImageAspectRatio",
StartIndex: 0
};

View file

@ -25,9 +25,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "square",
@ -65,19 +62,6 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater);
}
@ -85,18 +69,6 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
@ -66,36 +63,12 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
}
$(document).on('pageinit', "#musicGenresPage", function () {
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -94,7 +94,7 @@
}
html += "</div>";
html += "<div class='posterItemText' style='color:#000;font-weight:400;font-size:16px;'>";
html += "<div class='posterItemText' style='color:#000;font-weight:400;font-size:14px;'>";
var installedPlugin = plugin.isApp ? null : installedPlugins.filter(function (ip) {
return ip.Name == plugin.name;
@ -108,7 +108,7 @@
html += "</div>";
html += "<div class='posterItemText packageReviewText' style='color:#000;font-weight:400;font-size:15px;'>";
html += "<div class='posterItemText packageReviewText' style='color:#000;font-weight:400;font-size:14px;'>";
html += plugin.price > 0 ? "$" + plugin.price.toFixed(2) : "Free";
html += Dashboard.getStoreRatingHtml(plugin.avgRating, plugin.id, plugin.name);

View file

@ -721,14 +721,18 @@ var Dashboard = {
name: "Metadata",
href: "metadata.html",
selected: pageElem.id == "metadataConfigurationPage" || pageElem.id == "advancedMetadataConfigurationPage" || pageElem.id == "metadataImagesConfigurationPage"
}, {
name: "Plugins",
href: "plugins.html",
selected: page.hasClass("pluginConfigurationPage")
}, {
name: "Auto-Organize",
href: "autoorganizelog.html",
selected: page.hasClass("organizePage")
}, {
name: "Plugins",
href: "plugins.html",
selected: page.hasClass("pluginConfigurationPage")
name: "DLNA",
href: "dlnasettings.html",
selected: page.hasClass("dlnaPage")
}, {
name: "Live TV",
href: "livetvstatus.html",
@ -1141,9 +1145,7 @@ var Dashboard = {
return;
}
var pageElem = page[0];
if (pageElem.hasPageTitle) {
if ($('.pageTitle', page).length) {
return;
}
@ -1154,8 +1156,6 @@ var Dashboard = {
}
$(parent).prepend("<h2 class='pageTitle'>" + (document.title || "&nbsp;") + "</h2>");
pageElem.hasPageTitle = true;
},
setPageTitle: function (title) {

View file

@ -9,7 +9,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "Audio",
Recursive: true,
Fields: "DateCreated,AudioInfo,ParentId",
Fields: "AudioInfo,ParentId",
Limit: 200,
StartIndex: 0
};

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
useAverageAspectRatio: true,
@ -69,19 +66,6 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.chkStandardFilter', page).each(function () {
var filters = "," + (query.Filters || "");
@ -96,18 +80,6 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -27,9 +27,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
@ -68,19 +65,6 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.chkStandardFilter', page).each(function () {
var filters = "," + (query.Filters || "");
@ -106,18 +90,6 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -9,7 +9,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "Series",
Recursive: true,
Fields: "SeriesInfo,DateCreated,PrimaryImageAspectRatio",
Fields: "SeriesInfo,PrimaryImageAspectRatio",
StartIndex: 0
};

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
useAverageAspectRatio: true,
@ -69,19 +66,6 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.chkStandardFilter', page).each(function () {
var filters = "," + (query.Filters || "");
@ -96,18 +80,6 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -6,58 +6,29 @@
var query = {
SortBy: "PremiereDate,AirTime,SortName",
SortOrder: "Ascending",
IncludeItemTypes: "Episode",
Limit: 30,
Recursive: true,
Fields: "SeriesInfo,UserData"
Limit: 32,
Fields: "SeriesInfo,UserData",
UserId: Dashboard.getCurrentUserId()
};
var missedItemsQuery = $.extend({
$.getJSON(ApiClient.getUrl("Shows/Upcoming", query)).done(function (result) {
IsUnaired: false
var items = result.Items;
}, query);
var yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
yesterday.setHours(0, 0, 0, 0);
missedItemsQuery.MinPremiereDate = yesterday.toISOString();
var unairedQuery = $.extend({
IsUnaired: true
}, query);
var promise1 = ApiClient.getItems(Dashboard.getCurrentUserId(), missedItemsQuery);
var promise2 = ApiClient.getItems(Dashboard.getCurrentUserId(), unairedQuery);
$.when(promise1, promise2).done(function (response1, response2) {
var missedItems = response1[0].Items;
var unairedItems = response2[0].Items;
for (var i = 0, length = unairedItems.length; i < length; i++) {
missedItems.push(unairedItems[i]);
}
if (!missedItems.length) {
if (!items.length) {
$('#upcomingItems', page).html("<p>Nothing here. Please ensure <a href='metadata.html'>downloading of internet metadata</a> is enabled.</p>").trigger('create');
return;
}
$('#upcomingItems', page).html(LibraryBrowser.getPosterViewHtml({
items: missedItems,
items: items,
showLocationTypeIndicator: false,
shape: "backdrop",
showTitle: true,
showPremiereDate: true,
showPremiereDateIndex: true,
preferThumb: true
})).createPosterItemHoverMenu();
});
});

View file

@ -14,9 +14,10 @@
// After saving chapter task, now save server config
ApiClient.getServerConfiguration().done(function (config) {
config.ImageSavingConvention = $('#selectImageSavingConvention', page).val();
config.EnableMovieChapterImageExtraction = $('#chkMovies', page).checked();
config.EnableUPnP = $('#chkEnableUpnp', page).checked();
ApiClient.updateServerConfiguration(config).done(function (result) {
navigateToNextPage();

View file

@ -11,6 +11,8 @@
config.MetadataCountryCode = $('#selectCountry', page).val();
config.SaveLocalMeta = $('#chkSaveLocalMetadata', page).checked();
config.EnableInternetProviders = $('#chkEnableInternetProviders', page).checked();
ApiClient.updateServerConfiguration(config).done(function (result) {
navigateToNextPage();