From 2d1f064608965844a81a7ecdf91428669578fe14 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 1 Sep 2023 16:30:57 +0200 Subject: [PATCH] kvaliti optans bro finally --- item/item.html | 2 +- item/item.js | 4654 +++++++++++++++++++++++++++- modules/cardbuilder/card.css | 1322 +++++++- modules/cardbuilder/cardbuilder.js | 2317 +++++++++++++- modules/flvjs/core/media-info.js | 111 +- modules/mediainfo/mediainfo.js | 791 ++++- 6 files changed, 9191 insertions(+), 6 deletions(-) diff --git a/item/item.html b/item/item.html index a8e6409..aef2563 100644 --- a/item/item.html +++ b/item/item.html @@ -342,7 +342,7 @@ -
+

${HeaderMediaInfo}

diff --git a/item/item.js b/item/item.js index d3f778b..541af68 100644 --- a/item/item.js +++ b/item/item.js @@ -1 +1,4653 @@ -define(["exports","./../modules/loading/loading.js","./../modules/emby-apiclient/connectionmanager.js","./../modules/emby-apiclient/apiclient.js","./../modules/emby-apiclient/events.js","./../modules/common/globalize.js","./../modules/common/playback/playbackmanager.js","./../modules/appheader/appheader.js","./../modules/backdrop/backdrop.js","./../modules/common/itemhelper.js","./../modules/common/dataformatter.js","./../modules/common/itemmanager/itemmanager.js","./../modules/layoutmanager.js","./../modules/common/usersettings/usersettings.js","./../modules/viewmanager/baseview.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/emby-elements/emby-tabs/emby-tabs.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/sync/emby-downloadbutton.js","./../modules/emby-elements/emby-select/emby-select.js","./../modules/listview/listview.js","./../modules/cardbuilder/cardbuilder.js","./../modules/itemcontextmenu.js","./../modules/indicators/indicators.js","./../modules/navdrawer/navdrawer.js","./../modules/common/textencoding.js","./../modules/dom.js","./../modules/approuter.js","./../modules/common/datetime.js","./../modules/mediainfo/mediainfo.js","./../modules/common/servicelocator.js","./../modules/focusmanager.js","./../modules/imageloader/imageloader.js","./../modules/multiselect/multiselect.js","./../modules/skinmanager.js","./../modules/common/input/api.js"],function(_exports,_loading,_connectionmanager,_apiclient,_events,_globalize,_playbackmanager,_appheader,_backdrop,_itemhelper,_dataformatter,_itemmanager,_layoutmanager,_usersettings,_baseview,_embyScroller,_embyTabs,_embyItemscontainer,_embyButton,_embyDownloadbutton,_embySelect,_listview,_cardbuilder,_itemcontextmenu,_indicators,_navdrawer,_textencoding,_dom,_approuter,_datetime,_mediainfo,_servicelocator,_focusmanager,_imageloader,_multiselect,_skinmanager,_api){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,require(["flexStyles","css!item/item.css"]);var backdropContainer=document.querySelector(".backdropContainer"),backgroundContainer=document.querySelector(".backgroundContainer"),skinHeader=document.querySelector(".skinHeader"),decodingAttribute=_dom.default.supportsAsyncDecodedImages()?' decoding="async"':"";function renderTrackSelectionsWithoutUser(page,instance,item,forceReload){_connectionmanager.default.getApiClient(item.ServerId).getCurrentUser().then(function(user){renderTrackSelections(page,instance,item,user,forceReload)})}function isMediaStreamDisplayed(stream){return"Data"!==stream.Type&&"Attachment"!==stream.Type}function renderMediaSources(page,renderAdminFields,item,mediaSources){for(var groupedVersions=mediaSources.filter(function(g){return"Grouping"===g.Type}),parentElem=(renderAdminFields&&groupedVersions.length?page.querySelector(".splitVersionContainer").classList.remove("hide"):page.querySelector(".splitVersionContainer").classList.add("hide"),page.querySelector(".mediaSources")),anyDisplayed=!1,i=(parentElem.innerHTML="",0),length=mediaSources.length;i':'
',mediaSource.Path&&"Http"!==mediaSource.Protocol&&renderAdminFields&&(html+="
"+mediaSource.Path+"
"),html+='
',mediaSource.Container&&(html+=mediaSource.Container.toUpperCase()),mediaSource.Size&&(html+=''+_dataformatter.default.sizeToString(mediaSource.Size)+""),new Date(Date.parse(item.DateCreated))),renderAdminFields=(html+=''+_globalize.default.translate("AddedOnValue",_datetime.default.toLocaleDateString(renderAdminFields)+" "+_datetime.default.getDisplayTime(renderAdminFields))+"",elem.innerHTML=html=(html=html+"
"+"
")&&'
'+html+"
",elem.insertAdjacentHTML("beforeend",scrollX?'
':'
'),parentElem.appendChild(elem),mediaSource.MediaStreams.filter(isMediaStreamDisplayed).map(function(s){return _itemhelper.default.normalizeMediaStreamForDisplay(item,mediaSource,s)}));scrollX?_cardbuilder.default.buildCards(renderAdminFields,{shape:"backdrop",overlayText:!0,fields:["MediaStreamInfo"],itemsContainer:elem.querySelector(".itemsContainer"),action:"none",multiSelect:!1,ratingButton:!1,playedButton:!1,defaultIcon:!1,typeIndicator:!1,playedIndicator:!1,syncIndicator:!1,timerIndicator:!1,randomDefaultBackground:!1,imageFallback:!1,cardPadderClass:_layoutmanager.default.tv?"mediaStreamPadder-tv":"mediaStreamPadder",innerCardFooterClass:"mediaStreamInnerCardFooter",enableUserData:!1,draggable:!1,enableFocusScaling:!1}):_listview.default.buildItems(renderAdminFields,{image:!1,fields:["MediaStreamInfo"],itemsContainer:elem.querySelector(".itemsContainer"),action:"none",multiSelect:!1,ratingButton:!1,playedButton:!1,defaultIcon:!1,typeIndicator:!1,playedIndicator:!1,syncIndicator:!1,timerIndicator:!1,randomDefaultBackground:!1,imageFallback:!1,innerCardFooterClass:"mediaStreamInnerCardFooter",enableUserDataButtons:!1,draggable:!1,itemClass:"detailsListItem"})}(parentElem,renderAdminFields,item,mediaSource,!0))}anyDisplayed&&_usersettings.default.showFullMediaInfoOnDetailScreen()?page.querySelector(".audioVideoMediaInfo").classList.remove("hide"):page.querySelector(".audioVideoMediaInfo").classList.add("hide")}function isRenderingTrackSelections(item){return!(!_itemhelper.default.supportsMediaSourceSelection(item)||-1===_playbackmanager.default.getSupportedCommands().indexOf("PlayMediaSource")||!_playbackmanager.default.canPlay(item))}function renderTrackSelections(page,instance,item,user,forceReload,mediaSources){var select=page.querySelector(".selectSource"),apiClient=_connectionmanager.default.getApiClient(item);isRenderingTrackSelections(item)?(mediaSources?Promise.resolve(mediaSources):_playbackmanager.default.getPlaybackMediaSources(item)).then(function(mediaSources){var renderAdminFields=user.Policy.IsAdministrator,renderAdminFields=(renderMediaSources(page,renderAdminFields,item,mediaSources),instance._currentPlaybackMediaSources=mediaSources,instance.trackSelectionsContainer.classList.remove("hide"),select.value),selectedId=mediaSources[0].Id;select.innerHTML=mediaSources.map(function(v){var selected=v.Id===selectedId?" selected":"";return'"}).join(""),1"+_textencoding.default.htmlEncode(v.DisplayTitle||titleParts.join(" "))+""}).join(""),select.setAttribute("disabled","disabled"),mediaSources.length?page.querySelector(".selectVideoContainer").classList.remove("hide"):page.querySelector(".selectVideoContainer").classList.add("hide")}function renderAudioSelections(page,mediaSources){var mediaSourceId=page.querySelector(".selectSource").value,mediaSources=mediaSources.filter(function(m){return m.Id===mediaSourceId})[0],tracks=mediaSources.MediaStreams.filter(function(m){return"Audio"===m.Type}),select=page.querySelector(".selectAudio"),selectedId=mediaSources.DefaultAudioStreamIndex;select.innerHTML=tracks.map(function(v){var selected=v.Index===selectedId?" selected":"",embeddedTitle=v.Title&&!(v.DisplayTitle||"").includes(v.Title)?v.Title:null;return""+_textencoding.default.htmlEncode(v.DisplayTitle)+""}).join(""),1"+tracks.map(function(v){selected=v.Index===selectedId?" selected":"";var embeddedTitle=v.Title&&!(v.DisplayTitle||"").includes(v.Title)?v.Title:null;return""+_textencoding.default.htmlEncode(v.DisplayTitle)+""}).join(""),select.classList.remove("noSelections"),page.querySelector(".selectSubtitlesContainer").classList.remove("hide")):(select.innerHTML="",select.classList.add("noSelections"),page.querySelector(".selectSubtitlesContainer").classList.add("hide"))}function setButtonText(page,query,html){for(var elems=page.querySelectorAll(query),i=0,length=elems.length;i'+_globalize.default.translate("TimeRemainingValue",_datetime.default.getHumanReadableRuntime(ticksLeft))+"
",resumeInfoElement.innerHTML=_indicators.default.getProgressBarHtml(item,{containerClass:"resumeInfoProgressBar",animated:!0})+ticksLeft,resumeInfoElement.classList.remove("hide")):resumeInfoElement.classList.add("hide")}function reloadPlayButtons(instance,page,item,isUserDataChangeEvent){var now,activeElement,isPlayFocused,btnPlay,btnResume,btnPlayTrailer,btnShuffle,playButtons=page.querySelectorAll(".btnPlay");"Program"===item.Type?((now=new Date)>=new Date(Date.parse(item.StartDate))&&now'+_textencoding.default.htmlEncode(artist.Name)+"")}return html=html.join(" / ")}function inferContext(item){switch(item.Type){case"Series":case"Season":case"Episode":return"tvshows";case"Movie":return"movies";case"Game":case"GameSystem":return"games";case"MusicArtist":case"MusicAlbum":case"Audio":case"AudioBook":case"MusicVideo":return"music";case"Program":case"TvChannel":case"Timer":case"SeriesTimer":return"livetv";default:return null}}function renderName(instance,item,apiClient,user,containers){var parentRoute,itemForTitle="Timer"===item.Type&&item.ProgramInfo||item,context=inferContext(itemForTitle),parentNameHtml=[],parentNameLast=!1,hasFocusableButton=!1,fontSize=parseFloat(window.getComputedStyle(document.body,null).getPropertyValue("font-size")),fontSize=Math.round(2*fontSize*2.4)+Math.round(.2*fontSize),apiClient="title"!==getLogoPlacement(itemForTitle)?null:function(item,apiClient,options){options=options||{};var logoTypes=_skinmanager.default.getPreferredLogoImageTypes();return apiClient.getLogoImageUrl(item,options,logoTypes)}(itemForTitle,apiClient,{maxHeight:Math.max(fontSize,260)}),fontSize="itemLogoAsTitle",itemNamePrimaryClass=(_layoutmanager.default.tv&&(fontSize+=" itemLogoAsTitle-tv"),"itemName-primary"),itemPrimaryNameContainerClass="itemPrimaryNameContainer",html=(itemForTitle.AlbumArtists&&itemForTitle.AlbumArtists.length?(parentNameHtml.push(getArtistLinksHtml(itemForTitle.AlbumArtists,itemForTitle.ServerId)),parentNameLast=!0):itemForTitle.ArtistItems&&itemForTitle.ArtistItems.length&&"MusicVideo"===itemForTitle.Type?(parentNameHtml.push(getArtistLinksHtml(itemForTitle.ArtistItems,itemForTitle.ServerId)),parentNameLast=!0):itemForTitle.SeriesName&&itemForTitle.SeriesId?(parentRoute=_approuter.default.getRouteUrl({Id:itemForTitle.SeriesId,Name:itemForTitle.SeriesName,Type:"Series",IsFolder:!0,ServerId:itemForTitle.ServerId},{context:context}),seriesName=_textencoding.default.htmlEncode(itemForTitle.SeriesName),apiClient?(itemNamePrimaryClass+=" itemName-primary-logo",_layoutmanager.default.tv&&(itemNamePrimaryClass+=" itemName-primary-logo-tv"),itemPrimaryNameContainerClass+=" itemPrimaryNameContainer-logo",_layoutmanager.default.tv?tabIndex=' tabindex="-1"':hasFocusableButton=!(tabIndex=""),parentNameHtml.push("'+(seriesName=''+seriesName+'')+"")):(hasFocusableButton=!0,parentNameHtml.push(''+seriesName+""))):itemForTitle.SeriesName?parentNameHtml.push(_textencoding.default.htmlEncode(itemForTitle.SeriesName)):(itemForTitle.IsSeries||itemForTitle.EpisodeTitle)&&parentNameHtml.push(_textencoding.default.htmlEncode(itemForTitle.Name)),itemForTitle.Album&&itemForTitle.AlbumId&&("MusicVideo"===itemForTitle.Type||"Audio"===itemForTitle.Type)?(parentRoute=_approuter.default.getRouteUrl({Id:itemForTitle.AlbumId,Name:itemForTitle.Album,Type:"MusicAlbum",IsFolder:!0,ServerId:itemForTitle.ServerId},{context:context}),hasFocusableButton=!0,parentNameHtml.push(''+_textencoding.default.htmlEncode(itemForTitle.Album)+"")):itemForTitle.Album&&parentNameHtml.push(_textencoding.default.htmlEncode(itemForTitle.Album)),""),tabIndex="";_layoutmanager.default.tv||(_itemmanager.default.canEdit(item,user)&&(hasFocusableButton=!0,tabIndex+=''),_itemmanager.default.canEditImages(item,user)&&(hasFocusableButton=!0,tabIndex+='')),enableItemBackdropAsTopImage(itemForTitle)||(itemPrimaryNameContainerClass+=" itemPrimaryNameContainer-centered"),parentNameHtml.length&&(html=parentNameLast?'

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

":'

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

");var seriesName=(seriesName=_itemmanager.default.getDisplayName(itemForTitle,{includeParentInfo:!0}))&&_textencoding.default.htmlEncode(seriesName);html&&seriesName&&!parentNameLast?html+='

'+seriesName+"

"+tabIndex+"
":html=(parentNameLast||apiClient&&(seriesName=''+seriesName+'',itemNamePrimaryClass+=" itemName-primary-logo",itemPrimaryNameContainerClass+=" itemPrimaryNameContainer-logo",_layoutmanager.default.tv)&&(itemNamePrimaryClass+=" itemName-primary-logo-tv"),'

'+seriesName+"

"+tabIndex+"
"+html);for(var i=0,length=containers.length;i"+_textencoding.default.htmlEncode(p.Name)+"":''+_textencoding.default.htmlEncode(p.Name)+""}).join(", "),elem=view.querySelector(".directors");elem.innerHTML=1'+_textencoding.default.htmlEncode(tags[i].Name)+"")}itemTags.innerHTML=tagElements.join(""),tagElements.length?page.querySelector(".tagsSection").classList.remove("hide"):page.querySelector(".tagsSection").classList.add("hide")}(view,item),Promise.all(promises)}function onRecordingChanged(){reloadItem(this,!0)}function renderPeopleItems(view,item,apiClient){view=view.querySelector(".peopleItems");if("Person"!==item.Type&&"MusicArtist"!==item.Type)view.classList.add("hide");else{view.classList.remove("hide");for(var sections=[],sectionElems=("Person"===item.Type?(sections.push({name:_globalize.default.translate("HeaderUpcomingOnTV"),type:"Program"}),sections.push({name:_globalize.default.translate("Movies"),type:"Movie"}),sections.push({name:_globalize.default.translate("Shows"),type:"Series"}),sections.push({name:_globalize.default.translate("Episodes"),type:"Episode"}),sections.push({name:_globalize.default.translate("Trailers"),type:"Trailer"}),sections.push({name:_globalize.default.translate("HeaderMusicVideos"),type:"MusicVideo"}),sections.push({name:_globalize.default.translate("Videos"),type:"Video"})):"MusicArtist"===item.Type&§ions.push({name:_globalize.default.translate("HeaderMusicVideos"),type:"MusicVideo"}),view.innerHTML=sections.map(function(section){var html="";return(html+='
')+'"+'
'+'
'+"
"+"
"+"
"}).join(""),view.querySelectorAll(".personSection")),i=0,length=sectionElems.length;i
'+items.map(function(item){var tabClass="emby-button emby-tab-button secondaryText detailSeasonTab",tabClass=(_layoutmanager.default.tv&&(tabClass+=" emby-button-tv"),'");return index++,tabClass}).join("")+"
",seasonTabsParent.innerHTML=items,seasonTabsParent.classList.remove("hide")):(seasonTabsParent.classList.add("hide"),seasonTabsParent.innerHTML="")}(hasMultipleSeasons,result.Items),instance.seasonTabs=section.querySelector(".seasonTabs-emby-tabs"),instance.seasonTabs.addEventListener("tabchange",function(e){var id,seasonTabs=this.seasonTabs;seasonTabs&&(e=e.detail.selectedTabIndex,seasonTabs=seasonTabs.querySelector('.detailSeasonTab[data-index="'+e+'"]'))&&(id=seasonTabs.getAttribute("data-id"),e=(this.seasonItems||[]).filter(function(s){return s.Id===id})[0])&&scrollEpisodesToSeason(this,e.Id)}.bind(instance))):(hasMultipleSeasons.classList.add("hide"),hasMultipleSeasons.innerHTML="",instance.seasonTabs=null)):(hasMultipleSeasons.innerHTML="",hasMultipleSeasons.classList.add("hide"),instance.seasonTabs=null),(instance.detailSelectSeason=sectionTitleElement)&&(sectionTitleElement.getItems=getSeasons.bind(instance),sectionTitleElement.addEventListener("change",function(e){e=e.target.value;e&&scrollEpisodesToSeason(this,e)}.bind(instance))),itemsContainer.fetchData=function(query){var item=this.currentItem,apiClient=_connectionmanager.default.getApiClient(item),fields=this.getRequestedItemFields()+",PrimaryImageAspectRatio";if(this.renderAllEpisodes)return fields+=",Overview,PremiereDate,ProductionYear,RunTimeTicks,SpecialEpisodeNumbers",query=Object.assign({UserId:apiClient.getCurrentUserId(),Fields:fields,Recursive:!0,IsFolder:!1,ParentId:item.Id},query),apiClient.isMinServerVersion("4.8")||(query.IncludeItemTypes="Episode"),apiClient.getItems(apiClient.getCurrentUserId(),query);return apiClient.getSeasons(item.Id,Object.assign({UserId:apiClient.getCurrentUserId(),Fields:fields},query))}.bind(instance),itemsContainer.getListOptions=function(items){var fields=["Name"],centerText=!0;this.renderAllEpisodes&&(fields.push("Overview"),fields.push("MediaInfo"),centerText=!1);return{renderer:_cardbuilder.default,options:{shape:"auto",scalable:!0,centerText:centerText,fields:fields,overlayText:!1,focusTransformTitleAdjust:!0},virtualScrollLayout:"horizontal-grid"}}.bind(instance),seriesDisplay&&(itemsContainer.afterRefresh=function(totalResult){if(totalResult.Items.length){var item=this.currentItem;if(item){var view=this.view;if(view){var apiClient,instance=this,itemsContainer=view.querySelector(".childrenItemsContainer");if(itemsContainer)return apiClient=_connectionmanager.default.getApiClient(item),getNextUpItems.call(this,{Limit:1}).then(function(nextUpResult){var nextUpResult=nextUpResult.Items[0],detailSelectSeason=view.querySelector(".detailSelectSeason");if(nextUpResult){onSeriesEpisodeFocusedOrScrolled(instance,nextUpResult);var select,index=itemsContainer.indexOfItemId(nextUpResult.Id);if(-1===index)return nextUpResult={UserId:apiClient.getCurrentUserId(),Limit:0,StartItemId:nextUpResult.Id},apiClient.getEpisodes(item.SeriesId||item.Id,nextUpResult).then(function(result){index=Math.max(totalResult.TotalRecordCount-result.TotalRecordCount,0),itemsContainer.scrollToIndex(Math.min(index,totalResult.TotalRecordCount-1),{behavior:"instant",offset:"-padding-inline-start"},!1)});itemsContainer.scrollToIndex(index,{behavior:"instant",offset:"-padding-inline-start"},!1)}else itemsContainer.scrollToIndex(0,{behavior:"instant",offset:"-padding-inline-start"},!1),detailSelectSeason&&(select=detailSelectSeason).getItems({StartIndex:0,Limit:1}).then(function(result){result.Items.length&&select.setValues([result.Items[0].Id],!1,[result.Items[0]])})})}}}}.bind(instance),(detailSelectSeasonContainer=instance.view.querySelector(".childrenItemsScroller")).addScrollEventListener(function(e){var scrollSize,padding;_layoutmanager.default.tv||(e=e.currentTarget,padding=e.getPadding(),padding=e.getScrollLeft()+padding.inlineStart+padding.inlineEnd,scrollSize=e.getScrollWidth(),padding=Math.min(1,padding/scrollSize),scrollSize=e.querySelector(".childrenItemsContainer"),e=scrollSize.getItems(),(padding=Math.floor(padding*e.length))',item=(item=(item+='

')+_globalize.default.translate("Songs"))+"

",headerText.innerHTML=item,(apiClient=view.querySelector(".artistSongsItemsContainer")).classList.add("generalItemsContainer"),apiClient.fetchData=function(query){var item=this.currentItem,item=_connectionmanager.default.getApiClient(item);return item.getItems(item.getCurrentUserId(),Object.assign({Recursive:!0,IncludeItemTypes:"Audio",ArtistIds:this.currentItem.Id,SortBy:"PlayCount,SortName",SortOrder:"Descending,Ascending",ImageTypeLimit:1,Fields:this.getRequestedItemFields()+",PrimaryImageAspectRatio"},query))}.bind(instance),apiClient.getListOptions=getArtistSongsListOptions,apiClient.parentContainer=apiClient.closest(".verticalSection"))}(this,view,item,responses),function(instance,item,apiClient){var section=instance.view.querySelector(".artistAlbumsSection"),itemsContainer=(setScopedFocus(instance.view,section.querySelector(".focusable"),!0,"nearest"),section.querySelector(".itemsContainer")),apiClient=(itemsContainer.parentContainer=section,_approuter.default.getRouteUrl("list",{serverId:apiClient.serverId(),itemTypes:"MusicAlbum",albumArtistId:item.Id}));section.querySelector(".sectionTitleTextButton").href=apiClient,itemsContainer.setAttribute("data-virtualscrolllayout","horizontal-grid"),itemsContainer.fetchData=function(query){var item=this.currentItem;if("MusicArtist"!==item.Type)return Promise.resolve({Items:[],TotalRecordCount:0});var apiClient=_connectionmanager.default.getApiClient(item);return(query=Object.assign({IncludeItemTypes:"MusicAlbum",Recursive:!0,SortBy:"ProductionYear,SortName",SortOrder:"Descending,Ascending",ImageTypeLimit:1,Fields:this.getRequestedItemFields()+",PrimaryImageAspectRatio,ProductionYear"},query)).AlbumArtistIds=item.Id,apiClient.getItems(apiClient.getCurrentUserId(),query)}.bind(instance),itemsContainer.getListOptions=getMusicArtistChildrenListOptions}(this,item,responses),function(instance,item,apiClient){var trackList=instance.view.querySelector(".trackList");trackList.parentContainer=trackList,"Season"===item.Type?(trackList.fetchData=function(serverId,seriesId,seasonId){return function(query){var apiClient=_connectionmanager.default.getApiClient(serverId);return apiClient.getEpisodes(seriesId,Object.assign({SeasonId:seasonId,ImageTypeLimit:1,UserId:apiClient.getCurrentUserId(),Fields:"Overview,PrimaryImageAspectRatio,PremiereDate,ProductionYear"},query))}}(apiClient.serverId(),item.SeriesId,item.Id),trackList.getListOptions=function(item){return function(){return{renderer:_listview.default,options:{showIndexNumber:!1,imageSize:"large",highlight:!1,action:"link",imagePlayButton:!_layoutmanager.default.tv,includeParentInfoInTitle:!1,enableSpecialEpisodePrefix:0!==item.IndexNumber,itemClass:"detailsListItem",fields:["Name","Overview"]},virtualScrollLayout:"vertical-list"}}}(item),trackList.setAttribute("data-virtualscrolllayout","vertical-grid"),trackList.classList.add("padded-bottom-page")):"MusicAlbum"===item.Type?(trackList.fetchData=function(query){var item=this.currentItem,apiClient=_connectionmanager.default.getApiClient(item),includeOverview=!0===item.SupportsResume,fields=this.getRequestedItemFields()+",PrimaryImageAspectRatio";includeOverview&&(fields+=",Overview");return apiClient.getItems(apiClient.getCurrentUserId(),Object.assign({ParentId:item.Id,Fields:fields,ImageTypeLimit:1,SortBy:null,EnableTotalRecordCount:!1}))}.bind(instance),trackList.getListOptions=(!0===item.SupportsResume?function(item){return function(items){var fields=[];return function(items){for(var i=0,length=items.length;iquery.Limit&&(people.length=query.Limit),Promise.resolve({Items:people,TotalRecordCount:totalRecordCount})}}(instance),view.parentContainer=view.closest(".verticalSection"),view.getListOptions=getPeopleListOptions,view.classList.add("generalItemsContainer")}(this,view),function(instance,view,item){_itemhelper.default.supportsSimilarItems(item)&&((view=view.querySelector(".similarItemsContainer")).fetchData=function(){var item=this.currentItem,apiClient=_connectionmanager.default.getApiClient(item),options={Limit:12,UserId:apiClient.getCurrentUserId(),ImageTypeLimit:1,Fields:this.getRequestedItemFields()+",PrimaryImageAspectRatio,ProductionYear",EnableTotalRecordCount:!1};("Program"===item.Type||"Timer"===item.Type&&item.ProgramId&&!item.IsSports)&&(options.GroupProgramsBySeries=!0);"MusicAlbum"===item.Type&&item.AlbumArtists&&item.AlbumArtists.length&&(options.ExcludeArtistIds=item.AlbumArtists[0].Id);item="Timer"===item.Type?item.ProgramId:item.Id;return apiClient.getSimilarItems(item,options)}.bind(instance),view.parentContainer=view.closest(".verticalSection"),view.getListOptions=function(item){return function(items){var fields=["Name"];return"Movie"!==item.Type&&"Trailer"!==item.Type&&"Program"!==item.Type&&"Game"!==item.Type||fields.push("ProductionYear"),"MusicAlbum"!==item.Type&&"Game"!==item.Type||fields.push("ParentName"),"Program"===item.Type&&fields.unshift("ParentName"),{renderer:_cardbuilder.default,options:{shape:"auto",lines:"Game"===item.Type?3:"Program"===item.Type?2:null,centerText:!0,fields:fields,overlayPlayButton:!0,overlayText:!1,multiSelect:"Program"!==item.Type&&"Timer"!==item.Type,contextMenu:"Program"!==item.Type&&"Timer"!==item.Type,draggable:"Program"!==item.Type&&"Timer"!==item.Type,focusTransformTitleAdjust:!0},virtualScrollLayout:"horizontal-grid"}}}(item),view.classList.add("generalItemsContainer"))}(this,view,item),function(instance,view,item,apiClient){_itemhelper.default.supportsSimilarItemsOnLiveTV(item,apiClient)&&((item=view.querySelector(".similarOnLiveTVItemsContainer")).fetchData=function(){var item=this.currentItem,apiClient=_connectionmanager.default.getApiClient(item);return apiClient.getSimilarItems(item.Id,{userId:apiClient.getCurrentUserId(),limit:12,fields:this.getRequestedItemFields()+",PrimaryImageAspectRatio,ProductionYear",IncludeItemTypes:"Program",EnableTotalRecordCount:!1,GroupProgramsBySeries:!0})}.bind(instance),item.parentContainer=item.closest(".verticalSection"),item.getListOptions=getMoreLikeThisOnLiveTVListOptions,item.classList.add("generalItemsContainer"))}(this,view,item,responses),function(instance,view,item){("Series"===item.Type||"Program"===item.Type||"Timer"===item.Type&&item.ProgramId)&&((view=view.querySelector(".seriesScheduleItemsContainer")).fetchData=function(query){var item=this.currentItem,apiClient=_connectionmanager.default.getApiClient(item);query=Object.assign({UserId:apiClient.getCurrentUserId(),HasAired:!1,SortBy:"StartDate",ImageTypeLimit:1,EnableImageTypes:"Primary,Thumb,Backdrop",EnableUserData:!1,Fields:"PrimaryImageAspectRatio,ChannelInfo"},query),"Program"===item.Type||"Timer"===item.Type&&item.ProgramId?item.AsSeries?query.SeriesFromProgramId=item.Id:(query.ShowingsFromProgramId=item.ProgramId||item.Id,query.ExcludeItemIds=item.ProgramId||item.Id):query.LibrarySeriesId=item.Id;return apiClient.getLiveTvPrograms(query)}.bind(instance),view.parentContainer=view.closest(".verticalSection"),view.getListOptions=function(items){return{renderer:_cardbuilder.default,options:{preferThumb:"auto",shape:"autooverflow",fields:["Name","ChannelName","AirTime"],centerText:!0,overlayText:!1,overlayPlayButton:!1,showAirDateTime:!0,multiSelect:!1,draggable:!1,focusTransformTitleAdjust:!0},virtualScrollLayout:"horizontal-grid"}}.bind(instance),view.classList.add("generalItemsContainer"),"Program"!==item.Type&&"Timer"!==item.Type||(item.AsSeries?view.parentContainer.querySelector(".sectionTitle").innerHTML=_globalize.default.translate("Showings"):view.parentContainer.querySelector(".sectionTitle").innerHTML=_globalize.default.translate("HeaderOtherShowings")))}(this,view,item),function(instance,view,item){_itemhelper.default.supportsExtras(item)&&((item=view.querySelector(".extrasItemsContainer")).fetchData=function(query){var item=this.currentItem,apiClient=_connectionmanager.default.getApiClient(item);return apiClient.getSpecialFeatures(apiClient.getCurrentUserId(),item.Id).then(function(items){var totalRecordCount=items.length;return query&&(items=items.slice(query.StartIndex||0),query.Limit)&&items.length>query.Limit&&(items.length=query.Limit),{Items:items,TotalRecordCount:totalRecordCount}})}.bind(instance),item.parentContainer=item.closest(".verticalSection"),item.getListOptions=getExtrasListOptions,item.classList.add("generalItemsContainer"))}(this,view,item),function(instance,view){view=view.querySelector(".chaptersItemsContainer");view.fetchData=function(query){var item=this.currentItem,chapters=item.Chapters||[];chapters.length&&"Video"===item.MediaType&&!chapters[0].ImageTag&&(chapters=[]);var videoStream=(((item.MediaSources||[])[0]||{}).MediaStreams||[]).filter(function(i){return"Video"===i.Type})[0]||{},aspect=null;videoStream.Width&&videoStream.Height&&(aspect=videoStream.Width/videoStream.Height);for(var i=0,length=chapters.length;iquery.Limit&&(chapters.length=query.Limit);return Promise.resolve({Items:chapters,TotalRecordCount:videoStream})}.bind(instance),view.parentContainer=view.closest(".verticalSection"),view.getListOptions=getChaptersListOptions,view.classList.add("generalItemsContainer")}(this,view),function(instance,view){view=view.querySelector(".additionalPartsItemsContainer");view.fetchData=function(){var item=this.currentItem;if((item.PartCount||1)<2)return Promise.resolve({TotalRecordCount:0,Items:[]});var apiClient=_connectionmanager.default.getApiClient(item);return apiClient.getAdditionalVideoParts(apiClient.getCurrentUserId(),item.Id)}.bind(instance),view.parentContainer=view.closest(".verticalSection"),view.getListOptions=getAdditionalPartsListOptions,view.classList.add("generalItemsContainer")}(this,view),function(instance,view,item){"TvChannel"===item.Type&&((item=view.querySelector(".programGuideItemsContainer")).fetchData=function(query){var item=this.currentItem,apiClient=_connectionmanager.default.getApiClient(item);return apiClient.getLiveTvPrograms(Object.assign({ChannelIds:item.Id,UserId:apiClient.getCurrentUserId(),HasAired:!1,SortBy:"StartDate",ImageTypeLimit:1,EnableUserData:!1,Fields:"PrimaryImageAspectRatio,Overview"},query))}.bind(instance),item.parentContainer=item.closest(".programGuideSection"),item.getListOptions=getProgramGuideListOptions,item.classList.add("generalItemsContainer"))}(this,view,item),function(instance,view,item){"SeriesTimer"===item.Type&&((item=view.querySelector(".seriesTimerScheduleItemsContainer")).fetchData=function(){var item=this.currentItem,apiClient=_connectionmanager.default.getApiClient(item);return apiClient.getLiveTvTimers({UserId:apiClient.getCurrentUserId(),ImageTypeLimit:1,EnableImageTypes:"Primary,Backdrop,Thumb",SortBy:"StartDate",EnableTotalRecordCount:!1,EnableUserData:!1,SeriesTimerId:item.Id,Fields:"ChannelInfo,ChannelImage"})}.bind(instance),item.parentContainer=item.closest(".verticalSection"),item.getListOptions=getSeriesTimerListOptions,item.classList.add("generalItemsContainer"))}(this,view,item),function(instance,view,item){var itemsContainer=function(view,item){var sideImageContainer=view.querySelector(".detailImageContainer-side"),view=view.querySelector(".detailImageContainer-main");return enableTrackList(item)?(view.classList.add("hide"),sideImageContainer.classList.remove("hide"),sideImageContainer):(view.classList.remove("hide"),sideImageContainer.classList.add("hide"),view)}(view,item),detailImage=itemsContainer,view=view.querySelector(".detailImageContainer-main");enableTrackList(item)||"Person"!==item.Type&&"BoxSet"!==item.Type&&"Season"!==item.Type&&"TvChannel"!==item.Type&&"Playlist"!==item.Type||detailImage.classList.add("detailImageContainer-small");"MusicAlbum"!==item.Type&&"Playlist"!==item.Type&&view.classList.add("detailImageContainer-main-extrabottommargin");_layoutmanager.default.tv?view.classList.add("detailImageContainer-main-tv"):view.classList.remove("detailImageContainer-main-tv");enableItemBackdropAsTopImage(item)?view.classList.add("detailImageContainer-hidemobile"):view.classList.remove("detailImageContainer-hidemobile");view=_imageloader.default.getShape([item],{});detailImage.classList.remove("detailImageContainer-backdrop","detailImageContainer-square","detailImageContainer-portrait","detailImageContainer-fourThree","detailImageContainer-banner"),view&&detailImage.classList.add("detailImageContainer-"+view);"TvChannel"===item.Type||"Season"===item.Type||"MusicAlbum"===item.Type||"Playlist"===item.Type?detailImage.classList.add("detailImage-nomarginleft"):detailImage.classList.remove("detailImage-nomarginleft");itemsContainer.fetchData=function(){var item=this.currentItem,items=[];!item||enableTvDetailImageLayout(item)||items.push(item);return Promise.resolve({Items:items,TotalRecordCount:items.length})}.bind(instance),(itemsContainer.parentContainer=itemsContainer).getListOptions=function(itemType,cardClass,imageContainerClassName){(imageContainerClassName=imageContainerClassName.split(" ").filter(function(c){return c.includes("detailImage")}).join(" ")).includes("detailImageContainer-side")&&(imageContainerClassName+=" item-fixed-side");return imageContainerClassName+=" imageWidthTest",function(items){return{renderer:_cardbuilder.default,options:{overlayText:!0,fields:[],action:"none",imageClass:"detailImage",imageWidthTestClass:imageContainerClassName,multiSelect:!1,contextMenu:!1,ratingButton:!1,playedButton:!1,cardClass:cardClass,defaultIcon:!0,typeIndicator:!1,playedIndicator:!1,syncIndicator:!1,timerIndicator:!1,randomDefaultBackground:!1,staticElement:!0,progress:"Program"===itemType||"Timer"===itemType,enableUserData:!1,draggable:!1,moreButton:!1,programIndicators:!1,keepImageAnimation:!0},virtualScrollLayout:"vertical-grid"}}}(item.Type,"detailImageContainerCard",detailImage.className),itemsContainer.afterRefresh=afterDetailImageRefreshed,itemsContainer.classList.add("generalItemsContainer"),enableTvDetailImageLayout(item)&&itemsContainer.classList.add("hide")}(this,view,item)),view.querySelector(".details-additionalContent")),detailMainContainer=("TvChannel"===item.Type||"Playlist"===item.Type||"Season"===item.Type?detailMainContainerParent.classList.remove("padded-bottom-page"):detailMainContainerParent.classList.add("padded-bottom-page"),this.mainSection),detailMainContainerParent=(_backdrop.default.hasBackdrop()?(detailMainContainerParent.classList.add("details-additionalContent-withbackdrop"),detailMainContainer.classList.add("detailMainContainer-withbackdrop")):(detailMainContainerParent.classList.remove("details-additionalContent-withbackdrop"),detailMainContainer.classList.remove("detailMainContainer-withbackdrop")),enableTrackList(item)?"Season"===item.Type?setTitle(item):setTitle(item,0,_layoutmanager.default.tv):setTitle(item,0,"float"===getLogoPlacement(item)&&"MusicAlbum"!==item.Type),view.querySelector(".topDetailsMain")),itemSideContainer=view.querySelector(".item-fixed-side"),mainDetailButtons=view.querySelector(".mainDetailButtons");return enableTrackList(item)?("MusicAlbum"===item.Type?detailMainContainer.classList.add("detailMainContainer-marginleft"):detailMainContainer.classList.remove("detailMainContainer-marginleft"),detailMainContainerParent.classList.remove("topDetailsMain-graphic","topDetailsMain-graphic-tv"),detailMainContainer.classList.remove("detailMainContainer-withitembackdrop","detailMainContainer-vertical"),itemSideContainer.classList.remove("hide"),_layoutmanager.default.tv&&"Season"!==item.Type?detailMainContainerParent.classList.add("padded-left","padded-left-page","padded-right"):detailMainContainerParent.classList.remove("padded-left","padded-left-page","padded-right")):(detailMainContainer.classList.remove("detailMainContainer-marginleft"),enableItemBackdropAsTopImage(item)?(detailMainContainer.classList.add("detailMainContainer-withitembackdrop"),detailMainContainer.classList.remove("detailMainContainer-vertical")):(detailMainContainer.classList.remove("detailMainContainer-withitembackdrop"),detailMainContainer.classList.add("detailMainContainer-vertical")),enableTvDetailImageLayout(item)?_layoutmanager.default.tv?detailMainContainerParent.classList.add("topDetailsMain-graphic","topDetailsMain-graphic-tv"):(detailMainContainerParent.classList.add("topDetailsMain-graphic"),detailMainContainerParent.classList.remove("topDetailsMain-graphic-tv")):detailMainContainerParent.classList.remove("topDetailsMain-graphic","topDetailsMain-graphic-tv"),itemSideContainer.classList.add("hide"),detailMainContainerParent.classList.remove("padded-left","padded-left-page","padded-right")),renderName(this,item,responses,user,view.querySelectorAll(".nameContainer")),function(view,item,apiClient){var imgUrl,usePrimaryImage,screenWidth=screen.availWidth,itemBackdropContainerElement=view.querySelector(".itemBackdropContainer"),itemBackdropElement=itemBackdropContainerElement.querySelector(".itemBackdrop");enableItemBackdropAsTopImage(item)?(itemBackdropContainerElement.classList.remove("hide"),usePrimaryImage="Video"===item.MediaType&&"Movie"!==item.Type&&"Trailer"!==item.Type||item.MediaType&&"Video"!==item.MediaType||"MusicAlbum"===item.Type||"Playlist"===item.Type,"Program"===item.Type&&item.ImageTags&&item.ImageTags.Thumb?imgUrl=apiClient.getImageUrl(item.Id,{type:"Thumb",index:0,maxWidth:screenWidth,tag:item.ImageTags.Thumb,EnableImageEnhancers:!1}):usePrimaryImage&&item.ImageTags&&item.ImageTags.Primary?imgUrl=apiClient.getImageUrl(item.Id,{type:"Primary",index:0,maxWidth:screenWidth,tag:item.ImageTags.Primary,EnableImageEnhancers:!1}):item.BackdropImageTags&&item.BackdropImageTags.length?imgUrl=apiClient.getImageUrl(item.Id,{type:"Backdrop",index:0,maxWidth:screenWidth,tag:item.BackdropImageTags[0]}):item.ParentBackdropItemId&&item.ParentBackdropImageTags&&item.ParentBackdropImageTags.length?imgUrl=apiClient.getImageUrl(item.ParentBackdropItemId,{type:"Backdrop",index:0,tag:item.ParentBackdropImageTags[0],maxWidth:screenWidth}):item.ImageTags&&item.ImageTags.Thumb?imgUrl=apiClient.getImageUrl(item.Id,{type:"Thumb",index:0,maxWidth:screenWidth,tag:item.ImageTags.Thumb,EnableImageEnhancers:!1}):item.ImageTags&&item.ImageTags.Primary&&(imgUrl=apiClient.getImageUrl(item.Id,{type:"Primary",index:0,maxWidth:screenWidth,tag:item.ImageTags.Primary,EnableImageEnhancers:!1})),"TvChannel"===item.Type&&itemBackdropContainerElement.classList.add("itemBackdropContainer-small"),usePrimaryImage=view.querySelector(".itemMainScrollSlider"),_layoutmanager.default.tv?usePrimaryImage.classList.remove("itemMainScrollSlider-moveup","itemMainScrollSlider-nopaddingtop"):"TvChannel"!==item.Type&&enableItemBackdropAsTopImage(item)&&usePrimaryImage.classList.add("itemMainScrollSlider-nopaddingtop"),"TvChannel"!==item.Type&&"Person"!==item.Type||itemBackdropElement.classList.add("itemBackdrop-contain"),itemBackdropElement.style.backgroundImage=imgUrl?"url('"+imgUrl+"')":""):itemBackdropContainerElement.classList.add("hide")}(view,item,responses),renderTrackSelections(view,this,item,user,!0,itemInfo),itemMainScrollSlider.push(renderDetails(this,view,item,responses,user)),function(view,user,item){if(_servicelocator.appHost.supports("sync"))for(var canSync=_itemmanager.default.canSync(item,user),buttons=view.querySelectorAll(".btnSyncDownload"),i=0,length=buttons.length;i

Content no longer available.

";var apiClient=_approuter.default.getRouteUrl("home",{serverId:apiClient.serverId()}),html=(html+='')+_globalize.default.translate("Home")+"";instance.querySelector(".detailMainContainer").innerHTML=html,_focusmanager.default.focus(instance.querySelector(".btnHomeItemNotFound"))}(instance,apiClient),Promise.reject(err)});instance.dataPromise=params}function playCurrentItem(instance,mode){var item;_multiselect.default.canPlay()?_multiselect.default.play():(item=instance.currentItem,(instance=function(view,startPositionTicks){var audioStreamIndex=view.querySelector(".selectAudio").value||null;return{startPositionTicks:startPositionTicks,mediaSourceId:view.querySelector(".selectSource").value,audioStreamIndex:audioStreamIndex,subtitleStreamIndex:view.querySelector(".selectSubtitles").value}}(instance.view,item.UserData&&"resume"===mode?null:0)).items=[item],_playbackmanager.default.play(instance))}function onPlayClick(e){playCurrentItem(this,e.currentTarget.getAttribute("data-mode"))}function onEdited(){reloadItem(this,!0)}function onEditCancel(){}function onEditMetadataClick(){var currentItem=this.currentItem,instance=this;require(["metadataEditor"]).then(function(responses){return(new responses[0]).show(currentItem.Id,currentItem.ServerId).then(onEdited.bind(instance),onEditCancel)})}function onEditImagesClick(){var currentItem=this.currentItem,instance=this;require(["imageEditor"],function(imageEditor){imageEditor.show({itemId:currentItem.Id,serverId:currentItem.ServerId}).then(onEdited.bind(instance),onEditCancel)})}function onDeleteClick(){var currentItem=this.currentItem;_itemmanager.default.deleteItems({items:[currentItem],navigate:"back"})}function onDownloadChange(){reloadItem(this,!0)}function splitVersions(instance,page,apiClient,params){var options;options="Are you sure you wish to split the media sources into separate items?",Emby.importModule("./modules/common/dialogs/confirm.js").then(function(confirm){return confirm(options)}).then(function(){_loading.default.show(),apiClient.ungroupVersions(params.id).then(function(){_loading.default.hide(),reloadItem(instance,!0)})})}function onReadMoreClick(e){var options,e=e.currentTarget.closest(".overview-container").querySelector(".overview-text");options={html:e.innerHTML,confirmButton:!1,title:_itemmanager.default.getDisplayName(this.currentItem)||this.currentItem.Name,centerText:!1,item:this.currentItem},Emby.importModule("./modules/common/dialogs/alert.js").then(function(alert){return alert(options)})}function onPromiseRejected(e){console.log("itemContextMenu close: "+e)}function getSortMenuOptions(item){var options=[];return options.push({name:"Playlist"===item.Type?_globalize.default.translate("PlaylistOrder"):"BoxSet"===item.Type?_globalize.default.translate("CollectionOrder"):_globalize.default.translate("Default"),value:"default",defaultSortOrder:"Ascending"}),options.push({name:_globalize.default.translate("Album"),value:"Album,ParentIndexNumber,IndexNumber",defaultSortOrder:"Ascending"}),"Playlist"===item.Type&&options.push({name:_globalize.default.translate("AlbumArtist"),value:"AlbumArtist,Album,ParentIndexNumber,IndexNumber,SortName",defaultSortOrder:"Ascending"}),options.push({name:_globalize.default.translate("Artist"),value:"Artist,Album,ParentIndexNumber,IndexNumber,SortName",defaultSortOrder:"Ascending"}),options.push({name:_globalize.default.translate("Runtime"),value:"Runtime,SortName",defaultSortOrder:"Ascending"}),options.push({name:_globalize.default.translate("Title"),value:"SortName",defaultSortOrder:"Ascending"}),options.push({name:_globalize.default.translate("Year"),value:"ProductionYear,SortName",defaultSortOrder:"Descending"}),options}function getSortMenuOption(sortMenuOptions,sortBy){for(var i=0,length=sortMenuOptions.length;ilink'+_textencoding.default.htmlEncode(url.Name)+"")}page.querySelector(".itemLinks").innerHTML=links.join(""),links.length?page.classList.remove("hide"):page.classList.add("hide")}(view,item),view.querySelector(".audioVideoMediaInfo").classList.remove("mediainfo-forcehide"),view.querySelector(".details-additionalContent").classList.remove("hide"),focusMainSection.call(instance.mainSection)),function(instance,eventName,item){instance.itemShowDispatched||(instance.itemShowDispatched=!0,instance.view.dispatchEvent(new CustomEvent(eventName,{detail:{item:item},bubbles:!0,cancelable:!1})))}(instance,"itemshow",item),_loading.default.hide()},onPromiseFailure)}function addClass(elems,className){for(var i=0,length=elems.length;i' + : '
'), + mediaSource.Path && + "Http" !== mediaSource.Protocol && + renderAdminFields && + (html += "
" + mediaSource.Path + "
"), + (html += '
'), + mediaSource.Container && + (html += mediaSource.Container.toUpperCase()), + mediaSource.Size && + (html += + '' + + _dataformatter.default.sizeToString(mediaSource.Size) + + ""), + new Date(Date.parse(item.DateCreated))), + renderAdminFields = + ((html += + '' + + _globalize.default.translate( + "AddedOnValue", + _datetime.default.toLocaleDateString(renderAdminFields) + + " " + + _datetime.default.getDisplayTime(renderAdminFields), + ) + + ""), + (elem.innerHTML = html = + (html = html + "
" + "
") && + '
' + + html + + "
"), + elem.insertAdjacentHTML( + "beforeend", + scrollX + ? '
' + : '
', + ), + parentElem.appendChild(elem), + mediaSource.MediaStreams.filter(isMediaStreamDisplayed).map( + function (s) { + return _itemhelper.default.normalizeMediaStreamForDisplay( + item, + mediaSource, + s, + ); + }, + )); + scrollX + ? _cardbuilder.default.buildCards(renderAdminFields, { + shape: "backdrop", + overlayText: !0, + fields: ["MediaStreamInfo"], + itemsContainer: elem.querySelector(".itemsContainer"), + action: "none", + multiSelect: !1, + ratingButton: !1, + playedButton: !1, + defaultIcon: !1, + typeIndicator: !1, + playedIndicator: !1, + syncIndicator: !1, + timerIndicator: !1, + randomDefaultBackground: !1, + imageFallback: !1, + cardPadderClass: _layoutmanager.default.tv + ? "mediaStreamPadder-tv" + : "mediaStreamPadder", + innerCardFooterClass: "mediaStreamInnerCardFooter", + enableUserData: !1, + draggable: !1, + enableFocusScaling: !1, + }) + : _listview.default.buildItems(renderAdminFields, { + image: !1, + fields: ["MediaStreamInfo"], + itemsContainer: elem.querySelector(".itemsContainer"), + action: "none", + multiSelect: !1, + ratingButton: !1, + playedButton: !1, + defaultIcon: !1, + typeIndicator: !1, + playedIndicator: !1, + syncIndicator: !1, + timerIndicator: !1, + randomDefaultBackground: !1, + imageFallback: !1, + innerCardFooterClass: "mediaStreamInnerCardFooter", + enableUserDataButtons: !1, + draggable: !1, + itemClass: "detailsListItem", + }); + })(parentElem, renderAdminFields, item, mediaSource, !0)); + } + } + function isRenderingTrackSelections(item) { + return !( + !_itemhelper.default.supportsMediaSourceSelection(item) || + -1 === + _playbackmanager.default + .getSupportedCommands() + .indexOf("PlayMediaSource") || + !_playbackmanager.default.canPlay(item) + ); + } + function renderTrackSelections( + page, + instance, + item, + user, + forceReload, + mediaSources, + ) { + var select = page.querySelector(".selectSource"), + apiClient = _connectionmanager.default.getApiClient(item); + isRenderingTrackSelections(item) + ? (mediaSources + ? Promise.resolve(mediaSources) + : _playbackmanager.default.getPlaybackMediaSources(item) + ).then(function (mediaSources) { + var renderAdminFields = user.Policy.IsAdministrator, + renderAdminFields = + (renderMediaSources(page, renderAdminFields, item, mediaSources), + (instance._currentPlaybackMediaSources = mediaSources), + instance.trackSelectionsContainer.classList.remove("hide"), + select.value), + selectedId = mediaSources[0].Id; + (select.innerHTML = mediaSources + .map(function (v) { + var selected = v.Id === selectedId ? " selected" : ""; + return ( + '" + ); + }) + .join("")), + 1 < mediaSources.length + ? (select.removeAttribute("disabled"), + page + .querySelector(".selectSourceContainer") + .classList.remove("hide")) + : (page + .querySelector(".selectSourceContainer") + .classList.add("hide"), + select.setAttribute("disabled", "disabled")), + (select.value === renderAdminFields && !forceReload) || + (renderMediaInfo(0, page, item, mediaSources), + renderVideoSelections(page, mediaSources), + renderAudioSelections(page, mediaSources), + renderSubtitleSelections(page, mediaSources), + updateTrackSelectionsFocusState(instance, page)); + }) + : (renderMediaInfo(0, page, item, item.MediaSources || []), + renderMediaSources( + page, + user.Policy.IsAdministrator, + item, + item.MediaSources || [], + ), + (instance._currentPlaybackMediaSources = []), + instance.trackSelectionsContainer.classList.add("hide"), + (select.innerHTML = ""), + (page.querySelector(".selectVideo").innerHTML = ""), + (page.querySelector(".selectAudio").innerHTML = ""), + (page.querySelector(".selectSubtitles").innerHTML = ""), + select.setAttribute("disabled", "disabled"), + updateTrackSelectionsFocusState(instance, page)); + } + function renderVideoSelections(page, mediaSources) { + var mediaSourceId = page.querySelector(".selectSource").value, + mediaSources = mediaSources + .filter(function (m) { + return m.Id === mediaSourceId; + })[0] + .MediaStreams.filter(function (m) { + return "Video" === m.Type; + }), + select = page.querySelector(".selectVideo"), + selectedId = mediaSources.length ? mediaSources[0].Index : -1; + (select.innerHTML = mediaSources + .map(function (v) { + var selected = v.Index === selectedId ? " selected" : "", + titleParts = [], + resolutionText = _dataformatter.default.getResolutionText(v); + return ( + resolutionText && titleParts.push(resolutionText), + v.Codec && titleParts.push(v.Codec.toUpperCase()), + '" + ); + }) + .join("")), + select.setAttribute("disabled", "disabled"), + mediaSources.length + ? page.querySelector(".selectVideoContainer").classList.remove("hide") + : page.querySelector(".selectVideoContainer").classList.add("hide"); + } + function renderAudioSelections(page, mediaSources) { + var mediaSourceId = page.querySelector(".selectSource").value, + mediaSources = mediaSources.filter(function (m) { + return m.Id === mediaSourceId; + })[0], + tracks = mediaSources.MediaStreams.filter(function (m) { + return "Audio" === m.Type; + }), + select = page.querySelector(".selectAudio"), + selectedId = mediaSources.DefaultAudioStreamIndex; + (select.innerHTML = tracks + .map(function (v) { + var selected = v.Index === selectedId ? " selected" : "", + embeddedTitle = + v.Title && !(v.DisplayTitle || "").includes(v.Title) + ? v.Title + : null; + return ( + "" + + _textencoding.default.htmlEncode(v.DisplayTitle) + + "" + ); + }) + .join("")), + 1 < tracks.length + ? select.removeAttribute("disabled") + : select.setAttribute("disabled", "disabled"), + tracks.length + ? page.querySelector(".selectAudioContainer").classList.remove("hide") + : page.querySelector(".selectAudioContainer").classList.add("hide"); + } + function renderSubtitleSelections(page, mediaSources) { + var selected, + mediaSourceId = page.querySelector(".selectSource").value, + mediaSources = mediaSources.filter(function (m) { + return m.Id === mediaSourceId; + })[0], + tracks = mediaSources.MediaStreams.filter(function (m) { + return "Subtitle" === m.Type; + }), + select = page.querySelector(".selectSubtitles"), + selectedId = + null == mediaSources.DefaultSubtitleStreamIndex + ? -1 + : mediaSources.DefaultSubtitleStreamIndex; + tracks.length + ? ((selected = -1 === selectedId ? " selected" : ""), + (select.innerHTML = + '" + + tracks + .map(function (v) { + selected = v.Index === selectedId ? " selected" : ""; + var embeddedTitle = + v.Title && !(v.DisplayTitle || "").includes(v.Title) + ? v.Title + : null; + return ( + "" + + _textencoding.default.htmlEncode(v.DisplayTitle) + + "" + ); + }) + .join("")), + select.classList.remove("noSelections"), + page + .querySelector(".selectSubtitlesContainer") + .classList.remove("hide")) + : ((select.innerHTML = ""), + select.classList.add("noSelections"), + page.querySelector(".selectSubtitlesContainer").classList.add("hide")); + } + function setButtonText(page, query, html) { + for ( + var elems = page.querySelectorAll(query), i = 0, length = elems.length; + i < length; + i++ + ) { + elems[i].innerHTML = html; + var btn = elems[i].closest("button"); + btn && ((btn.title = html), btn.setAttribute("aria-label", html)); + } + } + function setResumeProgress(resumeInfoElement, item) { + var ticksLeft, + resumeInfoElement = resumeInfoElement.querySelector(".resumeProgress"); + item.UserData && + 0 < item.UserData.PlaybackPositionTicks && + item.RunTimeTicks + ? ((ticksLeft = item.RunTimeTicks - item.UserData.PlaybackPositionTicks), + (ticksLeft = + '
' + + _globalize.default.translate( + "TimeRemainingValue", + _datetime.default.getHumanReadableRuntime(ticksLeft), + ) + + "
"), + (resumeInfoElement.innerHTML = + _indicators.default.getProgressBarHtml(item, { + containerClass: "resumeInfoProgressBar", + animated: !0, + }) + ticksLeft), + resumeInfoElement.classList.remove("hide")) + : resumeInfoElement.classList.add("hide"); + } + function reloadPlayButtons(instance, page, item, isUserDataChangeEvent) { + var now, + activeElement, + isPlayFocused, + btnPlay, + btnResume, + btnPlayTrailer, + btnShuffle, + playButtons = page.querySelectorAll(".btnPlay"); + "Program" === item.Type + ? ((now = new Date()) >= new Date(Date.parse(item.StartDate)) && + now < new Date(Date.parse(item.EndDate)) + ? hideAll(page, playButtons, !0) + : hideAll(page, playButtons), + hideAll(page, "btnResume"), + hideAll(page, "detailResumeInfo"), + hideAll(page, "btnShuffle"), + hideAll(page, "btnQueue"), + setButtonText( + page, + ".playButtonText", + _globalize.default.translate("Play"), + )) + : _playbackmanager.default.canPlay(item) + ? (hideAll(page, "btnPlay", !0), + (now = + item.IsFolder || + -1 !== + ["MusicAlbum", "MusicGenre", "MusicArtist"].indexOf(item.Type)), + "MusicAlbum" === item.Type && item.SupportsResume && (now = !1), + hideAll( + page, + "btnShuffle", + (now = "Season" !== item.Type && "Series" !== item.Type ? now : !1), + ), + (isPlayFocused = + (activeElement = document.activeElement) && + activeElement.classList && + (activeElement.classList.contains("btnResume") || + activeElement.classList.contains("btnMainPlay"))), + (btnPlay = page.querySelector(".btnPlay")), + (btnResume = page.querySelector(".btnResume")), + ((btnPlayTrailer = page.querySelector( + ".btnPlayTrailer-main", + )).querySelector("i").innerHTML = _itemmanager.default.getDefaultIcon({ + Type: "Trailer", + MediaType: "Video", + })), + (btnShuffle = page.querySelector(".btnShuffle")), + "Series" === item.Type || + ("MusicAlbum" === item.Type && item.SupportsResume) + ? (btnResume.classList.add("detailButton-primary"), + btnPlay.classList.remove( + "detailButton-primary", + "detailButton-highres3", + ), + (function (instance, page) { + getNextUpItems + .call(instance, { Limit: 1, EnableTotalRecordCount: !1 }) + .then(function (result) { + var resumeName, + result = result.Items[0], + resumeInfo = page.querySelector(".detailResumeInfo"); + result + ? (((resumeName = + resumeInfo.querySelector(".resumeName")).innerHTML = + _itemmanager.default.getDisplayName(result)), + resumeName.classList.remove("hide"), + setResumeProgress(resumeInfo, result), + result.UserData && + 0 < result.UserData.PlaybackPositionTicks + ? setButtonText( + page, + ".resumeButtonText", + _globalize.default.translate("Resume"), + ) + : setButtonText( + page, + ".resumeButtonText", + _globalize.default.translate("Play"), + ), + resumeInfo.classList.remove("hide")) + : (setButtonText( + page, + ".resumeButtonText", + _globalize.default.translate("Play"), + ), + resumeInfo.classList.add("hide")); + }); + })(instance, page), + setButtonText( + page, + ".playButtonText", + _globalize.default.translate("PlayFromBeginning"), + ), + btnPlay.classList.remove("detailButton-stacked"), + btnShuffle.classList.remove("detailButton-stacked"), + isTrailerButtonVisible(item) + ? (btnPlayTrailer.classList.add("detailButton-stacked"), + btnResume.classList.add("detailButton-stacked")) + : (btnPlayTrailer.classList.remove("detailButton-stacked"), + btnResume.classList.remove("detailButton-stacked")), + hideAll(page, "detailResumeInfo", !0), + hideAll(page, "btnResume", !0), + hideAll(page, "btnPlay", now)) + : ((instance = + item.UserData && 0 < item.UserData.PlaybackPositionTicks) + ? (btnResume.classList.add( + "detailButton-primary", + "detailButton-stacked", + ), + btnPlay.classList.remove( + "detailButton-primary", + "detailButton-stacked", + ), + _layoutmanager.default.tv + ? btnPlay.classList.remove("detailButton-highres3") + : btnPlay.classList.add("detailButton-highres3"), + btnPlayTrailer.classList.add("detailButton-stacked"), + btnShuffle.classList.remove("detailButton-stacked"), + setButtonText( + page, + ".playButtonText", + _globalize.default.translate("PlayFromBeginning"), + ), + hideAll(page, "detailResumeInfo", !0), + hideAll(page, "resumeName"), + setResumeProgress( + page.querySelector(".detailResumeInfo"), + item, + )) + : (btnPlay.classList.add("detailButton-primary"), + btnPlay.classList.remove("detailButton-highres3"), + now + ? (btnPlayTrailer.classList.remove("detailButton-stacked"), + btnResume.classList.remove("detailButton-stacked"), + btnShuffle.classList.add("detailButton-stacked"), + btnPlay.classList.add("detailButton-stacked")) + : (isTrailerButtonVisible(item) + ? (btnPlay.classList.add("detailButton-stacked"), + btnResume.classList.remove("detailButton-stacked"), + btnPlayTrailer.classList.add("detailButton-stacked")) + : (btnPlay.classList.remove("detailButton-stacked"), + btnResume.classList.remove("detailButton-stacked"), + btnPlayTrailer.classList.remove( + "detailButton-stacked", + )), + btnShuffle.classList.remove("detailButton-stacked")), + setButtonText( + page, + ".playButtonText", + _globalize.default.translate("Play"), + )), + hideAll(page, "detailResumeInfo", instance), + hideAll(page, "btnResume", instance)), + isUserDataChangeEvent || + hideAll(page, "btnQueue", _playbackmanager.default.canQueue(item)), + isPlayFocused && focusMainSection.call(activeElement.parentNode)) + : (hideAll(page, playButtons), + hideAll(page, "btnQueue"), + hideAll(page, "btnResume"), + hideAll(page, "detailResumeInfo"), + hideAll(page, "btnShuffle")); + } + function focusMainSection() { + for ( + var btns = this.querySelectorAll(".detailButton"), + i = 0, + length = btns.length; + i < length; + i++ + ) { + var btn = btns[i]; + if (_focusmanager.default.isCurrentlyFocusable(btn)) + try { + return void _focusmanager.default.focus(btn); + } catch (err) {} + } + _focusmanager.default.autoFocus(this, { skipIfNotEnabled: !0 }); + } + function setTitle(item, apiClient, enableLogo) { + (enableLogo = "TvChannel" === item.Type ? !1 : enableLogo) + ? _appheader.default.setLogoTitle({ + items: [item], + titleText: "", + preferredLogoImageTypes: + _skinmanager.default.getPreferredLogoImageTypes(), + }) + : _appheader.default.setTitle(""); + } + function getLogoPlacement(item) { + return "TvChannel" === item.Type + ? null + : (("MusicAlbum" !== item.Type && + "Audio" !== item.Type && + "MusicVideo" !== item.Type) || + (item.ImageTags && item.ImageTags.Logo)) && + _usersettings.default.getEnableLogoAsTitle( + _globalize.default.getCurrentLocale(), + ) + ? "title" + : "float"; + } + function getArtistLinksHtml(artists, serverId) { + for (var html = [], i = 0, length = artists.length; i < length; i++) { + var artist = artists[i], + href = _approuter.default.getRouteUrl(artist, { + itemType: "MusicArtist", + serverId: serverId, + }); + html.push( + '' + + _textencoding.default.htmlEncode(artist.Name) + + "", + ); + } + return (html = html.join(" / ")); + } + function inferContext(item) { + switch (item.Type) { + case "Series": + case "Season": + case "Episode": + return "tvshows"; + case "Movie": + return "movies"; + case "Game": + case "GameSystem": + return "games"; + case "MusicArtist": + case "MusicAlbum": + case "Audio": + case "AudioBook": + case "MusicVideo": + return "music"; + case "Program": + case "TvChannel": + case "Timer": + case "SeriesTimer": + return "livetv"; + default: + return null; + } + } + function renderName(instance, item, apiClient, user, containers) { + var parentRoute, + itemForTitle = ("Timer" === item.Type && item.ProgramInfo) || item, + context = inferContext(itemForTitle), + parentNameHtml = [], + parentNameLast = !1, + hasFocusableButton = !1, + fontSize = parseFloat( + window + .getComputedStyle(document.body, null) + .getPropertyValue("font-size"), + ), + fontSize = Math.round(2 * fontSize * 2.4) + Math.round(0.2 * fontSize), + apiClient = + "title" !== getLogoPlacement(itemForTitle) + ? null + : (function (item, apiClient, options) { + options = options || {}; + var logoTypes = _skinmanager.default.getPreferredLogoImageTypes(); + return apiClient.getLogoImageUrl(item, options, logoTypes); + })(itemForTitle, apiClient, { maxHeight: Math.max(fontSize, 260) }), + fontSize = "itemLogoAsTitle", + itemNamePrimaryClass = + (_layoutmanager.default.tv && (fontSize += " itemLogoAsTitle-tv"), + "itemName-primary"), + itemPrimaryNameContainerClass = "itemPrimaryNameContainer", + html = + (itemForTitle.AlbumArtists && itemForTitle.AlbumArtists.length + ? (parentNameHtml.push( + getArtistLinksHtml( + itemForTitle.AlbumArtists, + itemForTitle.ServerId, + ), + ), + (parentNameLast = !0)) + : itemForTitle.ArtistItems && + itemForTitle.ArtistItems.length && + "MusicVideo" === itemForTitle.Type + ? (parentNameHtml.push( + getArtistLinksHtml( + itemForTitle.ArtistItems, + itemForTitle.ServerId, + ), + ), + (parentNameLast = !0)) + : itemForTitle.SeriesName && itemForTitle.SeriesId + ? ((parentRoute = _approuter.default.getRouteUrl( + { + Id: itemForTitle.SeriesId, + Name: itemForTitle.SeriesName, + Type: "Series", + IsFolder: !0, + ServerId: itemForTitle.ServerId, + }, + { context: context }, + )), + (seriesName = _textencoding.default.htmlEncode( + itemForTitle.SeriesName, + )), + apiClient + ? ((itemNamePrimaryClass += " itemName-primary-logo"), + _layoutmanager.default.tv && + (itemNamePrimaryClass += " itemName-primary-logo-tv"), + (itemPrimaryNameContainerClass += + " itemPrimaryNameContainer-logo"), + _layoutmanager.default.tv + ? (tabIndex = ' tabindex="-1"') + : (hasFocusableButton = !(tabIndex = "")), + parentNameHtml.push( + "' + + (seriesName = + '' +
+                      seriesName +
+                      '') + + "", + )) + : ((hasFocusableButton = !0), + parentNameHtml.push( + '' + + seriesName + + "", + ))) + : itemForTitle.SeriesName + ? parentNameHtml.push( + _textencoding.default.htmlEncode(itemForTitle.SeriesName), + ) + : (itemForTitle.IsSeries || itemForTitle.EpisodeTitle) && + parentNameHtml.push( + _textencoding.default.htmlEncode(itemForTitle.Name), + ), + itemForTitle.Album && + itemForTitle.AlbumId && + ("MusicVideo" === itemForTitle.Type || "Audio" === itemForTitle.Type) + ? ((parentRoute = _approuter.default.getRouteUrl( + { + Id: itemForTitle.AlbumId, + Name: itemForTitle.Album, + Type: "MusicAlbum", + IsFolder: !0, + ServerId: itemForTitle.ServerId, + }, + { context: context }, + )), + (hasFocusableButton = !0), + parentNameHtml.push( + '' + + _textencoding.default.htmlEncode(itemForTitle.Album) + + "", + )) + : itemForTitle.Album && + parentNameHtml.push( + _textencoding.default.htmlEncode(itemForTitle.Album), + ), + ""), + tabIndex = ""; + _layoutmanager.default.tv || + (_itemmanager.default.canEdit(item, user) && + ((hasFocusableButton = !0), + (tabIndex += + '')), + _itemmanager.default.canEditImages(item, user) && + ((hasFocusableButton = !0), + (tabIndex += + ''))), + enableItemBackdropAsTopImage(itemForTitle) || + (itemPrimaryNameContainerClass += " itemPrimaryNameContainer-centered"), + parentNameHtml.length && + (html = parentNameLast + ? '

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

" + : '

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

"); + var seriesName = + (seriesName = _itemmanager.default.getDisplayName(itemForTitle, { + includeParentInfo: !0, + })) && _textencoding.default.htmlEncode(seriesName); + html && seriesName && !parentNameLast + ? (html += + '

' + + seriesName + + "

" + + tabIndex + + "
") + : (html = + (parentNameLast || + (apiClient && + ((seriesName = + '' +
+                seriesName +
+                ''), + (itemNamePrimaryClass += " itemName-primary-logo"), + (itemPrimaryNameContainerClass += + " itemPrimaryNameContainer-logo"), + _layoutmanager.default.tv) && + (itemNamePrimaryClass += " itemName-primary-logo-tv")), + '

' + + seriesName + + "

" + + tabIndex + + "
" + + html)); + for (var i = 0, length = containers.length; i < length; i++) { + var container = containers[i], + btnEditMetadata = + (enableItemBackdropAsTopImage(itemForTitle) + ? container.classList.remove("nameContainer-centered") + : container.classList.add("nameContainer-centered"), + (container.innerHTML = html), + setScopedFocus(null, container, hasFocusableButton, "nearest"), + html.length + ? container.classList.remove("hide") + : container.classList.add("hide"), + container.querySelector(".btnEditMetadata")), + btnEditMetadata = + (btnEditMetadata && + btnEditMetadata.addEventListener( + "click", + onEditMetadataClick.bind(instance), + ), + container.querySelector(".btnEditImages")); + btnEditMetadata && + btnEditMetadata.addEventListener( + "click", + onEditImagesClick.bind(instance), + ); + } + } + function isTrailerButtonVisible(item) { + if ( + _playbackmanager.default.getSupportedCommands().includes("PlayTrailers") + ) { + if (item.LocalTrailerCount) return 1; + if (item.RemoteTrailers && item.RemoteTrailers.length) return 1; + } + } + function setTrailerButtonVisibility(page, item) { + isTrailerButtonVisible(item) + ? hideAll(page, "btnPlayTrailer", !0) + : hideAll(page, "btnPlayTrailer"); + } + function enableTrackList(item) { + return ( + !!_layoutmanager.default.tv && + ("Playlist" === item.Type || + ("MusicAlbum" === item.Type && !item.SupportsResume)) + ); + } + function enableItemBackdropAsTopImage(item) { + return ( + "Playlist" !== item.Type && + "MusicAlbum" !== item.Type && + "TvChannel" !== item.Type && + "Audio" !== item.Type + ); + } + function hideAll(page, className, show) { + for ( + var elems = + "string" == typeof className + ? page.querySelectorAll("." + className) + : className, + i = 0, + length = elems.length; + i < length; + i++ + ) + show ? elems[i].classList.remove("hide") : elems[i].classList.add("hide"); + } + function getCommandOptions(view, item, user, button) { + (view = view.querySelector(".selectSource")), + (item = { + items: [item], + open: !1, + play: !1, + playFromBeginning: !0, + playAllFromHere: !1, + positionTo: button, + cancelTimer: !1, + record: !1, + deleteItem: !0, + shuffle: !0, + instantMix: !0, + user: user, + share: !0, + mediaSourceId: (view && view.value) || null, + positionY: "center", + positionX: "right", + transformOrigin: "left top", + played: !1, + favorites: !1, + navigateOnDelete: "back", + showSeries: !!_layoutmanager.default.tv, + showSeason: !0, + }); + return ( + _servicelocator.appHost.supports("sync") && (item.syncLocal = !1), item + ); + } + function renderMediaInfo(instance, view, item, mediaSources) { + var hasFocusElements, + mediaSourceId = view.querySelector(".selectSource").value, + mediaSources = mediaSources.filter(function (m) { + return m.Id === mediaSourceId; + })[0], + mediaInfoElem = view.querySelector(".mediaInfoPrimary"); + "Season" === item.Type || "SeriesTimer" === item.Type + ? (mediaInfoElem.classList.add("hide"), + mediaInfoElem.classList.remove("focuscontainer-x")) + : (_mediainfo.default.fillPrimaryMediaInfo(mediaInfoElem, item, { + interactive: !0, + episodeTitle: !1, + subtitles: !1, + dateAdded: !1, + genres: !0, + context: inferContext(item), + endsAt: !0, + endsAtClass: "detailEndsAt", + bitrate: "Audio" === item.MediaType, + runtime: "Timer" !== item.Type, + mediaSource: mediaSources, + }), + (hasFocusElements = null != mediaInfoElem.querySelector("a,button")), + setScopedFocus(null, mediaInfoElem, hasFocusElements, "nearest"), + hasFocusElements + ? mediaInfoElem.classList.add("focuscontainer-x") + : mediaInfoElem.classList.remove("focuscontainer-x")), + enableItemBackdropAsTopImage(item) + ? mediaInfoElem.classList.remove("mediaInfo-centered", "secondaryText") + : mediaInfoElem.classList.add("mediaInfo-centered", "secondaryText"), + (mediaInfoElem = view.querySelector(".mediaInfoSecondary")), + _mediainfo.default.fillSecondaryMediaInfo(mediaInfoElem, item, { + interactive: !0, + mediaSource: mediaSources, + }), + (hasFocusElements = null != mediaInfoElem.querySelector("a,button")), + setScopedFocus(null, mediaInfoElem, hasFocusElements, "nearest"), + hasFocusElements + ? mediaInfoElem.classList.add("focuscontainer-x") + : mediaInfoElem.classList.remove("focuscontainer-x"), + mediaInfoElem.innerHTML.trim() + ? mediaInfoElem.classList.remove("hide") + : mediaInfoElem.classList.add("hide"); + } + function renderDetails(instance, view, item, apiClient, user) { + var promises = [], + overviewElem = view.querySelector(".overview-container"), + overviewTextElem = overviewElem.querySelector(".overview-text"), + itemForDetails = + (enableTrackList(item) + ? overviewTextElem.classList.add("overview-text-tracklist") + : overviewTextElem.classList.remove("overview-text-tracklist"), + ("Timer" === item.Type && item.ProgramInfo) || item), + overview = itemForDetails.Overview; + overview + ? ((function (elem, overview) { + var scrollHeight, + textButton, + textElement = elem.querySelector(".overview-text"), + btnReadMore = elem.querySelector(".btnReadMore"); + (btnReadMore.innerHTML = _globalize.default.translate("More")), + overview + ? ((textElement.innerHTML = overview), + elem.classList.remove("hide"), + (overview = textElement.offsetHeight), + (scrollHeight = textElement.scrollHeight), + (textButton = textElement.closest("button")), + overview && scrollHeight && overview < scrollHeight + ? (_layoutmanager.default.tv + ? (textButton.removeAttribute("disabled"), + btnReadMore.classList.add("hide")) + : (textButton.setAttribute("disabled", "disabled"), + btnReadMore.classList.remove("hide")), + setScopedFocus(null, elem, !0)) + : (textButton.setAttribute("disabled", "disabled"), + btnReadMore.classList.add("hide"), + setScopedFocus(null, elem, !1))) + : (elem.classList.add("hide"), (textElement.innerHTML = "")); + })(overviewElem, overview ? _dom.default.stripScripts(overview) : ""), + "MusicAlbum" === itemForDetails.Type || + "Playlist" === itemForDetails.Type + ? overviewTextElem.classList.add("overview-twoline") + : overviewTextElem.classList.remove("overview-twoline")) + : overviewElem.classList.add("hide"), + (function (view, item) { + var directors = (item.People || []).filter(function (p) { + return "Director" === p.Type; + }), + html = directors + .map(function (p) { + return _layoutmanager.default.tv + ? "" + + _textencoding.default.htmlEncode(p.Name) + + "" + : '' + + _textencoding.default.htmlEncode(p.Name) + + ""; + }) + .join(", "), + elem = view.querySelector(".directors"); + (elem.innerHTML = + 1 < directors.length + ? _globalize.default.translate("DirectorsValue", html) + : _globalize.default.translate("DirectorValue", html)), + setScopedFocus( + view, + elem, + directors.length && !_layoutmanager.default.tv, + "nearest", + ), + directors.length + ? elem.classList.remove("hide") + : elem.classList.add("hide"); + })(view, itemForDetails), + reloadPlayButtons(instance, view, item), + (function (page, item) { + for ( + var btnPlaystates = page.querySelectorAll(".btnPlaystate"), + i = 0, + length = btnPlaystates.length; + i < length; + i++ + ) { + var btnPlaystate = btnPlaystates[i]; + _itemmanager.default.canMarkPlayed(item) + ? (btnPlaystate.classList.remove("hide"), + btnPlaystate.setItem(item)) + : (btnPlaystate.classList.add("hide"), btnPlaystate.setItem(null)); + } + var btnUserRatings = page.querySelectorAll(".btnUserRating"); + for (i = 0, length = btnUserRatings.length; i < length; i++) { + var btnUserRating = btnUserRatings[i]; + _itemmanager.default.canRate(item) + ? (btnUserRating.classList.remove("hide"), + btnUserRating.setItem(item)) + : (btnUserRating.classList.add("hide"), + btnUserRating.setItem(null)); + } + })(view, item), + setTrailerButtonVisibility(view, item), + "TvChannel" === item.Type + ? hideAll(view, "btnManualRecording", !0) + : hideAll(view, "btnManualRecording"), + item.CanDelete && !item.IsFolder && "MusicArtist" !== item.Type + ? hideAll(view, "btnDeleteItem", !0) + : hideAll(view, "btnDeleteItem"), + promises.push( + (function (instance, page, item, user) { + if (instance.currentRecordingFields) + return ( + instance.currentRecordingFields.refresh(item), Promise.resolve() + ); + return "Program" === item.Type && user.Policy.EnableLiveTvManagement + ? require(["recordingFields"]).then(function (responses) { + var responses = responses[0], + recordingFieldsElement = + page.querySelector(".mainDetailButtons"); + (instance.currentRecordingFields = new responses({ + parent: recordingFieldsElement, + program: item, + })), + _events.default.on( + instance.currentRecordingFields, + "recordingchanged", + onRecordingChanged.bind(instance), + ), + _events.default.on( + instance.currentRecordingFields, + "seriesrecordingchanged", + onRecordingChanged.bind(instance), + ); + }) + : Promise.resolve(); + })(instance, view, item, user), + ); + _itemmanager.default.getCommands(getCommandOptions(view, item, user)).length + ? hideAll(view, "btnMoreCommands", !0) + : hideAll(view, "btnMoreCommands"), + "Playlist" === item.Type || + ("BoxSet" === item.Type && apiClient.isMinServerVersion("4.8.0.16")) + ? hideAll(view, "btnSortItems", !0) + : hideAll(view, "btnSortItems"), + enableItemBackdropAsTopImage(itemForDetails) + ? view + .querySelector(".detailTextContainerInner") + .classList.remove("detailTextContainerInner-centered") + : view + .querySelector(".detailTextContainerInner") + .classList.add("detailTextContainerInner-centered"), + enableTvDetailImageLayout(item) + ? view + .querySelector(".detailTextContainer") + .classList.add("detailTextContainer-extrapadding") + : view + .querySelector(".detailTextContainer") + .classList.remove("detailTextContainer-extrapadding"); + overview = view.querySelector(".tagline"); + return ( + itemForDetails.Taglines && itemForDetails.Taglines.length + ? (overview.classList.remove("hide"), + (overview.innerHTML = _dom.default.stripScripts( + itemForDetails.Taglines[0], + ))) + : overview.classList.add("hide"), + "Person" === itemForDetails.Type && + ((overviewTextElem = view.querySelector(".birthDate")), + itemForDetails.PremiereDate + ? ((overviewElem = _datetime.default.toLocaleDateString( + new Date(Date.parse(itemForDetails.PremiereDate)), + { year: "numeric", month: "long", day: "numeric" }, + )), + (overviewElem = + itemForDetails.ProductionLocations && + itemForDetails.ProductionLocations.length + ? _globalize.default.translate( + "BornValueWithPlace", + overviewElem, + itemForDetails.ProductionLocations[0], + ) + : _globalize.default.translate("BornValue", overviewElem)), + (overviewTextElem.innerHTML = overviewElem), + overviewTextElem.classList.remove("hide")) + : overviewTextElem.classList.add("hide"), + (instance = view.querySelector(".deathDate")), + itemForDetails.EndDate + ? ((user = _datetime.default.toLocaleDateString( + new Date(Date.parse(itemForDetails.EndDate)), + { year: "numeric", month: "long", day: "numeric" }, + )), + (user = _globalize.default.translate("DiedValue", user)), + (instance.innerHTML = user), + instance.classList.remove("hide")) + : instance.classList.add("hide")), + (function (page, item) { + for ( + var itemTags = page.querySelector(".itemTags"), + tagElements = [], + tags = item.TagItems || [], + i = 0, + length = tags.length; + i < length; + i++ + ) { + var href = _approuter.default.getRouteUrl( + { + Name: tags[i].Name, + Type: "Tag", + ServerId: item.ServerId, + Id: tags[i].Id, + }, + { + itemTypes: + "Person" === item.Type || "MusicArtist" === item.Type + ? item.Type + : null, + }, + ); + tagElements.push( + '' + + _textencoding.default.htmlEncode(tags[i].Name) + + "", + ); + } + (itemTags.innerHTML = tagElements.join("")), + tagElements.length + ? page.querySelector(".tagsSection").classList.remove("hide") + : page.querySelector(".tagsSection").classList.add("hide"); + })(view, item), + Promise.all(promises) + ); + } + function onRecordingChanged() { + reloadItem(this, !0); + } + function renderPeopleItems(view, item, apiClient) { + view = view.querySelector(".peopleItems"); + if ("Person" !== item.Type && "MusicArtist" !== item.Type) + view.classList.add("hide"); + else { + view.classList.remove("hide"); + for ( + var sections = [], + sectionElems = + ("Person" === item.Type + ? (sections.push({ + name: _globalize.default.translate("HeaderUpcomingOnTV"), + type: "Program", + }), + sections.push({ + name: _globalize.default.translate("Movies"), + type: "Movie", + }), + sections.push({ + name: _globalize.default.translate("Shows"), + type: "Series", + }), + sections.push({ + name: _globalize.default.translate("Episodes"), + type: "Episode", + }), + sections.push({ + name: _globalize.default.translate("Trailers"), + type: "Trailer", + }), + sections.push({ + name: _globalize.default.translate("HeaderMusicVideos"), + type: "MusicVideo", + }), + sections.push({ + name: _globalize.default.translate("Videos"), + type: "Video", + })) + : "MusicArtist" === item.Type && + sections.push({ + name: _globalize.default.translate("HeaderMusicVideos"), + type: "MusicVideo", + }), + (view.innerHTML = sections + .map(function (section) { + var html = ""; + return ( + (html += + '
') + + '" + + '
' + + '
' + + "
" + + "
" + + "" + ); + }) + .join("")), + view.querySelectorAll(".personSection")), + i = 0, + length = sectionElems.length; + i < length; + i++ + ) + !(function (item, element, type, apiClient) { + switch (type) { + case "Program": + loadPeopleItems( + element, + item, + 0, + { + IncludeItemTypes: "Program", + Limit: 12, + SortBy: "StartDate", + Fields: "PrimaryImageAspectRatio", + }, + { + shape: "autooverflow", + fields: ["Name", "ChannelName", "AirTime"], + centerText: !0, + preferThumb: !0, + overlayText: !1, + showAirDateTime: !0, + }, + apiClient, + ); + break; + case "Movie": + loadPeopleItems( + element, + item, + 0, + { + IncludeItemTypes: "Movie", + Limit: 12, + SortBy: "SortName", + Fields: "PrimaryImageAspectRatio", + }, + { + shape: "autooverflow", + fields: ["Name", "ProductionYear"], + centerText: !0, + overlayText: !1, + }, + apiClient, + ); + break; + case "Video": + loadPeopleItems( + element, + item, + 0, + { + IncludeItemTypes: "Video", + Limit: 12, + SortBy: "SortName", + Fields: "PrimaryImageAspectRatio", + }, + { + shape: "autooverflow", + fields: ["Name", "ProductionYear"], + centerText: !0, + overlayText: !1, + }, + apiClient, + ); + break; + case "MusicVideo": + loadPeopleItems( + element, + item, + 0, + { + IncludeItemTypes: "MusicVideo", + Limit: 12, + SortBy: "SortName", + Fields: "PrimaryImageAspectRatio", + }, + { + shape: "autooverflow", + fields: ["Name", "ProductionYear"], + centerText: !0, + overlayPlayButton: !0, + }, + apiClient, + ); + break; + case "Game": + loadPeopleItems( + element, + item, + 0, + { + IncludeItemTypes: "Game", + Limit: 12, + SortBy: "SortName", + Fields: "PrimaryImageAspectRatio", + }, + { shape: "autooverflow", fields: ["Name"], centerText: !0 }, + apiClient, + ); + break; + case "Trailer": + loadPeopleItems( + element, + item, + 0, + { + IncludeItemTypes: "Trailer", + Limit: 12, + SortBy: "SortName", + Fields: "PrimaryImageAspectRatio", + }, + { + shape: "autooverflow", + fields: ["Name"], + centerText: !0, + overlayPlayButton: !0, + }, + apiClient, + ); + break; + case "Series": + loadPeopleItems( + element, + item, + 0, + { + IncludeItemTypes: "Series", + Limit: 12, + SortBy: "SortName", + Fields: "PrimaryImageAspectRatio", + }, + { shape: "autooverflow", fields: ["Name"], centerText: !0 }, + apiClient, + ); + break; + case "MusicAlbum": + loadPeopleItems( + element, + item, + 0, + { + IncludeItemTypes: "MusicAlbum", + Limit: 12, + SortBy: "ProductionYear,SortName", + SortOrder: "Descending,Ascending", + Fields: "ProductionYear,PrimaryImageAspectRatio", + }, + { + shape: "autooverflow", + playFromHere: !0, + fields: ["Name", "ProductionYear"], + centerText: !0, + overlayPlayButton: !0, + }, + apiClient, + ); + break; + case "MusicArtist": + loadPeopleItems( + element, + item, + 0, + { + IncludeItemTypes: "MusicArtist", + Limit: 8, + SortBy: "SortName", + Fields: "PrimaryImageAspectRatio", + }, + { + shape: "autooverflow", + playFromHere: !0, + fields: ["Name"], + centerText: !0, + overlayPlayButton: !0, + }, + apiClient, + ); + break; + case "Episode": + loadPeopleItems( + element, + item, + 0, + { + IncludeItemTypes: "Episode", + Limit: 6, + SortBy: + "SeriesSortName,ParentIndexNumber,IndexNumber,SortName", + Fields: "PrimaryImageAspectRatio", + }, + { + shape: "autooverflow", + fields: ["ParentName", "Name"], + centerText: !0, + overlayPlayButton: !0, + }, + apiClient, + ); + break; + case "Audio": + loadPeopleItems( + element, + item, + 0, + { + IncludeItemTypes: "Audio", + SortBy: "AlbumArtist,Album,SortName", + Fields: "PrimaryImageAspectRatio", + }, + { + playFromHere: !0, + fields: ["Name", "ParentName"], + action: "playallfromhere", + smallIcon: !0, + }, + apiClient, + ); + } + })( + item, + sectionElems[i], + sectionElems[i].getAttribute("data-type"), + apiClient, + ); + } + } + function loadPeopleItems(element, item, type, query, listOptions, apiClient) { + (query.SortOrder = "Ascending"), + (query.Recursive = !0), + (query.CollapseBoxSetItems = !1), + (query.Fields = "PrimaryImageAspectRatio,ProductionYear"), + "Person" === item.Type + ? (query.PersonIds = item.Id) + : "MusicArtist" === item.Type && (query.ArtistIds = item.Id), + (query.ImageTypeLimit = 1), + (query.EnableTotalRecordCount = !1), + apiClient + .getItems(apiClient.getCurrentUserId(), query) + .then(function (result) { + _cardbuilder.default.buildCards(result.Items, { + parentContainer: element, + itemsContainer: element.querySelector(".itemsContainer"), + shape: listOptions.shape, + fields: listOptions.fields, + overlayText: !1, + centerText: !0, + }); + }); + } + function onTrackSelectionsSubmit(e) { + return e.preventDefault(), !1; + } + function bindAll(view, selector, eventName, fn) { + for ( + var elems = view.querySelectorAll(selector), i = 0, length = elems.length; + i < length; + i++ + ) + elems[i].addEventListener(eventName, fn); + } + function executeCommandWithCommandProcessor(command, item, options) { + require(["commandProcessor"]).then(function (responses) { + return responses[0].executeCommand(command, [item], options); + }); + } + function onDataFetched(responses) { + var itemInfo = responses[0], + item = itemInfo.item, + itemInfo = itemInfo.mediaSources, + user = responses[1], + responses = _connectionmanager.default.getApiClient(item.ServerId), + view = this.view, + itemMainScrollSlider = + (("Person" === item.Type && _backdrop.default.hasBackdrop()) || + _backdrop.default.setBackdrops([item], { + enableAnimation: !0, + enablePrimaryImageBeforeInherited: + enableTvDetailImageLayout(item) && + "Season" !== item.Type && + "Episode" !== item.Type, + allowPrimaryImage: enableTvDetailImageLayout(item), + }), + this.updateDrawerState(), + view.querySelector(".itemMainScrollSlider")), + detailMainContainerParent = view.querySelector( + ".detailMainContainerParent", + ), + itemMainScrollSlider = + (_backdrop.default.hasBackdrop() + ? (_layoutmanager.default.tv + ? view.classList.add( + "darkContentContainer-tv", + "darkContentContainer-item", + ) + : view.classList.add("darkContentContainer-item"), + enableTvDetailImageLayout(item) + ? (itemMainScrollSlider.classList.add( + "itemMainScrollSlider-fade", + ), + detailMainContainerParent.classList.add( + "detailMainContainerParent-fade", + ), + backgroundContainer.classList.add( + "itemBackgroundContainer-brighter", + )) + : (itemMainScrollSlider.classList.remove( + "itemMainScrollSlider-fade", + ), + detailMainContainerParent.classList.remove( + "detailMainContainerParent-fade", + ), + backgroundContainer.classList.remove( + "itemBackgroundContainer-brighter", + )), + enableItemBackdropAsTopImage(item) + ? (backdropContainer.classList.add( + "backdropContainer-preventbackdrop", + ), + backgroundContainer.classList.add( + "itemBackgroundContainer", + "itemBackgroundContainer-preventbackdrop", + )) + : (backdropContainer.classList.remove( + "backdropContainer-preventbackdrop", + ), + backgroundContainer.classList.add("itemBackgroundContainer"), + backgroundContainer.classList.remove( + "itemBackgroundContainer-preventbackdrop", + ))) + : (view.classList.remove( + "darkContentContainer-item", + "darkContentContainer-tv", + ), + itemMainScrollSlider.classList.remove("itemMainScrollSlider-fade"), + detailMainContainerParent.classList.remove( + "detailMainContainerParent-fade", + ), + backgroundContainer.classList.remove( + "itemBackgroundContainer-brighter", + "itemBackgroundContainer", + "itemBackgroundContainer-preventbackdrop", + ), + backdropContainer.classList.remove( + "backdropContainer-preventbackdrop", + )), + (this.currentItem = item), + []), + detailMainContainerParent = + (this.sectionsInitialized || + ((this.sectionsInitialized = !0), + (function (instance, view, item) { + var section; + "Episode" === item.Type && + ((view = view.querySelector(".moreFromSeasonItemsContainer")), + ((section = view.closest(".verticalSection")).querySelector( + "h2", + ).innerHTML = _globalize.default.translate( + "MoreFromValue", + item.SeasonName, + )), + (view.fetchData = function (query) { + var apiClient, + item = this.currentItem; + return item.SeasonId && item.SeriesId + ? ((apiClient = + _connectionmanager.default.getApiClient(item)), + (query = Object.assign( + { + SeasonId: item.SeasonId, + UserId: apiClient.getCurrentUserId(), + Fields: + this.getRequestedItemFields() + + ",PrimaryImageAspectRatio", + }, + query, + )), + apiClient + .getEpisodes(item.SeriesId, query) + .then(function (result) { + return !query.StartIndex && result.Items.length < 2 + ? Promise.resolve({ TotalRecordCount: 0, Items: [] }) + : result; + })) + : Promise.resolve({ TotalRecordCount: 0, Items: [] }); + }.bind(instance)), + (view.parentContainer = section), + (view.getListOptions = getMoreFromSeasonListOptions), + (view.afterRefresh = function (totalResult) { + if (totalResult.Items.length) { + var item = this.currentItem; + if (item) { + var view = this.view; + if (view) { + var itemsContainer = view.querySelector( + ".moreFromSeasonItemsContainer", + ); + if (itemsContainer) { + var query, + index = itemsContainer.indexOfItemId(item.Id); + if (-1 === index) + return ( + (view = + _connectionmanager.default.getApiClient(item)), + (query = { + SeasonId: item.SeasonId, + UserId: view.getCurrentUserId(), + Fields: + this.getRequestedItemFields() + + ",PrimaryImageAspectRatio", + Limit: 0, + StartItemId: item.Id, + }), + view + .getEpisodes(item.SeriesId, query) + .then(function (result) { + (index = Math.max( + totalResult.TotalRecordCount - + result.TotalRecordCount, + 0, + )), + itemsContainer.scrollToIndex( + Math.min( + index + 1, + totalResult.TotalRecordCount - 1, + ), + { + behavior: "instant", + offset: "-padding-inline-start", + }, + !1, + ); + }) + ); + itemsContainer.scrollToIndex( + Math.min(index + 1, totalResult.TotalRecordCount - 1), + { + behavior: "instant", + offset: "-padding-inline-start", + }, + !1, + ); + } + } + } + } + }.bind(instance)), + view.classList.add("generalItemsContainer")); + })(this, view, item), + (function (instance, view, item) { + var section; + ("MusicArtist" !== item.Type && "MusicAlbum" !== item.Type) || + ((view = view.querySelector(".moreFromArtistItemsContainer")), + (section = view.closest(".verticalSection")), + "MusicArtist" === item.Type + ? (section.querySelector(".sectionTitle").innerHTML = + _globalize.default.translate("HeaderAppearsOn")) + : (section.querySelector(".sectionTitle").innerHTML = + _globalize.default.translate( + "MoreFromValue", + _textencoding.default.htmlEncode( + item.AlbumArtists[0].Name, + ), + )), + (view.fetchData = function (query) { + var item = this.currentItem; + if ( + "MusicAlbum" === item.Type && + !item.AlbumArtists && + !item.AlbumArtists.length + ) + return Promise.resolve({ TotalRecordCount: 0, Items: [] }); + query = Object.assign( + { + IncludeItemTypes: "MusicAlbum", + Recursive: !0, + SortBy: "ProductionYear,SortName", + SortOrder: "Descending", + Fields: + this.getRequestedItemFields() + + ",PrimaryImageAspectRatio,ProductionYear", + }, + query, + ); + var apiClient = _connectionmanager.default.getApiClient(item); + "MusicArtist" === item.Type + ? (query.ContributingArtistIds = item.Id) + : ((query.AlbumArtistIds = item.AlbumArtists[0].Id), + (query.ExcludeItemIds = item.Id)); + return apiClient.getItems(apiClient.getCurrentUserId(), query); + }.bind(instance)), + (view.parentContainer = section), + (view.getListOptions = getMoreFromArtistListOptions), + view.classList.add("generalItemsContainer")); + })(this, view, item), + itemMainScrollSlider.push( + (function (instance, item) { + var section = instance.view.querySelector(".seriesItemsSection"); + return "Series" === item.Type + ? getSeasons + .call(instance, { + EnableUserData: !1, + EnableTotalRecordCount: !1, + EnableImages: !1, + }) + .then(function (result) { + instance.seasonItems = result.Items; + item.Type; + setScopedFocus( + instance.view, + section.querySelector(".focusable"), + !0, + "nearest", + ); + var itemsContainer = + section.querySelector(".itemsContainer"), + seriesDisplay = + ((itemsContainer.parentContainer = section), + _usersettings.default.seriesDisplay()), + hasMultipleSeasons = + (_apiclient.default.isLocalItem(item) && + (seriesDisplay = ""), + 2 <= result.Items.length), + seriesDisplay = (instance.renderAllEpisodes = + "episodes" === seriesDisplay || + ("episodessingleseason" === seriesDisplay && + !hasMultipleSeasons)), + renderSeasonsWithTabs = + seriesDisplay && + hasMultipleSeasons && + _layoutmanager.default.tv, + sectionTitleElement = + section.querySelector(".sectionTitle"), + sectionTitleElement = + ((sectionTitleElement.innerHTML = seriesDisplay + ? 1 === result.Items.length + ? result.Items[0].Name + : _globalize.default.translate("Episodes") + : _globalize.default.translate("Seasons")), + seriesDisplay && hasMultipleSeasons + ? sectionTitleElement.classList.add("hide") + : sectionTitleElement.classList.remove("hide"), + section.querySelector(".detailSelectSeason")), + detailSelectSeasonContainer = section.querySelector( + ".detailSelectSeasonContainer", + ), + hasMultipleSeasons = + (seriesDisplay && + hasMultipleSeasons && + !renderSeasonsWithTabs + ? detailSelectSeasonContainer.classList.remove( + "hide", + ) + : detailSelectSeasonContainer.classList.add("hide"), + section.querySelector(".seasonTabs")); + seriesDisplay + ? (itemsContainer.classList.add( + "allEpisodesItemsContainer", + ), + renderSeasonsWithTabs + ? ((function (seasonTabsParent, items) { + var index; + items.length + ? ((index = 0), + (items = + '
' + + items + .map(function (item) { + var tabClass = + "emby-button emby-tab-button secondaryText detailSeasonTab", + tabClass = + (_layoutmanager.default.tv && + (tabClass += " emby-button-tv"), + '"); + return index++, tabClass; + }) + .join("") + + "
"), + (seasonTabsParent.innerHTML = items), + seasonTabsParent.classList.remove("hide")) + : (seasonTabsParent.classList.add("hide"), + (seasonTabsParent.innerHTML = "")); + })(hasMultipleSeasons, result.Items), + (instance.seasonTabs = section.querySelector( + ".seasonTabs-emby-tabs", + )), + instance.seasonTabs.addEventListener( + "tabchange", + function (e) { + var id, + seasonTabs = this.seasonTabs; + seasonTabs && + ((e = e.detail.selectedTabIndex), + (seasonTabs = seasonTabs.querySelector( + '.detailSeasonTab[data-index="' + + e + + '"]', + ))) && + ((id = seasonTabs.getAttribute("data-id")), + (e = (this.seasonItems || []).filter( + function (s) { + return s.Id === id; + }, + )[0])) && + scrollEpisodesToSeason(this, e.Id); + }.bind(instance), + )) + : (hasMultipleSeasons.classList.add("hide"), + (hasMultipleSeasons.innerHTML = ""), + (instance.seasonTabs = null))) + : ((hasMultipleSeasons.innerHTML = ""), + hasMultipleSeasons.classList.add("hide"), + (instance.seasonTabs = null)), + (instance.detailSelectSeason = sectionTitleElement) && + ((sectionTitleElement.getItems = + getSeasons.bind(instance)), + sectionTitleElement.addEventListener( + "change", + function (e) { + e = e.target.value; + e && scrollEpisodesToSeason(this, e); + }.bind(instance), + )), + (itemsContainer.fetchData = function (query) { + var item = this.currentItem, + apiClient = + _connectionmanager.default.getApiClient(item), + fields = + this.getRequestedItemFields() + + ",PrimaryImageAspectRatio"; + if (this.renderAllEpisodes) + return ( + (fields += + ",Overview,PremiereDate,ProductionYear,RunTimeTicks,SpecialEpisodeNumbers"), + (query = Object.assign( + { + UserId: apiClient.getCurrentUserId(), + Fields: fields, + Recursive: !0, + IsFolder: !1, + ParentId: item.Id, + }, + query, + )), + apiClient.isMinServerVersion("4.8") || + (query.IncludeItemTypes = "Episode"), + apiClient.getItems( + apiClient.getCurrentUserId(), + query, + ) + ); + return apiClient.getSeasons( + item.Id, + Object.assign( + { + UserId: apiClient.getCurrentUserId(), + Fields: fields, + }, + query, + ), + ); + }.bind(instance)), + (itemsContainer.getListOptions = function (items) { + var fields = ["Name"], + centerText = !0; + this.renderAllEpisodes && + (fields.push("Overview"), + fields.push("MediaInfo"), + (centerText = !1)); + return { + renderer: _cardbuilder.default, + options: { + shape: "auto", + scalable: !0, + centerText: centerText, + fields: fields, + overlayText: !1, + focusTransformTitleAdjust: !0, + }, + virtualScrollLayout: "horizontal-grid", + }; + }.bind(instance)), + seriesDisplay && + ((itemsContainer.afterRefresh = function ( + totalResult, + ) { + if (totalResult.Items.length) { + var item = this.currentItem; + if (item) { + var view = this.view; + if (view) { + var apiClient, + instance = this, + itemsContainer = view.querySelector( + ".childrenItemsContainer", + ); + if (itemsContainer) + return ( + (apiClient = + _connectionmanager.default.getApiClient( + item, + )), + getNextUpItems + .call(this, { Limit: 1 }) + .then(function (nextUpResult) { + var nextUpResult = + nextUpResult.Items[0], + detailSelectSeason = + view.querySelector( + ".detailSelectSeason", + ); + if (nextUpResult) { + onSeriesEpisodeFocusedOrScrolled( + instance, + nextUpResult, + ); + var select, + index = + itemsContainer.indexOfItemId( + nextUpResult.Id, + ); + if (-1 === index) + return ( + (nextUpResult = { + UserId: + apiClient.getCurrentUserId(), + Limit: 0, + StartItemId: nextUpResult.Id, + }), + apiClient + .getEpisodes( + item.SeriesId || item.Id, + nextUpResult, + ) + .then(function (result) { + (index = Math.max( + totalResult.TotalRecordCount - + result.TotalRecordCount, + 0, + )), + itemsContainer.scrollToIndex( + Math.min( + index, + totalResult.TotalRecordCount - + 1, + ), + { + behavior: "instant", + offset: + "-padding-inline-start", + }, + !1, + ); + }) + ); + itemsContainer.scrollToIndex( + index, + { + behavior: "instant", + offset: "-padding-inline-start", + }, + !1, + ); + } else + itemsContainer.scrollToIndex( + 0, + { + behavior: "instant", + offset: "-padding-inline-start", + }, + !1, + ), + detailSelectSeason && + (select = detailSelectSeason) + .getItems({ + StartIndex: 0, + Limit: 1, + }) + .then(function (result) { + result.Items.length && + select.setValues( + [result.Items[0].Id], + !1, + [result.Items[0]], + ); + }); + }) + ); + } + } + } + }.bind(instance)), + (detailSelectSeasonContainer = + instance.view.querySelector( + ".childrenItemsScroller", + )).addScrollEventListener( + function (e) { + var scrollSize, padding; + _layoutmanager.default.tv || + ((e = e.currentTarget), + (padding = e.getPadding()), + (padding = + e.getScrollLeft() + + padding.inlineStart + + padding.inlineEnd), + (scrollSize = e.getScrollWidth()), + (padding = Math.min(1, padding / scrollSize)), + (scrollSize = e.querySelector( + ".childrenItemsContainer", + )), + (e = scrollSize.getItems()), + (padding = Math.floor(padding * e.length)) < + e.length && + (e = scrollSize.getItem(padding)) && + onSeriesEpisodeFocusedOrScrolled(this, e)); + }.bind(instance), + {}, + ), + detailSelectSeasonContainer.addEventListener( + "focus", + function (e) { + var itemsContainer = + e.currentTarget.querySelector( + ".childrenItemsContainer", + ), + e = e.target.closest( + itemsContainer.getItemSelector(), + ), + itemsContainer = + itemsContainer.getItemFromElement(e); + itemsContainer && + onSeriesEpisodeFocusedOrScrolled( + this, + itemsContainer, + ); + }.bind(instance), + !0, + )); + }) + : (section.classList.add("hide"), Promise.resolve()); + })(this, item), + ), + (function (instance, item) { + var section = instance.view.querySelector( + ".collectionItemsSection", + ), + itemsContainer = section.querySelector(".itemsContainer"); + (itemsContainer.parentContainer = section), + (itemsContainer.fetchData = function (query) { + var item = this.currentItem; + if ("BoxSet" !== item.Type) + return Promise.resolve({ Items: [], TotalRecordCount: 0 }); + var apiClient = _connectionmanager.default.getApiClient(item), + sortBy = + _usersettings.default.itemSortBy(item.Id) || "default"; + "default" === sortBy && (sortBy = "DisplayOrder"); + apiClient.isMinServerVersion("4.8.0.16") || (sortBy = null); + var sortOrder = sortBy + ? _usersettings.default.itemSortOrder(item.Id) + : null; + return apiClient + .getItems( + apiClient.getCurrentUserId(), + Object.assign( + { + ParentId: item.Id, + ImageTypeLimit: 1, + Fields: + this.getRequestedItemFields() + + ",PrimaryImageAspectRatio,ProductionYear", + EnableTotalRecordCount: !1, + sortBy: sortBy, + sortOrder: sortOrder, + }, + query, + ), + ) + .then(function (result) { + for ( + var i = 0, length = result.Items.length; + i < length; + i++ + ) + result.Items[i].CollectionId = item.Id; + return result; + }); + }.bind(instance)), + (itemsContainer.afterRefresh = setSortLabelText.bind(instance)), + (itemsContainer.getListOptions = (function (id) { + return function (items) { + return { + renderer: _cardbuilder.default, + options: { + shape: "auto", + scalable: !0, + centerText: !0, + fields: ["Name", "ProductionYear"], + overlayText: !1, + collectionId: id, + }, + }; + }; + })(item.Id)), + itemsContainer.setAttribute("data-monitor", "CollectionItems"), + itemsContainer.setAttribute("data-monitorids", item.Id); + })(this, item), + (function (instance, view, item, apiClient) { + var headerText; + "MusicArtist" === item.Type && + ((headerText = view.querySelector(".artistSongsItemsHeader")), + (apiClient = _approuter.default.getRouteUrl("list", { + serverId: apiClient.serverId(), + itemTypes: "Audio", + artistId: item.Id, + })), + (item = ""), + (item = + ''), + (item = + (item = + (item += '

') + + _globalize.default.translate("Songs")) + "

"), + (headerText.innerHTML = item), + (apiClient = view.querySelector( + ".artistSongsItemsContainer", + )).classList.add("generalItemsContainer"), + (apiClient.fetchData = function (query) { + var item = this.currentItem, + item = _connectionmanager.default.getApiClient(item); + return item.getItems( + item.getCurrentUserId(), + Object.assign( + { + Recursive: !0, + IncludeItemTypes: "Audio", + ArtistIds: this.currentItem.Id, + SortBy: "PlayCount,SortName", + SortOrder: "Descending,Ascending", + ImageTypeLimit: 1, + Fields: + this.getRequestedItemFields() + + ",PrimaryImageAspectRatio", + }, + query, + ), + ); + }.bind(instance)), + (apiClient.getListOptions = getArtistSongsListOptions), + (apiClient.parentContainer = + apiClient.closest(".verticalSection"))); + })(this, view, item, responses), + (function (instance, item, apiClient) { + var section = instance.view.querySelector(".artistAlbumsSection"), + itemsContainer = + (setScopedFocus( + instance.view, + section.querySelector(".focusable"), + !0, + "nearest", + ), + section.querySelector(".itemsContainer")), + apiClient = + ((itemsContainer.parentContainer = section), + _approuter.default.getRouteUrl("list", { + serverId: apiClient.serverId(), + itemTypes: "MusicAlbum", + albumArtistId: item.Id, + })); + (section.querySelector(".sectionTitleTextButton").href = apiClient), + itemsContainer.setAttribute( + "data-virtualscrolllayout", + "horizontal-grid", + ), + (itemsContainer.fetchData = function (query) { + var item = this.currentItem; + if ("MusicArtist" !== item.Type) + return Promise.resolve({ Items: [], TotalRecordCount: 0 }); + var apiClient = _connectionmanager.default.getApiClient(item); + return ( + ((query = Object.assign( + { + IncludeItemTypes: "MusicAlbum", + Recursive: !0, + SortBy: "ProductionYear,SortName", + SortOrder: "Descending,Ascending", + ImageTypeLimit: 1, + Fields: + this.getRequestedItemFields() + + ",PrimaryImageAspectRatio,ProductionYear", + }, + query, + )).AlbumArtistIds = item.Id), + apiClient.getItems(apiClient.getCurrentUserId(), query) + ); + }.bind(instance)), + (itemsContainer.getListOptions = + getMusicArtistChildrenListOptions); + })(this, item, responses), + (function (instance, item, apiClient) { + var trackList = instance.view.querySelector(".trackList"); + (trackList.parentContainer = trackList), + "Season" === item.Type + ? ((trackList.fetchData = (function ( + serverId, + seriesId, + seasonId, + ) { + return function (query) { + var apiClient = + _connectionmanager.default.getApiClient(serverId); + return apiClient.getEpisodes( + seriesId, + Object.assign( + { + SeasonId: seasonId, + ImageTypeLimit: 1, + UserId: apiClient.getCurrentUserId(), + Fields: + "Overview,PrimaryImageAspectRatio,PremiereDate,ProductionYear", + }, + query, + ), + ); + }; + })(apiClient.serverId(), item.SeriesId, item.Id)), + (trackList.getListOptions = (function (item) { + return function () { + return { + renderer: _listview.default, + options: { + showIndexNumber: !1, + imageSize: "large", + highlight: !1, + action: "link", + imagePlayButton: !_layoutmanager.default.tv, + includeParentInfoInTitle: !1, + enableSpecialEpisodePrefix: 0 !== item.IndexNumber, + itemClass: "detailsListItem", + fields: ["Name", "Overview"], + }, + virtualScrollLayout: "vertical-list", + }; + }; + })(item)), + trackList.setAttribute( + "data-virtualscrolllayout", + "vertical-grid", + ), + trackList.classList.add("padded-bottom-page")) + : "MusicAlbum" === item.Type + ? ((trackList.fetchData = function (query) { + var item = this.currentItem, + apiClient = _connectionmanager.default.getApiClient(item), + includeOverview = !0 === item.SupportsResume, + fields = + this.getRequestedItemFields() + + ",PrimaryImageAspectRatio"; + includeOverview && (fields += ",Overview"); + return apiClient.getItems( + apiClient.getCurrentUserId(), + Object.assign({ + ParentId: item.Id, + Fields: fields, + ImageTypeLimit: 1, + SortBy: null, + EnableTotalRecordCount: !1, + }), + ); + }.bind(instance)), + (trackList.getListOptions = ( + !0 === item.SupportsResume + ? function (item) { + return function (items) { + var fields = []; + return ( + (function (items) { + for ( + var i = 0, length = items.length; + i < length; + i++ + ) { + var item = items[i]; + if ( + "Audio" !== item.MediaType || + item.SupportsResume + ) + return 1; + } + return; + })(items) && fields.push("Overview"), + "Playlist" === item.Type && + fields.push("ParentName"), + fields.push("Name"), + { + renderer: _listview.default, + options: { + showIndexNumberLeft: !1, + highlight: !1, + action: "link", + dragHandle: !1, + image: !0, + imageSize: "medium", + showIndexNumber: !0, + artist: "auto", + imagePlayButton: !_layoutmanager.default.tv, + showIndex: "MusicAlbum" === item.Type, + fields: fields, + index: "disc", + containerAlbumArtists: + "MusicAlbum" === item.Type + ? item.AlbumArtists + : null, + playAction: "playallfromhere", + includeParentInfoInTitle: !1, + itemClass: "detailsListItem", + autoHideMediaInfo: !1, + enableSideMediaInfo: !0, + }, + virtualScrollLayout: "vertical-list", + commandOptions: { openAlbum: !1 }, + } + ); + }; + } + : getPlaylistListOptionsFn + )(item)), + trackList.classList.add("generalItemsContainer")) + : "Playlist" === item.Type && + ((trackList.fetchData = function (query) { + var currentItem = this.currentItem, + apiClient = + _connectionmanager.default.getApiClient(currentItem), + itemId = currentItem.Id, + currentItem = + _usersettings.default.itemSortBy(itemId) || "default"; + "default" === currentItem && + (currentItem = "ListItemOrder"); + var sortOrder = currentItem + ? _usersettings.default.itemSortOrder(itemId) + : null; + return apiClient + .getItems( + apiClient.getCurrentUserId(), + Object.assign( + { + ParentId: itemId, + Fields: + "PrimaryImageAspectRatio,Overview,PremiereDate,ProductionYear,OfficialRating,CommunityRating", + ImageTypeLimit: 1, + SortBy: currentItem, + SortOrder: sortOrder, + }, + query, + ), + ) + .then(function (result) { + for ( + var i = 0, length = result.Items.length; + i < length; + i++ + ) + result.Items[i].PlaylistId = itemId; + return result; + }); + }.bind(instance)), + (trackList.getListOptions = getPlaylistListOptionsFn(item)), + trackList.setAttribute("data-monitor", "PlaylistItems"), + trackList.setAttribute("data-monitorids", item.Id), + trackList.setAttribute( + "data-virtualscrolllayout", + "vertical-grid", + ), + trackList.classList.add("padded-bottom-page"), + (trackList.afterRefresh = setSortLabelText.bind(instance)), + trackList.classList.add("generalItemsContainer")); + _layoutmanager.default.tv || + ("Playlist" !== item.Type && "MusicAlbum" !== item.Type) + ? trackList.classList.remove("tracklist-topmargin") + : trackList.classList.add("tracklist-topmargin"); + _layoutmanager.default.tv && "Season" === item.Type + ? trackList.classList.add("tracklist-sidemargin") + : trackList.classList.remove("tracklist-sidemargin"); + })(this, item, responses), + (function (instance, view, item, user) { + (_itemmanager.default.canAddToCollection(item, user) || + _itemmanager.default.canAddToPlaylist(item)) && + "Season" !== item.Type && + (((user = view.querySelector( + ".appearsOnListsItemsContainer", + )).fetchData = function (query) { + var item = this.currentItem, + apiClient = _connectionmanager.default.getApiClient(item); + return ( + (query = Object.assign( + { + fields: + this.getRequestedItemFields() + + ",PrimaryImageAspectRatio", + IncludeItemTypes: "Playlist,BoxSet", + Recursive: !0, + SortBy: "SortName", + ListItemIds: item.Id, + }, + query, + )), + apiClient.getItems(apiClient.getCurrentUserId(), query) + ); + }.bind(instance)), + (user.getListOptions = getAppearsOnListsListOptions), + (user.parentContainer = user.closest(".verticalSection")), + user.classList.add("generalItemsContainer")); + })(this, view, item, user), + (function (instance, view) { + view = view.querySelector(".peopleItemsContainer"); + (view.fetchData = (function (instance) { + return function (query) { + var serverId = instance.currentItem.ServerId, + people = (instance.currentItem.People || []).filter( + function (p) { + return ( + (p.ServerId = serverId), + "Person" !== p.Type && + ((p.PersonType = p.Type), (p.Type = "Person")), + !0 + ); + }, + ), + totalRecordCount = people.length; + return ( + query && + ((people = people.slice(query.StartIndex || 0)), + query.Limit) && + people.length > query.Limit && + (people.length = query.Limit), + Promise.resolve({ + Items: people, + TotalRecordCount: totalRecordCount, + }) + ); + }; + })(instance)), + (view.parentContainer = view.closest(".verticalSection")), + (view.getListOptions = getPeopleListOptions), + view.classList.add("generalItemsContainer"); + })(this, view), + (function (instance, view, item) { + _itemhelper.default.supportsSimilarItems(item) && + (((view = view.querySelector( + ".similarItemsContainer", + )).fetchData = function () { + var item = this.currentItem, + apiClient = _connectionmanager.default.getApiClient(item), + options = { + Limit: 12, + UserId: apiClient.getCurrentUserId(), + ImageTypeLimit: 1, + Fields: + this.getRequestedItemFields() + + ",PrimaryImageAspectRatio,ProductionYear", + EnableTotalRecordCount: !1, + }; + ("Program" === item.Type || + ("Timer" === item.Type && + item.ProgramId && + !item.IsSports)) && + (options.GroupProgramsBySeries = !0); + "MusicAlbum" === item.Type && + item.AlbumArtists && + item.AlbumArtists.length && + (options.ExcludeArtistIds = item.AlbumArtists[0].Id); + item = "Timer" === item.Type ? item.ProgramId : item.Id; + return apiClient.getSimilarItems(item, options); + }.bind(instance)), + (view.parentContainer = view.closest(".verticalSection")), + (view.getListOptions = (function (item) { + return function (items) { + var fields = ["Name"]; + return ( + ("Movie" !== item.Type && + "Trailer" !== item.Type && + "Program" !== item.Type && + "Game" !== item.Type) || + fields.push("ProductionYear"), + ("MusicAlbum" !== item.Type && "Game" !== item.Type) || + fields.push("ParentName"), + "Program" === item.Type && fields.unshift("ParentName"), + { + renderer: _cardbuilder.default, + options: { + shape: "auto", + lines: + "Game" === item.Type + ? 3 + : "Program" === item.Type + ? 2 + : null, + centerText: !0, + fields: fields, + overlayPlayButton: !0, + overlayText: !1, + multiSelect: + "Program" !== item.Type && "Timer" !== item.Type, + contextMenu: + "Program" !== item.Type && "Timer" !== item.Type, + draggable: + "Program" !== item.Type && "Timer" !== item.Type, + focusTransformTitleAdjust: !0, + }, + virtualScrollLayout: "horizontal-grid", + } + ); + }; + })(item)), + view.classList.add("generalItemsContainer")); + })(this, view, item), + (function (instance, view, item, apiClient) { + _itemhelper.default.supportsSimilarItemsOnLiveTV(item, apiClient) && + (((item = view.querySelector( + ".similarOnLiveTVItemsContainer", + )).fetchData = function () { + var item = this.currentItem, + apiClient = _connectionmanager.default.getApiClient(item); + return apiClient.getSimilarItems(item.Id, { + userId: apiClient.getCurrentUserId(), + limit: 12, + fields: + this.getRequestedItemFields() + + ",PrimaryImageAspectRatio,ProductionYear", + IncludeItemTypes: "Program", + EnableTotalRecordCount: !1, + GroupProgramsBySeries: !0, + }); + }.bind(instance)), + (item.parentContainer = item.closest(".verticalSection")), + (item.getListOptions = getMoreLikeThisOnLiveTVListOptions), + item.classList.add("generalItemsContainer")); + })(this, view, item, responses), + (function (instance, view, item) { + ("Series" === item.Type || + "Program" === item.Type || + ("Timer" === item.Type && item.ProgramId)) && + (((view = view.querySelector( + ".seriesScheduleItemsContainer", + )).fetchData = function (query) { + var item = this.currentItem, + apiClient = _connectionmanager.default.getApiClient(item); + (query = Object.assign( + { + UserId: apiClient.getCurrentUserId(), + HasAired: !1, + SortBy: "StartDate", + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Thumb,Backdrop", + EnableUserData: !1, + Fields: "PrimaryImageAspectRatio,ChannelInfo", + }, + query, + )), + "Program" === item.Type || + ("Timer" === item.Type && item.ProgramId) + ? item.AsSeries + ? (query.SeriesFromProgramId = item.Id) + : ((query.ShowingsFromProgramId = + item.ProgramId || item.Id), + (query.ExcludeItemIds = item.ProgramId || item.Id)) + : (query.LibrarySeriesId = item.Id); + return apiClient.getLiveTvPrograms(query); + }.bind(instance)), + (view.parentContainer = view.closest(".verticalSection")), + (view.getListOptions = function (items) { + return { + renderer: _cardbuilder.default, + options: { + preferThumb: "auto", + shape: "autooverflow", + fields: ["Name", "ChannelName", "AirTime"], + centerText: !0, + overlayText: !1, + overlayPlayButton: !1, + showAirDateTime: !0, + multiSelect: !1, + draggable: !1, + focusTransformTitleAdjust: !0, + }, + virtualScrollLayout: "horizontal-grid", + }; + }.bind(instance)), + view.classList.add("generalItemsContainer"), + ("Program" !== item.Type && "Timer" !== item.Type) || + (item.AsSeries + ? (view.parentContainer.querySelector( + ".sectionTitle", + ).innerHTML = _globalize.default.translate("Showings")) + : (view.parentContainer.querySelector( + ".sectionTitle", + ).innerHTML = _globalize.default.translate( + "HeaderOtherShowings", + )))); + })(this, view, item), + (function (instance, view, item) { + _itemhelper.default.supportsExtras(item) && + (((item = view.querySelector(".extrasItemsContainer")).fetchData = + function (query) { + var item = this.currentItem, + apiClient = _connectionmanager.default.getApiClient(item); + return apiClient + .getSpecialFeatures(apiClient.getCurrentUserId(), item.Id) + .then(function (items) { + var totalRecordCount = items.length; + return ( + query && + ((items = items.slice(query.StartIndex || 0)), + query.Limit) && + items.length > query.Limit && + (items.length = query.Limit), + { Items: items, TotalRecordCount: totalRecordCount } + ); + }); + }.bind(instance)), + (item.parentContainer = item.closest(".verticalSection")), + (item.getListOptions = getExtrasListOptions), + item.classList.add("generalItemsContainer")); + })(this, view, item), + (function (instance, view) { + view = view.querySelector(".chaptersItemsContainer"); + (view.fetchData = function (query) { + var item = this.currentItem, + chapters = item.Chapters || []; + chapters.length && + "Video" === item.MediaType && + !chapters[0].ImageTag && + (chapters = []); + var videoStream = + ( + ((item.MediaSources || [])[0] || {}).MediaStreams || [] + ).filter(function (i) { + return "Video" === i.Type; + })[0] || {}, + aspect = null; + videoStream.Width && + videoStream.Height && + (aspect = videoStream.Width / videoStream.Height); + for (var i = 0, length = chapters.length; i < length; i++) { + var chapter = chapters[i]; + (chapter.Id = item.Id), + (chapter.Type = item.Type), + (chapter.ServerId = item.ServerId), + (chapter.MediaType = item.MediaType), + (chapter.PrimaryImageAspectRatio = aspect), + null == chapter.ChapterIndex && (chapter.ChapterIndex = i); + } + videoStream = (chapters = (function (chapters) { + for ( + var list = [], i = 0, length = chapters.length; + i < length; + i++ + ) { + var chapter = chapters[i]; + (chapter.MarkerType && "Chapter" !== chapter.MarkerType) || + list.push(chapter); + } + return list; + })(chapters)).length; + query && + ((chapters = chapters.slice(query.StartIndex || 0)), + query.Limit) && + chapters.length > query.Limit && + (chapters.length = query.Limit); + return Promise.resolve({ + Items: chapters, + TotalRecordCount: videoStream, + }); + }.bind(instance)), + (view.parentContainer = view.closest(".verticalSection")), + (view.getListOptions = getChaptersListOptions), + view.classList.add("generalItemsContainer"); + })(this, view), + (function (instance, view) { + view = view.querySelector(".additionalPartsItemsContainer"); + (view.fetchData = function () { + var item = this.currentItem; + if ((item.PartCount || 1) < 2) + return Promise.resolve({ TotalRecordCount: 0, Items: [] }); + var apiClient = _connectionmanager.default.getApiClient(item); + return apiClient.getAdditionalVideoParts( + apiClient.getCurrentUserId(), + item.Id, + ); + }.bind(instance)), + (view.parentContainer = view.closest(".verticalSection")), + (view.getListOptions = getAdditionalPartsListOptions), + view.classList.add("generalItemsContainer"); + })(this, view), + (function (instance, view, item) { + "TvChannel" === item.Type && + (((item = view.querySelector( + ".programGuideItemsContainer", + )).fetchData = function (query) { + var item = this.currentItem, + apiClient = _connectionmanager.default.getApiClient(item); + return apiClient.getLiveTvPrograms( + Object.assign( + { + ChannelIds: item.Id, + UserId: apiClient.getCurrentUserId(), + HasAired: !1, + SortBy: "StartDate", + ImageTypeLimit: 1, + EnableUserData: !1, + Fields: "PrimaryImageAspectRatio,Overview", + }, + query, + ), + ); + }.bind(instance)), + (item.parentContainer = item.closest(".programGuideSection")), + (item.getListOptions = getProgramGuideListOptions), + item.classList.add("generalItemsContainer")); + })(this, view, item), + (function (instance, view, item) { + "SeriesTimer" === item.Type && + (((item = view.querySelector( + ".seriesTimerScheduleItemsContainer", + )).fetchData = function () { + var item = this.currentItem, + apiClient = _connectionmanager.default.getApiClient(item); + return apiClient.getLiveTvTimers({ + UserId: apiClient.getCurrentUserId(), + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Thumb", + SortBy: "StartDate", + EnableTotalRecordCount: !1, + EnableUserData: !1, + SeriesTimerId: item.Id, + Fields: "ChannelInfo,ChannelImage", + }); + }.bind(instance)), + (item.parentContainer = item.closest(".verticalSection")), + (item.getListOptions = getSeriesTimerListOptions), + item.classList.add("generalItemsContainer")); + })(this, view, item), + (function (instance, view, item) { + var itemsContainer = (function (view, item) { + var sideImageContainer = view.querySelector( + ".detailImageContainer-side", + ), + view = view.querySelector(".detailImageContainer-main"); + return enableTrackList(item) + ? (view.classList.add("hide"), + sideImageContainer.classList.remove("hide"), + sideImageContainer) + : (view.classList.remove("hide"), + sideImageContainer.classList.add("hide"), + view); + })(view, item), + detailImage = itemsContainer, + view = view.querySelector(".detailImageContainer-main"); + enableTrackList(item) || + ("Person" !== item.Type && + "BoxSet" !== item.Type && + "Season" !== item.Type && + "TvChannel" !== item.Type && + "Playlist" !== item.Type) || + detailImage.classList.add("detailImageContainer-small"); + "MusicAlbum" !== item.Type && + "Playlist" !== item.Type && + view.classList.add("detailImageContainer-main-extrabottommargin"); + _layoutmanager.default.tv + ? view.classList.add("detailImageContainer-main-tv") + : view.classList.remove("detailImageContainer-main-tv"); + enableItemBackdropAsTopImage(item) + ? view.classList.add("detailImageContainer-hidemobile") + : view.classList.remove("detailImageContainer-hidemobile"); + view = _imageloader.default.getShape([item], {}); + detailImage.classList.remove( + "detailImageContainer-backdrop", + "detailImageContainer-square", + "detailImageContainer-portrait", + "detailImageContainer-fourThree", + "detailImageContainer-banner", + ), + view && detailImage.classList.add("detailImageContainer-" + view); + "TvChannel" === item.Type || + "Season" === item.Type || + "MusicAlbum" === item.Type || + "Playlist" === item.Type + ? detailImage.classList.add("detailImage-nomarginleft") + : detailImage.classList.remove("detailImage-nomarginleft"); + (itemsContainer.fetchData = function () { + var item = this.currentItem, + items = []; + !item || enableTvDetailImageLayout(item) || items.push(item); + return Promise.resolve({ + Items: items, + TotalRecordCount: items.length, + }); + }.bind(instance)), + ((itemsContainer.parentContainer = + itemsContainer).getListOptions = (function ( + itemType, + cardClass, + imageContainerClassName, + ) { + (imageContainerClassName = imageContainerClassName + .split(" ") + .filter(function (c) { + return c.includes("detailImage"); + }) + .join(" ")).includes("detailImageContainer-side") && + (imageContainerClassName += " item-fixed-side"); + return ( + (imageContainerClassName += " imageWidthTest"), + function (items) { + return { + renderer: _cardbuilder.default, + options: { + overlayText: !0, + fields: [], + action: "none", + imageClass: "detailImage", + imageWidthTestClass: imageContainerClassName, + multiSelect: !1, + contextMenu: !1, + ratingButton: !1, + playedButton: !1, + cardClass: cardClass, + defaultIcon: !0, + typeIndicator: !1, + playedIndicator: !1, + syncIndicator: !1, + timerIndicator: !1, + randomDefaultBackground: !1, + staticElement: !0, + progress: + "Program" === itemType || "Timer" === itemType, + enableUserData: !1, + draggable: !1, + moreButton: !1, + programIndicators: !1, + keepImageAnimation: !0, + }, + virtualScrollLayout: "vertical-grid", + }; + } + ); + })(item.Type, "detailImageContainerCard", detailImage.className)), + (itemsContainer.afterRefresh = afterDetailImageRefreshed), + itemsContainer.classList.add("generalItemsContainer"), + enableTvDetailImageLayout(item) && + itemsContainer.classList.add("hide"); + })(this, view, item)), + view.querySelector(".details-additionalContent")), + detailMainContainer = + ("TvChannel" === item.Type || + "Playlist" === item.Type || + "Season" === item.Type + ? detailMainContainerParent.classList.remove("padded-bottom-page") + : detailMainContainerParent.classList.add("padded-bottom-page"), + this.mainSection), + detailMainContainerParent = + (_backdrop.default.hasBackdrop() + ? (detailMainContainerParent.classList.add( + "details-additionalContent-withbackdrop", + ), + detailMainContainer.classList.add( + "detailMainContainer-withbackdrop", + )) + : (detailMainContainerParent.classList.remove( + "details-additionalContent-withbackdrop", + ), + detailMainContainer.classList.remove( + "detailMainContainer-withbackdrop", + )), + enableTrackList(item) + ? "Season" === item.Type + ? setTitle(item) + : setTitle(item, 0, _layoutmanager.default.tv) + : setTitle( + item, + 0, + "float" === getLogoPlacement(item) && "MusicAlbum" !== item.Type, + ), + view.querySelector(".topDetailsMain")), + itemSideContainer = view.querySelector(".item-fixed-side"), + mainDetailButtons = view.querySelector(".mainDetailButtons"); + return ( + enableTrackList(item) + ? ("MusicAlbum" === item.Type + ? detailMainContainer.classList.add( + "detailMainContainer-marginleft", + ) + : detailMainContainer.classList.remove( + "detailMainContainer-marginleft", + ), + detailMainContainerParent.classList.remove( + "topDetailsMain-graphic", + "topDetailsMain-graphic-tv", + ), + detailMainContainer.classList.remove( + "detailMainContainer-withitembackdrop", + "detailMainContainer-vertical", + ), + itemSideContainer.classList.remove("hide"), + _layoutmanager.default.tv && "Season" !== item.Type + ? detailMainContainerParent.classList.add( + "padded-left", + "padded-left-page", + "padded-right", + ) + : detailMainContainerParent.classList.remove( + "padded-left", + "padded-left-page", + "padded-right", + )) + : (detailMainContainer.classList.remove( + "detailMainContainer-marginleft", + ), + enableItemBackdropAsTopImage(item) + ? (detailMainContainer.classList.add( + "detailMainContainer-withitembackdrop", + ), + detailMainContainer.classList.remove( + "detailMainContainer-vertical", + )) + : (detailMainContainer.classList.remove( + "detailMainContainer-withitembackdrop", + ), + detailMainContainer.classList.add( + "detailMainContainer-vertical", + )), + enableTvDetailImageLayout(item) + ? _layoutmanager.default.tv + ? detailMainContainerParent.classList.add( + "topDetailsMain-graphic", + "topDetailsMain-graphic-tv", + ) + : (detailMainContainerParent.classList.add( + "topDetailsMain-graphic", + ), + detailMainContainerParent.classList.remove( + "topDetailsMain-graphic-tv", + )) + : detailMainContainerParent.classList.remove( + "topDetailsMain-graphic", + "topDetailsMain-graphic-tv", + ), + itemSideContainer.classList.add("hide"), + detailMainContainerParent.classList.remove( + "padded-left", + "padded-left-page", + "padded-right", + )), + renderName( + this, + item, + responses, + user, + view.querySelectorAll(".nameContainer"), + ), + (function (view, item, apiClient) { + var imgUrl, + usePrimaryImage, + screenWidth = screen.availWidth, + itemBackdropContainerElement = view.querySelector( + ".itemBackdropContainer", + ), + itemBackdropElement = + itemBackdropContainerElement.querySelector(".itemBackdrop"); + enableItemBackdropAsTopImage(item) + ? (itemBackdropContainerElement.classList.remove("hide"), + (usePrimaryImage = + ("Video" === item.MediaType && + "Movie" !== item.Type && + "Trailer" !== item.Type) || + (item.MediaType && "Video" !== item.MediaType) || + "MusicAlbum" === item.Type || + "Playlist" === item.Type), + "Program" === item.Type && item.ImageTags && item.ImageTags.Thumb + ? (imgUrl = apiClient.getImageUrl(item.Id, { + type: "Thumb", + index: 0, + maxWidth: screenWidth, + tag: item.ImageTags.Thumb, + EnableImageEnhancers: !1, + })) + : usePrimaryImage && item.ImageTags && item.ImageTags.Primary + ? (imgUrl = apiClient.getImageUrl(item.Id, { + type: "Primary", + index: 0, + maxWidth: screenWidth, + tag: item.ImageTags.Primary, + EnableImageEnhancers: !1, + })) + : item.BackdropImageTags && item.BackdropImageTags.length + ? (imgUrl = apiClient.getImageUrl(item.Id, { + type: "Backdrop", + index: 0, + maxWidth: screenWidth, + tag: item.BackdropImageTags[0], + })) + : item.ParentBackdropItemId && + item.ParentBackdropImageTags && + item.ParentBackdropImageTags.length + ? (imgUrl = apiClient.getImageUrl(item.ParentBackdropItemId, { + type: "Backdrop", + index: 0, + tag: item.ParentBackdropImageTags[0], + maxWidth: screenWidth, + })) + : item.ImageTags && item.ImageTags.Thumb + ? (imgUrl = apiClient.getImageUrl(item.Id, { + type: "Thumb", + index: 0, + maxWidth: screenWidth, + tag: item.ImageTags.Thumb, + EnableImageEnhancers: !1, + })) + : item.ImageTags && + item.ImageTags.Primary && + (imgUrl = apiClient.getImageUrl(item.Id, { + type: "Primary", + index: 0, + maxWidth: screenWidth, + tag: item.ImageTags.Primary, + EnableImageEnhancers: !1, + })), + "TvChannel" === item.Type && + itemBackdropContainerElement.classList.add( + "itemBackdropContainer-small", + ), + (usePrimaryImage = view.querySelector(".itemMainScrollSlider")), + _layoutmanager.default.tv + ? usePrimaryImage.classList.remove( + "itemMainScrollSlider-moveup", + "itemMainScrollSlider-nopaddingtop", + ) + : "TvChannel" !== item.Type && + enableItemBackdropAsTopImage(item) && + usePrimaryImage.classList.add( + "itemMainScrollSlider-nopaddingtop", + ), + ("TvChannel" !== item.Type && "Person" !== item.Type) || + itemBackdropElement.classList.add("itemBackdrop-contain"), + (itemBackdropElement.style.backgroundImage = imgUrl + ? "url('" + imgUrl + "')" + : "")) + : itemBackdropContainerElement.classList.add("hide"); + })(view, item, responses), + renderTrackSelections(view, this, item, user, !0, itemInfo), + itemMainScrollSlider.push( + renderDetails(this, view, item, responses, user), + ), + (function (view, user, item) { + if (_servicelocator.appHost.supports("sync")) + for ( + var canSync = _itemmanager.default.canSync(item, user), + buttons = view.querySelectorAll(".btnSyncDownload"), + i = 0, + length = buttons.length; + i < length; + i++ + ) + buttons[i].setItem(item), + canSync + ? buttons[i].classList.remove("hide") + : buttons[i].classList.add("hide"); + })(view, user, item), + Promise.all(itemMainScrollSlider).then(function () { + return ( + enableTrackList(item) || + (function (elem) { + for ( + var btns = elem.querySelectorAll(".detailButton"), + i = 0, + length = btns.length; + i < length; + i++ + ) { + var btn = btns[i]; + if (_focusmanager.default.isCurrentlyFocusable(btn)) + return setScopedFocus(null, elem, !0); + } + setScopedFocus(null, elem, !1); + })(mainDetailButtons), + [item, user] + ); + }) + ); + } + function getItemWithMediaSource(instance, apiClient) { + return (function (instance, apiClient) { + var options; + return (instance = instance.params).seriesTimerId + ? apiClient.getLiveTvSeriesTimer(instance.seriesTimerId) + : instance.timerId + ? apiClient.getLiveTvTimer(instance.timerId) + : ((options = {}), + "true" === instance.asSeries + ? (options.AsSeries = !0) + : (options.Fields = "ShareLevel"), + apiClient.getItem( + apiClient.getCurrentUserId(), + instance.id, + options, + )); + })(instance, apiClient).then(function (item) { + var playbackMediaSourcesPromise = isRenderingTrackSelections(item) + ? _playbackmanager.default.getPlaybackMediaSources(item) + : Promise.resolve([]); + return playbackMediaSourcesPromise.then(function (mediaSources) { + return { item: item, mediaSources: mediaSources }; + }); + }); + } + function startDataLoad(instance) { + var params = instance.params, + apiClient = _connectionmanager.default.getApiClient(params.serverId), + params = Promise.all([ + getItemWithMediaSource(instance, apiClient), + apiClient.getCurrentUser(), + ]).then(onDataFetched.bind(instance), function (err) { + return ( + console.log("error loading item: " + err), + (function (instance, apiClient) { + (instance = instance.view) + .querySelector(".details-additionalContent") + .classList.add("hide"), + (html = "

Content no longer available.

"); + var apiClient = _approuter.default.getRouteUrl("home", { + serverId: apiClient.serverId(), + }), + html = + (html += + '') + + _globalize.default.translate("Home") + + "
"; + (instance.querySelector(".detailMainContainer").innerHTML = html), + _focusmanager.default.focus( + instance.querySelector(".btnHomeItemNotFound"), + ); + })(instance, apiClient), + Promise.reject(err) + ); + }); + instance.dataPromise = params; + } + function playCurrentItem(instance, mode) { + var item; + _multiselect.default.canPlay() + ? _multiselect.default.play() + : ((item = instance.currentItem), + ((instance = (function (view, startPositionTicks) { + var audioStreamIndex = + view.querySelector(".selectAudio").value || null; + return { + startPositionTicks: startPositionTicks, + mediaSourceId: view.querySelector(".selectSource").value, + audioStreamIndex: audioStreamIndex, + subtitleStreamIndex: view.querySelector(".selectSubtitles").value, + }; + })( + instance.view, + item.UserData && "resume" === mode ? null : 0, + )).items = [item]), + _playbackmanager.default.play(instance)); + } + function onPlayClick(e) { + playCurrentItem(this, e.currentTarget.getAttribute("data-mode")); + } + function onEdited() { + reloadItem(this, !0); + } + function onEditCancel() {} + function onEditMetadataClick() { + var currentItem = this.currentItem, + instance = this; + require(["metadataEditor"]).then(function (responses) { + return new responses[0]() + .show(currentItem.Id, currentItem.ServerId) + .then(onEdited.bind(instance), onEditCancel); + }); + } + function onEditImagesClick() { + var currentItem = this.currentItem, + instance = this; + require(["imageEditor"], function (imageEditor) { + imageEditor + .show({ itemId: currentItem.Id, serverId: currentItem.ServerId }) + .then(onEdited.bind(instance), onEditCancel); + }); + } + function onDeleteClick() { + var currentItem = this.currentItem; + _itemmanager.default.deleteItems({ + items: [currentItem], + navigate: "back", + }); + } + function onDownloadChange() { + reloadItem(this, !0); + } + function splitVersions(instance, page, apiClient, params) { + var options; + (options = + "Are you sure you wish to split the media sources into separate items?"), + Emby.importModule("./modules/common/dialogs/confirm.js") + .then(function (confirm) { + return confirm(options); + }) + .then(function () { + _loading.default.show(), + apiClient.ungroupVersions(params.id).then(function () { + _loading.default.hide(), reloadItem(instance, !0); + }); + }); + } + function onReadMoreClick(e) { + var options, + e = e.currentTarget + .closest(".overview-container") + .querySelector(".overview-text"); + (options = { + html: e.innerHTML, + confirmButton: !1, + title: + _itemmanager.default.getDisplayName(this.currentItem) || + this.currentItem.Name, + centerText: !1, + item: this.currentItem, + }), + Emby.importModule("./modules/common/dialogs/alert.js").then( + function (alert) { + return alert(options); + }, + ); + } + function onPromiseRejected(e) { + console.log("itemContextMenu close: " + e); + } + function getSortMenuOptions(item) { + var options = []; + return ( + options.push({ + name: + "Playlist" === item.Type + ? _globalize.default.translate("PlaylistOrder") + : "BoxSet" === item.Type + ? _globalize.default.translate("CollectionOrder") + : _globalize.default.translate("Default"), + value: "default", + defaultSortOrder: "Ascending", + }), + options.push({ + name: _globalize.default.translate("Album"), + value: "Album,ParentIndexNumber,IndexNumber", + defaultSortOrder: "Ascending", + }), + "Playlist" === item.Type && + options.push({ + name: _globalize.default.translate("AlbumArtist"), + value: "AlbumArtist,Album,ParentIndexNumber,IndexNumber,SortName", + defaultSortOrder: "Ascending", + }), + options.push({ + name: _globalize.default.translate("Artist"), + value: "Artist,Album,ParentIndexNumber,IndexNumber,SortName", + defaultSortOrder: "Ascending", + }), + options.push({ + name: _globalize.default.translate("Runtime"), + value: "Runtime,SortName", + defaultSortOrder: "Ascending", + }), + options.push({ + name: _globalize.default.translate("Title"), + value: "SortName", + defaultSortOrder: "Ascending", + }), + options.push({ + name: _globalize.default.translate("Year"), + value: "ProductionYear,SortName", + defaultSortOrder: "Descending", + }), + options + ); + } + function getSortMenuOption(sortMenuOptions, sortBy) { + for (var i = 0, length = sortMenuOptions.length; i < length; i++) { + var option = sortMenuOptions[i]; + if (option.value === sortBy) return option; + } + return null; + } + function setSortLabelText() { + var item = this.currentItem, + sortItems = getSortMenuOptions(item), + view = this.view, + sortItems = getSortMenuOption( + sortItems, + _usersettings.default.itemSortBy(item.Id) || "default", + ), + item = view.querySelector(".btnSortItems"); + item.setAttribute( + "title", + _globalize.default.translate("SortByValue", sortItems.name), + ), + item.setAttribute( + "aria-label", + _globalize.default.translate("SortByValue", sortItems.name), + ), + (item.querySelector(".btnSortText").innerHTML = + _globalize.default.translate("HeaderSortBy")); + } + function sortItem(instance, item, options) { + var currentValues = { + sortBy: _usersettings.default.itemSortBy(item.Id), + sortOrder: _usersettings.default.itemSortOrder(item.Id), + }, + sortItems = getSortMenuOptions(item); + return ( + (function (options, currentValues) { + for (var i = 0, length = options.length; i < length; i++) { + var opt = options[i]; + if ( + ((opt.selected = opt.value === (currentValues.sortBy || "default")), + opt.selected) + ) { + var icon = + "Descending" === currentValues.sortOrder + ? "" + : ""; + opt.asideIcon = icon; + break; + } + } + })(sortItems, currentValues), + (function (options) { + return Emby.importModule("./modules/actionsheet/actionsheet.js").then( + function (ActionSheet) { + return ActionSheet.show(options); + }, + ); + })({ + items: sortItems, + positionTo: options.positionTo, + positionY: options.positionY, + positionX: options.positionX, + positionClientY: options.positionClientY, + positionClientX: options.positionClientX, + transformOrigin: options.transformOrigin, + title: _globalize.default.translate("HeaderSortBy"), + offsetTop: 2, + hasItemAsideIcon: !0, + hasItemSelectionState: !0, + }).then(function (value) { + var sortOrder; + sortOrder || + ((sortOrder = currentValues.sortOrder), + (sortOrder = + currentValues.sortBy === value + ? "Ascending" === sortOrder + ? "Descending" + : "Ascending" + : (function (sortMenuOptions, sortBy) { + if (sortBy) { + sortMenuOptions = getSortMenuOption( + sortMenuOptions, + sortBy, + ); + if ( + sortMenuOptions && + sortMenuOptions.value === sortBy && + sortMenuOptions.defaultSortOrder + ) + return sortMenuOptions.defaultSortOrder; + } + return "Descending"; + })(sortItems, value))), + _usersettings.default.itemSortBy(item.Id, value), + _usersettings.default.itemSortOrder(item.Id, sortOrder); + }) + ); + } + function getMusicArtistChildrenListOptions(items) { + return { + renderer: _cardbuilder.default, + options: { + shape: "auto", + scalable: !0, + centerText: !0, + fields: ["Name", "ProductionYear"], + overlayText: !1, + focusTransformTitleAdjust: !0, + }, + virtualScrollLayout: "horizontal-grid", + }; + } + function getSeasons(query) { + var item = this.currentItem, + apiClient = _connectionmanager.default.getApiClient(item), + fields = + this.getRequestedItemFields() + ",PrimaryImageAspectRatio,Overview"; + return apiClient.getSeasons( + item.Id, + Object.assign( + { UserId: apiClient.getCurrentUserId(), Fields: fields }, + query, + ), + ); + } + function getPlaylistListOptionsFn(item) { + return function (items) { + var fields = [], + items = + (fields.push("ParentName"), + fields.push("Name"), + (function (items) { + for (var i = 0, length = items.length; i < length; i++) + if (items[i].Overview) return !0; + return !1; + })(items)), + enableSideMediaInfo = !0, + sortBy = + (items && (fields.push("Overview"), (enableSideMediaInfo = !1)), + _usersettings.default.itemSortBy(item.Id) || "default"), + sortOrder = (sortBy = "default" === sortBy ? "ListItemOrder" : sortBy) + ? _usersettings.default.itemSortOrder(item.Id) + : null; + return { + renderer: _listview.default, + options: { + showIndexNumberLeft: "MusicAlbum" === item.Type, + action: "playallfromhere", + dragHandle: + "Playlist" === item.Type && + !_layoutmanager.default.tv && + "ListItemOrder" === sortBy && + "Ascending" === sortOrder, + playlistId: "Playlist" === item.Type ? item.Id : null, + image: "Playlist" === item.Type, + artist: "auto", + showIndex: "MusicAlbum" === item.Type, + autoHideArtist: "MusicAlbum" === item.Type, + index: "disc", + containerAlbumArtists: + "MusicAlbum" === item.Type ? item.AlbumArtists : null, + fields: fields, + playAction: "playallfromhere", + itemClass: "detailsListItem", + enableSideMediaInfo: enableSideMediaInfo, + imageSize: items ? "medium" : null, + autoMoveParentName: !0, + }, + virtualScrollLayout: "vertical-list", + commandOptions: { openAlbum: "MusicAlbum" !== item.Type }, + }; + }; + } + function scrollEpisodesToSeason(instance, seasonId) { + var apiClient, + seriesId, + itemsContainer = instance.view.querySelector(".childrenItemsContainer"); + itemsContainer && + ((instance = instance.currentItem), + (apiClient = _connectionmanager.default.getApiClient(instance)), + (seriesId = instance.Id), + apiClient + .getEpisodes(seriesId, { + SeasonId: seasonId, + UserId: apiClient.getCurrentUserId(), + EnableImages: !1, + EnableUserData: !1, + Limit: 1, + TotalRecordCount: !1, + }) + .then(function (result) { + var startItem = result.Items[0]; + startItem && + (-1 !== (result = itemsContainer.indexOfItemId(startItem.Id)) + ? itemsContainer.scrollToIndex( + result, + { offset: "-padding-inline-start" }, + !1, + ) + : apiClient + .getEpisodes(seriesId, { + UserId: apiClient.getCurrentUserId(), + EnableTotalRecordCount: !1, + EnableImages: !1, + EnableUserData: !1, + }) + .then(function (totalResult) { + for ( + var i = 0, length = totalResult.Items.length; + i < length; + i++ + ) + if (totalResult.Items[i].Id === startItem.Id) { + itemsContainer.scrollToIndex( + i, + { offset: "-padding-inline-start" }, + !1, + ); + break; + } + })); + })); + } + function onSeriesEpisodeFocusedOrScrolled(instance, item) { + var detailSelectSeason, + item = (function (instance, item) { + if ( + ((instance = instance.seasonItems || []), + item.SeasonId && 0 !== item.ParentIndexNumber) + ) { + var season = instance.filter(function (s) { + return s.Id === item.SeasonId; + })[0]; + if (season) return season; + } + var seasonNumber = + null == item.SortParentIndexNumber + ? item.ParentIndexNumber + : item.SortParentIndexNumber; + if (null != seasonNumber) { + season = instance.filter(function (s) { + return s.IndexNumber === seasonNumber; + })[0]; + if (season) return season; + } + if (item.SeasonId) { + season = instance.filter(function (s) { + return s.Id === item.SeasonId; + })[0]; + if (season) return season; + } + return null; + })(instance, item); + item && + ((detailSelectSeason = instance.detailSelectSeason) && + detailSelectSeason.setValues([item.Id], !1, [item]), + (detailSelectSeason = instance.seasonTabs)) && + (instance = detailSelectSeason.querySelector( + '.detailSeasonTab[data-id="' + item.Id + '"]', + )) && + detailSelectSeason.selectedIndex( + parseInt(instance.getAttribute("data-index")), + !1, + ); + } + function getAppearsOnListsListOptions(items) { + return { + renderer: _cardbuilder.default, + options: { + shape: "autooverflow", + centerText: !0, + fields: ["Name"], + overlayText: !1, + focusTransformTitleAdjust: !0, + }, + virtualScrollLayout: "horizontal-grid", + }; + } + function getArtistSongsListOptions(items) { + return { + renderer: _cardbuilder.default, + options: { + shape: "auto", + lines: 2, + centerText: !1, + fields: ["Name", "Album"], + overlayPlayButton: !0, + overlayText: !1, + sideFooter: !0, + action: "play", + }, + virtualScrollLayout: "horizontal-grid", + commandOptions: { openArtist: !1 }, + }; + } + function getPeopleListOptions(items) { + return { + renderer: _cardbuilder.default, + options: { + cardLayout: !1, + centerText: !0, + fields: ["Name", "PersonRole"], + cardFooterAside: !1, + showPersonRoleOrType: !0, + multiSelect: !1, + coverImage: !0, + shape: "portrait", + draggable: !1, + focusTransformTitleAdjust: !0, + }, + virtualScrollLayout: "horizontal-grid", + }; + } + function getMoreLikeThisOnLiveTVListOptions(items) { + return { + renderer: _cardbuilder.default, + options: { + shape: "auto", + fields: ["ParentName", "Name", "ProductionYear"], + centerText: !0, + showDetailsMenu: !0, + overlayPlayButton: !0, + overlayText: !1, + lines: 2, + draggable: !1, + multiSelect: !1, + focusTransformTitleAdjust: !0, + }, + virtualScrollLayout: "horizontal-grid", + }; + } + function getNextUpItems(query) { + var item = this.currentItem, + apiClient = _connectionmanager.default.getApiClient(item); + return "MusicAlbum" === item.Type + ? apiClient.getNextUpAudioBookItems( + Object.assign( + { + AlbumId: item.Id, + Fields: + this.getRequestedItemFields() + ",PrimaryImageAspectRatio", + ImageTypeLimit: 1, + UserId: apiClient.getCurrentUserId(), + }, + query, + ), + ) + : apiClient.getNextUpEpisodes( + Object.assign( + { + SeriesId: item.Id, + Fields: + this.getRequestedItemFields() + ",PrimaryImageAspectRatio", + ImageTypeLimit: 1, + UserId: apiClient.getCurrentUserId(), + }, + query, + ), + ); + } + function getAdditionalPartsListOptions(items) { + return { + renderer: _cardbuilder.default, + options: { + shape: "autooverflow", + scalable: !0, + fields: ["Name", "Runtime"], + action: "playallfromhere", + centerText: !0, + overlayText: !1, + draggable: !1, + focusTransformTitleAdjust: !0, + }, + virtualScrollLayout: "horizontal-grid", + }; + } + function getExtrasListOptions(items) { + return { + renderer: _cardbuilder.default, + options: { + shape: "autooverflow", + scalable: !0, + fields: ["Name", "Runtime"], + centerText: !0, + overlayText: !1, + draggable: !1, + focusTransformTitleAdjust: !0, + }, + virtualScrollLayout: "horizontal-grid", + }; + } + function getProgramGuideListOptions(items) { + return { + renderer: _listview.default, + options: { + imageSize: "large", + enableUserDataButtons: !1, + mediaInfo: !0, + mediaInfoWithTitle: !0, + draggable: !1, + multiSelect: !1, + defaultShape: "portrait", + itemClass: "detailsListItem", + fields: ["ParentName", "Name", "StartToEndDateTime", "Overview"], + highlight: !1, + }, + virtualScrollLayout: "vertical-grid", + }; + } + function getSeriesTimerListOptions(items) { + return { + renderer: _listview.default, + options: { + enableUserDataButtons: !1, + image: !0, + mediaInfo: !1, + imageSize: "large", + moreButton: !1, + recordButton: !1, + draggable: !1, + multiSelect: !1, + itemClass: "detailsListItem", + fields: [ + "ParentName", + "Name", + "StartToEndDateTime", + "ChannelName", + "Overview", + ], + highlight: !1, + }, + virtualScrollLayout: "vertical-grid", + }; + } + function enableTvDetailImageLayout(item) { + if (_layoutmanager.default.tv) { + switch (item.Type) { + case "Series": + case "Season": + case "Audio": + case "Program": + return !0; + case "BoxSet": + case "TvChannel": + case "Playlist": + case "MusicAlbum": + case "MusicArtist": + return !1; + } + switch (item.MediaType) { + case "Video": + case "Photo": + case "Game": + case "Book": + return !0; + } + } + return !1; + } + function afterDetailImageRefreshed() { + var detailImageElement = this.querySelector(".detailImage"); + detailImageElement && + (this.querySelector(".cardImageIcon") + ? detailImageElement.classList.remove("detailImage-transparent") + : detailImageElement.classList.add("detailImage-transparent")); + } + function getChaptersListOptions(items) { + return { + renderer: _cardbuilder.default, + options: { + shape: "autooverflow", + centerText: !0, + overlayText: !1, + fields: ["Name", "ChapterTime"], + multiSelect: !1, + contextMenu: !1, + playedButton: !1, + ratingButton: !1, + action: "play", + enableUserData: !1, + draggable: !1, + background: "black", + focusTransformTitleAdjust: !0, + }, + virtualScrollLayout: "horizontal-grid", + }; + } + function getMoreFromSeasonListOptions(items) { + return { + renderer: _cardbuilder.default, + options: { + shape: "auto", + scalable: !0, + fields: ["Name"], + overlayText: !1, + centerText: !0, + includeParentInfoInTitle: !1, + focusTransformTitleAdjust: !0, + }, + virtualScrollLayout: "horizontal-grid", + }; + } + function getMoreFromArtistListOptions(items) { + return { + renderer: _cardbuilder.default, + options: { + shape: "auto", + scalable: !0, + fields: ["Name", "ProductionYear"], + centerText: !0, + overlayText: !1, + overlayPlayButton: !0, + focusTransformTitleAdjust: !0, + }, + virtualScrollLayout: "horizontal-grid", + }; + } + function onPromiseFailure() {} + function reloadItem(instance, reloadAllData, restartDataLoad) { + !reloadAllData || + (instance.dataPromise && !1 === restartDataLoad) || + startDataLoad(instance), + instance.dataPromise.then(function (responses) { + var trackList, + item = responses[0], + responses = responses[1], + apiClient = _connectionmanager.default.getApiClient(item.ServerId), + view = instance.view; + !(function (view, refreshData) { + for ( + var containers = view.querySelectorAll(".generalItemsContainer"), + i = 0, + length = containers.length; + i < length; + i++ + ) + containers[i].resume({ refresh: refreshData }); + })(view, reloadAllData), + "Season" === item.Type && + (trackList = view.querySelector(".trackList")) && + trackList.resume({ refresh: reloadAllData }).then(function () { + !(function (element) { + var items = element.getItems(), + focusItem = items.filter(function (i) { + return !i.UserData || !i.UserData.Played; + })[0]; + if ((focusItem = focusItem || items[0])) { + items = element.indexOfItemId(focusItem.Id); + if (-1 !== items) + return element.scrollToIndex(items, {}, !0), 1; + } + })(trackList) && + _focusmanager.default.autoFocus(view, { skipIfNotEnabled: !0 }); + }), + reloadAllData && + (renderPeopleItems(view, item, apiClient), + (function (view, item, user, apiClient) { + "SeriesTimer" === item.Type && + (user.Policy.EnableLiveTvManagement + ? (require(["seriesRecordingEditor"], function ( + seriesRecordingEditor, + ) { + seriesRecordingEditor.embed(item, apiClient.serverId(), { + context: view.querySelector(".recordingEditor"), + }); + }), + view + .querySelector(".seriesTimerScheduleSection") + .classList.remove("hide"), + view + .querySelector(".btnCancelSeriesTimer") + .classList.remove("hide")) + : (view + .querySelector(".seriesTimerScheduleSection") + .classList.add("hide"), + view + .querySelector(".btnCancelSeriesTimer") + .classList.add("hide"))); + })(view, item, responses, apiClient), + (function (instance, view, item, user, apiClient) { + ("Timer" === item.Type || + ("Recording" === item.Type && + item.TimerId && + "InProgress" === item.Status)) && + user.Policy.EnableLiveTvManagement + ? (hideAll(view, "btnCancelTimer", !0), + require(["recordingEditor"], function (RecordingEditor) { + RecordingEditor = new RecordingEditor(); + (instance.recordingEditor = RecordingEditor).embed( + item, + apiClient.serverId(), + { context: view.querySelector(".recordingEditor") }, + ); + })) + : hideAll(view, "btnCancelTimer"); + })(instance, view, item, responses, apiClient), + (function (page, item) { + var page = page.querySelector(".linksSection"), + links = []; + if ( + item.ExternalUrls && + _servicelocator.appHost.supports("externallinks") && + !_layoutmanager.default.tv + ) + for ( + var i = 0, length = item.ExternalUrls.length; + i < length; + i++ + ) { + var url = item.ExternalUrls[i]; + links.push( + 'link' + + _textencoding.default.htmlEncode(url.Name) + + "", + ); + } + (page.querySelector(".itemLinks").innerHTML = links.join("")), + links.length + ? page.classList.remove("hide") + : page.classList.add("hide"); + })(view, item), + view + .querySelector(".audioVideoMediaInfo") + .classList.remove("mediainfo-forcehide"), + view + .querySelector(".details-additionalContent") + .classList.remove("hide"), + focusMainSection.call(instance.mainSection)), + (function (instance, eventName, item) { + instance.itemShowDispatched || + ((instance.itemShowDispatched = !0), + instance.view.dispatchEvent( + new CustomEvent(eventName, { + detail: { item: item }, + bubbles: !0, + cancelable: !1, + }), + )); + })(instance, "itemshow", item), + _loading.default.hide(); + }, onPromiseFailure); + } + function addClass(elems, className) { + for (var i = 0, length = elems.length; i < length; i++) + elems[i].classList.add(className); + } + function setScopedFocus(view, query, enabled, type) { + view = "string" == typeof query ? view.querySelector(query) : query; + enabled + ? (view.classList.add("focusable"), + view.setAttribute("data-focusabletype", type || "autofocus")) + : (view.classList.remove("focusable"), + view.removeAttribute("data-focusabletype")); + } + function updateTrackSelectionsFocusState(instance, view) { + var instance = instance.trackSelectionsContainer, + isEnabled = instance.querySelector("select:enabled:not(.noSelections)"); + setScopedFocus(view, instance, isEnabled, "nearest"); + } + var drawerElement = document.querySelector(".mainDrawer"); + function onNavDrawerStateChange(e, drawerState) { + 2 <= drawerState && _backdrop.default.hasBackdrop() + ? drawerElement.classList.add("darkContentContainer") + : drawerElement.classList.remove("darkContentContainer"); + } + function ItemPage(view, params) { + _baseview.default.apply(this, arguments), + (this.params = params), + (this.playerChangeFn = function () { + var view = this.view, + item = this.currentItem; + view && item && renderTrackSelectionsWithoutUser(view, this, item); + }.bind(this)), + (this.playbackStopFn = function (e, stopInfo) { + var state = stopInfo.state || {}; + state.NextMediaType || + state.IsBackgroundPlayback || + (null != (stopInfo = stopInfo.player) && + stopInfo.isLocalPlayer && + !_usersettings.default.enableVideoUnderUI() && + ((stopInfo = state.NowPlayingItem || {}), + (this.currentItem || {}).MediaType === stopInfo.MediaType) && + stopInfo.MediaType && + "Episode" === stopInfo.Type && + (this.showItemOnResume = stopInfo)); + }.bind(this)), + (this.onNavDrawerStateChangeFn = onNavDrawerStateChange.bind(this)), + (this.topDetailsContainer = view.querySelector(".topDetailsContainer")), + (this.mainSection = view.querySelector(".detailMainContainer")), + (this.trackSelectionsContainer = view.querySelector(".trackSelections")), + _layoutmanager.default.tv + ? addClass( + view.querySelectorAll(".reduce-font-size-tv"), + "reduce-font-size", + ) + : (addClass( + view.querySelectorAll(".detailTextContainer"), + "details-largefont", + ), + addClass( + view.querySelectorAll(".reduce-font-size-tv"), + "reduce-font-size-mobile", + )), + (function (view, query, enabled, type) { + for ( + var elems = view.querySelectorAll(query), + i = 0, + length = elems.length; + i < length; + i++ + ) + setScopedFocus(view, elems[i], enabled, type); + })(view, ".focusable", !0, "nearest"), + this.trackSelectionsContainer.addEventListener( + "submit", + onTrackSelectionsSubmit, + ), + bindAll(view, ".btnPlay", "click", onPlayClick.bind(this)), + bindAll(view, ".btnResume", "click", onPlayClick.bind(this)), + bindAll( + view, + ".btnShuffle", + "click", + function () { + var currentItem = this.currentItem; + _playbackmanager.default.shuffle(currentItem); + }.bind(this), + ), + bindAll( + view, + ".btnPlayTrailer", + "click", + function () { + var currentItem = this.currentItem; + _playbackmanager.default.playTrailers(currentItem); + }.bind(this), + ), + bindAll( + view, + ".btnCancelSeriesTimer", + "click", + function () { + onDeleteClick.call(this); + }.bind(this), + ), + bindAll( + view, + ".btnCancelTimer", + "click", + function () { + var instance = this, + item = this.currentItem, + type = item.Type, + serverId = item.ServerId, + timerId = "Timer" === type ? item.Id : item.TimerId; + require(["recordingHelper"], function (recordingHelper) { + recordingHelper + .cancelTimer( + _connectionmanager.default.getApiClient(serverId), + timerId, + ) + .then(function () { + reloadItem(instance, !0); + }); + }); + }.bind(this), + ), + bindAll(view, ".btnDeleteItem", "click", onDeleteClick.bind(this)), + bindAll( + view, + ".btnSyncDownload", + "download", + onDownloadChange.bind(this), + ), + bindAll( + view, + ".btnSyncDownload", + "download-cancel", + onDownloadChange.bind(this), + ), + bindAll( + view, + ".btnMoreCommands", + "click", + function (e) { + var button = e.currentTarget, + instance = this, + e = this.params, + e = _connectionmanager.default.getApiClient(e.serverId), + currentItem = this.currentItem, + view = this.view; + e.getCurrentUser().then(function (user) { + _itemcontextmenu.default + .show(getCommandOptions(view, currentItem, user, button)) + .then(function (result) { + ("addtoplaylist" !== result.command && + "addtocollection" !== result.command) || + reloadItem(instance, !0); + }, onPromiseRejected); + }); + }.bind(this), + ), + bindAll( + view, + ".btnSortItems", + "click", + function (e) { + var e = e.currentTarget, + instance = this; + sortItem(0, instance.currentItem, { + positionTo: e, + positionY: "bottom", + }).then(function () { + reloadItem(instance, !0); + }); + }.bind(this), + ), + bindAll( + view, + ".btnManageSeriesRecording", + "click", + function (e) { + var item = this.currentItem; + item.SeriesTimerId && + _approuter.default.showItem({ + Type: "SeriesTimer", + Id: item.SeriesTimerId, + ServerId: item.ServerId, + }); + }.bind(this), + ), + bindAll( + view, + ".btnManageRecording", + "click", + function (e) { + var item = this.currentItem; + item.TimerId && + _approuter.default.showItem({ + Type: "Timer", + Id: item.TimerId, + ServerId: item.ServerId, + }); + }.bind(this), + ), + this.mainSection.addEventListener( + "focus", + function (e) { + _layoutmanager.default.tv && + !e.target.closest( + ".btnReadMore,.recordingEditor,.btnOverviewText", + ) && + this.view.scrollToBeginning(); + }.bind(this), + !0, + ), + bindAll( + view, + ".btnSplitVersions", + "click", + function () { + var params = this.params, + apiClient = _connectionmanager.default.getApiClient( + params.serverId, + ); + splitVersions(this, this.view, apiClient, params); + }.bind(this), + ), + bindAll(view, ".btnReadMore", "click", onReadMoreClick.bind(this)), + bindAll(view, ".btnOverviewText", "click", onReadMoreClick.bind(this)); + var instance = this, + onLibraryChangedFn = + (view + .querySelector(".selectSource") + .addEventListener("change", function () { + renderMediaInfo( + 0, + view, + instance.currentItem, + instance._currentPlaybackMediaSources, + _connectionmanager.default.getApiClient(instance.currentItem), + ), + renderVideoSelections( + view, + instance._currentPlaybackMediaSources, + ), + renderAudioSelections( + view, + instance._currentPlaybackMediaSources, + ), + renderSubtitleSelections( + view, + instance._currentPlaybackMediaSources, + ), + updateTrackSelectionsFocusState(instance, view); + }), + view.querySelector(".btnManualRecording").addEventListener( + "click", + function (e) { + executeCommandWithCommandProcessor("record", this.currentItem, { + positionTo: e.target, + }); + }.bind(this), + ), + view.addEventListener( + "viewbeforehide", + function (e) { + ((e = e.detail) && + e.newView && + e.newView.classList.contains("itemView")) || + (backgroundContainer.classList.remove( + "itemBackgroundContainer", + "itemBackgroundContainer-brighter", + "itemBackgroundContainer-preventbackdrop", + ), + backdropContainer.classList.remove( + "backdropContainer-preventbackdrop", + ), + skinHeader.classList.remove("detailHeader-noIcons")); + }.bind(this), + ), + (this.onUserDataChangedFn = function (e, apiClient, userData) { + var currentItem = this.currentItem, + view = this.view; + currentItem && + currentItem.Id === userData.ItemId && + ((currentItem.UserData = userData), + this.paused || reloadPlayButtons(this, view, currentItem, !0)); + }.bind(this)), + (this.onLibraryChangedFn = function (e, apiClient, data) { + var currentItem = this.currentItem; + currentItem && + null != (data = data.ItemsUpdated) && + data.includes(currentItem.Id) && + (this.paused + ? (this._fullReloadOnResume = !0) + : reloadItem(this, !0)); + }.bind(this)), + (this.onTimerCancelledFn = function (e, apiClient, data) { + var currentItem = this.currentItem; + currentItem && + currentItem.Id === data.Id && + !this.paused && + _approuter.default.back(); + }.bind(this)), + _events.default.on( + _navdrawer.default, + "drawer-state-change", + this.onNavDrawerStateChangeFn, + ), + this.onLibraryChangedFn), + onLibraryChangedFn = + (onLibraryChangedFn && + _events.default.on( + _api.default, + "LibraryChanged", + onLibraryChangedFn, + ), + this.onUserDataChangedFn), + onLibraryChangedFn = + (onLibraryChangedFn && + _events.default.on( + _api.default, + "UserDataChanged", + onLibraryChangedFn, + ), + this.onTimerCancelledFn); + onLibraryChangedFn && + _events.default.on(_api.default, "TimerCancelled", onLibraryChangedFn); + } + Object.assign(ItemPage.prototype, _baseview.default.prototype), + (ItemPage.prototype.onInputCommand = function (e) { + var command = e.detail.command; + switch (command) { + case "play": + return ( + playCurrentItem(this, "resume"), + e.preventDefault(), + void e.stopPropagation() + ); + case "delete": + return ( + onDeleteClick.call(this), + e.preventDefault(), + void e.stopPropagation() + ); + case "record": + return ( + executeCommandWithCommandProcessor(command, this.currentItem, { + positionTo: e.target, + }), + e.preventDefault(), + void e.stopPropagation() + ); + } + _baseview.default.prototype.onInputCommand.apply(this, arguments); + }), + (ItemPage.prototype.onBeginResume = function (options) { + _baseview.default.prototype.onBeginResume.apply(this, arguments), + _layoutmanager.default.tv + ? skinHeader.classList.add("detailHeader-noIcons") + : skinHeader.classList.remove("detailHeader-noIcons"), + startDataLoad(this); + }), + (ItemPage.prototype.onResume = function (options) { + this.showItemOnResume && + ((newItem = this.showItemOnResume), + _approuter.default.replaceState( + _approuter.default.getRouteUrl(newItem, {}), + {}, + !0, + ), + (this.showItemOnResume = null)), + _baseview.default.prototype.onResume.apply(this, arguments), + (this.itemShowDispatched = null); + var newItem = this.view, + onPlayerChangeFn = this.playerChangeFn, + onPlayerChangeFn = + (onPlayerChangeFn && + _events.default.on( + _playbackmanager.default, + "playerchange", + onPlayerChangeFn, + ), + this.playbackStopFn), + onPlayerChangeFn = + (onPlayerChangeFn && + _events.default.on( + _playbackmanager.default, + "playbackstop", + onPlayerChangeFn, + ), + options.refresh || this._fullReloadOnResume); + (this._fullReloadOnResume = !1), + reloadItem(this, onPlayerChangeFn, !1), + onPlayerChangeFn || + (renderTrackSelectionsWithoutUser( + newItem, + this, + (onPlayerChangeFn = this.currentItem), + !0, + ), + setTrailerButtonVisibility(newItem, onPlayerChangeFn)), + (this._fullReloadOnResume = !1), + this.updateDrawerState(); + }), + (ItemPage.prototype.updateDrawerState = function () { + onNavDrawerStateChange.call(this, {}, _navdrawer.default.drawerState); + }), + (ItemPage.prototype.onPause = function (options) { + _baseview.default.prototype.onPause.apply(this, arguments); + for ( + var onPlayerChangeFn = this.playerChangeFn, + onPlayerChangeFn = + (onPlayerChangeFn && + _events.default.off( + _playbackmanager.default, + "playerchange", + onPlayerChangeFn, + ), + this.playbackStopFn), + onPlayerChangeFn = + (onPlayerChangeFn && + _events.default.off( + _playbackmanager.default, + "playbackstopped", + onPlayerChangeFn, + ), + this.onNavDrawerStateChangeFn && + _events.default.off( + _navdrawer.default, + "drawer-state-change", + this.onNavDrawerStateChangeFn, + ), + this.view), + containers = onPlayerChangeFn.querySelectorAll( + ".generalItemsContainer", + ), + i = 0, + length = containers.length; + i < length; + i++ + ) + containers[i].pause(); + (null != (onPlayerChangeFn = options.event) && + null != (onPlayerChangeFn = onPlayerChangeFn.detail) && + onPlayerChangeFn.newView.classList.contains("itemView")) || + drawerElement.classList.remove("darkContentContainer"), + this.recordingEditor && this.recordingEditor.pause(); + }), + (ItemPage.prototype.enableTransitions = function () { + return !0; + }), + (ItemPage.prototype.destroy = function () { + var onLibraryChangedFn = this.onLibraryChangedFn, + onLibraryChangedFn = + (onLibraryChangedFn && + _events.default.off( + _api.default, + "LibraryChanged", + onLibraryChangedFn, + ), + (this.onLibraryChangedFn = null), + this.onUserDataChangedFn), + onLibraryChangedFn = + (onLibraryChangedFn && + _events.default.off( + _api.default, + "UserDataChanged", + onLibraryChangedFn, + ), + (this.onUserDataChangedFn = null), + this.onTimerCancelledFn); + onLibraryChangedFn && + _events.default.off(_api.default, "TimerCancelled", onLibraryChangedFn), + (this.onTimerCancelledFn = null), + _baseview.default.prototype.destroy.apply(this, arguments), + (this.onNavDrawerStateChangeFn = null), + (this.playerChangeFn = null), + (this.playbackStopFn = null), + (this.currentItem = null), + (this._currentPlaybackMediaSources = null), + this.currentRecordingFields && + (this.currentRecordingFields.destroy(), + (this.currentRecordingFields = null)), + this.recordingEditor && + (this.recordingEditor.destroy(), (this.recordingEditor = null)), + (this.topDetailsContainer = null), + (this.mainSection = null), + (this.trackSelectionsContainer = null), + (this.detailSelectSeason = null), + (this.seasonTabs = null), + (this.seasonItems = null), + (this.params = null), + (this.dataPromise = null); + }), + (_exports.default = ItemPage); +}); diff --git a/modules/cardbuilder/card.css b/modules/cardbuilder/card.css index 9079ee6..42fc286 100644 --- a/modules/cardbuilder/card.css +++ b/modules/cardbuilder/card.css @@ -1 +1,1321 @@ -.card{border:0;font-size:inherit!important;font-family:inherit!important;text-transform:none;background-color:transparent!important;background:0 0!important;margin:0;padding:0;display:block;color:inherit!important;-webkit-tap-highlight-color:transparent;outline:0!important;contain:layout style paint;-webkit-flex-shrink:0;flex-shrink:0;font-weight:inherit!important;line-height:inherit;text-align:center;box-sizing:border-box}.card.itemAction{cursor:pointer}.card-focustransform{contain:layout style}.cardPadder-backdrop{padding-bottom:56.25%;contain:strict}.cardPadder-margin.cardPadder-backdrop{margin-bottom:56.25%}.cardPadder-square{padding-bottom:100%;contain:strict}.cardPadder-margin.cardPadder-square{margin-bottom:100%}.cardPadder-portrait{padding-bottom:150%;contain:strict}.cardPadder-margin.cardPadder-portrait{margin-bottom:150%}.cardPadder-fourThree{padding-bottom:75%;contain:strict}.cardPadder-margin.cardPadder-fourThree{margin-bottom:75%}.cardPadder-banner{padding-bottom:18.5%;contain:strict}.cardPadder-margin.cardPadder-banner{margin-bottom:18.5%}@supports (aspect-ratio:16 / 9){.cardPadder-backdrop{padding-bottom:0!important;aspect-ratio:16/9}.cardPadder-square{padding-bottom:0!important;aspect-ratio:1}.cardPadder-portrait{padding-bottom:0!important;aspect-ratio:2/3}.cardPadder-fourThree{padding-bottom:0!important;aspect-ratio:4/3}.cardPadder-banner{padding-bottom:0!important;aspect-ratio:1000/185}.cardPadder-margin{margin-bottom:0!important}}.cardBox{padding:0!important;margin:.72em;margin:min(.72em,max(.38em,1.06vw));transition:none;border:0 solid transparent;-webkit-tap-highlight-color:transparent;outline:0!important;contain:layout style;text-align:center;position:relative}.card-padded{padding:.72em;padding:min(.72em,max(.38em,1.06vw))}.card-bottompadded{padding-bottom:1.8em!important}.cardBox-focustransform{transition:-webkit-transform .2s ease-out;transition:transform .2s ease-out}.card:focus>.cardBox-focustransform{-webkit-transform:scale(1.18,1.18);transform:scale(1.18,1.18)}.card:focus>.cardBox-focustransform-titleadjust{-webkit-transform:scale(1.18,1.18) translateY(.5em);transform:scale(1.18,1.18) translateY(.5em)}.card-focustransform:focus .cardText{--theme-text-color-alpha:1!important}.cardBox-bottompadded{margin-bottom:1.8em!important}.card:focus{z-index:10!important}@media not all and (pointer:fine){.cardBox-touchzoom{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition-delay:0.1s}.card:active>.cardBox-touchzoom{-webkit-transform:scale(1.08);transform:scale(1.08)}}.cardBox-sideFooter{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;overflow:hidden;position:relative}.cardSideFooter-bottomsections{-webkit-flex-basis:100%;flex-basis:100%}.cardFooterContent{-webkit-flex-grow:1;flex-grow:1;padding:0 1.25em;-webkit-justify-content:center;justify-content:center;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;overflow:hidden;font-weight:600;min-height:3em;box-sizing:border-box}.cardFooterContent-start{text-align:start;padding:0 .5em}.cardFooterContent>.cardText{padding-top:0;-webkit-padding-start:.25em;padding-inline-start:.25em;-webkit-padding-end:.25em;padding-inline-end:.25em}.mediaSourceIndicator{display:-webkit-flex;display:flex;position:absolute;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;top:.3em;left:.3em;inset-inline-start:.3em;inset-inline-end:initial;text-align:center;vertical-align:middle;width:1.6em;height:1.6em;border-radius:50%;color:#fff;background:#38c}.cardContent{overflow:hidden;display:block;margin:0!important;height:100%;-webkit-tap-highlight-color:transparent;contain:strict;content-visibility:auto;position:relative}.cardImageContainer{background-size:contain;background-repeat:no-repeat;background-position:center center;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;position:relative;color:inherit;height:100%;border-radius:.3em;contain:strict;content-visibility:auto}@supports (aspect-ratio:16 / 9){.cardImageContainer{background-clip:content-box!important}}.chapterCardImageContainer{background-color:#000;border-radius:0}.cardContent-button{border:0!important;-webkit-padding-start:0!important;padding-inline-start:0!important;-webkit-padding-end:0!important;padding-inline-end:0!important;padding-top:0!important;cursor:pointer;color:inherit;width:100%;vertical-align:middle;font-family:inherit;font-size:inherit;outline:0}.cardContent-bg-black{background-color:#000!important}.paddedImage{background-size:auto 70%}.grayscaleImage{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.visualCardBox .cardContent{border-bottom-left-radius:0;border-bottom-right-radius:0;border-end-start-radius:0;border-end-end-radius:0}.cardImageContainer-sideFooter{position:relative;width:5.4em;height:5.4em;border-radius:0;-webkit-flex-shrink:0;flex-shrink:0;padding:0!important}.cardImageContainer-smallSideFooter{height:3.6em;width:3.6em;padding:0!important}.cardImage{position:absolute;top:0;bottom:0;left:0;right:0;inset-inline-start:0;inset-inline-end:0;background-size:contain;background-repeat:no-repeat;background-position:center bottom;width:100%;height:100%;object-position:center center;object-fit:contain;border:0!important;contain:layout style paint;content-visibility:auto}.cardImage-padded{height:70%;top:15%;bottom:15%}.cardContent-round{border-radius:100em;background-size:cover;background-position:center center;object-fit:cover}.coveredImage{background-size:100% 100%;background-position:center center;object-fit:fill}.coveredImage-noScale{background-size:cover;object-fit:cover}.coveredImage-contain{background-size:contain;object-fit:contain}.cardFooter{padding:.4em .5em .85em .5em;position:relative}.cardFooter-side{padding-top:0;padding-bottom:0}.cardFooter-vibrant::before{position:absolute;top:0;bottom:0;left:0;right:0;inset-inline-start:0;inset-inline-end:0;background:rgba(0,0,0,.1);content:" "}.cardFooter-vibrant{padding:.5em .5em .85em .5em;font-weight:600;position:relative}.visualCardBox{box-shadow:0 .06933em .06933em 0 rgba(0,0,0,.14),0 .13866em .06933em -.06933em rgba(0,0,0,.12),0 .06933em .208em 0 rgba(0,0,0,.2);border-radius:.42em}.visualCardBox-vibrant{overflow:hidden;background-size:cover;background-repeat:no-repeat}.innerCardFooter{background-color:transparent;position:absolute;bottom:0;text-align:start;overflow:hidden;max-width:100%;color:#fff;left:0;right:0;inset-inline-start:0;inset-inline-end:0;text-shadow:.14em .14em .28em rgba(0,0,0,.45)}.cardText{padding:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cardText-overview{white-space:normal;height:3.8rem;-webkit-line-clamp:3;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;text-align:left}.cardText-secondary{font-size:92%}.cardText-first-padded{padding-top:.22em}.innerCardFooter>.cardText{padding:.1em .35em}.cardFooter-withlogo{-webkit-padding-start:4em;padding-inline-start:4em;position:relative}.cardFooterLogo{position:absolute;top:0;bottom:0;left:0;inset-inline-start:0;inset-inline-end:initial;width:4.5em;background-size:70% auto;background-repeat:no-repeat;background-position:center center}.cardDefaultText{white-space:normal;text-align:center;position:absolute;top:30%;left:10%;inset-inline-start:10%;inset-inline-end:initial;width:80%}@supports (aspect-ratio:16 / 9){.cardDefaultText{position:static;top:initial;left:initial;right:initial;inset-inline-start:initial;inset-inline-end:initial;width:auto}}.textActionButton{border:0!important;background:0 0;border:0!important;padding:0!important;cursor:pointer;-webkit-tap-highlight-color:transparent;color:inherit!important;display:inline-block;vertical-align:middle;font-family:inherit;font-size:inherit;outline:0!important;font-weight:inherit;line-height:normal!important}.cardTextActionButton{width:100%;overflow:hidden;text-overflow:ellipsis;text-align:inherit;line-height:1!important}.cardTextLinksLine>.cardTextActionButton{width:auto}.cardImageIcon{font-size:4em!important;color:inherit}.cardImageIcon-sideFooter{font-size:3em!important}.cardImageIcon-smallSideFooter{font-size:1.64em!important}.cardImageIcon-center{width:1em;height:1em;position:absolute;top:50%;left:50%;inset-inline-start:50%;inset-inline-end:initial;-webkit-margin-start:-.5em;margin-inline-start:-.5em;margin-top:-.5em}@supports (aspect-ratio:16 / 9){.cardImageIcon-center{width:auto;height:auto;position:initial;margin-top:0;-webkit-margin-start:0;margin-inline-start:0}}.cardRefreshIndicator-sideFooter{position:absolute!important}.cardOverlayButton{color:rgba(255,255,255,.76);margin:0;z-index:1}.cardOverlayButton-br{position:absolute;bottom:0;right:0;inset-inline-start:initial;inset-inline-end:0;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center}.cardOverlayButtonIcon{border-radius:100em;-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;align-items:center;display:-webkit-flex;display:flex}:root{--backdrop-cards:1;--small-sidefooter-cards:1.3;--sidefooter-cards:1;--banner-cards:1;--four-three-cards:2;--square-cards:2;--portrait-cards:3;--user-cards-size-adjust:0;--app-cards-size-adjust:0}.itemsContainer-defaultCardSize{--user-cards-size-adjust:0}.cardSizeSmaller{--app-cards-size-adjust:1}@media all and (min-width:60em) and (max-width:99em){.skinBody-withFullDrawer{--app-cards-size-adjust:-1}.skinBody-withFullDrawer .cardSizeSmaller{--app-cards-size-adjust:-1}}.squareCard{width:16.6666667%;width:calc(100% / (var(--square-cards) + var(--app-cards-size-adjust)))}.squareCard-horiz{width:15.3333333vw;width:calc(92vw / var(--square-cards))}.portraitCard{width:16.6666667%;width:calc(100% / (var(--portrait-cards) + var(--app-cards-size-adjust)))}.portraitCard-horiz{width:15.3333333vw;width:calc(92vw / var(--portrait-cards))}.bannerCard{width:33.333333%;width:calc(100% / (var(--banner-cards) + var(--app-cards-size-adjust)))}.bannerCard-horiz{width:30.66667vw;width:calc(92vw / var(--banner-cards))}.sideFooterCard{width:25%;width:calc(100% / (var(--sidefooter-cards) + var(--app-cards-size-adjust)))}.sideFooterCard-horiz{width:23vw;width:calc(92vw / var(--sidefooter-cards))}.smallSideFooterCard{width:16.6666667%;width:calc(100% / (var(--small-sidefooter-cards) + var(--app-cards-size-adjust)))}.smallSideFooterCard-horiz{width:15.3333333vw;width:calc(92vw / (var(--small-sidefooter-cards) + var(--app-cards-size-adjust)))}.fourThreeCard{width:25%;width:calc(100% / (var(--four-three-cards) + var(--app-cards-size-adjust)))}.fourThreeCard-horiz{width:23vw;width:calc(92vw / var(--four-three-cards))}.backdropCard{width:25%;width:calc(100% / (var(--backdrop-cards) + var(--app-cards-size-adjust)))}.backdropCard-horiz{width:23vw;width:calc(92vw / var(--backdrop-cards))}@supports (width:max(10em,5vw)){.squareCard{width:calc(100% / max((var(--square-cards) + var(--user-cards-size-adjust) + var(--app-cards-size-adjust)),2))}.squareCard-horiz{width:calc(92vw / max((var(--square-cards) + var(--user-cards-size-adjust)),2))}.portraitCard{width:calc(100% / max((var(--portrait-cards) + var(--user-cards-size-adjust) + var(--app-cards-size-adjust)),3))}.portraitCard-horiz{width:calc(92vw / max((var(--portrait-cards) + var(--user-cards-size-adjust)),3))}.bannerCard{width:calc(100% / max((var(--banner-cards) + var(--user-cards-size-adjust) + var(--app-cards-size-adjust)),1))}.bannerCard-horiz{width:calc(92vw / max((var(--banner-cards) + var(--user-cards-size-adjust)),1))}.sideFooterCard{width:calc(100% / max((var(--sidefooter-cards) + var(--user-cards-size-adjust) + var(--app-cards-size-adjust)),1))}.sideFooterCard-horiz{width:calc(92vw / max((var(--sidefooter-cards) + var(--user-cards-size-adjust)),1))}.smallSideFooterCard{width:calc(100% / max((var(--small-sidefooter-cards) + var(--user-cards-size-adjust) + var(--app-cards-size-adjust)),1.3))}.smallSideFooterCard-horiz{width:calc(92vw / max((var(--small-sidefooter-cards) + var(--user-cards-size-adjust)),1.3))}.fourThreeCard{width:calc(100% / max((var(--four-three-cards) + var(--user-cards-size-adjust) + var(--app-cards-size-adjust)),2))}.fourThreeCard-horiz{width:calc(92vw / max((var(--four-three-cards) + var(--user-cards-size-adjust)),2))}.backdropCard{width:calc(100% / max((var(--backdrop-cards) + var(--user-cards-size-adjust) + var(--app-cards-size-adjust)),1))}.backdropCard-horiz{width:calc(92vw / max((var(--backdrop-cards) + var(--user-cards-size-adjust)),1))}}@media all and (orientation:landscape){:root{--backdrop-cards:2}}@media all and (orientation:portrait) and (min-width:24em){:root{--backdrop-cards:2}}@media all and (orientation:portrait) and (min-width:31.25em){:root{--square-cards:3}}@media all and (min-width:31.25em){:root{--four-three-cards:3}}@media all and (min-width:36em){:root{--square-cards:3;--portrait-cards:4}}@media all and (min-width:40em){:root{--square-cards:4;--small-sidefooter-cards:2}}@media all and (orientation:landscape) and (min-width:40em){:root{--portrait-cards:5}}@media all and (orientation:landscape) and (min-width:50em){:root{--square-cards:5}}@media all and (min-width:45em){:root{--four-three-cards:4;--sidefooter-cards:2}}@media all and (min-width:50em){:root{--small-sidefooter-cards:3}}@media (min-width:50em){:root{--backdrop-cards:3}}@media all and (min-width:55em){:root{--banner-cards:2;--square-cards:5;--portrait-cards:5}}@media (min-width:62.5em){:root{--backdrop-cards:4}}@media all and (min-width:66em){:root{--small-sidefooter-cards:4}}@media all and (min-width:70em){:root{--four-three-cards:5;--square-cards:6;--portrait-cards:6}}@media all and (min-width:76em){:root{--sidefooter-cards:3}}@media all and (min-width:82.5em){:root{--backdrop-cards:5}}@media all and (min-width:85em){:root{--square-cards:7;--portrait-cards:7}}@media all and (min-width:100em){:root{--banner-cards:3;--small-sidefooter-cards:5;--four-three-cards:6;--square-cards:8;--portrait-cards:8}}@media all and (min-width:115em){:root{--small-sidefooter-cards:6;--portrait-cards:9;--square-cards:9}}@media all and (min-width:120em){:root{--small-sidefooter-cards:6}}@media all and (min-width:130em){:root{--square-cards:10;--portrait-cards:10}}@media all and (min-width:131.25em){:root{--backdrop-cards:6;--four-three-cards:7;--sidefooter-cards:4}}@media all and (min-width:145em){:root{--square-cards:11;--portrait-cards:11}}@media all and (min-width:150em){:root{--banner-cards:4}}@media all and (min-width:160em){:root{--backdrop-cards:7;--small-sidefooter-cards:7;--four-three-cards:8;--square-cards:12;--portrait-cards:12}}@media all and (min-width:175em){:root{--square-cards:13;--portrait-cards:13}}@media all and (min-width:180em){:root{--small-sidefooter-cards:8;--four-three-cards:9}}@media all and (min-width:190em){:root{--square-cards:14;--portrait-cards:14}}@media all and (min-width:200em){:root{--banner-cards:5;--sidefooter-cards:5;--backdrop-cards:8;--small-sidefooter-cards:9;--four-three-cards:10}}@media all and (min-width:205em){:root{--square-cards:15;--portrait-cards:15}}@media all and (min-width:220em){:root{--sidefooter-cards:6;--backdrop-cards:9;--small-sidefooter-cards:10;--four-three-cards:11;--square-cards:16;--portrait-cards:16}}@media all and (min-width:240em){:root{--banner-cards:6;--sidefooter-cards:7;--small-sidefooter-cards:11;--four-three-cards:12;--square-cards:17;--portrait-cards:17}}@media all and (orientation:portrait) and (max-width:35em){.scrollX{--backdrop-cards:1.2}}.layout-tv:root{--square-cards:5;--banner-cards:3;--sidefooter-cards:3;--small-sidefooter-cards:4;--portrait-cards:6;--backdrop-cards:4;--four-three-cards:5}.cardOverlayContainer{background:rgba(51,51,51,.5);opacity:0;transition:opacity .2s ease-out;position:absolute;top:0;bottom:0;left:0;right:0;inset-inline-start:0;inset-inline-end:0;-webkit-user-select:none;user-select:none;display:none;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;border-radius:.3em;z-index:2;contain:layout style}.cardContent-button+.cardOverlayContainer{cursor:pointer}.chkCardSelectContainer{font-size:76%;width:auto!important;margin:0!important;display:-webkit-inline-flex!important;display:inline-flex!important;-webkit-padding-start:.7em!important;padding-inline-start:.7em!important;-webkit-align-items:flex-start!important;align-items:flex-start!important;padding-top:.8em!important;position:absolute!important;top:0;left:0;inset-inline-start:0;inset-inline-end:initial;padding:.8em .7em!important}@media (hover:hover) and (pointer:fine){.cardOverlayContainer{display:-webkit-flex;display:flex}.card-hoverable:hover .cardOverlayContainer{opacity:1}}.chkCardSelect{top:0;left:0;inset-inline-start:0;inset-inline-end:initial}.chkCardSelect+.checkboxLabel,.chkCardSelect+.checkboxLabel::before{border-radius:100em!important}.chkCardSelect-checkboxLabel::after{border-width:.2em!important}.cardOverlayButton-hover{background:0 0;color:#fff}.cardOverlayButtonIcon-hover{background:0 0!important;line-height:initial!important;padding:.4em!important}.cardOverlayFab-primary{font-size:180%!important;padding:0!important;transition:-webkit-transform 240ms ease-out,opacity 180ms ease-out;transition:transform 240ms ease-out,opacity 180ms ease-out;position:absolute;top:50%;left:50%;inset-inline-start:50%;inset-inline-end:initial;margin-top:-.83em!important;margin-bottom:0!important;-webkit-margin-start:-.83em!important;margin-inline-start:-.83em!important;-webkit-margin-end:0!important;margin-inline-end:0!important;width:1.66em;height:1.66em}.cardOverlayFab-primary:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}[dir=rtl] .cardOverlayFab-primary:hover{-webkit-transform:scaleX(-1) scale(1.1);transform:scaleX(-1) scale(1.1)}.multi-select-active .cardIndicator{display:none}.multi-select-active .cardOverlayContainer{display:block!important;opacity:1!important}.multi-select-active .cardImageContainer{transition:-webkit-transform .135s cubic-bezier(0, 0, .2, 1);transition:transform .135s cubic-bezier(0, 0, .2, 1)}.multi-select-active .cardOverlayButton:not(.chkCardSelectContainer){opacity:0!important;display:none!important}.multi-select-active .chkCardSelectContainer{opacity:1!important}.item-multiselected .cardImageContainer{-webkit-transform:translateZ(0) scale3d(.79,.84,1);transform:translateZ(0) scale3d(.79,.84,1)}.item-multiselected .cardOverlayContainer{background:0 0!important}.cardMissingIndicator{position:absolute;top:.35em;left:.225em;inset-inline-start:.225em;inset-inline-end:initial;margin:0!important;contain:layout style}.cardSyncIndicator{position:absolute;bottom:.35em;right:.18em;inset-inline-start:initial;inset-inline-end:.18em;contain:layout style}.cardPlayedIndicator,.cardTimerIndicator{border-radius:100em;font-size:1.28em;height:1.25em;width:1.25em;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;top:.18em;position:absolute;right:.18em;inset-inline-start:initial;inset-inline-end:.18em;contain:layout style}.cardPlayedIndicator+.cardTimerIndicator{right:1.5em;inset-inline-start:initial;inset-inline-end:1.5em}.cardCountIndicator{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;top:.225em;position:absolute;right:.225em;inset-inline-start:initial;inset-inline-end:.225em;contain:layout style}.cardProgramIndicator{contain:layout style;display:-webkit-inline-flex;display:inline-flex;margin-top:0;margin-bottom:.2em;-webkit-margin-start:.35em;margin-inline-start:.35em;-webkit-margin-end:0;margin-inline-end:0;padding:.08em .5em;border-radius:.42em;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;text-transform:uppercase;font-size:84%;font-weight:600}.drag-reorder-y-active .skinHeader{z-index:0!important}.drag-reorder-y-active .appfooter{display:none!important}.dragging .cardOverlayContainer,.dragging .cardIndicator:not(.cardIndicatorIcon-dragHandle){display:none!important}.cardIndicatorIcon{font-size:1.6em;top:.225em;left:.225em;inset-inline-start:.225em;inset-inline-end:initial;position:absolute;color:#fff}.cardIndicatorIcon-dragHandle{right:.225em;inset-inline-start:initial;inset-inline-end:.225em;text-shadow:.14em .14em .28em rgba(0,0,0,.45);cursor:pointer}.cardMediaInfoItems{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-column-gap:initial!important;column-gap:initial!important;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.cardMediaInfoItem{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.cardMediaInfoItem+.cardMediaInfoItem{-webkit-margin-start:.5em!important;margin-inline-start:.5em!important}.cardMediaInfoItem .starIcon{line-height:.96}.card.dragging-over{position:relative;contain:none!important;z-index:1}.dragging-over-left::before{content:' ';width:.24em;position:absolute;top:.8em;bottom:.8em;left:-.14em;inset-inline-start:-.14em;inset-inline-end:initial;z-index:99999;border-radius:100em}.dragging-over-right::after{content:' ';width:.24em;position:absolute;right:-.14em;top:.8em;bottom:.8em;inset-inline-start:initial;inset-inline-end:-.14em;z-index:99999;border-radius:100em}.cardProgressBarContainer{background:0 0!important}.visualCardBox-vibrant-lg::before{content:" ";position:absolute;top:0;bottom:0;left:0;right:0;inset-inline-start:0;inset-inline-end:0;background:rgba(0,0,0,.2);z-index:-1}.autoWidthCard{width:auto}.card:focus .cardContent-bxsborder{contain:initial;content-visibility:initial;overflow:visible}.card:focus-visible .cardContent-bxsborder-fv{contain:initial;content-visibility:initial;overflow:visible}.sideFooterCard:focus .cardBox-sideFooter-f{overflow:visible}.sideFooterCard:focus .cardBox-sideFooter-f .cardContent{border-start-start-radius:inherit;border-end-start-radius:inherit}.card:focus .cardContent-bxsborder::before,.sideFooterCard:focus .cardBox-sideFooter-f::before{content:" ";position:absolute;top:-.34em;left:-.34em;right:-.34em;bottom:-.34em;border-width:.22em;border-style:solid;border-radius:.6em}.sideFooterCard:focus .cardBox-sideFooter-f::before{border-radius:.72em}.card:focus-visible .cardContent-bxsborder-fv::before{content:" ";position:absolute;top:-.34em;left:-.34em;right:-.34em;bottom:-.34em;border-width:.22em;border-style:solid;border-radius:.6em}.card:focus .cardContent-bxsborder.cardContent-round::before{border-radius:100em}.card:focus .cardContent-bxsborder .cardImage{border-radius:inherit}.card:focus-visible .cardContent-bxsborder-fv.cardContent-round::before{border-radius:100em}.card:focus-visible .cardContent-bxsborder-fv .cardImage{border-radius:inherit}.buttonCardBox{border-radius:.6em;margin:.4em}.buttonCardBox::before,.cardBox-sideFooter::before{display:none!important} \ No newline at end of file +.card { + border: 0; + font-size: inherit!important; + font-family: inherit!important; + text-transform: none; + background-color: transparent!important; + background: 0 0!important; + transition: -webkit-transform 100ms ease-out,opacity 100ms ease-out; + transition: transform 100ms ease-out,opacity 100ms ease-out; + margin: 1em 0em 1em 0em; + padding: 0; + display: block; + color: inherit!important; + -webkit-tap-highlight-color: transparent; + outline: 0!important; + contain: layout style paint; + -webkit-flex-shrink: 0; + flex-shrink: 0; + font-weight: inherit!important; + line-height: inherit; + text-shadow: 2px 2px 5px #0000007a; +} +.card:hover { + transform: scale(1.03); + webkit-transform: scale(1.03); + text-shadow: 2px 2px 5px black; +} +.card.itemAction { + cursor: pointer; +} +.card-focustransform { + contain: layout style; +} +.cardPadder-backdrop { + padding-bottom: 56.25%; + contain: strict; +} +.cardPadder-margin.cardPadder-backdrop { + margin-bottom: 56.25%; +} +.cardPadder-square { + padding-bottom: 100%; + contain: strict; +} +.cardPadder-margin.cardPadder-square { + margin-bottom: 100%; +} +.cardPadder-portrait { + padding-bottom: 150%; + contain: strict; +} +.cardPadder-margin.cardPadder-portrait { + margin-bottom: 150%; +} +.cardPadder-fourThree { + padding-bottom: 75%; + contain: strict; +} +.cardPadder-margin.cardPadder-fourThree { + margin-bottom: 75%; +} +.cardPadder-banner { + padding-bottom: 18.5%; + contain: strict; +} +.cardPadder-margin.cardPadder-banner { + margin-bottom: 18.5%; +} +@supports (aspect-ratio: 16 / 9) { + .cardPadder-backdrop { + padding-bottom: 0 !important; + aspect-ratio: 16/9; + } + .cardPadder-square { + padding-bottom: 0 !important; + aspect-ratio: 1; + } + .cardPadder-portrait { + padding-bottom: 0 !important; + aspect-ratio: 2/3; + } + .cardPadder-fourThree { + padding-bottom: 0 !important; + aspect-ratio: 4/3; + } + .cardPadder-banner { + padding-bottom: 0 !important; + aspect-ratio: 1000/185; + } + .cardPadder-margin { + margin-bottom: 0 !important; + } +} +.cardBox { + padding: 0 !important; + margin: 0.72em; + margin: min(0.72em, max(0.38em, 1.06vw)); + transition: none; + border: 0 solid transparent; + -webkit-tap-highlight-color: transparent; + outline: 0 !important; + contain: layout style; + text-align: center; + position: relative; +} +.card-padded { + padding: 0.72em; + padding: min(0.72em, max(0.38em, 1.06vw)); +} +.card-bottompadded { + padding-bottom: 1.8em !important; +} +.cardBox-focustransform { + transition: -webkit-transform 0.2s ease-out; + transition: transform 0.2s ease-out; +} +.card:focus > .cardBox-focustransform { + -webkit-transform: scale(1.18, 1.18); + transform: scale(1.18, 1.18); +} +.card:focus > .cardBox-focustransform-titleadjust { + -webkit-transform: scale(1.18, 1.18) translateY(0.5em); + transform: scale(1.18, 1.18) translateY(0.5em); +} +.card-focustransform:focus .cardText { + --theme-text-color-alpha: 1 !important; +} +.cardBox-bottompadded { + margin-bottom: 1.8em !important; +} +.card:focus { + z-index: 10 !important; +} +@media not all and (pointer: fine) { + .cardBox-touchzoom { + transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition-delay: 0.1s; + } + .card:active > .cardBox-touchzoom { + -webkit-transform: scale(1.08); + transform: scale(1.08); + } +} +.cardBox-sideFooter { + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + flex-direction: row; + overflow: hidden; + position: relative; +} +.cardSideFooter-bottomsections { + -webkit-flex-basis: 100%; + flex-basis: 100%; +} +.cardFooterContent { + -webkit-flex-grow: 1; + flex-grow: 1; + padding: 0 1.25em; + -webkit-justify-content: center; + justify-content: center; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: column; + flex-direction: column; + overflow: hidden; + font-weight: 600; + min-height: 3em; + box-sizing: border-box; +} +.cardFooterContent-start { + text-align: start; + padding: 0 0.5em; +} +.cardFooterContent > .cardText { + padding-top: 0; + -webkit-padding-start: 0.25em; + padding-inline-start: 0.25em; + -webkit-padding-end: 0.25em; + padding-inline-end: 0.25em; +} +.mediaSourceIndicator { + display: -webkit-flex; + display: flex; + position: absolute; + -webkit-align-items: center; + align-items: center; + -webkit-justify-content: center; + justify-content: center; + top: 0.3em; + left: 0.3em; + inset-inline-start: 0.3em; + inset-inline-end: initial; + text-align: center; + vertical-align: middle; + width: 1.6em; + height: 1.6em; + border-radius: 50%; + color: #fff; + background: #38c; +} +.cardContent { + overflow: hidden; + display: block; + margin: 0 !important; + height: 100%; + -webkit-tap-highlight-color: transparent; + contain: strict; + content-visibility: auto; + position: relative; +} +.cardImageContainer { + background-size: contain; + background-repeat: no-repeat; + background-position: center center; + display: -webkit-flex; + display: flex; + -webkit-align-items: center; + align-items: center; + -webkit-justify-content: center; + justify-content: center; + position: relative; + color: inherit; + height: 100%; + border-radius: 0.3em; + contain: strict; + content-visibility: auto; +} +@supports (aspect-ratio: 16 / 9) { + .cardImageContainer { + background-clip: content-box !important; + } +} +.chapterCardImageContainer { + background-color: #000; + border-radius: 0; +} +.cardContent-button { + border: 0 !important; + -webkit-padding-start: 0 !important; + padding-inline-start: 0 !important; + -webkit-padding-end: 0 !important; + padding-inline-end: 0 !important; + padding-top: 0 !important; + cursor: pointer; + color: inherit; + width: 100%; + vertical-align: middle; + font-family: inherit; + font-size: inherit; + outline: 0; +} +.cardContent-bg-black { + background-color: #000 !important; +} +.paddedImage { + background-size: auto 70%; +} +.grayscaleImage { + -webkit-filter: grayscale(100%); + filter: grayscale(100%); +} +.visualCardBox .cardContent { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-end-start-radius: 0; + border-end-end-radius: 0; +} +.cardImageContainer-sideFooter { + position: relative; + width: 5.4em; + height: 5.4em; + border-radius: 0; + -webkit-flex-shrink: 0; + flex-shrink: 0; + padding: 0 !important; +} +.cardImageContainer-smallSideFooter { + height: 3.6em; + width: 3.6em; + padding: 0 !important; +} +.cardImage { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + inset-inline-start: 0; + inset-inline-end: 0; + background-size: contain; + background-repeat: no-repeat; + background-position: center bottom; + width: 100%; + height: 100%; + object-position: center center; + object-fit: contain; + border: 0 !important; + contain: layout style paint; + content-visibility: auto; +} +.cardImage-padded { + height: 70%; + top: 15%; + bottom: 15%; +} +.cardContent-round { + border-radius: 100em; + background-size: cover; + background-position: center center; + object-fit: cover; +} +.coveredImage { + background-size: 100% 100%; + background-position: center center; + object-fit: fill; +} +.coveredImage-noScale { + background-size: cover; + object-fit: cover; +} +.coveredImage-contain { + background-size: contain; + object-fit: contain; +} +.cardFooter { + padding: 0.4em 0.5em 0.85em 0.5em; + position: relative; +} +.cardFooter-side { + padding-top: 0; + padding-bottom: 0; +} +.cardFooter-vibrant::before { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + inset-inline-start: 0; + inset-inline-end: 0; + background: rgba(0, 0, 0, 0.1); + content: " "; +} +.cardFooter-vibrant { + padding: 0.5em 0.5em 0.85em 0.5em; + font-weight: 600; + position: relative; +} +.visualCardBox { + box-shadow: + 0 0.06933em 0.06933em 0 rgba(0, 0, 0, 0.14), + 0 0.13866em 0.06933em -0.06933em rgba(0, 0, 0, 0.12), + 0 0.06933em 0.208em 0 rgba(0, 0, 0, 0.2); + border-radius: 0.42em; +} +.visualCardBox-vibrant { + overflow: hidden; + background-size: cover; + background-repeat: no-repeat; +} +.innerCardFooter { + background-color: transparent; + position: absolute; + bottom: 0; + text-align: start; + overflow: hidden; + max-width: 100%; + color: #fff; + left: 0; + right: 0; + inset-inline-start: 0; + inset-inline-end: 0; + text-shadow: 0.14em 0.14em 0.28em rgba(0, 0, 0, 0.45); +} +.cardText { + padding: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.cardText-overview { + white-space: normal; + height: 3.8rem; + -webkit-line-clamp: 3; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + text-align: left; +} +.cardText-secondary { + font-size: 92%; +} +.cardText-first-padded { + padding-top: 0.22em; +} +.innerCardFooter > .cardText { + padding: 0.1em 0.35em; +} +.cardFooter-withlogo { + -webkit-padding-start: 4em; + padding-inline-start: 4em; + position: relative; +} +.cardFooterLogo { + position: absolute; + top: 0; + bottom: 0; + left: 0; + inset-inline-start: 0; + inset-inline-end: initial; + width: 4.5em; + background-size: 70% auto; + background-repeat: no-repeat; + background-position: center center; +} +.cardDefaultText { + white-space: normal; + text-align: center; + position: absolute; + top: 30%; + left: 10%; + inset-inline-start: 10%; + inset-inline-end: initial; + width: 80%; +} +@supports (aspect-ratio: 16 / 9) { + .cardDefaultText { + position: static; + top: initial; + left: initial; + right: initial; + inset-inline-start: initial; + inset-inline-end: initial; + width: auto; + } +} +.textActionButton { + border: 0 !important; + background: 0 0; + border: 0 !important; + padding: 0 !important; + cursor: pointer; + -webkit-tap-highlight-color: transparent; + color: inherit !important; + display: inline-block; + vertical-align: middle; + font-family: inherit; + font-size: inherit; + outline: 0 !important; + font-weight: inherit; + line-height: normal !important; +} +.cardTextActionButton { + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + text-align: inherit; + line-height: 1 !important; +} +.cardTextLinksLine > .cardTextActionButton { + width: auto; +} +.cardImageIcon { + font-size: 4em !important; + color: inherit; +} +.cardImageIcon-sideFooter { + font-size: 3em !important; +} +.cardImageIcon-smallSideFooter { + font-size: 1.64em !important; +} +.cardImageIcon-center { + width: 1em; + height: 1em; + position: absolute; + top: 50%; + left: 50%; + inset-inline-start: 50%; + inset-inline-end: initial; + -webkit-margin-start: -0.5em; + margin-inline-start: -0.5em; + margin-top: -0.5em; +} +@supports (aspect-ratio: 16 / 9) { + .cardImageIcon-center { + width: auto; + height: auto; + position: initial; + margin-top: 0; + -webkit-margin-start: 0; + margin-inline-start: 0; + } +} +.cardRefreshIndicator-sideFooter { + position: absolute !important; +} +.cardOverlayButton { + color: rgba(255, 255, 255, 0.76); + margin: 0; + z-index: 1; +} +.cardOverlayButton-br { + position: absolute; + bottom: 0; + right: 0; + inset-inline-start: initial; + inset-inline-end: 0; + display: -webkit-flex; + display: flex; + -webkit-align-items: center; + align-items: center; +} +.cardOverlayButtonIcon { + border-radius: 100em; + -webkit-justify-content: center; + justify-content: center; + -webkit-align-items: center; + align-items: center; + display: -webkit-flex; + display: flex; +} +:root { + --backdrop-cards: 1; + --small-sidefooter-cards: 1.3; + --sidefooter-cards: 1; + --banner-cards: 1; + --four-three-cards: 2; + --square-cards: 2; + --portrait-cards: 3; + --user-cards-size-adjust: 0; + --app-cards-size-adjust: 0; +} +.itemsContainer-defaultCardSize { + --user-cards-size-adjust: 0; +} +.cardSizeSmaller { + --app-cards-size-adjust: 1; +} +@media all and (min-width: 60em) and (max-width: 99em) { + .skinBody-withFullDrawer { + --app-cards-size-adjust: -1; + } + .skinBody-withFullDrawer .cardSizeSmaller { + --app-cards-size-adjust: -1; + } +} +.squareCard { + width: 16.6666667%; + width: calc(100% / (var(--square-cards) + var(--app-cards-size-adjust))); +} +.squareCard-horiz { + width: 15.3333333vw; + width: calc(92vw / var(--square-cards)); +} +.portraitCard { + width: 16.6666667%; + width: calc(100% / (var(--portrait-cards) + var(--app-cards-size-adjust))); +} +.portraitCard-horiz { + width: 15.3333333vw; + width: calc(92vw / var(--portrait-cards)); +} +.bannerCard { + width: 33.333333%; + width: calc(100% / (var(--banner-cards) + var(--app-cards-size-adjust))); +} +.bannerCard-horiz { + width: 30.66667vw; + width: calc(92vw / var(--banner-cards)); +} +.sideFooterCard { + width: 25%; + width: calc(100% / (var(--sidefooter-cards) + var(--app-cards-size-adjust))); +} +.sideFooterCard-horiz { + width: 23vw; + width: calc(92vw / var(--sidefooter-cards)); +} +.smallSideFooterCard { + width: 16.6666667%; + width: calc( + 100% / (var(--small-sidefooter-cards) + var(--app-cards-size-adjust)) + ); +} +.smallSideFooterCard-horiz { + width: 15.3333333vw; + width: calc( + 92vw / (var(--small-sidefooter-cards) + var(--app-cards-size-adjust)) + ); +} +.fourThreeCard { + width: 25%; + width: calc(100% / (var(--four-three-cards) + var(--app-cards-size-adjust))); +} +.fourThreeCard-horiz { + width: 23vw; + width: calc(92vw / var(--four-three-cards)); +} +.backdropCard { + width: 25%; + width: calc(100% / (var(--backdrop-cards) + var(--app-cards-size-adjust))); +} +.backdropCard-horiz { + width: 23vw; + width: calc(92vw / var(--backdrop-cards)); +} +@supports (width: max(10em, 5vw)) { + .squareCard { + width: calc( + 100% / + max( + ( + var(--square-cards) + var(--user-cards-size-adjust) + + var(--app-cards-size-adjust) + ), + 2 + ) + ); + } + .squareCard-horiz { + width: calc( + 92vw / max((var(--square-cards) + var(--user-cards-size-adjust)), 2) + ); + } + .portraitCard { + width: calc( + 100% / + max( + ( + var(--portrait-cards) + var(--user-cards-size-adjust) + + var(--app-cards-size-adjust) + ), + 3 + ) + ); + } + .portraitCard-horiz { + width: calc( + 92vw / max((var(--portrait-cards) + var(--user-cards-size-adjust)), 3) + ); + } + .bannerCard { + width: calc( + 100% / + max( + ( + var(--banner-cards) + var(--user-cards-size-adjust) + + var(--app-cards-size-adjust) + ), + 1 + ) + ); + } + .bannerCard-horiz { + width: calc( + 92vw / max((var(--banner-cards) + var(--user-cards-size-adjust)), 1) + ); + } + .sideFooterCard { + width: calc( + 100% / + max( + ( + var(--sidefooter-cards) + var(--user-cards-size-adjust) + + var(--app-cards-size-adjust) + ), + 1 + ) + ); + } + .sideFooterCard-horiz { + width: calc( + 92vw / max((var(--sidefooter-cards) + var(--user-cards-size-adjust)), 1) + ); + } + .smallSideFooterCard { + width: calc( + 100% / + max( + ( + var(--small-sidefooter-cards) + var(--user-cards-size-adjust) + + var(--app-cards-size-adjust) + ), + 1.3 + ) + ); + } + .smallSideFooterCard-horiz { + width: calc( + 92vw / + max( + (var(--small-sidefooter-cards) + var(--user-cards-size-adjust)), + 1.3 + ) + ); + } + .fourThreeCard { + width: calc( + 100% / + max( + ( + var(--four-three-cards) + var(--user-cards-size-adjust) + + var(--app-cards-size-adjust) + ), + 2 + ) + ); + } + .fourThreeCard-horiz { + width: calc( + 92vw / max((var(--four-three-cards) + var(--user-cards-size-adjust)), 2) + ); + } + .backdropCard { + width: calc( + 100% / + max( + ( + var(--backdrop-cards) + var(--user-cards-size-adjust) + + var(--app-cards-size-adjust) + ), + 1 + ) + ); + } + .backdropCard-horiz { + width: calc( + 92vw / max((var(--backdrop-cards) + var(--user-cards-size-adjust)), 1) + ); + } +} +@media all and (orientation: landscape) { + :root { + --backdrop-cards: 2; + } +} +@media all and (orientation: portrait) and (min-width: 24em) { + :root { + --backdrop-cards: 2; + } +} +@media all and (orientation: portrait) and (min-width: 31.25em) { + :root { + --square-cards: 3; + } +} +@media all and (min-width: 31.25em) { + :root { + --four-three-cards: 3; + } +} +@media all and (min-width: 36em) { + :root { + --square-cards: 3; + --portrait-cards: 4; + } +} +@media all and (min-width: 40em) { + :root { + --square-cards: 4; + --small-sidefooter-cards: 2; + } +} +@media all and (orientation: landscape) and (min-width: 40em) { + :root { + --portrait-cards: 5; + } +} +@media all and (orientation: landscape) and (min-width: 50em) { + :root { + --square-cards: 5; + } +} +@media all and (min-width: 45em) { + :root { + --four-three-cards: 4; + --sidefooter-cards: 2; + } +} +@media all and (min-width: 50em) { + :root { + --small-sidefooter-cards: 3; + } +} +@media (min-width: 50em) { + :root { + --backdrop-cards: 3; + } +} +@media all and (min-width: 55em) { + :root { + --banner-cards: 2; + --square-cards: 5; + --portrait-cards: 5; + } +} +@media (min-width: 62.5em) { + :root { + --backdrop-cards: 4; + } +} +@media all and (min-width: 66em) { + :root { + --small-sidefooter-cards: 4; + } +} +@media all and (min-width: 70em) { + :root { + --four-three-cards: 5; + --square-cards: 6; + --portrait-cards: 6; + } +} +@media all and (min-width: 76em) { + :root { + --sidefooter-cards: 3; + } +} +@media all and (min-width: 82.5em) { + :root { + --backdrop-cards: 5; + } +} +@media all and (min-width: 85em) { + :root { + --square-cards: 7; + --portrait-cards: 7; + } +} +@media all and (min-width: 100em) { + :root { + --banner-cards: 3; + --small-sidefooter-cards: 5; + --four-three-cards: 6; + --square-cards: 8; + --portrait-cards: 8; + } +} +@media all and (min-width: 115em) { + :root { + --small-sidefooter-cards: 6; + --portrait-cards: 9; + --square-cards: 9; + } +} +@media all and (min-width: 120em) { + :root { + --small-sidefooter-cards: 6; + } +} +@media all and (min-width: 130em) { + :root { + --square-cards: 10; + --portrait-cards: 10; + } +} +@media all and (min-width: 131.25em) { + :root { + --backdrop-cards: 6; + --four-three-cards: 7; + --sidefooter-cards: 4; + } +} +@media all and (min-width: 145em) { + :root { + --square-cards: 11; + --portrait-cards: 11; + } +} +@media all and (min-width: 150em) { + :root { + --banner-cards: 4; + } +} +@media all and (min-width: 160em) { + :root { + --backdrop-cards: 7; + --small-sidefooter-cards: 7; + --four-three-cards: 8; + --square-cards: 12; + --portrait-cards: 12; + } +} +@media all and (min-width: 175em) { + :root { + --square-cards: 13; + --portrait-cards: 13; + } +} +@media all and (min-width: 180em) { + :root { + --small-sidefooter-cards: 8; + --four-three-cards: 9; + } +} +@media all and (min-width: 190em) { + :root { + --square-cards: 14; + --portrait-cards: 14; + } +} +@media all and (min-width: 200em) { + :root { + --banner-cards: 5; + --sidefooter-cards: 5; + --backdrop-cards: 8; + --small-sidefooter-cards: 9; + --four-three-cards: 10; + } +} +@media all and (min-width: 205em) { + :root { + --square-cards: 15; + --portrait-cards: 15; + } +} +@media all and (min-width: 220em) { + :root { + --sidefooter-cards: 6; + --backdrop-cards: 9; + --small-sidefooter-cards: 10; + --four-three-cards: 11; + --square-cards: 16; + --portrait-cards: 16; + } +} +@media all and (min-width: 240em) { + :root { + --banner-cards: 6; + --sidefooter-cards: 7; + --small-sidefooter-cards: 11; + --four-three-cards: 12; + --square-cards: 17; + --portrait-cards: 17; + } +} +@media all and (orientation: portrait) and (max-width: 35em) { + .scrollX { + --backdrop-cards: 1.2; + } +} +.layout-tv:root { + --square-cards: 5; + --banner-cards: 3; + --sidefooter-cards: 3; + --small-sidefooter-cards: 4; + --portrait-cards: 6; + --backdrop-cards: 4; + --four-three-cards: 5; +} +.cardOverlayContainer { + background: rgba(51, 51, 51, 0.5); + opacity: 0; + transition: opacity 0.2s ease-out; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + inset-inline-start: 0; + inset-inline-end: 0; + -webkit-user-select: none; + user-select: none; + display: none; + -webkit-align-items: center; + align-items: center; + -webkit-justify-content: center; + justify-content: center; + border-radius: 0.3em; + z-index: 2; + contain: layout style; +} +.cardContent-button + .cardOverlayContainer { + cursor: pointer; +} +.chkCardSelectContainer { + font-size: 76%; + width: auto !important; + margin: 0 !important; + display: -webkit-inline-flex !important; + display: inline-flex !important; + -webkit-padding-start: 0.7em !important; + padding-inline-start: 0.7em !important; + -webkit-align-items: flex-start !important; + align-items: flex-start !important; + padding-top: 0.8em !important; + position: absolute !important; + top: 0; + left: 0; + inset-inline-start: 0; + inset-inline-end: initial; + padding: 0.8em 0.7em !important; +} +@media (hover: hover) and (pointer: fine) { + .cardOverlayContainer { + display: -webkit-flex; + display: flex; + } + .card-hoverable:hover .cardOverlayContainer { + opacity: 1; + } +} +.chkCardSelect { + top: 0; + left: 0; + inset-inline-start: 0; + inset-inline-end: initial; +} +.chkCardSelect + .checkboxLabel, +.chkCardSelect + .checkboxLabel::before { + border-radius: 100em !important; +} +.chkCardSelect-checkboxLabel::after { + border-width: 0.2em !important; +} +.cardOverlayButton-hover { + background: 0 0; + color: #fff; +} +.cardOverlayButtonIcon-hover { + background: 0 0 !important; + line-height: initial !important; + padding: 0.4em !important; +} +.cardOverlayFab-primary { + font-size: 180% !important; + padding: 0 !important; + transition: + -webkit-transform 240ms ease-out, + opacity 180ms ease-out; + transition: + transform 240ms ease-out, + opacity 180ms ease-out; + position: absolute; + top: 50%; + left: 50%; + inset-inline-start: 50%; + inset-inline-end: initial; + margin-top: -0.83em !important; + margin-bottom: 0 !important; + -webkit-margin-start: -0.83em !important; + margin-inline-start: -0.83em !important; + -webkit-margin-end: 0 !important; + margin-inline-end: 0 !important; + width: 1.66em; + height: 1.66em; + display: none; +} +.cardOverlayFab-primary:hover { + -webkit-transform: scale(1.1); + transform: scale(1.1); +} +[dir="rtl"] .cardOverlayFab-primary:hover { + -webkit-transform: scaleX(-1) scale(1.1); + transform: scaleX(-1) scale(1.1); +} +.multi-select-active .cardIndicator { + display: none; +} +.multi-select-active .cardOverlayContainer { + display: block !important; + opacity: 1 !important; +} +.multi-select-active .cardImageContainer { + transition: -webkit-transform 0.135s cubic-bezier(0, 0, 0.2, 1); + transition: transform 0.135s cubic-bezier(0, 0, 0.2, 1); +} +.multi-select-active .cardOverlayButton:not(.chkCardSelectContainer) { + opacity: 0 !important; + display: none !important; +} +.multi-select-active .chkCardSelectContainer { + opacity: 1 !important; +} +.item-multiselected .cardImageContainer { + -webkit-transform: translateZ(0) scale3d(0.79, 0.84, 1); + transform: translateZ(0) scale3d(0.79, 0.84, 1); +} +.item-multiselected .cardOverlayContainer { + background: 0 0 !important; +} +.cardMissingIndicator { + position: absolute; + top: 0.35em; + left: 0.225em; + inset-inline-start: 0.225em; + inset-inline-end: initial; + margin: 0 !important; + contain: layout style; +} +.cardSyncIndicator { + position: absolute; + bottom: 0.35em; + right: 0.18em; + inset-inline-start: initial; + inset-inline-end: 0.18em; + contain: layout style; +} +.cardPlayedIndicator, +.cardTimerIndicator { + border-radius: 100em; + font-size: 1.28em; + height: 1.25em; + width: 1.25em; + display: -webkit-flex; + display: flex; + -webkit-align-items: center; + align-items: center; + -webkit-justify-content: center; + justify-content: center; + top: 0.18em; + position: absolute; + right: 0.18em; + inset-inline-start: initial; + inset-inline-end: 0.18em; + contain: layout style; +} +.cardPlayedIndicator + .cardTimerIndicator { + right: 1.5em; + inset-inline-start: initial; + inset-inline-end: 1.5em; +} +.cardCountIndicator { + display: -webkit-flex; + display: flex; + -webkit-align-items: center; + align-items: center; + -webkit-justify-content: center; + justify-content: center; + top: 0.225em; + position: absolute; + right: 0.225em; + inset-inline-start: initial; + inset-inline-end: 0.225em; + contain: layout style; +} +.cardProgramIndicator { + contain: layout style; + display: -webkit-inline-flex; + display: inline-flex; + margin-top: 0; + margin-bottom: 0.2em; + -webkit-margin-start: 0.35em; + margin-inline-start: 0.35em; + -webkit-margin-end: 0; + margin-inline-end: 0; + padding: 0.08em 0.5em; + border-radius: 0.42em; + -webkit-align-items: center; + align-items: center; + -webkit-justify-content: center; + justify-content: center; + text-transform: uppercase; + font-size: 84%; + font-weight: 600; +} +.drag-reorder-y-active .skinHeader { + z-index: 0 !important; +} +.drag-reorder-y-active .appfooter { + display: none !important; +} +.dragging .cardOverlayContainer, +.dragging .cardIndicator:not(.cardIndicatorIcon-dragHandle) { + display: none !important; +} +.cardIndicatorIcon { + font-size: 1.6em; + top: 0.225em; + left: 0.225em; + inset-inline-start: 0.225em; + inset-inline-end: initial; + position: absolute; + color: #fff; +} +.cardIndicatorIcon-dragHandle { + right: 0.225em; + inset-inline-start: initial; + inset-inline-end: 0.225em; + text-shadow: 0.14em 0.14em 0.28em rgba(0, 0, 0, 0.45); + cursor: pointer; +} +.cardMediaInfoItems { + display: -webkit-flex; + display: flex; + -webkit-align-items: center; + align-items: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-column-gap: initial !important; + column-gap: initial !important; + -webkit-flex-wrap: nowrap; + flex-wrap: nowrap; +} +.cardMediaInfoItem { + -webkit-align-items: center; + align-items: center; + -webkit-justify-content: center; + justify-content: center; +} +.cardMediaInfoItem + .cardMediaInfoItem { + -webkit-margin-start: 0.5em !important; + margin-inline-start: 0.5em !important; +} +.cardMediaInfoItem .starIcon { + line-height: 0.96; +} +.card.dragging-over { + position: relative; + contain: none !important; + z-index: 1; +} +.dragging-over-left::before { + content: " "; + width: 0.24em; + position: absolute; + top: 0.8em; + bottom: 0.8em; + left: -0.14em; + inset-inline-start: -0.14em; + inset-inline-end: initial; + z-index: 99999; + border-radius: 100em; +} +.dragging-over-right::after { + content: " "; + width: 0.24em; + position: absolute; + right: -0.14em; + top: 0.8em; + bottom: 0.8em; + inset-inline-start: initial; + inset-inline-end: -0.14em; + z-index: 99999; + border-radius: 100em; +} +.cardProgressBarContainer { + background: 0 0 !important; +} +.visualCardBox-vibrant-lg::before { + content: " "; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + inset-inline-start: 0; + inset-inline-end: 0; + background: rgba(0, 0, 0, 0.2); + z-index: -1; +} +.autoWidthCard { + width: auto; +} +.card:focus .cardContent-bxsborder { + contain: initial; + content-visibility: initial; + overflow: visible; +} +.card:focus-visible .cardContent-bxsborder-fv { + contain: initial; + content-visibility: initial; + overflow: visible; +} +.sideFooterCard:focus .cardBox-sideFooter-f { + overflow: visible; +} +.sideFooterCard:focus .cardBox-sideFooter-f .cardContent { + border-start-start-radius: inherit; + border-end-start-radius: inherit; +} +.card:focus .cardContent-bxsborder::before, +.sideFooterCard:focus .cardBox-sideFooter-f::before { + content: " "; + position: absolute; + top: -0.34em; + left: -0.34em; + right: -0.34em; + bottom: -0.34em; + border-width: 0.22em; + border-style: solid; + border-radius: 0.6em; +} +.sideFooterCard:focus .cardBox-sideFooter-f::before { + border-radius: 0.72em; +} +.card:focus-visible .cardContent-bxsborder-fv::before { + content: " "; + position: absolute; + top: -0.34em; + left: -0.34em; + right: -0.34em; + bottom: -0.34em; + border-width: 0.22em; + border-style: solid; + border-radius: 0.6em; +} +.card:focus .cardContent-bxsborder.cardContent-round::before { + border-radius: 100em; +} +.card:focus .cardContent-bxsborder .cardImage { + border-radius: inherit; +} +.card:focus-visible .cardContent-bxsborder-fv.cardContent-round::before { + border-radius: 100em; +} +.card:focus-visible .cardContent-bxsborder-fv .cardImage { + border-radius: inherit; +} +.buttonCardBox { + border-radius: 0.6em; + margin: 0.4em; +} +.buttonCardBox::before, +.cardBox-sideFooter::before { + display: none !important; +} diff --git a/modules/cardbuilder/cardbuilder.js b/modules/cardbuilder/cardbuilder.js index a6de6a7..1f24f6c 100644 --- a/modules/cardbuilder/cardbuilder.js +++ b/modules/cardbuilder/cardbuilder.js @@ -1 +1,2316 @@ -define(["exports","./../emby-apiclient/connectionmanager.js","./../emby-apiclient/events.js","./../common/textencoding.js","./../common/globalize.js","./../common/datetime.js","./../common/itemmanager/itemmanager.js","./../common/playback/playbackmanager.js","./../dom.js","./../browser.js","./../focusmanager.js","./../layoutmanager.js","./../mediainfo/mediainfo.js","./../common/dataformatter.js","./../indicators/indicators.js","./../shortcuts.js","./../common/servicelocator.js","./../imageloader/imageloader.js","./../emby-elements/userdatabuttons/emby-playstatebutton.js","./../emby-elements/userdatabuttons/emby-ratingbutton.js","./../emby-elements/emby-checkbox/emby-checkbox.js","./../emby-elements/emby-button/paper-icon-button-light.js","./../common/usersettings/usersettings.js"],function(_exports,_connectionmanager,_events,_textencoding,_globalize,_datetime,_itemmanager,_playbackmanager,_dom,_browser,_focusmanager,_layoutmanager,_mediainfo,_dataformatter,_indicators,_shortcuts,_servicelocator,_imageloader,_embyPlaystatebutton,_embyRatingbutton,_embyCheckbox,_paperIconButtonLight,_usersettings){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,require(["css!modules/cardbuilder/card.css","programStyles","embyProgressBarStyle"]);var decodingAttribute=_dom.default.supportsAsyncDecodedImages()?' decoding="async"':"",supportsObjectFit=CSS.supports("object-fit","contain")&&!_browser.default.edge,supportsCssVariables=CSS.supports("color","var(--fake-var)"),supportsCalc=CSS.supports("width","min(45.2%,calc(100% - .65em))"),supportsMin=CSS.supports("width","min(10em, 5vw)"),EnableFocusTransfrom=_dom.default.allowFocusScaling(),supportsNativeLazyLoading="loading"in HTMLImageElement.prototype;var refreshIndicatorLoaded,cachedWidths={};function setListOptions(items,options){null==options.isBoundListItem&&(options.isBoundListItem=!0),options.horizontal,options.loadingLazyAttribute=' loading="lazy"',options.cardSize&&"default"!==options.cardSize||(options.cardSize=_usersettings.default.cardSize()),options.itemSelector=".card",options.imageFallback=!1!==options.imageFallback;for(var shape=options.shape||"auto",fieldMap=(options.sideFooter&&(options.textLinks=!(shape="banner")),options.fields||(options.fields=[]),{}),i=0,length=options.fields.length;i
91%
'),options.PersonRole&&lines.push(""),options.ChapterTime&&lines.push(""),options.ChannelName&&lines.push(""),options.LastServerAddress&&lines.push(""),options.Overview&&lines.push(getOverviewText("")),options.MediaInfo&&lines.push(""),options.Album&&lines.push(""),options.Type&&lines.push(""),options.LastActivityDateRelative&&lines.push(""),options.DateCreated&&lines.push(""),options.DateModified&&lines.push(""),options.Size&&lines.push(""),options.Version&&lines.push(""),options.Url&&lines.push(""),options.InstalledVersion&&lines.push(""),options.ItemImageName&&lines.push(""),options.Filename&&lines.push(""),options.FilenameOrName&&lines.push(""),(options.Resolution||options.Container||options.Bitrate)&&lines.push(""),options.ParentName&&lines.push(""),options.CollectionType&&lines.push(""),options.LibraryFolders&&lines.push(""),options.AppNameVersion&&lines.push(""),options.AppName&&lines.push(""),options.DeviceUserInfo&&lines.push(""),options.CurrentProgramTime&&lines.push(""),options.CurrentProgramParentName&&lines.push(""),options.CurrentProgramName&&lines.push(""),options.SeriesTimerChannel&&lines.push(""),options.SeriesTimerTime&&lines.push(""),options.ImageEditorStandardButtons&&lines.push(""),options.ImageEditorBackdropButtons&&lines.push(""),options.Genres&&lines.push(""),options.Tags&&lines.push(""),options.Studios&&lines.push(""),options.SessionNowPlayingInfo&&(lines.push(""),lines.push(""),lines.push("")),options.AirTime&&lines.push(""),options.AccessToken&&lines.push(""),options.DownloadableImageInfo&&(lines.push(""),lines.push("")),lines}(options),autoShape=(options.lines||options.overlayText||(options.lines=templateLines.length),"auto"===shape||"autooverflow"===shape),items=shape=autoShape?_imageloader.default.getShape(items,options):shape,autoShape=(options.sideFooter&&(items="square"),"auto"===options.preferThumb&&(options.preferThumb="square"===items?null:"backdrop"===items||"fourThree"===items),!0===options.preferThumb&&autoShape&&(items="backdrop",options.sideFooter||(shape="backdrop")),options.uiAspect=_imageloader.default.getAspectFromShape(items,options).aspect,!options.width&&options.widths&&(options.width=options.widths[items]),options.rows&&"number"!=typeof options.rows&&(options.rows=options.rows[items]),"card"),isLayoutTV=(shape&&(autoShape+=" "+shape+"Card"),options.horizontal&&(autoShape+=" card-horiz "+shape+"Card-horiz"),options.cardClass&&(autoShape+=" "+options.cardClass),_layoutmanager.default.tv),isSingleClickElement=(isLayoutTV||(autoShape+=" card-hoverable"),options.enableFocusScaling=!1!==options.enableFocusScaling&&isLayoutTV&&EnableFocusTransfrom,options.enableCardBox=options.enableFocusScaling||options.cardLayout||options.sideFooter||!isLayoutTV||!options.isVirtualList,isLayoutTV&&!options.staticElement||!1===options.hoverMenu&&"none"!==options.action),lineContents=(options.enableFocusScaling&&(autoShape+=" card-focustransform"),options.sideFooter&&(autoShape+=" sideFooterCard",options.horizontal)&&(autoShape+=" sideFooterCard-horiz"),options.smallSideFooter&&(autoShape+=" smallSideFooterCard",options.horizontal)&&(autoShape+=" smallSideFooterCard-horiz"),isSingleClickElement?(tagName="button",autoShape+=" itemAction"):(tagName="div",options.staticElement||(options.addTabIndex=!0)),isLayoutTV?(options.draggable=!1,options.dropTarget=!1,options.dragReorder=!1):(options.draggable=!1!==options.draggable,options.dragReorder&&options.draggable?autoShape+=" drop-target ordered-drop-target-x":options.dropTarget&&(autoShape+=" drop-target full-drop-target")),[]);for(options.lines&&(lineContents.length=options.lines),i=0,length=lineContents.length;i
':screenWidth.innerHTML='
',(itemsContainerClass=document.body).appendChild(screenWidth),width=options.sideFooter?cachedWidths[key]=screenWidth.querySelector(".cardImageContainer").offsetWidth||400:cachedWidths[key]=screenWidth.querySelector(".cardScalable").offsetWidth||400,itemsContainerClass.removeChild(screenWidth),console.log("width: "+width)),width}(autoShape,cardBoxClass,cardContentClass,options,screenWidth),windowWidth=screenWidth,(screen=window.screen)&&20':""),cardDefaultTextClass=cardDefaultTextClass.join(" "),innerCardFooterClass=innerCardFooterClass.join(" "),screen=(isSingleClickElement||"none"===options.action?screenWidth+='
':screenWidth+='',"cardFooter"),windowWidth=(options.vibrant&&(screen+=" cardFooter-vibrant"),options.outerFooterClass=screen,options.cardLayout&&(screenWidth+='
'),screenWidth+=lines,options.cardLayout&&(screenWidth+="
"),options.enableCardBox&&(screenWidth+=""),null==options.defaultIcon&&(options.sideFooter||options.lines||fieldMap.Name?options.defaultIcon=!0:options.defaultIcon=!1),options.moreTitle=_globalize.default.translate("More"),options.multiSelectTitle=_globalize.default.translate("MultiSelect"),options.multiSelect=!1!==options.multiSelect&&!isLayoutTV,options.contextMenu=!1!==options.contextMenu,options.enableUserData=!1!==options.enableUserData,"");options.addTabIndex&&(windowWidth+=' tabindex="0"'),options.draggable&&(windowWidth+=' draggable="true"'),"button"===tagName&&(windowWidth+=' type="button"'),options.fixedAttributes=windowWidth.trim(),options.templateInnerHTML=screenWidth,options.cardPadderClass=cardDefaultTextClass,options.innerCardFooterClass=innerCardFooterClass,options.tagName=tagName,options.shape=shape,options.imageShape=items,options.className=autoShape,options.isSingleClickElement=isSingleClickElement,options.cardContentClass=cardContentClass,options.cardBoxClass=cardBoxClass}function buildCardsHtmlInternal(items,options){setListOptions(items,options);for(var hasOpenRow,html="",itemsInRow=0,rows=options.rows,i=0,length=items.length;i",hasOpenRow=!1),html+='
',hasOpenRow=!0),html+=getCardHtml(items[i],i,options),itemsInRow++,rows&&rows<=itemsInRow&&(html+="
",hasOpenRow=!1,itemsInRow=0);return hasOpenRow&&(html+=""),html}function getCardTextLines(lines,cssClass,forceLines,isOuterFooter,maxLines,options){for(var html="",valid=0,currentCssClass=cssClass,i=0,length=lines.length;i')+text+"",valid++,maxLines)&&maxLines<=valid)break}if(forceLines)for(length=maxLines||Math.min(lines.length,maxLines||lines.length);valid ',valid++;return html}function isUsingLiveTvNaming(itemType){return"Program"===itemType||"Timer"===itemType||"Recording"===itemType}function getAirTimeText(item,showAirDateTime,showAirEndTime){var airTimeText="";if(item.StartDate)try{var date=new Date(Date.parse(item.StartDate));showAirDateTime&&(airTimeText+=_datetime.default.toLocaleDateString(date,{weekday:"short",month:"short",day:"numeric"})+" "),airTimeText+=_datetime.default.getDisplayTime(date),item.EndDate&&showAirEndTime&&(date=new Date(Date.parse(item.EndDate)),airTimeText+=" – "+_datetime.default.getDisplayTime(date))}catch(e){console.log("Error parsing date: "+item.StartDate)}return airTimeText}function getOverviewText(text){var html='
';return{html:html+_textencoding.default.htmlEncode(text||"")+"
"}}function getTextLinksLine(options,item,linkItems,linkItemType,limit){linkItems=linkItems||[];for(var html="",i=0,length=limit=Math.min(linkItems.length,limit);i'+html+""}function getCardFooterText(item,itemController,options,fieldMap,imgUrl,footerClass,progressHtml,logoUrl,isOuterFooter){var parentTitleUnderneath,itemType=item.Type,html="",lines=(logoUrl&&(html+=''),[]);switch(itemType){case"MusicAlbum":case"Audio":case"MusicVideo":case"Game":parentTitleUnderneath=!0}var serverId=item.ServerId||options.serverId,parentTitle=(fieldMap.Album&&options.albumFirst&&(isOuterFooter&&item.AlbumId&&item.Album?lines.push(getTextActionButton(options,{Id:item.AlbumId,ServerId:serverId,Name:item.Album,Type:"MusicAlbum",IsFolder:!0})):lines.push(item.Album||"")),!fieldMap.ParentName&&!fieldMap.ParentNameOrName||parentTitleUnderneath||(isOuterFooter&&"Episode"===itemType&&item.SeriesName?item.SeriesId?lines.push(getTextActionButton(options,{Id:item.SeriesId,ServerId:serverId,Name:item.SeriesName,Type:"Series",IsFolder:!0})):lines.push(_textencoding.default.htmlEncode(item.SeriesName)):isUsingLiveTvNaming(itemType)?(lines.push(_textencoding.default.htmlEncode(item.Name)),item.EpisodeTitle||(titleAdded=!0)):((parentTitle=item.SeriesName||item.Series||item.Album||(item.AlbumArtist?item.AlbumArtist.Name||item.AlbumArtist:null)||item.GameSystem||"")||fieldMap.Name)&&lines.push(_textencoding.default.htmlEncode(parentTitle))),fieldMap.Name&&!titleAdded||fieldMap.ParentNameOrName&&!lines.length);if((parentTitle=parentTitle||titleAdded||!fieldMap.Name?parentTitle:!0)&&(titleAdded=itemController.getDisplayName(item,{includeParentInfo:options.includeParentInfoInTitle,channelNumberFirst:options.channelNumberFirst}))&&(isOuterFooter?lines.push(getTextActionButton(options,item,titleAdded,serverId,options.parentId,!0)):lines.push(_textencoding.default.htmlEncode(titleAdded))),fieldMap.Type&&lines.push(itemController.getItemTypeName(itemType)),fieldMap.ParentName&&parentTitleUnderneath&&(isOuterFooter&&item.AlbumArtists&&item.AlbumArtists.length&&"MusicAlbum"===itemType?(item.AlbumArtists[0].Type="MusicArtist",item.AlbumArtists[0].IsFolder=!0,lines.push(getTextActionButton(options,item.AlbumArtists[0],null,serverId))):isOuterFooter&&item.ArtistItems&&item.ArtistItems.length?(item.ArtistItems[0].Type="MusicArtist",item.ArtistItems[0].IsFolder=!0,lines.push(getTextActionButton(options,item.ArtistItems[0],null,serverId))):isOuterFooter&&item.AlbumArtists&&item.AlbumArtists.length?(item.AlbumArtists[0].Type="MusicArtist",item.AlbumArtists[0].IsFolder=!0,lines.push(getTextActionButton(options,item.AlbumArtists[0],null,serverId))):isOuterFooter&&item.GameSystem&&item.GameSystemId?lines.push(getTextActionButton(options,{Id:item.GameSystemId,ServerId:serverId,Name:item.GameSystem,Type:"GameSystem",IsFolder:!0})):lines.push(_textencoding.default.htmlEncode(isUsingLiveTvNaming(itemType)?item.Name:item.SeriesName||item.Series||item.Album||(item.AlbumArtist?item.AlbumArtist.Name||item.AlbumArtist:null)||item.GameSystem||""))),options.textLines)for(var additionalLines=options.textLines(item),i=0,length=additionalLines.length;i'+lineParts.join("")+"")),fieldMap.ProductionYear),titleAdded=fieldMap.OfficialRating,lineParts=fieldMap.Runtime;if((parentTitle||titleAdded||lineParts)&&(_lineParts=[],parentTitle&&("Series"===itemType?"Continuing"===item.Status?item.ProductionYear&&_lineParts.push(_globalize.default.translate("SeriesYearToPresent",item.ProductionYear||"")):(parentTitle=item.EndDate?new Date(Date.parse(item.EndDate)).getFullYear():null)&&item.ProductionYear&&parentTitle!==item.ProductionYear?_lineParts.push(item.ProductionYear+" – "+parentTitle):item.ProductionYear&&_lineParts.push(item.ProductionYear):item.ProductionYear&&_lineParts.push(item.ProductionYear)),lineParts&&item.RunTimeTicks&&_lineParts.push(_datetime.default.getHumanReadableRuntime(item.RunTimeTicks)),titleAdded&&item.OfficialRating&&_lineParts.push(item.OfficialRating),lines.push(_lineParts.join("  "))),fieldMap.Genres)if(null!=(parentTitle=item.GenreItems)&&parentTitle.length){switch(itemType){case"Audio":case"MusicAlbum":case"MusicArtist":case"MusicVideo":0;break;case"Game":case"GameSystem":0;break;default:0}lines.push(getTextLinksLine(options,item,item.GenreItems,0,2))}else emptyLines.push('
 
');return fieldMap.Studios&&(null!=(lineParts=item.Studios)&&lineParts.length?lines.push(getTextLinksLine(options,item,item.Studios,0,1)):emptyLines.push('
 
')),fieldMap.Tags&&(null!=(titleAdded=item.TagItems)&&titleAdded.length?lines.push(getTextLinksLine(options,item,item.TagItems,0,2)):emptyLines.push('
 
')),fieldMap.AirTime&&lines.push(getAirTimeText(item,options.showAirDateTime,options.showAirEndTime)||""),fieldMap.ChannelName&&(item.ChannelId?lines.push(getTextActionButton(options,{Id:item.ChannelId,ServerId:serverId,Name:item.ChannelName,ChannelNumber:item.ChannelNumber,Type:"TvChannel",MediaType:item.MediaType,IsFolder:!1})):lines.push(item.ChannelName||" ")),fieldMap.CurrentProgramParentName&&(item.CurrentProgram?lines.push(item.CurrentProgram.Name||""):lines.push("")),fieldMap.CurrentProgramName&&(item.CurrentProgram?lines.push(item.CurrentProgram.EpisodeTitle||""):lines.push(item.Name||"")),fieldMap.CurrentProgramTime&&(item.CurrentProgram?lines.push(getAirTimeText(item.CurrentProgram,!1,!0)||""):lines.push("")),fieldMap.SeriesTimerTime&&(item.RecordAnyTime?lines.push(_globalize.default.translate("Anytime")):item.StartDate?lines.push(_datetime.default.getDisplayTime(item.StartDate)):lines.push("")),fieldMap.SeriesTimerChannel&&(item.RecordAnyChannel||null==(_lineParts=item.ChannelIds)||!_lineParts.length?lines.push(_globalize.default.translate("AllChannels")):1<(null==(parentTitle=item.ChannelIds)?void 0:parentTitle.length)?lines.push(_globalize.default.translate("NumberChannelsValue",null==(itemType=item.ChannelIds)?void 0:itemType.length)):item.ChannelName?lines.push(_itemmanager.default.getDisplayName({Id:item.ChannelId,ServerId:serverId,Name:item.ChannelName,ChannelNumber:item.ChannelNumber,Type:"TvChannel",MediaType:item.MediaType,IsFolder:!1},{})):lines.push(_globalize.default.translate("OneChannel"))),fieldMap.PersonRole&&(item.Role?lines.push(_globalize.default.translate("ActorAsRole",item.Role)):item.PersonType?lines.push(_globalize.default.translate(item.PersonType)):lines.push("")),fieldMap.ChapterTime&&lines.push(_datetime.default.getDisplayRunningTime(item.StartPositionTicks)),fieldMap.LastActivityDateRelative&&lines.push(itemController.resolveField(item,"LastActivityDateRelative")),fieldMap.AppName&&lines.push(itemController.resolveField(item,"AppName")),fieldMap.AccessToken&&lines.push(itemController.resolveField(item,"AccessToken")),fieldMap.DateCreated&&lines.push(itemController.resolveField(item,"DateCreated")),fieldMap.Url&&lines.push(item.Url||""),fieldMap.Version&&lines.push(item.Version||""),fieldMap.CollectionType&&(item.Id?lines.push(_itemmanager.default.getContentTypeName(item.CollectionType)):lines.push("")),fieldMap.LibraryFolders&&(item.Locations&&"boxsets"!==item.CollectionType?1===item.Locations.length?lines.push(item.Locations[0]):lines.push(_globalize.default.translate("NumLocationsValue",item.Locations.length)):lines.push("")),fieldMap.AppNameVersion&&lines.push(itemController.resolveField(item,"AppNameVersion")),fieldMap.InstalledVersion&&(item.InstalledVersion?lines.push(_globalize.default.translate("LabelVersionInstalled",item.InstalledVersion)):lines.push("")),fieldMap.InstalledVersion&&lines.push(item.Version||""),fieldMap.ItemImageName&&(item.ImageTag?lines.push(item.Name):lines.push(" ")),fieldMap.Filename&&lines.push(item.FileName||item.Filename),fieldMap.FilenameOrName&&lines.push(_textencoding.default.htmlEncode(item.FileName||item.Filename||item.Name||"")),fieldMap.MediaInfo&&lines.push({html:'
'+_mediainfo.default.getPrimaryMediaInfoHtml(item,{episodeTitle:!1,subtitles:!1,endsAt:!1})+"
"}),fieldMap.Overview&&lines.push(getOverviewText(item.Overview)),(fieldMap.Resolution||fieldMap.Container||fieldMap.Bitrate)&&(lineParts=[],fieldMap.Container&&item.Container&&lineParts.push(item.Container.toUpperCase()),fieldMap.Resolution&&item.Width&&item.Height&&(titleAdded=_dataformatter.default.getResolutionText(item))&&lineParts.push(titleAdded),fieldMap.Bitrate&&item.Bitrate&&lineParts.push(_dataformatter.default.bitrateToString(item.Bitrate)),lines.push(lineParts.join("  ")||" ")),fieldMap.DownloadableImageInfo&&(lines.push(function(item){var text="",lang=item.DisplayLanguage||item.Language;return item.Width&&item.Height?(text+=item.Width+"x"+item.Height,lang&&(text+=" - "+lang)):lang&&(text+=lang),text}(item)||""),lines.push(function(item){var text;return"Likes"===item.RatingType?text=1===item.CommunityRating?_globalize.default.translate("OneLike"):_globalize.default.translate("LikeCountValue",item.CommunityRating):item.CommunityRating?(text=_dataformatter.default.numberToString(item.CommunityRating,1),item.VoteCount&&(text+=" - "+(1===item.VoteCount?_globalize.default.translate("OneVote"):_globalize.default.translate("VoteCountValue",item.VoteCount)))):text=_globalize.default.translate("Unrated"),text}(item)||"")),fieldMap.DateModified&&lines.push(itemController.resolveField(item,"DateModified")),fieldMap.Size&&lines.push(itemController.resolveField(item,"Size")),fieldMap.DeviceUserInfo&&(_lineParts="",item.LastUserName&&(item.LastUserId?_lineParts+=getTextActionButton(options,{Id:item.LastUserId,Name:item.LastUserName,ServerId:serverId,Type:"User"},item.LastUserName+", "+_dataformatter.default.formatRelativeTime(item.DateLastActivity),null,null):item.LastUserName&&(_lineParts+=item.LastUserName+", "+_dataformatter.default.formatRelativeTime(item.DateLastActivity))),lines.push(_lineParts)),fieldMap.MediaStreamInfo&&_mediainfo.default.pushMediaStreamLines(item,options,lines,itemController.getDefaultIcon(item)),fieldMap.ImageEditorStandardButtons&&lines.push(function(item){var searchText,html="";return item.Providers.length&&(html+=''),item.ImageTag||_servicelocator.appHost.supports("fileinput")&&(html+=''),item.ImageTag&&(html+=''),html}(item)),fieldMap.ImageEditorBackdropButtons&&lines.push(function(){var html="";return html+=''}()),fieldMap.SessionNowPlayingInfo&&function(lines,item){var playstate=item.PlayState,item=item.NowPlayingItem||{};lines.push(item.SeriesName||item.Name),"Episode"===item.Type?lines.push(_itemmanager.default.getDisplayName(item,{includeParentInfo:!0})):item.ArtistItems&&item.ArtistItems.length?lines.push(item.ArtistItems[0].Name):item.ProductionYear&&lines.push(item.ProductionYear),item.RunTimeTicks&&lines.push(_datetime.default.getDisplayRunningTime(playstate.PositionTicks||0)+" / "+_datetime.default.getDisplayRunningTime(item.RunTimeTicks))}(lines,item),fieldMap.LastServerAddress&&("Server"===item.Type?(parentTitle=_connectionmanager.default.getApiClient(item),lines.push(parentTitle&&parentTitle.serverAddress()||"")):lines.push("")),html+=getCardTextLines(lines=lines.concat(emptyLines),options.cardTextCssClass,isOuterFooter,isOuterFooter,options.lines,options),progressHtml&&(html+=progressHtml),html&&(!isOuterFooter||logoUrl||options.cardLayout)&&(html='
'+html,html+="
"),html}function getTextActionButton(options,item,text,serverId,parentId,isSameItemAsCard){var dataAttributes;return text=text||_itemmanager.default.getDisplayName(item),_layoutmanager.default.tv||!1===options.textLinks?_textencoding.default.htmlEncode(text):(text=_textencoding.default.htmlEncode(text),item=isSameItemAsCard?(dataAttributes="",options.linkButtonAction||"link"):(dataAttributes=_shortcuts.default.getShortcutAttributesHtml(item,{serverId:serverId,parentId:parentId,isBoundListItem:options.isBoundListItem&&isSameItemAsCard}),"link"),'")}function getActiveSessionFooterHtml(options,item,apiClient){var html="";return(html+='
')+function(item){var imgClass,imageUrl,html="";return item.NowPlayingItem&&(html+='
",imgClass="secondaryText activeSession-deviceimage",html=(imageUrl=item.AppIconUrl)?html+('
':(html=html+'
')+_itemmanager.default.getDefaultIcon(item)+"
",html+="
",item.Client&&(html=(html+="
")+item.Client+" "+item.ApplicationVersion+"
"),item.DeviceName&&(html=(html+='
')+_textencoding.default.htmlEncode(item.DeviceName)+"
"),item.RemoteEndPoint&&(html=html+'
'+item.RemoteEndPoint,(imageUrl=(item.Protocol||"").toLowerCase())&&(html+=" "+imageUrl),imageUrl.includes("https")&&(html+='https'),html+="
"),html+="
"),html}(item)+function(item){for(var html="",playstate=item.PlayState||{},nowplayingItem=item.NowPlayingItem||{},item=item.TranscodingInfo||{},transcodeReasons=(html=(html=(html=html+'
'+'
')+_globalize.default.translate("Stream"))+"
"+"
",nowplayingItem.Container&&(html=(html+="
")+nowplayingItem.Container.toUpperCase(),nowplayingItem.Bitrate&&(html+=" ("+_dataformatter.default.bitrateToString(nowplayingItem.Bitrate)+")"),html+="
"),html=html+"
"+'',"Transcode"===playstate.PlayMethod?(nowplayingItem=[],item.SubProtocol&&"progressive"!==item.SubProtocol?nowplayingItem.push(item.SubProtocol.toUpperCase()):item.Container&&nowplayingItem.push(item.Container.toUpperCase()),item.Bitrate&&(playstate="(",item.Bitrate&&(playstate+=_dataformatter.default.bitrateToString(item.Bitrate)),item.Framerate&&(playstate+=" "+_dataformatter.default.numberToString(item.Framerate,3)+" fps"),nowplayingItem.push(playstate+=")")),item.CurrentThrottle&&nowplayingItem.push('Throttling'),html+=nowplayingItem.join(" ")):html+=_globalize.default.translate("HeaderDirectPlay"),html+="
",item.TranscodeReasons||[]),i=0,length=transcodeReasons.length;i")+_globalize.default.translate(transcodeReasons[i])+"
";return html=html+"
"+"
"}(item)+function(item){for(var mediaStream,html="",playstate=item.PlayState||{},mediaStreams=(item.NowPlayingItem||{}).MediaStreams||[],videoStreamIndex=playstate.VideoStreamIndex,playstate=item.TranscodingInfo||{},i=0,length=mediaStreams.length;i'+'
')+_globalize.default.translate("Video"))+"
"+"
",mediaStream.DisplayTitle&&(html=html+'
'+mediaStream.DisplayTitle,playstate.VideoDecoderHwAccel&&(html+=''),html+="
"),html=html+'
'+'',!1===playstate.IsVideoDirect?(html=(html=html+_globalize.default.translate("Transcode")+" (")+(playstate.VideoCodec||"").toUpperCase()+" ",playstate.VideoBitrate&&(html+=_dataformatter.default.bitrateToString(playstate.VideoBitrate)),html+=")",playstate.VideoEncoderHwAccel&&(html+='')):(html+=_globalize.default.translate("HeaderDirectPlay"),mediaStream.BitRate&&(html+=" ("+_dataformatter.default.bitrateToString(mediaStream.BitRate)+")")),html+="
",!1===playstate.IsVideoDirect)for(var pipeline=playstate.VideoPipelineInfo||[],_i=0,_length=pipeline.length;_i<_length;_i++){var extra,step=pipeline[_i];"ToneMapping"!==step.StepType&&"Deinterlace"!==step.StepType&&"SubTitleBurnIn"!==step.StepType&&"SubtitleOverlay"!==step.StepType||(html+='
',"ToneMapping"===step.StepType?html+=_globalize.default.translate("HeaderToneMapping"):"Deinterlace"===step.StepType?html+=_globalize.default.translate("Deinterlacing"):"SubTitleBurnIn"!==step.StepType&&"SubtitleOverlay"!==step.StepType||(html+=_globalize.default.translate("HeaderBurningInSubtitles")),extra=[],step.ParamShort?extra.push(step.ParamShort):step.Param?"Subtitles"!==step.Param&&extra.push(step.Param):step.FfmpegOptions&&extra.push(step.FfmpegOptions),extra.length&&(html+=' ('+extra.join(" ")+")"),html+="
")}html=html+"
"+""}return html}(item)+function(item){for(var mediaStream,html="",playstate=item.PlayState||{},mediaStreams=(item.NowPlayingItem||{}).MediaStreams||[],audioStreamIndex=playstate.AudioStreamIndex,playstate=item.TranscodingInfo||{},i=0,length=mediaStreams.length;i
')+_globalize.default.translate("Audio")+"
",html=(mediaStream.DisplayTitle?(html+="
")+mediaStream.DisplayTitle+"
":html)+'
',!1===playstate.IsAudioDirect?(html=(html=html+_globalize.default.translate("Transcode")+" (")+(playstate.AudioCodec||"").toUpperCase()+" ",playstate.AudioBitrate&&(html+=_dataformatter.default.bitrateToString(playstate.AudioBitrate)),html+=")"):(html+=_globalize.default.translate("HeaderDirectPlay"),mediaStream.BitRate&&(html+=" ("+_dataformatter.default.bitrateToString(mediaStream.BitRate)+")")),html+="
"),html}(item)+function(item,apiClient){var html="";if(item.UserId){html+='
";var names=[];item.UserId&&names.push(item.UserName);for(var i=0,length=item.AdditionalUsers.length;i'),html=html+("
"+names.join(", ")+"
")+"
"}return html}(item,apiClient)+function(options,item){var html="";return options.isSingleClickElement||item.DeviceId===_connectionmanager.default.deviceId()||(item.ServerId&&item.NowPlayingItem&&item.SupportsRemoteControl&&(html=(html+='")+''),item.ServerId&&item.SupportedCommands.includes("DisplayMessage")&&item.DeviceId!==_connectionmanager.default.deviceId()&&(html+=''),html&&(html='
'+html,html+="
")),html}(options,item)+""}function getCardHtml(item,index,options){var itemType=item.Type,action=options.action||"link",shape=("none"!==action&&(item.IsFolder&&"play"===action?action="link":"Photo"===item.MediaType?action="playallfromhere":"AddServer"!==itemType&&"EmbyConnect"!==itemType&&"Downloads"!==itemType||(action="link")),options.shape),imageShape=options.imageShape,isSingleClickElement=options.isSingleClickElement,serverId=item.ServerId||options.serverId,serverId=serverId?_connectionmanager.default.getApiClient(serverId):null,imageItem=options.showCurrentProgramImage?item.CurrentProgram||item:"ActiveSession"===itemType?item.NowPlayingItem:item.ProgramInfo||item,blurImageOptions=(!1!==options.image&&imageItem?(imgInfo=_imageloader.default.getImageUrl(imageItem,serverId,options,imageShape),blurImageOptions="large"===options.vibrantMode?{width:12,blur:2,adjustForPixelRatio:!1}:{width:1,adjustForPixelRatio:!1},vibrantImgInfo=options.vibrant?_imageloader.default.getImageUrl(imageItem,serverId,blurImageOptions,imageShape):null,imgInfo.imgUrl||imageItem===item||(imgInfo=_imageloader.default.getImageUrl(imageItem=item,serverId,options,imageShape),vibrantImgInfo=options.vibrant?_imageloader.default.getImageUrl(imageItem,serverId,blurImageOptions,imageShape):null)):imgInfo={},imgInfo.imgUrl),imageShape=(vibrantImgInfo||imgInfo).imgUrl,vibrantImgInfo=imgInfo.forceName&&"Photo"!==item.MediaType,overlayText=options.overlayText,fieldMap=options.fieldMap,cardContentClass=options.cardContentClass,cardImageClass="cardImage",imageItem=!1===options.coverImage?null:_imageloader.default.getCoveredImageClass(imageItem,imgInfo.aspect,options.uiAspect,options.coverImage);imageItem&&(cardContentClass+=imageItem,cardImageClass+=imageItem),options.paddedImage&&(cardImageClass+=" cardImage-padded"),item.Policy&&item.Policy.IsDisabled&&(cardContentClass+=" grayscaleImage"),options.defaultBackground||blurImageOptions||options.cardLayout||(cardContentClass+=" defaultCardBackground");options.round||("MusicArtist"!==itemType||"square"!==shape)||(cardContentClass+=" cardContent-round");var cardImageContainerOpen,footerCssClass,logoUrl,imgInfo=options.cardBoxClass,imageItem=(options.playQueueIndicator&&item.PlaylistItemId&&(_playbackmanager.default.currentItem()||{}).PlaylistItemId===item.PlaylistItemId&&(imgInfo+=" activePlaylistCardBox"),!1===options.progress?null:_indicators.default.getProgressBarHtml(item,{containerClass:"cardProgressBarContainer",animated:!1})),shape="",itemController=(options.showChannelLogo&&item.ChannelPrimaryImageTag&&(logoUrl=serverId.getImageUrl(item.ChannelId,{type:"Primary",height:40,tag:item.ChannelPrimaryImageTag})),!1===options.programIndicators||"Program"!==itemType&&"Timer"!==itemType&&"TvChannel"!==itemType||(imageItem=function(item){var html="";return(item=item.CurrentProgram||item).IsLive?html+='
'+_globalize.default.translate("Live")+"
":item.IsPremiere&&(html+='
'+_globalize.default.translate("Premiere")+"
"),html}(item)+(imageItem||"")),_itemmanager.default.getItemController(itemType)),vibrantImgInfo=(overlayText||vibrantImgInfo?(footerCssClass=options.innerCardFooterClass,shape+=getCardFooterText(item,itemController,options,function(options,fieldMap,overlayText,forceName){return overlayText?!forceName||fieldMap.Name||fieldMap.ParentNameOrName||fieldMap.ParentName?fieldMap:options.fieldMapWithForceName:!forceName||fieldMap.Name||fieldMap.ParentNameOrName||fieldMap.ParentName?{}:{ParentNameOrName:!0}}(options,fieldMap,overlayText,vibrantImgInfo),0,footerCssClass,imageItem,logoUrl=null,!1),imageItem=""):imageItem&&(shape=(shape+='
')+imageItem+"
",imageItem=""),""),fieldMap=(overlayText||(footerCssClass=options.cardLayout?options.outerFooterClass:"cardFooter cardFooter-transparent",options.sideFooter&&(footerCssClass+=" cardFooter-side"),logoUrl&&(footerCssClass+=" cardFooter-withlogo"),options.vibrant&&imageShape&&"large"!==options.vibrantMode&&(footerCssClass+=" darkContentContainer"),vibrantImgInfo=getCardFooterText(item,itemController,options,fieldMap,0,footerCssClass,imageItem,logoUrl=options.cardLayout?logoUrl:null,!0),options.sideFooter&&(overlayText="cardFooterContent",options.centerText||(overlayText+=" cardFooterContent-start"),vibrantImgInfo='
'+vibrantImgInfo+"
","ActiveSession"===itemType)&&(vibrantImgInfo+=getActiveSessionFooterHtml(options,item,serverId))),"");return options.sideFooter||(cardContentClass+=" "+options.cardPadderClass),fieldMap=isSingleClickElement?(cardImageContainerOpen=blurImageOptions?2===options.lazy?supportsObjectFit?'
 ':'
':supportsNativeLazyLoading?'
 ':'
':'
',"
"):"none"===action?(cardImageContainerOpen=blurImageOptions?2===options.lazy?supportsObjectFit?'
 ':'
':supportsNativeLazyLoading?'
 ':'
':'
',"
"):(cardImageContainerOpen=blurImageOptions?2===options.lazy?supportsObjectFit?'"),!1===options.image&&!1===options.imageContainer&&(cardImageContainerOpen=fieldMap=""),options.vibrant&&imageShape?("large"===options.vibrantMode&&(imgInfo+=" darkContentContainer"),cardImageContainerOpen='
'+cardImageContainerOpen):options.enableCardBox&&(cardImageContainerOpen='
'+cardImageContainerOpen),options.typeIndicator&&("Video"===itemType?cardImageContainerOpen+='':"Folder"===itemType||"PhotoAlbum"===itemType?cardImageContainerOpen+='':"Photo"===itemType&&(cardImageContainerOpen+='')),!1!==options.missingIndicator&&(cardImageContainerOpen+=_indicators.default.getMissingIndicator(item,"cardIndicator cardMissingIndicator")),!1!==options.syncIndicator&&(100===(footerCssClass=item.SyncPercent)?cardImageContainerOpen+='':null!=footerCssClass&&(cardImageContainerOpen+='')),!1!==options.playedIndicator&&(cardImageContainerOpen+=_indicators.default.getPlayedIndicatorHtml(item,"cardIndicator card")),!1!==options.timerIndicator&&(cardImageContainerOpen+=_indicators.default.getTimerIndicator(item,"cardIndicator card")),"CollectionFolder"===itemType||item.CollectionType?(imageItem=item.RefreshProgress?"":"hide",options.sideFooter&&(imageItem+=" cardRefreshIndicator-sideFooter"),cardImageContainerOpen+='
',refreshIndicatorLoaded||(refreshIndicatorLoaded=!0,require(["emby-itemrefreshindicator"]))):"User"===itemType&&item.ConnectLinkType&&(cardImageContainerOpen+='cloud'),!blurImageOptions&&options.imageFallback&&(cardImageContainerOpen+=function(item,options){if(null!=options.defaultTextContent)return'
'+options.defaultTextContent+"
";if("ItemImage"===item.Type)return function(item,options){return'

'+item.Name+"

"}(item,options);var icon=item.Icon||(!1===options.defaultIcon?null:_itemmanager.default.getDefaultIcon(item,options));if(icon)return options.smallSideFooter?''+icon+"":options.sideFooter?''+icon+"":''+icon+"";icon=isUsingLiveTvNaming(item.Type)?item.Name:_itemmanager.default.getDisplayName(item,{includeParentInfo:options.includeParentInfoInTitle,channelNumberFirst:options.channelNumberFirst});return'
'+icon+"
"}(item,options)),logoUrl=_layoutmanager.default.tv||!1===options.hoverMenu?"":function(item,itemController,action,options,menuClass){var html="",hasContent=!1,menuClass=(html+='
',"cardOverlayButton cardOverlayButton-hover itemAction"),action=item.Type;options.multiSelect&&(hasContent=!0,html+='');!1!==options.hoverPlayButton&&_playbackmanager.default.canPlay(item)&&(hasContent=!0,playButtonAction=item.IsFolder?"resume":options.playAction||("Photo"===item.MediaType?"playallfromhere":"play"),html+='');options.hoverDownloadButton&&(hasContent=!0,html+='');html+='
';var playButtonAction=item.UserData||{};!1!==options.playedButton&&_itemmanager.default.canMarkPlayed(item)&&"CollectionFolder"!==action&&(hasContent=!0,html+=_embyPlaystatebutton.default.getHtml(playButtonAction.Played,menuClass,"cardOverlayButtonIcon cardOverlayButtonIcon-hover"));!1!==options.ratingButton&&_itemmanager.default.canRate(item)&&(hasContent=!0,html+=_embyRatingbutton.default.getHtml(playButtonAction.IsFavorite,menuClass,"cardOverlayButtonIcon cardOverlayButtonIcon-hover"));options.contextMenu&&itemController.supportsContextMenu(item)&&(hasContent=!0,html+='');options.previewImageButton&&supportsTargetBlank&&(hasContent=!0,html+='');return hasContent?html+="
":""}(item,itemController,action,options,options.cardPadderClass),options.dragReorder&&(logoUrl+=''),options.cardParts?(overlayText=_shortcuts.default.getShortcutAttributes(item,options),options.isSingleClickElement&&overlayText.push({name:"data-action",value:action}),options.isVirtualList||overlayText.push({name:"data-index",value:index}),options.sideFooter?fieldMap+=shape:fieldMap=shape+fieldMap,serverId=cardImageContainerOpen+fieldMap+logoUrl+vibrantImgInfo,options.enableCardBox&&(serverId+="
"),{attributes:overlayText,html:serverId}):(isSingleClickElement=_shortcuts.default.getShortcutAttributesHtml(item,options),options.isSingleClickElement&&(isSingleClickElement+=' data-action="'+action+'"'),options.isVirtualList||(isSingleClickElement+=' data-index="'+index+'"'),cardImageClass=options.tagName,options.sideFooter?fieldMap+=shape:fieldMap=shape+fieldMap,(cardContentClass=options.fixedAttributes)&&(isSingleClickElement+=" "+cardContentClass),imageShape="<"+cardImageClass+isSingleClickElement+' class="'+options.className+'">'+cardImageContainerOpen+fieldMap+logoUrl+vibrantImgInfo,options.enableCardBox&&(imageShape+="
"),imageShape+"")}var supportsTargetBlank=_servicelocator.appHost.supports("targetblank");function setUserPreferredSize(element,cardSize){if(supportsCalc&&supportsMin&&supportsCssVariables){var value=element?cardSize:_usersettings.default.cardSize();switch(value){case"extrasmall":value="3";break;case"smaller":value="2";break;case"small":value="1";break;case"large":value="-1";break;case"larger":value="-2";break;case"extralarge":value="-3";break;case"normal":value="0";break;default:value=element?"null":"0"}try{element&&"null"===value?element.style.removeProperty("--user-cards-size-adjust"):(element||document.documentElement).style.setProperty("--user-cards-size-adjust",value)}catch(err){console.log("error in setUserPreferredSize: "+err)}}}_events.default.on(_connectionmanager.default,"localusersignedin",function(){setUserPreferredSize()}),_events.default.on(_usersettings.default,"change",function(e,name,value){"cardSize"===name&&setUserPreferredSize()}),_exports.default={setListOptions:setListOptions,getItemsHtml:function(items,options){return buildCardsHtmlInternal(items=1===arguments.length?(options=arguments[0]).items:items,options)},getItemParts:function(item,index,options){return options.cardParts=!0,getCardHtml(item,index,options)},buildCards:function(items,options){var itemsContainer=options.itemsContainer;if(document.body.contains(itemsContainer)){var parentContainer=options.parentContainer;if(parentContainer){if(!items.length)return void parentContainer.classList.add("hide");parentContainer.classList.remove("hide")}parentContainer=buildCardsHtmlInternal(items,options);itemsContainer.innerHTML=parentContainer,itemsContainer.items=items,options.multiSelect&&(itemsContainer.enableMultiSelect?itemsContainer.enableMultiSelect(!0):itemsContainer.setAttribute("data-multiselect","true")),options.contextMenu&&(itemsContainer.enableContextMenu?itemsContainer.enableContextMenu(!0):itemsContainer.setAttribute("data-contextmenu","true")),parentContainer&&_imageloader.default.lazyChildren(itemsContainer),options.autoFocus&&_focusmanager.default.autoFocus(itemsContainer)}},virtualChunkSize:50,setListClasses:function(elem,listOptions){var _listOptions$options,elem=elem.classList;null!=(_listOptions$options=listOptions.options)&&_listOptions$options.rows||(listOptions.virtualScrollLayout||"").includes("horizontal")?elem.remove("vertical-wrap"):elem.add("vertical-wrap"),elem.remove("vertical-list")},setUserPreferredSize:setUserPreferredSize}}); \ No newline at end of file +define([ + "exports", + "./../emby-apiclient/connectionmanager.js", + "./../emby-apiclient/events.js", + "./../common/textencoding.js", + "./../common/globalize.js", + "./../common/datetime.js", + "./../common/itemmanager/itemmanager.js", + "./../common/playback/playbackmanager.js", + "./../dom.js", + "./../browser.js", + "./../focusmanager.js", + "./../layoutmanager.js", + "./../mediainfo/mediainfo.js", + "./../common/dataformatter.js", + "./../indicators/indicators.js", + "./../shortcuts.js", + "./../common/servicelocator.js", + "./../imageloader/imageloader.js", + "./../emby-elements/userdatabuttons/emby-playstatebutton.js", + "./../emby-elements/userdatabuttons/emby-ratingbutton.js", + "./../emby-elements/emby-checkbox/emby-checkbox.js", + "./../emby-elements/emby-button/paper-icon-button-light.js", + "./../common/usersettings/usersettings.js", +], function ( + _exports, + _connectionmanager, + _events, + _textencoding, + _globalize, + _datetime, + _itemmanager, + _playbackmanager, + _dom, + _browser, + _focusmanager, + _layoutmanager, + _mediainfo, + _dataformatter, + _indicators, + _shortcuts, + _servicelocator, + _imageloader, + _embyPlaystatebutton, + _embyRatingbutton, + _embyCheckbox, + _paperIconButtonLight, + _usersettings, +) { + Object.defineProperty(_exports, "__esModule", { value: !0 }), + (_exports.default = void 0), + require([ + "css!modules/cardbuilder/card.css", + "programStyles", + "embyProgressBarStyle", + ]); + var decodingAttribute = _dom.default.supportsAsyncDecodedImages() + ? ' decoding="async"' + : "", + supportsObjectFit = + CSS.supports("object-fit", "contain") && !_browser.default.edge, + supportsCssVariables = CSS.supports("color", "var(--fake-var)"), + supportsCalc = CSS.supports("width", "min(45.2%,calc(100% - .65em))"), + supportsMin = CSS.supports("width", "min(10em, 5vw)"), + EnableFocusTransfrom = _dom.default.allowFocusScaling(), + supportsNativeLazyLoading = "loading" in HTMLImageElement.prototype; + var refreshIndicatorLoaded, + cachedWidths = {}; + function setListOptions(items, options) { + null == options.isBoundListItem && (options.isBoundListItem = !0), + options.horizontal, + (options.loadingLazyAttribute = ' loading="lazy"'), + (options.cardSize && "default" !== options.cardSize) || + (options.cardSize = _usersettings.default.cardSize()), + (options.itemSelector = ".card"), + (options.imageFallback = !1 !== options.imageFallback); + for ( + var shape = options.shape || "auto", + fieldMap = + (options.sideFooter && (options.textLinks = !(shape = "banner")), + options.fields || (options.fields = []), + {}), + i = 0, + length = options.fields.length; + i < length; + i++ + ) + fieldMap[options.fields[i]] = !0; + (options.fieldMap = fieldMap), + (options.fieldMapWithForceName = Object.assign( + Object.assign({}, fieldMap), + { ParentNameOrName: !0 }, + )); + var tagName, + templateLines = (function (options) { + var options = options.fieldMap, + lines = []; + return ( + options.Name && lines.push(""), + options.ParentNameOrName && lines.push(""), + (options.ProductionYear || + options.OfficialRating || + options.Runtime) && + lines.push(""), + (options.CommunityRating || options.CriticRating) && + lines.push( + '
91%
', + ), + options.PersonRole && lines.push(""), + options.ChapterTime && lines.push(""), + options.ChannelName && lines.push(""), + options.LastServerAddress && lines.push(""), + options.Overview && lines.push(getOverviewText("")), + options.MediaInfo && lines.push(""), + options.Album && lines.push(""), + options.Type && lines.push(""), + options.LastActivityDateRelative && lines.push(""), + options.DateCreated && lines.push(""), + options.DateModified && lines.push(""), + options.Size && lines.push(""), + options.Version && lines.push(""), + options.Url && lines.push(""), + options.InstalledVersion && lines.push(""), + options.ItemImageName && lines.push(""), + options.Filename && lines.push(""), + options.FilenameOrName && lines.push(""), + (options.Resolution || options.Container || options.Bitrate) && + lines.push(""), + options.ParentName && lines.push(""), + options.CollectionType && lines.push(""), + options.LibraryFolders && lines.push(""), + options.AppNameVersion && lines.push(""), + options.AppName && lines.push(""), + options.DeviceUserInfo && lines.push(""), + options.CurrentProgramTime && lines.push(""), + options.CurrentProgramParentName && lines.push(""), + options.CurrentProgramName && lines.push(""), + options.SeriesTimerChannel && lines.push(""), + options.SeriesTimerTime && lines.push(""), + options.ImageEditorStandardButtons && lines.push(""), + options.ImageEditorBackdropButtons && lines.push(""), + options.Genres && lines.push(""), + options.Tags && lines.push(""), + options.Studios && lines.push(""), + options.SessionNowPlayingInfo && + (lines.push(""), lines.push(""), lines.push("")), + options.AirTime && lines.push(""), + options.AccessToken && lines.push(""), + options.DownloadableImageInfo && (lines.push(""), lines.push("")), + lines + ); + })(options), + autoShape = + (options.lines || + options.overlayText || + (options.lines = templateLines.length), + "auto" === shape || "autooverflow" === shape), + items = (shape = autoShape + ? _imageloader.default.getShape(items, options) + : shape), + autoShape = + (options.sideFooter && (items = "square"), + "auto" === options.preferThumb && + (options.preferThumb = + "square" === items + ? null + : "backdrop" === items || "fourThree" === items), + !0 === options.preferThumb && + autoShape && + ((items = "backdrop"), options.sideFooter || (shape = "backdrop")), + (options.uiAspect = _imageloader.default.getAspectFromShape( + items, + options, + ).aspect), + !options.width && + options.widths && + (options.width = options.widths[items]), + options.rows && + "number" != typeof options.rows && + (options.rows = options.rows[items]), + "card"), + isLayoutTV = + (shape && (autoShape += " " + shape + "Card"), + options.horizontal && + (autoShape += " card-horiz " + shape + "Card-horiz"), + options.cardClass && (autoShape += " " + options.cardClass), + _layoutmanager.default.tv), + isSingleClickElement = + (isLayoutTV || (autoShape += " card-hoverable"), + (options.enableFocusScaling = + !1 !== options.enableFocusScaling && + isLayoutTV && + EnableFocusTransfrom), + (options.enableCardBox = + options.enableFocusScaling || + options.cardLayout || + options.sideFooter || + !isLayoutTV || + !options.isVirtualList), + (isLayoutTV && !options.staticElement) || + (!1 === options.hoverMenu && "none" !== options.action)), + lineContents = + (options.enableFocusScaling && (autoShape += " card-focustransform"), + options.sideFooter && + ((autoShape += " sideFooterCard"), options.horizontal) && + (autoShape += " sideFooterCard-horiz"), + options.smallSideFooter && + ((autoShape += " smallSideFooterCard"), options.horizontal) && + (autoShape += " smallSideFooterCard-horiz"), + isSingleClickElement + ? ((tagName = "button"), (autoShape += " itemAction")) + : ((tagName = "div"), + options.staticElement || (options.addTabIndex = !0)), + isLayoutTV + ? ((options.draggable = !1), + (options.dropTarget = !1), + (options.dragReorder = !1)) + : ((options.draggable = !1 !== options.draggable), + options.dragReorder && options.draggable + ? (autoShape += " drop-target ordered-drop-target-x") + : options.dropTarget && + (autoShape += " drop-target full-drop-target")), + []); + for ( + options.lines && (lineContents.length = options.lines), + i = 0, + length = lineContents.length; + i < length; + i++ + ) + lineContents[i] = templateLines[i] || " "; + var cardBoxClass = ((options.cardBoxClass || "") + " cardBox").trim(), + lines = + (options.sideFooter && + ((cardBoxClass += " cardBox-sideFooter"), + isLayoutTV && (cardBoxClass += " cardBox-sideFooter-f"), + !0 !== options.centerText) && + (options.centerText = !1), + null == options.centerText && + (options.centerText = !options.overlayText), + (options.cardTextCssClass = options.centerText + ? "cardText" + : "cardText text-align-start"), + lineContents.length + ? getCardTextLines( + lineContents, + options.cardTextCssClass, + !options.overlayText, + !0, + lineContents.length, + options, + ) + : ""), + cardDefaultTextClass = ( + (options.cardDefaultTextClass || "") + " cardText cardDefaultText" + ).trim(), + cardDefaultTextClass = + ((options.cardDefaultTextClass = cardDefaultTextClass), + (options.cardLayout || options.sideFooter) && + ((cardBoxClass += " visualCardBox"), options.vibrant) && + ((cardBoxClass += " visualCardBox-vibrant"), + "large" === options.vibrantMode) && + (cardBoxClass += " visualCardBox-vibrant-lg"), + isLayoutTV && + options.enableFocusScaling && + ((cardBoxClass += " cardBox-focustransform"), + !options.focusTransformTitleAdjust || + ("portrait" !== shape && + "square" !== shape && + "fourThree" !== shape) || + (cardBoxClass += " cardBox-focustransform-titleadjust")), + isSingleClickElement || + !1 === options.moreButton || + options.staticElement || + (cardBoxClass += " cardBox-touchzoom"), + !lineContents.length || + options.overlayText || + options.cardLayout || + options.sideFooter || + !1 === options.allowBottomPadding || + (options.enableCardBox + ? (cardBoxClass += " cardBox-bottompadded") + : (autoShape += " card-bottompadded")), + options.enableCardBox || (autoShape += " card-padded"), + []), + innerCardFooterClass = + (options.sideFooter || cardDefaultTextClass.push("cardPadder-" + shape), + options.cardPadderClass && + cardDefaultTextClass.push(options.cardPadderClass), + ["innerCardFooter"]), + cardContentClass = + (options.innerCardFooterClass && + innerCardFooterClass.push(options.innerCardFooterClass), + (options.round = options.round && "square" === shape), + ( + (options.cardContentClass || "") + " cardContent cardImageContainer" + ).trim()), + screenWidth = + (options.cardLayout || + options.sideFooter || + ((cardContentClass += " cardContent-shadow"), + "black" === options.background && + (cardContentClass += " cardContent-bg-black")), + options.paddedImage && (cardContentClass += " paddedImage"), + options.defaultBackground && + !options.cardLayout && + (cardContentClass += " defaultCardBackground"), + options.imageClass && (cardContentClass += " " + options.imageClass), + options.sideFooter && + ((cardContentClass += " cardImageContainer-sideFooter"), + options.smallSideFooter) && + (cardContentClass += " cardImageContainer-smallSideFooter"), + options.round && (cardContentClass += " cardContent-round"), + options.enableFocusScaling || + options.sideFooter || + (isSingleClickElement || options.action, + isLayoutTV + ? options.cardLayout + ? (cardBoxClass += " cardContent-bxsborder") + : (cardContentClass += " cardContent-bxsborder") + : (cardContentClass += " cardContent-bxsborder-fv")), + options.width || + ((screenWidth = _dom.default.getWindowSize().innerWidth), + (options.width = (function ( + cardClass, + cardBoxClass, + cardContentClass, + options, + screenWidth, + ) { + options.sideFooter && (cardClass += " withsidefooter"), + options.imageWidthTestClass && + (cardClass += " " + options.imageWidthTestClass); + var cardSize = options.cardSize, + key = cardClass + screenWidth + cardSize; + switch (cardSize) { + case "": + case "normal": + case "default": + break; + default: + key += "-" + cardSize; + } + (screenWidth = _layoutmanager.default.tv) && (key += "-tv"); + var itemsContainerClass, + width = cachedWidths[key]; + return ( + width || + (console.log("getImageWidth: " + key), + (itemsContainerClass = + "itemsContainer padded-left padded-right"), + screenWidth && (itemsContainerClass += " itemsContainer-tv"), + ((screenWidth = document.createElement("div")).className = + itemsContainerClass), + (screenWidth.style.visibility = "hidden"), + options.sideFooter + ? (screenWidth.innerHTML = + '
') + : (screenWidth.innerHTML = + '
'), + (itemsContainerClass = document.body).appendChild(screenWidth), + (width = options.sideFooter + ? (cachedWidths[key] = + screenWidth.querySelector(".cardImageContainer") + .offsetWidth || 400) + : (cachedWidths[key] = + screenWidth.querySelector(".cardScalable").offsetWidth || + 400)), + itemsContainerClass.removeChild(screenWidth), + console.log("width: " + width)), + width + ); + })(autoShape, cardBoxClass, cardContentClass, options, screenWidth)), + (windowWidth = screenWidth), + (screen = window.screen) && + 20 < screen.availWidth - windowWidth && + (options.width = 50 * Math.ceil(options.width / 50))), + options.enableCardBox ? '
' : ""), + cardDefaultTextClass = cardDefaultTextClass.join(" "), + innerCardFooterClass = innerCardFooterClass.join(" "), + screen = + (isSingleClickElement || "none" === options.action + ? (screenWidth += + '
') + : (screenWidth += + ''), + "cardFooter"), + windowWidth = + (options.vibrant && (screen += " cardFooter-vibrant"), + (options.outerFooterClass = screen), + options.cardLayout && (screenWidth += '
'), + (screenWidth += lines), + options.cardLayout && (screenWidth += "
"), + options.enableCardBox && (screenWidth += "
"), + null == options.defaultIcon && + (options.sideFooter || options.lines || fieldMap.Name + ? (options.defaultIcon = !0) + : (options.defaultIcon = !1)), + (options.moreTitle = _globalize.default.translate("More")), + (options.multiSelectTitle = + _globalize.default.translate("MultiSelect")), + (options.multiSelect = !1 !== options.multiSelect && !isLayoutTV), + (options.contextMenu = !1 !== options.contextMenu), + (options.enableUserData = !1 !== options.enableUserData), + ""); + options.addTabIndex && (windowWidth += ' tabindex="0"'), + options.draggable && (windowWidth += ' draggable="true"'), + "button" === tagName && (windowWidth += ' type="button"'), + (options.fixedAttributes = windowWidth.trim()), + (options.templateInnerHTML = screenWidth), + (options.cardPadderClass = cardDefaultTextClass), + (options.innerCardFooterClass = innerCardFooterClass), + (options.tagName = tagName), + (options.shape = shape), + (options.imageShape = items), + (options.className = autoShape), + (options.isSingleClickElement = isSingleClickElement), + (options.cardContentClass = cardContentClass), + (options.cardBoxClass = cardBoxClass); + } + function buildCardsHtmlInternal(items, options) { + setListOptions(items, options); + for ( + var hasOpenRow, + html = "", + itemsInRow = 0, + rows = options.rows, + i = 0, + length = items.length; + i < length; + i++ + ) + rows && + 0 === itemsInRow && + (hasOpenRow && ((html += "
"), (hasOpenRow = !1)), + (html += '
'), + (hasOpenRow = !0)), + (html += getCardHtml(items[i], i, options)), + itemsInRow++, + rows && + rows <= itemsInRow && + ((html += "
"), (hasOpenRow = !1), (itemsInRow = 0)); + return hasOpenRow && (html += "
"), html; + } + function getCardTextLines( + lines, + cssClass, + forceLines, + isOuterFooter, + maxLines, + options, + ) { + for ( + var html = "", + valid = 0, + currentCssClass = cssClass, + i = 0, + length = lines.length; + i < length; + i++ + ) { + var currentCssClass = cssClass, + text = lines[i]; + if (text && text.html) valid++, (html += text.html); + else if ( + (0 < valid && isOuterFooter + ? (currentCssClass += " cardText-secondary") + : 0 === valid && + isOuterFooter && + (options.sideFooter || + (currentCssClass += " cardText-first-padded"), + (currentCssClass += " cardText-first")), + text && + ((html = + (html += '
') + + text + + "
"), + valid++, + maxLines) && + maxLines <= valid) + ) + break; + } + if (forceLines) + for ( + length = maxLines || Math.min(lines.length, maxLines || lines.length); + valid < length; + + ) + (currentCssClass = cssClass), + 0 < valid && isOuterFooter + ? (currentCssClass += " cardText-secondary") + : 0 === valid && + isOuterFooter && + (options.sideFooter || + (currentCssClass += " cardText-first-padded"), + (currentCssClass += " cardText-first")), + (html += '
 
'), + valid++; + return html; + } + function isUsingLiveTvNaming(itemType) { + return ( + "Program" === itemType || "Timer" === itemType || "Recording" === itemType + ); + } + function getAirTimeText(item, showAirDateTime, showAirEndTime) { + var airTimeText = ""; + if (item.StartDate) + try { + var date = new Date(Date.parse(item.StartDate)); + showAirDateTime && + (airTimeText += + _datetime.default.toLocaleDateString(date, { + weekday: "short", + month: "short", + day: "numeric", + }) + " "), + (airTimeText += _datetime.default.getDisplayTime(date)), + item.EndDate && + showAirEndTime && + ((date = new Date(Date.parse(item.EndDate))), + (airTimeText += + " – " + _datetime.default.getDisplayTime(date))); + } catch (e) { + console.log("Error parsing date: " + item.StartDate); + } + return airTimeText; + } + function getOverviewText(text) { + var html = '
'; + return { + html: html + _textencoding.default.htmlEncode(text || "") + "
", + }; + } + function getTextLinksLine(options, item, linkItems, linkItemType, limit) { + linkItems = linkItems || []; + for ( + var html = "", + i = 0, + length = (limit = Math.min(linkItems.length, limit)); + i < length; + i++ + ) { + var linkItem = linkItems[i], + text = linkItem.Name; + i < limit - 1 && (text += ","), + (html += getTextActionButton( + options, + linkItem, + text, + item.ServerId, + null, + !1, + )); + } + return '
' + html + "
"; + } + function getCardFooterText( + item, + itemController, + options, + fieldMap, + imgUrl, + footerClass, + progressHtml, + logoUrl, + isOuterFooter, + ) { + var parentTitleUnderneath, + itemType = item.Type, + html = "", + lines = + (logoUrl && + (html += + ''), + []); + switch (itemType) { + case "MusicAlbum": + case "Audio": + case "MusicVideo": + case "Game": + parentTitleUnderneath = !0; + } + var serverId = item.ServerId || options.serverId, + parentTitle = + (fieldMap.Album && + options.albumFirst && + (isOuterFooter && item.AlbumId && item.Album + ? lines.push( + getTextActionButton(options, { + Id: item.AlbumId, + ServerId: serverId, + Name: item.Album, + Type: "MusicAlbum", + IsFolder: !0, + }), + ) + : lines.push(item.Album || "")), + (!fieldMap.ParentName && !fieldMap.ParentNameOrName) || + parentTitleUnderneath || + (isOuterFooter && "Episode" === itemType && item.SeriesName + ? item.SeriesId + ? lines.push( + getTextActionButton(options, { + Id: item.SeriesId, + ServerId: serverId, + Name: item.SeriesName, + Type: "Series", + IsFolder: !0, + }), + ) + : lines.push(_textencoding.default.htmlEncode(item.SeriesName)) + : isUsingLiveTvNaming(itemType) + ? (lines.push(_textencoding.default.htmlEncode(item.Name)), + item.EpisodeTitle || (titleAdded = !0)) + : ((parentTitle = + item.SeriesName || + item.Series || + item.Album || + (item.AlbumArtist + ? item.AlbumArtist.Name || item.AlbumArtist + : null) || + item.GameSystem || + "") || + fieldMap.Name) && + lines.push(_textencoding.default.htmlEncode(parentTitle))), + (fieldMap.Name && !titleAdded) || + (fieldMap.ParentNameOrName && !lines.length)); + if ( + ((parentTitle = + parentTitle || titleAdded || !fieldMap.Name ? parentTitle : !0) && + (titleAdded = itemController.getDisplayName(item, { + includeParentInfo: options.includeParentInfoInTitle, + channelNumberFirst: options.channelNumberFirst, + })) && + (isOuterFooter + ? lines.push( + getTextActionButton( + options, + item, + titleAdded, + serverId, + options.parentId, + !0, + ), + ) + : lines.push(_textencoding.default.htmlEncode(titleAdded))), + fieldMap.Type && lines.push(itemController.getItemTypeName(itemType)), + fieldMap.ParentName && + parentTitleUnderneath && + (isOuterFooter && + item.AlbumArtists && + item.AlbumArtists.length && + "MusicAlbum" === itemType + ? ((item.AlbumArtists[0].Type = "MusicArtist"), + (item.AlbumArtists[0].IsFolder = !0), + lines.push( + getTextActionButton( + options, + item.AlbumArtists[0], + null, + serverId, + ), + )) + : isOuterFooter && item.ArtistItems && item.ArtistItems.length + ? ((item.ArtistItems[0].Type = "MusicArtist"), + (item.ArtistItems[0].IsFolder = !0), + lines.push( + getTextActionButton(options, item.ArtistItems[0], null, serverId), + )) + : isOuterFooter && item.AlbumArtists && item.AlbumArtists.length + ? ((item.AlbumArtists[0].Type = "MusicArtist"), + (item.AlbumArtists[0].IsFolder = !0), + lines.push( + getTextActionButton( + options, + item.AlbumArtists[0], + null, + serverId, + ), + )) + : isOuterFooter && item.GameSystem && item.GameSystemId + ? lines.push( + getTextActionButton(options, { + Id: item.GameSystemId, + ServerId: serverId, + Name: item.GameSystem, + Type: "GameSystem", + IsFolder: !0, + }), + ) + : lines.push( + _textencoding.default.htmlEncode( + isUsingLiveTvNaming(itemType) + ? item.Name + : item.SeriesName || + item.Series || + item.Album || + (item.AlbumArtist + ? item.AlbumArtist.Name || item.AlbumArtist + : null) || + item.GameSystem || + "", + ), + )), + options.textLines) + ) + for ( + var additionalLines = options.textLines(item), + i = 0, + length = additionalLines.length; + i < length; + i++ + ) + lines.push(additionalLines[i]); + fieldMap.Album && + !options.albumFirst && + (isOuterFooter && item.AlbumId && item.Album + ? lines.push( + getTextActionButton(options, { + Id: item.AlbumId, + ServerId: serverId, + Name: item.Album, + Type: "MusicAlbum", + IsFolder: !0, + }), + ) + : lines.push(item.Album || "")); + var _lineParts, + parentTitle = fieldMap.CommunityRating, + titleAdded = fieldMap.CriticRating, + emptyLines = [], + parentTitle = + ((parentTitle || titleAdded) && + ((lineParts = []), + parentTitle && + item.CommunityRating && + lineParts.push( + _mediainfo.default.getCommunityRating(item, { + outerClass: "cardMediaInfoItem", + }), + ), + titleAdded && + item.CriticRating && + lineParts.push( + _mediainfo.default.getCriticRating(item, { + outerClass: "cardMediaInfoItem", + }), + ), + (lineParts.length + ? lines + : (lineParts.push(" "), emptyLines) + ).push( + '
' + + lineParts.join("") + + "
", + )), + fieldMap.ProductionYear), + titleAdded = fieldMap.OfficialRating, + lineParts = fieldMap.Runtime; + if ( + ((parentTitle || titleAdded || lineParts) && + ((_lineParts = []), + parentTitle && + ("Series" === itemType + ? "Continuing" === item.Status + ? item.ProductionYear && + _lineParts.push( + _globalize.default.translate( + "SeriesYearToPresent", + item.ProductionYear || "", + ), + ) + : (parentTitle = item.EndDate + ? new Date(Date.parse(item.EndDate)).getFullYear() + : null) && + item.ProductionYear && + parentTitle !== item.ProductionYear + ? _lineParts.push(item.ProductionYear + " – " + parentTitle) + : item.ProductionYear && _lineParts.push(item.ProductionYear) + : item.ProductionYear && _lineParts.push(item.ProductionYear)), + lineParts && + item.RunTimeTicks && + _lineParts.push( + _datetime.default.getHumanReadableRuntime(item.RunTimeTicks), + ), + titleAdded && + item.OfficialRating && + _lineParts.push(item.OfficialRating), + lines.push(_lineParts.join("  "))), + fieldMap.Genres) + ) + if (null != (parentTitle = item.GenreItems) && parentTitle.length) { + switch (itemType) { + case "Audio": + case "MusicAlbum": + case "MusicArtist": + case "MusicVideo": + 0; + break; + case "Game": + case "GameSystem": + 0; + break; + default: + 0; + } + lines.push(getTextLinksLine(options, item, item.GenreItems, 0, 2)); + } else + emptyLines.push( + '
 
', + ); + return ( + fieldMap.Studios && + (null != (lineParts = item.Studios) && lineParts.length + ? lines.push(getTextLinksLine(options, item, item.Studios, 0, 1)) + : emptyLines.push( + '
 
', + )), + fieldMap.Tags && + (null != (titleAdded = item.TagItems) && titleAdded.length + ? lines.push(getTextLinksLine(options, item, item.TagItems, 0, 2)) + : emptyLines.push( + '
 
', + )), + fieldMap.AirTime && + lines.push( + getAirTimeText( + item, + options.showAirDateTime, + options.showAirEndTime, + ) || "", + ), + fieldMap.ChannelName && + (item.ChannelId + ? lines.push( + getTextActionButton(options, { + Id: item.ChannelId, + ServerId: serverId, + Name: item.ChannelName, + ChannelNumber: item.ChannelNumber, + Type: "TvChannel", + MediaType: item.MediaType, + IsFolder: !1, + }), + ) + : lines.push(item.ChannelName || " ")), + fieldMap.CurrentProgramParentName && + (item.CurrentProgram + ? lines.push(item.CurrentProgram.Name || "") + : lines.push("")), + fieldMap.CurrentProgramName && + (item.CurrentProgram + ? lines.push(item.CurrentProgram.EpisodeTitle || "") + : lines.push(item.Name || "")), + fieldMap.CurrentProgramTime && + (item.CurrentProgram + ? lines.push(getAirTimeText(item.CurrentProgram, !1, !0) || "") + : lines.push("")), + fieldMap.SeriesTimerTime && + (item.RecordAnyTime + ? lines.push(_globalize.default.translate("Anytime")) + : item.StartDate + ? lines.push(_datetime.default.getDisplayTime(item.StartDate)) + : lines.push("")), + fieldMap.SeriesTimerChannel && + (item.RecordAnyChannel || + null == (_lineParts = item.ChannelIds) || + !_lineParts.length + ? lines.push(_globalize.default.translate("AllChannels")) + : 1 < + (null == (parentTitle = item.ChannelIds) + ? void 0 + : parentTitle.length) + ? lines.push( + _globalize.default.translate( + "NumberChannelsValue", + null == (itemType = item.ChannelIds) ? void 0 : itemType.length, + ), + ) + : item.ChannelName + ? lines.push( + _itemmanager.default.getDisplayName( + { + Id: item.ChannelId, + ServerId: serverId, + Name: item.ChannelName, + ChannelNumber: item.ChannelNumber, + Type: "TvChannel", + MediaType: item.MediaType, + IsFolder: !1, + }, + {}, + ), + ) + : lines.push(_globalize.default.translate("OneChannel"))), + fieldMap.PersonRole && + (item.Role + ? lines.push(_globalize.default.translate("ActorAsRole", item.Role)) + : item.PersonType + ? lines.push(_globalize.default.translate(item.PersonType)) + : lines.push("")), + fieldMap.ChapterTime && + lines.push( + _datetime.default.getDisplayRunningTime(item.StartPositionTicks), + ), + fieldMap.LastActivityDateRelative && + lines.push( + itemController.resolveField(item, "LastActivityDateRelative"), + ), + fieldMap.AppName && + lines.push(itemController.resolveField(item, "AppName")), + fieldMap.AccessToken && + lines.push(itemController.resolveField(item, "AccessToken")), + fieldMap.DateCreated && + lines.push(itemController.resolveField(item, "DateCreated")), + fieldMap.Url && lines.push(item.Url || ""), + fieldMap.Version && lines.push(item.Version || ""), + fieldMap.CollectionType && + (item.Id + ? lines.push( + _itemmanager.default.getContentTypeName(item.CollectionType), + ) + : lines.push("")), + fieldMap.LibraryFolders && + (item.Locations && "boxsets" !== item.CollectionType + ? 1 === item.Locations.length + ? lines.push(item.Locations[0]) + : lines.push( + _globalize.default.translate( + "NumLocationsValue", + item.Locations.length, + ), + ) + : lines.push("")), + fieldMap.AppNameVersion && + lines.push(itemController.resolveField(item, "AppNameVersion")), + fieldMap.InstalledVersion && + (item.InstalledVersion + ? lines.push( + _globalize.default.translate( + "LabelVersionInstalled", + item.InstalledVersion, + ), + ) + : lines.push("")), + fieldMap.InstalledVersion && lines.push(item.Version || ""), + fieldMap.ItemImageName && + (item.ImageTag ? lines.push(item.Name) : lines.push(" ")), + fieldMap.Filename && lines.push(item.FileName || item.Filename), + fieldMap.FilenameOrName && + lines.push( + _textencoding.default.htmlEncode( + item.FileName || item.Filename || item.Name || "", + ), + ), + fieldMap.MediaInfo && + lines.push({ + html: + '
' + + _mediainfo.default.getPrimaryMediaInfoHtml(item, { + episodeTitle: !1, + subtitles: !1, + endsAt: !1, + }) + + "
", + }), + fieldMap.Overview && lines.push(getOverviewText(item.Overview)), + (fieldMap.Resolution || fieldMap.Container || fieldMap.Bitrate) && + ((lineParts = []), + fieldMap.Container && + item.Container && + lineParts.push(item.Container.toUpperCase()), + fieldMap.Resolution && + item.Width && + item.Height && + (titleAdded = _dataformatter.default.getResolutionText(item)) && + lineParts.push(titleAdded), + fieldMap.Bitrate && + item.Bitrate && + lineParts.push(_dataformatter.default.bitrateToString(item.Bitrate)), + lines.push(lineParts.join("  ") || " ")), + fieldMap.DownloadableImageInfo && + (lines.push( + (function (item) { + var text = "", + lang = item.DisplayLanguage || item.Language; + return ( + item.Width && item.Height + ? ((text += item.Width + "x" + item.Height), + lang && (text += " - " + lang)) + : lang && (text += lang), + text + ); + })(item) || "", + ), + lines.push( + (function (item) { + var text; + return ( + "Likes" === item.RatingType + ? (text = + 1 === item.CommunityRating + ? _globalize.default.translate("OneLike") + : _globalize.default.translate( + "LikeCountValue", + item.CommunityRating, + )) + : item.CommunityRating + ? ((text = _dataformatter.default.numberToString( + item.CommunityRating, + 1, + )), + item.VoteCount && + (text += + " - " + + (1 === item.VoteCount + ? _globalize.default.translate("OneVote") + : _globalize.default.translate( + "VoteCountValue", + item.VoteCount, + )))) + : (text = _globalize.default.translate("Unrated")), + text + ); + })(item) || "", + )), + fieldMap.DateModified && + lines.push(itemController.resolveField(item, "DateModified")), + fieldMap.Size && lines.push(itemController.resolveField(item, "Size")), + fieldMap.DeviceUserInfo && + ((_lineParts = ""), + item.LastUserName && + (item.LastUserId + ? (_lineParts += getTextActionButton( + options, + { + Id: item.LastUserId, + Name: item.LastUserName, + ServerId: serverId, + Type: "User", + }, + item.LastUserName + + ", " + + _dataformatter.default.formatRelativeTime( + item.DateLastActivity, + ), + null, + null, + )) + : item.LastUserName && + (_lineParts += + item.LastUserName + + ", " + + _dataformatter.default.formatRelativeTime( + item.DateLastActivity, + ))), + lines.push(_lineParts)), + fieldMap.MediaStreamInfo && + _mediainfo.default.pushMediaStreamLines( + item, + options, + lines, + itemController.getDefaultIcon(item), + ), + fieldMap.ImageEditorStandardButtons && + lines.push( + (function (item) { + var searchText, + html = ""; + return ( + item.Providers.length && + (html += + ''), + item.ImageTag || + (_servicelocator.appHost.supports("fileinput") && + (html += + '')), + item.ImageTag && + (html += + ''), + html + ); + })(item), + ), + fieldMap.ImageEditorBackdropButtons && + lines.push( + (function () { + var html = ""; + return (html += + ''); + })(), + ), + fieldMap.SessionNowPlayingInfo && + (function (lines, item) { + var playstate = item.PlayState, + item = item.NowPlayingItem || {}; + lines.push(item.SeriesName || item.Name), + "Episode" === item.Type + ? lines.push( + _itemmanager.default.getDisplayName(item, { + includeParentInfo: !0, + }), + ) + : item.ArtistItems && item.ArtistItems.length + ? lines.push(item.ArtistItems[0].Name) + : item.ProductionYear && lines.push(item.ProductionYear), + item.RunTimeTicks && + lines.push( + _datetime.default.getDisplayRunningTime( + playstate.PositionTicks || 0, + ) + + " / " + + _datetime.default.getDisplayRunningTime(item.RunTimeTicks), + ); + })(lines, item), + fieldMap.LastServerAddress && + ("Server" === item.Type + ? ((parentTitle = _connectionmanager.default.getApiClient(item)), + lines.push((parentTitle && parentTitle.serverAddress()) || "")) + : lines.push("")), + (html += getCardTextLines( + (lines = lines.concat(emptyLines)), + options.cardTextCssClass, + isOuterFooter, + isOuterFooter, + options.lines, + options, + )), + progressHtml && (html += progressHtml), + html && + (!isOuterFooter || logoUrl || options.cardLayout) && + ((html = '
' + html), + (html += "
")), + html + ); + } + function getTextActionButton( + options, + item, + text, + serverId, + parentId, + isSameItemAsCard, + ) { + var dataAttributes; + return ( + (text = text || _itemmanager.default.getDisplayName(item)), + _layoutmanager.default.tv || !1 === options.textLinks + ? _textencoding.default.htmlEncode(text) + : ((text = _textencoding.default.htmlEncode(text)), + (item = isSameItemAsCard + ? ((dataAttributes = ""), options.linkButtonAction || "link") + : ((dataAttributes = _shortcuts.default.getShortcutAttributesHtml( + item, + { + serverId: serverId, + parentId: parentId, + isBoundListItem: options.isBoundListItem && isSameItemAsCard, + }, + )), + "link")), + '") + ); + } + function getActiveSessionFooterHtml(options, item, apiClient) { + var html = ""; + return ( + (html += + '
') + + (function (item) { + var imgClass, + imageUrl, + html = ""; + return ( + item.NowPlayingItem && + ((html += + '
"), + (imgClass = "secondaryText activeSession-deviceimage"), + (html = (imageUrl = item.AppIconUrl) + ? html + + ('
' + : (html = + html + + '
') + + _itemmanager.default.getDefaultIcon(item) + + "
"), + (html += "
"), + item.Client && + (html = + (html += "
") + + item.Client + + " " + + item.ApplicationVersion + + "
"), + item.DeviceName && + (html = + (html += '
') + + _textencoding.default.htmlEncode(item.DeviceName) + + "
"), + item.RemoteEndPoint && + ((html = + html + + '
' + + item.RemoteEndPoint), + (imageUrl = (item.Protocol || "").toLowerCase()) && + (html += " " + imageUrl), + imageUrl.includes("https") && + (html += + 'https'), + (html += "
")), + (html += "
")), + html + ); + })(item) + + (function (item) { + for ( + var html = "", + playstate = item.PlayState || {}, + nowplayingItem = item.NowPlayingItem || {}, + item = item.TranscodingInfo || {}, + transcodeReasons = + ((html = + (html = + (html = + html + + '
' + + '
') + + _globalize.default.translate("Stream")) + + "
" + + "
"), + nowplayingItem.Container && + ((html = + (html += "
") + nowplayingItem.Container.toUpperCase()), + nowplayingItem.Bitrate && + (html += + " (" + + _dataformatter.default.bitrateToString( + nowplayingItem.Bitrate, + ) + + ")"), + (html += "
")), + (html = + html + + "
" + + ''), + "Transcode" === playstate.PlayMethod + ? ((nowplayingItem = []), + item.SubProtocol && "progressive" !== item.SubProtocol + ? nowplayingItem.push(item.SubProtocol.toUpperCase()) + : item.Container && + nowplayingItem.push(item.Container.toUpperCase()), + item.Bitrate && + ((playstate = "("), + item.Bitrate && + (playstate += _dataformatter.default.bitrateToString( + item.Bitrate, + )), + item.Framerate && + (playstate += + " " + + _dataformatter.default.numberToString( + item.Framerate, + 3, + ) + + " fps"), + nowplayingItem.push((playstate += ")"))), + item.CurrentThrottle && + nowplayingItem.push( + 'Throttling', + ), + (html += nowplayingItem.join(" "))) + : (html += _globalize.default.translate("HeaderDirectPlay")), + (html += "
"), + item.TranscodeReasons || []), + i = 0, + length = transcodeReasons.length; + i < length; + i++ + ) + html = + (html += "
") + + _globalize.default.translate(transcodeReasons[i]) + + "
"; + return (html = html + "
" + "
"); + })(item) + + (function (item) { + for ( + var mediaStream, + html = "", + playstate = item.PlayState || {}, + mediaStreams = (item.NowPlayingItem || {}).MediaStreams || [], + videoStreamIndex = playstate.VideoStreamIndex, + playstate = item.TranscodingInfo || {}, + i = 0, + length = mediaStreams.length; + i < length; + i++ + ) + if ( + "Video" === mediaStreams[i].Type && + (null == videoStreamIndex || + videoStreamIndex === mediaStreams[i].Index) + ) { + mediaStream = mediaStreams[i]; + break; + } + if (mediaStream) { + if ( + ((html = + (html = + (html = + html + + '
' + + '
') + + _globalize.default.translate("Video")) + + "
" + + "
"), + mediaStream.DisplayTitle && + ((html = + html + + '
' + + mediaStream.DisplayTitle), + playstate.VideoDecoderHwAccel && + (html += + ''), + (html += "
")), + (html = + html + + '
' + + ''), + !1 === playstate.IsVideoDirect + ? ((html = + (html = + html + _globalize.default.translate("Transcode") + " (") + + (playstate.VideoCodec || "").toUpperCase() + + " "), + playstate.VideoBitrate && + (html += _dataformatter.default.bitrateToString( + playstate.VideoBitrate, + )), + (html += ")"), + playstate.VideoEncoderHwAccel && + (html += + '')) + : ((html += _globalize.default.translate("HeaderDirectPlay")), + mediaStream.BitRate && + (html += + " (" + + _dataformatter.default.bitrateToString( + mediaStream.BitRate, + ) + + ")")), + (html += "
"), + !1 === playstate.IsVideoDirect) + ) + for ( + var pipeline = playstate.VideoPipelineInfo || [], + _i = 0, + _length = pipeline.length; + _i < _length; + _i++ + ) { + var extra, + step = pipeline[_i]; + ("ToneMapping" !== step.StepType && + "Deinterlace" !== step.StepType && + "SubTitleBurnIn" !== step.StepType && + "SubtitleOverlay" !== step.StepType) || + ((html += + '
'), + "ToneMapping" === step.StepType + ? (html += _globalize.default.translate("HeaderToneMapping")) + : "Deinterlace" === step.StepType + ? (html += _globalize.default.translate("Deinterlacing")) + : ("SubTitleBurnIn" !== step.StepType && + "SubtitleOverlay" !== step.StepType) || + (html += _globalize.default.translate( + "HeaderBurningInSubtitles", + )), + (extra = []), + step.ParamShort + ? extra.push(step.ParamShort) + : step.Param + ? "Subtitles" !== step.Param && extra.push(step.Param) + : step.FfmpegOptions && extra.push(step.FfmpegOptions), + extra.length && + (html += + ' (' + + extra.join(" ") + + ")"), + (html += "
")); + } + html = html + "
" + "
"; + } + return html; + })(item) + + (function (item) { + for ( + var mediaStream, + html = "", + playstate = item.PlayState || {}, + mediaStreams = (item.NowPlayingItem || {}).MediaStreams || [], + audioStreamIndex = playstate.AudioStreamIndex, + playstate = item.TranscodingInfo || {}, + i = 0, + length = mediaStreams.length; + i < length; + i++ + ) + if ( + "Audio" === mediaStreams[i].Type && + (null == audioStreamIndex || + audioStreamIndex === mediaStreams[i].Index) + ) { + mediaStream = mediaStreams[i]; + break; + } + return ( + mediaStream && + ((html = + (html += + '
') + + _globalize.default.translate("Audio") + + "
"), + (html = + (mediaStream.DisplayTitle + ? (html += "
") + mediaStream.DisplayTitle + "
" + : html) + + '
'), + !1 === playstate.IsAudioDirect + ? ((html = + (html = + html + _globalize.default.translate("Transcode") + " (") + + (playstate.AudioCodec || "").toUpperCase() + + " "), + playstate.AudioBitrate && + (html += _dataformatter.default.bitrateToString( + playstate.AudioBitrate, + )), + (html += ")")) + : ((html += _globalize.default.translate("HeaderDirectPlay")), + mediaStream.BitRate && + (html += + " (" + + _dataformatter.default.bitrateToString( + mediaStream.BitRate, + ) + + ")")), + (html += "
")), + html + ); + })(item) + + (function (item, apiClient) { + var html = ""; + if (item.UserId) { + html += + '
"; + var names = []; + item.UserId && names.push(item.UserName); + for (var i = 0, length = item.AdditionalUsers.length; i < length; i++) + names.push(item.AdditionalUsers[i].UserName); + apiClient = + item.UserId && item.UserPrimaryImageTag + ? apiClient.getUserImageUrl(item.UserId, { + tag: item.UserPrimaryImageTag, + height: 24, + type: "Primary", + }) + : null; + apiClient && + (html += + ''), + (html = html + ("
" + names.join(", ") + "
") + "
"); + } + return html; + })(item, apiClient) + + (function (options, item) { + var html = ""; + return ( + options.isSingleClickElement || + item.DeviceId === _connectionmanager.default.deviceId() || + (item.ServerId && + item.NowPlayingItem && + item.SupportsRemoteControl && + (html = + (html += + '") + + ''), + item.ServerId && + item.SupportedCommands.includes("DisplayMessage") && + item.DeviceId !== _connectionmanager.default.deviceId() && + (html += + ''), + html && + ((html = + '
' + + html), + (html += "
"))), + html + ); + })(options, item) + + "
" + ); + } + function getCardHtml(item, index, options) { + var itemType = item.Type, + action = options.action || "link", + shape = + ("none" !== action && + (item.IsFolder && "play" === action + ? (action = "link") + : "Photo" === item.MediaType + ? (action = "playallfromhere") + : ("AddServer" !== itemType && + "EmbyConnect" !== itemType && + "Downloads" !== itemType) || + (action = "link")), + options.shape), + imageShape = options.imageShape, + isSingleClickElement = options.isSingleClickElement, + serverId = item.ServerId || options.serverId, + serverId = serverId + ? _connectionmanager.default.getApiClient(serverId) + : null, + imageItem = options.showCurrentProgramImage + ? item.CurrentProgram || item + : "ActiveSession" === itemType + ? item.NowPlayingItem + : item.ProgramInfo || item, + blurImageOptions = + (!1 !== options.image && imageItem + ? ((imgInfo = _imageloader.default.getImageUrl( + imageItem, + serverId, + options, + imageShape, + )), + (blurImageOptions = + "large" === options.vibrantMode + ? { width: 12, blur: 2, adjustForPixelRatio: !1 } + : { width: 1, adjustForPixelRatio: !1 }), + (vibrantImgInfo = options.vibrant + ? _imageloader.default.getImageUrl( + imageItem, + serverId, + blurImageOptions, + imageShape, + ) + : null), + imgInfo.imgUrl || + imageItem === item || + ((imgInfo = _imageloader.default.getImageUrl( + (imageItem = item), + serverId, + options, + imageShape, + )), + (vibrantImgInfo = options.vibrant + ? _imageloader.default.getImageUrl( + imageItem, + serverId, + blurImageOptions, + imageShape, + ) + : null))) + : (imgInfo = {}), + imgInfo.imgUrl), + imageShape = (vibrantImgInfo || imgInfo).imgUrl, + vibrantImgInfo = imgInfo.forceName && "Photo" !== item.MediaType, + overlayText = options.overlayText, + fieldMap = options.fieldMap, + cardContentClass = options.cardContentClass, + cardImageClass = "cardImage", + imageItem = + !1 === options.coverImage + ? null + : _imageloader.default.getCoveredImageClass( + imageItem, + imgInfo.aspect, + options.uiAspect, + options.coverImage, + ); + imageItem && + ((cardContentClass += imageItem), (cardImageClass += imageItem)), + options.paddedImage && (cardImageClass += " cardImage-padded"), + item.Policy && + item.Policy.IsDisabled && + (cardContentClass += " grayscaleImage"), + options.defaultBackground || + blurImageOptions || + options.cardLayout || + (cardContentClass += " defaultCardBackground"); + options.round || + "MusicArtist" !== itemType || + "square" !== shape || + (cardContentClass += " cardContent-round"); + var cardImageContainerOpen, + footerCssClass, + logoUrl, + imgInfo = options.cardBoxClass, + imageItem = + (options.playQueueIndicator && + item.PlaylistItemId && + (_playbackmanager.default.currentItem() || {}).PlaylistItemId === + item.PlaylistItemId && + (imgInfo += " activePlaylistCardBox"), + !1 === options.progress + ? null + : _indicators.default.getProgressBarHtml(item, { + containerClass: "cardProgressBarContainer", + animated: !1, + })), + shape = "", + itemController = + (options.showChannelLogo && + item.ChannelPrimaryImageTag && + (logoUrl = serverId.getImageUrl(item.ChannelId, { + type: "Primary", + height: 40, + tag: item.ChannelPrimaryImageTag, + })), + !1 === options.programIndicators || + ("Program" !== itemType && + "Timer" !== itemType && + "TvChannel" !== itemType) || + (imageItem = + (function (item) { + var html = ""; + return ( + (item = item.CurrentProgram || item).IsLive + ? (html += + '
' + + _globalize.default.translate("Live") + + "
") + : item.IsPremiere && + (html += + '
' + + _globalize.default.translate("Premiere") + + "
"), + html + ); + })(item) + (imageItem || "")), + _itemmanager.default.getItemController(itemType)), + vibrantImgInfo = + (overlayText || vibrantImgInfo + ? ((footerCssClass = options.innerCardFooterClass), + (shape += getCardFooterText( + item, + itemController, + options, + (function (options, fieldMap, overlayText, forceName) { + return overlayText + ? !forceName || + fieldMap.Name || + fieldMap.ParentNameOrName || + fieldMap.ParentName + ? fieldMap + : options.fieldMapWithForceName + : !forceName || + fieldMap.Name || + fieldMap.ParentNameOrName || + fieldMap.ParentName + ? {} + : { ParentNameOrName: !0 }; + })(options, fieldMap, overlayText, vibrantImgInfo), + 0, + footerCssClass, + imageItem, + (logoUrl = null), + !1, + )), + (imageItem = "")) + : imageItem && + ((shape = + (shape += '
') + + imageItem + + "
"), + (imageItem = "")), + ""), + fieldMap = + (overlayText || + ((footerCssClass = options.cardLayout + ? options.outerFooterClass + : "cardFooter cardFooter-transparent"), + options.sideFooter && (footerCssClass += " cardFooter-side"), + logoUrl && (footerCssClass += " cardFooter-withlogo"), + options.vibrant && + imageShape && + "large" !== options.vibrantMode && + (footerCssClass += " darkContentContainer"), + (vibrantImgInfo = getCardFooterText( + item, + itemController, + options, + fieldMap, + 0, + footerCssClass, + imageItem, + (logoUrl = options.cardLayout ? logoUrl : null), + !0, + )), + options.sideFooter && + ((overlayText = "cardFooterContent"), + options.centerText || (overlayText += " cardFooterContent-start"), + (vibrantImgInfo = + '
' + + vibrantImgInfo + + "
"), + "ActiveSession" === itemType) && + (vibrantImgInfo += getActiveSessionFooterHtml( + options, + item, + serverId, + ))), + ""); + return ( + options.sideFooter || (cardContentClass += " " + options.cardPadderClass), + (fieldMap = isSingleClickElement + ? ((cardImageContainerOpen = blurImageOptions + ? 2 === options.lazy + ? supportsObjectFit + ? '
 ' + : '
' + : supportsNativeLazyLoading + ? '
 ' + : '
' + : '
'), + "
") + : "none" === action + ? ((cardImageContainerOpen = blurImageOptions + ? 2 === options.lazy + ? supportsObjectFit + ? '
 ' + : '
' + : supportsNativeLazyLoading + ? '
 ' + : '
' + : '
'), + "
") + : ((cardImageContainerOpen = blurImageOptions + ? 2 === options.lazy + ? supportsObjectFit + ? '")), + !1 === options.image && + !1 === options.imageContainer && + (cardImageContainerOpen = fieldMap = ""), + options.vibrant && imageShape + ? ("large" === options.vibrantMode && + (imgInfo += " darkContentContainer"), + (cardImageContainerOpen = + '
' + + cardImageContainerOpen)) + : options.enableCardBox && + (cardImageContainerOpen = + '
' + cardImageContainerOpen), + options.typeIndicator && + ("Video" === itemType + ? (cardImageContainerOpen += + '') + : "Folder" === itemType || "PhotoAlbum" === itemType + ? (cardImageContainerOpen += + '') + : "Photo" === itemType && + (cardImageContainerOpen += + '')), + !1 !== options.missingIndicator && + (cardImageContainerOpen += _indicators.default.getMissingIndicator( + item, + "cardIndicator cardMissingIndicator", + )), + !1 !== options.syncIndicator && + (100 === (footerCssClass = item.SyncPercent) + ? (cardImageContainerOpen += + '') + : null != footerCssClass && + (cardImageContainerOpen += + '')), + !1 !== options.playedIndicator && + (cardImageContainerOpen += _indicators.default.getPlayedIndicatorHtml( + item, + "cardIndicator card", + )), + !1 !== options.timerIndicator && + (cardImageContainerOpen += _indicators.default.getTimerIndicator( + item, + "cardIndicator card", + )), + "CollectionFolder" === itemType || item.CollectionType + ? ((imageItem = item.RefreshProgress ? "" : "hide"), + options.sideFooter && + (imageItem += " cardRefreshIndicator-sideFooter"), + (cardImageContainerOpen += + '
'), + refreshIndicatorLoaded || + ((refreshIndicatorLoaded = !0), + require(["emby-itemrefreshindicator"]))) + : "User" === itemType && + item.ConnectLinkType && + (cardImageContainerOpen += + 'cloud'), + !blurImageOptions && + options.imageFallback && + (cardImageContainerOpen += (function (item, options) { + if (null != options.defaultTextContent) + return ( + '
' + + options.defaultTextContent + + "
" + ); + if ("ItemImage" === item.Type) + return (function (item, options) { + return ( + '

' + + item.Name + + "

" + ); + })(item, options); + var icon = + item.Icon || + (!1 === options.defaultIcon + ? null + : _itemmanager.default.getDefaultIcon(item, options)); + if (icon) + return options.smallSideFooter + ? '' + + icon + + "" + : options.sideFooter + ? '' + + icon + + "" + : '' + + icon + + ""; + icon = isUsingLiveTvNaming(item.Type) + ? item.Name + : _itemmanager.default.getDisplayName(item, { + includeParentInfo: options.includeParentInfoInTitle, + channelNumberFirst: options.channelNumberFirst, + }); + return ( + '
' + + icon + + "
" + ); + })(item, options)), + (logoUrl = + _layoutmanager.default.tv || !1 === options.hoverMenu + ? "" + : (function (item, itemController, action, options, menuClass) { + var html = "", + hasContent = !1, + menuClass = + ((html += + '") : ""; + })(item, itemController, action, options, options.cardPadderClass)), + options.dragReorder && + (logoUrl += + ''), + options.cardParts + ? ((overlayText = _shortcuts.default.getShortcutAttributes( + item, + options, + )), + options.isSingleClickElement && + overlayText.push({ name: "data-action", value: action }), + options.isVirtualList || + overlayText.push({ name: "data-index", value: index }), + options.sideFooter + ? (fieldMap += shape) + : (fieldMap = shape + fieldMap), + (serverId = + cardImageContainerOpen + fieldMap + logoUrl + vibrantImgInfo), + options.enableCardBox && (serverId += "
"), + { attributes: overlayText, html: serverId }) + : ((isSingleClickElement = _shortcuts.default.getShortcutAttributesHtml( + item, + options, + )), + options.isSingleClickElement && + (isSingleClickElement += ' data-action="' + action + '"'), + options.isVirtualList || + (isSingleClickElement += ' data-index="' + index + '"'), + (cardImageClass = options.tagName), + options.sideFooter + ? (fieldMap += shape) + : (fieldMap = shape + fieldMap), + (cardContentClass = options.fixedAttributes) && + (isSingleClickElement += " " + cardContentClass), + (imageShape = + "<" + + cardImageClass + + isSingleClickElement + + ' class="' + + options.className + + '">' + + cardImageContainerOpen + + fieldMap + + logoUrl + + vibrantImgInfo), + options.enableCardBox && (imageShape += "
"), + imageShape + "") + ); + } + var supportsTargetBlank = _servicelocator.appHost.supports("targetblank"); + function setUserPreferredSize(element, cardSize) { + if (supportsCalc && supportsMin && supportsCssVariables) { + var value = element ? cardSize : _usersettings.default.cardSize(); + switch (value) { + case "extrasmall": + value = "3"; + break; + case "smaller": + value = "2"; + break; + case "small": + value = "1"; + break; + case "large": + value = "-1"; + break; + case "larger": + value = "-2"; + break; + case "extralarge": + value = "-3"; + break; + case "normal": + value = "0"; + break; + default: + value = element ? "null" : "0"; + } + try { + element && "null" === value + ? element.style.removeProperty("--user-cards-size-adjust") + : (element || document.documentElement).style.setProperty( + "--user-cards-size-adjust", + value, + ); + } catch (err) { + console.log("error in setUserPreferredSize: " + err); + } + } + } + _events.default.on( + _connectionmanager.default, + "localusersignedin", + function () { + setUserPreferredSize(); + }, + ), + _events.default.on( + _usersettings.default, + "change", + function (e, name, value) { + "cardSize" === name && setUserPreferredSize(); + }, + ), + (_exports.default = { + setListOptions: setListOptions, + getItemsHtml: function (items, options) { + return buildCardsHtmlInternal( + (items = + 1 === arguments.length ? (options = arguments[0]).items : items), + options, + ); + }, + getItemParts: function (item, index, options) { + return (options.cardParts = !0), getCardHtml(item, index, options); + }, + buildCards: function (items, options) { + var itemsContainer = options.itemsContainer; + if (document.body.contains(itemsContainer)) { + var parentContainer = options.parentContainer; + if (parentContainer) { + if (!items.length) + return void parentContainer.classList.add("hide"); + parentContainer.classList.remove("hide"); + } + parentContainer = buildCardsHtmlInternal(items, options); + (itemsContainer.innerHTML = parentContainer), + (itemsContainer.items = items), + options.multiSelect && + (itemsContainer.enableMultiSelect + ? itemsContainer.enableMultiSelect(!0) + : itemsContainer.setAttribute("data-multiselect", "true")), + options.contextMenu && + (itemsContainer.enableContextMenu + ? itemsContainer.enableContextMenu(!0) + : itemsContainer.setAttribute("data-contextmenu", "true")), + parentContainer && + _imageloader.default.lazyChildren(itemsContainer), + options.autoFocus && + _focusmanager.default.autoFocus(itemsContainer); + } + }, + virtualChunkSize: 50, + setListClasses: function (elem, listOptions) { + var _listOptions$options, + elem = elem.classList; + (null != (_listOptions$options = listOptions.options) && + _listOptions$options.rows) || + (listOptions.virtualScrollLayout || "").includes("horizontal") + ? elem.remove("vertical-wrap") + : elem.add("vertical-wrap"), + elem.remove("vertical-list"); + }, + setUserPreferredSize: setUserPreferredSize, + }); +}); diff --git a/modules/flvjs/core/media-info.js b/modules/flvjs/core/media-info.js index 19defb9..7aa1a50 100644 --- a/modules/flvjs/core/media-info.js +++ b/modules/flvjs/core/media-info.js @@ -1 +1,110 @@ -define(["exports"],function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_exports.default=function(){function MediaInfo(){babelHelpers.classCallCheck(this,MediaInfo),this.mimeType=null,this.duration=null,this.hasAudio=null,this.hasVideo=null,this.audioCodec=null,this.videoCodec=null,this.audioDataRate=null,this.videoDataRate=null,this.audioSampleRate=null,this.audioChannelCount=null,this.width=null,this.height=null,this.fps=null,this.profile=null,this.refFrames=null,this.chromaFormat=null,this.sarNum=null,this.sarDen=null,this.metadata=null,this.segments=null,this.segmentCount=null,this.hasKeyframesIndex=null,this.keyframesIndex=null}return babelHelpers.createClass(MediaInfo,[{key:"isComplete",value:function(){var audioInfoComplete=!1===this.hasAudio||!0===this.hasAudio&&null!=this.audioCodec&&null!=this.audioSampleRate&&null!=this.audioChannelCount,videoInfoComplete=!1===this.hasVideo||!0===this.hasVideo&&null!=this.videoCodec&&null!=this.width&&null!=this.height;return null!=this.mimeType&&null!=this.duration&&null!=this.metadata&&null!=this.hasKeyframesIndex&&audioInfoComplete&&videoInfoComplete}},{key:"isSeekable",value:function(){return!0===this.hasKeyframesIndex}},{key:"getNearestKeyframe",value:function(milliseconds){var table;return null==this.keyframesIndex?null:(table=this.keyframesIndex,{index:milliseconds=this._search(table.times,milliseconds),milliseconds:table.times[milliseconds],fileposition:table.filepositions[milliseconds]})}},{key:"_search",value:function(list,value){var mid,idx=0,last=list.length-1,lbound=0,ubound=last;for(value=list[mid]&&value= list[mid] && value < list[mid + 1]) + ) { + idx = mid; + break; + } + list[mid] < value ? (lbound = mid + 1) : (ubound = mid - 1); + } + return idx; + }, + }, + ]), + MediaInfo + ); + })()); +}); diff --git a/modules/mediainfo/mediainfo.js b/modules/mediainfo/mediainfo.js index 2a380e9..d71d4c2 100644 --- a/modules/mediainfo/mediainfo.js +++ b/modules/mediainfo/mediainfo.js @@ -1 +1,790 @@ -define(["exports","./../common/datetime.js","./../common/globalize.js","./../common/textencoding.js","./../common/itemhelper.js","./../common/itemmanager/itemmanager.js","./../indicators/indicators.js","./../approuter.js","./../emby-elements/emby-button/emby-button.js","./../common/dataformatter.js"],function(_exports,_datetime,_globalize,_textencoding,_itemhelper,_itemmanager,_indicators,_approuter,_embyButton,_dataformatter){function getProgramInfoHtml(item,options){var date,text,html="",miscInfo=[];if(item.StartDate&&!1!==options.programTime)try{text="",date=new Date(Date.parse(item.StartDate)),!1!==options.startDate&&(text+=_datetime.default.toLocaleDateString(date,{weekday:"short",month:"short",day:"numeric"})),text+=" "+_datetime.default.getDisplayTime(date),item.EndDate&&(date=new Date(Date.parse(item.EndDate)),text+=" – "+_datetime.default.getDisplayTime(date)),miscInfo.push(text)}catch(e){console.log("Error parsing date: "+item.StartDate)}return item.ChannelName&&(date=item.ChannelName,item.ChannelNumber&&(date+=" "+item.ChannelNumber),options.interactive&&item.ChannelId?miscInfo.push({html:''+date+""}):miscInfo.push(date)),options.timerIndicator&&(text=function(item){var status,itemType=item.Type;if("SeriesTimer"===itemType)return'';if(item.TimerId||item.SeriesTimerId)status=item.Status||"Cancelled";else{if("Timer"!==itemType)return"";status=item.Status}return item.SeriesTimerId?"Cancelled"!==status?'':'':''}(item))&&miscInfo.push({html:text}),html+=miscInfo.map(getMediaInfoItem).join("")}function getMediaInfoHtml(item,options){var showFolderRuntime,html="",miscInfo=[],itemType=(options=options||{},item.Type);switch(itemType){case"MusicAlbum":case"MusicArtist":case"Playlist":case"MusicGenre":case"BoxSet":showFolderRuntime=!0}if(("Episode"===itemType||"Photo"===item.MediaType)&&!1!==options.originalAirDate&&item.PremiereDate)try{date=new Date(Date.parse(item.PremiereDate)),text=_datetime.default.toLocaleDateString(date,{month:"short",day:"numeric",year:"numeric"}),miscInfo.push(text)}catch(e){console.log("Error parsing date: "+item.PremiereDate)}if("SeriesTimer"===itemType&&(item.RecordAnyTime?miscInfo.push(_globalize.default.translate("Anytime")):item.StartDate&&miscInfo.push(_datetime.default.getDisplayTime(item.StartDate)),item.RecordAnyChannel||null==(_item$ChannelIds=item.ChannelIds)||!_item$ChannelIds.length?miscInfo.push(_globalize.default.translate("AllChannels")):miscInfo.push(item.ChannelName||_globalize.default.translate("OneChannel"))),item.StartDate&&"Program"!==itemType&&"SeriesTimer"!==itemType&&"Timer"!==itemType)try{date=new Date(Date.parse(item.StartDate)),text=_datetime.default.toLocaleDateString(date,{month:"short",day:"numeric",year:"numeric"}),miscInfo.push(text),"Recording"!==itemType&&(text=_datetime.default.getDisplayTime(date),miscInfo.push(text))}catch(e){console.log("Error parsing date: "+item.StartDate)}if(!1!==options.year&&item.ProductionYear&&"Series"===itemType)if("Continuing"===item.Status)miscInfo.push(_globalize.default.translate("SeriesYearToPresent",item.ProductionYear));else if(item.ProductionYear){if(text=item.ProductionYear,item.EndDate)try{var endYear=new Date(Date.parse(item.EndDate)).getFullYear();endYear!==item.ProductionYear&&(text+=" – "+endYear)}catch(e){console.log("Error parsing date: "+item.EndDate)}miscInfo.push(text)}if("Series"===itemType&&(_item$ChannelIds="",item.Studios&&item.Studios.length&&(endYear=item.Studios[0],_item$ChannelIds&&(_item$ChannelIds+=" on "),_item$ChannelIds+=''+endYear.Name+""),_item$ChannelIds)&&miscInfo.push(_item$ChannelIds),!1!==options.programIndicator&&(item.IsLive?miscInfo.push({html:'
'+_globalize.default.translate("Live")+"
"}):item.IsPremiere?miscInfo.push({html:'
'+_globalize.default.translate("Premiere")+"
"}):item.IsNew?miscInfo.push({html:'
'+_globalize.default.translate("AttributeNew")+"
"}):item.IsRepeat&&miscInfo.push({html:'
'+_globalize.default.translate("Repeat")+"
"})),"Program"===itemType)if((item.IsSeries||item.EpisodeTitle)&&!1!==options.episodeTitle)(text=_itemmanager.default.getDisplayName(item,{includeIndexNumber:options.episodeTitleIndexNumber}))&&miscInfo.push(text);else if(item.IsMovie&&item.ProductionYear&&!1!==options.originalAirDate)miscInfo.push(item.ProductionYear);else if(item.PremiereDate&&!1!==options.originalAirDate)try{date=new Date(Date.parse(item.PremiereDate)),text=_globalize.default.translate("OriginalAirDateValue",_datetime.default.toLocaleDateString(date,{month:"short",day:"numeric",year:"numeric"})),miscInfo.push(text)}catch(e){console.log("Error parsing date: "+item.PremiereDate)}else item.ProductionYear&&miscInfo.push(item.ProductionYear);if(!1!==options.year&&"Series"!==itemType&&("Episode"!==itemType||!item.PremiereDate)&&"Person"!==itemType&&"Photo"!==item.MediaType&&"Program"!==itemType&&"Season"!==itemType)if(item.ProductionYear)miscInfo.push(item.ProductionYear);else if(item.PremiereDate)try{text=new Date(Date.parse(item.PremiereDate)).getFullYear(),miscInfo.push(text)}catch(e){console.log("Error parsing date: "+item.PremiereDate)}var date,_item$ChannelIds=(null==(endYear=options.mediaSource)?void 0:endYear.RunTimeTicks)||item.RunTimeTicks,text=("Series"===itemType||"Program"===itemType||showFolderRuntime||!1===options.runtime||_item$ChannelIds&&miscInfo.push("Audio"===itemType?_datetime.default.getDisplayRunningTime(_item$ChannelIds):_datetime.default.getHumanReadableRuntime(_item$ChannelIds)),item.OfficialRating&&miscInfo.push(item.OfficialRating),showFolderRuntime&&((date=item.SongCount||item.ChildCount)&&miscInfo.push("BoxSet"===itemType?1===date?_globalize.default.translate("ValueOneItem"):_globalize.default.translate("ItemCount",date):1===date?_globalize.default.translate("OneTrack"):_globalize.default.translate("TrackCount",date)),_item$ChannelIds)&&"Playlist"===itemType&&miscInfo.push(_datetime.default.getHumanReadableRuntime(_item$ChannelIds)),"Series"===itemType&&item.ChildCount&&(1===item.ChildCount?miscInfo.push(_globalize.default.translate("OneSeason")):miscInfo.push(_globalize.default.translate("NumberSeasonsValue",item.ChildCount))),item.Video3DFormat&&miscInfo.push("3D"),"Photo"===item.MediaType&&item.Width&&item.Height&&miscInfo.push(item.Width+"x"+item.Height),options.container&&item.Container&&miscInfo.push(item.Container.toUpperCase()),item.Bitrate||item.BitRate);return options.bitrate&&text&&miscInfo.push(_dataformatter.default.bitrateToString(text)),"RemoteSubtitle"===itemType&&(null!=item.DownloadCount&&miscInfo.push(_globalize.default.translate("DownloadsValue",item.DownloadCount)),item.IsForced&&(html+='
'+_globalize.default.translate("Forced")+"
"),item.IsHashMatch)&&(html+='
'+_globalize.default.translate("HashMatch")+"
"),!1!==options.CommunityRating&&item.CommunityRating&&"RemoteSubtitle"!==item.Type&&(html+=getStarIconsHtml(item)),item.CriticRating&&!1!==options.criticRating&&(html+=getCriticRating(item)),html+=miscInfo.map(getMediaInfoItem).join(""),item.HasSubtitles&&!1!==options.subtitles&&(html+='
CC
'),options.dateAdded&&_itemhelper.default.enableDateAddedDisplay(item)&&(endYear=new Date(Date.parse(item.DateCreated)),html+=getMediaInfoItem(_globalize.default.translate("AddedOnValue",_datetime.default.toLocaleDateString(endYear,{month:"short",day:"numeric",year:"numeric"})))),options.genres&&(html+=function(item,options){var type,context=options.context,genres=(item.GenreItems||[]).slice(0),itemType=item.Type;switch("Playlist"!==itemType&&"BoxSet"!==itemType&&"MusicArtist"!==itemType||5'+_textencoding.default.htmlEncode(p.Name)+""}).join(itemType))&&'
'+options+"
"}(item,options)),!1!==options.endsAt&&(date=getEndsAt(item,options.mediaSource))&&(html+=getMediaInfoItem(date,("endsAt "+(options.endsAtClass||"")).trim())),html+=_indicators.default.getMissingIndicator(item)}function getEndsAt(item,mediaSource){if((mediaSource=mediaSource||item,"Video"===item.MediaType&&mediaSource.RunTimeTicks)&&(!item.StartDate&&"Program"!==item.Type))return item=item.UserData&&item.UserData.PlaybackPositionTicks||0,getEndsAtFromPosition(mediaSource.RunTimeTicks,item);return null}function getEndsAtFromPosition(runtimeTicks,positionTicks,includeText){runtimeTicks=Date.now()+(runtimeTicks-(positionTicks||0))/1e4,runtimeTicks=new Date(runtimeTicks),positionTicks=_datetime.default.getDisplayTime(runtimeTicks);return!1===includeText?positionTicks:_globalize.default.translate("EndsAtValue",positionTicks)}function getMediaInfoItem(m,cssClass){cssClass="string"==typeof cssClass?cssClass+" mediaInfoItem":"mediaInfoItem";var mediaInfoText=m;if("string"!=typeof m&&"number"!=typeof m){if(m.html)return m.html;mediaInfoText=m.text,cssClass+=" "+m.cssClass}return'
'+mediaInfoText+"
"}function getCriticRating(item,options){var outerClass="mediaInfoItem mediaInfoCriticRating";return options&&options.outerClass&&(outerClass+=" "+options.outerClass),'
'+item.CriticRating+"%
"}function getStarIconsHtml(item,options){var outerClass,html="",item=item.CommunityRating;return item&&(outerClass="starRatingContainer mediaInfoItem",options&&options.outerClass&&(outerClass+=" "+options.outerClass),html=(html=html+'
')+_dataformatter.default.numberToString(item,1)+"
"),html}function fillPrimaryMediaInfo(elem,item,options){var html=getPrimaryMediaInfoHtml(item,options);(elem.innerHTML=html)?elem.classList.remove("hide"):elem.classList.add("hide"),afterFill(elem,item,options)}function afterFill(elem,item,options){!1!==options.endsAt&&(elem=elem.querySelector(".endsAt"))&&!function(elem,item,mediaSource){var interval=setInterval(function(){document.body.contains(elem)?elem.innerHTML=getEndsAt(item,mediaSource):clearInterval(interval)},6e4)}(elem,item,options.mediaSource)}function getPrimaryMediaInfoHtml(item,options){return null==(options=options||{}).interactive&&(options.interactive=!1),getMediaInfoHtml(item,options)}function getSecondaryMediaInfoHtml(item,options){null==(options=options||{}).interactive&&(options.interactive=!1);var itemType=item.Type;return"Program"===itemType||"Timer"===itemType||"Recording"===itemType?getProgramInfoHtml(item,options):""}function createAttribute(label,value,className){return'
'+label+''+value+"
"}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,require(["material-icons","css!modules/mediainfo/mediainfo.css","programStyles"]);var _default={getMediaInfoHtml:getPrimaryMediaInfoHtml,fill:fillPrimaryMediaInfo,getEndsAt:getEndsAt,getEndsAtFromPosition:getEndsAtFromPosition,getPrimaryMediaInfoHtml:getPrimaryMediaInfoHtml,getSecondaryMediaInfoHtml:getSecondaryMediaInfoHtml,fillPrimaryMediaInfo:fillPrimaryMediaInfo,fillSecondaryMediaInfo:function(elem,item,options){var html=getSecondaryMediaInfoHtml(item,options);(elem.innerHTML=html)?elem.classList.remove("hide"):elem.classList.add("hide"),afterFill(elem,item,options)},getResolutionText:_dataformatter.default.getResolutionText,pushMediaStreamLines:function(stream,options,lines,icon){var streamType=stream.StreamType,streamTypeLocalizationKey="EmbeddedImage"===streamType?"Image":streamType,streamTypeLocalizationKey=("Lyrics"===stream.SubtitleType&&(streamTypeLocalizationKey="Lyrics"),_globalize.default.translate(streamTypeLocalizationKey));lines.push('

'+(streamTypeLocalizationKey=icon?''+icon+""+streamTypeLocalizationKey:streamTypeLocalizationKey)+"

"),stream.DisplayTitle&&lines.push(createAttribute(_globalize.default.translate("Title"),stream.DisplayTitle)),stream.Title&&stream.Title!==stream.DisplayTitle&&lines.push(createAttribute(_globalize.default.translate("HeaderEmbeddedTitle"),stream.Title)),(stream.DisplayLanguage||stream.Language)&&"Video"!==streamType&&lines.push(createAttribute(_globalize.default.translate("Language"),stream.DisplayLanguage||stream.Language)),stream.Codec&&lines.push(createAttribute(_globalize.default.translate("Codec"),stream.Codec.toUpperCase())),stream.CodecTag&&lines.push(createAttribute(_globalize.default.translate("HeaderCodecTag"),stream.CodecTag)),stream.Profile&&lines.push(createAttribute(_globalize.default.translate("Profile"),stream.Profile)),stream.Level&&lines.push(createAttribute(_globalize.default.translate("Level"),stream.Level)),(stream.Width||stream.Height)&&lines.push(createAttribute(_globalize.default.translate("Resolution"),stream.Width+"x"+stream.Height)),stream.AspectRatio&&"mjpeg"!==stream.Codec&&lines.push(createAttribute(_globalize.default.translate("HeaderAspectRatio"),stream.AspectRatio)),"Video"===streamType&&lines.push(createAttribute(_globalize.default.translate("Interlaced"),stream.IsInterlaced?_globalize.default.translate("Yes"):_globalize.default.translate("No"))),(stream.AverageFrameRate||stream.RealFrameRate)&&lines.push(createAttribute(_globalize.default.translate("Framerate"),_dataformatter.default.numberToString(stream.AverageFrameRate||stream.RealFrameRate,3))),stream.ChannelLayout&&lines.push(createAttribute(_globalize.default.translate("Layout"),stream.ChannelLayout)),stream.Channels&&lines.push(createAttribute(_globalize.default.translate("Channels"),stream.Channels+" ch")),stream.BitRate&&"mjpeg"!==stream.Codec&&lines.push(createAttribute(_globalize.default.translate("Bitrate"),_dataformatter.default.bitrateToString(stream.BitRate))),stream.SampleRate&&lines.push(createAttribute(_globalize.default.translate("HeaderSampleRate"),_dataformatter.default.numberToString(stream.SampleRate)+" Hz")),stream.VideoRange&&"SDR"!==stream.VideoRange&&lines.push(createAttribute(_globalize.default.translate("HeaderVideoRange"),stream.VideoRange)),stream.ColorPrimaries&&lines.push(createAttribute(_globalize.default.translate("HeaderColorPrimaries"),stream.ColorPrimaries)),stream.ColorSpace&&lines.push(createAttribute(_globalize.default.translate("HeaderColorSpace"),stream.ColorSpace)),stream.ColorTransfer&&lines.push(createAttribute(_globalize.default.translate("HeaderColorTransfer"),stream.ColorTransfer)),stream.BitDepth&&lines.push(createAttribute(_globalize.default.translate("HeaderBitDepth"),stream.BitDepth+" bit")),stream.PixelFormat&&lines.push(createAttribute(_globalize.default.translate("HeaderPixelFormat"),stream.PixelFormat)),stream.RefFrames&&lines.push(createAttribute(_globalize.default.translate("HeaderReferenceFrames"),stream.RefFrames)),stream.Rotation&&lines.push(createAttribute(_globalize.default.translate("Rotation"),stream.Rotation)),"Video"!==streamType&&lines.push(createAttribute(_globalize.default.translate("Default"),stream.IsDefault?_globalize.default.translate("Yes"):_globalize.default.translate("No"))),"Subtitle"===streamType&&("Lyrics"!==stream.SubtitleType&&lines.push(createAttribute(_globalize.default.translate("Forced"),stream.IsForced?_globalize.default.translate("Yes"):_globalize.default.translate("No"))),lines.push(createAttribute(_globalize.default.translate("External"),stream.IsExternal?_globalize.default.translate("Yes"):_globalize.default.translate("No")))),stream.IsExternal&&stream.Path&&lines.push(createAttribute(_globalize.default.translate("File"),function(stream){return(stream=stream.Path.split("/").join("\\").split("\\"))[stream.length-1]}(stream)))},getCommunityRating:getStarIconsHtml,getCriticRating:getCriticRating,bitrateToString:_dataformatter.default.bitrateToString,sizeToString:_dataformatter.default.sizeToString};_exports.default=_default}); \ No newline at end of file +define([ + "exports", + "./../common/datetime.js", + "./../common/globalize.js", + "./../common/textencoding.js", + "./../common/itemhelper.js", + "./../common/itemmanager/itemmanager.js", + "./../indicators/indicators.js", + "./../approuter.js", + "./../emby-elements/emby-button/emby-button.js", + "./../common/dataformatter.js", +], function ( + _exports, + _datetime, + _globalize, + _textencoding, + _itemhelper, + _itemmanager, + _indicators, + _approuter, + _embyButton, + _dataformatter, +) { + function getProgramInfoHtml(item, options) { + var date, + text, + html = "", + miscInfo = []; + if (item.StartDate && !1 !== options.programTime) + try { + (text = ""), + (date = new Date(Date.parse(item.StartDate))), + !1 !== options.startDate && + (text += _datetime.default.toLocaleDateString(date, { + weekday: "short", + month: "short", + day: "numeric", + })), + (text += " " + _datetime.default.getDisplayTime(date)), + item.EndDate && + ((date = new Date(Date.parse(item.EndDate))), + (text += " – " + _datetime.default.getDisplayTime(date))), + miscInfo.push(text); + } catch (e) { + console.log("Error parsing date: " + item.StartDate); + } + return ( + item.ChannelName && + ((date = item.ChannelName), + item.ChannelNumber && (date += " " + item.ChannelNumber), + options.interactive && item.ChannelId + ? miscInfo.push({ + html: + '' + + date + + "", + }) + : miscInfo.push(date)), + options.timerIndicator && + (text = (function (item) { + var status, + itemType = item.Type; + if ("SeriesTimer" === itemType) + return ''; + if (item.TimerId || item.SeriesTimerId) + status = item.Status || "Cancelled"; + else { + if ("Timer" !== itemType) return ""; + status = item.Status; + } + return item.SeriesTimerId + ? "Cancelled" !== status + ? '' + : '' + : ''; + })(item)) && + miscInfo.push({ html: text }), + (html += miscInfo.map(getMediaInfoItem).join("")) + ); + } + function getMediaInfoHtml(item, options) { + var showFolderRuntime, + html = "", + miscInfo = [], + itemType = ((options = options || {}), item.Type); + switch (itemType) { + case "MusicAlbum": + case "MusicArtist": + case "Playlist": + case "MusicGenre": + case "BoxSet": + showFolderRuntime = !0; + } + if ( + ("Episode" === itemType || "Photo" === item.MediaType) && + !1 !== options.originalAirDate && + item.PremiereDate + ) + try { + (date = new Date(Date.parse(item.PremiereDate))), + (text = _datetime.default.toLocaleDateString(date, { + month: "short", + day: "numeric", + year: "numeric", + })), + miscInfo.push(text); + } catch (e) { + console.log("Error parsing date: " + item.PremiereDate); + } + if ( + ("SeriesTimer" === itemType && + (item.RecordAnyTime + ? miscInfo.push(_globalize.default.translate("Anytime")) + : item.StartDate && + miscInfo.push(_datetime.default.getDisplayTime(item.StartDate)), + item.RecordAnyChannel || + null == (_item$ChannelIds = item.ChannelIds) || + !_item$ChannelIds.length + ? miscInfo.push(_globalize.default.translate("AllChannels")) + : miscInfo.push( + item.ChannelName || _globalize.default.translate("OneChannel"), + )), + item.StartDate && + "Program" !== itemType && + "SeriesTimer" !== itemType && + "Timer" !== itemType) + ) + try { + (date = new Date(Date.parse(item.StartDate))), + (text = _datetime.default.toLocaleDateString(date, { + month: "short", + day: "numeric", + year: "numeric", + })), + miscInfo.push(text), + "Recording" !== itemType && + ((text = _datetime.default.getDisplayTime(date)), + miscInfo.push(text)); + } catch (e) { + console.log("Error parsing date: " + item.StartDate); + } + if (!1 !== options.year && item.ProductionYear && "Series" === itemType) + if ("Continuing" === item.Status) + miscInfo.push( + _globalize.default.translate( + "SeriesYearToPresent", + item.ProductionYear, + ), + ); + else if (item.ProductionYear) { + if (((text = item.ProductionYear), item.EndDate)) + try { + var endYear = new Date(Date.parse(item.EndDate)).getFullYear(); + endYear !== item.ProductionYear && (text += " – " + endYear); + } catch (e) { + console.log("Error parsing date: " + item.EndDate); + } + miscInfo.push(text); + } + if ( + ("Series" === itemType && + ((_item$ChannelIds = ""), + item.Studios && + item.Studios.length && + ((endYear = item.Studios[0]), + _item$ChannelIds && (_item$ChannelIds += " on "), + (_item$ChannelIds += + '' + + endYear.Name + + "")), + _item$ChannelIds) && + miscInfo.push(_item$ChannelIds), + !1 !== options.programIndicator && + (item.IsLive + ? miscInfo.push({ + html: + '
' + + _globalize.default.translate("Live") + + "
", + }) + : item.IsPremiere + ? miscInfo.push({ + html: + '
' + + _globalize.default.translate("Premiere") + + "
", + }) + : item.IsNew + ? miscInfo.push({ + html: + '
' + + _globalize.default.translate("AttributeNew") + + "
", + }) + : item.IsRepeat && + miscInfo.push({ + html: + '
' + + _globalize.default.translate("Repeat") + + "
", + })), + "Program" === itemType) + ) + if ((item.IsSeries || item.EpisodeTitle) && !1 !== options.episodeTitle) + (text = _itemmanager.default.getDisplayName(item, { + includeIndexNumber: options.episodeTitleIndexNumber, + })) && miscInfo.push(text); + else if ( + item.IsMovie && + item.ProductionYear && + !1 !== options.originalAirDate + ) + miscInfo.push(item.ProductionYear); + else if (item.PremiereDate && !1 !== options.originalAirDate) + try { + (date = new Date(Date.parse(item.PremiereDate))), + (text = _globalize.default.translate( + "OriginalAirDateValue", + _datetime.default.toLocaleDateString(date, { + month: "short", + day: "numeric", + year: "numeric", + }), + )), + miscInfo.push(text); + } catch (e) { + console.log("Error parsing date: " + item.PremiereDate); + } + else item.ProductionYear && miscInfo.push(item.ProductionYear); + if ( + !1 !== options.year && + "Series" !== itemType && + ("Episode" !== itemType || !item.PremiereDate) && + "Person" !== itemType && + "Photo" !== item.MediaType && + "Program" !== itemType && + "Season" !== itemType + ) + if (item.ProductionYear) miscInfo.push(item.ProductionYear); + else if (item.PremiereDate) + try { + (text = new Date(Date.parse(item.PremiereDate)).getFullYear()), + miscInfo.push(text); + } catch (e) { + console.log("Error parsing date: " + item.PremiereDate); + } + var date, + _item$ChannelIds = + (null == (endYear = options.mediaSource) + ? void 0 + : endYear.RunTimeTicks) || item.RunTimeTicks, + text = + ("Series" === itemType || + "Program" === itemType || + showFolderRuntime || + !1 === options.runtime || + (_item$ChannelIds && + miscInfo.push( + "Audio" === itemType + ? _datetime.default.getDisplayRunningTime(_item$ChannelIds) + : _datetime.default.getHumanReadableRuntime(_item$ChannelIds), + )), + item.OfficialRating && miscInfo.push(item.OfficialRating), + showFolderRuntime && + ((date = item.SongCount || item.ChildCount) && + miscInfo.push( + "BoxSet" === itemType + ? 1 === date + ? _globalize.default.translate("ValueOneItem") + : _globalize.default.translate("ItemCount", date) + : 1 === date + ? _globalize.default.translate("OneTrack") + : _globalize.default.translate("TrackCount", date), + ), + _item$ChannelIds) && + "Playlist" === itemType && + miscInfo.push( + _datetime.default.getHumanReadableRuntime(_item$ChannelIds), + ), + "Series" === itemType && + item.ChildCount && + (1 === item.ChildCount + ? miscInfo.push(_globalize.default.translate("OneSeason")) + : miscInfo.push( + _globalize.default.translate( + "NumberSeasonsValue", + item.ChildCount, + ), + )), + item.Video3DFormat && miscInfo.push("3D"), + "Photo" === item.MediaType && + item.Width && + item.Height && + miscInfo.push(item.Width + "x" + item.Height), + options.container && + item.Container && + miscInfo.push(item.Container.toUpperCase()), + item.Bitrate || item.BitRate); + return ( + options.bitrate && + text && + miscInfo.push(_dataformatter.default.bitrateToString(text)), + "RemoteSubtitle" === itemType && + (null != item.DownloadCount && + miscInfo.push( + _globalize.default.translate("DownloadsValue", item.DownloadCount), + ), + item.IsForced && + (html += + '
' + + _globalize.default.translate("Forced") + + "
"), + item.IsHashMatch) && + (html += + '
' + + _globalize.default.translate("HashMatch") + + "
"), + !1 !== options.CommunityRating && + item.CommunityRating && + "RemoteSubtitle" !== item.Type && + (html += getStarIconsHtml(item)), + item.CriticRating && + !1 !== options.criticRating && + (html += getCriticRating(item)), + (html += miscInfo.map(getMediaInfoItem).join("")), + item.HasSubtitles && + !1 !== options.subtitles && + (html += + '
CC
'), + options.dateAdded && + _itemhelper.default.enableDateAddedDisplay(item) && + ((endYear = new Date(Date.parse(item.DateCreated))), + (html += getMediaInfoItem( + _globalize.default.translate( + "AddedOnValue", + _datetime.default.toLocaleDateString(endYear, { + month: "short", + day: "numeric", + year: "numeric", + }), + ), + ))), + options.genres && + (html += (function (item, options) { + var type, + context = options.context, + genres = (item.GenreItems || []).slice(0), + itemType = item.Type; + switch ( + (("Playlist" !== itemType && + "BoxSet" !== itemType && + "MusicArtist" !== itemType) || + (5 < genres.length && (genres.length = 5)), + context) + ) { + case "games": + type = "GameGenre"; + break; + case "music": + type = "MusicGenre"; + break; + default: + type = "Genre"; + } + return ( + (itemType = options.genreConcat || ", "), + (options = + (options = genres + .map(function (p) { + return ( + '' + + _textencoding.default.htmlEncode(p.Name) + + "" + ); + }) + .join(itemType)) && + '
' + + options + + "
") + ); + })(item, options)), + !1 !== options.endsAt && + (date = getEndsAt(item, options.mediaSource)) && + (html += getMediaInfoItem( + date, + ("endsAt " + (options.endsAtClass || "")).trim(), + )), + (html += _indicators.default.getMissingIndicator(item)) + ); + } + function getEndsAt(item, mediaSource) { + if ( + ((mediaSource = mediaSource || item), + "Video" === item.MediaType && mediaSource.RunTimeTicks) && + !item.StartDate && + "Program" !== item.Type + ) + return ( + (item = (item.UserData && item.UserData.PlaybackPositionTicks) || 0), + getEndsAtFromPosition(mediaSource.RunTimeTicks, item) + ); + return null; + } + function getEndsAtFromPosition(runtimeTicks, positionTicks, includeText) { + (runtimeTicks = Date.now() + (runtimeTicks - (positionTicks || 0)) / 1e4), + (runtimeTicks = new Date(runtimeTicks)), + (positionTicks = _datetime.default.getDisplayTime(runtimeTicks)); + return !1 === includeText + ? positionTicks + : _globalize.default.translate("EndsAtValue", positionTicks); + } + function getMediaInfoItem(m, cssClass) { + cssClass = + "string" == typeof cssClass + ? cssClass + " mediaInfoItem" + : "mediaInfoItem"; + var mediaInfoText = m; + if ("string" != typeof m && "number" != typeof m) { + if (m.html) return m.html; + (mediaInfoText = m.text), (cssClass += " " + m.cssClass); + } + return '
' + mediaInfoText + "
"; + } + function getCriticRating(item, options) { + var outerClass = "mediaInfoItem mediaInfoCriticRating"; + return ( + options && options.outerClass && (outerClass += " " + options.outerClass), + '
' + + item.CriticRating + + "%
" + ); + } + function getStarIconsHtml(item, options) { + var outerClass, + html = "", + item = item.CommunityRating; + return ( + item && + ((outerClass = "starRatingContainer mediaInfoItem"), + options && + options.outerClass && + (outerClass += " " + options.outerClass), + (html = + (html = + html + + '
') + + _dataformatter.default.numberToString(item, 1) + + "
")), + html + ); + } + function fillPrimaryMediaInfo(elem, item, options) { + var html = getPrimaryMediaInfoHtml(item, options); + (elem.innerHTML = html) + ? elem.classList.remove("hide") + : elem.classList.add("hide"), + afterFill(elem, item, options); + } + function afterFill(elem, item, options) { + !1 !== options.endsAt && + (elem = elem.querySelector(".endsAt")) && + !(function (elem, item, mediaSource) { + var interval = setInterval(function () { + document.body.contains(elem) + ? (elem.innerHTML = getEndsAt(item, mediaSource)) + : clearInterval(interval); + }, 6e4); + })(elem, item, options.mediaSource); + } + function getPrimaryMediaInfoHtml(item, options) { + return ( + null == (options = options || {}).interactive && + (options.interactive = !1), + getMediaInfoHtml(item, options) + ); + } + function getSecondaryMediaInfoHtml(item, options) { + null == (options = options || {}).interactive && (options.interactive = !1); + var itemType = item.Type; + return "Program" === itemType || + "Timer" === itemType || + "Recording" === itemType + ? getProgramInfoHtml(item, options) + : ""; + } + function createAttribute(label, value, className) { + return ( + '
' + + label + + '' + + value + + "
" + ); + } + Object.defineProperty(_exports, "__esModule", { value: !0 }), + (_exports.default = void 0), + require([ + "material-icons", + "css!modules/mediainfo/mediainfo.css", + "programStyles", + ]); + var _default = { + getMediaInfoHtml: getPrimaryMediaInfoHtml, + fill: fillPrimaryMediaInfo, + getEndsAt: getEndsAt, + getEndsAtFromPosition: getEndsAtFromPosition, + getPrimaryMediaInfoHtml: getPrimaryMediaInfoHtml, + getSecondaryMediaInfoHtml: getSecondaryMediaInfoHtml, + fillPrimaryMediaInfo: fillPrimaryMediaInfo, + fillSecondaryMediaInfo: function (elem, item, options) { + var html = getSecondaryMediaInfoHtml(item, options); + (elem.innerHTML = html) + ? elem.classList.remove("hide") + : elem.classList.add("hide"), + afterFill(elem, item, options); + }, + getResolutionText: _dataformatter.default.getResolutionText, + pushMediaStreamLines: function (stream, options, lines, icon) { + var streamType = stream.StreamType, + streamTypeLocalizationKey = + "EmbeddedImage" === streamType ? "Image" : streamType, + streamTypeLocalizationKey = + ("Lyrics" === stream.SubtitleType && + (streamTypeLocalizationKey = "Lyrics"), + _globalize.default.translate(streamTypeLocalizationKey)); + lines.push( + '

' + + (streamTypeLocalizationKey = icon + ? '' + + icon + + "" + + streamTypeLocalizationKey + : streamTypeLocalizationKey) + + "

", + ), + stream.DisplayTitle && + lines.push( + createAttribute( + _globalize.default.translate("Title"), + stream.DisplayTitle, + ), + ), + stream.Title && + stream.Title !== stream.DisplayTitle && + lines.push( + createAttribute( + _globalize.default.translate("HeaderEmbeddedTitle"), + stream.Title, + ), + ), + (stream.DisplayLanguage || stream.Language) && + "Video" !== streamType && + lines.push( + createAttribute( + _globalize.default.translate("Language"), + stream.DisplayLanguage || stream.Language, + ), + ), + stream.Codec && + lines.push( + createAttribute( + _globalize.default.translate("Codec"), + stream.Codec.toUpperCase(), + ), + ), + stream.CodecTag && + lines.push( + createAttribute( + _globalize.default.translate("HeaderCodecTag"), + stream.CodecTag, + ), + ), + stream.Profile && + lines.push( + createAttribute( + _globalize.default.translate("Profile"), + stream.Profile, + ), + ), + stream.Level && + lines.push( + createAttribute( + _globalize.default.translate("Level"), + stream.Level, + ), + ), + (stream.Width || stream.Height) && + lines.push( + createAttribute( + _globalize.default.translate("Resolution"), + stream.Width + "x" + stream.Height, + ), + ), + stream.AspectRatio && + "mjpeg" !== stream.Codec && + lines.push( + createAttribute( + _globalize.default.translate("HeaderAspectRatio"), + stream.AspectRatio, + ), + ), + "Video" === streamType && + lines.push( + createAttribute( + _globalize.default.translate("Interlaced"), + stream.IsInterlaced + ? _globalize.default.translate("Yes") + : _globalize.default.translate("No"), + ), + ), + (stream.AverageFrameRate || stream.RealFrameRate) && + lines.push( + createAttribute( + _globalize.default.translate("Framerate"), + _dataformatter.default.numberToString( + stream.AverageFrameRate || stream.RealFrameRate, + 3, + ), + ), + ), + stream.ChannelLayout && + lines.push( + createAttribute( + _globalize.default.translate("Layout"), + stream.ChannelLayout, + ), + ), + stream.Channels && + lines.push( + createAttribute( + _globalize.default.translate("Channels"), + stream.Channels + " ch", + ), + ), + stream.BitRate && + "mjpeg" !== stream.Codec && + lines.push( + createAttribute( + _globalize.default.translate("Bitrate"), + _dataformatter.default.bitrateToString(stream.BitRate), + ), + ), + stream.SampleRate && + lines.push( + createAttribute( + _globalize.default.translate("HeaderSampleRate"), + _dataformatter.default.numberToString(stream.SampleRate) + " Hz", + ), + ), + stream.VideoRange && + "SDR" !== stream.VideoRange && + lines.push( + createAttribute( + _globalize.default.translate("HeaderVideoRange"), + stream.VideoRange, + ), + ), + stream.ColorPrimaries && + lines.push( + createAttribute( + _globalize.default.translate("HeaderColorPrimaries"), + stream.ColorPrimaries, + ), + ), + stream.ColorSpace && + lines.push( + createAttribute( + _globalize.default.translate("HeaderColorSpace"), + stream.ColorSpace, + ), + ), + stream.ColorTransfer && + lines.push( + createAttribute( + _globalize.default.translate("HeaderColorTransfer"), + stream.ColorTransfer, + ), + ), + stream.BitDepth && + lines.push( + createAttribute( + _globalize.default.translate("HeaderBitDepth"), + stream.BitDepth + " bit", + ), + ), + stream.PixelFormat && + lines.push( + createAttribute( + _globalize.default.translate("HeaderPixelFormat"), + stream.PixelFormat, + ), + ), + stream.RefFrames && + lines.push( + createAttribute( + _globalize.default.translate("HeaderReferenceFrames"), + stream.RefFrames, + ), + ), + stream.Rotation && + lines.push( + createAttribute( + _globalize.default.translate("Rotation"), + stream.Rotation, + ), + ), + "Video" !== streamType && + lines.push( + createAttribute( + _globalize.default.translate("Default"), + stream.IsDefault + ? _globalize.default.translate("Yes") + : _globalize.default.translate("No"), + ), + ), + "Subtitle" === streamType && + ("Lyrics" !== stream.SubtitleType && + lines.push( + createAttribute( + _globalize.default.translate("Forced"), + stream.IsForced + ? _globalize.default.translate("Yes") + : _globalize.default.translate("No"), + ), + ), + lines.push( + createAttribute( + _globalize.default.translate("External"), + stream.IsExternal + ? _globalize.default.translate("Yes") + : _globalize.default.translate("No"), + ), + )), + stream.IsExternal && + stream.Path && + lines.push( + createAttribute( + _globalize.default.translate("File"), + (function (stream) { + return (stream = stream.Path.split("/").join("\\").split("\\"))[ + stream.length - 1 + ]; + })(stream), + ), + ); + }, + getCommunityRating: getStarIconsHtml, + getCriticRating: getCriticRating, + bitrateToString: _dataformatter.default.bitrateToString, + sizeToString: _dataformatter.default.sizeToString, + }; + _exports.default = _default; +});