mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update favorites page
This commit is contained in:
parent
22586c7a8f
commit
ddb3bd5b3b
9 changed files with 265 additions and 65 deletions
|
@ -35,7 +35,7 @@
|
|||
"tag": "v1.0.1",
|
||||
"commit": "3809f0eb7461c8ca63640aaa238775b3a25aa578"
|
||||
},
|
||||
"_source": "git://github.com/polymerelements/iron-menu-behavior.git",
|
||||
"_source": "git://github.com/PolymerElements/iron-menu-behavior.git",
|
||||
"_target": "^1.0.0",
|
||||
"_originalSource": "polymerelements/iron-menu-behavior"
|
||||
"_originalSource": "PolymerElements/iron-menu-behavior"
|
||||
}
|
|
@ -288,7 +288,7 @@
|
|||
color: #2ad;
|
||||
}
|
||||
|
||||
@media all and (max-width: 500px) {
|
||||
@media all and (max-width: 440px) {
|
||||
|
||||
.libraryMenuButtonText {
|
||||
display: none;
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
function getSections() {
|
||||
|
||||
return [
|
||||
{ name: Globalize.translate('HeaderFavoriteMovies'), types: "Movie", id: "favoriteMovies", shape: 'backdrop', preferThumb: true, showTitle: false },
|
||||
{ name: Globalize.translate('HeaderFavoriteShows'), types: "Series", id: "favoriteShows", shape: 'backdrop', preferThumb: true, showTitle: false },
|
||||
{ name: Globalize.translate('HeaderFavoriteEpisodes'), types: "Episode", id: "favoriteEpisode", shape: 'backdrop', preferThumb: false, showTitle: true, showParentTitle: true },
|
||||
{ name: Globalize.translate('HeaderFavoriteGames'), types: "Game", id: "favoriteGames", shape: 'autohome', preferThumb: false, showTitle: true },
|
||||
{ name: Globalize.translate('HeaderFavoriteAlbums'), types: "MusicAlbum", id: "favoriteAlbums", shape: 'square', preferThumb: false, showTitle: true, overlayText: false, showParentTitle: true, centerText: true, overlayPlayButton: true }
|
||||
{ name: 'HeaderFavoriteMovies', types: "Movie", id: "favoriteMovies", shape: 'backdrop', preferThumb: true, showTitle: false },
|
||||
{ name: 'HeaderFavoriteShows', types: "Series", id: "favoriteShows", shape: 'backdrop', preferThumb: true, showTitle: false },
|
||||
{ name: 'HeaderFavoriteEpisodes', types: "Episode", id: "favoriteEpisode", shape: 'backdrop', preferThumb: false, showTitle: true, showParentTitle: true },
|
||||
{ name: 'HeaderFavoriteGames', types: "Game", id: "favoriteGames", shape: 'autohome', preferThumb: false, showTitle: true },
|
||||
{ name: 'HeaderFavoriteAlbums', types: "MusicAlbum", id: "favoriteAlbums", shape: 'square', preferThumb: false, showTitle: true, overlayText: false, showParentTitle: true, centerText: true, overlayPlayButton: true }
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
|||
var html = '';
|
||||
|
||||
if (result.Items.length) {
|
||||
html += '<h1 class="listHeader">' + section.name + '</h1>';
|
||||
html += '<h1 class="listHeader">' + Globalize.translate(section.name) + '</h1>';
|
||||
html += '<div>';
|
||||
html += LibraryBrowser.getPosterViewHtml({
|
||||
items: result.Items,
|
||||
|
@ -56,7 +56,7 @@
|
|||
html += '</div>';
|
||||
|
||||
if (result.TotalRecordCount > result.Items.length) {
|
||||
var href = "index.html?tab=2§ionid=" + section.id;
|
||||
var href = "secondaryitems.html?type=" + section.types + "&filters=IsFavorite&titlekey=" + section.name;
|
||||
|
||||
html += '<a class="clearLink" href="' + href + '"><paper-button raised class="more">' + Globalize.translate('ButtonMoreItems') + '</paper-button></a>';
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
setInitialCollapsibleState(page, item, context, user);
|
||||
renderDetails(page, item, context);
|
||||
|
||||
if (item.Type == 'MusicAlbum1' || item.Type == 'Season1') {
|
||||
if (item.Type == 'MusicAlbum' || item.Type == 'Season1') {
|
||||
Backdrops.setBackdrops(page, [item]);
|
||||
$('#itemBackdrop', page).addClass('noBackdrop').css('background-image', 'none');
|
||||
} else {
|
||||
|
|
|
@ -2364,16 +2364,18 @@
|
|||
|
||||
html += '<div class="listPaging">';
|
||||
|
||||
html += '<span style="margin-right: 10px;vertical-align:middle;">';
|
||||
if (showControls) {
|
||||
html += '<span style="vertical-align:middle;">';
|
||||
|
||||
var startAtDisplay = totalRecordCount ? startIndex + 1 : 0;
|
||||
html += startAtDisplay + '-' + recordsEnd + ' of ' + totalRecordCount;
|
||||
var startAtDisplay = totalRecordCount ? startIndex + 1 : 0;
|
||||
html += startAtDisplay + '-' + recordsEnd + ' of ' + totalRecordCount;
|
||||
|
||||
html += '</span>';
|
||||
html += '</span>';
|
||||
}
|
||||
|
||||
if (showControls || options.viewButton || options.addSelectionButton || options.additionalButtonsHtml) {
|
||||
|
||||
html += '<div data-role="controlgroup" data-type="horizontal" style="display:inline-block;">';
|
||||
html += '<div style="display:inline-block;margin-left:10px;">';
|
||||
|
||||
if (showControls) {
|
||||
|
||||
|
|
|
@ -1,18 +1,12 @@
|
|||
(function (window, document, $, devicePixelRatio) {
|
||||
|
||||
var backStack = [];
|
||||
var addNextToBackStack = true;
|
||||
|
||||
function renderHeader() {
|
||||
|
||||
var html = '<div class="viewMenuBar ui-bar-b">';
|
||||
|
||||
if (AppInfo.enableBackButton) {
|
||||
var backIcon = $.browser.safari ? 'chevron-left' : 'arrow-back';
|
||||
|
||||
var icon = $.browser.safari ? 'chevron-left' : 'arrow-back';
|
||||
|
||||
html += '<paper-icon-button icon="' + icon + '" class="headerButton headerButtonLeft headerBackButton"></paper-icon-button>';
|
||||
}
|
||||
html += '<paper-icon-button icon="' + backIcon + '" class="headerButton headerButtonLeft headerBackButton hide"></paper-icon-button>';
|
||||
|
||||
html += '<paper-icon-button icon="menu" class="headerButton mainDrawerButton barsMenuButton headerButtonLeft"></paper-icon-button>';
|
||||
|
||||
|
@ -61,9 +55,6 @@
|
|||
Dashboard.exit();
|
||||
}
|
||||
else {
|
||||
addNextToBackStack = false;
|
||||
|
||||
backStack.length = Math.max(0, backStack.length - 1);
|
||||
history.back();
|
||||
}
|
||||
}
|
||||
|
@ -74,28 +65,32 @@
|
|||
|
||||
if (user.localUser) {
|
||||
$('.btnCast', header).visible(true);
|
||||
$('.headerSearchButton', header).visible(true);
|
||||
document.querySelector('.headerSearchButton').classList.remove('hide');
|
||||
|
||||
requirejs(['voice/voice'], function () {
|
||||
|
||||
if (VoiceInputManager.isSupported()) {
|
||||
$('.headerVoiceButton', header).visible(true);
|
||||
document.querySelector('.headerVoiceButton').classList.remove('hide');
|
||||
} else {
|
||||
$('.headerVoiceButton', header).visible(false);
|
||||
document.querySelector('.headerVoiceButton').classList.add('hide');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
} else {
|
||||
$('.btnCast', header).visible(false);
|
||||
$('.headerVoiceButton', header).visible(false);
|
||||
$('.headerSearchButton', header).visible(false);
|
||||
document.querySelector('.headerVoiceButton').classList.add('hide');
|
||||
document.querySelector('.headerSearchButton').classList.add('hide');
|
||||
}
|
||||
|
||||
if (user.canManageServer) {
|
||||
$('.dashboardEntryHeaderButton', header).visible(true);
|
||||
} else {
|
||||
$('.dashboardEntryHeaderButton', header).visible(false);
|
||||
var dashboardEntryHeaderButton = document.querySelector('.dashboardEntryHeaderButton');
|
||||
|
||||
if (dashboardEntryHeaderButton) {
|
||||
if (user.canManageServer) {
|
||||
dashboardEntryHeaderButton.classList.remove('hide');
|
||||
} else {
|
||||
dashboardEntryHeaderButton.classList.add('hide');
|
||||
}
|
||||
}
|
||||
|
||||
var userButtonHtml = '';
|
||||
|
@ -136,14 +131,6 @@
|
|||
|
||||
$('.headerBackButton').on('click', onBackClick);
|
||||
|
||||
// Have to wait for document ready here because otherwise
|
||||
// we may see the jQM redirect back and forth problem
|
||||
$(initViewMenuBarHeadroom);
|
||||
}
|
||||
|
||||
function initViewMenuBarHeadroom() {
|
||||
|
||||
// grab an element
|
||||
var viewMenuBar = document.getElementsByClassName("viewMenuBar")[0];
|
||||
initHeadRoom(viewMenuBar);
|
||||
}
|
||||
|
@ -159,7 +146,11 @@
|
|||
}
|
||||
|
||||
function reEnableHeadroom() {
|
||||
$('.headroomDisabled').removeClass('headroomDisabled');
|
||||
|
||||
var headroomDisabled = document.querySelectorAll('.headroomDisabled');
|
||||
for (var i = 0, length = headroomDisabled.length; i < length; i++) {
|
||||
headroomDisabled[i].classList.remove('headroomDisabled');
|
||||
}
|
||||
}
|
||||
|
||||
function getItemHref(item, context) {
|
||||
|
@ -685,16 +676,18 @@
|
|||
|
||||
function buildViewMenuBar(page) {
|
||||
|
||||
var viewMenuBar = document.querySelector('.viewMenuBar');
|
||||
|
||||
if (page.classList.contains('standalonePage')) {
|
||||
$('.viewMenuBar').visible(false);
|
||||
if (viewMenuBar) {
|
||||
viewMenuBar.classList.add('hide');
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
var viewMenuBar = document.querySelector('.viewMenuBar');
|
||||
|
||||
if (requiresViewMenuRefresh) {
|
||||
if (viewMenuBar) {
|
||||
$(viewMenuBar).remove();
|
||||
viewMenuBar.parentNode.removeChild(viewMenuBar);
|
||||
viewMenuBar = null;
|
||||
}
|
||||
}
|
||||
|
@ -713,7 +706,7 @@
|
|||
ConnectionManager.user(window.ApiClient).done(addUserToHeader);
|
||||
|
||||
} else {
|
||||
$(viewMenuBar).visible(true);
|
||||
viewMenuBar.classList.remove('hide');
|
||||
updateContextText(page);
|
||||
updateLibraryNavLinks(page);
|
||||
updateViewMenuBarHeadroom(page, viewMenuBar);
|
||||
|
@ -737,15 +730,10 @@
|
|||
|
||||
}).on('pagebeforehide', ".page", function () {
|
||||
|
||||
if (addNextToBackStack) {
|
||||
var text = $('.libraryMenuButtonText').text() || document.title;
|
||||
|
||||
backStack.push(text);
|
||||
var headroomEnabled = document.querySelectorAll('.headroomEnabled');
|
||||
for (var i = 0, length = headroomEnabled.length; i < length; i++) {
|
||||
headroomEnabled[i].classList.add('headroomDisabled');
|
||||
}
|
||||
|
||||
addNextToBackStack = true;
|
||||
|
||||
$('.headroomEnabled').addClass('headroomDisabled');
|
||||
});
|
||||
|
||||
function onPageBeforeShowDocumentReady(page) {
|
||||
|
@ -755,6 +743,18 @@
|
|||
var isLibraryPage = page.classList.contains('libraryPage');
|
||||
var darkDrawer = false;
|
||||
|
||||
var titleKey = getParameterByName('titlekey');
|
||||
|
||||
if (titleKey) {
|
||||
document.querySelector('.libraryMenuButtonText').innerHTML = Globalize.translate(titleKey);
|
||||
}
|
||||
|
||||
if (page.getAttribute('data-menubutton') == 'false') {
|
||||
document.querySelector('.mainDrawerButton').classList.add('hide');
|
||||
} else {
|
||||
document.querySelector('.mainDrawerButton').classList.remove('hide');
|
||||
}
|
||||
|
||||
if (isLibraryPage) {
|
||||
|
||||
document.body.classList.add('libraryDocument');
|
||||
|
@ -797,18 +797,28 @@
|
|||
document.querySelector('.mainDrawerPanel #drawer').classList.remove('darkDrawer');
|
||||
}
|
||||
|
||||
if (AppInfo.enableBackButton) {
|
||||
updateBackButton(page);
|
||||
}
|
||||
updateBackButton(page);
|
||||
}
|
||||
|
||||
function updateBackButton(page) {
|
||||
|
||||
var canGoBack = backStack.length > 0 && !page.classList.contains('homePage');
|
||||
var canGoBack = !page.classList.contains('homePage');
|
||||
|
||||
$('.headerBackButton').visible(canGoBack);
|
||||
var backButton = document.querySelector('.headerBackButton');
|
||||
|
||||
Events.off(page, 'swiperight', onPageSwipeLeft);
|
||||
var showBackButton = AppInfo.enableBackButton;
|
||||
|
||||
if (!showBackButton) {
|
||||
showBackButton = page.getAttribute('data-backbutton') == 'true';
|
||||
}
|
||||
|
||||
if (canGoBack && showBackButton) {
|
||||
backButton.classList.remove('hide');
|
||||
} else {
|
||||
backButton.classList.add('hide');
|
||||
}
|
||||
|
||||
//Events.off(page, 'swiperight', onPageSwipeLeft);
|
||||
|
||||
if (canGoBack) {
|
||||
//Events.on(page, 'swiperight', onPageSwipeLeft);
|
||||
|
|
169
dashboard-ui/scripts/secondaryitems.js
Normal file
169
dashboard-ui/scripts/secondaryitems.js
Normal file
|
@ -0,0 +1,169 @@
|
|||
(function ($, document) {
|
||||
|
||||
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
||||
|
||||
var data = {};
|
||||
|
||||
function getQuery() {
|
||||
|
||||
var key = getSavedQueryKey();
|
||||
var pageData = data[key];
|
||||
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SortName,SyncInfo",
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
StartIndex: 0,
|
||||
Limit: LibraryBrowser.getDefaultPageSize()
|
||||
}
|
||||
};
|
||||
|
||||
var type = getParameterByName('type');
|
||||
if (type) {
|
||||
pageData.query.IncludeItemTypes = type;
|
||||
}
|
||||
|
||||
var filters = getParameterByName('filters');
|
||||
if (type) {
|
||||
pageData.query.Filters = filters;
|
||||
}
|
||||
|
||||
pageData.query.ParentId = LibraryMenu.getTopParentId();
|
||||
LibraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
return pageData.query;
|
||||
}
|
||||
|
||||
function getSavedQueryKey() {
|
||||
|
||||
return getWindowUrl();
|
||||
}
|
||||
|
||||
function reloadItems(page) {
|
||||
|
||||
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
|
||||
window.scrollTo(0, 0);
|
||||
|
||||
var html = '';
|
||||
var trigger = false;
|
||||
var pagingHtml = LibraryBrowser.getQueryPagingHtml({
|
||||
startIndex: query.StartIndex,
|
||||
limit: query.Limit,
|
||||
totalRecordCount: result.TotalRecordCount,
|
||||
showLimit: false
|
||||
});
|
||||
|
||||
page.querySelector('.listTopPaging').innerHTML = pagingHtml;
|
||||
|
||||
if (view == "Thumb") {
|
||||
|
||||
html = LibraryBrowser.getPosterViewHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
preferThumb: true,
|
||||
context: 'tv',
|
||||
lazy: true,
|
||||
overlayText: true
|
||||
});
|
||||
|
||||
}
|
||||
else if (view == "ThumbCard") {
|
||||
|
||||
html = LibraryBrowser.getPosterViewHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
preferThumb: true,
|
||||
context: 'tv',
|
||||
lazy: true,
|
||||
cardLayout: true,
|
||||
showTitle: true,
|
||||
showSeriesYear: true
|
||||
});
|
||||
}
|
||||
else if (view == "Banner") {
|
||||
|
||||
html = LibraryBrowser.getPosterViewHtml({
|
||||
items: result.Items,
|
||||
shape: "banner",
|
||||
preferBanner: true,
|
||||
context: 'tv',
|
||||
lazy: true
|
||||
});
|
||||
}
|
||||
else if (view == "List") {
|
||||
|
||||
html = LibraryBrowser.getListViewHtml({
|
||||
items: result.Items,
|
||||
context: 'tv',
|
||||
sortBy: query.SortBy
|
||||
});
|
||||
trigger = true;
|
||||
}
|
||||
else if (view == "PosterCard") {
|
||||
html = LibraryBrowser.getPosterViewHtml({
|
||||
items: result.Items,
|
||||
shape: "portrait",
|
||||
context: 'tv',
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
lazy: true,
|
||||
cardLayout: true
|
||||
});
|
||||
}
|
||||
else {
|
||||
|
||||
// Poster
|
||||
html = LibraryBrowser.getPosterViewHtml({
|
||||
items: result.Items,
|
||||
shape: "portrait",
|
||||
context: 'tv',
|
||||
centerText: true,
|
||||
lazy: true,
|
||||
overlayText: true
|
||||
});
|
||||
}
|
||||
|
||||
var elem = page.querySelector('#items');
|
||||
elem.innerHTML = html + pagingHtml;
|
||||
ImageLoader.lazyChildren(elem);
|
||||
|
||||
if (trigger) {
|
||||
Events.trigger(elem, 'create');
|
||||
}
|
||||
|
||||
$('.btnNextPage', page).on('click', function () {
|
||||
query.StartIndex += query.Limit;
|
||||
reloadItems(page);
|
||||
});
|
||||
|
||||
$('.btnPreviousPage', page).on('click', function () {
|
||||
query.StartIndex -= query.Limit;
|
||||
reloadItems(page);
|
||||
});
|
||||
|
||||
LibraryBrowser.setLastRefreshed(page);
|
||||
Dashboard.hideLoadingMsg();
|
||||
});
|
||||
}
|
||||
|
||||
$(document).on('pagebeforeshowready', "#secondaryItemsPage", function () {
|
||||
|
||||
var page = this;
|
||||
|
||||
if (LibraryBrowser.needsRefresh(page)) {
|
||||
reloadItems(page);
|
||||
}
|
||||
});
|
||||
|
||||
})(jQuery, document);
|
|
@ -1907,7 +1907,7 @@ var AppInfo = {};
|
|||
}
|
||||
|
||||
if ($.browser.safari) {
|
||||
require(['cordova/remotecontrols', 'cordova/ios/orientation']);
|
||||
require(['cordova/ios/orientation']);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
|
19
dashboard-ui/secondaryitems.html
Normal file
19
dashboard-ui/secondaryitems.html
Normal file
|
@ -0,0 +1,19 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Emby</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="secondaryItemsPage" data-role="page" class="page libraryPage noSecondaryNavPage" data-require="scripts/secondaryitems" data-backbutton="true" data-menubutton="false">
|
||||
|
||||
<div data-role="content">
|
||||
<div class="viewSettings">
|
||||
<div class="listTopPaging">
|
||||
</div>
|
||||
</div>
|
||||
<div id="items" class="itemsContainer paddedItemsContainer" style="text-align:center;"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Loading…
Add table
Add a link
Reference in a new issue