mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
itembynamedetailpage.js
This commit is contained in:
parent
af8d421a8c
commit
40e4f6a27a
1 changed files with 221 additions and 88 deletions
|
@ -1,40 +1,90 @@
|
||||||
define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryBrowser", "emby-itemscontainer", "emby-button"], function(connectionManager, listView, cardBuilder, imageLoader, libraryBrowser) {
|
define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryBrowser", "emby-itemscontainer", "emby-button"], function (connectionManager, listView, cardBuilder, imageLoader, libraryBrowser) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function renderItems(page, item) {
|
function renderItems(page, item) {
|
||||||
var sections = [];
|
var sections = [];
|
||||||
item.ArtistCount && sections.push({
|
|
||||||
name: Globalize.translate("TabArtists"),
|
if (item.ArtistCount) {
|
||||||
type: "MusicArtist"
|
sections.push({
|
||||||
}), item.ProgramCount && "Person" == item.Type && sections.push({
|
name: Globalize.translate("TabArtists"),
|
||||||
name: Globalize.translate("HeaderUpcomingOnTV"),
|
type: "MusicArtist"
|
||||||
type: "Program"
|
});
|
||||||
}), item.MovieCount && sections.push({
|
}
|
||||||
name: Globalize.translate("TabMovies"),
|
|
||||||
type: "Movie"
|
if (item.ProgramCount && "Person" == item.Type) {
|
||||||
}), item.SeriesCount && sections.push({
|
sections.push({
|
||||||
name: Globalize.translate("TabShows"),
|
name: Globalize.translate("HeaderUpcomingOnTV"),
|
||||||
type: "Series"
|
type: "Program"
|
||||||
}), item.EpisodeCount && sections.push({
|
});
|
||||||
name: Globalize.translate("TabEpisodes"),
|
}
|
||||||
type: "Episode"
|
|
||||||
}), item.TrailerCount && sections.push({
|
if (item.MovieCount) {
|
||||||
name: Globalize.translate("TabTrailers"),
|
sections.push({
|
||||||
type: "Trailer"
|
name: Globalize.translate("TabMovies"),
|
||||||
}), item.AlbumCount && sections.push({
|
type: "Movie"
|
||||||
name: Globalize.translate("TabAlbums"),
|
});
|
||||||
type: "MusicAlbum"
|
}
|
||||||
}), item.MusicVideoCount && sections.push({
|
|
||||||
name: Globalize.translate("TabMusicVideos"),
|
if (item.SeriesCount) {
|
||||||
type: "MusicVideo"
|
sections.push({
|
||||||
});
|
name: Globalize.translate("TabShows"),
|
||||||
|
type: "Series"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.EpisodeCount) {
|
||||||
|
sections.push({
|
||||||
|
name: Globalize.translate("TabEpisodes"),
|
||||||
|
type: "Episode"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.TrailerCount) {
|
||||||
|
sections.push({
|
||||||
|
name: Globalize.translate("TabTrailers"),
|
||||||
|
type: "Trailer"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.AlbumCount) {
|
||||||
|
sections.push({
|
||||||
|
name: Globalize.translate("TabAlbums"),
|
||||||
|
type: "MusicAlbum"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.MusicVideoCount) {
|
||||||
|
sections.push({
|
||||||
|
name: Globalize.translate("TabMusicVideos"),
|
||||||
|
type: "MusicVideo"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var elem = page.querySelector("#childrenContent");
|
var elem = page.querySelector("#childrenContent");
|
||||||
elem.innerHTML = sections.map(function(section) {
|
elem.innerHTML = sections.map(function (section) {
|
||||||
var html = "",
|
var html = "";
|
||||||
sectionClass = "verticalSection";
|
var sectionClass = "verticalSection";
|
||||||
return "Audio" === section.type && (sectionClass += " verticalSection-extrabottompadding"), html += '<div class="' + sectionClass + '" data-type="' + section.type + '">', html += '<div class="sectionTitleContainer sectionTitleContainer-cards">', html += '<h2 class="sectionTitle sectionTitle-cards padded-left">', html += section.name, html += "</h2>", html += '<a is="emby-linkbutton" href="#" class="clearLink hide" style="margin-left:1em;vertical-align:middle;"><button is="emby-button" type="button" class="raised more raised-mini noIcon">' + Globalize.translate("ButtonMore") + "</button></a>", html += "</div>", html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right">', html += "</div>", html += "</div>"
|
|
||||||
|
if ("Audio" === section.type) {
|
||||||
|
sectionClass += " verticalSection-extrabottompadding";
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '<div class="' + sectionClass + '" data-type="' + section.type + '">';
|
||||||
|
html += '<div class="sectionTitleContainer sectionTitleContainer-cards">';
|
||||||
|
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">';
|
||||||
|
html += section.name;
|
||||||
|
html += "</h2>";
|
||||||
|
html += '<a is="emby-linkbutton" href="#" class="clearLink hide" style="margin-left:1em;vertical-align:middle;"><button is="emby-button" type="button" class="raised more raised-mini noIcon">' + Globalize.translate("ButtonMore") + "</button></a>";
|
||||||
|
html += "</div>";
|
||||||
|
html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right">';
|
||||||
|
html += "</div>";
|
||||||
|
return html += "</div>";
|
||||||
}).join("");
|
}).join("");
|
||||||
for (var sectionElems = elem.querySelectorAll(".verticalSection"), i = 0, length = sectionElems.length; i < length; i++) renderSection(page, item, sectionElems[i], sectionElems[i].getAttribute("data-type"))
|
var sectionElems = elem.querySelectorAll(".verticalSection");
|
||||||
|
|
||||||
|
for (var i = 0, length = sectionElems.length; i < length; i++) {
|
||||||
|
renderSection(page, item, sectionElems[i], sectionElems[i].getAttribute("data-type"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderSection(page, item, element, type) {
|
function renderSection(page, item, element, type) {
|
||||||
|
@ -50,16 +100,17 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "StartDate"
|
SortBy: "StartDate"
|
||||||
}, {
|
}, {
|
||||||
shape: "backdrop",
|
shape: "backdrop",
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayMoreButton: !0,
|
overlayMoreButton: true,
|
||||||
preferThumb: !0,
|
preferThumb: true,
|
||||||
overlayText: !1,
|
overlayText: false,
|
||||||
showAirTime: !0,
|
showAirTime: true,
|
||||||
showAirDateTime: !0,
|
showAirDateTime: true,
|
||||||
showChannelName: !0
|
showChannelName: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Movie":
|
case "Movie":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -71,13 +122,14 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "SortName"
|
SortBy: "SortName"
|
||||||
}, {
|
}, {
|
||||||
shape: "portrait",
|
shape: "portrait",
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayMoreButton: !0,
|
overlayMoreButton: true,
|
||||||
overlayText: !1,
|
overlayText: false,
|
||||||
showYear: !0
|
showYear: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "MusicVideo":
|
case "MusicVideo":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -89,11 +141,12 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "SortName"
|
SortBy: "SortName"
|
||||||
}, {
|
}, {
|
||||||
shape: "portrait",
|
shape: "portrait",
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayPlayButton: !0
|
overlayPlayButton: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Trailer":
|
case "Trailer":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -105,11 +158,12 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "SortName"
|
SortBy: "SortName"
|
||||||
}, {
|
}, {
|
||||||
shape: "portrait",
|
shape: "portrait",
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayPlayButton: !0
|
overlayPlayButton: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Series":
|
case "Series":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -121,11 +175,12 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "SortName"
|
SortBy: "SortName"
|
||||||
}, {
|
}, {
|
||||||
shape: "portrait",
|
shape: "portrait",
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayMoreButton: !0
|
overlayMoreButton: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "MusicAlbum":
|
case "MusicAlbum":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -137,14 +192,15 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "ProductionYear,Sortname"
|
SortBy: "ProductionYear,Sortname"
|
||||||
}, {
|
}, {
|
||||||
shape: "square",
|
shape: "square",
|
||||||
playFromHere: !0,
|
playFromHere: true,
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
showYear: !0,
|
showYear: true,
|
||||||
coverImage: !0,
|
coverImage: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayPlayButton: !0
|
overlayPlayButton: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "MusicArtist":
|
case "MusicArtist":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -156,14 +212,15 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "SortName"
|
SortBy: "SortName"
|
||||||
}, {
|
}, {
|
||||||
shape: "square",
|
shape: "square",
|
||||||
playFromHere: !0,
|
playFromHere: true,
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
showParentTitle: !0,
|
showParentTitle: true,
|
||||||
coverImage: !0,
|
coverImage: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayPlayButton: !0
|
overlayPlayButton: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Episode":
|
case "Episode":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -175,12 +232,13 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "SortName"
|
SortBy: "SortName"
|
||||||
}, {
|
}, {
|
||||||
shape: "backdrop",
|
shape: "backdrop",
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
showParentTitle: !0,
|
showParentTitle: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayPlayButton: !0
|
overlayPlayButton: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Audio":
|
case "Audio":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -190,57 +248,132 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
AlbumArtistIds: "",
|
AlbumArtistIds: "",
|
||||||
SortBy: "AlbumArtist,Album,SortName"
|
SortBy: "AlbumArtist,Album,SortName"
|
||||||
}, {
|
}, {
|
||||||
playFromHere: !0,
|
playFromHere: true,
|
||||||
action: "playallfromhere",
|
action: "playallfromhere",
|
||||||
smallIcon: !0,
|
smallIcon: true,
|
||||||
artist: !0
|
artist: true
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadItems(element, item, type, query, listOptions) {
|
function loadItems(element, item, type, query, listOptions) {
|
||||||
query = getQuery(query, item), getItemsFunction(query, item)(query.StartIndex, query.Limit, query.Fields).then(function(result) {
|
query = getQuery(query, item);
|
||||||
|
getItemsFunction(query, item)(query.StartIndex, query.Limit, query.Fields).then(function (result) {
|
||||||
var html = "";
|
var html = "";
|
||||||
|
|
||||||
if (query.Limit && result.TotalRecordCount > query.Limit) {
|
if (query.Limit && result.TotalRecordCount > query.Limit) {
|
||||||
var link = element.querySelector("a");
|
var link = element.querySelector("a");
|
||||||
link.classList.remove("hide"), link.setAttribute("href", getMoreItemsHref(item, type))
|
link.classList.remove("hide");
|
||||||
} else element.querySelector("a").classList.add("hide");
|
link.setAttribute("href", getMoreItemsHref(item, type));
|
||||||
|
} else {
|
||||||
|
element.querySelector("a").classList.add("hide");
|
||||||
|
}
|
||||||
|
|
||||||
listOptions.items = result.Items;
|
listOptions.items = result.Items;
|
||||||
var itemsContainer = element.querySelector(".itemsContainer");
|
var itemsContainer = element.querySelector(".itemsContainer");
|
||||||
"Audio" == type ? (html = listView.getListViewHtml(listOptions), itemsContainer.classList.remove("vertical-wrap"), itemsContainer.classList.add("vertical-list")) : (html = cardBuilder.getCardsHtml(listOptions), itemsContainer.classList.add("vertical-wrap"), itemsContainer.classList.remove("vertical-list")), itemsContainer.innerHTML = html, imageLoader.lazyChildren(itemsContainer)
|
|
||||||
})
|
if ("Audio" == type) {
|
||||||
|
html = listView.getListViewHtml(listOptions);
|
||||||
|
itemsContainer.classList.remove("vertical-wrap");
|
||||||
|
itemsContainer.classList.add("vertical-list");
|
||||||
|
} else {
|
||||||
|
html = cardBuilder.getCardsHtml(listOptions);
|
||||||
|
itemsContainer.classList.add("vertical-wrap");
|
||||||
|
itemsContainer.classList.remove("vertical-list");
|
||||||
|
}
|
||||||
|
|
||||||
|
itemsContainer.innerHTML = html;
|
||||||
|
imageLoader.lazyChildren(itemsContainer);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getMoreItemsHref(item, type) {
|
function getMoreItemsHref(item, type) {
|
||||||
return "Genre" == item.Type ? "list.html?type=" + type + "&genreId=" + item.Id + "&serverId=" + item.ServerId : "MusicGenre" == item.Type ? "list.html?type=" + type + "&musicGenreId=" + item.Id + "&serverId=" + item.ServerId : "Studio" == item.Type ? "list.html?type=" + type + "&studioId=" + item.Id + "&serverId=" + item.ServerId : "MusicArtist" == item.Type ? "list.html?type=" + type + "&artistId=" + item.Id + "&serverId=" + item.ServerId : "Person" == item.Type ? "list.html?type=" + type + "&personId=" + item.Id + "&serverId=" + item.ServerId : "list.html?type=" + type + "&parentId=" + item.Id + "&serverId=" + item.ServerId
|
if ("Genre" == item.Type) {
|
||||||
|
return "list.html?type=" + type + "&genreId=" + item.Id + "&serverId=" + item.ServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("MusicGenre" == item.Type) {
|
||||||
|
return "list.html?type=" + type + "&musicGenreId=" + item.Id + "&serverId=" + item.ServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("Studio" == item.Type) {
|
||||||
|
return "list.html?type=" + type + "&studioId=" + item.Id + "&serverId=" + item.ServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("MusicArtist" == item.Type) {
|
||||||
|
return "list.html?type=" + type + "&artistId=" + item.Id + "&serverId=" + item.ServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("Person" == item.Type) {
|
||||||
|
return "list.html?type=" + type + "&personId=" + item.Id + "&serverId=" + item.ServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
return "list.html?type=" + type + "&parentId=" + item.Id + "&serverId=" + item.ServerId;
|
||||||
}
|
}
|
||||||
|
|
||||||
function addCurrentItemToQuery(query, item) {
|
function addCurrentItemToQuery(query, item) {
|
||||||
"Person" == item.Type ? query.PersonIds = item.Id : "Genre" == item.Type ? query.GenreIds = item.Id : "MusicGenre" == item.Type ? query.GenreIds = item.Id : "Studio" == item.Type ? query.StudioIds = item.Id : "MusicArtist" == item.Type && (connectionManager.getApiClient(item.ServerId).isMinServerVersion("3.4.1.18") ? query.AlbumArtistIds = item.Id : query.ArtistIds = item.Id)
|
if ("Person" == item.Type) {
|
||||||
|
query.PersonIds = item.Id;
|
||||||
|
} else {
|
||||||
|
if ("Genre" == item.Type) {
|
||||||
|
query.GenreIds = item.Id;
|
||||||
|
} else {
|
||||||
|
if ("MusicGenre" == item.Type) {
|
||||||
|
query.GenreIds = item.Id;
|
||||||
|
} else {
|
||||||
|
if ("Studio" == item.Type) {
|
||||||
|
query.StudioIds = item.Id;
|
||||||
|
} else {
|
||||||
|
if ("MusicArtist" == item.Type) {
|
||||||
|
if (connectionManager.getApiClient(item.ServerId).isMinServerVersion("3.4.1.18")) {
|
||||||
|
query.AlbumArtistIds = item.Id;
|
||||||
|
} else {
|
||||||
|
query.ArtistIds = item.Id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getQuery(options, item) {
|
function getQuery(options, item) {
|
||||||
var query = {
|
var query = {
|
||||||
SortOrder: "Ascending",
|
SortOrder: "Ascending",
|
||||||
IncludeItemTypes: "",
|
IncludeItemTypes: "",
|
||||||
Recursive: !0,
|
Recursive: true,
|
||||||
Fields: "AudioInfo,SeriesInfo,ParentId,PrimaryImageAspectRatio,BasicSyncInfo",
|
Fields: "AudioInfo,SeriesInfo,ParentId,PrimaryImageAspectRatio,BasicSyncInfo",
|
||||||
Limit: 100,
|
Limit: 100,
|
||||||
StartIndex: 0,
|
StartIndex: 0,
|
||||||
CollapseBoxSetItems: !1
|
CollapseBoxSetItems: false
|
||||||
};
|
};
|
||||||
return query = Object.assign(query, options || {}), addCurrentItemToQuery(query, item), query
|
query = Object.assign(query, options || {});
|
||||||
|
addCurrentItemToQuery(query, item);
|
||||||
|
return query;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getItemsFunction(options, item) {
|
function getItemsFunction(options, item) {
|
||||||
var query = getQuery(options, item);
|
var query = getQuery(options, item);
|
||||||
return function(index, limit, fields) {
|
return function (index, limit, fields) {
|
||||||
query.StartIndex = index, query.Limit = limit, fields && (query.Fields += "," + fields);
|
query.StartIndex = index;
|
||||||
|
query.Limit = limit;
|
||||||
|
|
||||||
|
if (fields) {
|
||||||
|
query.Fields += "," + fields;
|
||||||
|
}
|
||||||
|
|
||||||
var apiClient = connectionManager.getApiClient(item.ServerId);
|
var apiClient = connectionManager.getApiClient(item.ServerId);
|
||||||
return "MusicArtist" === query.IncludeItemTypes ? (query.IncludeItemTypes = null, apiClient.getAlbumArtists(apiClient.getCurrentUserId(), query)) : apiClient.getItems(apiClient.getCurrentUserId(), query)
|
|
||||||
}
|
if ("MusicArtist" === query.IncludeItemTypes) {
|
||||||
|
query.IncludeItemTypes = null;
|
||||||
|
return apiClient.getAlbumArtists(apiClient.getCurrentUserId(), query);
|
||||||
|
}
|
||||||
|
|
||||||
|
return apiClient.getItems(apiClient.getCurrentUserId(), query);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
window.ItemsByName = {
|
window.ItemsByName = {
|
||||||
renderItems: renderItems
|
renderItems: renderItems
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue