jellyfin-web/dashboard-ui/components/favoriteitems.js
2018-10-23 01:05:09 +03:00

177 lines
7.5 KiB
JavaScript

define(["loading", "libraryBrowser", "cardBuilder", "dom", "apphost", "imageLoader", "globalize", "layoutManager", "scrollStyles", "emby-itemscontainer"], function(loading, libraryBrowser, cardBuilder, dom, appHost, imageLoader, globalize, layoutManager) {
"use strict";
function enableScrollX() {
return !layoutManager.desktop
}
function getThumbShape() {
return enableScrollX() ? "overflowBackdrop" : "backdrop"
}
function getPosterShape() {
return enableScrollX() ? "overflowPortrait" : "portrait"
}
function getSquareShape() {
return enableScrollX() ? "overflowSquare" : "square"
}
function getSections() {
return [{
name: "HeaderFavoriteMovies",
types: "Movie",
id: "favoriteMovies",
shape: getPosterShape(),
showTitle: !1,
overlayPlayButton: !0
}, {
name: "HeaderFavoriteShows",
types: "Series",
id: "favoriteShows",
shape: getPosterShape(),
showTitle: !1,
overlayPlayButton: !0
}, {
name: "HeaderFavoriteEpisodes",
types: "Episode",
id: "favoriteEpisode",
shape: getThumbShape(),
preferThumb: !1,
showTitle: !0,
showParentTitle: !0,
overlayPlayButton: !0,
overlayText: !1,
centerText: !0
}, {
name: "HeaderFavoriteVideos",
types: "Video,MusicVideo",
id: "favoriteVideos",
shape: getThumbShape(),
preferThumb: !0,
showTitle: !0,
overlayPlayButton: !0,
overlayText: !1,
centerText: !0
}, {
name: "HeaderFavoriteGames",
types: "Game",
id: "favoriteGames",
shape: getSquareShape(),
preferThumb: !1,
showTitle: !0
}, {
name: "HeaderFavoriteArtists",
types: "MusicArtist",
id: "favoriteArtists",
shape: getSquareShape(),
preferThumb: !1,
showTitle: !0,
overlayText: !1,
showParentTitle: !1,
centerText: !0,
overlayPlayButton: !0,
coverImage: !0
}, {
name: "HeaderFavoriteAlbums",
types: "MusicAlbum",
id: "favoriteAlbums",
shape: getSquareShape(),
preferThumb: !1,
showTitle: !0,
overlayText: !1,
showParentTitle: !0,
centerText: !0,
overlayPlayButton: !0,
coverImage: !0
}, {
name: "HeaderFavoriteSongs",
types: "Audio",
id: "favoriteSongs",
shape: getSquareShape(),
preferThumb: !1,
showTitle: !0,
overlayText: !1,
showParentTitle: !0,
centerText: !0,
overlayMoreButton: !0,
action: "instantmix",
coverImage: !0
}]
}
function loadSection(elem, userId, topParentId, section, isSingleSection) {
var screenWidth = dom.getWindowSize().innerWidth,
options = {
SortBy: "SortName",
SortOrder: "Ascending",
Filters: "IsFavorite",
Recursive: !0,
Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
CollapseBoxSetItems: !1,
ExcludeLocationTypes: "Virtual",
EnableTotalRecordCount: !1
};
topParentId && (options.ParentId = topParentId), isSingleSection || (options.Limit = screenWidth >= 1920 ? 10 : screenWidth >= 1440 ? 8 : 6, enableScrollX() && (options.Limit = 20));
var promise;
return "MusicArtist" === section.types ? promise = ApiClient.getArtists(userId, options) : (options.IncludeItemTypes = section.types, promise = ApiClient.getItems(userId, options)), promise.then(function(result) {
var html = "";
if (result.Items.length) {
if (html += '<div class="sectionTitleContainer sectionTitleContainer-cards padded-left">', !layoutManager.tv && options.Limit && result.Items.length >= options.Limit) {
html += '<a is="emby-linkbutton" href="' + ("list/list.html?serverId=" + ApiClient.serverId() + "&type=" + section.types + "&IsFavorite=true") + '" class="more button-flat button-flat-mini sectionTitleTextButton">', html += '<h2 class="sectionTitle sectionTitle-cards">', html += globalize.translate(section.name), html += "</h2>", html += '<i class="md-icon">&#xE5CC;</i>', html += "</a>"
} else html += '<h2 class="sectionTitle sectionTitle-cards">' + globalize.translate(section.name) + "</h2>";
if (html += "</div>", enableScrollX()) {
var scrollXClass = "scrollX hiddenScrollX";
layoutManager.tv && (scrollXClass += " smoothScrollX"), html += '<div is="emby-itemscontainer" class="itemsContainer ' + scrollXClass + ' padded-left padded-right">'
} else html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">';
var supportsImageAnalysis = appHost.supports("imageanalysis"),
cardLayout = (appHost.preferVisualCards || supportsImageAnalysis) && section.autoCardLayout && section.showTitle;
cardLayout = !1, html += cardBuilder.getCardsHtml(result.Items, {
preferThumb: section.preferThumb,
shape: section.shape,
centerText: section.centerText && !cardLayout,
overlayText: !1 !== section.overlayText,
showTitle: section.showTitle,
showParentTitle: section.showParentTitle,
scalable: !0,
coverImage: section.coverImage,
overlayPlayButton: section.overlayPlayButton,
overlayMoreButton: section.overlayMoreButton && !cardLayout,
action: section.action,
allowBottomPadding: !enableScrollX(),
cardLayout: cardLayout,
vibrant: supportsImageAnalysis && cardLayout
}), html += "</div>"
}
elem.innerHTML = html, imageLoader.lazyChildren(elem)
})
}
function loadSections(page, userId, topParentId, types) {
loading.show();
var sections = getSections(),
sectionid = getParameterByName("sectionid");
sectionid && (sections = sections.filter(function(s) {
return s.id === sectionid
})), types && (sections = sections.filter(function(s) {
return -1 !== types.indexOf(s.id)
}));
var i, length, elem = page.querySelector(".favoriteSections");
if (!elem.innerHTML) {
var html = "";
for (i = 0, length = sections.length; i < length; i++) html += '<div class="verticalSection section' + sections[i].id + '"></div>';
elem.innerHTML = html
}
var promises = [];
for (i = 0, length = sections.length; i < length; i++) {
var section = sections[i];
elem = page.querySelector(".section" + section.id), promises.push(loadSection(elem, userId, topParentId, section, 1 === sections.length))
}
Promise.all(promises).then(function() {
loading.hide()
})
}
return {
render: loadSections
}
});