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-tabs/emby-tabs';
import 'elements/emby-button/emby-button'; 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() { function enableScrollX() {
return !layoutManager.desktop; 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) { function getRecommendationHtml(recommendation) {
let html = ''; let html = '';
let title = ''; let title = '';
@ -232,7 +256,9 @@ function getTabs() {
}, { }, {
name: globalize.translate('Suggestions') 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') name: globalize.translate('Favorites')
}, { }, {
@ -243,22 +269,7 @@ function getTabs() {
} }
function getDefaultTabIndex(folderId) { function getDefaultTabIndex(folderId) {
switch (userSettings.get('landing-' + folderId)) { return TAB_INDEX_MAPPING[userSettings.get('landing-' + folderId)] ?? 0;
case LibraryTab.Suggestions:
return 1;
case LibraryTab.Favorites:
return 3;
case LibraryTab.Collections:
return 4;
case LibraryTab.Genres:
return 5;
default:
return 0;
}
} }
export default function (view, params) { export default function (view, params) {
@ -277,33 +288,35 @@ export default function (view, params) {
function initTabs() { function initTabs() {
mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange); mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange);
enableTrailerTabIfTrailersExist();
} }
const getTabController = (page, index, callback) => { const getTabController = (page, index, callback) => {
let depends = ''; let depends = '';
switch (index) { switch (index) {
case 0: case TAB_INDEX_MAPPING[LibraryTab.Movies]:
depends = 'movies'; depends = 'movies';
break; break;
case 1: case TAB_INDEX_MAPPING[LibraryTab.Suggestions]:
depends = 'moviesrecommended.js'; depends = 'moviesrecommended.js';
break; break;
case 2: case TAB_INDEX_MAPPING[LibraryTab.Trailers]:
depends = 'movietrailers'; depends = 'movietrailers';
break; break;
case 3: case TAB_INDEX_MAPPING[LibraryTab.Favorites]:
depends = 'movies'; depends = 'movies';
break; break;
case 4: case TAB_INDEX_MAPPING[LibraryTab.Collections]:
depends = 'moviecollections'; depends = 'moviecollections';
break; break;
case 5: case TAB_INDEX_MAPPING[LibraryTab.Genres]:
depends = 'moviegenres'; depends = 'moviegenres';
break; break;
} }
@ -311,7 +324,7 @@ export default function (view, params) {
import(`../movies/${depends}`).then(({ default: ControllerFactory }) => { import(`../movies/${depends}`).then(({ default: ControllerFactory }) => {
let tabContent; let tabContent;
if (index === suggestionsTabIndex) { if (index === TAB_INDEX_MAPPING[LibraryTab.Suggestions]) {
tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"); tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
this.tabContent = tabContent; this.tabContent = tabContent;
} }
@ -321,13 +334,21 @@ export default function (view, params) {
if (!controller) { if (!controller) {
tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"); tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
if (index === suggestionsTabIndex) { switch (index) {
case TAB_INDEX_MAPPING[LibraryTab.Suggestions]:
controller = this; controller = this;
} else if (index == 0 || index == 3) { break;
controller = new ControllerFactory(view, params, tabContent, { case TAB_INDEX_MAPPING[LibraryTab.Movies]:
mode: index ? 'favorites' : 'movies' controller = new ControllerFactory(
}); view, params, tabContent, { mode: 'movies' }
} else { );
break;
case TAB_INDEX_MAPPING[LibraryTab.Favorites]:
controller = new ControllerFactory(
view, params, tabContent, { mode: 'favorites' }
);
break;
default:
controller = new ControllerFactory(view, params, tabContent); controller = new ControllerFactory(view, params, tabContent);
} }
@ -375,15 +396,14 @@ export default function (view, params) {
} }
let currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId), 10); let currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId), 10);
const suggestionsTabIndex = 1;
this.initTab = function () { 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); initSuggestedTab(view, tabContent);
}; };
this.renderTab = function () { 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); loadSuggestionsTab(view, params, tabContent);
}; };