(function ($, document, LibraryBrowser, window) { var currentItem; var sessionsPromise; function getSessionsPromise() { if (sessionsPromise == null) { sessionsPromise = ApiClient.getSessions(); } return sessionsPromise; } function reload(page) { var id = getParameterByName('id'); Dashboard.showLoadingMsg(); ApiClient.getItem(Dashboard.getCurrentUserId(), id).done(function (item) { currentItem = item; renderHeader(page, item); $('#itemImage', page).html(LibraryBrowser.getDetailImageHtml(item)); LibraryBrowser.renderTitle(item, $('#itemName', page), $('#parentName', page), $('#grandParentName', page)); var context = getContext(item); setInitialCollapsibleState(page, item, context); renderDetails(page, item, context); if (MediaPlayer.canPlay(item)) { $('#playButtonContainer', page).show(); } else { $('#playButtonContainer', page).hide(); } Dashboard.getCurrentUser().done(function (user) { if (user.Configuration.IsAdministrator) { $('#editButtonContainer', page).show(); } else { $('#editButtonContainer', page).hide(); } }); $(".autoNumeric").autoNumeric('init'); if (ApiClient.isWebSocketOpen()) { ApiClient.sendWebSocketMessage("Context", [item.Type, item.Id, context].join('|')); } Dashboard.hideLoadingMsg(); }); } function getContext(item) { // should return either movies, tv, music or games if (item.Type == "Episode" || item.Type == "Series" || item.Type == "Season") { return "tv"; } if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "BoxSet") { return "movies"; } if (item.Type == "Audio" || item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "Artist") { return "music"; } if (item.MediaType == "Game") { return "games"; } return ""; } function enableCustomHeader(page, text) { var elem = $('.libraryPageHeader', page).show(); $('span', elem).html(text); } function renderHeader(page, item) { if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "BoxSet") { enableCustomHeader(page, "Movies"); $('#standardLogo', page).hide(); } else if (item.Type == "Episode" || item.Type == "Season" || item.Type == "Series") { enableCustomHeader(page, "TV Shows"); $('#standardLogo', page).hide(); } else if (item.Type == "Audio" || item.Type == "MusicAlbum") { enableCustomHeader(page, "Music"); $('#standardLogo', page).hide(); } else if (item.MediaType == "Game" || item.Type == "GamePlatform") { enableCustomHeader(page, "Games"); $('#standardLogo', page).hide(); } else { $('.libraryPageHeader', page).hide(); $('#standardLogo', page).show(); } $('.itemTabs', page).hide(); if (item.Type == "MusicAlbum") { $('#albumTabs', page).show(); } if (item.Type == "Audio") { $('#songTabs', page).show(); } if (item.Type == "Movie") { $('#movieTabs', page).show(); } if (item.MediaType == "Game") { $('#gameTabs', page).show(); } if (item.Type == "GamePlatform") { $('#gameSystemTabs', page).show(); } if (item.Type == "BoxSet") { $('#boxsetTabs', page).show(); } if (item.Type == "Trailer") { $('#trailerTabs', page).show(); } if (item.Type == "Episode" || item.Type == "Season" || item.Type == "Series") { $('#tvShowsTabs', page).show(); } } function setInitialCollapsibleState(page, item, context) { if (item.ChildCount && item.Type == "MusicAlbum") { $('#itemSongs', page).show(); $('#childrenCollapsible', page).hide(); renderChildren(page, item); } else if (item.ChildCount) { $('#itemSongs', page).hide(); $('#childrenCollapsible', page).show(); renderChildren(page, item); } else { $('#itemSongs', page).hide(); $('#childrenCollapsible', page).hide(); } if (LibraryBrowser.shouldDisplayGallery(item)) { $('#galleryCollapsible', page).show(); renderGallery(page, item); } else { $('#galleryCollapsible', page).hide(); } if (!item.MediaStreams || !item.MediaStreams.length) { $('#mediaInfoCollapsible', page).hide(); } else { $('#mediaInfoCollapsible', page).show(); renderMediaInfo(page, item); } if (!item.Chapters || !item.Chapters.length) { $('#scenesCollapsible', page).hide(); } else { $('#scenesCollapsible', page).show(); renderScenes(page, item, 6); } if (!item.LocalTrailerCount || item.LocalTrailerCount == 0) { $('#trailersCollapsible', page).hide(); } else { $('#trailersCollapsible', page).show(); renderTrailers(page, item); } if (!item.SpecialFeatureCount || item.SpecialFeatureCount == 0) { $('#specialsCollapsible', page).hide(); } else { $('#specialsCollapsible', page).show(); renderSpecials(page, item, 6); } if (!item.People || !item.People.length) { $('#castCollapsible', page).hide(); } else { $('#castCollapsible', page).show(); renderCast(page, item, context, 10); } $('#themeSongsCollapsible', page).hide(); $('#themeVideosCollapsible', page).hide(); ApiClient.getThemeSongs(Dashboard.getCurrentUserId(), item.Id).done(function (result) { renderThemeSongs(page, item, result); }); ApiClient.getThemeVideos(Dashboard.getCurrentUserId(), item.Id).done(function (result) { renderThemeVideos(page, item, result); }); renderCriticReviews(page, item, 1); } function renderDetails(page, item, context) { if (item.Taglines && item.Taglines.length) { $('#itemTagline', page).html(item.Taglines[0]).show(); } else { $('#itemTagline', page).hide(); } LibraryBrowser.renderOverview($('#itemOverview', page), item); if (item.CommunityRating || item.CriticRating) { $('#itemCommunityRating', page).html(LibraryBrowser.getRatingHtml(item)).show(); } else { $('#itemCommunityRating', page).hide(); } if (item.Type != "Episode" && item.Type != "Movie") { var premiereDateElem = $('#itemPremiereDate', page).show(); LibraryBrowser.renderPremiereDate(premiereDateElem, item); } else { $('#itemPremiereDate', page).hide(); } LibraryBrowser.renderBudget($('#itemBudget', page), item); LibraryBrowser.renderRevenue($('#itemRevenue', page), item); $('#itemMiscInfo', page).html(LibraryBrowser.getMiscInfoHtml(item)); LibraryBrowser.renderGenres($('#itemGenres', page), item, context); LibraryBrowser.renderStudios($('#itemStudios', page), item, context); renderUserDataIcons(page, item); LibraryBrowser.renderLinks($('#itemLinks', page), item); if (item.CriticRatingSummary) { $('#criticRatingSummary', page).show(); $('#criticRatingSummaryText', page).html(item.CriticRatingSummary); } else { $('#criticRatingSummary', page).hide(); } renderTags(page, item); } function renderTags(page, item) { if (item.Tags && item.Tags.length) { var html = ''; for (var i = 0, length = item.Tags.length; i < length; i++) { html += '
' + item.Tags[i] + '
'; } $('#itemTags', page).show().html(html); } else { $('#itemTags', page).hide(); } } function renderChildren(page, item) { ApiClient.getItems(Dashboard.getCurrentUserId(), { ParentId: getParameterByName('id'), SortBy: "SortName", Fields: "PrimaryImageAspectRatio,ItemCounts,DisplayMediaType,DateCreated,UserData,AudioInfo" }).done(function (result) { if (item.Type == "MusicAlbum") { $('#itemSongs', page).html(LibraryBrowser.getSongTableHtml(result.Items, { showArtist: true })).trigger('create'); } else { var shape = "smallPoster"; if (item.Type == "Season") { shape = "smallBackdrop"; } var html = LibraryBrowser.getPosterDetailViewHtml({ items: result.Items, useAverageAspectRatio: true, shape: shape }); $('#childrenContent', page).html(html); } }); if (item.Type == "Season") { $('#childrenTitle', page).html('Episodes (' + item.ChildCount + ')'); } else if (item.Type == "Series") { $('#childrenTitle', page).html('Seasons (' + item.ChildCount + ')'); } else if (item.Type == "BoxSet") { $('#childrenTitle', page).html('Movies (' + item.ChildCount + ')'); } else if (item.Type == "MusicAlbum") { $('#childrenTitle', page).html('Tracks (' + item.ChildCount + ')'); } else if (item.Type == "GamePlatform") { $('#childrenTitle', page).html('Games (' + item.ChildCount + ')'); } else { $('#childrenTitle', page).html('Items (' + item.ChildCount + ')'); } } function renderUserDataIcons(page, item) { $('#itemRatings', page).html(LibraryBrowser.getUserDataIconsHtml(item)); } function renderCriticReviews(page, item, limit) { var options = {}; if (limit) { options.limit = limit; } ApiClient.getCriticReviews(item.Id, options).done(function (result) { if (result.TotalRecordCount) { $('#criticReviewsCollapsible', page).show(); renderCriticReviewsContent(page, result, limit); } else { $('#criticReviewsCollapsible', page).hide(); } }); } function renderCriticReviewsContent(page, result, limit) { var html = ''; var reviews = result.ItemReviews; for (var i = 0, length = reviews.length; i < length; i++) { var review = reviews[i]; html += '
'; html += '
'; if (review.Score != null) { html += review.Score; } else if (review.Likes != null) { if (review.Likes) { html += ''; } else { html += ''; } } html += '
'; html += '
' + review.Caption + '
'; var vals = []; if (review.ReviewerName) { vals.push(review.ReviewerName); } if (review.Publisher) { vals.push(review.Publisher); } html += '
' + vals.join(', ') + '.'; if (review.Date) { try { var date = parseISO8601Date(review.Date, true).toLocaleDateString(); html += '' + date + ''; } catch (error) { } } html += '
'; if (review.Url) { html += ''; } html += '
'; } if (limit && result.TotalRecordCount > limit) { html += '

'; } $('#criticReviewsContent', page).html(html).trigger('create'); } function renderThemeSongs(page, item, result) { if (result.Items.length) { $('#themeSongsCollapsible', page).show(); $('#themeSongsContent', page).html(LibraryBrowser.getSongTableHtml(result.Items, { showArtist: true, showAlbum: true })).trigger('create'); } } function renderThemeVideos(page, item, result) { if (result.Items.length) { $('#themeVideosCollapsible', page).show(); $('#themeVideosContent', page).html(getVideosHtml(result.Items)).trigger('create'); } } function renderScenes(page, item, limit) { var html = ''; var chapters = item.Chapters || []; for (var i = 0, length = chapters.length; i < length; i++) { if (limit && i >= limit) { break; } var chapter = chapters[i]; var chapterName = chapter.Name || "Chapter " + i; html += ''; var imgUrl; if (chapter.ImageTag) { imgUrl = ApiClient.getImageUrl(item.Id, { width: 400, tag: chapter.ImageTag, type: "Chapter", index: i }); } else { imgUrl = "css/images/items/list/chapter.png"; } html += '
'; html += '
' + chapterName + '
'; html += '
'; html += ticks_to_human(chapter.StartPositionTicks); html += '
'; html += '
'; } if (limit && chapters.length > limit) { html += '

'; } $('#scenesContent', page).html(html).trigger('create'); } function renderGallery(page, item) { var html = LibraryBrowser.getGalleryHtml(item); $('#galleryContent', page).html(html).trigger('create'); } function renderMediaInfo(page, item) { var html = ''; for (var i = 0, length = item.MediaStreams.length; i < length; i++) { var stream = item.MediaStreams[i]; if (stream.Type == "Data") { continue; } var type; if (item.MediaType == "Audio" && stream.Type == "Video") { type = "Embedded Image"; } else { type = stream.Type; } html += '
'; html += '

' + type + '

'; html += ''; html += '
'; } $('#mediaInfoContent', page).html(html).trigger('create'); } function getVideosHtml(items, limit, moreButtonClass) { var html = ''; for (var i = 0, length = items.length; i < length; i++) { if (limit && i >= limit) { break; } var item = items[i]; var cssClass = "posterItem smallBackdropPosterItem"; html += ''; var imageTags = item.ImageTags || {}; var imgUrl; if (imageTags.Primary) { imgUrl = ApiClient.getImageUrl(item.Id, { maxwidth: 500, tag: imageTags.Primary, type: "primary" }); } else { imgUrl = "css/images/items/detail/video.png"; } html += '
'; html += '
' + item.Name + '
'; html += '
'; if (item.RunTimeTicks != "") { html += ticks_to_human(item.RunTimeTicks); } else { html += " "; } html += '
'; html += '
'; } if (limit && items.length > limit) { html += '

'; } return html; } function renderSpecials(page, item, limit) { ApiClient.getSpecialFeatures(Dashboard.getCurrentUserId(), item.Id).done(function (specials) { $('#specialsContent', page).html(getVideosHtml(specials, limit, "moreSpecials")).trigger('create'); }); } function renderTrailers(page, item) { ApiClient.getLocalTrailers(Dashboard.getCurrentUserId(), item.Id).done(function (trailers) { $('#trailersContent', page).html(getVideosHtml(trailers)); }); } function renderCast(page, item, context, limit) { var html = ''; var casts = item.People || []; for (var i = 0, length = casts.length; i < length; i++) { if (limit && i >= limit) { break; } var cast = casts[i]; html += ''; var imgUrl; if (cast.PrimaryImageTag) { imgUrl = ApiClient.getPersonImageUrl(cast.Name, { width: 130, tag: cast.PrimaryImageTag, type: "primary" }); } else { imgUrl = "css/images/items/list/person.png"; } html += '
'; html += '
'; html += '

' + cast.Name + '

'; var role = cast.Role ? "as " + cast.Role : cast.Type; html += '

' + (role || "") + '

'; html += '
'; html += '
'; } if (limit && casts.length > limit) { html += '

'; } $('#castContent', page).html(html).trigger('create'); } function play(startPosition) { MediaPlayer.play([currentItem], startPosition); } $(document).on('pageinit', "#itemDetailPage", function () { var page = this; $('#btnPlay', page).on('click', function () { var userdata = currentItem.UserData || {}; LibraryBrowser.showPlayMenu(this, currentItem.Id, currentItem.MediaType, userdata.PlaybackPositionTicks); }); $('#btnEdit', page).on('click', function () { Dashboard.navigate("edititemimages.html?id=" + currentItem.Id); }); }).on('pageshow', "#itemDetailPage", function () { var page = this; $(page).on("click.moreScenes", ".moreScenes", function () { renderScenes(page, currentItem); }).on("click.morePeople", ".morePeople", function () { renderCast(page, currentItem, getContext(currentItem)); }).on("click.moreSpecials", ".moreSpecials", function () { renderSpecials(page, currentItem); }).on("click.moreCriticReviews", ".moreCriticReviews", function () { renderCriticReviews(page, currentItem); }); reload(page); }).on('pagehide', "#itemDetailPage", function () { currentItem = null; var page = this; $(page).off("click.moreScenes").off("click.morePeople").off("click.moreSpecials").off("click.moreCriticReviews"); }); function itemDetailPage() { var self = this; self.play = play; } window.ItemDetailPage = new itemDetailPage(); })(jQuery, document, LibraryBrowser, window);