EmbyCrackedClient/web/modules/listview/listview.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
40 KiB
JavaScript

import dom from"./../dom.js";import browser from"./../browser.js";import layoutManager from"./../layoutmanager.js";import globalize from"./../common/globalize.js";import datetime from"./../common/datetime.js";import textEncoding from"./../common/textencoding.js";import mediaInfo from"./../mediainfo/mediainfo.js";import indicators from"./../indicators/indicators.js";import focusManager from"./../focusmanager.js";import itemManager from"./../common/itemmanager/itemmanager.js";import connectionManager from"./../emby-apiclient/connectionmanager.js";import imageLoader from"./../common/imagehelper.js";import lazyImageLoader from"./../lazyloader/lazyimageloader.js";import itemShortcuts from"./../shortcuts.js";import playbackManager from"./../common/playback/playbackmanager.js";import EmbyRatingButton from"./../emby-elements/userdatabuttons/emby-ratingbutton.js";import EmbyPlaystateButton from"./../emby-elements/userdatabuttons/emby-playstatebutton.js";import dataFormatter from"./../common/dataformatter.js";import"./../emby-elements/emby-button/emby-button.js";require(["css!modules/listview/listview.css"]);let supportsNativeLazyLoading="loading"in HTMLImageElement.prototype,supportsAsyncDecodedImages=dom.supportsAsyncDecodedImages(),decodingAttribute=supportsAsyncDecodedImages?' decoding="async"':"",supportsObjectFit=CSS.supports("object-fit","contain")&&!browser.edge,enableFocusTransfrom=dom.allowFocusScaling(),supportsCssVariables=CSS.supports("color","var(--fake-var)"),secondaryTextClass=supportsCssVariables?"secondaryText":"",DownloadIcon="&#xe5db;",embyCheckboxLoaded;function loadEmbyCheckbox(){embyCheckboxLoaded||(embyCheckboxLoaded=!0,Emby.importModule("./modules/emby-elements/emby-checkbox/emby-checkbox.js"))}function getIndex(item,options){return"disc"!==options.index||null==(options=item.ParentIndexNumber)?"":globalize.translate("ValueDiscNumber",options)}function getTextLinesHtml(textlines,options){let html="",isFirst=!0,listItemBodyTextTagName=options.listItemBodyTextTagName;var cssClass=options.listItemBodyTextClass;for(let i=0,length=textlines.length;i<length;i++){var text=textlines[i];text&&(isFirst?(html+="<"+listItemBodyTextTagName+' class="'+cssClass+'">',isFirst=!1,listItemBodyTextTagName="div"):html+='<div class="'+cssClass+" "+options.listItemBodyTextSecondaryClass+'">',html=(html+=text)+("</"+listItemBodyTextTagName)+">")}return html}function getId(item){return item.Id}function getTextActionButton(options,item,text,serverId,parentId,isSameItemAsCard){if(text=text||itemManager.getDisplayName(item),layoutManager.tv)return textEncoding.htmlEncode(text);if(!1===options.textLinks)return textEncoding.htmlEncode(text);if(!item.Id&&!isSameItemAsCard)return textEncoding.htmlEncode(text);text=textEncoding.htmlEncode(text);let dataAttributes;dataAttributes=isSameItemAsCard?"":itemShortcuts.getShortcutAttributesHtml(item,{serverId:serverId,parentId:parentId});item=!options.draggable||isSameItemAsCard?"":' draggable="true"',serverId='<button title="'+text+'" title="'+text+'" '+dataAttributes+' type="button"'+item+' class="itemAction textActionButton listItem-textActionButton emby-button button-link" data-action="link">';return serverId+text+"</button>"}function isUsingLiveTvNaming(itemType){return"Program"===itemType||"Timer"===itemType||"Recording"===itemType}function getAirTimeText(item,showAirDateTime,showAirEndTime){let airTimeText="";if(item.StartDate)try{var date=new Date(Date.parse(item.StartDate));showAirDateTime&&(airTimeText+=datetime.toLocaleDateString(date,{weekday:"short",month:"short",day:"numeric"})+" "),airTimeText+=datetime.getDisplayTime(date),item.EndDate&&showAirEndTime&&(date=new Date(Date.parse(item.EndDate)),airTimeText+=" &ndash; "+datetime.getDisplayTime(date))}catch(e){console.log("Error parsing date: "+item.StartDate)}return airTimeText}function mapArtistsToTextButtons(item,artistItems,options){return artistItems.map(function(a){return a.Type="MusicArtist",a.IsFolder=!0,getTextActionButton(options,a,null,item.ServerId)}).join(", ")}function getMdIconClass(icon){switch(icon){case"&#xe88a;":case"&#xe034;":case"&#xe037;":case"&#xe042;":case"&#xe044;":case"&#xe045;":case"&#xe047;":case"&#xe061;":case"&#xe062;":return" md-icon-fill";case"&#xe8cd;":case"&#xec0b;":return" md-icon-pushdown-bubble";default:return""}}function getPlayAction(item,options){return item.IsFolder?"resume":"Photo"===item.MediaType?"playallfromhere":options.playAction}function getListItemHtml(item,index,options){var enableSideMediaInfo=options.enableSideMediaInfo,tagName=options.tagName,action=options.action;let html="";var downloadWidth=options.imageDownloadWidth,hoverPlayButtonRequested=!layoutManager.tv&&!1!==options.hoverPlayButton,enableHoverPlayButton=hoverPlayButtonRequested&&playbackManager.canPlay(item),itemType=item.Type,itemController=itemManager.getItemController(itemType),titleAttribute=options.tooltip?' title="'+textEncoding.htmlEncode(itemController.getDisplayName(item,{}))+'"':"",serverId=(html+="<div"+titleAttribute+' class="'+options.contentWrapperClass+'">',options.enableBottomOverview&&(html+='<div class="listItem-innerwrapper">'),item.ServerId),titleAttribute=serverId?connectionManager.getApiClient(serverId):null,fieldMap=(options.multiSelect&&(html+='<label title="'+options.multiSelectTitle+'" data-action="multiselect" class="chkListItemSelectContainer chkItemSelectContainer itemAction emby-checkbox-label"><input tabindex="-1" class="chkListItemSelect chkItemSelect emby-checkbox emby-checkbox-notext" is="emby-checkbox" type="checkbox" data-classes="true" /><span class="checkboxLabel chkListItemSelect-checkboxLabel"></span></label>'),options.fieldMap);if(fieldMap.ItemCheckbox){let checkbox=options.itemCheckbox,checked;(checked=options.getIsItemChecked?options.getIsItemChecked(item):item.Selected||!1===item.Disabled)&&(checkbox=checkbox.replace('type="checkbox"','type="checkbox" checked')),html+=checkbox}if(options.treeButton&&(item.IsFolder?html+=options.treeButtonHtml:html+=options.disabledTreeButtonHtml),!1!==options.image){let imageItem;imageItem=options.showCurrentProgramImage?item.CurrentProgram||item:item.ProgramInfo||item;var downloadWidth=imageLoader.getImageUrl(imageItem,titleAttribute,{width:downloadWidth,showChannelLogo:"channel"===options.imageSource,uiAspect:options.aspectInfo.aspect}),imgUrl=options.preferIcon?null:downloadWidth.imgUrl;let imageContainerClass=options.imageContainerClass,imageClass="listItemImage";options.imageSize&&(imageClass+=" listItemImage-"+options.imageSize),options.roundImage&&(imageClass+=" listItemImage-round",imgUrl||(imageContainerClass+=" listItemImageContainer-round"));var playOnImageClick=options.imagePlayButton&&!layoutManager.tv,imageAction=(options.playQueueIndicator&&item.PlaylistItemId&&(playbackManager.currentItem()||{}).PlaylistItemId===item.PlaylistItemId&&(imageContainerClass+=" playlistIndexIndicatorImage"),playOnImageClick?"resume":action),color=((imgUrl||options.preferIcon||!1===options.defaultBackground)&&!options.defaultBackground||(imageContainerClass+=" defaultCardBackground"),"Error"===item.Severity||"Fatal"===item.Severity||"Warn"===item.Severity?"background-color:#cc0000;color:#fff;":""),styleRules=[],color=(color&&styleRules.push(color),styleRules.push("aspect-ratio:"+options.aspectInfo.aspectCss),styleRules.length?' style="'+styleRules.join(";")+'"':""),styleRules=(html+='<div data-action="'+imageAction+'" class="'+imageContainerClass+'"'+color+">",indicators.getProgressBarHtml(item,{containerClass:"listItemProgressBar"}));if(imgUrl){var imageAction=downloadWidth.aspect?imageLoader.getShapeFromAspect(downloadWidth.aspect):imageLoader.getShape([item],options)||"square",color=imageLoader.getAspectFromShape(imageAction,options),imageAction=(imageClass+=" listItemImage-"+imageAction,imageLoader.getCoveredImageClass(imageItem,titleAttribute,downloadWidth,color.aspect));imageAction&&(imageClass+=imageAction);let isImg;2===options.lazy?supportsObjectFit?(html+='<img draggable="false" class="'+imageClass+'"'+decodingAttribute+' style="aspect-ratio:'+color.aspectCss+';" src="'+imgUrl+'" />',isImg=!0):html+='<div class="'+imageClass+'" style="aspect-ratio:'+color.aspectCss+";background-image:url("+imgUrl+');">':supportsNativeLazyLoading&&supportsObjectFit?(html+='<img draggable="false" class="'+imageClass+'" loading="lazy"'+decodingAttribute+' style="aspect-ratio:'+color.aspectCss+';" src="'+imgUrl+'" />',isImg=!0):html+='<div class="'+imageClass+' lazy" style="aspect-ratio:'+color.aspectCss+";background-image:url("+imgUrl+');">',styleRules&&(html+=styleRules),isImg||(html+="</div>")}else{let icon=item.Icon;if(icon=!icon&&options.enableDefaultIcon?itemController.getDefaultIcon(item):icon){let iconClass=options.iconClass;item.iconClass&&(iconClass+=" "+item.iconClass),iconClass+=getMdIconClass(icon),html+='<i class="'+iconClass+'">'+icon+"</i>"}styleRules&&(html+=styleRules)}options.iconSpacing||(downloadWidth=indicators.getPlayedIndicatorHtml(item,options.indicatorClass))&&(html+=downloadWidth),enableHoverPlayButton&&(imageAction=getPlayAction(item,options),html+='<button tabindex="-1" type="button" is="paper-icon-button-light" class="listItemOverlayButton-hover listItemOverlayButton-imagehover itemAction" data-action="'+imageAction+'"><i class="md-icon md-icon-fill listItemOverlayButtonIcon autortl">&#xe037;</i></button>'),playOnImageClick&&(html+='<button title="'+globalize.translate("Play")+'" aria-label="'+globalize.translate("Play")+'"type="button" is="paper-icon-button-light" class="listItemImageButton itemAction" data-action="resume"><i class="md-icon md-icon-fill listItemImageButton-icon autortl">&#xe037;</i></button>'),html+="</div>"}if(options.showIndexNumberLeft||options.showChapterTimeLeft){let indexNumberClass="listItem-indexnumberleft secondaryText";if(hoverPlayButtonRequested&&(indexNumberClass+=" listItem-indexnumberleft-withhoverbutton"),options.showChapterTimeLeft?(html+='<div class="'+indexNumberClass+'" style="width:9ch;">',null==item.StartPositionTicks?html+="&nbsp;":html+=datetime.getDisplayRunningTime(item.StartPositionTicks)):options.showIndexNumberLeft&&(html+='<div class="'+indexNumberClass+'">',null==item.IndexNumber?html+="&nbsp;":html+=item.IndexNumber),enableHoverPlayButton){let playButtonAction=getPlayAction(item,options);html+='<button tabindex="-1" type="button" is="paper-icon-button-light" class="listItemOverlayButton-hover itemAction" data-action="'+playButtonAction+'"><i class="md-icon md-icon-fill listItemOverlayButtonIcon autortl">&#xe037;</i></button>'}html+="</div>"}html+="<"+options.listItemBodyTagName+' class="'+options.listItemBodyClassName+'">';let listItemBodyTextTagName=options.listItemBodyTextTagName;var textCssClass=options.listItemBodyTextClass;let listItemBodyTextOpen="<"+listItemBodyTextTagName+' class="'+textCssClass+'">',listItemBodyTextClose="</"+listItemBodyTextTagName+">";var secondaryListItemBodyTextOpen='<div class="'+textCssClass+" "+options.listItemBodyTextSecondaryClass+'">',color=item.ProgramInfo||item;let fields;switch(itemType){case"MusicAlbum":case"Audio":case"MusicVideo":case"Game":fields=options.fieldsParentNameAfter||options.fields;break;default:fields=options.fields}let displayName=itemManager.getDisplayName(color,{includeParentInfo:options.includeParentInfoInTitle,includeIndexNumber:options.includeIndexNumberInTitle||(!item.SupportsResume||"Audio"!==item.Type)&&null});options.showIndexNumber&&null!=color.IndexNumber&&(displayName=color.IndexNumber+". "+displayName);for(let i=0,length=fields.length;i<length;i++){var mediaInfoHtml,mediaInfoClass,field=fields[i];switch(field){case"Name":options.mediaInfoWithTitle?((mediaInfoHtml=mediaInfo.getPrimaryMediaInfoHtml(item,{episodeTitle:!1,originalAirDate:!1,subtitles:!1,endsAt:!1}))?html=html+("<"+listItemBodyTextTagName+' class="listItemBodyText listItemBodyText-withmediainfo mediaInfoItems listItemBodyText-nowrap '+options.listItemBodyTextSecondaryClass)+' flex align-items-center flex-direction-row">'+mediaInfoHtml:html+=listItemBodyTextOpen,html=(html+=textEncoding.htmlEncode(displayName))+listItemBodyTextClose,listItemBodyTextTagName="div",listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>"):displayName&&(html+=listItemBodyTextOpen+textEncoding.htmlEncode(displayName)+listItemBodyTextClose,listItemBodyTextTagName="div",listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>");break;case"ParentNameOrName":"Episode"===itemType&&item.SeriesName?item.SeriesId?(html+=listItemBodyTextOpen+getTextActionButton(options,{Id:item.SeriesId,ServerId:serverId,Name:item.SeriesName,Type:"Series",IsFolder:!0})+listItemBodyTextClose,listItemBodyTextTagName="div",listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>"):item.SeriesName&&(html+=listItemBodyTextOpen+textEncoding.htmlEncode(item.SeriesName||"")+listItemBodyTextClose,listItemBodyTextTagName="div",listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>"):isUsingLiveTvNaming(itemType)?(html+=listItemBodyTextOpen+textEncoding.htmlEncode(item.Name||"")+listItemBodyTextClose,listItemBodyTextTagName="div",listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>"):(mediaInfoHtml=item.SeriesName||item.Series||item.Album||(item.AlbumArtist?item.AlbumArtist.Name||item.AlbumArtist:null)||item.GameSystem||"")&&(html+=listItemBodyTextOpen+textEncoding.htmlEncode(mediaInfoHtml||"")+listItemBodyTextClose,listItemBodyTextTagName="div",listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>");break;case"ParentName":let showArtist;var containerAlbumArtistIds=options.containerAlbumArtistIds,artistItems="MusicAlbum"===item.Type?item.AlbumArtists:item.ArtistItems;(!artistItems||!artistItems.length||1<artistItems.length||!containerAlbumArtistIds||1!==containerAlbumArtistIds.length||-1===containerAlbumArtistIds.indexOf(artistItems[0].Id))&&(showArtist=!0),item.AlbumArtists&&item.AlbumArtists.length&&"MusicAlbum"===itemType?html+=listItemBodyTextOpen+mapArtistsToTextButtons(item,artistItems,options)+listItemBodyTextClose:item.ArtistItems&&item.ArtistItems.length||item.AlbumArtists&&item.AlbumArtists.length?showArtist&&(html+=listItemBodyTextOpen+mapArtistsToTextButtons(item,artistItems,options)+listItemBodyTextClose):item.GameSystem&&item.GameSystemId?html+=listItemBodyTextOpen+getTextActionButton(options,{Id:item.GameSystemId,ServerId:serverId,Name:item.GameSystem,Type:"GameSystem",IsFolder:!0})+listItemBodyTextClose:html+=listItemBodyTextOpen+textEncoding.htmlEncode(isUsingLiveTvNaming(itemType)?item.Name:item.SeriesName||item.Series||item.Album||(item.AlbumArtist?item.AlbumArtist.Name||item.AlbumArtist:null)||item.GameSystem||"")+listItemBodyTextClose,listItemBodyTextTagName="div",listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"ItemCheckbox":case"ProductionYear":case"Overview":break;case"Type":html+=listItemBodyTextOpen+itemController.getItemTypeName(item.Type)+listItemBodyTextClose,listItemBodyTextTagName="div",listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"StartDateTime":html+=listItemBodyTextOpen+datetime.toLocaleString(new Date(Date.parse(item.StartDate)),{weekday:"long",month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})+listItemBodyTextClose,listItemBodyTextTagName="div",listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"StartToEndDateTime":html=(html=(html+='<div class="listItemBodyText-withspacing '+textCssClass+" "+options.listItemBodyTextSecondaryClass+'">'+datetime.toLocaleString(new Date(Date.parse(item.StartDate)),{weekday:"long",month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}))+(" &ndash; "+datetime.toLocaleString(new Date(Date.parse(item.EndDate)),{hour:"numeric",minute:"2-digit"})))+listItemBodyTextClose,listItemBodyTextTagName="div",listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"ChannelName":html=html+listItemBodyTextOpen+'<div class="flex align-items-center">';containerAlbumArtistIds=[];"TvChannel"===item.Type?containerAlbumArtistIds.push(item.Name):item.ChannelName?containerAlbumArtistIds.push(item.ChannelName):item.ProgramInfo&&item.ProgramInfo.ChannelName&&containerAlbumArtistIds.push(item.ProgramInfo.ChannelName),item.ChannelNumber?containerAlbumArtistIds.push(item.ChannelNumber):item.ProgramInfo&&item.ProgramInfo.ChannelNumber&&containerAlbumArtistIds.push(item.ProgramInfo.ChannelNumber),html+=textEncoding.htmlEncode(containerAlbumArtistIds.join(" "))+"</div>"+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"MappedChannelInfo":html+=listItemBodyTextOpen;let mappingInfo;item.ListingsChannelName&&(mappingInfo=item.ListingsChannelName,item.ListingsChannelNumber&&(mappingInfo=item.ListingsChannelNumber+" "+mappingInfo),item.AffiliateCallSign&&(mappingInfo+=" - "+item.AffiliateCallSign),(artistItems=item.ListingsId||item.ListingsPath)&&(mappingInfo+=" - "+textEncoding.htmlEncode(artistItems)),mappingInfo=globalize.translate("MappedToValue",mappingInfo)),html=(html+=mappingInfo||globalize.translate("NotMappedToGuideData"))+listItemBodyTextClose,listItemBodyTextTagName="div",listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"CurrentProgramParentName":item.CurrentProgram&&(html+=listItemBodyTextOpen+textEncoding.htmlEncode(item.CurrentProgram.Name||"")+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>");break;case"CurrentProgramName":item.CurrentProgram?.EpisodeTitle&&(html+=listItemBodyTextOpen+textEncoding.htmlEncode(itemManager.getDisplayName(item.CurrentProgram))+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>");break;case"CurrentProgramTime":item.CurrentProgram&&(html+=listItemBodyTextOpen+getAirTimeText(item.CurrentProgram,!1,!0)+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>");break;case"LogLine":html+=listItemBodyTextOpen+textEncoding.htmlEncode(item)+listItemBodyTextClose,listItemBodyTextTagName="div",listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"DeviceUserInfo":let deviceHtml="";item.LastUserName&&(item.LastUserId?deviceHtml+=getTextActionButton(options,{Id:item.LastUserId,Name:item.LastUserName,ServerId:serverId,Type:"User"},item.LastUserName+", "+dataFormatter.formatRelativeTime(item.DateLastActivity),null,null):item.LastUserName&&(deviceHtml+=item.LastUserName+", "+dataFormatter.formatRelativeTime(item.DateLastActivity))),html+=listItemBodyTextOpen+deviceHtml+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"ChannelNumber":item.ChannelNumber&&(html+=listItemBodyTextOpen+textEncoding.htmlEncode(item.ChannelNumber)+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>");break;case"ShortOverview":item.ShortOverview&&(html+=listItemBodyTextOpen+(item.ShortOverview?textEncoding.htmlEncode(item.ShortOverview):"&nbsp;")+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>");break;case"Date":html+=listItemBodyTextOpen+datetime.toLocaleString(new Date(Date.parse(item.Date)))+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"ChapterTime":html+=listItemBodyTextOpen+(null==item.StartPositionTicks?"":datetime.getDisplayRunningTime(item.StartPositionTicks))+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"PathOrTitle":html+=listItemBodyTextOpen+(item.Path||item.Title?textEncoding.htmlEncode(item.Path||item.Title):"&nbsp;")+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"Text":html+=listItemBodyTextOpen+(item.Text?textEncoding.htmlEncode(item.Text):"&nbsp;")+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"Path":html+=listItemBodyTextOpen+(item.Path?textEncoding.htmlEncode(item.Path):"&nbsp;")+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"ProviderName":html+=listItemBodyTextOpen+(item.ProviderName?textEncoding.htmlEncode(item.ProviderName):"&nbsp;")+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>";break;case"MediaInfo":{let mediaInfoHtml=mediaInfo.getPrimaryMediaInfoHtml(item,{episodeTitle:!1,subtitles:!1,endsAt:!1});mediaInfoHtml&&(mediaInfoClass="listItemMediaInfo mediaInfoItems listItemBodyText listItemBodyText-withmediainfo "+options.listItemBodyTextSecondaryClass+" listItemBodyText-nowrap",html+='<div class="'+mediaInfoClass+'">'+mediaInfoHtml+"</div>");break}default:let fieldValue=itemController.resolveField(item,field);null==fieldValue&&(fieldValue=""),html+=listItemBodyTextOpen+fieldValue+listItemBodyTextClose,listItemBodyTextOpen=secondaryListItemBodyTextOpen,listItemBodyTextClose="</div>"}}imgUrl=[];if(fieldMap.MediaStreamInfo&&mediaInfo.pushMediaStreamLines(item,options,imgUrl,itemController.getDefaultIcon(item)),html+=getTextLinesHtml(imgUrl,options),!1!==options.mediaInfo&&!enableSideMediaInfo){let mediaInfoClass="listItemMediaInfo mediaInfoItems listItemBodyText "+options.listItemBodyTextSecondaryClass+" listItemBodyText-nowrap";html+='<div class="'+mediaInfoClass+'">'+mediaInfo.getPrimaryMediaInfoHtml(item,{episodeTitle:!1,subtitles:!1,endsAt:!1})+"</div>"}if(fieldMap.Overview&&(html=(html+='<div class="'+options.topOverviewClassName+'">')+(item.Overview?dom.stripScripts(item.Overview):"")+"</div>"),html+="</"+options.listItemBodyTagName+">",item.SyncStatus){let syncIconClass="listItem-syncStatusIcon";layoutManager.tv||(syncIconClass+=" listItem-syncStatusIcon-smallfont"),html+='<div class="listItemMediaInfo mediaInfoItems secondaryText"><i class="md-icon '+syncIconClass+'">'+DownloadIcon+"</i></div>"}if(!1!==options.mediaInfo&&enableSideMediaInfo){styleRules=mediaInfo.getPrimaryMediaInfoHtml(item,{year:!1,container:!1,episodeTitle:!1,criticRating:!1,endsAt:!1});if(styleRules){let mediaInfoClass="listItemMediaInfo mediaInfoItems secondaryText";!1!==options.autoHideMediaInfo&&(mediaInfoClass+=" listItemMediaInfo-autohide"),html+='<div class="'+mediaInfoClass+'">'+styleRules+"</div>"}}if(options.recordButton||"Timer"!==itemType&&"Program"!==itemType||(html+=indicators.getTimerIndicator(item).replace("indicatorIcon","indicatorIcon listItemAside")),item.asideText&&(html=(html+='<div class="listItemAside '+(options.asideTextClass||"")+' secondaryText">')+item.asideText+"</div>"),item.asideIcon&&(html=(html+='<div class="listItemAside listItemAsideContainer '+(options.asideIconClass||"")+' secondaryText"><i class="listItemAsideIcon md-icon autortl">')+item.asideIcon+"</i></div>"),options.clickEntireItem)options.itemAccessSelection&&(html+='<div style="padding-inline-end:.5em;">',"Write"===item.UserItemShareLevel?html+=globalize.translate("Edit"):"Read"===item.UserItemShareLevel?html+=globalize.translate("View"):html+=globalize.translate("None"),html=(html+="</div>")+getItemAccessSelectContainer(item,!0));else{if(options.allowButtonCommands){if(options.contextMenu&&options.moreButton&&itemController.supportsContextMenu(item)){let contextMenuButtonClass="listItemContextMenuButton";options.hideMoreButtonOnTouch&&(contextMenuButtonClass+=" listItemContextMenuButton-autohide"),html+='<button title="'+globalize.translate("More")+'" aria-label="'+globalize.translate("More")+'" type="button" is="paper-icon-button-light" class="listItemButton '+contextMenuButtonClass+' itemAction md-icon" data-action="menu">&#xe5D3;</button>'}if(options.overviewButton&&item.Overview&&(html+='<button title="'+globalize.translate("Overview")+'" aria-label="'+globalize.translate("Overview")+'" type="button" is="paper-icon-button-light" class="listItemButton itemAction md-icon" data-action="overview">&#xe88F;</button>'),options.enableUserDataButtons&&(downloadWidth=item.UserData||{},itemController.canMarkPlayed(item)&&(html+=EmbyPlaystateButton.getHtml(downloadWidth.Played,"listViewUserDataButton listItemButton paper-icon-button-light itemAction")),itemController.canRate(item))&&(html+=EmbyRatingButton.getHtml(downloadWidth.IsFavorite,"listViewUserDataButton listItemButton paper-icon-button-light itemAction")),options.buttonCommands?.length){let commands=itemController.getCommands({items:[item],user:titleAttribute?.getCurrentUserCached()});for(let i=0,length=(commands=commands.filter(function(c){return options.buttonCommands.includes(c.id)})).length;i<length;i++){var cmd=commands[i];html+='<button title="'+cmd.name+'" aria-label="'+cmd.name+'" type="button" is="paper-icon-button-light" class="listItemButton itemAction md-icon'+getMdIconClass(cmd.icon)+'" data-action="'+cmd.id+'">'+cmd.icon+"</button>"}}options.dragReorder&&!1!==item.CanReorder&&(html+='<i class="'+options.dragHandleClass+'">&#xe25D;</i>')}options.itemAccessSelection&&(html+=getItemAccessSelectContainer(item))}if(options.enableBottomOverview&&(html=(html=(html+="</div>")+'<div class="'+options.bottomOverviewClassName+'">')+(item.Overview?dom.stripScripts(item.Overview):"")+"</div>"),html+="</div>",options.listItemParts)return imageAction=itemShortcuts.getShortcutAttributes(item,options),action&&imageAction.push({name:"data-action",value:action}),options.isVirtualList||imageAction.push({name:"data-index",value:index}),{attributes:imageAction,html:html};let dataAttributes=itemShortcuts.getShortcutAttributesHtml(item,options);action&&(dataAttributes+=' data-action="'+action+'"'),options.isVirtualList||(dataAttributes+=' data-index="'+index+'"');playOnImageClick=options.fixedAttributes;playOnImageClick&&(dataAttributes+=" "+playOnImageClick);let className=options.className;return item.ItemClass&&(className+=" "+item.ItemClass),"<"+tagName+' class="'+className+'"'+dataAttributes+">"+html+"</"+tagName+">"}function getItemAccessSelectContainer(item,hide){let html="";return html=(html+='<div class="selectContainer selectContainer-inline'+(hide?" hide":"")+'">')+('<select data-hidelabeltext="true" is="emby-select" class="emby-select-inline selectItemShareLevel" label="'+globalize.translate("Access")+'" title="'+globalize.translate("Access")+'">'),item.itemAccessItem.CanMakePublic&&(html+='<option value="None">'+globalize.translate("None")+"</option>"),html=(html=(html+='<option value="Read"'+("Read"===item.UserItemShareLevel?" selected":"")+">"+globalize.translate("View")+"</option>")+('<option value="Write"'+("Write"===item.UserItemShareLevel?" selected":"")+">"+globalize.translate("Edit")+"</option>"))+"</select>"+"</div>"}function getItemParts(item,index,options){return options.listItemParts=!0,getListItemHtml(item,index,options)}function setListOptions(items,options){null==options.iconSpacing&&(options.preferIcon||options.code||!1!==options.image&&options.roundImage)&&(options.iconSpacing=!0),null==options.isBoundListItem&&(options.isBoundListItem=!0),options.itemSelector=".listItem",options.enableDefaultIcon=!1!==options.enableDefaultIcon;var nameIndex,contentWrapperClass=((options.contentWrapperClass||"")+" listItem-content").trim(),fieldMap=(options.contentWrapperClass=contentWrapperClass,options.containerAlbumArtistIds=(options.containerAlbumArtists||[]).map(getId),options.contextMenu=!1!==options.contextMenu,options.enableUserDataButtons=!1!==options.enableUserDataButtons,options.moreButton=options.contextMenu&&!1!==options.moreButton,options.fields||(options.fields=[],options.fields.push("Name")),options.fields=Array.from(new Set(options.fields)),options.autoMoveParentName&&(options.fieldsParentNameAfter=options.fields.slice(0),contentWrapperClass=options.fieldsParentNameAfter.indexOf("ParentName"),nameIndex=options.fieldsParentNameAfter.indexOf("Name"),-1!==contentWrapperClass&&-1!==nameIndex&&contentWrapperClass<nameIndex&&(options.fieldsParentNameAfter.splice(contentWrapperClass,1),options.fieldsParentNameAfter.splice(nameIndex,0,"ParentName")),-1!==contentWrapperClass)&&-1!==nameIndex&&nameIndex<contentWrapperClass&&(options.fields.splice(contentWrapperClass,1),options.fields.splice(Math.max(nameIndex-1,0),0,"ParentName")),{});for(let i=0,length=options.fields.length;i<length;i++)fieldMap[options.fields[i]]=!0;options.fieldMap=fieldMap;let isLargeStyle,textCssClass=(options.mediaInfo=!1!==options.mediaInfo,options.shape=!options.preferIcon&&imageLoader.getShape(items,options)||"square","banner"===options.shape&&(options.shape="backdrop"),"large"===options.imageSize?(options.contentWrapperClass+=" listItem-content-fb",options.imageDownloadWidth=400,isLargeStyle=!0,options.enableSideMediaInfo=!1,options.iconSpacing||!1===options.itemMarginY||(options.contentWrapperClass+=" listItem-content-marginx3")):"medium"===options.imageSize?(options.contentWrapperClass+=" listItem-content-fb",options.imageDownloadWidth=200,options.enableSideMediaInfo=!1,options.iconSpacing||!1===options.itemMarginY||(options.contentWrapperClass+=" listItem-content-marginx2")):(options.iconSpacing||!1===options.itemMarginY||("small"===options.imageSize?options.contentWrapperClass+=" listItem-content-marginx2":options.contentWrapperClass+=" listItem-content-margin"),options.contentWrapperClass+=" listItem-content-bg",options.itemBackground&&(options.contentWrapperClass+=" listItem-content-bg-background"),options.imageDownloadWidth=80,options.enableSideMediaInfo=null!=options.enableSideMediaInfo?options.enableSideMediaInfo:"square"===options.shape),layoutManager.tv?(options.draggable=!1,options.dragReorder=!1,options.draggableXActions=!1,options.anyDraggable=!1):(options.draggable=!1!==options.draggable,options.draggableXActions=!1!==options.draggableXActions&&!0!==options.verticalWrap,options.anyDraggable=options.draggable||options.draggableXActions),options.allowButtonCommands=!layoutManager.tv,options.clickEntireItem=layoutManager.tv?!fieldMap.ItemCheckbox:!(options.mediaInfo||options.moreButton||options.enableUserDataButtons||options.itemAccessSelection||options.enableSideMediaInfo||options.imagePlayButton||fieldMap.ItemCheckbox||options.treeButton||options.draggableXActions||options.buttonCommands?.length),layoutManager.tv&&(options.imageDownloadWidth*=1.5),options.isLargeStyle=isLargeStyle,options.action=options.action||"link",options.playAction||(options.playAction="playallfromhere"===options.action?"playallfromhere":"play"),options.tagName=options.clickEntireItem?"button":"div",options.listItemBodyTagName="div",options.multiSelectTitle=globalize.translate("MultiSelect"),options.multiSelect=!1!==options.multiSelect&&!layoutManager.tv,(options.multiSelect||fieldMap.ItemCheckbox)&&loadEmbyCheckbox(),options.enableUserData=!1!==options.enableUserData,options.largeFont=!layoutManager.tv&&!1!==options.largeFont,options.listItemBodyTextTagName="large"===options.imageSize||options.largeHeading?"h3":"div",("listItemBodyText "+(options.listItemBodyTextClass||"")).trim()),cssClass=((options.isVirtualList||options.noTextWrap)&&(textCssClass+=" listItemBodyText-nowrap"),options.largeFont&&(textCssClass+=" listItemBodyText-lf"),options.listItemBodyTextClass=textCssClass,isLargeStyle?options.indicatorClass="listItemIndicator listItem":options.indicatorClass="listItemIndicator listItemIndicator-mini listItem",options.listItemBodyTextSecondaryClass="listItemBodyText-secondary "+secondaryTextClass,"large"!==options.imageSize&&"medium"!==options.imageSize||(options.listItemBodyTextSecondaryClass+=" listItemBodyText-secondary-of"),"listItem");layoutManager.tv||(options.contentWrapperClass+=" listItemContent-touchzoom",browser.iOS)||browser.osx||(cssClass+=" listItem-autoactive"),options.verticalWrap&&(cssClass+=" listItem-vertical-wrap");contentWrapperClass=!1!==options.image;(options.border||!1!==options.highlight&&(!layoutManager.tv||options.forceBorder))&&(options.contentWrapperClass+=" listItem-border",contentWrapperClass&&!1!==options.allowBorderXOffset&&(options.contentWrapperClass+=" listItem-border-offset"),options.autoHideBorderOnTouch)&&(options.contentWrapperClass+=" listItem-border-autohide"),(options.clickEntireItem||options.action&&"none"!==options.action)&&(cssClass+=" itemAction"),"div"===options.tagName?options.addTabIndex=!0:"button"===options.tagName&&(cssClass+=" listItem-button"),"none"===options.action&&!options.clickEntireItem||(cssClass+=" listItemCursor"),options.enableFocusScaling=layoutManager.tv&&!1!==options.enableFocusScaling&&enableFocusTransfrom,layoutManager.tv?(options.enableFocusScaling&&(cssClass+=" listItem-focusscale"),options.expandOutOnFocus&&(cssClass+=" listItem-expandout"),cssClass+=" listItem-tv"):cssClass+=" listItem-hoverable",isLargeStyle&&(cssClass+=" listItem-largeImage"),!1===options.verticalPadding&&(cssClass+=" listItem-noverticalpadding"),options.itemClass&&(cssClass+=" "+options.itemClass),options.contextMenu&&options.clickEntireItem&&(cssClass+=" longpress"),options.dragReorder&&options.draggable?cssClass+=" drop-target ordered-drop-target-y":options.dropTarget&&!layoutManager.tv&&(cssClass+=" drop-target full-drop-target"),options.draggableXActions&&(cssClass+=" draggable-x",options.draggable)&&(cssClass+=" draggable-xy"),options.dragHandleClass=("listViewDragHandle dragHandle md-icon listItemIcon listItemIcon-transparent "+(options.dragHandleClass||"")).trim(),options.className=cssClass;let innerHTML="";if(options.shape&&!1!==options.allowBorderXOffset&&(options.contentWrapperClass+=" listItem-border-offset-"+options.shape,options.imageSize)&&(options.contentWrapperClass+=" listItem-border-offset-"+options.imageSize,options.contentWrapperClass+=" listItem-border-offset-"+options.shape+"-"+options.imageSize),!1!==options.image?(options.aspectInfo=imageLoader.getAspectFromShape(options.shape,options),fieldMap.Overview&&"portrait"!==options.shape&&(options.enableBottomOverview=!1!==options.enableBottomOverview)):fieldMap.Overview&&(options.enableBottomOverview=!1!==options.enableBottomOverview),layoutManager.tv&&(options.enableBottomOverview=!1),options.enableBottomOverview&&(options.contentWrapperClass+=" listItem-content-withwrap"),innerHTML+='<div class="'+options.contentWrapperClass+'">',options.enableBottomOverview&&(innerHTML+='<div class="listItem-innerwrapper">'),fieldMap.ItemCheckbox){let itemCheckboxLabelClass="listItem-checkboxLabel";options.roundCheckbox&&(itemCheckboxLabelClass+=" listItem-checkboxLabel-round"),options.itemCheckbox='<label data-action="toggleitemchecked" class="itemAction listItem-emby-checkbox-label emby-checkbox-label secondaryText"><input tabindex="-1" class="chkItemCheckbox emby-checkbox emby-checkbox-notext" is="emby-checkbox" type="checkbox" /><span class="checkboxLabel '+itemCheckboxLabelClass+'"></span></label>',innerHTML+=options.itemCheckbox}if(options.treeButton&&(options.disabledTreeButtonHtml='<button disabled style="visibility:hidden;" is="paper-icon-button-light" type="button" data-action="toggletreenode" class="secondaryText itemAction md-icon autortl paper-icon-button-light '+(options.treeButtonClass||"")+'">&#xe5cc;</button>',options.treeButtonHtml='<button is="paper-icon-button-light" type="button" data-action="toggletreenode" class="secondaryText itemAction md-icon autortl paper-icon-button-light '+(options.treeButtonClass||"")+'">&#xe5cc;</button>',innerHTML+=options.treeButtonHtml),!1!==options.image){let imageContainerClass=((options.imageContainerClass||"")+" listItemImageContainer").trim();options.imageSize&&(imageContainerClass+=" listItemImageContainer-"+options.imageSize,layoutManager.tv)&&(imageContainerClass+=" listItemImageContainer-"+options.imageSize+"-tv"),options.clickEntireItem||(imageContainerClass+=" itemAction"),options.iconSpacing&&(imageContainerClass+=" listItemImageContainer-margin"),imageContainerClass+=" listItemImageContainer-"+options.shape,options.imageContainerClass=imageContainerClass,innerHTML+='<div class="'+imageContainerClass+'"></div>'}let listItemBodyClassName=((options.listItemBodyClassName||"")+" listItemBody").trim();options.clickEntireItem||(listItemBodyClassName+=" itemAction"),contentWrapperClass||(listItemBodyClassName+=" listItemBody-noleftpadding"),!1===options.verticalPadding&&(listItemBodyClassName+=" listItemBody-noverticalpadding"),options.code&&(listItemBodyClassName+=" listItemBody-code"),options.dragReorder&&(listItemBodyClassName+=" listItemBody-draghandle"),options.iconSpacing||(listItemBodyClassName+=" listItemBody-reduceypadding");options.iconClass?options.iconClass+=" listItemIcon md-icon autortl":options.iconClass="listItemIcon md-icon autortl";var textlines=[];for(let i=0,length=options.fields.length;i<length;i++)switch(options.fields[i]){case"ItemCheckbox":case"ProductionYear":break;default:textlines.push("&nbsp;")}fieldMap.Overview&&(options.isLargeStyle?options.overviewLines=options.overviewLines||3:options.overviewLines=options.overviewLines||2,options.overviewClass="listItem-overview-"+options.overviewLines+"-lines");let lineCount=textlines.length,fixedAttributes=(fieldMap.Overview&&(lineCount+=options.overviewLines-1),options.mediaInfo&&!options.enableSideMediaInfo&&lineCount++,listItemBodyClassName+=" listItemBody-"+lineCount+"-lines",options.listItemBodyClassName=listItemBodyClassName,innerHTML=(innerHTML+="<"+options.listItemBodyTagName+' class="'+options.listItemBodyClassName+'">')+getTextLinesHtml(textlines,options),fieldMap.Overview&&(options.mediaInfo&&!options.enableSideMediaInfo&&(innerHTML+='<div class="listItemMediaInfo listItemBodyText '+options.listItemBodyTextSecondaryClass+' listItemBodyText-nowrap"></div>'),options.topOverviewClassName="listItem-overview listItem-topoverview listItemBodyText "+options.listItemBodyTextSecondaryClass,options.enableBottomOverview&&(options.topOverviewClassName+=" listItem-overview-autohide"),options.topOverviewClassName+=" "+options.overviewClass,innerHTML+='<div class="'+options.topOverviewClassName+'"></div>'),innerHTML+="</"+options.listItemBodyTagName+">",options.dragReorder&&(innerHTML+='<i class="'+options.dragHandleClass+'" style="visibility:hidden;">&#xe25D;</i>'),options.enableBottomOverview&&(innerHTML+="</div>",options.bottomOverviewClassName="listItem-bottomoverview secondaryText",options.bottomOverviewClassName+=" "+options.overviewClass,innerHTML+='<div class="'+options.bottomOverviewClassName+'">&nbsp;</div>'),innerHTML+="</div>","");options.addTabIndex&&(fixedAttributes+=' tabindex="0"'),options.anyDraggable&&(fixedAttributes+=' draggable="true"'),"button"===options.tagName&&(fixedAttributes+=' type="button"'),options.fixedAttributes=fixedAttributes.trim(),options.templateInnerHTML=innerHTML}function getItemsHtml(items,options){setListOptions(items,options);let groupTitle="",html="";for(let i=0,length=items.length;i<length;i++){var itemGroupTitle,item=items[i];options.showIndex&&(itemGroupTitle=getIndex(item,options))!==groupTitle&&(0===i?html+='<h2 class="listGroupHeader listGroupHeader-first">':html+='<h2 class="listGroupHeader">',html=html+itemGroupTitle+"</h2>",groupTitle=itemGroupTitle),html+=getListItemHtml(item,i,options)}return html}function buildItems(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=getItemsHtml(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&&lazyImageLoader.lazyChildren(itemsContainer),options.autoFocus&&focusManager.autoFocus(itemsContainer)}}function setListClasses(elem){elem=elem.classList;elem.remove("vertical-wrap"),elem.add("vertical-list")}export default{getItemsHtml:getItemsHtml,setListOptions:setListOptions,getItemParts:getItemParts,buildItems:buildItems,virtualChunkSize:30,setListClasses:setListClasses};