1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
Conflicts:
	MediaBrowser.WebDashboard/dashboard-ui/scripts/mediaplayer.js
This commit is contained in:
Tim Hobbs 2014-03-05 04:27:13 -08:00
commit f9541e56fd
228 changed files with 1459 additions and 189 deletions

View file

@ -13,6 +13,8 @@
$('#txtPortNumber', page).val(config.HttpServerPortNumber);
$('#txtDdns', page).val(config.WanDdns || '');
$('#chkEnableUpnp', page).checked(config.EnableUPnP).checkboxradio('refresh');
Dashboard.hideLoadingMsg();
@ -49,6 +51,8 @@
config.HttpServerPortNumber = $('#txtPortNumber', form).val();
config.EnableUPnP = $('#chkEnableUpnp', form).checked();
config.WanDdns = $('#txtDdns', form).val();
ApiClient.updateServerConfiguration(config).done(Dashboard.processServerConfigurationUpdateResult);
});

View file

@ -538,6 +538,15 @@
$('.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;

View file

@ -31,7 +31,7 @@
$.when(promise1, promise2, promise3).done(function (response1, response2, response3) {
var item = response1[0];
currentItem = item;
if (item.Type == "UserRootFolder") {
@ -271,7 +271,6 @@
$('#fldSortName', page).hide();
$('#fldDateAdded', page).hide();
$('#fldYear', page).hide();
$('.fldRefresh', page).hide();
} else {
$('#tagsCollapsible', page).show();
$('#metadataSettingsCollapsible', page).show();
@ -279,7 +278,12 @@
$('#fldSortName', page).show();
$('#fldDateAdded', page).show();
$('#fldYear', page).show();
$('.fldRefresh', 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") {
$('#btnIdentify', page).show();
} else {
$('#btnIdentify', page).hide();
}
if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "BoxSet") {
@ -713,7 +717,7 @@
Revenue: $('#txtRevenue', form).val(),
CriticRating: $('#txtCriticRating', form).val(),
CriticRatingSummary: $('#txtCriticRatingSummary', form).val(),
IndexNumber: $('#txtIndexNumber', form).val(),
IndexNumber: $('#txtIndexNumber', form).val() || null,
DisplaySpecialsWithSeasons: $('#chkDisplaySpecialsInline', form).checked(),
AbsoluteEpisodeNumber: $('#txtAbsoluteEpisodeNumber', form).val(),
DvdEpisodeNumber: $('#txtDvdEpisodeNumber', form).val(),
@ -721,7 +725,7 @@
AirsBeforeSeasonNumber: $('#txtAirsBeforeSeason', form).val(),
AirsAfterSeasonNumber: $('#txtAirsAfterSeason', form).val(),
AirsBeforeEpisodeNumber: $('#txtAirsBeforeEpisode', form).val(),
ParentIndexNumber: $('#txtParentIndexNumber', form).val(),
ParentIndexNumber: $('#txtParentIndexNumber', form).val() || null,
DisplayOrder: $('#selectDisplayOrder', form).val(),
Players: $('#txtPlayers', form).val(),
Album: $('#txtAlbum', form).val(),
@ -809,6 +813,10 @@
Dashboard.alert('Item saved.');
MetadataEditor.getItemPromise().done(function (i) {
$(form).parents('.page').trigger('itemsaved', [i]);
});
});
return false;
@ -851,10 +859,217 @@
return false;
};
self.onIdentificationFormSubmitted = function () {
var page = $(this).parents('.page');
searchForIdentificationResults(page);
return false;
};
}
window.EditItemMetadataPage = new editItemMetadataPage();
function showIdentificationForm(page) {
var item = currentItem;
$.getJSON(ApiClient.getUrl("Items/" + item.Id + "/ExternalIdInfos")).done(function (idList) {
var html = '';
var providerIds = item.ProviderIds || {};
for (var i = 0, length = idList.length; i < length; i++) {
var idInfo = idList[i];
var id = "txtLookup" + idInfo.Key;
html += '<div data-role="fieldcontain">';
html += '<label for="' + id + '">' + idInfo.Name + ' Id:</label>';
var value = providerIds[idInfo.Key] || '';
html += '<input class="txtLookupId" value="' + value + '" data-providerkey="' + idInfo.Key + '" id="' + id + '" data-mini="true" />';
html += '</div>';
}
$('#txtLookupName', page).val(item.Name);
if (item.Type == "Person" || item.Type == "BoxSet") {
$('.fldLookupYear', page).hide();
$('#txtLookupYear', page).val('');
} else {
$('.fldLookupYear', page).show();
$('#txtLookupYear', page).val(item.ProductionYear);
}
$('.identifyProviderIds', page).html(html).trigger('create');
var friendlyName = item.Type == "BoxSet" ? "Collection" : item.Type;
$('.identificationHeader', page).html('Identify ' + friendlyName);
$('.popupIdentifyForm', page).show();
$('.identificationSearchResults', page).hide();
$('.btnSearchAgain', page).hide();
$('.popupIdentify', page).popup('open');
});
}
function searchForIdentificationResults(page) {
var lookupInfo = {
ProviderIds: {}
};
$('.identifyField', page).each(function () {
var value = this.value;
if (value) {
if (this.type == 'number') {
value = parseInt(value);
}
lookupInfo[this.getAttribute('data-lookup')] = value;
}
});
var hasId = false;
$('.txtLookupId', page).each(function () {
var value = this.value;
if (value) {
hasId = true;
}
lookupInfo.ProviderIds[this.getAttribute('data-providerkey')] = value;
});
if (!hasId && !lookupInfo.Name) {
Dashboard.alert('Please enter a name or an external Id.');
return;
}
if (currentItem.GameSystem) {
lookupInfo.GameSystem = currentItem.GameSystem;
}
lookupInfo = {
SearchInfo: lookupInfo,
IncludeDisabledProviders: true
};
Dashboard.showLoadingMsg();
$.ajax({
type: "POST",
url: ApiClient.getUrl("Items/RemoteSearch/" + currentItem.Type),
data: JSON.stringify(lookupInfo),
contentType: "application/json"
}).done(function (results) {
Dashboard.hideLoadingMsg();
showIdentificationSearchResults(page, results);
});
}
function getSearchImageDisplayUrl(url, provider) {
return ApiClient.getUrl("Items/RemoteSearch/Image", { imageUrl: url, ProviderName: provider });
}
function showIdentificationSearchResults(page, results) {
$('.popupIdentifyForm', page).hide();
$('.identificationSearchResults', page).show();
$('.btnSearchAgain', page).show();
var html = '';
for (var i = 0, length = results.length; i < length; i++) {
var result = results[i];
var cssClass = "searchImageContainer remoteImageContainer";
if (currentItem.Type == "Episode") {
cssClass += " searchBackdropImageContainer";
}
else if (currentItem.Type == "MusicAlbum" || currentItem.Type == "MusicArtist") {
cssClass += " searchDiscImageContainer";
}
else {
cssClass += " searchPosterImageContainer";
}
html += '<div class="' + cssClass + '">';
if (result.ImageUrl) {
var displayUrl = getSearchImageDisplayUrl(result.ImageUrl, result.SearchProviderName);
html += '<a href="#" class="searchImage" data-index="' + i + '" style="background-image:url(\'' + displayUrl + '\');">';
} else {
html += '<a href="#" class="searchImage" data-index="' + i + '" style="background-image:url(\'css/images/items/list/remotesearch.png\');background-position: center center;">';
}
html += '</a>';
html += '<div class="remoteImageDetails">';
html += result.Name;
html += '</div>';
html += '<div class="remoteImageDetails">';
html += result.ProductionYear || '&nbsp;';
html += '</div>';
if (result.GameSystem) {
html += '<div class="remoteImageDetails">';
html += result.GameSystem;
html += '</div>';
}
html += '</div>';
}
var elem = $('.identificationSearchResultList', page).html(html).trigger('create');
$('.searchImage', elem).on('click', function () {
Dashboard.showLoadingMsg();
var index = parseInt(this.getAttribute('data-index'));
var currentResult = results[index];
$.ajax({
type: "POST",
url: ApiClient.getUrl("Items/RemoteSearch/Apply/" + currentItem.Id),
data: JSON.stringify(currentResult),
contentType: "application/json"
}).done(function () {
Dashboard.hideLoadingMsg();
$('.popupIdentify', page).popup('close');
reload(page);
});
});
}
$(document).on('pageinit', "#editItemMetadataPage", function () {
var page = this;
@ -900,6 +1115,19 @@
});
});
$('#btnIdentify', page).on('click', function () {
showIdentificationForm(page);
});
$('.btnSearchAgain', page).on('click', function () {
$('.popupIdentifyForm', page).show();
$('.identificationSearchResults', page).hide();
$('.btnSearchAgain', page).hide();
});
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
@ -937,6 +1165,11 @@
$('.libraryTree', page).on('itemclicked', function (event, data) {
if (data.itemType == "libraryreport") {
Dashboard.navigate('libraryreport.html');
return;
}
if (data.itemType == "livetvservice") {
return;
}

View file

@ -254,6 +254,15 @@
$('.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;

View file

@ -4,6 +4,15 @@
var state = item.IsFolder ? folderState : '';
var htmlName = getNodeInnerHtml(item);
var rel = item.IsFolder ? 'folder' : 'default';
return { attr: { id: item.Id, rel: rel, itemtype: item.Type }, data: htmlName, state: state };
}
function getNodeInnerHtml(item) {
var name = item.Name;
// Channel number
@ -62,12 +71,10 @@
htmlName += "</div>";
var rel = item.IsFolder ? 'folder' : 'default';
return { attr: { id: item.Id, rel: rel, itemtype: item.Type }, data: htmlName, state: state };
return htmlName;
}
function loadChildrenOfRootNode(callback, openItems) {
function loadChildrenOfRootNode(page, callback, openItems, selectedId) {
var promise1 = $.getJSON(ApiClient.getUrl("Library/MediaFolders"));
@ -95,9 +102,7 @@
var name = service.Name;
var cssClass = "editorNode";
var htmlName = "<div class='" + cssClass + "'>";
var htmlName = "<div class='editorNode'>";
htmlName += name;
@ -106,8 +111,18 @@
nodes.push({ attr: { id: name, rel: 'folder', itemtype: 'livetvservice' }, data: htmlName, state: 'closed' });
}
nodes.push({ attr: { id: 'libraryreport', rel: 'default', itemtype: 'libraryreport' }, data: 'Reports' });
callback(nodes);
if (selectedId && nodes.filter(function (f) {
return f.attr.id == selectedId;
}).length) {
selectNode(page, selectedId);
}
});
}
@ -133,7 +148,7 @@
if (node == '-1') {
loadChildrenOfRootNode(callback, openItems);
loadChildrenOfRootNode(page, callback, openItems, selectedId);
return;
}
@ -141,6 +156,11 @@
var itemtype = node.attr("itemtype");
if (itemtype == 'libraryreport') {
return;
}
if (itemtype == 'livetvservice') {
loadLiveTvChannels(id, openItems, callback);
@ -231,8 +251,32 @@
});
}
function updateEditorNode(page, item) {
$(document).on('pagebeforeshow', ".metadataEditorPage", function () {
var elem = $('#' + item.Id + '>a', page)[0];
if (elem == null) {
return;
}
$('.editorNode', elem).remove();
$(elem).append(getNodeInnerHtml(item));
if (item.IsFolder) {
var tree = jQuery.jstree._reference(".libraryTree");
var currentNode = tree._get_node(null, false);
tree.refresh(currentNode);
}
}
$(document).on('itemsaved', ".metadataEditorPage", function (e, item) {
updateEditorNode(this, item);
}).on('pagebeforeshow', ".metadataEditorPage", function () {
window.MetadataEditor = new metadataEditor();

View file

@ -35,7 +35,7 @@
$('#editButtonContainer', page).hide();
}
if (MediaPlayer.canPlay(item, user) && item.LocationType !== "Offline" && item.LocationType !== "Virtual") {
if (MediaPlayer.canPlay(item, user)) {
var url = MediaPlayer.getPlayUrl(item);

View file

@ -373,9 +373,9 @@
if (sortField == selectedSortField) {
if (sortDirection == "Descending") {
html += '<span style="font-weight:bold;margin-left:3px;">&darr;</span>';
html += '<span style="font-weight:bold;margin-left:5px;vertical-align:top;font-size:12px;">&darr;</span>';
} else {
html += '<span style="font-weight:bold;margin-left:3px;">&uarr;</span>';
html += '<span style="font-weight:bold;margin-left:5px;vertical-align:top;font-size:12px;">&uarr;</span>';
}
}
}
@ -906,6 +906,10 @@
html += LibraryBrowser.getPlayedIndicatorHtml(item);
}
if (item.IsUnidentified) {
html += '<div class="unidentifiedIndicator"><div class="ui-icon-alert ui-btn-icon-notext"></div></div>';
}
if (!options.overlayText) {
if (progressHtml) {
@ -1359,7 +1363,7 @@
html += '<div class="listPaging">';
html += '<span style="margin-right: 10px;">';
html += '<span style="margin-right: 10px;vertical-align:middle;">';
var startAtDisplay = totalRecordCount ? query.StartIndex + 1 : 0;
html += startAtDisplay + '-' + recordsEnd + ' of ' + totalRecordCount;
@ -1756,7 +1760,8 @@
if (item.Status == "Continuing") {
miscInfo.push(item.ProductionYear + "-Present");
} else if (item.ProductionYear) {
}
else if (item.ProductionYear) {
text = item.ProductionYear;

View file

@ -0,0 +1,721 @@
(function ($, document, window) {
// The base query options
var query = {
SortBy: "SeriesSortName,SortName",
SortOrder: "Ascending",
Recursive: true,
Fields: "MediaStreams,DateCreated,Settings,Studios",
StartIndex: 0,
IncludeItemTypes: "Movie",
IsMissing: false,
IsVirtualUnaired: false
};
function getHeaderCells(reportType) {
switch (reportType) {
case 'Season':
{
return [
{},
{ name: 'Series' },
{ name: 'Season' },
{ name: 'Date Added' }
];
}
case 'Series':
{
return [
{},
{ name: 'Name' },
{ name: 'Network' },
{ name: 'Date Added' },
{ name: 'Year' },
{ name: 'Rating' },
{ name: 'Runtime' },
{ name: 'Trailers' },
{ name: 'Specials' }
];
}
case 'Game':
{
return [
{},
{ name: 'Name' },
{ name: 'Game System' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Rating' },
{ name: 'Players' },
{ name: 'Trailers' }
];
}
case 'Audio':
{
return [
{},
{ name: 'Album Artist' },
{ name: 'Album' },
{ name: 'Track' },
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Runtime' },
{ name: 'Audio' },
{ name: 'Embedded Image' }
];
}
case 'Episode':
{
return [
{},
{ name: 'Series' },
{ name: 'Season' },
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Runtime' },
{ name: 'Video' },
{ name: 'Audio' },
{ name: 'Subtitles' }
];
}
case 'BoxSet':
{
return [
{},
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Rating' },
{ name: 'Trailers' }
];
}
case 'Book':
{
return [
{},
{ name: 'Series' },
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Rating' }
];
}
case 'MusicArtist':
{
return [
{},
{ name: 'Name' },
{ name: 'Date Added' }
];
}
case 'MusicAlbum':
{
return [
{},
{ name: 'Album Artist' },
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Rating' },
{ name: 'Runtime' }
];
}
default:
{
return [
{},
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Rating' },
{ name: 'Runtime' },
{ name: 'Video' },
{ name: 'Audio' },
{ name: 'Subtitles' },
{ name: 'Trailers' },
{ name: 'Specials' }
];
}
}
}
function getItemCellsHtml(item, headercells) {
return headercells.map(function (cell) {
var html = '';
html += '<td>';
switch (cell.type || cell.name) {
case 'Album Artist':
{
html += item.AlbumArtist || '&nbsp;';
break;
}
case 'Album':
{
html += item.Album || '&nbsp;';
break;
}
case 'Series':
{
html += item.SeriesName || '&nbsp;';
break;
}
case 'Game System':
{
html += item.GameSystem || '&nbsp;';
break;
}
case 'Network':
{
html += item.Studios.length ? item.Studios[0].Name : '&nbsp;';
break;
}
case 'Track':
{
html += item.IndexNumber == null ? '' : item.IndexNumber;
break;
}
case 'Players':
{
html += item.Players || '&nbsp;';
break;
}
case 'Audio':
{
var stream = (item.MediaStreams || []).filter(function (s) {
return s.Type == 'Audio';
})[0];
if (stream) {
var name = (stream.Codec || '').toUpperCase();
html += name == 'DCA' ? (stream.Profile || '').toUpperCase() : name;
}
break;
}
case 'Video':
{
var stream = (item.MediaStreams || []).filter(function (s) {
return s.Type == 'Video';
})[0];
if (stream) {
html += (stream.Codec || '').toUpperCase();
}
break;
}
case 'Embedded Image':
{
if ((item.MediaStreams || []).filter(function (s) {
return s.Type == 'Video';
}).length) {
html += '<div class="libraryReportIndicator clearLibraryReportIndicator"><div class="ui-icon-check ui-btn-icon-notext"></div></div>';
}
break;
}
case 'Subtitles':
{
var hasSubtitles = (item.MediaStreams || []).filter(function (s) {
return s.Type == 'Subtitle';
}).length;
if (hasSubtitles) {
html += '<div class="libraryReportIndicator clearLibraryReportIndicator"><div class="ui-icon-check ui-btn-icon-notext"></div></div>';
}
break;
}
case 'Runtime':
{
if (item.RunTimeTicks) {
html += Dashboard.getDisplayTime(item.RunTimeTicks);
} else {
html += '&nbsp;';
}
break;
}
case 'Trailers':
{
if (item.LocalTrailerCount) {
html += '<div class="libraryReportIndicator clearLibraryReportIndicator"><div class="ui-icon-check ui-btn-icon-notext"></div></div>';
}
break;
}
case 'Specials':
{
if (item.SpecialFeatureCount) {
html += '<div class="libraryReportIndicator clearLibraryReportIndicator"><div class="ui-icon-check ui-btn-icon-notext"></div></div>';
}
break;
}
case 'Season':
{
if (item.Type == "Episode") {
html += item.ParentIndexNumber == null ? '' : ('Season ' + item.ParentIndexNumber);
} else {
html += '<a href="edititemmetadata.html?id=' + item.Id + '">' + LibraryBrowser.getPosterViewDisplayName(item, false, false) + '</a>';
}
break;
}
case 'Name':
{
html += '<a href="edititemmetadata.html?id=' + item.Id + '">' + LibraryBrowser.getPosterViewDisplayName(item, false, false) + '</a>';
break;
}
case 'Rating':
{
html += item.OfficialRating || '&nbsp;';
break;
}
case 'Year':
case 'Release Date':
{
if (item.PremiereDate && item.Type != "Series") {
try {
var date = parseISO8601Date(item.PremiereDate, { toLocal: true });
html += date.toLocaleDateString();
}
catch (e) {
html += '&nbsp;';
}
}
else if (item.ProductionYear) {
html += item.ProductionYear;
if (item.Status == "Continuing") {
html += "-Present";
}
else if (item.EndDate) {
try {
var endYear = parseISO8601Date(item.EndDate, { toLocal: true }).getFullYear();
if (endYear != item.ProductionYear) {
html += "-" + parseISO8601Date(item.EndDate, { toLocal: true }).getFullYear();
}
}
catch (e) {
console.log("Error parsing date: " + item.EndDate);
}
}
} else {
html += '&nbsp;';
}
break;
}
case 'Date Added':
{
if (item.DateCreated) {
try {
html += parseISO8601Date(item.DateCreated, { toLocal: true }).toLocaleDateString();
}
catch (e) {
html += '&nbsp;';
}
}
break;
}
default:
{
if (item.LockData) {
html += '<img src="css/images/editor/lock.png" />';
}
if (item.IsUnidentified) {
html += '<div class="libraryReportIndicator"><div class="ui-icon-alert ui-btn-icon-notext"></div></div>';
}
if (!item.LocalTrailerCount && item.Type == "Movie") {
html += '<img src="css/images/editor/missingtrailer.png" title="Missing local trailer." />';
}
if (!item.ImageTags || !item.ImageTags.Primary) {
html += '<a href="edititemimages.html?id=' + item.Id + '"><img src="css/images/editor/missingprimaryimage.png" title="Missing primary image." /></a>';
}
if (!item.BackdropImageTags || !item.BackdropImageTags.length) {
if (item.Type !== "Episode" && item.Type !== "Season" && item.MediaType !== "Audio" && item.Type !== "Channel") {
html += '<a href="edititemimages.html?id=' + item.Id + '"><img src="css/images/editor/missingbackdrop.png" title="Missing backdrop image." /></a>';
}
}
if (!item.ImageTags || !item.ImageTags.Logo) {
if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "Series" || item.Type == "MusicArtist" || item.Type == "BoxSet") {
html += '<a href="edititemimages.html?id=' + item.Id + '"><img src="css/images/editor/missinglogo.png" title="Missing logo image." /></a>';
}
}
break;
}
}
html += '</td>';
return html;
}).join('');
}
function getReportHtml(items, reportType) {
var html = '';
html += '<table data-role="table" data-mode="reflow" class="tblLibraryReport detailTable stripedTable ui-responsive table-stroke" style="display: table;">';
html += '<thead>';
html += '<tr>';
var cells = getHeaderCells(reportType);
html += cells.map(function (c) {
return '<th>' + (c.name || '&nbsp;') + '</th>';
}).join('');
html += '</tr>';
html += '</thead>';
html += '<tbody>';
for (var i = 0, length = items.length; i < length; i++) {
var item = items[i];
html += '<tr>';
html += getItemCellsHtml(item, cells);
html += '</tr>';
}
html += '</tbody>';
html += '</table>';
return html;
}
function renderItems(page, result, reportType) {
// Scroll back up so they can see the results from the beginning
$(document).scrollTop(0);
$('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, true)).trigger('create');
updateFilterControls(page);
$('.listBottomPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount)).trigger('create');
$('.reportContainer', page).html(getReportHtml(result.Items, reportType)).trigger('create');
$('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit;
reloadItems(page);
});
$('.btnPreviousPage', page).on('click', function () {
query.StartIndex -= query.Limit;
reloadItems(page);
});
$('.selectPageSize', page).on('change', function () {
query.Limit = parseInt(this.value);
query.StartIndex = 0;
reloadItems(page);
});
}
function reloadItems(page) {
var url = ApiClient.getUrl("Items", query);
var reportType = $('#selectView', page).val();
$.getJSON(url).done(function (result) {
renderItems(page, result, reportType);
});
}
function updateFilterControls(page) {
$('#selectView').val(query.IncludeItemTypes).selectmenu('refresh');
$('.chkVideoTypeFilter', page).each(function () {
var filters = "," + (query.VideoTypes || "");
var filterName = this.getAttribute('data-filter');
this.checked = filters.indexOf(',' + filterName) != -1;
}).checkboxradio('refresh');
$('#chk3D', page).checked(query.Is3D == true).checkboxradio('refresh');
$('#chkHD', page).checked(query.IsHD == true).checkboxradio('refresh');
$('#chkSD', page).checked(query.IsHD == false).checkboxradio('refresh');
$('#chkSubtitle', page).checked(query.HasSubtitles == true).checkboxradio('refresh');
$('#chkTrailer', page).checked(query.HasTrailer == true).checkboxradio('refresh');
$('#chkSpecialFeature', page).checked(query.HasSpecialFeature == true).checkboxradio('refresh');
$('#chkThemeSong', page).checked(query.HasThemeSong == true).checkboxradio('refresh');
$('#chkThemeVideo', page).checked(query.HasThemeVideo == true).checkboxradio('refresh');
$('#chkIsPlaceHolder', page).checked(query.IsPlaceHolder == true).checkboxradio('refresh');
$('#chkMissingRating', page).checked(query.HasOfficialRating == false).checkboxradio('refresh');
$('#chkMissingOverview', page).checked(query.HasOverview == false).checkboxradio('refresh');
$('#chkYearMismatch', page).checked(query.IsYearMismatched == true).checkboxradio('refresh');
$('#chkIsUnidentified', page).checked(query.IsUnidentified == true).checkboxradio('refresh');
$('#chkIsLocked', page).checked(query.IsLocked == true).checkboxradio('refresh');
$('#chkSpecialEpisode', page).checked(query.ParentIndexNumber == 0).checkboxradio('refresh');
$('#chkMissingEpisode', page).checked(query.IsMissing == true).checkboxradio('refresh');
$('#chkFutureEpisode', page).checked(query.IsUnaired == true).checkboxradio('refresh');
}
$(document).on('pageinit', "#libraryReportPage", function () {
var page = this;
$('.libraryTree', page).on('itemclicked', function (event, data) {
if (data.itemType == "libraryreport") {
return;
}
if (data.itemType == "livetvservice") {
return;
}
Dashboard.navigate('edititemmetadata.html?id=' + data.id);
});
$('#radioBasicFilters', page).on('change', function () {
if (this.checked) {
$('.basicFilters', page).show();
$('.advancedFilters', page).hide();
} else {
$('.basicFilters', page).hide();
}
});
$('#radioAdvancedFilters', page).on('change', function () {
if (this.checked) {
$('.advancedFilters', page).show();
$('.basicFilters', page).hide();
} else {
$('.advancedFilters', page).hide();
}
});
$('#selectView', page).on('change', function () {
query.StartIndex = 0;
query.IncludeItemTypes = this.value;
reloadItems(page);
});
$('.chkVideoTypeFilter', page).on('change', function () {
var filterName = this.getAttribute('data-filter');
var filters = query.VideoTypes || "";
filters = (',' + filters).replace(',' + filterName, '').substring(1);
if (this.checked) {
filters = filters ? (filters + ',' + filterName) : filterName;
}
query.StartIndex = 0;
query.VideoTypes = filters;
reloadItems(page);
});
$('#chk3D', page).on('change', function () {
query.StartIndex = 0;
query.Is3D = this.checked ? true : null;
reloadItems(page);
});
$('#chkHD', page).on('change', function () {
query.StartIndex = 0;
query.IsHD = this.checked ? true : null;
reloadItems(page);
});
$('#chkSD', page).on('change', function () {
query.StartIndex = 0;
query.IsHD = this.checked ? false : null;
reloadItems(page);
});
$('#chkSubtitle', page).on('change', function () {
query.StartIndex = 0;
query.HasSubtitles = this.checked ? true : null;
reloadItems(page);
});
$('#chkTrailer', page).on('change', function () {
query.StartIndex = 0;
query.HasTrailer = this.checked ? true : null;
reloadItems(page);
});
$('#chkSpecialFeature', page).on('change', function () {
query.StartIndex = 0;
query.HasSpecialFeature = this.checked ? true : null;
reloadItems(page);
});
$('#chkIsPlaceHolder', page).on('change', function () {
query.StartIndex = 0;
query.IsPlaceHolder = this.checked ? true : null;
reloadItems(page);
});
$('#chkThemeSong', page).on('change', function () {
query.StartIndex = 0;
query.HasThemeSong = this.checked ? true : null;
reloadItems(page);
});
$('#chkThemeVideo', page).on('change', function () {
query.StartIndex = 0;
query.HasThemeVideo = this.checked ? true : null;
reloadItems(page);
});
$('#chkMissingOverview', page).on('change', function () {
query.StartIndex = 0;
query.HasOverview = this.checked ? false : null;
reloadItems(page);
});
$('#chkMissingRating', page).on('change', function () {
query.StartIndex = 0;
query.HasOfficialRating = this.checked ? false : null;
reloadItems(page);
});
$('#chkYearMismatch', page).on('change', function () {
query.StartIndex = 0;
query.IsYearMismatched = this.checked ? true : null;
reloadItems(page);
});
$('#chkIsUnidentified', page).on('change', function () {
query.StartIndex = 0;
query.IsUnidentified = this.checked ? true : null;
reloadItems(page);
});
$('#chkIsLocked', page).on('change', function () {
query.StartIndex = 0;
query.IsLocked = this.checked ? true : null;
reloadItems(page);
});
$('#chkMissingEpisode', page).on('change', function () {
query.StartIndex = 0;
query.IsMissing = this.checked ? true : false;
reloadItems(page);
});
$('#chkFutureEpisode', page).on('change', function () {
query.StartIndex = 0;
if (this.checked) {
query.IsUnaired = true;
query.IsVirtualUnaired = null;
} else {
query.IsUnaired = null;
query.IsVirtualUnaired = false;
}
reloadItems(page);
});
$('#chkSpecialEpisode', page).on('change', function () {
query.ParentIndexNumber = this.checked ? 0 : null;
reloadItems(page);
});
}).on('pagebeforeshow', "#libraryReportPage", function () {
var page = this;
var limit = LibraryBrowser.getDefaultPageSize();
// If the default page size has changed, the start index will have to be reset
if (limit != query.Limit) {
query.Limit = limit;
query.StartIndex = 0;
}
reloadItems(page);
}).on('pageshow', "#libraryReportPage", function () {
updateFilterControls(this);
});
})(jQuery, document, window);

View file

@ -24,29 +24,11 @@
self.playlist = [];
var currentPlaylistIndex = 0;
var channelsListPromise;
var channelsListPromiseTime;
function updateCanClientSeek(elem) {
var duration = elem.duration;
canClientSeek = duration && !isNaN(duration) && duration != Number.POSITIVE_INFINITY && duration != Number.NEGATIVE_INFINITY;
}
function getChannelsListPromise() {
var lastUpdateTime = channelsListPromiseTime || 0;
// Update every three minutes
if (!channelsListPromise || !lastUpdateTime || (new Date().getTime() - lastUpdateTime) > 10800000) {
channelsListPromise = ApiClient.getLiveTvChannels({
userId: Dashboard.getCurrentUserId()
});
}
return channelsListPromise;
}
function requestFullScreen(element) {
// Supports most browsers and their versions.
var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;
@ -353,16 +335,6 @@
hideFlyout($('#qualityFlyout'));
});
$('#channelsFlyout').on('click', '.mediaFlyoutOption', function () {
if (!$(this).hasClass('selectedMediaFlyoutOption')) {
var channelId = this.getAttribute('data-channelid');
self.playById(channelId);
}
hideFlyout($('#channelsFlyout'));
});
});
function endsWith(text, pattern) {
@ -476,7 +448,6 @@
$('#audioTracksButton', nowPlayingBar).hide();
$('#subtitleButton', nowPlayingBar).hide();
$('#chaptersButton', nowPlayingBar).hide();
$('#channelsButton', nowPlayingBar).hide();
$('#mediaElement', nowPlayingBar).html(html);
var audioElement = $("audio", nowPlayingBar);
@ -852,12 +823,6 @@
$('#fullscreenButton', nowPlayingBar).show();
}
if (isFullScreen() == false) {
repositionPlayer();
}
var channelsButton = $('#channelsButton', nowPlayingBar).hide();
var videoElement = $("video", nowPlayingBar);
var initialVolume = localStorage.getItem("volume") || 0.5;
@ -926,15 +891,6 @@
currentItem = item;
curentDurationTicks = item.RunTimeTicks;
getChannelsListPromise().done(function (result) {
if (result.Items.length) {
channelsButton.show();
} else {
channelsButton.hide();
}
});
return videoElement[0];
};
@ -1021,7 +977,7 @@
return false;
}
if (item.LocationType == "Virtual") {
if (item.LocationType == "Virtual" || item.IsPlaceHolder) {
return false;
}
if (item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "MusicGenre") {
@ -1923,61 +1879,6 @@
return html;
}
function getChannelsFlyoutHtml(channels) {
var html = '';
for (var i = 0, length = channels.length; i < length; i++) {
var channel = channels[i];
html += '<div data-channelid="' + channel.Id + '" class="mediaFlyoutOption">';
var imgUrl;
if (channel.ImageTags.Primary) {
imgUrl = ApiClient.getImageUrl(channel.Id, {
maxwidth: 200,
tag: channel.ImageTags.Primary,
type: "Primary"
});
}
else {
imgUrl = "css/images/media/tvflyout.png";
}
html += '<img class="mediaFlyoutOptionImage" src="' + imgUrl + '" />';
html += '<div class="mediaFlyoutOptionContent">';
var name = channel.Number + ' ' + channel.Name;
html += '<div class="mediaFlyoutOptionName">' + name + '</div>';
html += '<div class="mediaFlyoutOptionSecondaryText">' + channel.CurrentProgram.Name + '</div>';
html += '</div>';
html += "</div>";
}
return html;
}
self.showChannelsFlyout = function () {
var flyout = $('#channelsFlyout');
if (!flyout.is(':visible')) {
getChannelsListPromise().done(function (result) {
showFlyout(flyout, '#channelsButton');
flyout.html(getChannelsFlyoutHtml(result.Items)).scrollTop(0);
});
}
};
self.showAudioTracksFlyout = function () {
var flyout = $('#audioTracksFlyout');

View file

@ -176,24 +176,6 @@
reloadItems(page);
});
$('.chkVideoTypeFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');
var filters = query.VideoTypes || "";
filters = (',' + filters).replace(',' + filterName, '').substring(1);
if (this.checked) {
filters = filters ? (filters + ',' + filterName) : filterName;
}
query.StartIndex = 0;
query.VideoTypes = filters;
reloadItems(page);
});
$('#selectView', this).on('change', function () {
view = this.value;
@ -212,6 +194,23 @@
LibraryBrowser.saveViewSetting('movies', view);
});
$('.chkVideoTypeFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');
var filters = query.VideoTypes || "";
filters = (',' + filters).replace(',' + filterName, '').substring(1);
if (this.checked) {
filters = filters ? (filters + ',' + filterName) : filterName;
}
query.StartIndex = 0;
query.VideoTypes = filters;
reloadItems(page);
});
$('#chk3D', this).on('change', function () {
query.StartIndex = 0;

View file

@ -131,16 +131,16 @@
html += '<div class="notificationContent">';
html += '<p class="notificationName">' + notification.Name + '</p>';
html += '<p style="margin: .4em 0 .25em;" class="notificationName">' + notification.Name + '</p>';
html += '<p>' + humane_date(notification.Date) + '</p>';
html += '<p style="margin: .25em 0;">' + humane_date(notification.Date) + '</p>';
if (notification.Description) {
html += '<p>' + notification.Description + '</p>';
html += '<p style="margin: .25em 0;">' + notification.Description + '</p>';
}
if (notification.Url) {
html += '<p><a href="' + notification.Url + '" target="_blank">More information</a></p>';
html += '<p style="margin: .25em 0;"><a href="' + notification.Url + '" target="_blank">More information</a></p>';
}
html += '</div>';

View file

@ -713,7 +713,7 @@ var Dashboard = {
href: "dashboard.html",
selected: page.hasClass("dashboardHomePage")
}, {
name: "Media Library",
name: "Library",
divider: true,
href: "library.html",
selected: page.hasClass("mediaLibraryPage")
@ -1347,9 +1347,6 @@ $(function () {
footerHtml += '<button onclick="MediaPlayer.toggleFullscreen();" id="fullscreenButton" class="mediaButton fullscreenButton" title="Fullscreen" type="button" data-icon="action" data-iconpos="notext" data-inline="true">Fullscreen</button>';
footerHtml += '<button onclick="MediaPlayer.showChannelsFlyout();" id="channelsButton" class="mediaButton channelsButton" title="TV Channels" type="button" data-icon="tv" data-iconpos="notext" data-inline="true">TV Channels</button>';
footerHtml += '<div class="mediaFlyoutContainer"><div id="channelsFlyout" style="display:none;" class="mediaPlayerFlyout channelsFlyout"></div></div>';
footerHtml += '<button onclick="MediaPlayer.showSendMediaMenu();" id="sendMediaButton" class="mediaButton sendMediaButton" title="Remote" type="button" data-icon="wireless" data-iconpos="notext" data-inline="true">Remote</button>';
footerHtml += '</div>';