mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
start to rework music tabs
This commit is contained in:
parent
d09b8462c4
commit
387550a5cf
12 changed files with 566 additions and 1555 deletions
|
@ -50,6 +50,8 @@
|
|||
// Some 1080- videos are reported as 1912?
|
||||
if (maxAllowedWidth >= 1900) {
|
||||
|
||||
options.push({ name: '1080p - 40Mbps', maxHeight: 1080, bitrate: 40000000 });
|
||||
options.push({ name: '1080p - 35Mbps', maxHeight: 1080, bitrate: 35000000 });
|
||||
options.push({ name: '1080p - 30Mbps', maxHeight: 1080, bitrate: 30000000 });
|
||||
options.push({ name: '1080p - 25Mbps', maxHeight: 1080, bitrate: 25000000 });
|
||||
options.push({ name: '1080p - 20Mbps', maxHeight: 1080, bitrate: 20000000 });
|
||||
|
|
|
@ -1,27 +1,46 @@
|
|||
(function ($, document) {
|
||||
|
||||
var view = LibraryBrowser.getDefaultItemsView('Thumb', 'Thumb');
|
||||
var data = {};
|
||||
function getPageData() {
|
||||
var key = getSavedQueryKey();
|
||||
var pageData = data[key];
|
||||
|
||||
// The base query options
|
||||
var query = {
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Audio,MusicVideo",
|
||||
Recursive: true,
|
||||
Fields: "DateCreated,SyncInfo,ItemCounts",
|
||||
StartIndex: 0,
|
||||
Limit: LibraryBrowser.getDefaultPageSize()
|
||||
},
|
||||
view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Thumb', 'Thumb')
|
||||
};
|
||||
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Audio,MusicVideo",
|
||||
Recursive: true,
|
||||
Fields: "DateCreated,SyncInfo,ItemCounts",
|
||||
StartIndex: 0
|
||||
};
|
||||
pageData.query.ParentId = LibraryMenu.getTopParentId();
|
||||
LibraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
return pageData;
|
||||
}
|
||||
|
||||
function getQuery() {
|
||||
|
||||
return getPageData().query;
|
||||
}
|
||||
|
||||
function getSavedQueryKey() {
|
||||
|
||||
return 'musicgenres' + (query.ParentId || '');
|
||||
return getWindowUrl();
|
||||
}
|
||||
|
||||
function reloadItems(page) {
|
||||
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
var query = getQuery();
|
||||
|
||||
ApiClient.getMusicGenres(Dashboard.getCurrentUserId(), query).done(function (result) {
|
||||
|
||||
// Scroll back up so they can see the results from the beginning
|
||||
|
@ -29,17 +48,19 @@
|
|||
|
||||
var html = '';
|
||||
|
||||
var view = getPageData().view;
|
||||
|
||||
$('.listTopPaging', page).html(LibraryBrowser.getQueryPagingHtml({
|
||||
startIndex: query.StartIndex,
|
||||
limit: query.Limit,
|
||||
totalRecordCount: result.TotalRecordCount,
|
||||
viewButton: true,
|
||||
showLimit: false,
|
||||
addSelectionButton: true
|
||||
updatePageSizeSetting: false,
|
||||
addLayoutButton: true,
|
||||
currentLayout: view
|
||||
|
||||
})).trigger('create');
|
||||
|
||||
updateFilterControls(page);
|
||||
|
||||
if (view == "Thumb") {
|
||||
html = LibraryBrowser.getPosterViewHtml({
|
||||
items: result.Items,
|
||||
|
@ -80,61 +101,23 @@
|
|||
reloadItems(page);
|
||||
});
|
||||
|
||||
$('.btnChangeLayout', page).on('layoutchange', function (e, layout) {
|
||||
getPageData().view = layout;
|
||||
LibraryBrowser.saveViewSetting(getSavedQueryKey(), layout);
|
||||
reloadItems(page);
|
||||
});
|
||||
|
||||
LibraryBrowser.saveQueryValues(getSavedQueryKey(), query);
|
||||
|
||||
|
||||
Dashboard.hideLoadingMsg();
|
||||
});
|
||||
}
|
||||
|
||||
function updateFilterControls(page) {
|
||||
window.MusicPage.renderGenresTab = function (page, tabContent) {
|
||||
|
||||
$('#selectPageSize', page).val(query.Limit).selectmenu('refresh');
|
||||
}
|
||||
|
||||
$(document).on('pageinit', "#musicGenresPage", function () {
|
||||
|
||||
var page = this;
|
||||
|
||||
$('.chkStandardFilter', this).on('change', function () {
|
||||
|
||||
var filterName = this.getAttribute('data-filter');
|
||||
var filters = query.Filters || "";
|
||||
|
||||
filters = (',' + filters).replace(',' + filterName, '').substring(1);
|
||||
|
||||
if (this.checked) {
|
||||
filters = filters ? (filters + ',' + filterName) : filterName;
|
||||
}
|
||||
|
||||
query.StartIndex = 0;
|
||||
query.Filters = filters;
|
||||
|
||||
reloadItems(page);
|
||||
});
|
||||
|
||||
$('#selectPageSize', page).on('change', function () {
|
||||
query.Limit = parseInt(this.value);
|
||||
query.StartIndex = 0;
|
||||
reloadItems(page);
|
||||
});
|
||||
|
||||
}).on('pagebeforeshow', "#musicGenresPage", function () {
|
||||
|
||||
query.ParentId = LibraryMenu.getTopParentId();
|
||||
|
||||
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;
|
||||
if (LibraryBrowser.needsRefresh(tabContent)) {
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
LibraryBrowser.loadSavedQueryValues(getSavedQueryKey(), query);
|
||||
|
||||
reloadItems(this);
|
||||
|
||||
updateFilterControls(this);
|
||||
});
|
||||
};
|
||||
|
||||
})(jQuery, document);
|
|
@ -186,25 +186,129 @@
|
|||
});
|
||||
}
|
||||
|
||||
$(document).on('pagebeforeshow', "#musicRecommendedPage", function () {
|
||||
function loadSuggestionsTab(page, tabContent) {
|
||||
|
||||
var parentId = LibraryMenu.getTopParentId();
|
||||
|
||||
var page = this;
|
||||
|
||||
var containers = page.querySelectorAll('.itemsContainer');
|
||||
var containers = tabContent.querySelectorAll('.itemsContainer');
|
||||
if (enableScrollX()) {
|
||||
$(containers).addClass('hiddenScrollX');
|
||||
} else {
|
||||
$(containers).removeClass('hiddenScrollX');
|
||||
}
|
||||
|
||||
if (LibraryBrowser.needsRefresh(page)) {
|
||||
loadLatest(page, parentId);
|
||||
loadPlaylists(page, parentId);
|
||||
loadRecentlyPlayed(page, parentId);
|
||||
loadFrequentlyPlayed(page, parentId);
|
||||
if (LibraryBrowser.needsRefresh(tabContent)) {
|
||||
console.log('loadSuggestionsTab');
|
||||
loadLatest(tabContent, parentId);
|
||||
loadPlaylists(tabContent, parentId);
|
||||
loadRecentlyPlayed(tabContent, parentId);
|
||||
loadFrequentlyPlayed(tabContent, parentId);
|
||||
}
|
||||
}
|
||||
|
||||
function loadTab(page, index) {
|
||||
|
||||
var tabContent = page.querySelector('.pageTabContent[data-index=\'' + index + '\']');
|
||||
var depends = [];
|
||||
var scope = 'MusicPage';
|
||||
var renderMethod = '';
|
||||
var initMethod = '';
|
||||
|
||||
switch (index) {
|
||||
|
||||
case 0:
|
||||
renderMethod = 'renderSuggestedTab';
|
||||
break;
|
||||
case 1:
|
||||
depends.push('scripts/movies');
|
||||
depends.push('scripts/queryfilters');
|
||||
renderMethod = 'renderMoviesTab';
|
||||
initMethod = 'initMoviesTab';
|
||||
break;
|
||||
case 2:
|
||||
depends.push('scripts/movietrailers');
|
||||
renderMethod = 'renderTrailerTab';
|
||||
initMethod = 'initTrailerTab';
|
||||
break;
|
||||
case 3:
|
||||
depends.push('scripts/moviecollections');
|
||||
renderMethod = 'renderCollectionsTab';
|
||||
initMethod = 'initCollectionsTab';
|
||||
break;
|
||||
case 4:
|
||||
depends.push('scripts/songs');
|
||||
renderMethod = 'renderSongsTab';
|
||||
initMethod = 'initSongsTab';
|
||||
depends.push('scripts/queryfilters');
|
||||
break;
|
||||
case 5:
|
||||
depends.push('scripts/musicgenres');
|
||||
renderMethod = 'renderGenresTab';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
require(depends, function () {
|
||||
|
||||
if (initMethod && !tabContent.initComplete) {
|
||||
|
||||
window[scope][initMethod](page, tabContent);
|
||||
tabContent.initComplete = true;
|
||||
}
|
||||
|
||||
window[scope][renderMethod](page, tabContent);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
window.MusicPage = window.MusicPage || {};
|
||||
window.MusicPage.renderSuggestedTab = loadSuggestionsTab;
|
||||
|
||||
$(document).on('pageinit', "#musicRecommendedPage", function () {
|
||||
|
||||
var page = this;
|
||||
|
||||
$('.recommendations', page).createCardMenus();
|
||||
|
||||
var tabs = page.querySelector('paper-tabs');
|
||||
var pages = page.querySelector('neon-animated-pages');
|
||||
|
||||
var baseUrl = 'musicrecommended.html';
|
||||
var topParentId = LibraryMenu.getTopParentId();
|
||||
if (topParentId) {
|
||||
baseUrl += '?topParentId=' + topParentId;
|
||||
}
|
||||
|
||||
LibraryBrowser.configurePaperLibraryTabs(page, tabs, pages, baseUrl);
|
||||
|
||||
$(pages).on('tabchange', function () {
|
||||
loadTab(page, parseInt(this.selected));
|
||||
});
|
||||
|
||||
}).on('pageshowready', "#musicRecommendedPage", function () {
|
||||
|
||||
var page = this;
|
||||
|
||||
if (!page.getAttribute('data-title')) {
|
||||
|
||||
var parentId = LibraryMenu.getTopParentId();
|
||||
|
||||
if (parentId) {
|
||||
|
||||
ApiClient.getItem(Dashboard.getCurrentUserId(), parentId).done(function (item) {
|
||||
|
||||
page.setAttribute('data-title', item.Name);
|
||||
LibraryMenu.setTitle(item.Name);
|
||||
});
|
||||
|
||||
|
||||
} else {
|
||||
page.setAttribute('data-title', Globalize.translate('TabMusic'));
|
||||
LibraryMenu.setTitle(Globalize.translate('TabMusic'));
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
|
|
@ -2,46 +2,47 @@
|
|||
|
||||
var defaultSortBy = "Album,SortName";
|
||||
|
||||
// The base query options
|
||||
var query = {
|
||||
var data = {};
|
||||
function getPageData() {
|
||||
var key = getSavedQueryKey();
|
||||
var pageData = data[key];
|
||||
|
||||
SortBy: defaultSortBy,
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Audio",
|
||||
Recursive: true,
|
||||
Fields: "AudioInfo,ParentId,SyncInfo",
|
||||
Limit: 200,
|
||||
StartIndex: 0,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
|
||||
};
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: defaultSortBy,
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Audio",
|
||||
Recursive: true,
|
||||
Fields: "AudioInfo,ParentId,SyncInfo",
|
||||
Limit: 100,
|
||||
StartIndex: 0,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
|
||||
}
|
||||
};
|
||||
|
||||
pageData.query.ParentId = LibraryMenu.getTopParentId();
|
||||
LibraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
return pageData;
|
||||
}
|
||||
|
||||
function getQuery() {
|
||||
|
||||
return getPageData().query;
|
||||
}
|
||||
|
||||
function getSavedQueryKey() {
|
||||
|
||||
return 'songs' + (query.ParentId || '');
|
||||
return getWindowUrl();
|
||||
}
|
||||
|
||||
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', this).each(function () {
|
||||
|
||||
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
|
||||
|
||||
}).checkboxradio('refresh');
|
||||
$('#selectPageSize', page).val(query.Limit).selectmenu('refresh');
|
||||
}
|
||||
|
||||
function reloadItems(page) {
|
||||
function reloadItems(page, viewPanel) {
|
||||
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
var query = getQuery();
|
||||
ApiClient.getItems(Dashboard.getCurrentUserId(), query).done(function (result) {
|
||||
|
||||
// Scroll back up so they can see the results from the beginning
|
||||
|
@ -54,13 +55,13 @@
|
|||
totalRecordCount: result.TotalRecordCount,
|
||||
viewButton: true,
|
||||
showLimit: false,
|
||||
sortButton: true,
|
||||
viewPanelClass: 'songsViewPanel',
|
||||
updatePageSizeSetting: false
|
||||
});
|
||||
|
||||
page.querySelector('.listTopPaging').innerHTML = pagingHtml;
|
||||
|
||||
updateFilterControls(page);
|
||||
|
||||
html += LibraryBrowser.getListViewHtml({
|
||||
items: result.Items,
|
||||
showIndex: true,
|
||||
|
@ -76,40 +77,74 @@
|
|||
|
||||
$('.btnNextPage', page).on('click', function () {
|
||||
query.StartIndex += query.Limit;
|
||||
reloadItems(page);
|
||||
reloadItems(page, viewPanel);
|
||||
});
|
||||
|
||||
$('.btnPreviousPage', page).on('click', function () {
|
||||
query.StartIndex -= query.Limit;
|
||||
reloadItems(page);
|
||||
reloadItems(page, viewPanel);
|
||||
});
|
||||
|
||||
$('.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);
|
||||
// On callback make sure to set StartIndex = 0
|
||||
$('.btnSort', page).on('click', function () {
|
||||
LibraryBrowser.showSortMenu({
|
||||
items: [{
|
||||
name: Globalize.translate('OptionNameSort'),
|
||||
id: 'SortName'
|
||||
},
|
||||
{
|
||||
name: Globalize.translate('OptionBudget'),
|
||||
id: 'Budget,SortName'
|
||||
},
|
||||
{
|
||||
name: Globalize.translate('OptionImdbRating'),
|
||||
id: 'CommunityRating,SortName'
|
||||
},
|
||||
{
|
||||
name: Globalize.translate('OptionCriticRating'),
|
||||
id: 'CriticRating,SortName'
|
||||
},
|
||||
{
|
||||
name: Globalize.translate('OptionDateAdded'),
|
||||
id: 'DateCreated,SortName'
|
||||
},
|
||||
{
|
||||
name: Globalize.translate('OptionDatePlayed'),
|
||||
id: 'DatePlayed,SortName'
|
||||
},
|
||||
{
|
||||
name: Globalize.translate('OptionMetascore'),
|
||||
id: 'Metascore,SortName'
|
||||
},
|
||||
{
|
||||
name: Globalize.translate('OptionParentalRating'),
|
||||
id: 'OfficialRating,SortName'
|
||||
},
|
||||
{
|
||||
name: Globalize.translate('OptionPlayCount'),
|
||||
id: 'PlayCount,SortName'
|
||||
},
|
||||
{
|
||||
name: Globalize.translate('OptionReleaseDate'),
|
||||
id: 'PremiereDate,SortName'
|
||||
},
|
||||
{
|
||||
name: Globalize.translate('OptionRevenue'),
|
||||
id: 'Revenue,SortName'
|
||||
},
|
||||
{
|
||||
name: Globalize.translate('OptionRuntime'),
|
||||
id: 'Runtime,SortName'
|
||||
},
|
||||
{
|
||||
name: Globalize.translate('OptionVideoBitrate'),
|
||||
id: 'VideoBitRate,SortName'
|
||||
}],
|
||||
callback: function () {
|
||||
reloadItems(page, viewPanel);
|
||||
},
|
||||
query: query
|
||||
});
|
||||
});
|
||||
|
||||
LibraryBrowser.saveQueryValues(getSavedQueryKey(), query);
|
||||
|
@ -119,42 +154,30 @@
|
|||
}
|
||||
|
||||
var filtersLoaded;
|
||||
function reloadFiltersIfNeeded(page) {
|
||||
function reloadFiltersIfNeeded(page, viewPanel) {
|
||||
|
||||
if (!filtersLoaded) {
|
||||
|
||||
filtersLoaded = true;
|
||||
|
||||
QueryFilters.loadFilters(page, Dashboard.getCurrentUserId(), query, function () {
|
||||
var query = getQuery();
|
||||
QueryFilters.loadFilters(viewPanel, Dashboard.getCurrentUserId(), query, function () {
|
||||
|
||||
reloadItems(page);
|
||||
reloadItems(page, viewPanel);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
$(document).on('pageinit', "#songsPage", function () {
|
||||
function initPage(tabContent, viewPanel) {
|
||||
|
||||
var page = this;
|
||||
$(viewPanel).on('panelopen', function () {
|
||||
|
||||
$('.viewPanel', page).on('panelopen', function () {
|
||||
|
||||
reloadFiltersIfNeeded(page);
|
||||
reloadFiltersIfNeeded(tabContent, viewPanel);
|
||||
});
|
||||
|
||||
$('.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 () {
|
||||
$('.chkStandardFilter', viewPanel).on('change', function () {
|
||||
|
||||
var query = getQuery();
|
||||
var filterName = this.getAttribute('data-filter');
|
||||
var filters = query.Filters || "";
|
||||
|
||||
|
@ -167,28 +190,22 @@
|
|||
query.StartIndex = 0;
|
||||
query.Filters = filters;
|
||||
|
||||
reloadItems(page);
|
||||
reloadItems(tabContent, viewPanel);
|
||||
});
|
||||
}
|
||||
|
||||
$('#selectPageSize', page).on('change', function () {
|
||||
query.Limit = parseInt(this.value);
|
||||
query.StartIndex = 0;
|
||||
reloadItems(page);
|
||||
});
|
||||
window.MusicPage.initSongsTab = function (page, tabContent) {
|
||||
|
||||
}).on('pagebeforeshow', "#songsPage", function () {
|
||||
var viewPanel = page.querySelector('.songsViewPanel');
|
||||
initPage(tabContent, viewPanel);
|
||||
};
|
||||
|
||||
var page = this;
|
||||
window.MusicPage.renderSongsTab = function (page, tabContent) {
|
||||
|
||||
query.ParentId = LibraryMenu.getTopParentId();
|
||||
|
||||
LibraryBrowser.loadSavedQueryValues(getSavedQueryKey(), query);
|
||||
QueryFilters.onPageShow(page, query);
|
||||
|
||||
reloadItems(page);
|
||||
|
||||
updateFilterControls(this);
|
||||
|
||||
});
|
||||
if (LibraryBrowser.needsRefresh(tabContent)) {
|
||||
var viewPanel = page.querySelector('.songsViewPanel');
|
||||
reloadItems(tabContent, viewPanel);
|
||||
}
|
||||
};
|
||||
|
||||
})(jQuery, document);
|
Loading…
Add table
Add a link
Reference in a new issue