From 5ad1c57b52ece60fc3840d70e72675f8d377f7f5 Mon Sep 17 00:00:00 2001 From: DesertCookie Date: Sat, 16 May 2020 14:22:25 +0200 Subject: [PATCH 001/267] Sort playback media sources alphabetically Sorts the map of media sources received by the server alphabetically ignoring capitilisation. --- src/controllers/itemdetailpage.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index 45342208ea9..4c0fca9bac5 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -146,6 +146,17 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti page.querySelector('.trackSelections').classList.remove('hide'); select.setLabel(globalize.translate('LabelVersion')); var currentValue = select.value; + mediaSources.sort(function(a, b) { + var nameA = a.Name.toUpperCase(); + var nameB = b.Name.toUpperCase(); + if(nameA < nameB) { + return -1; + } + if(nameA > nameB) { + return 1; + } + return 0; + }); var selectedId = mediaSources[0].Id; select.innerHTML = mediaSources.map(function (v) { var selected = v.Id === selectedId ? ' selected' : ''; From c7271b6fb406025a195bb79ed1c395eb3253057f Mon Sep 17 00:00:00 2001 From: DesertCookie Date: Sat, 16 May 2020 14:24:37 +0200 Subject: [PATCH 002/267] Added name to list of contributors --- CONTRIBUTORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 2eae7e69331..84ef26aa55e 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -35,6 +35,7 @@ - [Thibault Nocchi](https://github.com/ThibaultNocchi) - [MrTimscampi](https://github.com/MrTimscampi) - [Sarab Singh](https://github.com/sarab97) + - [DesertCookie](https://github.com/desertcookie) # Emby Contributors From c2563c567590121b9a9e5f4c16fe1e525ef0d092 Mon Sep 17 00:00:00 2001 From: DesertCookie Date: Sat, 16 May 2020 16:11:39 +0200 Subject: [PATCH 003/267] Fixed tabs and spacing --- src/controllers/itemdetailpage.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index 4c0fca9bac5..8c5c21d93b5 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -146,17 +146,17 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti page.querySelector('.trackSelections').classList.remove('hide'); select.setLabel(globalize.translate('LabelVersion')); var currentValue = select.value; - mediaSources.sort(function(a, b) { - var nameA = a.Name.toUpperCase(); - var nameB = b.Name.toUpperCase(); - if(nameA < nameB) { - return -1; - } - if(nameA > nameB) { - return 1; - } - return 0; - }); + mediaSources.sort(function(a, b) { + var nameA = a.Name.toUpperCase(); + var nameB = b.Name.toUpperCase(); + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + return 0; + }); var selectedId = mediaSources[0].Id; select.innerHTML = mediaSources.map(function (v) { var selected = v.Id === selectedId ? ' selected' : ''; From 96aedcd945fc706372e114023238c667808893a9 Mon Sep 17 00:00:00 2001 From: DesertCookie Date: Sat, 16 May 2020 16:15:44 +0200 Subject: [PATCH 004/267] Removed tabs Accidentally added in by Notepad++ autocomplete --- src/controllers/itemdetailpage.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index 8c5c21d93b5..8f004aab1f0 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -147,15 +147,15 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti select.setLabel(globalize.translate('LabelVersion')); var currentValue = select.value; mediaSources.sort(function(a, b) { - var nameA = a.Name.toUpperCase(); - var nameB = b.Name.toUpperCase(); - if (nameA < nameB) { - return -1; - } - if (nameA > nameB) { - return 1; - } - return 0; + var nameA = a.Name.toUpperCase(); + var nameB = b.Name.toUpperCase(); + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + return 0; }); var selectedId = mediaSources[0].Id; select.innerHTML = mediaSources.map(function (v) { From cadef5393edf6dadaaf60a41dd98e5ea4b80adaf Mon Sep 17 00:00:00 2001 From: DesertCookie Date: Tue, 19 May 2020 13:15:46 +0200 Subject: [PATCH 005/267] Add logic to sort resolutions and versions separately Movie versions like "2160p" and "UHD" are now sorted separately; the first in descending order, the second in ascending order. --- src/controllers/itemdetailpage.js | 1174 +++++++++++++++-------------- 1 file changed, 607 insertions(+), 567 deletions(-) diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index 8f004aab1f0..c5ae6126a79 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -1,5 +1,5 @@ -define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSettings', 'cardBuilder', 'datetime', 'mediaInfo', 'backdrop', 'listView', 'itemContextMenu', 'itemHelper', 'dom', 'indicators', 'imageLoader', 'libraryMenu', 'globalize', 'browser', 'events', 'playbackManager', 'scrollStyles', 'emby-itemscontainer', 'emby-checkbox', 'emby-button', 'emby-playstatebutton', 'emby-ratingbutton', 'emby-scroller', 'emby-select'], function (loading, appRouter, layoutManager, connectionManager, userSettings, cardBuilder, datetime, mediaInfo, backdrop, listView, itemContextMenu, itemHelper, dom, indicators, imageLoader, libraryMenu, globalize, browser, events, playbackManager) { - 'use strict'; +define(["loading", "appRouter", "layoutManager", "connectionManager", "userSettings", "cardBuilder", "datetime", "mediaInfo", "backdrop", "listView", "itemContextMenu", "itemHelper", "dom", "indicators", "imageLoader", "libraryMenu", "globalize", "browser", "events", "playbackManager", "scrollStyles", "emby-itemscontainer", "emby-checkbox", "emby-button", "emby-playstatebutton", "emby-ratingbutton", "emby-scroller", "emby-select"], function (loading, appRouter, layoutManager, connectionManager, userSettings, cardBuilder, datetime, mediaInfo, backdrop, listView, itemContextMenu, itemHelper, dom, indicators, imageLoader, libraryMenu, globalize, browser, events, playbackManager) { + "use strict"; function getPromise(apiClient, params) { var id = params.id; @@ -24,19 +24,19 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti return apiClient.getArtist(params.musicartist, apiClient.getCurrentUserId()); } - throw new Error('Invalid request'); + throw new Error("Invalid request"); } function hideAll(page, className, show) { var i; var length; - var elems = page.querySelectorAll('.' + className); + var elems = page.querySelectorAll("." + className); for (i = 0, length = elems.length; i < length; i++) { if (show) { - elems[i].classList.remove('hide'); + elems[i].classList.remove("hide"); } else { - elems[i].classList.add('hide'); + elems[i].classList.add("hide"); } } } @@ -61,112 +61,128 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function getProgramScheduleHtml(items) { - var html = ''; + var html = ""; html += '
'; html += listView.getListViewHtml({ items: items, enableUserDataButtons: false, image: true, - imageSource: 'channel', + imageSource: "channel", showProgramDateTime: true, showChannel: false, mediaInfo: false, - action: 'none', + action: "none", moreButton: false, recordButton: false }); - return html += '
'; + return html += ""; } function renderSeriesTimerSchedule(page, apiClient, seriesTimerId) { apiClient.getLiveTvTimers({ UserId: apiClient.getCurrentUserId(), ImageTypeLimit: 1, - EnableImageTypes: 'Primary,Backdrop,Thumb', - SortBy: 'StartDate', + EnableImageTypes: "Primary,Backdrop,Thumb", + SortBy: "StartDate", EnableTotalRecordCount: false, EnableUserData: false, SeriesTimerId: seriesTimerId, - Fields: 'ChannelInfo,ChannelImage' + Fields: "ChannelInfo,ChannelImage" }).then(function (result) { if (result.Items.length && result.Items[0].SeriesTimerId != seriesTimerId) { result.Items = []; } var html = getProgramScheduleHtml(result.Items); - var scheduleTab = page.querySelector('.seriesTimerSchedule'); + var scheduleTab = page.querySelector(".seriesTimerSchedule"); scheduleTab.innerHTML = html; imageLoader.lazyChildren(scheduleTab); }); } function renderTimerEditor(page, item, apiClient, user) { - if ('Recording' !== item.Type || !user.Policy.EnableLiveTvManagement || !item.TimerId || 'InProgress' !== item.Status) { - return void hideAll(page, 'btnCancelTimer'); + if ("Recording" !== item.Type || !user.Policy.EnableLiveTvManagement || !item.TimerId || "InProgress" !== item.Status) { + return void hideAll(page, "btnCancelTimer"); } - hideAll(page, 'btnCancelTimer', true); + hideAll(page, "btnCancelTimer", true); } function renderSeriesTimerEditor(page, item, apiClient, user) { - if ('SeriesTimer' !== item.Type) { - return void hideAll(page, 'btnCancelSeriesTimer'); + if ("SeriesTimer" !== item.Type) { + return void hideAll(page, "btnCancelSeriesTimer"); } if (user.Policy.EnableLiveTvManagement) { - require(['seriesRecordingEditor'], function (seriesRecordingEditor) { + require(["seriesRecordingEditor"], function (seriesRecordingEditor) { seriesRecordingEditor.embed(item, apiClient.serverId(), { - context: page.querySelector('.seriesRecordingEditor') + context: page.querySelector(".seriesRecordingEditor") }); }); - page.querySelector('.seriesTimerScheduleSection').classList.remove('hide'); - hideAll(page, 'btnCancelSeriesTimer', true); + page.querySelector(".seriesTimerScheduleSection").classList.remove("hide"); + hideAll(page, "btnCancelSeriesTimer", true); return void renderSeriesTimerSchedule(page, apiClient, item.Id); } - page.querySelector('.seriesTimerScheduleSection').classList.add('hide'); - return void hideAll(page, 'btnCancelSeriesTimer'); + page.querySelector(".seriesTimerScheduleSection").classList.add("hide"); + return void hideAll(page, "btnCancelSeriesTimer"); } function renderTrackSelections(page, instance, item, forceReload) { - var select = page.querySelector('.selectSource'); - - if (!item.MediaSources || !itemHelper.supportsMediaSourceSelection(item) || -1 === playbackManager.getSupportedCommands().indexOf('PlayMediaSource') || !playbackManager.canPlay(item)) { - page.querySelector('.trackSelections').classList.add('hide'); - select.innerHTML = ''; - page.querySelector('.selectVideo').innerHTML = ''; - page.querySelector('.selectAudio').innerHTML = ''; - page.querySelector('.selectSubtitles').innerHTML = ''; + var select = page.querySelector(".selectSource"); + + if (!item.MediaSources || !itemHelper.supportsMediaSourceSelection(item) || -1 === playbackManager.getSupportedCommands().indexOf("PlayMediaSource") || !playbackManager.canPlay(item)) { + page.querySelector(".trackSelections").classList.add("hide"); + select.innerHTML = ""; + page.querySelector(".selectVideo").innerHTML = ""; + page.querySelector(".selectAudio").innerHTML = ""; + page.querySelector(".selectSubtitles").innerHTML = ""; return; } playbackManager.getPlaybackMediaSources(item).then(function (mediaSources) { instance._currentPlaybackMediaSources = mediaSources; - page.querySelector('.trackSelections').classList.remove('hide'); - select.setLabel(globalize.translate('LabelVersion')); + page.querySelector(".trackSelections").classList.remove("hide"); + select.setLabel(globalize.translate("LabelVersion")); var currentValue = select.value; - mediaSources.sort(function(a, b) { + + var resolutionNames = []; + var sourceNames = []; + mediaSources.forEach(function (v) { + if (v.Name.endsWith('p')) { + resolutionNames.push(v); + } else { + sourceNames.push(v); + } + }); + + resolutionNames.sort((a, b) => parseInt(b.Name) - parseInt(a.Name)); + sourceNames.sort(function(a, b) { var nameA = a.Name.toUpperCase(); var nameB = b.Name.toUpperCase(); if (nameA < nameB) { return -1; - } - if (nameA > nameB) { + } else if (nameA > nameB) { return 1; } return 0; }); + + mediaSources = []; + resolutionNames.forEach(v => mediaSources.push(v)); + sourceNames.forEach(v => mediaSources.push(v)); + var selectedId = mediaSources[0].Id; select.innerHTML = mediaSources.map(function (v) { - var selected = v.Id === selectedId ? ' selected' : ''; - return ''; - }).join(''); + var selected = v.Id === selectedId ? " selected" : ""; + return '"; + }).join(""); if (mediaSources.length > 1) { - page.querySelector('.selectSourceContainer').classList.remove('hide'); + page.querySelector(".selectSourceContainer").classList.remove("hide"); } else { - page.querySelector('.selectSourceContainer').classList.add('hide'); + page.querySelector(".selectSourceContainer").classList.add("hide"); } if (select.value !== currentValue || forceReload) { @@ -178,18 +194,18 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function renderVideoSelections(page, mediaSources) { - var mediaSourceId = page.querySelector('.selectSource').value; + var mediaSourceId = page.querySelector(".selectSource").value; var mediaSource = mediaSources.filter(function (m) { return m.Id === mediaSourceId; })[0]; var tracks = mediaSource.MediaStreams.filter(function (m) { - return 'Video' === m.Type; + return "Video" === m.Type; }); - var select = page.querySelector('.selectVideo'); - select.setLabel(globalize.translate('LabelVideo')); + var select = page.querySelector(".selectVideo"); + select.setLabel(globalize.translate("LabelVideo")); var selectedId = tracks.length ? tracks[0].Index : -1; select.innerHTML = tracks.map(function (v) { - var selected = v.Index === selectedId ? ' selected' : ''; + var selected = v.Index === selectedId ? " selected" : ""; var titleParts = []; var resolutionText = mediaInfo.getResolutionText(v); @@ -201,100 +217,100 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti titleParts.push(v.Codec.toUpperCase()); } - return ''; - }).join(''); - select.setAttribute('disabled', 'disabled'); + return '"; + }).join(""); + select.setAttribute("disabled", "disabled"); if (tracks.length) { - page.querySelector('.selectVideoContainer').classList.remove('hide'); + page.querySelector(".selectVideoContainer").classList.remove("hide"); } else { - page.querySelector('.selectVideoContainer').classList.add('hide'); + page.querySelector(".selectVideoContainer").classList.add("hide"); } } function renderAudioSelections(page, mediaSources) { - var mediaSourceId = page.querySelector('.selectSource').value; + var mediaSourceId = page.querySelector(".selectSource").value; var mediaSource = mediaSources.filter(function (m) { return m.Id === mediaSourceId; })[0]; var tracks = mediaSource.MediaStreams.filter(function (m) { - return 'Audio' === m.Type; + return "Audio" === m.Type; }); - var select = page.querySelector('.selectAudio'); - select.setLabel(globalize.translate('LabelAudio')); + var select = page.querySelector(".selectAudio"); + select.setLabel(globalize.translate("LabelAudio")); var selectedId = mediaSource.DefaultAudioStreamIndex; select.innerHTML = tracks.map(function (v) { - var selected = v.Index === selectedId ? ' selected' : ''; - return ''; - }).join(''); + var selected = v.Index === selectedId ? " selected" : ""; + return '"; + }).join(""); if (tracks.length > 1) { - select.removeAttribute('disabled'); + select.removeAttribute("disabled"); } else { - select.setAttribute('disabled', 'disabled'); + select.setAttribute("disabled", "disabled"); } if (tracks.length) { - page.querySelector('.selectAudioContainer').classList.remove('hide'); + page.querySelector(".selectAudioContainer").classList.remove("hide"); } else { - page.querySelector('.selectAudioContainer').classList.add('hide'); + page.querySelector(".selectAudioContainer").classList.add("hide"); } } function renderSubtitleSelections(page, mediaSources) { - var mediaSourceId = page.querySelector('.selectSource').value; + var mediaSourceId = page.querySelector(".selectSource").value; var mediaSource = mediaSources.filter(function (m) { return m.Id === mediaSourceId; })[0]; var tracks = mediaSource.MediaStreams.filter(function (m) { - return 'Subtitle' === m.Type; + return "Subtitle" === m.Type; }); - var select = page.querySelector('.selectSubtitles'); - select.setLabel(globalize.translate('LabelSubtitles')); + var select = page.querySelector(".selectSubtitles"); + select.setLabel(globalize.translate("LabelSubtitles")); var selectedId = null == mediaSource.DefaultSubtitleStreamIndex ? -1 : mediaSource.DefaultSubtitleStreamIndex; if (tracks.length) { - var selected = -1 === selectedId ? ' selected' : ''; - select.innerHTML = '' + tracks.map(function (v) { - selected = v.Index === selectedId ? ' selected' : ''; - return ''; - }).join(''); - page.querySelector('.selectSubtitlesContainer').classList.remove('hide'); + var selected = -1 === selectedId ? " selected" : ""; + select.innerHTML = '" + tracks.map(function (v) { + selected = v.Index === selectedId ? " selected" : ""; + return '"; + }).join(""); + page.querySelector(".selectSubtitlesContainer").classList.remove("hide"); } else { - select.innerHTML = ''; - page.querySelector('.selectSubtitlesContainer').classList.add('hide'); + select.innerHTML = ""; + page.querySelector(".selectSubtitlesContainer").classList.add("hide"); } } function reloadPlayButtons(page, item) { var canPlay = false; - if ('Program' == item.Type) { + if ("Program" == item.Type) { var now = new Date(); if (now >= datetime.parseISO8601Date(item.StartDate, true) && now < datetime.parseISO8601Date(item.EndDate, true)) { - hideAll(page, 'btnPlay', true); + hideAll(page, "btnPlay", true); canPlay = true; } else { - hideAll(page, 'btnPlay'); + hideAll(page, "btnPlay"); } - hideAll(page, 'btnResume'); - hideAll(page, 'btnInstantMix'); - hideAll(page, 'btnShuffle'); + hideAll(page, "btnResume"); + hideAll(page, "btnInstantMix"); + hideAll(page, "btnShuffle"); } else if (playbackManager.canPlay(item)) { - hideAll(page, 'btnPlay', true); - var enableInstantMix = -1 !== ['Audio', 'MusicAlbum', 'MusicGenre', 'MusicArtist'].indexOf(item.Type); - hideAll(page, 'btnInstantMix', enableInstantMix); - var enableShuffle = item.IsFolder || -1 !== ['MusicAlbum', 'MusicGenre', 'MusicArtist'].indexOf(item.Type); - hideAll(page, 'btnShuffle', enableShuffle); + hideAll(page, "btnPlay", true); + var enableInstantMix = -1 !== ["Audio", "MusicAlbum", "MusicGenre", "MusicArtist"].indexOf(item.Type); + hideAll(page, "btnInstantMix", enableInstantMix); + var enableShuffle = item.IsFolder || -1 !== ["MusicAlbum", "MusicGenre", "MusicArtist"].indexOf(item.Type); + hideAll(page, "btnShuffle", enableShuffle); canPlay = true; - hideAll(page, 'btnResume', item.UserData && item.UserData.PlaybackPositionTicks > 0); + hideAll(page, "btnResume", item.UserData && item.UserData.PlaybackPositionTicks > 0); } else { - hideAll(page, 'btnPlay'); - hideAll(page, 'btnResume'); - hideAll(page, 'btnInstantMix'); - hideAll(page, 'btnShuffle'); + hideAll(page, "btnPlay"); + hideAll(page, "btnResume"); + hideAll(page, "btnInstantMix"); + hideAll(page, "btnShuffle"); } return canPlay; @@ -303,30 +319,30 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti function reloadUserDataButtons(page, item) { var i; var length; - var btnPlaystates = page.querySelectorAll('.btnPlaystate'); + var btnPlaystates = page.querySelectorAll(".btnPlaystate"); for (i = 0, length = btnPlaystates.length; i < length; i++) { var btnPlaystate = btnPlaystates[i]; if (itemHelper.canMarkPlayed(item)) { - btnPlaystate.classList.remove('hide'); + btnPlaystate.classList.remove("hide"); btnPlaystate.setItem(item); } else { - btnPlaystate.classList.add('hide'); + btnPlaystate.classList.add("hide"); btnPlaystate.setItem(null); } } - var btnUserRatings = page.querySelectorAll('.btnUserRating'); + var btnUserRatings = page.querySelectorAll(".btnUserRating"); for (i = 0, length = btnUserRatings.length; i < length; i++) { var btnUserRating = btnUserRatings[i]; if (itemHelper.canRate(item)) { - btnUserRating.classList.remove('hide'); + btnUserRating.classList.remove("hide"); btnUserRating.setItem(item); } else { - btnUserRating.classList.add('hide'); + btnUserRating.classList.add("hide"); btnUserRating.setItem(null); } } @@ -339,13 +355,13 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti var artist = artists[i]; var href = appRouter.getRouteUrl(artist, { context: context, - itemType: 'MusicArtist', + itemType: "MusicArtist", serverId: serverId }); - html.push('' + artist.Name + ''); + html.push('' + artist.Name + ""); } - return html = html.join(' / '); + return html = html.join(" / "); } function renderName(item, container, isStatic, context) { var parentRoute; @@ -355,64 +371,64 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti if (item.AlbumArtists) { parentNameHtml.push(getArtistLinksHtml(item.AlbumArtists, item.ServerId, context)); parentNameLast = true; - } else if (item.ArtistItems && item.ArtistItems.length && 'MusicVideo' === item.Type) { + } else if (item.ArtistItems && item.ArtistItems.length && "MusicVideo" === item.Type) { parentNameHtml.push(getArtistLinksHtml(item.ArtistItems, item.ServerId, context)); parentNameLast = true; - } else if (item.SeriesName && 'Episode' === item.Type) { + } else if (item.SeriesName && "Episode" === item.Type) { parentRoute = appRouter.getRouteUrl({ Id: item.SeriesId, Name: item.SeriesName, - Type: 'Series', + Type: "Series", IsFolder: true, ServerId: item.ServerId }, { context: context }); - parentNameHtml.push('' + item.SeriesName + ''); + parentNameHtml.push('' + item.SeriesName + ""); } else if (item.IsSeries || item.EpisodeTitle) { parentNameHtml.push(item.Name); } - if (item.SeriesName && 'Season' === item.Type) { + if (item.SeriesName && "Season" === item.Type) { parentRoute = appRouter.getRouteUrl({ Id: item.SeriesId, Name: item.SeriesName, - Type: 'Series', + Type: "Series", IsFolder: true, ServerId: item.ServerId }, { context: context }); - parentNameHtml.push('' + item.SeriesName + ''); - } else if (null != item.ParentIndexNumber && 'Episode' === item.Type) { + parentNameHtml.push('' + item.SeriesName + ""); + } else if (null != item.ParentIndexNumber && "Episode" === item.Type) { parentRoute = appRouter.getRouteUrl({ Id: item.SeasonId, Name: item.SeasonName, - Type: 'Season', + Type: "Season", IsFolder: true, ServerId: item.ServerId }, { context: context }); - parentNameHtml.push('' + item.SeasonName + ''); + parentNameHtml.push('' + item.SeasonName + ""); } else if (null != item.ParentIndexNumber && item.IsSeries) { - parentNameHtml.push(item.SeasonName || 'S' + item.ParentIndexNumber); - } else if (item.Album && item.AlbumId && ('MusicVideo' === item.Type || 'Audio' === item.Type)) { + parentNameHtml.push(item.SeasonName || "S" + item.ParentIndexNumber); + } else if (item.Album && item.AlbumId && ("MusicVideo" === item.Type || "Audio" === item.Type)) { parentRoute = appRouter.getRouteUrl({ Id: item.AlbumId, Name: item.Album, - Type: 'MusicAlbum', + Type: "MusicAlbum", IsFolder: true, ServerId: item.ServerId }, { context: context }); - parentNameHtml.push('' + item.Album + ''); + parentNameHtml.push('' + item.Album + ""); } else if (item.Album) { parentNameHtml.push(item.Album); } // FIXME: This whole section needs some refactoring, so it becames easier to scale across all form factors. See GH #1022 - var html = ''; + var html = ""; var tvShowHtml = parentNameHtml[0]; var tvSeasonHtml = parentNameHtml[1]; @@ -420,15 +436,15 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti if (parentNameLast) { // Music if (layoutManager.mobile) { - html = '

' + parentNameHtml.join('
') + '

'; + html = '

' + parentNameHtml.join("
") + "

"; } else { - html = '

' + parentNameHtml.join(' - ') + '

'; + html = '

' + parentNameHtml.join(" - ") + "

"; } } else { if (layoutManager.mobile) { - html = '

' + parentNameHtml.join('
') + '

'; + html = '

' + parentNameHtml.join("
") + "

"; } else { - html = '

' + tvShowHtml + '

'; + html = '

' + tvShowHtml + "

"; } } } @@ -436,7 +452,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti var name = itemHelper.getDisplayName(item, { includeParentInfo: false }); - var offset = parentNameLast ? '.25em' : '.5em'; + var offset = parentNameLast ? ".25em" : ".5em"; if (html && !parentNameLast) { if (!layoutManager.mobile && tvSeasonHtml) { @@ -445,7 +461,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti html += '

' + name + '

'; } } else { - html = '

' + name + '

' + html; + html = '

' + name + "

" + html; } if (item.OriginalTitle && item.OriginalTitle != item.Name) { @@ -455,17 +471,17 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti container.innerHTML = html; if (html.length) { - container.classList.remove('hide'); + container.classList.remove("hide"); } else { - container.classList.add('hide'); + container.classList.add("hide"); } } function setTrailerButtonVisibility(page, item) { - if ((item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf('PlayTrailers')) { - hideAll(page, 'btnPlayTrailer', true); + if ((item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf("PlayTrailers")) { + hideAll(page, "btnPlayTrailer", true); } else { - hideAll(page, 'btnPlayTrailer'); + hideAll(page, "btnPlayTrailer"); } } @@ -480,76 +496,76 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti function renderDetailPageBackdrop(page, item, apiClient) { var imgUrl; var hasbackdrop = false; - var itemBackdropElement = page.querySelector('#itemBackdrop'); - var usePrimaryImage = item.MediaType === 'Video' && item.Type !== 'Movie' && item.Type !== 'Trailer' || - item.MediaType && item.MediaType !== 'Video' || - item.Type === 'MusicAlbum' || - item.Type === 'Person'; + var itemBackdropElement = page.querySelector("#itemBackdrop"); + var usePrimaryImage = item.MediaType === "Video" && item.Type !== "Movie" && item.Type !== "Trailer" || + item.MediaType && item.MediaType !== "Video" || + item.Type === "MusicAlbum" || + item.Type === "Person"; if (!layoutManager.mobile && !userSettings.enableBackdrops()) { return false; } - if ('Program' === item.Type && item.ImageTags && item.ImageTags.Thumb) { + if ("Program" === item.Type && item.ImageTags && item.ImageTags.Thumb) { imgUrl = apiClient.getScaledImageUrl(item.Id, { - type: 'Thumb', + type: "Thumb", maxWidth: dom.getScreenWidth(), index: 0, tag: item.ImageTags.Thumb }); - page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl); + page.classList.remove("noBackdrop"); + imageLoader.lazyImage(itemBackdropElement, imgUrl, false); hasbackdrop = true; } else if (usePrimaryImage && item.ImageTags && item.ImageTags.Primary) { imgUrl = apiClient.getScaledImageUrl(item.Id, { - type: 'Primary', + type: "Primary", maxWidth: dom.getScreenWidth(), index: 0, tag: item.ImageTags.Primary }); - page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl); + page.classList.remove("noBackdrop"); + imageLoader.lazyImage(itemBackdropElement, imgUrl, false); hasbackdrop = true; } else if (item.BackdropImageTags && item.BackdropImageTags.length) { imgUrl = apiClient.getScaledImageUrl(item.Id, { - type: 'Backdrop', + type: "Backdrop", maxWidth: dom.getScreenWidth(), index: 0, tag: item.BackdropImageTags[0] }); - page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl); + page.classList.remove("noBackdrop"); + imageLoader.lazyImage(itemBackdropElement, imgUrl, false); hasbackdrop = true; } else if (item.ParentBackdropItemId && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) { imgUrl = apiClient.getScaledImageUrl(item.ParentBackdropItemId, { - type: 'Backdrop', + type: "Backdrop", maxWidth: dom.getScreenWidth(), index: 0, tag: item.ParentBackdropImageTags[0] }); - page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl); + page.classList.remove("noBackdrop"); + imageLoader.lazyImage(itemBackdropElement, imgUrl, false); hasbackdrop = true; } else if (item.ImageTags && item.ImageTags.Thumb) { imgUrl = apiClient.getScaledImageUrl(item.Id, { - type: 'Thumb', + type: "Thumb", maxWidth: dom.getScreenWidth(), index: 0, tag: item.ImageTags.Thumb }); - page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl); + page.classList.remove("noBackdrop"); + imageLoader.lazyImage(itemBackdropElement, imgUrl, false); hasbackdrop = true; } else { - itemBackdropElement.style.backgroundImage = ''; + itemBackdropElement.style.backgroundImage = ""; } - if ('Person' === item.Type) { + if ("Person" === item.Type) { // FIXME: This hides the backdrop on all persons to fix a margin issue. Ideally, a proper fix should be made. page.classList.add('noBackdrop'); - itemBackdropElement.classList.add('personBackdrop'); + itemBackdropElement.classList.add("personBackdrop"); } else { - itemBackdropElement.classList.remove('personBackdrop'); + itemBackdropElement.classList.remove("personBackdrop"); } return hasbackdrop; @@ -557,15 +573,15 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti function reloadFromItem(instance, page, params, item, user) { var context = params.context; - page.querySelector('.detailPagePrimaryContainer').classList.add('detailSticky'); + page.querySelector(".detailPagePrimaryContainer").classList.add("detailSticky"); - renderName(item, page.querySelector('.nameContainer'), false, context); + renderName(item, page.querySelector(".nameContainer"), false, context); var apiClient = connectionManager.getApiClient(item.ServerId); renderSeriesTimerEditor(page, item, apiClient, user); renderTimerEditor(page, item, apiClient, user); renderImage(page, item, apiClient, user); renderLogo(page, item, apiClient); - Emby.Page.setTitle(''); + setTitle(item, apiClient); setInitialCollapsibleState(page, item, apiClient, context, user); renderDetails(page, item, apiClient, context); renderTrackSelections(page, instance, item); @@ -573,96 +589,96 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti renderDetailPageBackdrop(page, item, apiClient); var canPlay = reloadPlayButtons(page, item); - if ((item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf('PlayTrailers')) { - hideAll(page, 'btnPlayTrailer', true); + if ((item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf("PlayTrailers")) { + hideAll(page, "btnPlayTrailer", true); } else { - hideAll(page, 'btnPlayTrailer'); + hideAll(page, "btnPlayTrailer"); } setTrailerButtonVisibility(page, item); if (item.CanDelete && !item.IsFolder) { - hideAll(page, 'btnDeleteItem', true); + hideAll(page, "btnDeleteItem", true); } else { - hideAll(page, 'btnDeleteItem'); + hideAll(page, "btnDeleteItem"); } - if ('Program' !== item.Type || canPlay) { - hideAll(page, 'mainDetailButtons', true); + if ("Program" !== item.Type || canPlay) { + hideAll(page, "mainDetailButtons", true); } else { - hideAll(page, 'mainDetailButtons'); + hideAll(page, "mainDetailButtons"); } showRecordingFields(instance, page, item, user); var groupedVersions = (item.MediaSources || []).filter(function (g) { - return 'Grouping' == g.Type; + return "Grouping" == g.Type; }); if (user.Policy.IsAdministrator && groupedVersions.length) { - page.querySelector('.btnSplitVersions').classList.remove('hide'); + page.querySelector(".btnSplitVersions").classList.remove("hide"); } else { - page.querySelector('.btnSplitVersions').classList.add('hide'); + page.querySelector(".btnSplitVersions").classList.add("hide"); } if (itemContextMenu.getCommands(getContextMenuOptions(item, user)).length) { - hideAll(page, 'btnMoreCommands', true); + hideAll(page, "btnMoreCommands", true); } else { - hideAll(page, 'btnMoreCommands'); + hideAll(page, "btnMoreCommands"); } - var itemBirthday = page.querySelector('#itemBirthday'); + var itemBirthday = page.querySelector("#itemBirthday"); - if ('Person' == item.Type && item.PremiereDate) { + if ("Person" == item.Type && item.PremiereDate) { try { var birthday = datetime.parseISO8601Date(item.PremiereDate, true).toDateString(); - itemBirthday.classList.remove('hide'); - itemBirthday.innerHTML = globalize.translate('BirthDateValue', birthday); + itemBirthday.classList.remove("hide"); + itemBirthday.innerHTML = globalize.translate("BirthDateValue").replace("{0}", birthday); } catch (err) { - itemBirthday.classList.add('hide'); + itemBirthday.classList.add("hide"); } } else { - itemBirthday.classList.add('hide'); + itemBirthday.classList.add("hide"); } - var itemDeathDate = page.querySelector('#itemDeathDate'); + var itemDeathDate = page.querySelector("#itemDeathDate"); - if ('Person' == item.Type && item.EndDate) { + if ("Person" == item.Type && item.EndDate) { try { var deathday = datetime.parseISO8601Date(item.EndDate, true).toDateString(); - itemDeathDate.classList.remove('hide'); - itemDeathDate.innerHTML = globalize.translate('DeathDateValue', deathday); + itemDeathDate.classList.remove("hide"); + itemDeathDate.innerHTML = globalize.translate("DeathDateValue").replace("{0}", deathday); } catch (err) { - itemDeathDate.classList.add('hide'); + itemDeathDate.classList.add("hide"); } } else { - itemDeathDate.classList.add('hide'); + itemDeathDate.classList.add("hide"); } - var itemBirthLocation = page.querySelector('#itemBirthLocation'); + var itemBirthLocation = page.querySelector("#itemBirthLocation"); - if ('Person' == item.Type && item.ProductionLocations && item.ProductionLocations.length) { - var gmap = '' + item.ProductionLocations[0] + ''; - itemBirthLocation.classList.remove('hide'); - itemBirthLocation.innerHTML = globalize.translate('BirthPlaceValue', gmap); + if ("Person" == item.Type && item.ProductionLocations && item.ProductionLocations.length) { + var gmap = '' + item.ProductionLocations[0] + ""; + itemBirthLocation.classList.remove("hide"); + itemBirthLocation.innerHTML = globalize.translate("BirthPlaceValue").replace("{0}", gmap); } else { - itemBirthLocation.classList.add('hide'); + itemBirthLocation.classList.add("hide"); } setPeopleHeader(page, item); loading.hide(); - if (item.Type === 'Book') { - hideAll(page, 'btnDownload', true); + if (item.Type === "Book") { + hideAll(page, "btnDownload", true); } - require(['autoFocuser'], function (autoFocuser) { + require(["autoFocuser"], function (autoFocuser) { autoFocuser.autoFocus(page); }); } function logoImageUrl(item, apiClient, options) { options = options || {}; - options.type = 'Logo'; + options.type = "Logo"; if (item.ImageTags && item.ImageTags.Logo) { options.tag = item.ImageTags.Logo; @@ -677,78 +693,108 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti return null; } + function setTitle(item, apiClient) { + var url = logoImageUrl(item, apiClient, {}); + + if (url != null) { + var pageTitle = document.querySelector(".pageTitle"); + pageTitle.style.backgroundImage = "url('" + url + "')"; + pageTitle.classList.add("pageTitleWithLogo"); + pageTitle.innerHTML = ""; + } else { + Emby.Page.setTitle(""); + } + } + function renderLogo(page, item, apiClient) { var url = logoImageUrl(item, apiClient, { maxWidth: 400 }); - var detailLogo = page.querySelector('.detailLogo'); + var detailLogo = page.querySelector(".detailLogo"); if (!layoutManager.mobile && !userSettings.enableBackdrops()) { - detailLogo.classList.add('hide'); + detailLogo.classList.add("hide"); } else if (url) { - detailLogo.classList.remove('hide'); - detailLogo.classList.add('lazy'); - detailLogo.setAttribute('data-src', url); + detailLogo.classList.remove("hide"); + detailLogo.classList.add("lazy"); + detailLogo.setAttribute("data-src", url); imageLoader.lazyImage(detailLogo); } else { - detailLogo.classList.add('hide'); + detailLogo.classList.add("hide"); } } function showRecordingFields(instance, page, item, user) { if (!instance.currentRecordingFields) { - var recordingFieldsElement = page.querySelector('.recordingFields'); + var recordingFieldsElement = page.querySelector(".recordingFields"); - if ('Program' == item.Type && user.Policy.EnableLiveTvManagement) { - require(['recordingFields'], function (recordingFields) { + if ("Program" == item.Type && user.Policy.EnableLiveTvManagement) { + require(["recordingFields"], function (recordingFields) { instance.currentRecordingFields = new recordingFields({ parent: recordingFieldsElement, programId: item.Id, serverId: item.ServerId }); - recordingFieldsElement.classList.remove('hide'); + recordingFieldsElement.classList.remove("hide"); }); } else { - recordingFieldsElement.classList.add('hide'); - recordingFieldsElement.innerHTML = ''; + recordingFieldsElement.classList.add("hide"); + recordingFieldsElement.innerHTML = ""; } } } + function renderUserInfo(page, item) { + var lastPlayedElement = page.querySelector(".itemLastPlayed"); + + if (item.UserData && item.UserData.LastPlayedDate) { + lastPlayedElement.classList.remove("hide"); + var datePlayed = datetime.parseISO8601Date(item.UserData.LastPlayedDate); + lastPlayedElement.innerHTML = globalize.translate("DatePlayed") + ": " + datetime.toLocaleDateString(datePlayed) + " " + datetime.getDisplayTime(datePlayed); + } else { + lastPlayedElement.classList.add("hide"); + } + } + function renderLinks(linksElem, item) { var html = []; + if (item.DateCreated && itemHelper.enableDateAddedDisplay(item)) { + var dateCreated = datetime.parseISO8601Date(item.DateCreated); + html.push(globalize.translate("AddedOnValue", datetime.toLocaleDateString(dateCreated) + " " + datetime.getDisplayTime(dateCreated))); + } + var links = []; if (!layoutManager.tv && item.HomePageUrl) { - links.push('' + globalize.translate('ButtonWebsite') + ''); + links.push('' + globalize.translate("ButtonWebsite") + ""); } if (item.ExternalUrls) { for (var i = 0, length = item.ExternalUrls.length; i < length; i++) { var url = item.ExternalUrls[i]; - links.push('' + url.Name + ''); + links.push('' + url.Name + ""); } } if (links.length) { - html.push(links.join(', ')); + html.push(globalize.translate("LinksValue", links.join(", "))); } - linksElem.innerHTML = html.join(', '); + linksElem.innerHTML = html.join(", "); if (html.length) { - linksElem.classList.remove('hide'); + linksElem.classList.remove("hide"); } else { - linksElem.classList.add('hide'); + linksElem.classList.add("hide"); } } function renderDetailImage(page, elem, item, apiClient, editable, imageLoader, indicators) { - if ('SeriesTimer' === item.Type || 'Program' === item.Type) { + if ("SeriesTimer" === item.Type || "Program" === item.Type) { editable = false; } - elem.classList.add('detailimg-hidemobile'); + elem.classList.add("detailimg-hidemobile"); var imageTags = item.ImageTags || {}; @@ -757,8 +803,8 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } var url; - var html = ''; - var shape = 'portrait'; + var html = ""; + var shape = "portrait"; var detectRatio = false; /* In the following section, getScreenWidth() is multiplied by 0.5 as the posters @@ -766,48 +812,48 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti // TODO: Find a reliable way to get the poster width if (imageTags.Primary) { url = apiClient.getScaledImageUrl(item.Id, { - type: 'Primary', + type: "Primary", maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.ImageTags.Primary }); detectRatio = true; } else if (item.BackdropImageTags && item.BackdropImageTags.length) { url = apiClient.getScaledImageUrl(item.Id, { - type: 'Backdrop', + type: "Backdrop", maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.BackdropImageTags[0] }); - shape = 'thumb'; + shape = "thumb"; } else if (imageTags.Thumb) { url = apiClient.getScaledImageUrl(item.Id, { - type: 'Thumb', + type: "Thumb", maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.ImageTags.Thumb }); - shape = 'thumb'; + shape = "thumb"; } else if (imageTags.Disc) { url = apiClient.getScaledImageUrl(item.Id, { - type: 'Disc', + type: "Disc", maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.ImageTags.Disc }); - shape = 'square'; + shape = "square"; } else if (item.AlbumId && item.AlbumPrimaryImageTag) { url = apiClient.getScaledImageUrl(item.AlbumId, { - type: 'Primary', + type: "Primary", maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.AlbumPrimaryImageTag }); - shape = 'square'; + shape = "square"; } else if (item.SeriesId && item.SeriesPrimaryImageTag) { url = apiClient.getScaledImageUrl(item.SeriesId, { - type: 'Primary', + type: "Primary", maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.SeriesPrimaryImageTag }); } else if (item.ParentPrimaryImageItemId && item.ParentPrimaryImageTag) { url = apiClient.getScaledImageUrl(item.ParentPrimaryImageItemId, { - type: 'Primary', + type: "Primary", maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.ParentPrimaryImageTag }); @@ -830,81 +876,81 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } if (editable) { - html += ''; + html += ""; } else if (!editable && url === undefined) { - html += ''; + html += ""; } - var progressHtml = item.IsFolder || !item.UserData ? '' : indicators.getProgressBarHtml(item); + var progressHtml = item.IsFolder || !item.UserData ? "" : indicators.getProgressBarHtml(item); html += '
'; if (progressHtml) { html += progressHtml; } - html += '
'; + html += ""; elem.innerHTML = html; if (detectRatio && item.PrimaryImageAspectRatio) { if (item.PrimaryImageAspectRatio >= 1.48) { - shape = 'thumb'; + shape = "thumb"; } else if (item.PrimaryImageAspectRatio >= 0.85 && item.PrimaryImageAspectRatio <= 1.34) { - shape = 'square'; + shape = "square"; } } - if ('thumb' == shape) { - elem.classList.add('thumbDetailImageContainer'); - elem.classList.remove('portraitDetailImageContainer'); - elem.classList.remove('squareDetailImageContainer'); - } else if ('square' == shape) { - elem.classList.remove('thumbDetailImageContainer'); - elem.classList.remove('portraitDetailImageContainer'); - elem.classList.add('squareDetailImageContainer'); + if ("thumb" == shape) { + elem.classList.add("thumbDetailImageContainer"); + elem.classList.remove("portraitDetailImageContainer"); + elem.classList.remove("squareDetailImageContainer"); + } else if ("square" == shape) { + elem.classList.remove("thumbDetailImageContainer"); + elem.classList.remove("portraitDetailImageContainer"); + elem.classList.add("squareDetailImageContainer"); } else { - elem.classList.remove('thumbDetailImageContainer'); - elem.classList.add('portraitDetailImageContainer'); - elem.classList.remove('squareDetailImageContainer'); + elem.classList.remove("thumbDetailImageContainer"); + elem.classList.add("portraitDetailImageContainer"); + elem.classList.remove("squareDetailImageContainer"); } if (url) { - imageLoader.lazyImage(elem.querySelector('img'), url); + imageLoader.lazyImage(elem.querySelector("img"), url); } } function renderImage(page, item, apiClient, user) { renderDetailImage( page, - page.querySelector('.detailImageContainer'), + page.querySelector(".detailImageContainer"), item, apiClient, - user.Policy.IsAdministrator && 'Photo' != item.MediaType, + user.Policy.IsAdministrator && "Photo" != item.MediaType, imageLoader, indicators ); } function refreshDetailImageUserData(elem, item) { - elem.querySelector('.detailImageProgressContainer').innerHTML = indicators.getProgressBarHtml(item); + elem.querySelector(".detailImageProgressContainer").innerHTML = indicators.getProgressBarHtml(item); } function refreshImage(page, item) { - refreshDetailImageUserData(page.querySelector('.detailImageContainer'), item); + refreshDetailImageUserData(page.querySelector(".detailImageContainer"), item); } function setPeopleHeader(page, item) { - if ('Audio' == item.MediaType || 'MusicAlbum' == item.Type || 'Book' == item.MediaType || 'Photo' == item.MediaType) { - page.querySelector('#peopleHeader').innerHTML = globalize.translate('HeaderPeople'); + if ("Audio" == item.MediaType || "MusicAlbum" == item.Type || "Book" == item.MediaType || "Photo" == item.MediaType) { + page.querySelector("#peopleHeader").innerHTML = globalize.translate("HeaderPeople"); } else { - page.querySelector('#peopleHeader').innerHTML = globalize.translate('HeaderCastAndCrew'); + page.querySelector("#peopleHeader").innerHTML = globalize.translate("HeaderCastAndCrew"); } } function renderNextUp(page, item, user) { - var section = page.querySelector('.nextUpSection'); + var section = page.querySelector(".nextUpSection"); - if ('Series' != item.Type) { - return void section.classList.add('hide'); + if ("Series" != item.Type) { + return void section.classList.add("hide"); } connectionManager.getApiClient(item.ServerId).getNextUpEpisodes({ @@ -912,93 +958,93 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti UserId: user.Id }).then(function (result) { if (result.Items.length) { - section.classList.remove('hide'); + section.classList.remove("hide"); } else { - section.classList.add('hide'); + section.classList.add("hide"); } var html = cardBuilder.getCardsHtml({ items: result.Items, - shape: 'overflowBackdrop', + shape: "overflowBackdrop", showTitle: true, - displayAsSpecial: 'Season' == item.Type && item.IndexNumber, + displayAsSpecial: "Season" == item.Type && item.IndexNumber, overlayText: false, centerText: true, overlayPlayButton: true }); - var itemsContainer = section.querySelector('.nextUpItems'); + var itemsContainer = section.querySelector(".nextUpItems"); itemsContainer.innerHTML = html; imageLoader.lazyChildren(itemsContainer); }); } function setInitialCollapsibleState(page, item, apiClient, context, user) { - page.querySelector('.collectionItems').innerHTML = ''; + page.querySelector(".collectionItems").innerHTML = ""; - if ('Playlist' == item.Type) { - page.querySelector('#childrenCollapsible').classList.remove('hide'); + if ("Playlist" == item.Type) { + page.querySelector("#childrenCollapsible").classList.remove("hide"); renderPlaylistItems(page, item); - } else if ('Studio' == item.Type || 'Person' == item.Type || 'Genre' == item.Type || 'MusicGenre' == item.Type || 'MusicArtist' == item.Type) { - page.querySelector('#childrenCollapsible').classList.remove('hide'); + } else if ("Studio" == item.Type || "Person" == item.Type || "Genre" == item.Type || "MusicGenre" == item.Type || "MusicArtist" == item.Type) { + page.querySelector("#childrenCollapsible").classList.remove("hide"); renderItemsByName(page, item); } else if (item.IsFolder) { - if ('BoxSet' == item.Type) { - page.querySelector('#childrenCollapsible').classList.add('hide'); + if ("BoxSet" == item.Type) { + page.querySelector("#childrenCollapsible").classList.add("hide"); } renderChildren(page, item); } else { - page.querySelector('#childrenCollapsible').classList.add('hide'); + page.querySelector("#childrenCollapsible").classList.add("hide"); } - if ('Series' == item.Type) { + if ("Series" == item.Type) { renderSeriesSchedule(page, item); renderNextUp(page, item, user); } else { - page.querySelector('.nextUpSection').classList.add('hide'); + page.querySelector(".nextUpSection").classList.add("hide"); } renderScenes(page, item); - if (item.SpecialFeatureCount && 0 != item.SpecialFeatureCount && 'Series' != item.Type) { - page.querySelector('#specialsCollapsible').classList.remove('hide'); + if (item.SpecialFeatureCount && 0 != item.SpecialFeatureCount && "Series" != item.Type) { + page.querySelector("#specialsCollapsible").classList.remove("hide"); renderSpecials(page, item, user, 6); } else { - page.querySelector('#specialsCollapsible').classList.add('hide'); + page.querySelector("#specialsCollapsible").classList.add("hide"); } renderCast(page, item); if (item.PartCount && item.PartCount > 1) { - page.querySelector('#additionalPartsCollapsible').classList.remove('hide'); + page.querySelector("#additionalPartsCollapsible").classList.remove("hide"); renderAdditionalParts(page, item, user); } else { - page.querySelector('#additionalPartsCollapsible').classList.add('hide'); + page.querySelector("#additionalPartsCollapsible").classList.add("hide"); } - if ('MusicAlbum' == item.Type) { + if ("MusicAlbum" == item.Type) { renderMusicVideos(page, item, user); } else { - page.querySelector('#musicVideosCollapsible').classList.add('hide'); + page.querySelector("#musicVideosCollapsible").classList.add("hide"); } } function renderOverview(elems, item) { for (var i = 0, length = elems.length; i < length; i++) { var elem = elems[i]; - var overview = item.Overview || ''; + var overview = item.Overview || ""; if (overview) { elem.innerHTML = overview; - elem.classList.remove('hide'); - var anchors = elem.querySelectorAll('a'); + elem.classList.remove("hide"); + var anchors = elem.querySelectorAll("a"); for (var j = 0, length2 = anchors.length; j < length2; j++) { - anchors[j].setAttribute('target', '_blank'); + anchors[j].setAttribute("target", "_blank"); } } else { - elem.innerHTML = ''; - elem.classList.add('hide'); + elem.innerHTML = ""; + elem.classList.add("hide"); } } } @@ -1009,12 +1055,12 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti var genres = item.GenreItems || []; switch (context) { - case 'music': - type = 'MusicGenre'; + case "music": + type = "MusicGenre"; break; default: - type = 'Genre'; + type = "Genre"; } var html = genres.map(function (p) { @@ -1025,47 +1071,39 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti Id: p.Id }, { context: context - }) + '">' + p.Name + ''; - }).join(', '); - - var genresLabel = page.querySelector('.genresLabel'); - genresLabel.innerHTML = globalize.translate(genres.length > 1 ? 'Genres' : 'Genre'); - var genresValue = page.querySelector('.genres'); - genresValue.innerHTML = html; + }) + '">' + p.Name + ""; + }).join(", "); + var elem = page.querySelector(".genres"); + elem.innerHTML = globalize.translate(genres.length > 1 ? "GenresValue" : "GenreValue", html); - var genresGroup = page.querySelector('.genresGroup'); if (genres.length) { - genresGroup.classList.remove('hide'); + elem.classList.remove("hide"); } else { - genresGroup.classList.add('hide'); + elem.classList.add("hide"); } } function renderDirector(page, item, context) { var directors = (item.People || []).filter(function (p) { - return 'Director' === p.Type; + return "Director" === p.Type; }); var html = directors.map(function (p) { return '' + p.Name + ''; - }).join(', '); + }) + '">' + p.Name + ""; + }).join(", "); + var elem = page.querySelector(".directors"); + elem.innerHTML = globalize.translate(directors.length > 1 ? "DirectorsValue" : "DirectorValue", html); - var directorsLabel = page.querySelector('.directorsLabel'); - directorsLabel.innerHTML = globalize.translate(directors.length > 1 ? 'Directors' : 'Director'); - var directorsValue = page.querySelector('.directors'); - directorsValue.innerHTML = html; - - var directorsGroup = page.querySelector('.directorsGroup'); if (directors.length) { - directorsGroup.classList.remove('hide'); + elem.classList.remove("hide"); } else { - directorsGroup.classList.add('hide'); + elem.classList.add("hide"); } } @@ -1076,22 +1114,22 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti renderDirector(page, item, context); renderGenres(page, item, context); renderChannelGuide(page, apiClient, item); - var taglineElement = page.querySelector('.tagline'); + var taglineElement = page.querySelector(".tagline"); if (item.Taglines && item.Taglines.length) { - taglineElement.classList.remove('hide'); + taglineElement.classList.remove("hide"); taglineElement.innerHTML = item.Taglines[0]; } else { - taglineElement.classList.add('hide'); + taglineElement.classList.add("hide"); } - var overview = page.querySelector('.overview'); - var externalLinksElem = page.querySelector('.itemExternalLinks'); + var overview = page.querySelector(".overview"); + var externalLinksElem = page.querySelector(".itemExternalLinks"); renderOverview([overview], item); var i; var itemMiscInfo; - itemMiscInfo = page.querySelectorAll('.itemMiscInfo-primary'); + itemMiscInfo = page.querySelectorAll(".itemMiscInfo-primary"); for (i = 0; i < itemMiscInfo.length; i++) { mediaInfo.fillPrimaryMediaInfo(itemMiscInfo[i], item, { @@ -1100,29 +1138,30 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti subtitles: false }); - if (itemMiscInfo[i].innerHTML && 'SeriesTimer' !== item.Type) { - itemMiscInfo[i].classList.remove('hide'); + if (itemMiscInfo[i].innerHTML && "SeriesTimer" !== item.Type) { + itemMiscInfo[i].classList.remove("hide"); } else { - itemMiscInfo[i].classList.add('hide'); + itemMiscInfo[i].classList.add("hide"); } } - itemMiscInfo = page.querySelectorAll('.itemMiscInfo-secondary'); + itemMiscInfo = page.querySelectorAll(".itemMiscInfo-secondary"); for (i = 0; i < itemMiscInfo.length; i++) { mediaInfo.fillSecondaryMediaInfo(itemMiscInfo[i], item, { interactive: true }); - if (itemMiscInfo[i].innerHTML && 'SeriesTimer' !== item.Type) { - itemMiscInfo[i].classList.remove('hide'); + if (itemMiscInfo[i].innerHTML && "SeriesTimer" !== item.Type) { + itemMiscInfo[i].classList.remove("hide"); } else { - itemMiscInfo[i].classList.add('hide'); + itemMiscInfo[i].classList.add("hide"); } } reloadUserDataButtons(page, item); renderLinks(externalLinksElem, item); + renderUserInfo(page, item); renderTags(page, item); renderSeriesAirTime(page, item, isStatic); } @@ -1136,7 +1175,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti scrollX = enableScrollX(); } - return scrollX ? 'overflowPortrait' : 'portrait'; + return scrollX ? "overflowPortrait" : "portrait"; } function getSquareShape(scrollX) { @@ -1144,35 +1183,35 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti scrollX = enableScrollX(); } - return scrollX ? 'overflowSquare' : 'square'; + return scrollX ? "overflowSquare" : "square"; } function renderMoreFromSeason(view, item, apiClient) { - var section = view.querySelector('.moreFromSeasonSection'); + var section = view.querySelector(".moreFromSeasonSection"); if (section) { - if ('Episode' !== item.Type || !item.SeasonId || !item.SeriesId) { - return void section.classList.add('hide'); + if ("Episode" !== item.Type || !item.SeasonId || !item.SeriesId) { + return void section.classList.add("hide"); } var userId = apiClient.getCurrentUserId(); apiClient.getEpisodes(item.SeriesId, { SeasonId: item.SeasonId, UserId: userId, - Fields: 'ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount' + Fields: "ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount" }).then(function (result) { if (result.Items.length < 2) { - return void section.classList.add('hide'); + return void section.classList.add("hide"); } - section.classList.remove('hide'); - section.querySelector('h2').innerHTML = globalize.translate('MoreFromValue', item.SeasonName); - var itemsContainer = section.querySelector('.itemsContainer'); + section.classList.remove("hide"); + section.querySelector("h2").innerHTML = globalize.translate("MoreFromValue", item.SeasonName); + var itemsContainer = section.querySelector(".itemsContainer"); cardBuilder.buildCards(result.Items, { parentContainer: section, itemsContainer: itemsContainer, - shape: 'autooverflow', - sectionTitleTagName: 'h2', + shape: "autooverflow", + sectionTitleTagName: "h2", scalable: true, showTitle: true, overlayText: false, @@ -1184,7 +1223,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti if (card) { setTimeout(function () { - section.querySelector('.emby-scroller').toStart(card.previousSibling || card, true); + section.querySelector(".emby-scroller").toStart(card.previousSibling || card, true); }, 100); } }); @@ -1192,28 +1231,28 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function renderMoreFromArtist(view, item, apiClient) { - var section = view.querySelector('.moreFromArtistSection'); + var section = view.querySelector(".moreFromArtistSection"); if (section) { - if ('MusicArtist' === item.Type) { - if (!apiClient.isMinServerVersion('3.4.1.19')) { - return void section.classList.add('hide'); + if ("MusicArtist" === item.Type) { + if (!apiClient.isMinServerVersion("3.4.1.19")) { + return void section.classList.add("hide"); } - } else if ('MusicAlbum' !== item.Type || !item.AlbumArtists || !item.AlbumArtists.length) { - return void section.classList.add('hide'); + } else if ("MusicAlbum" !== item.Type || !item.AlbumArtists || !item.AlbumArtists.length) { + return void section.classList.add("hide"); } var query = { - IncludeItemTypes: 'MusicAlbum', + IncludeItemTypes: "MusicAlbum", Recursive: true, ExcludeItemIds: item.Id, - SortBy: 'ProductionYear,SortName', - SortOrder: 'Descending' + SortBy: "ProductionYear,SortName", + SortOrder: "Descending" }; - if ('MusicArtist' === item.Type) { + if ("MusicArtist" === item.Type) { query.ContributingArtistIds = item.Id; - } else if (apiClient.isMinServerVersion('3.4.1.18')) { + } else if (apiClient.isMinServerVersion("3.4.1.18")) { query.AlbumArtistIds = item.AlbumArtists[0].Id; } else { query.ArtistIds = item.AlbumArtists[0].Id; @@ -1221,24 +1260,24 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti apiClient.getItems(apiClient.getCurrentUserId(), query).then(function (result) { if (!result.Items.length) { - return void section.classList.add('hide'); + return void section.classList.add("hide"); } - section.classList.remove('hide'); + section.classList.remove("hide"); - if ('MusicArtist' === item.Type) { - section.querySelector('h2').innerHTML = globalize.translate('HeaderAppearsOn'); + if ("MusicArtist" === item.Type) { + section.querySelector("h2").innerHTML = globalize.translate("HeaderAppearsOn"); } else { - section.querySelector('h2').innerHTML = globalize.translate('MoreFromValue', item.AlbumArtists[0].Name); + section.querySelector("h2").innerHTML = globalize.translate("MoreFromValue", item.AlbumArtists[0].Name); } cardBuilder.buildCards(result.Items, { parentContainer: section, - itemsContainer: section.querySelector('.itemsContainer'), - shape: 'autooverflow', - sectionTitleTagName: 'h2', + itemsContainer: section.querySelector(".itemsContainer"), + shape: "autooverflow", + sectionTitleTagName: "h2", scalable: true, - coverImage: 'MusicArtist' === item.Type || 'MusicAlbum' === item.Type, + coverImage: "MusicArtist" === item.Type || "MusicAlbum" === item.Type, showTitle: true, showParentTitle: false, centerText: true, @@ -1251,47 +1290,47 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function renderSimilarItems(page, item, context) { - var similarCollapsible = page.querySelector('#similarCollapsible'); + var similarCollapsible = page.querySelector("#similarCollapsible"); if (similarCollapsible) { - if ('Movie' != item.Type && 'Trailer' != item.Type && 'Series' != item.Type && 'Program' != item.Type && 'Recording' != item.Type && 'MusicAlbum' != item.Type && 'MusicArtist' != item.Type && 'Playlist' != item.Type) { - return void similarCollapsible.classList.add('hide'); + if ("Movie" != item.Type && "Trailer" != item.Type && "Series" != item.Type && "Program" != item.Type && "Recording" != item.Type && "MusicAlbum" != item.Type && "MusicArtist" != item.Type && "Playlist" != item.Type) { + return void similarCollapsible.classList.add("hide"); } - similarCollapsible.classList.remove('hide'); + similarCollapsible.classList.remove("hide"); var apiClient = connectionManager.getApiClient(item.ServerId); var options = { userId: apiClient.getCurrentUserId(), limit: 12, - fields: 'PrimaryImageAspectRatio,UserData,CanDelete' + fields: "PrimaryImageAspectRatio,UserData,CanDelete" }; - if ('MusicAlbum' == item.Type && item.AlbumArtists && item.AlbumArtists.length) { + if ("MusicAlbum" == item.Type && item.AlbumArtists && item.AlbumArtists.length) { options.ExcludeArtistIds = item.AlbumArtists[0].Id; } apiClient.getSimilarItems(item.Id, options).then(function (result) { if (!result.Items.length) { - return void similarCollapsible.classList.add('hide'); + return void similarCollapsible.classList.add("hide"); } - similarCollapsible.classList.remove('hide'); - var html = ''; + similarCollapsible.classList.remove("hide"); + var html = ""; html += cardBuilder.getCardsHtml({ items: result.Items, - shape: 'autooverflow', - showParentTitle: 'MusicAlbum' == item.Type, + shape: "autooverflow", + showParentTitle: "MusicAlbum" == item.Type, centerText: true, showTitle: true, context: context, lazy: true, showDetailsMenu: true, - coverImage: 'MusicAlbum' == item.Type || 'MusicArtist' == item.Type, + coverImage: "MusicAlbum" == item.Type || "MusicArtist" == item.Type, overlayPlayButton: true, overlayText: false, - showYear: 'Movie' === item.Type || 'Trailer' === item.Type || 'Series' === item.Type + showYear: "Movie" === item.Type || "Trailer" === item.Type || "Series" === item.Type }); - var similarContent = similarCollapsible.querySelector('.similarContent'); + var similarContent = similarCollapsible.querySelector(".similarContent"); similarContent.innerHTML = html; imageLoader.lazyChildren(similarContent); }); @@ -1299,52 +1338,52 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function renderSeriesAirTime(page, item, isStatic) { - var seriesAirTime = page.querySelector('#seriesAirTime'); - if ('Series' != item.Type) { - seriesAirTime.classList.add('hide'); + var seriesAirTime = page.querySelector("#seriesAirTime"); + if ("Series" != item.Type) { + seriesAirTime.classList.add("hide"); return; } - var html = ''; + var html = ""; if (item.AirDays && item.AirDays.length) { if (7 == item.AirDays.length) { - html += 'daily'; + html += "daily"; } else { html += item.AirDays.map(function (a) { - return a + 's'; - }).join(','); + return a + "s"; + }).join(","); } } if (item.AirTime) { - html += ' at ' + item.AirTime; + html += " at " + item.AirTime; } if (item.Studios.length) { if (isStatic) { - html += ' on ' + item.Studios[0].Name; + html += " on " + item.Studios[0].Name; } else { var context = inferContext(item); var href = appRouter.getRouteUrl(item.Studios[0], { context: context, - itemType: 'Studio', + itemType: "Studio", serverId: item.ServerId }); - html += ' on ' + item.Studios[0].Name + ''; + html += ' on ' + item.Studios[0].Name + ""; } } if (html) { - html = ('Ended' == item.Status ? 'Aired ' : 'Airs ') + html; + html = ("Ended" == item.Status ? "Aired " : "Airs ") + html; seriesAirTime.innerHTML = html; - seriesAirTime.classList.remove('hide'); + seriesAirTime.classList.remove("hide"); } else { - seriesAirTime.classList.add('hide'); + seriesAirTime.classList.add("hide"); } } function renderTags(page, item) { - var itemTags = page.querySelector('.itemTags'); + var itemTags = page.querySelector(".itemTags"); var tagElements = []; var tags = item.Tags || []; - if ('Program' === item.Type) { + if ("Program" === item.Type) { tags = []; } @@ -1353,93 +1392,93 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } if (tagElements.length) { - itemTags.innerHTML = globalize.translate('TagsValue', tagElements.join(', ')); - itemTags.classList.remove('hide'); + itemTags.innerHTML = globalize.translate("TagsValue", tagElements.join(", ")); + itemTags.classList.remove("hide"); } else { - itemTags.innerHTML = ''; - itemTags.classList.add('hide'); + itemTags.innerHTML = ""; + itemTags.classList.add("hide"); } } function renderChildren(page, item) { - var fields = 'ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount'; + var fields = "ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount"; var query = { ParentId: item.Id, Fields: fields }; - if ('BoxSet' !== item.Type) { - query.SortBy = 'SortName'; + if ("BoxSet" !== item.Type) { + query.SortBy = "SortName"; } var promise; var apiClient = connectionManager.getApiClient(item.ServerId); var userId = apiClient.getCurrentUserId(); - if ('Series' == item.Type) { + if ("Series" == item.Type) { promise = apiClient.getSeasons(item.Id, { userId: userId, Fields: fields }); - } else if ('Season' == item.Type) { - fields += ',Overview'; + } else if ("Season" == item.Type) { + fields += ",Overview"; promise = apiClient.getEpisodes(item.SeriesId, { seasonId: item.Id, userId: userId, Fields: fields }); - } else if ('MusicArtist' == item.Type) { - query.SortBy = 'ProductionYear,SortName'; + } else if ("MusicArtist" == item.Type) { + query.SortBy = "ProductionYear,SortName"; } promise = promise || apiClient.getItems(apiClient.getCurrentUserId(), query); promise.then(function (result) { - var html = ''; + var html = ""; var scrollX = false; var isList = false; - var childrenItemsContainer = page.querySelector('.childrenItemsContainer'); + var childrenItemsContainer = page.querySelector(".childrenItemsContainer"); - if ('MusicAlbum' == item.Type) { + if ("MusicAlbum" == item.Type) { html = listView.getListViewHtml({ items: result.Items, smallIcon: true, showIndex: true, - index: 'disc', + index: "disc", showIndexNumberLeft: true, playFromHere: true, - action: 'playallfromhere', + action: "playallfromhere", image: false, - artist: 'auto', + artist: "auto", containerAlbumArtists: item.AlbumArtists, addToListButton: true }); isList = true; - } else if ('Series' == item.Type) { + } else if ("Series" == item.Type) { scrollX = enableScrollX(); html = cardBuilder.getCardsHtml({ items: result.Items, - shape: 'overflowPortrait', + shape: "overflowPortrait", showTitle: true, centerText: true, lazy: true, overlayPlayButton: true, allowBottomPadding: !scrollX }); - } else if ('Season' == item.Type || 'Episode' == item.Type) { - if ('Episode' !== item.Type) { + } else if ("Season" == item.Type || "Episode" == item.Type) { + if ("Episode" !== item.Type) { isList = true; } - scrollX = 'Episode' == item.Type; - if (result.Items.length < 2 && 'Episode' === item.Type) { + scrollX = "Episode" == item.Type; + if (result.Items.length < 2 && "Episode" === item.Type) { return; } - if ('Episode' === item.Type) { + if ("Episode" === item.Type) { html = cardBuilder.getCardsHtml({ items: result.Items, - shape: 'overflowBackdrop', + shape: "overflowBackdrop", showTitle: true, - displayAsSpecial: 'Season' == item.Type && item.IndexNumber, + displayAsSpecial: "Season" == item.Type && item.IndexNumber, playFromHere: true, overlayText: true, lazy: true, @@ -1448,15 +1487,15 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti allowBottomPadding: !scrollX, includeParentInfoInTitle: false }); - } else if ('Season' === item.Type) { + } else if ("Season" === item.Type) { html = listView.getListViewHtml({ items: result.Items, showIndexNumber: false, enableOverview: true, - imageSize: 'large', + imageSize: "large", enableSideMediaInfo: false, highlight: false, - action: layoutManager.tv ? 'resume' : 'none', + action: layoutManager.tv ? "resume" : "none", infoButton: true, imagePlayButton: true, includeParentInfoInTitle: false @@ -1464,78 +1503,78 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } } - if ('BoxSet' !== item.Type) { - page.querySelector('#childrenCollapsible').classList.remove('hide'); + if ("BoxSet" !== item.Type) { + page.querySelector("#childrenCollapsible").classList.remove("hide"); } if (scrollX) { - childrenItemsContainer.classList.add('scrollX'); - childrenItemsContainer.classList.add('hiddenScrollX'); - childrenItemsContainer.classList.remove('vertical-wrap'); - childrenItemsContainer.classList.remove('vertical-list'); + childrenItemsContainer.classList.add("scrollX"); + childrenItemsContainer.classList.add("hiddenScrollX"); + childrenItemsContainer.classList.remove("vertical-wrap"); + childrenItemsContainer.classList.remove("vertical-list"); } else { - childrenItemsContainer.classList.remove('scrollX'); - childrenItemsContainer.classList.remove('hiddenScrollX'); - childrenItemsContainer.classList.remove('smoothScrollX'); + childrenItemsContainer.classList.remove("scrollX"); + childrenItemsContainer.classList.remove("hiddenScrollX"); + childrenItemsContainer.classList.remove("smoothScrollX"); if (isList) { - childrenItemsContainer.classList.add('vertical-list'); - childrenItemsContainer.classList.remove('vertical-wrap'); + childrenItemsContainer.classList.add("vertical-list"); + childrenItemsContainer.classList.remove("vertical-wrap"); } else { - childrenItemsContainer.classList.add('vertical-wrap'); - childrenItemsContainer.classList.remove('vertical-list'); + childrenItemsContainer.classList.add("vertical-wrap"); + childrenItemsContainer.classList.remove("vertical-list"); } } childrenItemsContainer.innerHTML = html; imageLoader.lazyChildren(childrenItemsContainer); - if ('BoxSet' == item.Type) { + if ("BoxSet" == item.Type) { var collectionItemTypes = [{ - name: globalize.translate('HeaderVideos'), - mediaType: 'Video' + name: globalize.translate("HeaderVideos"), + mediaType: "Video" }, { - name: globalize.translate('HeaderSeries'), - type: 'Series' + name: globalize.translate("HeaderSeries"), + type: "Series" }, { - name: globalize.translate('HeaderAlbums'), - type: 'MusicAlbum' + name: globalize.translate("HeaderAlbums"), + type: "MusicAlbum" }, { - name: globalize.translate('HeaderBooks'), - type: 'Book' + name: globalize.translate("HeaderBooks"), + type: "Book" }]; renderCollectionItems(page, item, collectionItemTypes, result.Items); } }); - if ('Season' == item.Type) { - page.querySelector('#childrenTitle').innerHTML = globalize.translate('HeaderEpisodes'); - } else if ('Series' == item.Type) { - page.querySelector('#childrenTitle').innerHTML = globalize.translate('HeaderSeasons'); - } else if ('MusicAlbum' == item.Type) { - page.querySelector('#childrenTitle').innerHTML = globalize.translate('HeaderTracks'); + if ("Season" == item.Type) { + page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderEpisodes"); + } else if ("Series" == item.Type) { + page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderSeasons"); + } else if ("MusicAlbum" == item.Type) { + page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderTracks"); } else { - page.querySelector('#childrenTitle').innerHTML = globalize.translate('HeaderItems'); + page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderItems"); } - if ('MusicAlbum' == item.Type || 'Season' == item.Type) { - page.querySelector('.childrenSectionHeader').classList.add('hide'); - page.querySelector('#childrenCollapsible').classList.add('verticalSection-extrabottompadding'); + if ("MusicAlbum" == item.Type || "Season" == item.Type) { + page.querySelector(".childrenSectionHeader").classList.add("hide"); + page.querySelector("#childrenCollapsible").classList.add("verticalSection-extrabottompadding"); } else { - page.querySelector('.childrenSectionHeader').classList.remove('hide'); + page.querySelector(".childrenSectionHeader").classList.remove("hide"); } } function renderItemsByName(page, item) { - require('scripts/itembynamedetailpage'.split(','), function () { + require("scripts/itembynamedetailpage".split(","), function () { window.ItemsByName.renderItems(page, item); }); } function renderPlaylistItems(page, item) { - require('scripts/playlistedit'.split(','), function () { + require("scripts/playlistedit".split(","), function () { PlaylistViewer.render(page, item); }); } function renderProgramsForChannel(page, result) { - var html = ''; + var html = ""; var currentItems = []; var currentStartDate = null; @@ -1547,10 +1586,10 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti if (currentItems.length) { html += '
'; html += '

' + datetime.toLocaleDateString(currentStartDate, { - weekday: 'long', - month: 'long', - day: 'numeric' - }) + '

'; + weekday: "long", + month: "long", + day: "numeric" + }) + ""; html += '
' + listView.getListViewHtml({ items: currentItems, enableUserDataButtons: false, @@ -1559,7 +1598,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti showProgramTime: true, mediaInfo: false, parentTitleWithTitle: true - }) + '
'; + }) + ""; } currentStartDate = itemStartDate; @@ -1572,10 +1611,10 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti if (currentItems.length) { html += '
'; html += '

' + datetime.toLocaleDateString(currentStartDate, { - weekday: 'long', - month: 'long', - day: 'numeric' - }) + '

'; + weekday: "long", + month: "long", + day: "numeric" + }) + ""; html += '
' + listView.getListViewHtml({ items: currentItems, enableUserDataButtons: false, @@ -1584,20 +1623,20 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti showProgramTime: true, mediaInfo: false, parentTitleWithTitle: true - }) + '
'; + }) + ""; } - page.querySelector('.programGuide').innerHTML = html; + page.querySelector(".programGuide").innerHTML = html; } function renderChannelGuide(page, apiClient, item) { - if ('TvChannel' === item.Type) { - page.querySelector('.programGuideSection').classList.remove('hide'); + if ("TvChannel" === item.Type) { + page.querySelector(".programGuideSection").classList.remove("hide"); apiClient.getLiveTvPrograms({ ChannelIds: item.Id, UserId: apiClient.getCurrentUserId(), HasAired: false, - SortBy: 'StartDate', + SortBy: "StartDate", EnableTotalRecordCount: false, EnableImages: false, ImageTypeLimit: 0, @@ -1613,7 +1652,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti apiClient.getLiveTvPrograms({ UserId: apiClient.getCurrentUserId(), HasAired: false, - SortBy: 'StartDate', + SortBy: "StartDate", EnableTotalRecordCount: false, EnableImages: false, ImageTypeLimit: 0, @@ -1622,12 +1661,12 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti LibrarySeriesId: item.Id }).then(function (result) { if (result.Items.length) { - page.querySelector('#seriesScheduleSection').classList.remove('hide'); + page.querySelector("#seriesScheduleSection").classList.remove("hide"); } else { - page.querySelector('#seriesScheduleSection').classList.add('hide'); + page.querySelector("#seriesScheduleSection").classList.add("hide"); } - page.querySelector('#seriesScheduleList').innerHTML = listView.getListViewHtml({ + page.querySelector("#seriesScheduleList").innerHTML = listView.getListViewHtml({ items: result.Items, enableUserDataButtons: false, showParentTitle: false, @@ -1636,27 +1675,27 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti mediaInfo: false, showTitle: true, moreButton: false, - action: 'programdialog' + action: "programdialog" }); loading.hide(); }); } function inferContext(item) { - if ('Movie' === item.Type || 'BoxSet' === item.Type) { - return 'movies'; + if ("Movie" === item.Type || "BoxSet" === item.Type) { + return "movies"; } - if ('Series' === item.Type || 'Season' === item.Type || 'Episode' === item.Type) { - return 'tvshows'; + if ("Series" === item.Type || "Season" === item.Type || "Episode" === item.Type) { + return "tvshows"; } - if ('MusicArtist' === item.Type || 'MusicAlbum' === item.Type || 'Audio' === item.Type || 'AudioBook' === item.Type) { - return 'music'; + if ("MusicArtist" === item.Type || "MusicAlbum" === item.Type || "Audio" === item.Type || "AudioBook" === item.Type) { + return "music"; } - if ('Program' === item.Type) { - return 'livetv'; + if ("Program" === item.Type) { + return "livetv"; } return null; @@ -1685,7 +1724,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function renderCollectionItems(page, parentItem, types, items) { - page.querySelector('.collectionItems').innerHTML = ''; + page.querySelector(".collectionItems").innerHTML = ""; var i; var length; @@ -1699,7 +1738,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } var otherType = { - name: globalize.translate('HeaderOtherItems') + name: globalize.translate("HeaderOtherItems") }; var otherTypeItems = items.filter(function (curr) { return !types.filter(function (t) { @@ -1713,11 +1752,11 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti if (!items.length) { renderCollectionItemType(page, parentItem, { - name: globalize.translate('HeaderItems') + name: globalize.translate("HeaderItems") }, items); } - var containers = page.querySelectorAll('.collectionItemsContainer'); + var containers = page.querySelectorAll(".collectionItemsContainer"); var notifyRefreshNeeded = function () { renderChildren(page, parentItem); @@ -1729,33 +1768,33 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti // if nothing in the collection can be played hide play and shuffle buttons if (!canPlaySomeItemInCollection(items)) { - hideAll(page, 'btnPlay', false); - hideAll(page, 'btnShuffle', false); + hideAll(page, "btnPlay", false); + hideAll(page, "btnShuffle", false); } // HACK: Call autoFocuser again because btnPlay may be hidden, but focused by reloadFromItem // FIXME: Sometimes focus does not move until all (?) sections are loaded - require(['autoFocuser'], function (autoFocuser) { + require(["autoFocuser"], function (autoFocuser) { autoFocuser.autoFocus(page); }); } function renderCollectionItemType(page, parentItem, type, items) { - var html = ''; + var html = ""; html += '
'; html += '
'; html += '

'; - html += '' + type.name + ''; - html += '

'; - html += ''; - html += '
'; + html += "" + type.name + ""; + html += ""; + html += ''; + html += "
"; html += '
'; - var shape = 'MusicAlbum' == type.type ? getSquareShape(false) : getPortraitShape(false); + var shape = "MusicAlbum" == type.type ? getSquareShape(false) : getPortraitShape(false); html += cardBuilder.getCardsHtml({ items: items, shape: shape, showTitle: true, - showYear: 'Video' === type.mediaType || 'Series' === type.type, + showYear: "Video" === type.mediaType || "Series" === type.type, centerText: true, lazy: true, showDetailsMenu: true, @@ -1764,16 +1803,16 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti showRemoveFromCollection: true, collectionId: parentItem.Id }); - html += '
'; - html += ''; - var collectionItems = page.querySelector('.collectionItems'); - collectionItems.insertAdjacentHTML('beforeend', html); + html += ""; + html += ""; + var collectionItems = page.querySelector(".collectionItems"); + collectionItems.insertAdjacentHTML("beforeend", html); imageLoader.lazyChildren(collectionItems); - collectionItems.querySelector('.btnAddToCollection').addEventListener('click', function () { - require(['alert'], function (alert) { + collectionItems.querySelector(".btnAddToCollection").addEventListener("click", function () { + require(["alert"], function (alert) { alert({ - text: globalize.translate('AddItemToCollectionHelp'), - html: globalize.translate('AddItemToCollectionHelp') + '

' + globalize.translate('ButtonLearnMore') + '' + text: globalize.translate("AddItemToCollectionHelp"), + html: globalize.translate("AddItemToCollectionHelp") + '

' + globalize.translate("ButtonLearnMore") + "" }); }); }); @@ -1781,20 +1820,20 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti function renderMusicVideos(page, item, user) { connectionManager.getApiClient(item.ServerId).getItems(user.Id, { - SortBy: 'SortName', - SortOrder: 'Ascending', - IncludeItemTypes: 'MusicVideo', + SortBy: "SortName", + SortOrder: "Ascending", + IncludeItemTypes: "MusicVideo", Recursive: true, - Fields: 'PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount', + Fields: "PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount", AlbumIds: item.Id }).then(function (result) { if (result.Items.length) { - page.querySelector('#musicVideosCollapsible').classList.remove('hide'); - var musicVideosContent = page.querySelector('.musicVideosContent'); + page.querySelector("#musicVideosCollapsible").classList.remove("hide"); + var musicVideosContent = page.querySelector(".musicVideosContent"); musicVideosContent.innerHTML = getVideosHtml(result.Items, user); imageLoader.lazyChildren(musicVideosContent); } else { - page.querySelector('#musicVideosCollapsible').classList.add('hide'); + page.querySelector("#musicVideosCollapsible").classList.add("hide"); } }); } @@ -1802,12 +1841,12 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti function renderAdditionalParts(page, item, user) { connectionManager.getApiClient(item.ServerId).getAdditionalVideoParts(user.Id, item.Id).then(function (result) { if (result.Items.length) { - page.querySelector('#additionalPartsCollapsible').classList.remove('hide'); - var additionalPartsContent = page.querySelector('#additionalPartsContent'); + page.querySelector("#additionalPartsCollapsible").classList.remove("hide"); + var additionalPartsContent = page.querySelector("#additionalPartsContent"); additionalPartsContent.innerHTML = getVideosHtml(result.Items, user); imageLoader.lazyChildren(additionalPartsContent); } else { - page.querySelector('#additionalPartsCollapsible').classList.add('hide'); + page.querySelector("#additionalPartsCollapsible").classList.add("hide"); } }); } @@ -1816,34 +1855,34 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti var chapters = item.Chapters || []; if (chapters.length && !chapters[0].ImageTag && (chapters = []), chapters.length) { - page.querySelector('#scenesCollapsible').classList.remove('hide'); - var scenesContent = page.querySelector('#scenesContent'); + page.querySelector("#scenesCollapsible").classList.remove("hide"); + var scenesContent = page.querySelector("#scenesContent"); - require(['chaptercardbuilder'], function (chaptercardbuilder) { + require(["chaptercardbuilder"], function (chaptercardbuilder) { chaptercardbuilder.buildChapterCards(item, chapters, { itemsContainer: scenesContent, - backdropShape: 'overflowBackdrop', - squareShape: 'overflowSquare' + backdropShape: "overflowBackdrop", + squareShape: "overflowSquare" }); }); } else { - page.querySelector('#scenesCollapsible').classList.add('hide'); + page.querySelector("#scenesCollapsible").classList.add("hide"); } } function getVideosHtml(items, user, limit, moreButtonClass) { var html = cardBuilder.getCardsHtml({ items: items, - shape: 'auto', + shape: "auto", showTitle: true, - action: 'play', + action: "play", overlayText: false, centerText: true, showRuntime: true }); if (limit && items.length > limit) { - html += '

'; + html += '

"; } return html; @@ -1851,30 +1890,30 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti function renderSpecials(page, item, user, limit) { connectionManager.getApiClient(item.ServerId).getSpecialFeatures(user.Id, item.Id).then(function (specials) { - var specialsContent = page.querySelector('#specialsContent'); - specialsContent.innerHTML = getVideosHtml(specials, user, limit, 'moreSpecials'); + var specialsContent = page.querySelector("#specialsContent"); + specialsContent.innerHTML = getVideosHtml(specials, user, limit, "moreSpecials"); imageLoader.lazyChildren(specialsContent); }); } function renderCast(page, item) { var people = (item.People || []).filter(function (p) { - return 'Director' !== p.Type; + return "Director" !== p.Type; }); if (!people.length) { - return void page.querySelector('#castCollapsible').classList.add('hide'); + return void page.querySelector("#castCollapsible").classList.add("hide"); } - page.querySelector('#castCollapsible').classList.remove('hide'); - var castContent = page.querySelector('#castContent'); + page.querySelector("#castCollapsible").classList.remove("hide"); + var castContent = page.querySelector("#castContent"); - require(['peoplecardbuilder'], function (peoplecardbuilder) { + require(["peoplecardbuilder"], function (peoplecardbuilder) { peoplecardbuilder.buildPeopleCards(people, { itemsContainer: castContent, coverImage: true, serverId: item.ServerId, - shape: 'overflowPortrait' + shape: "overflowPortrait" }); }); } @@ -1916,12 +1955,12 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function splitVersions(instance, page, apiClient, params) { - require(['confirm'], function (confirm) { - confirm('Are you sure you wish to split the media sources into separate items?', 'Split Media Apart').then(function () { + require(["confirm"], function (confirm) { + confirm("Are you sure you wish to split the media sources into separate items?", "Split Media Apart").then(function () { loading.show(); apiClient.ajax({ - type: 'DELETE', - url: apiClient.getUrl('Videos/' + params.id + '/AlternateSources') + type: "DELETE", + url: apiClient.getUrl("Videos/" + params.id + "/AlternateSources") }).then(function () { loading.hide(); reload(instance, page, params); @@ -1931,12 +1970,12 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function getPlayOptions(startPosition) { - var audioStreamIndex = view.querySelector('.selectAudio').value || null; + var audioStreamIndex = view.querySelector(".selectAudio").value || null; return { startPositionTicks: startPosition, - mediaSourceId: view.querySelector('.selectSource').value, + mediaSourceId: view.querySelector(".selectSource").value, audioStreamIndex: audioStreamIndex, - subtitleStreamIndex: view.querySelector('.selectSubtitles').value + subtitleStreamIndex: view.querySelector(".selectSubtitles").value }; } @@ -1953,7 +1992,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti function playCurrentItem(button, mode) { var item = currentItem; - if ('Program' === item.Type) { + if ("Program" === item.Type) { var apiClient = connectionManager.getApiClient(item.ServerId); return void apiClient.getLiveTvChannel(item.ChannelId, apiClient.getCurrentUserId()).then(function (channel) { playbackManager.play({ @@ -1962,11 +2001,11 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti }); } - playItem(item, item.UserData && 'resume' === mode ? item.UserData.PlaybackPositionTicks : 0); + playItem(item, item.UserData && "resume" === mode ? item.UserData.PlaybackPositionTicks : 0); } function onPlayClick() { - playCurrentItem(this, this.getAttribute('data-mode')); + playCurrentItem(this, this.getAttribute("data-mode")); } function onInstantMixClick() { @@ -1978,7 +2017,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function onDeleteClick() { - require(['deleteHelper'], function (deleteHelper) { + require(["deleteHelper"], function (deleteHelper) { deleteHelper.deleteItem({ item: currentItem, navigate: true @@ -1987,15 +2026,15 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function onCancelSeriesTimerClick() { - require(['recordingHelper'], function (recordingHelper) { + require(["recordingHelper"], function (recordingHelper) { recordingHelper.cancelSeriesTimerWithConfirmation(currentItem.Id, currentItem.ServerId).then(function () { - Dashboard.navigate('livetv.html'); + Dashboard.navigate("livetv.html"); }); }); } function onCancelTimerClick() { - require(['recordingHelper'], function (recordingHelper) { + require(["recordingHelper"], function (recordingHelper) { recordingHelper.cancelTimer(connectionManager.getApiClient(currentItem.ServerId), currentItem.TimerId).then(function () { reload(self, view, params); }); @@ -2037,7 +2076,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti function editImages() { return new Promise(function (resolve, reject) { - require(['imageEditor'], function (imageEditor) { + require(["imageEditor"], function (imageEditor) { imageEditor.show({ itemId: currentItem.Id, serverId: currentItem.ServerId @@ -2049,7 +2088,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti function onWebSocketMessage(e, data) { var msg = data; - if ('UserDataChanged' === msg.MessageType && currentItem && msg.Data.UserId == apiClient.getCurrentUserId()) { + if ("UserDataChanged" === msg.MessageType && currentItem && msg.Data.UserId == apiClient.getCurrentUserId()) { var key = currentItem.UserData.Key; var userData = msg.Data.UserDataList.filter(function (u) { return u.Key == key; @@ -2066,69 +2105,70 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti var currentItem; var self = this; var apiClient = params.serverId ? connectionManager.getApiClient(params.serverId) : ApiClient; - view.querySelectorAll('.btnPlay'); - bindAll(view, '.btnPlay', 'click', onPlayClick); - bindAll(view, '.btnResume', 'click', onPlayClick); - bindAll(view, '.btnInstantMix', 'click', onInstantMixClick); - bindAll(view, '.btnShuffle', 'click', onShuffleClick); - bindAll(view, '.btnPlayTrailer', 'click', onPlayTrailerClick); - bindAll(view, '.btnCancelSeriesTimer', 'click', onCancelSeriesTimerClick); - bindAll(view, '.btnCancelTimer', 'click', onCancelTimerClick); - bindAll(view, '.btnDeleteItem', 'click', onDeleteClick); - bindAll(view, '.btnDownload', 'click', onDownloadClick); - view.querySelector('.trackSelections').addEventListener('submit', onTrackSelectionsSubmit); - view.querySelector('.btnSplitVersions').addEventListener('click', function () { + view.querySelectorAll(".btnPlay"); + bindAll(view, ".btnPlay", "click", onPlayClick); + bindAll(view, ".btnResume", "click", onPlayClick); + bindAll(view, ".btnInstantMix", "click", onInstantMixClick); + bindAll(view, ".btnShuffle", "click", onShuffleClick); + bindAll(view, ".btnPlayTrailer", "click", onPlayTrailerClick); + bindAll(view, ".btnCancelSeriesTimer", "click", onCancelSeriesTimerClick); + bindAll(view, ".btnCancelTimer", "click", onCancelTimerClick); + bindAll(view, ".btnDeleteItem", "click", onDeleteClick); + bindAll(view, ".btnDownload", "click", onDownloadClick); + view.querySelector(".btnMoreCommands i").innerHTML = ""; + view.querySelector(".trackSelections").addEventListener("submit", onTrackSelectionsSubmit); + view.querySelector(".btnSplitVersions").addEventListener("click", function () { splitVersions(self, view, apiClient, params); }); - bindAll(view, '.btnMoreCommands', 'click', onMoreCommandsClick); - view.querySelector('.selectSource').addEventListener('change', function () { + bindAll(view, ".btnMoreCommands", "click", onMoreCommandsClick); + view.querySelector(".selectSource").addEventListener("change", function () { renderVideoSelections(view, self._currentPlaybackMediaSources); renderAudioSelections(view, self._currentPlaybackMediaSources); renderSubtitleSelections(view, self._currentPlaybackMediaSources); }); - view.addEventListener('click', function (e) { - if (dom.parentWithClass(e.target, 'moreScenes')) { + view.addEventListener("click", function (e) { + if (dom.parentWithClass(e.target, "moreScenes")) { renderScenes(view, currentItem); - } else if (dom.parentWithClass(e.target, 'morePeople')) { + } else if (dom.parentWithClass(e.target, "morePeople")) { renderCast(view, currentItem); - } else if (dom.parentWithClass(e.target, 'moreSpecials')) { + } else if (dom.parentWithClass(e.target, "moreSpecials")) { apiClient.getCurrentUser().then(function (user) { renderSpecials(view, currentItem, user); }); } }); - view.querySelector('.detailImageContainer').addEventListener('click', function (e) { - if (dom.parentWithClass(e.target, 'itemDetailGalleryLink')) { + view.querySelector(".detailImageContainer").addEventListener("click", function (e) { + if (dom.parentWithClass(e.target, "itemDetailGalleryLink")) { editImages().then(function () { reload(self, view, params); }); } }); - view.addEventListener('viewshow', function (e) { + view.addEventListener("viewshow", function (e) { var page = this; if (layoutManager.mobile) { libraryMenu.setTransparentMenu(true); } - + if (e.detail.isRestored) { if (currentItem) { - Emby.Page.setTitle(''); + setTitle(currentItem, connectionManager.getApiClient(currentItem.ServerId)); renderTrackSelections(page, self, currentItem, true); } } else { reload(self, page, params); } - events.on(apiClient, 'message', onWebSocketMessage); - events.on(playbackManager, 'playerchange', onPlayerChange); + events.on(apiClient, "message", onWebSocketMessage); + events.on(playbackManager, "playerchange", onPlayerChange); }); - view.addEventListener('viewbeforehide', function () { - events.off(apiClient, 'message', onWebSocketMessage); - events.off(playbackManager, 'playerchange', onPlayerChange); + view.addEventListener("viewbeforehide", function () { + events.off(apiClient, "message", onWebSocketMessage); + events.off(playbackManager, "playerchange", onPlayerChange); libraryMenu.setTransparentMenu(false); }); - view.addEventListener('viewdestroy', function () { + view.addEventListener("viewdestroy", function () { currentItem = null; self._currentPlaybackMediaSources = null; self.currentRecordingFields = null; From 6f1cf4a98a6d6296e1933c7026b71ec62e2ed659 Mon Sep 17 00:00:00 2001 From: DesertCookie Date: Tue, 19 May 2020 17:07:46 +0200 Subject: [PATCH 006/267] Replaced double-quotes with single-quotes --- src/controllers/itemdetailpage.js | 1162 ++++++++++++++--------------- 1 file changed, 581 insertions(+), 581 deletions(-) diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index c5ae6126a79..9b488221baf 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -1,5 +1,5 @@ -define(["loading", "appRouter", "layoutManager", "connectionManager", "userSettings", "cardBuilder", "datetime", "mediaInfo", "backdrop", "listView", "itemContextMenu", "itemHelper", "dom", "indicators", "imageLoader", "libraryMenu", "globalize", "browser", "events", "playbackManager", "scrollStyles", "emby-itemscontainer", "emby-checkbox", "emby-button", "emby-playstatebutton", "emby-ratingbutton", "emby-scroller", "emby-select"], function (loading, appRouter, layoutManager, connectionManager, userSettings, cardBuilder, datetime, mediaInfo, backdrop, listView, itemContextMenu, itemHelper, dom, indicators, imageLoader, libraryMenu, globalize, browser, events, playbackManager) { - "use strict"; +define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSettings', 'cardBuilder', 'datetime', 'mediaInfo', 'backdrop', 'listView', 'itemContextMenu', 'itemHelper', 'dom', 'indicators', 'imageLoader', 'libraryMenu', 'globalize', 'browser', 'events', 'playbackManager', 'scrollStyles', 'emby-itemscontainer', 'emby-checkbox', 'emby-button', 'emby-playstatebutton', 'emby-ratingbutton', 'emby-scroller', 'emby-select'], function (loading, appRouter, layoutManager, connectionManager, userSettings, cardBuilder, datetime, mediaInfo, backdrop, listView, itemContextMenu, itemHelper, dom, indicators, imageLoader, libraryMenu, globalize, browser, events, playbackManager) { + 'use strict'; function getPromise(apiClient, params) { var id = params.id; @@ -24,19 +24,19 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti return apiClient.getArtist(params.musicartist, apiClient.getCurrentUserId()); } - throw new Error("Invalid request"); + throw new Error('Invalid request'); } function hideAll(page, className, show) { var i; var length; - var elems = page.querySelectorAll("." + className); + var elems = page.querySelectorAll('.' + className); for (i = 0, length = elems.length; i < length; i++) { if (show) { - elems[i].classList.remove("hide"); + elems[i].classList.remove('hide'); } else { - elems[i].classList.add("hide"); + elems[i].classList.add('hide'); } } } @@ -61,90 +61,90 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } function getProgramScheduleHtml(items) { - var html = ""; - html += '
'; + var html = ''; + html += '
'; html += listView.getListViewHtml({ items: items, enableUserDataButtons: false, image: true, - imageSource: "channel", + imageSource: 'channel', showProgramDateTime: true, showChannel: false, mediaInfo: false, - action: "none", + action: 'none', moreButton: false, recordButton: false }); - return html += "
"; + return html += '
'; } function renderSeriesTimerSchedule(page, apiClient, seriesTimerId) { apiClient.getLiveTvTimers({ UserId: apiClient.getCurrentUserId(), ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Thumb", - SortBy: "StartDate", + EnableImageTypes: 'Primary,Backdrop,Thumb', + SortBy: 'StartDate', EnableTotalRecordCount: false, EnableUserData: false, SeriesTimerId: seriesTimerId, - Fields: "ChannelInfo,ChannelImage" + Fields: 'ChannelInfo,ChannelImage' }).then(function (result) { if (result.Items.length && result.Items[0].SeriesTimerId != seriesTimerId) { result.Items = []; } var html = getProgramScheduleHtml(result.Items); - var scheduleTab = page.querySelector(".seriesTimerSchedule"); + var scheduleTab = page.querySelector('.seriesTimerSchedule'); scheduleTab.innerHTML = html; imageLoader.lazyChildren(scheduleTab); }); } function renderTimerEditor(page, item, apiClient, user) { - if ("Recording" !== item.Type || !user.Policy.EnableLiveTvManagement || !item.TimerId || "InProgress" !== item.Status) { - return void hideAll(page, "btnCancelTimer"); + if ('Recording' !== item.Type || !user.Policy.EnableLiveTvManagement || !item.TimerId || 'InProgress' !== item.Status) { + return void hideAll(page, 'btnCancelTimer'); } - hideAll(page, "btnCancelTimer", true); + hideAll(page, 'btnCancelTimer', true); } function renderSeriesTimerEditor(page, item, apiClient, user) { - if ("SeriesTimer" !== item.Type) { - return void hideAll(page, "btnCancelSeriesTimer"); + if ('SeriesTimer' !== item.Type) { + return void hideAll(page, 'btnCancelSeriesTimer'); } if (user.Policy.EnableLiveTvManagement) { - require(["seriesRecordingEditor"], function (seriesRecordingEditor) { + require(['seriesRecordingEditor'], function (seriesRecordingEditor) { seriesRecordingEditor.embed(item, apiClient.serverId(), { - context: page.querySelector(".seriesRecordingEditor") + context: page.querySelector('.seriesRecordingEditor') }); }); - page.querySelector(".seriesTimerScheduleSection").classList.remove("hide"); - hideAll(page, "btnCancelSeriesTimer", true); + page.querySelector('.seriesTimerScheduleSection').classList.remove('hide'); + hideAll(page, 'btnCancelSeriesTimer', true); return void renderSeriesTimerSchedule(page, apiClient, item.Id); } - page.querySelector(".seriesTimerScheduleSection").classList.add("hide"); - return void hideAll(page, "btnCancelSeriesTimer"); + page.querySelector('.seriesTimerScheduleSection').classList.add('hide'); + return void hideAll(page, 'btnCancelSeriesTimer'); } function renderTrackSelections(page, instance, item, forceReload) { - var select = page.querySelector(".selectSource"); - - if (!item.MediaSources || !itemHelper.supportsMediaSourceSelection(item) || -1 === playbackManager.getSupportedCommands().indexOf("PlayMediaSource") || !playbackManager.canPlay(item)) { - page.querySelector(".trackSelections").classList.add("hide"); - select.innerHTML = ""; - page.querySelector(".selectVideo").innerHTML = ""; - page.querySelector(".selectAudio").innerHTML = ""; - page.querySelector(".selectSubtitles").innerHTML = ""; + var select = page.querySelector('.selectSource'); + + if (!item.MediaSources || !itemHelper.supportsMediaSourceSelection(item) || -1 === playbackManager.getSupportedCommands().indexOf('PlayMediaSource') || !playbackManager.canPlay(item)) { + page.querySelector('.trackSelections').classList.add('hide'); + select.innerHTML = ''; + page.querySelector('.selectVideo').innerHTML = ''; + page.querySelector('.selectAudio').innerHTML = ''; + page.querySelector('.selectSubtitles').innerHTML = ''; return; } playbackManager.getPlaybackMediaSources(item).then(function (mediaSources) { instance._currentPlaybackMediaSources = mediaSources; - page.querySelector(".trackSelections").classList.remove("hide"); - select.setLabel(globalize.translate("LabelVersion")); + page.querySelector('.trackSelections').classList.remove('hide'); + select.setLabel(globalize.translate('LabelVersion')); var currentValue = select.value; var resolutionNames = []; @@ -175,14 +175,14 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti var selectedId = mediaSources[0].Id; select.innerHTML = mediaSources.map(function (v) { - var selected = v.Id === selectedId ? " selected" : ""; - return '"; - }).join(""); + var selected = v.Id === selectedId ? ' selected' : ''; + return ''; + }).join(''); if (mediaSources.length > 1) { - page.querySelector(".selectSourceContainer").classList.remove("hide"); + page.querySelector('.selectSourceContainer').classList.remove('hide'); } else { - page.querySelector(".selectSourceContainer").classList.add("hide"); + page.querySelector('.selectSourceContainer').classList.add('hide'); } if (select.value !== currentValue || forceReload) { @@ -194,18 +194,18 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } function renderVideoSelections(page, mediaSources) { - var mediaSourceId = page.querySelector(".selectSource").value; + var mediaSourceId = page.querySelector('.selectSource').value; var mediaSource = mediaSources.filter(function (m) { return m.Id === mediaSourceId; })[0]; var tracks = mediaSource.MediaStreams.filter(function (m) { - return "Video" === m.Type; + return 'Video' === m.Type; }); - var select = page.querySelector(".selectVideo"); - select.setLabel(globalize.translate("LabelVideo")); + var select = page.querySelector('.selectVideo'); + select.setLabel(globalize.translate('LabelVideo')); var selectedId = tracks.length ? tracks[0].Index : -1; select.innerHTML = tracks.map(function (v) { - var selected = v.Index === selectedId ? " selected" : ""; + var selected = v.Index === selectedId ? ' selected' : ''; var titleParts = []; var resolutionText = mediaInfo.getResolutionText(v); @@ -217,100 +217,100 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti titleParts.push(v.Codec.toUpperCase()); } - return '"; - }).join(""); - select.setAttribute("disabled", "disabled"); + return ''; + }).join(''); + select.setAttribute('disabled', 'disabled'); if (tracks.length) { - page.querySelector(".selectVideoContainer").classList.remove("hide"); + page.querySelector('.selectVideoContainer').classList.remove('hide'); } else { - page.querySelector(".selectVideoContainer").classList.add("hide"); + page.querySelector('.selectVideoContainer').classList.add('hide'); } } function renderAudioSelections(page, mediaSources) { - var mediaSourceId = page.querySelector(".selectSource").value; + var mediaSourceId = page.querySelector('.selectSource').value; var mediaSource = mediaSources.filter(function (m) { return m.Id === mediaSourceId; })[0]; var tracks = mediaSource.MediaStreams.filter(function (m) { - return "Audio" === m.Type; + return 'Audio' === m.Type; }); - var select = page.querySelector(".selectAudio"); - select.setLabel(globalize.translate("LabelAudio")); + var select = page.querySelector('.selectAudio'); + select.setLabel(globalize.translate('LabelAudio')); var selectedId = mediaSource.DefaultAudioStreamIndex; select.innerHTML = tracks.map(function (v) { - var selected = v.Index === selectedId ? " selected" : ""; - return '"; - }).join(""); + var selected = v.Index === selectedId ? ' selected' : ''; + return ''; + }).join(''); if (tracks.length > 1) { - select.removeAttribute("disabled"); + select.removeAttribute('disabled'); } else { - select.setAttribute("disabled", "disabled"); + select.setAttribute('disabled', 'disabled'); } if (tracks.length) { - page.querySelector(".selectAudioContainer").classList.remove("hide"); + page.querySelector('.selectAudioContainer').classList.remove('hide'); } else { - page.querySelector(".selectAudioContainer").classList.add("hide"); + page.querySelector('.selectAudioContainer').classList.add('hide'); } } function renderSubtitleSelections(page, mediaSources) { - var mediaSourceId = page.querySelector(".selectSource").value; + var mediaSourceId = page.querySelector('.selectSource').value; var mediaSource = mediaSources.filter(function (m) { return m.Id === mediaSourceId; })[0]; var tracks = mediaSource.MediaStreams.filter(function (m) { - return "Subtitle" === m.Type; + return 'Subtitle' === m.Type; }); - var select = page.querySelector(".selectSubtitles"); - select.setLabel(globalize.translate("LabelSubtitles")); + var select = page.querySelector('.selectSubtitles'); + select.setLabel(globalize.translate('LabelSubtitles')); var selectedId = null == mediaSource.DefaultSubtitleStreamIndex ? -1 : mediaSource.DefaultSubtitleStreamIndex; if (tracks.length) { - var selected = -1 === selectedId ? " selected" : ""; - select.innerHTML = '" + tracks.map(function (v) { - selected = v.Index === selectedId ? " selected" : ""; - return '"; - }).join(""); - page.querySelector(".selectSubtitlesContainer").classList.remove("hide"); + var selected = -1 === selectedId ? ' selected' : ''; + select.innerHTML = '' + tracks.map(function (v) { + selected = v.Index === selectedId ? ' selected' : ''; + return ''; + }).join(''); + page.querySelector('.selectSubtitlesContainer').classList.remove('hide'); } else { - select.innerHTML = ""; - page.querySelector(".selectSubtitlesContainer").classList.add("hide"); + select.innerHTML = ''; + page.querySelector('.selectSubtitlesContainer').classList.add('hide'); } } function reloadPlayButtons(page, item) { var canPlay = false; - if ("Program" == item.Type) { + if ('Program' == item.Type) { var now = new Date(); if (now >= datetime.parseISO8601Date(item.StartDate, true) && now < datetime.parseISO8601Date(item.EndDate, true)) { - hideAll(page, "btnPlay", true); + hideAll(page, 'btnPlay', true); canPlay = true; } else { - hideAll(page, "btnPlay"); + hideAll(page, 'btnPlay'); } - hideAll(page, "btnResume"); - hideAll(page, "btnInstantMix"); - hideAll(page, "btnShuffle"); + hideAll(page, 'btnResume'); + hideAll(page, 'btnInstantMix'); + hideAll(page, 'btnShuffle'); } else if (playbackManager.canPlay(item)) { - hideAll(page, "btnPlay", true); - var enableInstantMix = -1 !== ["Audio", "MusicAlbum", "MusicGenre", "MusicArtist"].indexOf(item.Type); - hideAll(page, "btnInstantMix", enableInstantMix); - var enableShuffle = item.IsFolder || -1 !== ["MusicAlbum", "MusicGenre", "MusicArtist"].indexOf(item.Type); - hideAll(page, "btnShuffle", enableShuffle); + hideAll(page, 'btnPlay', true); + var enableInstantMix = -1 !== ['Audio', 'MusicAlbum', 'MusicGenre', 'MusicArtist'].indexOf(item.Type); + hideAll(page, 'btnInstantMix', enableInstantMix); + var enableShuffle = item.IsFolder || -1 !== ['MusicAlbum', 'MusicGenre', 'MusicArtist'].indexOf(item.Type); + hideAll(page, 'btnShuffle', enableShuffle); canPlay = true; - hideAll(page, "btnResume", item.UserData && item.UserData.PlaybackPositionTicks > 0); + hideAll(page, 'btnResume', item.UserData && item.UserData.PlaybackPositionTicks > 0); } else { - hideAll(page, "btnPlay"); - hideAll(page, "btnResume"); - hideAll(page, "btnInstantMix"); - hideAll(page, "btnShuffle"); + hideAll(page, 'btnPlay'); + hideAll(page, 'btnResume'); + hideAll(page, 'btnInstantMix'); + hideAll(page, 'btnShuffle'); } return canPlay; @@ -319,30 +319,30 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti function reloadUserDataButtons(page, item) { var i; var length; - var btnPlaystates = page.querySelectorAll(".btnPlaystate"); + var btnPlaystates = page.querySelectorAll('.btnPlaystate'); for (i = 0, length = btnPlaystates.length; i < length; i++) { var btnPlaystate = btnPlaystates[i]; if (itemHelper.canMarkPlayed(item)) { - btnPlaystate.classList.remove("hide"); + btnPlaystate.classList.remove('hide'); btnPlaystate.setItem(item); } else { - btnPlaystate.classList.add("hide"); + btnPlaystate.classList.add('hide'); btnPlaystate.setItem(null); } } - var btnUserRatings = page.querySelectorAll(".btnUserRating"); + var btnUserRatings = page.querySelectorAll('.btnUserRating'); for (i = 0, length = btnUserRatings.length; i < length; i++) { var btnUserRating = btnUserRatings[i]; if (itemHelper.canRate(item)) { - btnUserRating.classList.remove("hide"); + btnUserRating.classList.remove('hide'); btnUserRating.setItem(item); } else { - btnUserRating.classList.add("hide"); + btnUserRating.classList.add('hide'); btnUserRating.setItem(null); } } @@ -355,13 +355,13 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti var artist = artists[i]; var href = appRouter.getRouteUrl(artist, { context: context, - itemType: "MusicArtist", + itemType: 'MusicArtist', serverId: serverId }); - html.push('' + artist.Name + ""); + html.push('' + artist.Name + ''); } - return html = html.join(" / "); + return html = html.join(' / '); } function renderName(item, container, isStatic, context) { var parentRoute; @@ -371,64 +371,64 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti if (item.AlbumArtists) { parentNameHtml.push(getArtistLinksHtml(item.AlbumArtists, item.ServerId, context)); parentNameLast = true; - } else if (item.ArtistItems && item.ArtistItems.length && "MusicVideo" === item.Type) { + } else if (item.ArtistItems && item.ArtistItems.length && 'MusicVideo' === item.Type) { parentNameHtml.push(getArtistLinksHtml(item.ArtistItems, item.ServerId, context)); parentNameLast = true; - } else if (item.SeriesName && "Episode" === item.Type) { + } else if (item.SeriesName && 'Episode' === item.Type) { parentRoute = appRouter.getRouteUrl({ Id: item.SeriesId, Name: item.SeriesName, - Type: "Series", + Type: 'Series', IsFolder: true, ServerId: item.ServerId }, { context: context }); - parentNameHtml.push('' + item.SeriesName + ""); + parentNameHtml.push('' + item.SeriesName + ''); } else if (item.IsSeries || item.EpisodeTitle) { parentNameHtml.push(item.Name); } - if (item.SeriesName && "Season" === item.Type) { + if (item.SeriesName && 'Season' === item.Type) { parentRoute = appRouter.getRouteUrl({ Id: item.SeriesId, Name: item.SeriesName, - Type: "Series", + Type: 'Series', IsFolder: true, ServerId: item.ServerId }, { context: context }); - parentNameHtml.push('' + item.SeriesName + ""); - } else if (null != item.ParentIndexNumber && "Episode" === item.Type) { + parentNameHtml.push('' + item.SeriesName + ''); + } else if (null != item.ParentIndexNumber && 'Episode' === item.Type) { parentRoute = appRouter.getRouteUrl({ Id: item.SeasonId, Name: item.SeasonName, - Type: "Season", + Type: 'Season', IsFolder: true, ServerId: item.ServerId }, { context: context }); - parentNameHtml.push('' + item.SeasonName + ""); + parentNameHtml.push('' + item.SeasonName + ''); } else if (null != item.ParentIndexNumber && item.IsSeries) { - parentNameHtml.push(item.SeasonName || "S" + item.ParentIndexNumber); - } else if (item.Album && item.AlbumId && ("MusicVideo" === item.Type || "Audio" === item.Type)) { + parentNameHtml.push(item.SeasonName || 'S' + item.ParentIndexNumber); + } else if (item.Album && item.AlbumId && ('MusicVideo' === item.Type || 'Audio' === item.Type)) { parentRoute = appRouter.getRouteUrl({ Id: item.AlbumId, Name: item.Album, - Type: "MusicAlbum", + Type: 'MusicAlbum', IsFolder: true, ServerId: item.ServerId }, { context: context }); - parentNameHtml.push('' + item.Album + ""); + parentNameHtml.push('' + item.Album + ''); } else if (item.Album) { parentNameHtml.push(item.Album); } // FIXME: This whole section needs some refactoring, so it becames easier to scale across all form factors. See GH #1022 - var html = ""; + var html = ''; var tvShowHtml = parentNameHtml[0]; var tvSeasonHtml = parentNameHtml[1]; @@ -436,15 +436,15 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti if (parentNameLast) { // Music if (layoutManager.mobile) { - html = '

' + parentNameHtml.join("
") + "

"; + html = '

' + parentNameHtml.join('
') + '

'; } else { - html = '

' + parentNameHtml.join(" - ") + "

"; + html = '

' + parentNameHtml.join(' - ') + '

'; } } else { if (layoutManager.mobile) { - html = '

' + parentNameHtml.join("
") + "

"; + html = '

' + parentNameHtml.join('
') + '

'; } else { - html = '

' + tvShowHtml + "

"; + html = '

' + tvShowHtml + '

'; } } } @@ -452,36 +452,36 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti var name = itemHelper.getDisplayName(item, { includeParentInfo: false }); - var offset = parentNameLast ? ".25em" : ".5em"; + var offset = parentNameLast ? '.25em' : '.5em'; if (html && !parentNameLast) { if (!layoutManager.mobile && tvSeasonHtml) { - html += '

' + tvSeasonHtml + ' - ' + name + '

'; + html += '

' + tvSeasonHtml + ' - ' + name + '

'; } else { - html += '

' + name + '

'; + html += '

' + name + '

'; } } else { - html = '

' + name + "

" + html; + html = '

' + name + '

' + html; } if (item.OriginalTitle && item.OriginalTitle != item.Name) { - html += '

' + item.OriginalTitle + '

'; + html += '

' + item.OriginalTitle + '

'; } container.innerHTML = html; if (html.length) { - container.classList.remove("hide"); + container.classList.remove('hide'); } else { - container.classList.add("hide"); + container.classList.add('hide'); } } function setTrailerButtonVisibility(page, item) { - if ((item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf("PlayTrailers")) { - hideAll(page, "btnPlayTrailer", true); + if ((item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf('PlayTrailers')) { + hideAll(page, 'btnPlayTrailer', true); } else { - hideAll(page, "btnPlayTrailer"); + hideAll(page, 'btnPlayTrailer'); } } @@ -496,76 +496,76 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti function renderDetailPageBackdrop(page, item, apiClient) { var imgUrl; var hasbackdrop = false; - var itemBackdropElement = page.querySelector("#itemBackdrop"); - var usePrimaryImage = item.MediaType === "Video" && item.Type !== "Movie" && item.Type !== "Trailer" || - item.MediaType && item.MediaType !== "Video" || - item.Type === "MusicAlbum" || - item.Type === "Person"; + var itemBackdropElement = page.querySelector('#itemBackdrop'); + var usePrimaryImage = item.MediaType === 'Video' && item.Type !== 'Movie' && item.Type !== 'Trailer' || + item.MediaType && item.MediaType !== 'Video' || + item.Type === 'MusicAlbum' || + item.Type === 'Person'; if (!layoutManager.mobile && !userSettings.enableBackdrops()) { return false; } - if ("Program" === item.Type && item.ImageTags && item.ImageTags.Thumb) { + if ('Program' === item.Type && item.ImageTags && item.ImageTags.Thumb) { imgUrl = apiClient.getScaledImageUrl(item.Id, { - type: "Thumb", + type: 'Thumb', maxWidth: dom.getScreenWidth(), index: 0, tag: item.ImageTags.Thumb }); - page.classList.remove("noBackdrop"); + page.classList.remove('noBackdrop'); imageLoader.lazyImage(itemBackdropElement, imgUrl, false); hasbackdrop = true; } else if (usePrimaryImage && item.ImageTags && item.ImageTags.Primary) { imgUrl = apiClient.getScaledImageUrl(item.Id, { - type: "Primary", + type: 'Primary', maxWidth: dom.getScreenWidth(), index: 0, tag: item.ImageTags.Primary }); - page.classList.remove("noBackdrop"); + page.classList.remove('noBackdrop'); imageLoader.lazyImage(itemBackdropElement, imgUrl, false); hasbackdrop = true; } else if (item.BackdropImageTags && item.BackdropImageTags.length) { imgUrl = apiClient.getScaledImageUrl(item.Id, { - type: "Backdrop", + type: 'Backdrop', maxWidth: dom.getScreenWidth(), index: 0, tag: item.BackdropImageTags[0] }); - page.classList.remove("noBackdrop"); + page.classList.remove('noBackdrop'); imageLoader.lazyImage(itemBackdropElement, imgUrl, false); hasbackdrop = true; } else if (item.ParentBackdropItemId && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) { imgUrl = apiClient.getScaledImageUrl(item.ParentBackdropItemId, { - type: "Backdrop", + type: 'Backdrop', maxWidth: dom.getScreenWidth(), index: 0, tag: item.ParentBackdropImageTags[0] }); - page.classList.remove("noBackdrop"); + page.classList.remove('noBackdrop'); imageLoader.lazyImage(itemBackdropElement, imgUrl, false); hasbackdrop = true; } else if (item.ImageTags && item.ImageTags.Thumb) { imgUrl = apiClient.getScaledImageUrl(item.Id, { - type: "Thumb", + type: 'Thumb', maxWidth: dom.getScreenWidth(), index: 0, tag: item.ImageTags.Thumb }); - page.classList.remove("noBackdrop"); + page.classList.remove('noBackdrop'); imageLoader.lazyImage(itemBackdropElement, imgUrl, false); hasbackdrop = true; } else { - itemBackdropElement.style.backgroundImage = ""; + itemBackdropElement.style.backgroundImage = ''; } - if ("Person" === item.Type) { + if ('Person' === item.Type) { // FIXME: This hides the backdrop on all persons to fix a margin issue. Ideally, a proper fix should be made. page.classList.add('noBackdrop'); - itemBackdropElement.classList.add("personBackdrop"); + itemBackdropElement.classList.add('personBackdrop'); } else { - itemBackdropElement.classList.remove("personBackdrop"); + itemBackdropElement.classList.remove('personBackdrop'); } return hasbackdrop; @@ -573,9 +573,9 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti function reloadFromItem(instance, page, params, item, user) { var context = params.context; - page.querySelector(".detailPagePrimaryContainer").classList.add("detailSticky"); + page.querySelector('.detailPagePrimaryContainer').classList.add('detailSticky'); - renderName(item, page.querySelector(".nameContainer"), false, context); + renderName(item, page.querySelector('.nameContainer'), false, context); var apiClient = connectionManager.getApiClient(item.ServerId); renderSeriesTimerEditor(page, item, apiClient, user); renderTimerEditor(page, item, apiClient, user); @@ -589,96 +589,96 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti renderDetailPageBackdrop(page, item, apiClient); var canPlay = reloadPlayButtons(page, item); - if ((item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf("PlayTrailers")) { - hideAll(page, "btnPlayTrailer", true); + if ((item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf('PlayTrailers')) { + hideAll(page, 'btnPlayTrailer', true); } else { - hideAll(page, "btnPlayTrailer"); + hideAll(page, 'btnPlayTrailer'); } setTrailerButtonVisibility(page, item); if (item.CanDelete && !item.IsFolder) { - hideAll(page, "btnDeleteItem", true); + hideAll(page, 'btnDeleteItem', true); } else { - hideAll(page, "btnDeleteItem"); + hideAll(page, 'btnDeleteItem'); } - if ("Program" !== item.Type || canPlay) { - hideAll(page, "mainDetailButtons", true); + if ('Program' !== item.Type || canPlay) { + hideAll(page, 'mainDetailButtons', true); } else { - hideAll(page, "mainDetailButtons"); + hideAll(page, 'mainDetailButtons'); } showRecordingFields(instance, page, item, user); var groupedVersions = (item.MediaSources || []).filter(function (g) { - return "Grouping" == g.Type; + return 'Grouping' == g.Type; }); if (user.Policy.IsAdministrator && groupedVersions.length) { - page.querySelector(".btnSplitVersions").classList.remove("hide"); + page.querySelector('.btnSplitVersions').classList.remove('hide'); } else { - page.querySelector(".btnSplitVersions").classList.add("hide"); + page.querySelector('.btnSplitVersions').classList.add('hide'); } if (itemContextMenu.getCommands(getContextMenuOptions(item, user)).length) { - hideAll(page, "btnMoreCommands", true); + hideAll(page, 'btnMoreCommands', true); } else { - hideAll(page, "btnMoreCommands"); + hideAll(page, 'btnMoreCommands'); } - var itemBirthday = page.querySelector("#itemBirthday"); + var itemBirthday = page.querySelector('#itemBirthday'); - if ("Person" == item.Type && item.PremiereDate) { + if ('Person' == item.Type && item.PremiereDate) { try { var birthday = datetime.parseISO8601Date(item.PremiereDate, true).toDateString(); - itemBirthday.classList.remove("hide"); - itemBirthday.innerHTML = globalize.translate("BirthDateValue").replace("{0}", birthday); + itemBirthday.classList.remove('hide'); + itemBirthday.innerHTML = globalize.translate('BirthDateValue').replace('{0}', birthday); } catch (err) { - itemBirthday.classList.add("hide"); + itemBirthday.classList.add('hide'); } } else { - itemBirthday.classList.add("hide"); + itemBirthday.classList.add('hide'); } - var itemDeathDate = page.querySelector("#itemDeathDate"); + var itemDeathDate = page.querySelector('#itemDeathDate'); - if ("Person" == item.Type && item.EndDate) { + if ('Person' == item.Type && item.EndDate) { try { var deathday = datetime.parseISO8601Date(item.EndDate, true).toDateString(); - itemDeathDate.classList.remove("hide"); - itemDeathDate.innerHTML = globalize.translate("DeathDateValue").replace("{0}", deathday); + itemDeathDate.classList.remove('hide'); + itemDeathDate.innerHTML = globalize.translate('DeathDateValue').replace('{0}', deathday); } catch (err) { - itemDeathDate.classList.add("hide"); + itemDeathDate.classList.add('hide'); } } else { - itemDeathDate.classList.add("hide"); + itemDeathDate.classList.add('hide'); } - var itemBirthLocation = page.querySelector("#itemBirthLocation"); + var itemBirthLocation = page.querySelector('#itemBirthLocation'); - if ("Person" == item.Type && item.ProductionLocations && item.ProductionLocations.length) { - var gmap = '' + item.ProductionLocations[0] + ""; - itemBirthLocation.classList.remove("hide"); - itemBirthLocation.innerHTML = globalize.translate("BirthPlaceValue").replace("{0}", gmap); + if ('Person' == item.Type && item.ProductionLocations && item.ProductionLocations.length) { + var gmap = '' + item.ProductionLocations[0] + ''; + itemBirthLocation.classList.remove('hide'); + itemBirthLocation.innerHTML = globalize.translate('BirthPlaceValue').replace('{0}', gmap); } else { - itemBirthLocation.classList.add("hide"); + itemBirthLocation.classList.add('hide'); } setPeopleHeader(page, item); loading.hide(); - if (item.Type === "Book") { - hideAll(page, "btnDownload", true); + if (item.Type === 'Book') { + hideAll(page, 'btnDownload', true); } - require(["autoFocuser"], function (autoFocuser) { + require(['autoFocuser'], function (autoFocuser) { autoFocuser.autoFocus(page); }); } function logoImageUrl(item, apiClient, options) { options = options || {}; - options.type = "Logo"; + options.type = 'Logo'; if (item.ImageTags && item.ImageTags.Logo) { options.tag = item.ImageTags.Logo; @@ -697,12 +697,12 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti var url = logoImageUrl(item, apiClient, {}); if (url != null) { - var pageTitle = document.querySelector(".pageTitle"); - pageTitle.style.backgroundImage = "url('" + url + "')"; - pageTitle.classList.add("pageTitleWithLogo"); - pageTitle.innerHTML = ""; + var pageTitle = document.querySelector('.pageTitle'); + pageTitle.style.backgroundImage = 'url('' + url + '')'; + pageTitle.classList.add('pageTitleWithLogo'); + pageTitle.innerHTML = ''; } else { - Emby.Page.setTitle(""); + Emby.Page.setTitle(''); } } @@ -710,49 +710,49 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti var url = logoImageUrl(item, apiClient, { maxWidth: 400 }); - var detailLogo = page.querySelector(".detailLogo"); + var detailLogo = page.querySelector('.detailLogo'); if (!layoutManager.mobile && !userSettings.enableBackdrops()) { - detailLogo.classList.add("hide"); + detailLogo.classList.add('hide'); } else if (url) { - detailLogo.classList.remove("hide"); - detailLogo.classList.add("lazy"); - detailLogo.setAttribute("data-src", url); + detailLogo.classList.remove('hide'); + detailLogo.classList.add('lazy'); + detailLogo.setAttribute('data-src', url); imageLoader.lazyImage(detailLogo); } else { - detailLogo.classList.add("hide"); + detailLogo.classList.add('hide'); } } function showRecordingFields(instance, page, item, user) { if (!instance.currentRecordingFields) { - var recordingFieldsElement = page.querySelector(".recordingFields"); + var recordingFieldsElement = page.querySelector('.recordingFields'); - if ("Program" == item.Type && user.Policy.EnableLiveTvManagement) { - require(["recordingFields"], function (recordingFields) { + if ('Program' == item.Type && user.Policy.EnableLiveTvManagement) { + require(['recordingFields'], function (recordingFields) { instance.currentRecordingFields = new recordingFields({ parent: recordingFieldsElement, programId: item.Id, serverId: item.ServerId }); - recordingFieldsElement.classList.remove("hide"); + recordingFieldsElement.classList.remove('hide'); }); } else { - recordingFieldsElement.classList.add("hide"); - recordingFieldsElement.innerHTML = ""; + recordingFieldsElement.classList.add('hide'); + recordingFieldsElement.innerHTML = ''; } } } function renderUserInfo(page, item) { - var lastPlayedElement = page.querySelector(".itemLastPlayed"); + var lastPlayedElement = page.querySelector('.itemLastPlayed'); if (item.UserData && item.UserData.LastPlayedDate) { - lastPlayedElement.classList.remove("hide"); + lastPlayedElement.classList.remove('hide'); var datePlayed = datetime.parseISO8601Date(item.UserData.LastPlayedDate); - lastPlayedElement.innerHTML = globalize.translate("DatePlayed") + ": " + datetime.toLocaleDateString(datePlayed) + " " + datetime.getDisplayTime(datePlayed); + lastPlayedElement.innerHTML = globalize.translate('DatePlayed') + ': ' + datetime.toLocaleDateString(datePlayed) + ' ' + datetime.getDisplayTime(datePlayed); } else { - lastPlayedElement.classList.add("hide"); + lastPlayedElement.classList.add('hide'); } } @@ -761,40 +761,40 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti if (item.DateCreated && itemHelper.enableDateAddedDisplay(item)) { var dateCreated = datetime.parseISO8601Date(item.DateCreated); - html.push(globalize.translate("AddedOnValue", datetime.toLocaleDateString(dateCreated) + " " + datetime.getDisplayTime(dateCreated))); + html.push(globalize.translate('AddedOnValue', datetime.toLocaleDateString(dateCreated) + ' ' + datetime.getDisplayTime(dateCreated))); } var links = []; if (!layoutManager.tv && item.HomePageUrl) { - links.push('' + globalize.translate("ButtonWebsite") + ""); + links.push('' + globalize.translate('ButtonWebsite') + ''); } if (item.ExternalUrls) { for (var i = 0, length = item.ExternalUrls.length; i < length; i++) { var url = item.ExternalUrls[i]; - links.push('' + url.Name + ""); + links.push('' + url.Name + ''); } } if (links.length) { - html.push(globalize.translate("LinksValue", links.join(", "))); + html.push(globalize.translate('LinksValue', links.join(', '))); } - linksElem.innerHTML = html.join(", "); + linksElem.innerHTML = html.join(', '); if (html.length) { - linksElem.classList.remove("hide"); + linksElem.classList.remove('hide'); } else { - linksElem.classList.add("hide"); + linksElem.classList.add('hide'); } } function renderDetailImage(page, elem, item, apiClient, editable, imageLoader, indicators) { - if ("SeriesTimer" === item.Type || "Program" === item.Type) { + if ('SeriesTimer' === item.Type || 'Program' === item.Type) { editable = false; } - elem.classList.add("detailimg-hidemobile"); + elem.classList.add('detailimg-hidemobile'); var imageTags = item.ImageTags || {}; @@ -803,8 +803,8 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } var url; - var html = ""; - var shape = "portrait"; + var html = ''; + var shape = 'portrait'; var detectRatio = false; /* In the following section, getScreenWidth() is multiplied by 0.5 as the posters @@ -812,63 +812,63 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti // TODO: Find a reliable way to get the poster width if (imageTags.Primary) { url = apiClient.getScaledImageUrl(item.Id, { - type: "Primary", + type: 'Primary', maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.ImageTags.Primary }); detectRatio = true; } else if (item.BackdropImageTags && item.BackdropImageTags.length) { url = apiClient.getScaledImageUrl(item.Id, { - type: "Backdrop", + type: 'Backdrop', maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.BackdropImageTags[0] }); - shape = "thumb"; + shape = 'thumb'; } else if (imageTags.Thumb) { url = apiClient.getScaledImageUrl(item.Id, { - type: "Thumb", + type: 'Thumb', maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.ImageTags.Thumb }); - shape = "thumb"; + shape = 'thumb'; } else if (imageTags.Disc) { url = apiClient.getScaledImageUrl(item.Id, { - type: "Disc", + type: 'Disc', maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.ImageTags.Disc }); - shape = "square"; + shape = 'square'; } else if (item.AlbumId && item.AlbumPrimaryImageTag) { url = apiClient.getScaledImageUrl(item.AlbumId, { - type: "Primary", + type: 'Primary', maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.AlbumPrimaryImageTag }); - shape = "square"; + shape = 'square'; } else if (item.SeriesId && item.SeriesPrimaryImageTag) { url = apiClient.getScaledImageUrl(item.SeriesId, { - type: "Primary", + type: 'Primary', maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.SeriesPrimaryImageTag }); } else if (item.ParentPrimaryImageItemId && item.ParentPrimaryImageTag) { url = apiClient.getScaledImageUrl(item.ParentPrimaryImageItemId, { - type: "Primary", + type: 'Primary', maxWidth: Math.round(dom.getScreenWidth() * 0.5), tag: item.ParentPrimaryImageTag }); } if (editable && url === undefined) { - html += ""; + html += ''; } else if (!editable && url === undefined) { - html += "'; } - var progressHtml = item.IsFolder || !item.UserData ? "" : indicators.getProgressBarHtml(item); - html += '
'; + var progressHtml = item.IsFolder || !item.UserData ? '' : indicators.getProgressBarHtml(item); + html += '
'; if (progressHtml) { html += progressHtml; } - html += "
"; + html += '
'; elem.innerHTML = html; if (detectRatio && item.PrimaryImageAspectRatio) { if (item.PrimaryImageAspectRatio >= 1.48) { - shape = "thumb"; + shape = 'thumb'; } else if (item.PrimaryImageAspectRatio >= 0.85 && item.PrimaryImageAspectRatio <= 1.34) { - shape = "square"; + shape = 'square'; } } - if ("thumb" == shape) { - elem.classList.add("thumbDetailImageContainer"); - elem.classList.remove("portraitDetailImageContainer"); - elem.classList.remove("squareDetailImageContainer"); - } else if ("square" == shape) { - elem.classList.remove("thumbDetailImageContainer"); - elem.classList.remove("portraitDetailImageContainer"); - elem.classList.add("squareDetailImageContainer"); + if ('thumb' == shape) { + elem.classList.add('thumbDetailImageContainer'); + elem.classList.remove('portraitDetailImageContainer'); + elem.classList.remove('squareDetailImageContainer'); + } else if ('square' == shape) { + elem.classList.remove('thumbDetailImageContainer'); + elem.classList.remove('portraitDetailImageContainer'); + elem.classList.add('squareDetailImageContainer'); } else { - elem.classList.remove("thumbDetailImageContainer"); - elem.classList.add("portraitDetailImageContainer"); - elem.classList.remove("squareDetailImageContainer"); + elem.classList.remove('thumbDetailImageContainer'); + elem.classList.add('portraitDetailImageContainer'); + elem.classList.remove('squareDetailImageContainer'); } if (url) { - imageLoader.lazyImage(elem.querySelector("img"), url); + imageLoader.lazyImage(elem.querySelector('img'), url); } } function renderImage(page, item, apiClient, user) { renderDetailImage( page, - page.querySelector(".detailImageContainer"), + page.querySelector('.detailImageContainer'), item, apiClient, - user.Policy.IsAdministrator && "Photo" != item.MediaType, + user.Policy.IsAdministrator && 'Photo' != item.MediaType, imageLoader, indicators ); } function refreshDetailImageUserData(elem, item) { - elem.querySelector(".detailImageProgressContainer").innerHTML = indicators.getProgressBarHtml(item); + elem.querySelector('.detailImageProgressContainer').innerHTML = indicators.getProgressBarHtml(item); } function refreshImage(page, item) { - refreshDetailImageUserData(page.querySelector(".detailImageContainer"), item); + refreshDetailImageUserData(page.querySelector('.detailImageContainer'), item); } function setPeopleHeader(page, item) { - if ("Audio" == item.MediaType || "MusicAlbum" == item.Type || "Book" == item.MediaType || "Photo" == item.MediaType) { - page.querySelector("#peopleHeader").innerHTML = globalize.translate("HeaderPeople"); + if ('Audio' == item.MediaType || 'MusicAlbum' == item.Type || 'Book' == item.MediaType || 'Photo' == item.MediaType) { + page.querySelector('#peopleHeader').innerHTML = globalize.translate('HeaderPeople'); } else { - page.querySelector("#peopleHeader").innerHTML = globalize.translate("HeaderCastAndCrew"); + page.querySelector('#peopleHeader').innerHTML = globalize.translate('HeaderCastAndCrew'); } } function renderNextUp(page, item, user) { - var section = page.querySelector(".nextUpSection"); + var section = page.querySelector('.nextUpSection'); - if ("Series" != item.Type) { - return void section.classList.add("hide"); + if ('Series' != item.Type) { + return void section.classList.add('hide'); } connectionManager.getApiClient(item.ServerId).getNextUpEpisodes({ @@ -958,93 +958,93 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti UserId: user.Id }).then(function (result) { if (result.Items.length) { - section.classList.remove("hide"); + section.classList.remove('hide'); } else { - section.classList.add("hide"); + section.classList.add('hide'); } var html = cardBuilder.getCardsHtml({ items: result.Items, - shape: "overflowBackdrop", + shape: 'overflowBackdrop', showTitle: true, - displayAsSpecial: "Season" == item.Type && item.IndexNumber, + displayAsSpecial: 'Season' == item.Type && item.IndexNumber, overlayText: false, centerText: true, overlayPlayButton: true }); - var itemsContainer = section.querySelector(".nextUpItems"); + var itemsContainer = section.querySelector('.nextUpItems'); itemsContainer.innerHTML = html; imageLoader.lazyChildren(itemsContainer); }); } function setInitialCollapsibleState(page, item, apiClient, context, user) { - page.querySelector(".collectionItems").innerHTML = ""; + page.querySelector('.collectionItems').innerHTML = ''; - if ("Playlist" == item.Type) { - page.querySelector("#childrenCollapsible").classList.remove("hide"); + if ('Playlist' == item.Type) { + page.querySelector('#childrenCollapsible').classList.remove('hide'); renderPlaylistItems(page, item); - } else if ("Studio" == item.Type || "Person" == item.Type || "Genre" == item.Type || "MusicGenre" == item.Type || "MusicArtist" == item.Type) { - page.querySelector("#childrenCollapsible").classList.remove("hide"); + } else if ('Studio' == item.Type || 'Person' == item.Type || 'Genre' == item.Type || 'MusicGenre' == item.Type || 'MusicArtist' == item.Type) { + page.querySelector('#childrenCollapsible').classList.remove('hide'); renderItemsByName(page, item); } else if (item.IsFolder) { - if ("BoxSet" == item.Type) { - page.querySelector("#childrenCollapsible").classList.add("hide"); + if ('BoxSet' == item.Type) { + page.querySelector('#childrenCollapsible').classList.add('hide'); } renderChildren(page, item); } else { - page.querySelector("#childrenCollapsible").classList.add("hide"); + page.querySelector('#childrenCollapsible').classList.add('hide'); } - if ("Series" == item.Type) { + if ('Series' == item.Type) { renderSeriesSchedule(page, item); renderNextUp(page, item, user); } else { - page.querySelector(".nextUpSection").classList.add("hide"); + page.querySelector('.nextUpSection').classList.add('hide'); } renderScenes(page, item); - if (item.SpecialFeatureCount && 0 != item.SpecialFeatureCount && "Series" != item.Type) { - page.querySelector("#specialsCollapsible").classList.remove("hide"); + if (item.SpecialFeatureCount && 0 != item.SpecialFeatureCount && 'Series' != item.Type) { + page.querySelector('#specialsCollapsible').classList.remove('hide'); renderSpecials(page, item, user, 6); } else { - page.querySelector("#specialsCollapsible").classList.add("hide"); + page.querySelector('#specialsCollapsible').classList.add('hide'); } renderCast(page, item); if (item.PartCount && item.PartCount > 1) { - page.querySelector("#additionalPartsCollapsible").classList.remove("hide"); + page.querySelector('#additionalPartsCollapsible').classList.remove('hide'); renderAdditionalParts(page, item, user); } else { - page.querySelector("#additionalPartsCollapsible").classList.add("hide"); + page.querySelector('#additionalPartsCollapsible').classList.add('hide'); } - if ("MusicAlbum" == item.Type) { + if ('MusicAlbum' == item.Type) { renderMusicVideos(page, item, user); } else { - page.querySelector("#musicVideosCollapsible").classList.add("hide"); + page.querySelector('#musicVideosCollapsible').classList.add('hide'); } } function renderOverview(elems, item) { for (var i = 0, length = elems.length; i < length; i++) { var elem = elems[i]; - var overview = item.Overview || ""; + var overview = item.Overview || ''; if (overview) { elem.innerHTML = overview; - elem.classList.remove("hide"); - var anchors = elem.querySelectorAll("a"); + elem.classList.remove('hide'); + var anchors = elem.querySelectorAll('a'); for (var j = 0, length2 = anchors.length; j < length2; j++) { - anchors[j].setAttribute("target", "_blank"); + anchors[j].setAttribute('target', '_blank'); } } else { - elem.innerHTML = ""; - elem.classList.add("hide"); + elem.innerHTML = ''; + elem.classList.add('hide'); } } } @@ -1055,55 +1055,55 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti var genres = item.GenreItems || []; switch (context) { - case "music": - type = "MusicGenre"; + case 'music': + type = 'MusicGenre'; break; default: - type = "Genre"; + type = 'Genre'; } var html = genres.map(function (p) { - return '' + p.Name + ""; - }).join(", "); - var elem = page.querySelector(".genres"); - elem.innerHTML = globalize.translate(genres.length > 1 ? "GenresValue" : "GenreValue", html); + }) + ''>' + p.Name + ''; + }).join(', '); + var elem = page.querySelector('.genres'); + elem.innerHTML = globalize.translate(genres.length > 1 ? 'GenresValue' : 'GenreValue', html); if (genres.length) { - elem.classList.remove("hide"); + elem.classList.remove('hide'); } else { - elem.classList.add("hide"); + elem.classList.add('hide'); } } function renderDirector(page, item, context) { var directors = (item.People || []).filter(function (p) { - return "Director" === p.Type; + return 'Director' === p.Type; }); var html = directors.map(function (p) { - return '' + p.Name + ""; - }).join(", "); - var elem = page.querySelector(".directors"); - elem.innerHTML = globalize.translate(directors.length > 1 ? "DirectorsValue" : "DirectorValue", html); + }) + ''>' + p.Name + ''; + }).join(', '); + var elem = page.querySelector('.directors'); + elem.innerHTML = globalize.translate(directors.length > 1 ? 'DirectorsValue' : 'DirectorValue', html); if (directors.length) { - elem.classList.remove("hide"); + elem.classList.remove('hide'); } else { - elem.classList.add("hide"); + elem.classList.add('hide'); } } @@ -1114,22 +1114,22 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti renderDirector(page, item, context); renderGenres(page, item, context); renderChannelGuide(page, apiClient, item); - var taglineElement = page.querySelector(".tagline"); + var taglineElement = page.querySelector('.tagline'); if (item.Taglines && item.Taglines.length) { - taglineElement.classList.remove("hide"); + taglineElement.classList.remove('hide'); taglineElement.innerHTML = item.Taglines[0]; } else { - taglineElement.classList.add("hide"); + taglineElement.classList.add('hide'); } - var overview = page.querySelector(".overview"); - var externalLinksElem = page.querySelector(".itemExternalLinks"); + var overview = page.querySelector('.overview'); + var externalLinksElem = page.querySelector('.itemExternalLinks'); renderOverview([overview], item); var i; var itemMiscInfo; - itemMiscInfo = page.querySelectorAll(".itemMiscInfo-primary"); + itemMiscInfo = page.querySelectorAll('.itemMiscInfo-primary'); for (i = 0; i < itemMiscInfo.length; i++) { mediaInfo.fillPrimaryMediaInfo(itemMiscInfo[i], item, { @@ -1138,24 +1138,24 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti subtitles: false }); - if (itemMiscInfo[i].innerHTML && "SeriesTimer" !== item.Type) { - itemMiscInfo[i].classList.remove("hide"); + if (itemMiscInfo[i].innerHTML && 'SeriesTimer' !== item.Type) { + itemMiscInfo[i].classList.remove('hide'); } else { - itemMiscInfo[i].classList.add("hide"); + itemMiscInfo[i].classList.add('hide'); } } - itemMiscInfo = page.querySelectorAll(".itemMiscInfo-secondary"); + itemMiscInfo = page.querySelectorAll('.itemMiscInfo-secondary'); for (i = 0; i < itemMiscInfo.length; i++) { mediaInfo.fillSecondaryMediaInfo(itemMiscInfo[i], item, { interactive: true }); - if (itemMiscInfo[i].innerHTML && "SeriesTimer" !== item.Type) { - itemMiscInfo[i].classList.remove("hide"); + if (itemMiscInfo[i].innerHTML && 'SeriesTimer' !== item.Type) { + itemMiscInfo[i].classList.remove('hide'); } else { - itemMiscInfo[i].classList.add("hide"); + itemMiscInfo[i].classList.add('hide'); } } @@ -1175,7 +1175,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti scrollX = enableScrollX(); } - return scrollX ? "overflowPortrait" : "portrait"; + return scrollX ? 'overflowPortrait' : 'portrait'; } function getSquareShape(scrollX) { @@ -1183,35 +1183,35 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti scrollX = enableScrollX(); } - return scrollX ? "overflowSquare" : "square"; + return scrollX ? 'overflowSquare' : 'square'; } function renderMoreFromSeason(view, item, apiClient) { - var section = view.querySelector(".moreFromSeasonSection"); + var section = view.querySelector('.moreFromSeasonSection'); if (section) { - if ("Episode" !== item.Type || !item.SeasonId || !item.SeriesId) { - return void section.classList.add("hide"); + if ('Episode' !== item.Type || !item.SeasonId || !item.SeriesId) { + return void section.classList.add('hide'); } var userId = apiClient.getCurrentUserId(); apiClient.getEpisodes(item.SeriesId, { SeasonId: item.SeasonId, UserId: userId, - Fields: "ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount" + Fields: 'ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount' }).then(function (result) { if (result.Items.length < 2) { - return void section.classList.add("hide"); + return void section.classList.add('hide'); } - section.classList.remove("hide"); - section.querySelector("h2").innerHTML = globalize.translate("MoreFromValue", item.SeasonName); - var itemsContainer = section.querySelector(".itemsContainer"); + section.classList.remove('hide'); + section.querySelector('h2').innerHTML = globalize.translate('MoreFromValue', item.SeasonName); + var itemsContainer = section.querySelector('.itemsContainer'); cardBuilder.buildCards(result.Items, { parentContainer: section, itemsContainer: itemsContainer, - shape: "autooverflow", - sectionTitleTagName: "h2", + shape: 'autooverflow', + sectionTitleTagName: 'h2', scalable: true, showTitle: true, overlayText: false, @@ -1219,11 +1219,11 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti includeParentInfoInTitle: false, allowBottomPadding: false }); - var card = itemsContainer.querySelector('.card[data-id="' + item.Id + '"]'); + var card = itemsContainer.querySelector('.card[data-id='' + item.Id + '']'); if (card) { setTimeout(function () { - section.querySelector(".emby-scroller").toStart(card.previousSibling || card, true); + section.querySelector('.emby-scroller').toStart(card.previousSibling || card, true); }, 100); } }); @@ -1231,28 +1231,28 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } function renderMoreFromArtist(view, item, apiClient) { - var section = view.querySelector(".moreFromArtistSection"); + var section = view.querySelector('.moreFromArtistSection'); if (section) { - if ("MusicArtist" === item.Type) { - if (!apiClient.isMinServerVersion("3.4.1.19")) { - return void section.classList.add("hide"); + if ('MusicArtist' === item.Type) { + if (!apiClient.isMinServerVersion('3.4.1.19')) { + return void section.classList.add('hide'); } - } else if ("MusicAlbum" !== item.Type || !item.AlbumArtists || !item.AlbumArtists.length) { - return void section.classList.add("hide"); + } else if ('MusicAlbum' !== item.Type || !item.AlbumArtists || !item.AlbumArtists.length) { + return void section.classList.add('hide'); } var query = { - IncludeItemTypes: "MusicAlbum", + IncludeItemTypes: 'MusicAlbum', Recursive: true, ExcludeItemIds: item.Id, - SortBy: "ProductionYear,SortName", - SortOrder: "Descending" + SortBy: 'ProductionYear,SortName', + SortOrder: 'Descending' }; - if ("MusicArtist" === item.Type) { + if ('MusicArtist' === item.Type) { query.ContributingArtistIds = item.Id; - } else if (apiClient.isMinServerVersion("3.4.1.18")) { + } else if (apiClient.isMinServerVersion('3.4.1.18')) { query.AlbumArtistIds = item.AlbumArtists[0].Id; } else { query.ArtistIds = item.AlbumArtists[0].Id; @@ -1260,24 +1260,24 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti apiClient.getItems(apiClient.getCurrentUserId(), query).then(function (result) { if (!result.Items.length) { - return void section.classList.add("hide"); + return void section.classList.add('hide'); } - section.classList.remove("hide"); + section.classList.remove('hide'); - if ("MusicArtist" === item.Type) { - section.querySelector("h2").innerHTML = globalize.translate("HeaderAppearsOn"); + if ('MusicArtist' === item.Type) { + section.querySelector('h2').innerHTML = globalize.translate('HeaderAppearsOn'); } else { - section.querySelector("h2").innerHTML = globalize.translate("MoreFromValue", item.AlbumArtists[0].Name); + section.querySelector('h2').innerHTML = globalize.translate('MoreFromValue', item.AlbumArtists[0].Name); } cardBuilder.buildCards(result.Items, { parentContainer: section, - itemsContainer: section.querySelector(".itemsContainer"), - shape: "autooverflow", - sectionTitleTagName: "h2", + itemsContainer: section.querySelector('.itemsContainer'), + shape: 'autooverflow', + sectionTitleTagName: 'h2', scalable: true, - coverImage: "MusicArtist" === item.Type || "MusicAlbum" === item.Type, + coverImage: 'MusicArtist' === item.Type || 'MusicAlbum' === item.Type, showTitle: true, showParentTitle: false, centerText: true, @@ -1290,47 +1290,47 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } function renderSimilarItems(page, item, context) { - var similarCollapsible = page.querySelector("#similarCollapsible"); + var similarCollapsible = page.querySelector('#similarCollapsible'); if (similarCollapsible) { - if ("Movie" != item.Type && "Trailer" != item.Type && "Series" != item.Type && "Program" != item.Type && "Recording" != item.Type && "MusicAlbum" != item.Type && "MusicArtist" != item.Type && "Playlist" != item.Type) { - return void similarCollapsible.classList.add("hide"); + if ('Movie' != item.Type && 'Trailer' != item.Type && 'Series' != item.Type && 'Program' != item.Type && 'Recording' != item.Type && 'MusicAlbum' != item.Type && 'MusicArtist' != item.Type && 'Playlist' != item.Type) { + return void similarCollapsible.classList.add('hide'); } - similarCollapsible.classList.remove("hide"); + similarCollapsible.classList.remove('hide'); var apiClient = connectionManager.getApiClient(item.ServerId); var options = { userId: apiClient.getCurrentUserId(), limit: 12, - fields: "PrimaryImageAspectRatio,UserData,CanDelete" + fields: 'PrimaryImageAspectRatio,UserData,CanDelete' }; - if ("MusicAlbum" == item.Type && item.AlbumArtists && item.AlbumArtists.length) { + if ('MusicAlbum' == item.Type && item.AlbumArtists && item.AlbumArtists.length) { options.ExcludeArtistIds = item.AlbumArtists[0].Id; } apiClient.getSimilarItems(item.Id, options).then(function (result) { if (!result.Items.length) { - return void similarCollapsible.classList.add("hide"); + return void similarCollapsible.classList.add('hide'); } - similarCollapsible.classList.remove("hide"); - var html = ""; + similarCollapsible.classList.remove('hide'); + var html = ''; html += cardBuilder.getCardsHtml({ items: result.Items, - shape: "autooverflow", - showParentTitle: "MusicAlbum" == item.Type, + shape: 'autooverflow', + showParentTitle: 'MusicAlbum' == item.Type, centerText: true, showTitle: true, context: context, lazy: true, showDetailsMenu: true, - coverImage: "MusicAlbum" == item.Type || "MusicArtist" == item.Type, + coverImage: 'MusicAlbum' == item.Type || 'MusicArtist' == item.Type, overlayPlayButton: true, overlayText: false, - showYear: "Movie" === item.Type || "Trailer" === item.Type || "Series" === item.Type + showYear: 'Movie' === item.Type || 'Trailer' === item.Type || 'Series' === item.Type }); - var similarContent = similarCollapsible.querySelector(".similarContent"); + var similarContent = similarCollapsible.querySelector('.similarContent'); similarContent.innerHTML = html; imageLoader.lazyChildren(similarContent); }); @@ -1338,52 +1338,52 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } function renderSeriesAirTime(page, item, isStatic) { - var seriesAirTime = page.querySelector("#seriesAirTime"); - if ("Series" != item.Type) { - seriesAirTime.classList.add("hide"); + var seriesAirTime = page.querySelector('#seriesAirTime'); + if ('Series' != item.Type) { + seriesAirTime.classList.add('hide'); return; } - var html = ""; + var html = ''; if (item.AirDays && item.AirDays.length) { if (7 == item.AirDays.length) { - html += "daily"; + html += 'daily'; } else { html += item.AirDays.map(function (a) { - return a + "s"; - }).join(","); + return a + 's'; + }).join(','); } } if (item.AirTime) { - html += " at " + item.AirTime; + html += ' at ' + item.AirTime; } if (item.Studios.length) { if (isStatic) { - html += " on " + item.Studios[0].Name; + html += ' on ' + item.Studios[0].Name; } else { var context = inferContext(item); var href = appRouter.getRouteUrl(item.Studios[0], { context: context, - itemType: "Studio", + itemType: 'Studio', serverId: item.ServerId }); - html += ' on ' + item.Studios[0].Name + ""; + html += ' on ' + item.Studios[0].Name + ''; } } if (html) { - html = ("Ended" == item.Status ? "Aired " : "Airs ") + html; + html = ('Ended' == item.Status ? 'Aired ' : 'Airs ') + html; seriesAirTime.innerHTML = html; - seriesAirTime.classList.remove("hide"); + seriesAirTime.classList.remove('hide'); } else { - seriesAirTime.classList.add("hide"); + seriesAirTime.classList.add('hide'); } } function renderTags(page, item) { - var itemTags = page.querySelector(".itemTags"); + var itemTags = page.querySelector('.itemTags'); var tagElements = []; var tags = item.Tags || []; - if ("Program" === item.Type) { + if ('Program' === item.Type) { tags = []; } @@ -1392,93 +1392,93 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } if (tagElements.length) { - itemTags.innerHTML = globalize.translate("TagsValue", tagElements.join(", ")); - itemTags.classList.remove("hide"); + itemTags.innerHTML = globalize.translate('TagsValue', tagElements.join(', ')); + itemTags.classList.remove('hide'); } else { - itemTags.innerHTML = ""; - itemTags.classList.add("hide"); + itemTags.innerHTML = ''; + itemTags.classList.add('hide'); } } function renderChildren(page, item) { - var fields = "ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount"; + var fields = 'ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount'; var query = { ParentId: item.Id, Fields: fields }; - if ("BoxSet" !== item.Type) { - query.SortBy = "SortName"; + if ('BoxSet' !== item.Type) { + query.SortBy = 'SortName'; } var promise; var apiClient = connectionManager.getApiClient(item.ServerId); var userId = apiClient.getCurrentUserId(); - if ("Series" == item.Type) { + if ('Series' == item.Type) { promise = apiClient.getSeasons(item.Id, { userId: userId, Fields: fields }); - } else if ("Season" == item.Type) { - fields += ",Overview"; + } else if ('Season' == item.Type) { + fields += ',Overview'; promise = apiClient.getEpisodes(item.SeriesId, { seasonId: item.Id, userId: userId, Fields: fields }); - } else if ("MusicArtist" == item.Type) { - query.SortBy = "ProductionYear,SortName"; + } else if ('MusicArtist' == item.Type) { + query.SortBy = 'ProductionYear,SortName'; } promise = promise || apiClient.getItems(apiClient.getCurrentUserId(), query); promise.then(function (result) { - var html = ""; + var html = ''; var scrollX = false; var isList = false; - var childrenItemsContainer = page.querySelector(".childrenItemsContainer"); + var childrenItemsContainer = page.querySelector('.childrenItemsContainer'); - if ("MusicAlbum" == item.Type) { + if ('MusicAlbum' == item.Type) { html = listView.getListViewHtml({ items: result.Items, smallIcon: true, showIndex: true, - index: "disc", + index: 'disc', showIndexNumberLeft: true, playFromHere: true, - action: "playallfromhere", + action: 'playallfromhere', image: false, - artist: "auto", + artist: 'auto', containerAlbumArtists: item.AlbumArtists, addToListButton: true }); isList = true; - } else if ("Series" == item.Type) { + } else if ('Series' == item.Type) { scrollX = enableScrollX(); html = cardBuilder.getCardsHtml({ items: result.Items, - shape: "overflowPortrait", + shape: 'overflowPortrait', showTitle: true, centerText: true, lazy: true, overlayPlayButton: true, allowBottomPadding: !scrollX }); - } else if ("Season" == item.Type || "Episode" == item.Type) { - if ("Episode" !== item.Type) { + } else if ('Season' == item.Type || 'Episode' == item.Type) { + if ('Episode' !== item.Type) { isList = true; } - scrollX = "Episode" == item.Type; - if (result.Items.length < 2 && "Episode" === item.Type) { + scrollX = 'Episode' == item.Type; + if (result.Items.length < 2 && 'Episode' === item.Type) { return; } - if ("Episode" === item.Type) { + if ('Episode' === item.Type) { html = cardBuilder.getCardsHtml({ items: result.Items, - shape: "overflowBackdrop", + shape: 'overflowBackdrop', showTitle: true, - displayAsSpecial: "Season" == item.Type && item.IndexNumber, + displayAsSpecial: 'Season' == item.Type && item.IndexNumber, playFromHere: true, overlayText: true, lazy: true, @@ -1487,15 +1487,15 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti allowBottomPadding: !scrollX, includeParentInfoInTitle: false }); - } else if ("Season" === item.Type) { + } else if ('Season' === item.Type) { html = listView.getListViewHtml({ items: result.Items, showIndexNumber: false, enableOverview: true, - imageSize: "large", + imageSize: 'large', enableSideMediaInfo: false, highlight: false, - action: layoutManager.tv ? "resume" : "none", + action: layoutManager.tv ? 'resume' : 'none', infoButton: true, imagePlayButton: true, includeParentInfoInTitle: false @@ -1503,78 +1503,78 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } } - if ("BoxSet" !== item.Type) { - page.querySelector("#childrenCollapsible").classList.remove("hide"); + if ('BoxSet' !== item.Type) { + page.querySelector('#childrenCollapsible').classList.remove('hide'); } if (scrollX) { - childrenItemsContainer.classList.add("scrollX"); - childrenItemsContainer.classList.add("hiddenScrollX"); - childrenItemsContainer.classList.remove("vertical-wrap"); - childrenItemsContainer.classList.remove("vertical-list"); + childrenItemsContainer.classList.add('scrollX'); + childrenItemsContainer.classList.add('hiddenScrollX'); + childrenItemsContainer.classList.remove('vertical-wrap'); + childrenItemsContainer.classList.remove('vertical-list'); } else { - childrenItemsContainer.classList.remove("scrollX"); - childrenItemsContainer.classList.remove("hiddenScrollX"); - childrenItemsContainer.classList.remove("smoothScrollX"); + childrenItemsContainer.classList.remove('scrollX'); + childrenItemsContainer.classList.remove('hiddenScrollX'); + childrenItemsContainer.classList.remove('smoothScrollX'); if (isList) { - childrenItemsContainer.classList.add("vertical-list"); - childrenItemsContainer.classList.remove("vertical-wrap"); + childrenItemsContainer.classList.add('vertical-list'); + childrenItemsContainer.classList.remove('vertical-wrap'); } else { - childrenItemsContainer.classList.add("vertical-wrap"); - childrenItemsContainer.classList.remove("vertical-list"); + childrenItemsContainer.classList.add('vertical-wrap'); + childrenItemsContainer.classList.remove('vertical-list'); } } childrenItemsContainer.innerHTML = html; imageLoader.lazyChildren(childrenItemsContainer); - if ("BoxSet" == item.Type) { + if ('BoxSet' == item.Type) { var collectionItemTypes = [{ - name: globalize.translate("HeaderVideos"), - mediaType: "Video" + name: globalize.translate('HeaderVideos'), + mediaType: 'Video' }, { - name: globalize.translate("HeaderSeries"), - type: "Series" + name: globalize.translate('HeaderSeries'), + type: 'Series' }, { - name: globalize.translate("HeaderAlbums"), - type: "MusicAlbum" + name: globalize.translate('HeaderAlbums'), + type: 'MusicAlbum' }, { - name: globalize.translate("HeaderBooks"), - type: "Book" + name: globalize.translate('HeaderBooks'), + type: 'Book' }]; renderCollectionItems(page, item, collectionItemTypes, result.Items); } }); - if ("Season" == item.Type) { - page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderEpisodes"); - } else if ("Series" == item.Type) { - page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderSeasons"); - } else if ("MusicAlbum" == item.Type) { - page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderTracks"); + if ('Season' == item.Type) { + page.querySelector('#childrenTitle').innerHTML = globalize.translate('HeaderEpisodes'); + } else if ('Series' == item.Type) { + page.querySelector('#childrenTitle').innerHTML = globalize.translate('HeaderSeasons'); + } else if ('MusicAlbum' == item.Type) { + page.querySelector('#childrenTitle').innerHTML = globalize.translate('HeaderTracks'); } else { - page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderItems"); + page.querySelector('#childrenTitle').innerHTML = globalize.translate('HeaderItems'); } - if ("MusicAlbum" == item.Type || "Season" == item.Type) { - page.querySelector(".childrenSectionHeader").classList.add("hide"); - page.querySelector("#childrenCollapsible").classList.add("verticalSection-extrabottompadding"); + if ('MusicAlbum' == item.Type || 'Season' == item.Type) { + page.querySelector('.childrenSectionHeader').classList.add('hide'); + page.querySelector('#childrenCollapsible').classList.add('verticalSection-extrabottompadding'); } else { - page.querySelector(".childrenSectionHeader").classList.remove("hide"); + page.querySelector('.childrenSectionHeader').classList.remove('hide'); } } function renderItemsByName(page, item) { - require("scripts/itembynamedetailpage".split(","), function () { + require('scripts/itembynamedetailpage'.split(','), function () { window.ItemsByName.renderItems(page, item); }); } function renderPlaylistItems(page, item) { - require("scripts/playlistedit".split(","), function () { + require('scripts/playlistedit'.split(','), function () { PlaylistViewer.render(page, item); }); } function renderProgramsForChannel(page, result) { - var html = ""; + var html = ''; var currentItems = []; var currentStartDate = null; @@ -1584,13 +1584,13 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti if (!(currentStartDate && currentStartDate.toDateString() === itemStartDate.toDateString())) { if (currentItems.length) { - html += '
'; - html += '

' + datetime.toLocaleDateString(currentStartDate, { - weekday: "long", - month: "long", - day: "numeric" - }) + "

"; - html += '
' + listView.getListViewHtml({ + html += '
'; + html += '

' + datetime.toLocaleDateString(currentStartDate, { + weekday: 'long', + month: 'long', + day: 'numeric' + }) + '

'; + html += '
' + listView.getListViewHtml({ items: currentItems, enableUserDataButtons: false, showParentTitle: true, @@ -1598,7 +1598,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti showProgramTime: true, mediaInfo: false, parentTitleWithTitle: true - }) + "
"; + }) + '
'; } currentStartDate = itemStartDate; @@ -1609,13 +1609,13 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } if (currentItems.length) { - html += '
'; - html += '

' + datetime.toLocaleDateString(currentStartDate, { - weekday: "long", - month: "long", - day: "numeric" - }) + "

"; - html += '
' + listView.getListViewHtml({ + html += '
'; + html += '

' + datetime.toLocaleDateString(currentStartDate, { + weekday: 'long', + month: 'long', + day: 'numeric' + }) + '

'; + html += '
' + listView.getListViewHtml({ items: currentItems, enableUserDataButtons: false, showParentTitle: true, @@ -1623,20 +1623,20 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti showProgramTime: true, mediaInfo: false, parentTitleWithTitle: true - }) + "
"; + }) + '
'; } - page.querySelector(".programGuide").innerHTML = html; + page.querySelector('.programGuide').innerHTML = html; } function renderChannelGuide(page, apiClient, item) { - if ("TvChannel" === item.Type) { - page.querySelector(".programGuideSection").classList.remove("hide"); + if ('TvChannel' === item.Type) { + page.querySelector('.programGuideSection').classList.remove('hide'); apiClient.getLiveTvPrograms({ ChannelIds: item.Id, UserId: apiClient.getCurrentUserId(), HasAired: false, - SortBy: "StartDate", + SortBy: 'StartDate', EnableTotalRecordCount: false, EnableImages: false, ImageTypeLimit: 0, @@ -1652,7 +1652,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti apiClient.getLiveTvPrograms({ UserId: apiClient.getCurrentUserId(), HasAired: false, - SortBy: "StartDate", + SortBy: 'StartDate', EnableTotalRecordCount: false, EnableImages: false, ImageTypeLimit: 0, @@ -1661,12 +1661,12 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti LibrarySeriesId: item.Id }).then(function (result) { if (result.Items.length) { - page.querySelector("#seriesScheduleSection").classList.remove("hide"); + page.querySelector('#seriesScheduleSection').classList.remove('hide'); } else { - page.querySelector("#seriesScheduleSection").classList.add("hide"); + page.querySelector('#seriesScheduleSection').classList.add('hide'); } - page.querySelector("#seriesScheduleList").innerHTML = listView.getListViewHtml({ + page.querySelector('#seriesScheduleList').innerHTML = listView.getListViewHtml({ items: result.Items, enableUserDataButtons: false, showParentTitle: false, @@ -1675,27 +1675,27 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti mediaInfo: false, showTitle: true, moreButton: false, - action: "programdialog" + action: 'programdialog' }); loading.hide(); }); } function inferContext(item) { - if ("Movie" === item.Type || "BoxSet" === item.Type) { - return "movies"; + if ('Movie' === item.Type || 'BoxSet' === item.Type) { + return 'movies'; } - if ("Series" === item.Type || "Season" === item.Type || "Episode" === item.Type) { - return "tvshows"; + if ('Series' === item.Type || 'Season' === item.Type || 'Episode' === item.Type) { + return 'tvshows'; } - if ("MusicArtist" === item.Type || "MusicAlbum" === item.Type || "Audio" === item.Type || "AudioBook" === item.Type) { - return "music"; + if ('MusicArtist' === item.Type || 'MusicAlbum' === item.Type || 'Audio' === item.Type || 'AudioBook' === item.Type) { + return 'music'; } - if ("Program" === item.Type) { - return "livetv"; + if ('Program' === item.Type) { + return 'livetv'; } return null; @@ -1724,7 +1724,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } function renderCollectionItems(page, parentItem, types, items) { - page.querySelector(".collectionItems").innerHTML = ""; + page.querySelector('.collectionItems').innerHTML = ''; var i; var length; @@ -1738,7 +1738,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } var otherType = { - name: globalize.translate("HeaderOtherItems") + name: globalize.translate('HeaderOtherItems') }; var otherTypeItems = items.filter(function (curr) { return !types.filter(function (t) { @@ -1752,11 +1752,11 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti if (!items.length) { renderCollectionItemType(page, parentItem, { - name: globalize.translate("HeaderItems") + name: globalize.translate('HeaderItems') }, items); } - var containers = page.querySelectorAll(".collectionItemsContainer"); + var containers = page.querySelectorAll('.collectionItemsContainer'); var notifyRefreshNeeded = function () { renderChildren(page, parentItem); @@ -1768,33 +1768,33 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti // if nothing in the collection can be played hide play and shuffle buttons if (!canPlaySomeItemInCollection(items)) { - hideAll(page, "btnPlay", false); - hideAll(page, "btnShuffle", false); + hideAll(page, 'btnPlay', false); + hideAll(page, 'btnShuffle', false); } // HACK: Call autoFocuser again because btnPlay may be hidden, but focused by reloadFromItem // FIXME: Sometimes focus does not move until all (?) sections are loaded - require(["autoFocuser"], function (autoFocuser) { + require(['autoFocuser'], function (autoFocuser) { autoFocuser.autoFocus(page); }); } function renderCollectionItemType(page, parentItem, type, items) { - var html = ""; - html += '
'; - html += '
'; - html += '

'; - html += "" + type.name + ""; - html += "

"; - html += ''; - html += "
"; - html += '
'; - var shape = "MusicAlbum" == type.type ? getSquareShape(false) : getPortraitShape(false); + var html = ''; + html += '
'; + html += '
'; + html += '

'; + html += '' + type.name + ''; + html += '

'; + html += ''; + html += '
'; + html += '
'; + var shape = 'MusicAlbum' == type.type ? getSquareShape(false) : getPortraitShape(false); html += cardBuilder.getCardsHtml({ items: items, shape: shape, showTitle: true, - showYear: "Video" === type.mediaType || "Series" === type.type, + showYear: 'Video' === type.mediaType || 'Series' === type.type, centerText: true, lazy: true, showDetailsMenu: true, @@ -1803,16 +1803,16 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti showRemoveFromCollection: true, collectionId: parentItem.Id }); - html += "
"; - html += "
"; - var collectionItems = page.querySelector(".collectionItems"); - collectionItems.insertAdjacentHTML("beforeend", html); + html += '
'; + html += '
'; + var collectionItems = page.querySelector('.collectionItems'); + collectionItems.insertAdjacentHTML('beforeend', html); imageLoader.lazyChildren(collectionItems); - collectionItems.querySelector(".btnAddToCollection").addEventListener("click", function () { - require(["alert"], function (alert) { + collectionItems.querySelector('.btnAddToCollection').addEventListener('click', function () { + require(['alert'], function (alert) { alert({ - text: globalize.translate("AddItemToCollectionHelp"), - html: globalize.translate("AddItemToCollectionHelp") + '

' + globalize.translate("ButtonLearnMore") + "" + text: globalize.translate('AddItemToCollectionHelp'), + html: globalize.translate('AddItemToCollectionHelp') + '

' + globalize.translate('ButtonLearnMore') + '' }); }); }); @@ -1820,20 +1820,20 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti function renderMusicVideos(page, item, user) { connectionManager.getApiClient(item.ServerId).getItems(user.Id, { - SortBy: "SortName", - SortOrder: "Ascending", - IncludeItemTypes: "MusicVideo", + SortBy: 'SortName', + SortOrder: 'Ascending', + IncludeItemTypes: 'MusicVideo', Recursive: true, - Fields: "PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount", + Fields: 'PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount', AlbumIds: item.Id }).then(function (result) { if (result.Items.length) { - page.querySelector("#musicVideosCollapsible").classList.remove("hide"); - var musicVideosContent = page.querySelector(".musicVideosContent"); + page.querySelector('#musicVideosCollapsible').classList.remove('hide'); + var musicVideosContent = page.querySelector('.musicVideosContent'); musicVideosContent.innerHTML = getVideosHtml(result.Items, user); imageLoader.lazyChildren(musicVideosContent); } else { - page.querySelector("#musicVideosCollapsible").classList.add("hide"); + page.querySelector('#musicVideosCollapsible').classList.add('hide'); } }); } @@ -1841,12 +1841,12 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti function renderAdditionalParts(page, item, user) { connectionManager.getApiClient(item.ServerId).getAdditionalVideoParts(user.Id, item.Id).then(function (result) { if (result.Items.length) { - page.querySelector("#additionalPartsCollapsible").classList.remove("hide"); - var additionalPartsContent = page.querySelector("#additionalPartsContent"); + page.querySelector('#additionalPartsCollapsible').classList.remove('hide'); + var additionalPartsContent = page.querySelector('#additionalPartsContent'); additionalPartsContent.innerHTML = getVideosHtml(result.Items, user); imageLoader.lazyChildren(additionalPartsContent); } else { - page.querySelector("#additionalPartsCollapsible").classList.add("hide"); + page.querySelector('#additionalPartsCollapsible').classList.add('hide'); } }); } @@ -1855,34 +1855,34 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti var chapters = item.Chapters || []; if (chapters.length && !chapters[0].ImageTag && (chapters = []), chapters.length) { - page.querySelector("#scenesCollapsible").classList.remove("hide"); - var scenesContent = page.querySelector("#scenesContent"); + page.querySelector('#scenesCollapsible').classList.remove('hide'); + var scenesContent = page.querySelector('#scenesContent'); - require(["chaptercardbuilder"], function (chaptercardbuilder) { + require(['chaptercardbuilder'], function (chaptercardbuilder) { chaptercardbuilder.buildChapterCards(item, chapters, { itemsContainer: scenesContent, - backdropShape: "overflowBackdrop", - squareShape: "overflowSquare" + backdropShape: 'overflowBackdrop', + squareShape: 'overflowSquare' }); }); } else { - page.querySelector("#scenesCollapsible").classList.add("hide"); + page.querySelector('#scenesCollapsible').classList.add('hide'); } } function getVideosHtml(items, user, limit, moreButtonClass) { var html = cardBuilder.getCardsHtml({ items: items, - shape: "auto", + shape: 'auto', showTitle: true, - action: "play", + action: 'play', overlayText: false, centerText: true, showRuntime: true }); if (limit && items.length > limit) { - html += '

"; + html += '

'; } return html; @@ -1890,30 +1890,30 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti function renderSpecials(page, item, user, limit) { connectionManager.getApiClient(item.ServerId).getSpecialFeatures(user.Id, item.Id).then(function (specials) { - var specialsContent = page.querySelector("#specialsContent"); - specialsContent.innerHTML = getVideosHtml(specials, user, limit, "moreSpecials"); + var specialsContent = page.querySelector('#specialsContent'); + specialsContent.innerHTML = getVideosHtml(specials, user, limit, 'moreSpecials'); imageLoader.lazyChildren(specialsContent); }); } function renderCast(page, item) { var people = (item.People || []).filter(function (p) { - return "Director" !== p.Type; + return 'Director' !== p.Type; }); if (!people.length) { - return void page.querySelector("#castCollapsible").classList.add("hide"); + return void page.querySelector('#castCollapsible').classList.add('hide'); } - page.querySelector("#castCollapsible").classList.remove("hide"); - var castContent = page.querySelector("#castContent"); + page.querySelector('#castCollapsible').classList.remove('hide'); + var castContent = page.querySelector('#castContent'); - require(["peoplecardbuilder"], function (peoplecardbuilder) { + require(['peoplecardbuilder'], function (peoplecardbuilder) { peoplecardbuilder.buildPeopleCards(people, { itemsContainer: castContent, coverImage: true, serverId: item.ServerId, - shape: "overflowPortrait" + shape: 'overflowPortrait' }); }); } @@ -1955,12 +1955,12 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } function splitVersions(instance, page, apiClient, params) { - require(["confirm"], function (confirm) { - confirm("Are you sure you wish to split the media sources into separate items?", "Split Media Apart").then(function () { + require(['confirm'], function (confirm) { + confirm('Are you sure you wish to split the media sources into separate items?', 'Split Media Apart').then(function () { loading.show(); apiClient.ajax({ - type: "DELETE", - url: apiClient.getUrl("Videos/" + params.id + "/AlternateSources") + type: 'DELETE', + url: apiClient.getUrl('Videos/' + params.id + '/AlternateSources') }).then(function () { loading.hide(); reload(instance, page, params); @@ -1970,12 +1970,12 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } function getPlayOptions(startPosition) { - var audioStreamIndex = view.querySelector(".selectAudio").value || null; + var audioStreamIndex = view.querySelector('.selectAudio').value || null; return { startPositionTicks: startPosition, - mediaSourceId: view.querySelector(".selectSource").value, + mediaSourceId: view.querySelector('.selectSource').value, audioStreamIndex: audioStreamIndex, - subtitleStreamIndex: view.querySelector(".selectSubtitles").value + subtitleStreamIndex: view.querySelector('.selectSubtitles').value }; } @@ -1992,7 +1992,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti function playCurrentItem(button, mode) { var item = currentItem; - if ("Program" === item.Type) { + if ('Program' === item.Type) { var apiClient = connectionManager.getApiClient(item.ServerId); return void apiClient.getLiveTvChannel(item.ChannelId, apiClient.getCurrentUserId()).then(function (channel) { playbackManager.play({ @@ -2001,11 +2001,11 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti }); } - playItem(item, item.UserData && "resume" === mode ? item.UserData.PlaybackPositionTicks : 0); + playItem(item, item.UserData && 'resume' === mode ? item.UserData.PlaybackPositionTicks : 0); } function onPlayClick() { - playCurrentItem(this, this.getAttribute("data-mode")); + playCurrentItem(this, this.getAttribute('data-mode')); } function onInstantMixClick() { @@ -2017,7 +2017,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } function onDeleteClick() { - require(["deleteHelper"], function (deleteHelper) { + require(['deleteHelper'], function (deleteHelper) { deleteHelper.deleteItem({ item: currentItem, navigate: true @@ -2026,15 +2026,15 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } function onCancelSeriesTimerClick() { - require(["recordingHelper"], function (recordingHelper) { + require(['recordingHelper'], function (recordingHelper) { recordingHelper.cancelSeriesTimerWithConfirmation(currentItem.Id, currentItem.ServerId).then(function () { - Dashboard.navigate("livetv.html"); + Dashboard.navigate('livetv.html'); }); }); } function onCancelTimerClick() { - require(["recordingHelper"], function (recordingHelper) { + require(['recordingHelper'], function (recordingHelper) { recordingHelper.cancelTimer(connectionManager.getApiClient(currentItem.ServerId), currentItem.TimerId).then(function () { reload(self, view, params); }); @@ -2076,7 +2076,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti function editImages() { return new Promise(function (resolve, reject) { - require(["imageEditor"], function (imageEditor) { + require(['imageEditor'], function (imageEditor) { imageEditor.show({ itemId: currentItem.Id, serverId: currentItem.ServerId @@ -2088,7 +2088,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti function onWebSocketMessage(e, data) { var msg = data; - if ("UserDataChanged" === msg.MessageType && currentItem && msg.Data.UserId == apiClient.getCurrentUserId()) { + if ('UserDataChanged' === msg.MessageType && currentItem && msg.Data.UserId == apiClient.getCurrentUserId()) { var key = currentItem.UserData.Key; var userData = msg.Data.UserDataList.filter(function (u) { return u.Key == key; @@ -2105,46 +2105,46 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti var currentItem; var self = this; var apiClient = params.serverId ? connectionManager.getApiClient(params.serverId) : ApiClient; - view.querySelectorAll(".btnPlay"); - bindAll(view, ".btnPlay", "click", onPlayClick); - bindAll(view, ".btnResume", "click", onPlayClick); - bindAll(view, ".btnInstantMix", "click", onInstantMixClick); - bindAll(view, ".btnShuffle", "click", onShuffleClick); - bindAll(view, ".btnPlayTrailer", "click", onPlayTrailerClick); - bindAll(view, ".btnCancelSeriesTimer", "click", onCancelSeriesTimerClick); - bindAll(view, ".btnCancelTimer", "click", onCancelTimerClick); - bindAll(view, ".btnDeleteItem", "click", onDeleteClick); - bindAll(view, ".btnDownload", "click", onDownloadClick); - view.querySelector(".btnMoreCommands i").innerHTML = ""; - view.querySelector(".trackSelections").addEventListener("submit", onTrackSelectionsSubmit); - view.querySelector(".btnSplitVersions").addEventListener("click", function () { + view.querySelectorAll('.btnPlay'); + bindAll(view, '.btnPlay', 'click', onPlayClick); + bindAll(view, '.btnResume', 'click', onPlayClick); + bindAll(view, '.btnInstantMix', 'click', onInstantMixClick); + bindAll(view, '.btnShuffle', 'click', onShuffleClick); + bindAll(view, '.btnPlayTrailer', 'click', onPlayTrailerClick); + bindAll(view, '.btnCancelSeriesTimer', 'click', onCancelSeriesTimerClick); + bindAll(view, '.btnCancelTimer', 'click', onCancelTimerClick); + bindAll(view, '.btnDeleteItem', 'click', onDeleteClick); + bindAll(view, '.btnDownload', 'click', onDownloadClick); + view.querySelector('.btnMoreCommands i').innerHTML = ''; + view.querySelector('.trackSelections').addEventListener('submit', onTrackSelectionsSubmit); + view.querySelector('.btnSplitVersions').addEventListener('click', function () { splitVersions(self, view, apiClient, params); }); - bindAll(view, ".btnMoreCommands", "click", onMoreCommandsClick); - view.querySelector(".selectSource").addEventListener("change", function () { + bindAll(view, '.btnMoreCommands', 'click', onMoreCommandsClick); + view.querySelector('.selectSource').addEventListener('change', function () { renderVideoSelections(view, self._currentPlaybackMediaSources); renderAudioSelections(view, self._currentPlaybackMediaSources); renderSubtitleSelections(view, self._currentPlaybackMediaSources); }); - view.addEventListener("click", function (e) { - if (dom.parentWithClass(e.target, "moreScenes")) { + view.addEventListener('click', function (e) { + if (dom.parentWithClass(e.target, 'moreScenes')) { renderScenes(view, currentItem); - } else if (dom.parentWithClass(e.target, "morePeople")) { + } else if (dom.parentWithClass(e.target, 'morePeople')) { renderCast(view, currentItem); - } else if (dom.parentWithClass(e.target, "moreSpecials")) { + } else if (dom.parentWithClass(e.target, 'moreSpecials')) { apiClient.getCurrentUser().then(function (user) { renderSpecials(view, currentItem, user); }); } }); - view.querySelector(".detailImageContainer").addEventListener("click", function (e) { - if (dom.parentWithClass(e.target, "itemDetailGalleryLink")) { + view.querySelector('.detailImageContainer').addEventListener('click', function (e) { + if (dom.parentWithClass(e.target, 'itemDetailGalleryLink')) { editImages().then(function () { reload(self, view, params); }); } }); - view.addEventListener("viewshow", function (e) { + view.addEventListener('viewshow', function (e) { var page = this; if (layoutManager.mobile) { @@ -2160,15 +2160,15 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti reload(self, page, params); } - events.on(apiClient, "message", onWebSocketMessage); - events.on(playbackManager, "playerchange", onPlayerChange); + events.on(apiClient, 'message', onWebSocketMessage); + events.on(playbackManager, 'playerchange', onPlayerChange); }); - view.addEventListener("viewbeforehide", function () { - events.off(apiClient, "message", onWebSocketMessage); - events.off(playbackManager, "playerchange", onPlayerChange); + view.addEventListener('viewbeforehide', function () { + events.off(apiClient, 'message', onWebSocketMessage); + events.off(playbackManager, 'playerchange', onPlayerChange); libraryMenu.setTransparentMenu(false); }); - view.addEventListener("viewdestroy", function () { + view.addEventListener('viewdestroy', function () { currentItem = null; self._currentPlaybackMediaSources = null; self.currentRecordingFields = null; From 1e1419b45b9e014c1f0543bb4ae67a14d98bd162 Mon Sep 17 00:00:00 2001 From: DesertCookie Date: Wed, 20 May 2020 14:47:18 +0200 Subject: [PATCH 007/267] Restart with fresh file Readded sorting logic into a fresh copy of `itemdetailpage.js`. --- src/controllers/itemdetailpage.js | 176 +++++++++++++----------------- 1 file changed, 76 insertions(+), 100 deletions(-) diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index 9b488221baf..ba13758ec04 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -62,7 +62,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti function getProgramScheduleHtml(items) { var html = ''; - html += '
'; + html += '
'; html += listView.getListViewHtml({ items: items, enableUserDataButtons: false, @@ -150,7 +150,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti var resolutionNames = []; var sourceNames = []; mediaSources.forEach(function (v) { - if (v.Name.endsWith('p')) { + if (v.Name.endsWith('p') || v.Name.endsWith('i')) { resolutionNames.push(v); } else { sourceNames.push(v); @@ -172,11 +172,11 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti mediaSources = []; resolutionNames.forEach(v => mediaSources.push(v)); sourceNames.forEach(v => mediaSources.push(v)); - + var selectedId = mediaSources[0].Id; select.innerHTML = mediaSources.map(function (v) { var selected = v.Id === selectedId ? ' selected' : ''; - return ''; + return ''; }).join(''); if (mediaSources.length > 1) { @@ -217,7 +217,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti titleParts.push(v.Codec.toUpperCase()); } - return ''; + return ''; }).join(''); select.setAttribute('disabled', 'disabled'); @@ -241,7 +241,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti var selectedId = mediaSource.DefaultAudioStreamIndex; select.innerHTML = tracks.map(function (v) { var selected = v.Index === selectedId ? ' selected' : ''; - return ''; + return ''; }).join(''); if (tracks.length > 1) { @@ -271,9 +271,9 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti if (tracks.length) { var selected = -1 === selectedId ? ' selected' : ''; - select.innerHTML = '' + tracks.map(function (v) { + select.innerHTML = '' + tracks.map(function (v) { selected = v.Index === selectedId ? ' selected' : ''; - return ''; + return ''; }).join(''); page.querySelector('.selectSubtitlesContainer').classList.remove('hide'); } else { @@ -358,7 +358,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti itemType: 'MusicArtist', serverId: serverId }); - html.push('' + artist.Name + ''); + html.push('' + artist.Name + ''); } return html = html.join(' / '); @@ -384,7 +384,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti }, { context: context }); - parentNameHtml.push('' + item.SeriesName + ''); + parentNameHtml.push('' + item.SeriesName + ''); } else if (item.IsSeries || item.EpisodeTitle) { parentNameHtml.push(item.Name); } @@ -399,7 +399,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti }, { context: context }); - parentNameHtml.push('' + item.SeriesName + ''); + parentNameHtml.push('' + item.SeriesName + ''); } else if (null != item.ParentIndexNumber && 'Episode' === item.Type) { parentRoute = appRouter.getRouteUrl({ Id: item.SeasonId, @@ -410,7 +410,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti }, { context: context }); - parentNameHtml.push('' + item.SeasonName + ''); + parentNameHtml.push('' + item.SeasonName + ''); } else if (null != item.ParentIndexNumber && item.IsSeries) { parentNameHtml.push(item.SeasonName || 'S' + item.ParentIndexNumber); } else if (item.Album && item.AlbumId && ('MusicVideo' === item.Type || 'Audio' === item.Type)) { @@ -423,7 +423,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti }, { context: context }); - parentNameHtml.push('' + item.Album + ''); + parentNameHtml.push('' + item.Album + ''); } else if (item.Album) { parentNameHtml.push(item.Album); } @@ -436,15 +436,15 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti if (parentNameLast) { // Music if (layoutManager.mobile) { - html = '

' + parentNameHtml.join('
') + '

'; + html = '

' + parentNameHtml.join('
') + '

'; } else { - html = '

' + parentNameHtml.join(' - ') + '

'; + html = '

' + parentNameHtml.join(' - ') + '

'; } } else { if (layoutManager.mobile) { - html = '

' + parentNameHtml.join('
') + '

'; + html = '

' + parentNameHtml.join('
') + '

'; } else { - html = '

' + tvShowHtml + '

'; + html = '

' + tvShowHtml + '

'; } } } @@ -456,16 +456,16 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti if (html && !parentNameLast) { if (!layoutManager.mobile && tvSeasonHtml) { - html += '

' + tvSeasonHtml + ' - ' + name + '

'; + html += '

' + tvSeasonHtml + ' - ' + name + '

'; } else { - html += '

' + name + '

'; + html += '

' + name + '

'; } } else { - html = '

' + name + '

' + html; + html = '

' + name + '

' + html; } if (item.OriginalTitle && item.OriginalTitle != item.Name) { - html += '

' + item.OriginalTitle + '

'; + html += '

' + item.OriginalTitle + '

'; } container.innerHTML = html; @@ -514,7 +514,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti tag: item.ImageTags.Thumb }); page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl, false); + imageLoader.lazyImage(itemBackdropElement, imgUrl); hasbackdrop = true; } else if (usePrimaryImage && item.ImageTags && item.ImageTags.Primary) { imgUrl = apiClient.getScaledImageUrl(item.Id, { @@ -524,7 +524,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti tag: item.ImageTags.Primary }); page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl, false); + imageLoader.lazyImage(itemBackdropElement, imgUrl); hasbackdrop = true; } else if (item.BackdropImageTags && item.BackdropImageTags.length) { imgUrl = apiClient.getScaledImageUrl(item.Id, { @@ -534,7 +534,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti tag: item.BackdropImageTags[0] }); page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl, false); + imageLoader.lazyImage(itemBackdropElement, imgUrl); hasbackdrop = true; } else if (item.ParentBackdropItemId && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) { imgUrl = apiClient.getScaledImageUrl(item.ParentBackdropItemId, { @@ -544,7 +544,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti tag: item.ParentBackdropImageTags[0] }); page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl, false); + imageLoader.lazyImage(itemBackdropElement, imgUrl); hasbackdrop = true; } else if (item.ImageTags && item.ImageTags.Thumb) { imgUrl = apiClient.getScaledImageUrl(item.Id, { @@ -554,7 +554,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti tag: item.ImageTags.Thumb }); page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl, false); + imageLoader.lazyImage(itemBackdropElement, imgUrl); hasbackdrop = true; } else { itemBackdropElement.style.backgroundImage = ''; @@ -581,7 +581,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti renderTimerEditor(page, item, apiClient, user); renderImage(page, item, apiClient, user); renderLogo(page, item, apiClient); - setTitle(item, apiClient); + Emby.Page.setTitle(''); setInitialCollapsibleState(page, item, apiClient, context, user); renderDetails(page, item, apiClient, context); renderTrackSelections(page, instance, item); @@ -632,7 +632,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti try { var birthday = datetime.parseISO8601Date(item.PremiereDate, true).toDateString(); itemBirthday.classList.remove('hide'); - itemBirthday.innerHTML = globalize.translate('BirthDateValue').replace('{0}', birthday); + itemBirthday.innerHTML = globalize.translate('BirthDateValue', birthday); } catch (err) { itemBirthday.classList.add('hide'); } @@ -646,7 +646,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti try { var deathday = datetime.parseISO8601Date(item.EndDate, true).toDateString(); itemDeathDate.classList.remove('hide'); - itemDeathDate.innerHTML = globalize.translate('DeathDateValue').replace('{0}', deathday); + itemDeathDate.innerHTML = globalize.translate('DeathDateValue', deathday); } catch (err) { itemDeathDate.classList.add('hide'); } @@ -657,9 +657,9 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti var itemBirthLocation = page.querySelector('#itemBirthLocation'); if ('Person' == item.Type && item.ProductionLocations && item.ProductionLocations.length) { - var gmap = '' + item.ProductionLocations[0] + ''; + var gmap = '' + item.ProductionLocations[0] + ''; itemBirthLocation.classList.remove('hide'); - itemBirthLocation.innerHTML = globalize.translate('BirthPlaceValue').replace('{0}', gmap); + itemBirthLocation.innerHTML = globalize.translate('BirthPlaceValue', gmap); } else { itemBirthLocation.classList.add('hide'); } @@ -693,19 +693,6 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti return null; } - function setTitle(item, apiClient) { - var url = logoImageUrl(item, apiClient, {}); - - if (url != null) { - var pageTitle = document.querySelector('.pageTitle'); - pageTitle.style.backgroundImage = 'url('' + url + '')'; - pageTitle.classList.add('pageTitleWithLogo'); - pageTitle.innerHTML = ''; - } else { - Emby.Page.setTitle(''); - } - } - function renderLogo(page, item, apiClient) { var url = logoImageUrl(item, apiClient, { maxWidth: 400 @@ -744,40 +731,23 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } } - function renderUserInfo(page, item) { - var lastPlayedElement = page.querySelector('.itemLastPlayed'); - - if (item.UserData && item.UserData.LastPlayedDate) { - lastPlayedElement.classList.remove('hide'); - var datePlayed = datetime.parseISO8601Date(item.UserData.LastPlayedDate); - lastPlayedElement.innerHTML = globalize.translate('DatePlayed') + ': ' + datetime.toLocaleDateString(datePlayed) + ' ' + datetime.getDisplayTime(datePlayed); - } else { - lastPlayedElement.classList.add('hide'); - } - } - function renderLinks(linksElem, item) { var html = []; - if (item.DateCreated && itemHelper.enableDateAddedDisplay(item)) { - var dateCreated = datetime.parseISO8601Date(item.DateCreated); - html.push(globalize.translate('AddedOnValue', datetime.toLocaleDateString(dateCreated) + ' ' + datetime.getDisplayTime(dateCreated))); - } - var links = []; if (!layoutManager.tv && item.HomePageUrl) { - links.push('' + globalize.translate('ButtonWebsite') + ''); + links.push('' + globalize.translate('ButtonWebsite') + ''); } if (item.ExternalUrls) { for (var i = 0, length = item.ExternalUrls.length; i < length; i++) { var url = item.ExternalUrls[i]; - links.push('' + url.Name + ''); + links.push('' + url.Name + ''); } } if (links.length) { - html.push(globalize.translate('LinksValue', links.join(', '))); + html.push(links.join(', ')); } linksElem.innerHTML = html.join(', '); @@ -860,15 +830,15 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } if (editable && url === undefined) { - html += ''; + html += ""; } else if (!editable && url === undefined) { - html += '