1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
This commit is contained in:
Ben Vreeland 2025-03-30 11:01:13 -04:00 committed by GitHub
commit c1e75189ba
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -20,6 +20,15 @@ import 'elements/emby-itemscontainer/emby-itemscontainer';
import 'elements/emby-tabs/emby-tabs';
import 'elements/emby-button/emby-button';
const TAB_INDEX_MAPPING = {
[LibraryTab.Movies]: 0,
[LibraryTab.Suggestions]: 1,
[LibraryTab.Trailers]: 2,
[LibraryTab.Favorites]: 3,
[LibraryTab.Collections]: 4,
[LibraryTab.Genres]: 5
};
function enableScrollX() {
return !layoutManager.desktop;
}
@ -96,6 +105,21 @@ function loadResume(page, userId, parentId) {
});
}
function enableTrailerTabIfTrailersExist() {
const options = {
IncludeItemTypes: 'Trailer',
Limit: 1,
Recursive: true
};
ApiClient.getItems(ApiClient.getCurrentUserId(), options).then(function (result) {
if (result.TotalRecordCount) {
document.querySelector(
`.emby-button[data-index='${TAB_INDEX_MAPPING[LibraryTab.Trailers]}']`
)?.classList.remove('hide');
}
});
}
function getRecommendationHtml(recommendation) {
let html = '';
let title = '';
@ -232,7 +256,9 @@ function getTabs() {
}, {
name: globalize.translate('Suggestions')
}, {
name: globalize.translate('Trailers')
name: globalize.translate('Trailers'),
// Disable trailers tab by default, we will re-enable if trailers exist
enabled: false
}, {
name: globalize.translate('Favorites')
}, {
@ -243,22 +269,7 @@ function getTabs() {
}
function getDefaultTabIndex(folderId) {
switch (userSettings.get('landing-' + folderId)) {
case LibraryTab.Suggestions:
return 1;
case LibraryTab.Favorites:
return 3;
case LibraryTab.Collections:
return 4;
case LibraryTab.Genres:
return 5;
default:
return 0;
}
return TAB_INDEX_MAPPING[userSettings.get('landing-' + folderId)] ?? 0;
}
export default function (view, params) {
@ -277,33 +288,35 @@ export default function (view, params) {
function initTabs() {
mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange);
enableTrailerTabIfTrailersExist();
}
const getTabController = (page, index, callback) => {
let depends = '';
switch (index) {
case 0:
case TAB_INDEX_MAPPING[LibraryTab.Movies]:
depends = 'movies';
break;
case 1:
case TAB_INDEX_MAPPING[LibraryTab.Suggestions]:
depends = 'moviesrecommended.js';
break;
case 2:
case TAB_INDEX_MAPPING[LibraryTab.Trailers]:
depends = 'movietrailers';
break;
case 3:
case TAB_INDEX_MAPPING[LibraryTab.Favorites]:
depends = 'movies';
break;
case 4:
case TAB_INDEX_MAPPING[LibraryTab.Collections]:
depends = 'moviecollections';
break;
case 5:
case TAB_INDEX_MAPPING[LibraryTab.Genres]:
depends = 'moviegenres';
break;
}
@ -311,7 +324,7 @@ export default function (view, params) {
import(`../movies/${depends}`).then(({ default: ControllerFactory }) => {
let tabContent;
if (index === suggestionsTabIndex) {
if (index === TAB_INDEX_MAPPING[LibraryTab.Suggestions]) {
tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
this.tabContent = tabContent;
}
@ -321,14 +334,22 @@ export default function (view, params) {
if (!controller) {
tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
if (index === suggestionsTabIndex) {
controller = this;
} else if (index == 0 || index == 3) {
controller = new ControllerFactory(view, params, tabContent, {
mode: index ? 'favorites' : 'movies'
});
} else {
controller = new ControllerFactory(view, params, tabContent);
switch (index) {
case TAB_INDEX_MAPPING[LibraryTab.Suggestions]:
controller = this;
break;
case TAB_INDEX_MAPPING[LibraryTab.Movies]:
controller = new ControllerFactory(
view, params, tabContent, { mode: 'movies' }
);
break;
case TAB_INDEX_MAPPING[LibraryTab.Favorites]:
controller = new ControllerFactory(
view, params, tabContent, { mode: 'favorites' }
);
break;
default:
controller = new ControllerFactory(view, params, tabContent);
}
tabControllers[index] = controller;
@ -375,15 +396,14 @@ export default function (view, params) {
}
let currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId), 10);
const suggestionsTabIndex = 1;
this.initTab = function () {
const tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']");
const tabContent = view.querySelector(".pageTabContent[data-index='" + TAB_INDEX_MAPPING[LibraryTab.Suggestions] + "']");
initSuggestedTab(view, tabContent);
};
this.renderTab = function () {
const tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']");
const tabContent = view.querySelector(".pageTabContent[data-index='" + TAB_INDEX_MAPPING[LibraryTab.Suggestions] + "']");
loadSuggestionsTab(view, params, tabContent);
};