1 line
No EOL
31 KiB
JavaScript
1 line
No EOL
31 KiB
JavaScript
import browser from"./../../browser.js";import dom from"./../../dom.js";import layoutManager from"./../../layoutmanager.js";import connectionManager from"./../../emby-apiclient/connectionmanager.js";import lazyImageLoader from"./../../lazyloader/lazyimageloader.js";import VirtualScroller from"./../../virtual-scroller/virtual-scroller.js";import itemShortcuts from"./../../shortcuts.js";import inputManager from"./../../common/inputmanager.js";import focusManager from"./../../focusmanager.js";import ItemsRefresher from"./../../common/itemsrefresher.js";import itemManager from"./../../common/itemmanager/itemmanager.js";import commandProcessor from"./../../commandprocessor.js";import formHelper from"./../../common/responsehelper.js";import"./../../customelementupgrade.js";function loadMultiSelect(){return Emby.importModule("./modules/multiselect/multiselect.js")}require(["css!modules/emby-elements/emby-itemscontainer/emby-itemscontainer.css"]);let RequiresDragEventsPolyfill=!0,dragEventsPolyfillLoaded,MultiSelect,nativeContextMenuEventSupported,morphdom,headerElement=document.querySelector(".skinHeader"),appFooter;function onClick(e){var multiSelect=this.multiSelect;multiSelect&&!1===multiSelect.onContainerClick.call(this,e)||itemShortcuts.onClick.call(this,e)}function onChange(e){itemShortcuts.onClick.call(this,e)}function onContextMenu(e){!this._touchEventsBound||(detail=e.detail)&&detail.customEvent||(this._touchEventsBound=null,nativeContextMenuEventSupported=!0,dom.removeEventListener(this,"touchstart",onTouchStart,{passive:!0}),dom.removeEventListener(this,"touchend",onTouchEnd,{}),dom.removeEventListener(this,"touchcancel",onTouchEnd,{}),dom.removeEventListener(this,"touchmove",onTouchMove,{passive:!0}));var detail=e.target,itemElement=this.getContextMenuElementFromChildNode(detail);if(itemElement)if(detail.closest(".dragHandle"))e.preventDefault();else if(!this.classList.contains("multi-select-active")&&(tryVibrate(),inputManager.trigger("menu",{sourceElement:itemElement,originalEvent:e})))return e.preventDefault(),!1}function getShortcutOptions(){return{click:!1}}function onInit(){this.hasInit||(this.hasInit=!0,this.classList.add("itemsContainer"),this.refreshMonitor)||(this.refreshMonitor=new ItemsRefresher({itemIds:[],itemsContainer:this}))}function getTouches(e){return e.changedTouches||e.targetTouches||e.touches}function clearTouchStartTimeout(elem){elem.touchStartTimeout&&(clearTimeout(elem.touchStartTimeout),elem.touchStartTimeout=null,elem.touchStartTimeoutTime=null)}let touchTarget;function clearTouchTarget(container){var target=touchTarget;target&&(touchTarget=null,target.classList.remove("itemElement-activetouch"),dom.removeEventListener(container,"touchmove",onTouchMove,{passive:!0}))}function onTouchStart(e){var e=getTouches(e)[0];clearTouchTarget(this),this.touchStartX=0,this.touchStartY=0,e&&(this.touchStartX=e.clientX,this.touchStartY=e.clientY,e=e.target)&&(e=e.closest(this.getItemSelector()))&&(clearTouchStartTimeout(this),dom.addEventListener(this,"touchmove",onTouchMove,{passive:!0}),(touchTarget=e).classList.add("itemElement-activetouch"),this.touchStartTimeout=setTimeout(onTouchStartTimerFired,650),this.touchStartTimeoutTime=Date.now())}function onTouchMove(e){if(touchTarget){var touchEndX,e=getTouches(e)[0];let deltaX,deltaY;deltaY=e?(touchEndX=e.clientX||0,e=e.clientY||0,deltaX=Math.abs(touchEndX-(this.touchStartX||0)),Math.abs(e-(this.touchStartY||0))):deltaX=100,(5<=deltaX||5<=deltaY)&&(clearTouchStartTimeout(this),clearTouchTarget(this))}}function onTouchEnd(e){var time;getTouches(e)[0]&&(time=this.touchStartTimeoutTime)&&600<=(time=Date.now()-time)&&e.preventDefault(),clearTouchStartTimeout(this),clearTouchTarget(this)}function onTouchStartTimerFired(){var itemElement=touchTarget;itemElement&&(focusManager.focus(itemElement,{preventScroll:!0}),itemElement.dispatchEvent(new CustomEvent("contextmenu",{bubbles:!0,cancelable:!0,detail:{customEvent:!0}})))}function bindContextMenuEvents(element){element._contextMenuEventsBound||(element._contextMenuEventsBound=!0,element.addEventListener("contextmenu",onContextMenu,!0),layoutManager.tv)||nativeContextMenuEventSupported||(browser.iOS||browser.osx)&&(element._touchEventsBound=!0,dom.addEventListener(element,"touchstart",onTouchStart,{passive:!0}),dom.addEventListener(element,"touchend",onTouchEnd,{}),dom.addEventListener(element,"touchcancel",onTouchEnd,{}))}function addToList(apiClient,list,ids){return itemManager.addToListHelper(list,ids)}function onDroppedOntoFullTarget(itemsContainer,draggedElement,dropTarget,items){dropTarget=itemShortcuts.getItemFromChildNode(dropTarget,null,itemsContainer),itemsContainer=dropTarget.Type;dropTarget.Id&&dropTarget.ServerId&&("Playlist"===itemsContainer||"BoxSet"===itemsContainer)&&addToList(connectionManager.getApiClient(dropTarget),dropTarget,items.map(function(i){return i.Id})).catch(formHelper.handleErrorResponse)}function onReorderedTo(itemsContainer,items,draggedElement,currentIndex,dropTarget,directionUp){let newIndex;draggedElement.classList.contains("virtualScrollItem")?(newIndex=itemsContainer.indexOfElement(dropTarget),directionUp||newIndex++,newIndex>currentIndex&&newIndex--):(itemsContainer.insertBefore(draggedElement,directionUp?dropTarget:dropTarget.nextSibling),newIndex=Array.prototype.indexOf.call(itemsContainer.children,draggedElement)),newIndex!==currentIndex&&(directionUp={newIndex:newIndex,items:items},draggedElement.dispatchEvent(new CustomEvent("itemdrop",{detail:directionUp,bubbles:!0,cancelable:!0})))&&commandProcessor.executeCommand("moveinorder",items,{newIndex:newIndex,itemsContainer:itemsContainer})}function onDroppedForReorderingHorizontally(e,itemsContainer,items,draggedElement,draggedElementIndex,dropTarget){var rect=dropTarget.getBoundingClientRect(),rect=rect.x+rect.width/2;let directionLeft;onReorderedTo(itemsContainer,items,draggedElement,draggedElementIndex,dropTarget,directionLeft=e.clientX<=rect?!0:directionLeft)}function onDroppedForReorderingVertically(e,itemsContainer,items,draggedElement,draggedElementIndex,dropTarget){var rect=dropTarget.getBoundingClientRect(),rect=rect.y+rect.height/2;let directionUp;onReorderedTo(itemsContainer,items,draggedElement,draggedElementIndex,dropTarget,directionUp=e.clientY<=rect?!0:directionUp)}function abortRequests(instance){var currentAbortController=instance.currentAbortController;currentAbortController&&(currentAbortController.abort(),instance.currentAbortController=null)}function onGetItemsFailed(result){if(!this.onGetItemsFailed)throw result;this.onGetItemsFailed(result)}function getDelayedResolvedPromise(delay){return new Promise(function(resolve,reject){setTimeout(resolve,delay)})}function getVirtualChunkSize(elem,listOptions){var size=elem.virtualChunkSize;return size||((size=(listOptions=!listOptions&&elem.getListOptions?elem.getListOptions([]):listOptions)?listOptions.virtualScrollLayout:elem.getAttribute("data-virtualscrolllayout"))?(elem=dom.getWindowSize(),size.includes("horizontal")?2200<=elem.innerWidth?16:12:(listOptions?listOptions.renderer:null)?.virtualChunkSize||30):null)}function setVirtualScrollerClasses(instance,renderer){instance.virtualScroller&&instance.virtualScroller.classList.add("virtual-scroller-overflowvisible")}function onDataFetchedInitial(result){let onDataFetchedPromise;return(onDataFetchedPromise=(onDataFetchedPromise=this.onDataFetched?this.onDataFetched(result):onDataFetchedPromise)||Promise.resolve(result)).then(this.bound_onDataFetched)}function onDataFetched(result){var items=result.Items||result,parentContainer=(null!=result.TotalRecordCount&&this.maxTotalRecordCount&&(result.TotalRecordCount=Math.min(result.TotalRecordCount,this.maxTotalRecordCount)),this.parentContainer),parentContainer=(parentContainer&&(items.length?(parentContainer.classList.remove("hide"),this.parentContainerHadFocusable&&parentContainer.classList.add("focusable")):(parentContainer.classList.add("hide"),this.parentContainerHadFocusable=parentContainer.classList.contains("focusable"),parentContainer.classList.remove("focusable"))),document.activeElement);let focusId,focusIndex,hasActiveElement,scrollPosition,delay=(this.contains(parentContainer)&&(hasActiveElement=!0,focusIndexElement=itemShortcuts.getItemElementFromChildNode(parentContainer,!0,this),focusIndex=focusIndexElement?this.indexOfElement(focusIndexElement):null,focusId=(focusId=null!=focusIndex&&(focusIndexElement=this.getItem(focusIndex))?focusIndexElement.Id:focusId)||parentContainer.getAttribute("data-id"),layoutManager.tv||(focusIndexElement=this.virtualScroller?this.closest(".emby-scroller"):null)&&(scrollPosition=focusIndexElement.getScrollPosition())),0);parentContainer=this.getListOptions?this.getListOptions(items):null;let listItemOptions=parentContainer?parentContainer.options:null;parentContainer.renderer.setListClasses(this,parentContainer||{});var focusIndexElement=[];if(focusIndexElement.length=result.TotalRecordCount||items.length,this.itemParts=focusIndexElement,listItemOptions.fields?.includes("ItemCheckbox")&&!this._onChangeListenerBound&&(this._onChangeListenerBound=!0,this.addEventListener("change",onChange)),parentContainer.renderer.setUserPreferredSize&&this.hasAttribute("data-cardsizeoffset")&&parentContainer.renderer.setUserPreferredSize(this),parentContainer?.options?.horizontalGrid&&this.classList.add("itemsContainer-horizontalgrid"),this.hasAttribute("data-virtualscrolllayout")){(this._hasOtherInnerHtml||this.items&&!this.virtualScroller)&&(this.innerHTML="",this._hasOtherInnerHtml=null),this.classList.add("virtualItemsContainer"),parentContainer&&(parentContainer.virtualScrollLayout||(parentContainer.virtualScrollLayout=this.getAttribute("data-virtualscrolllayout")),parentContainer.virtualScrollLayout.includes("horizontal")&&(parentContainer.options.horizontal=!0),parentContainer.options.isVirtualList=!0,parentContainer.options.lazy||(parentContainer.options.lazy=2),parentContainer.renderer.setListOptions(items,parentContainer.options));let virtualScroller=this.virtualScroller;focusIndexElement=null==virtualScroller;this.currentListOptions=parentContainer,virtualScroller&&virtualScroller.templateInnerHTML===parentContainer.options.templateInnerHTML||(this.setAttribute("data-minoverhang",parentContainer.minOverhang||1),this.setAttribute("layout",parentContainer.virtualScrollLayout),(virtualScroller=this).virtualChunkSize=getVirtualChunkSize(this,parentContainer),virtualScroller.templateInnerHTML=listItemOptions.templateInnerHTML,virtualScroller.templateHTML="<"+listItemOptions.tagName+' class="virtualScrollItem '+listItemOptions.className+'" '+listItemOptions.fixedAttributes+">"+listItemOptions.templateInnerHTML+"</"+listItemOptions.tagName+">",virtualScroller.fetchItems=this.fetchData.bind(this),this.virtualScroller=virtualScroller,setVirtualScrollerClasses(this,parentContainer.renderer),virtualScroller.updateElement=this.updateVirtualElement.bind(this),virtualScroller.onRecycleElement=this.onRecycleElement,virtualScroller.addClasses(),focusIndexElement)||virtualScroller.resetAll(),this.items=null,this.onRefreshing&&this.onRefreshing(result),virtualScroller.setItemSource(items,result.TotalRecordCount),delay=50}else this._hasOtherInnerHtml=null,this.classList.remove("virtualItemsContainer"),this.currentListOptions=parentContainer,this.onRefreshing&&this.onRefreshing(result),parentContainer?(parentContainer.options.horizontalGrid||(parentContainer.options.horizontal=null),"number"==typeof parentContainer.options.rowCount&&this.classList.add("itemRows"+parentContainer.options.rowCount),parentContainer.options.isVirtualList=null,this.innerHTML=parentContainer.renderer.getItemsHtml(items,parentContainer.options)):this.innerHTML=this.getItemsHtml(items),this.virtualScroller&&this.virtualScroller.disconnectedCallback(),this.virtualScroller=null,this.items=items,listItemOptions&&!1===listItemOptions.image||lazyImageLoader.lazyChildren(this);return parentContainer&&(parentContainer.options.dropTarget||!1!==parentContainer.options.anyDraggable)&&bindDragEvents(this),this.enableContextMenu(listItemOptions&&listItemOptions.contextMenu),this.enableMultiSelect(listItemOptions&&listItemOptions.multiSelect),(delay?getDelayedResolvedPromise(delay):Promise.resolve()).then(function(){hasActiveElement&&(null!=scrollPosition?this.closest(".emby-scroller").scrollToPosition({position:scrollPosition,behavior:"instant"}):setFocus(this,focusId,focusIndex));var dataItemIds=this.getAttribute("data-monitorids");this.mergeRefreshOptions({refreshIntervalMs:parseInt(this.getAttribute("data-refreshinterval")||"0"),enableUserData:listItemOptions&&listItemOptions.enableUserData,refreshOnItemUpdated:this.refreshOnItemUpdated,parentId:this.getAttribute("data-parentid")||null,itemIds:dataItemIds?dataItemIds.split(","):[]}),this.afterRefresh&&this.afterRefresh(result)}.bind(this))}function getClosest(node,selector){return node.closest?node.closest(selector):(node=node.parentNode)?getClosest(node,selector):null}function onItemDragStart(e){var draggableElement,item,multiSelectedItems,itemsContainer;RequiresDragEventsPolyfill&&!e.detail?.polyfill?e.preventDefault():(e.dataTransfer.effectAllowed="copy",(draggableElement=getClosest(e.target,'[draggable="true"]'))&&(itemsContainer=draggableElement.closest(".itemsContainer"),item=itemShortcuts.getItemFromChildNode(draggableElement,null,itemsContainer),multiSelectedItems=MultiSelect?.getSelectedItems()||[],window.CurrentDragInfo={element:draggableElement,elementIndex:itemsContainer.indexOfElement(draggableElement),item:item,items:multiSelectedItems.length?multiSelectedItems:[item]},itemsContainer=e.detail,headerElement.classList.add("headerElement-drag-reorder-active"),itemsContainer.dragY&&draggableElement.classList.contains("ordered-drop-target-y")?(e.dataTransfer.effectAllowed="copyMove",(appFooter=appFooter||document.querySelector(".appfooter"))&&appFooter.classList.add("appfooter-drag-reorder-active")):itemsContainer.dragX&&draggableElement.classList.contains("ordered-drop-target-x")&&(e.dataTransfer.effectAllowed="move")))}function onItemDrag(e){var target=e.target;target.classList.contains("dragging-over-x-axis")&&showDragXCommands(e,target,(e=window.CurrentDragInfo)?e.item:null,this)}function onItemDragEnd(e){var data;RequiresDragEventsPolyfill&&!e.detail?.polyfill?e.preventDefault():(e.preventDefault(),e=e.target,data=window.CurrentDragInfo,window.CurrentDragInfo=null,headerElement.classList.remove("headerElement-drag-reorder-active"),appFooter?.classList.remove("appfooter-drag-reorder-active"),data&&e.dragCommand&&(e=e.querySelector(".listItem-drag-x-axis-content-"+e.dragCommand+" button")?.getAttribute("data-command"))&&commandProcessor.executeCommand(e,data.items,{itemsContainer:this}))}function onItemDragEndComplete(e){var e=e.target,xAxisContent=(e.classList.remove("dragging-over","dragging-over-x-axis"),e.querySelector(".listItem-drag-x-axis-content"));xAxisContent&&xAxisContent.remove(),e.leftDragSection=null,e.rightDragSection=null,e.vibratedForXDrag=null,e.cachedOffsetWidth=null,e.dragCommand=null}function supportsAddingToCollection(item){var user=connectionManager.getApiClient(item).getCurrentUserCached();return user&&itemManager.canAddToCollection(item,user)}function isXAxisCommand(command){return null!=command.horizontalDragSection}function getCommandColor(command){command=(command.id||"").toLowerCase();return command.includes("download")?"#0285FE":command.includes("remove")||command.includes("delete")?"#FF4337":"#FEA00C"}function ensureDragXCommands(elem,item,itemsContainer){var xAxisContent=elem.querySelector(".listItem-drag-x-axis-content");if(!xAxisContent){var xAxisContent=connectionManager.getApiClient(item)?.getCurrentUserCached(),itemsContainer=Object.assign({},itemsContainer.getCommandOptions(item),{items:[item],user:xAxisContent}),commands=itemManager.getCommands(itemsContainer).filter(isXAxisCommand),item=elem.querySelector(".listItem-content");let html="";html=html+'<div class="listItem-drag-x-axis-content">'+'<div class="listItem-drag-x-axis-content-section listItem-drag-x-axis-content-left">';for(let i=0,length=commands.length;i<length;i++){var command=commands[i];if("left"===command.horizontalDragSection){html+='<button style="background:'+getCommandColor(command)+'" type="button" data-command="'+command.id+'" title="'+command.name+'" is="paper-icon-button-light" class="paper-icon-button-light md-icon listItem-drag-x-axis-button">'+command.icon+"</button>";break}}html=html+"</div>"+'<div class="listItem-drag-x-axis-content-section listItem-drag-x-axis-content-right">';for(let i=0,length=commands.length;i<length;i++){let command=commands[i];if("right"===command.horizontalDragSection){html+='<button style="background:'+getCommandColor(command)+'" type="button" data-command="'+command.id+'" title="'+command.name+'" is="paper-icon-button-light" class="paper-icon-button-light md-icon listItem-drag-x-axis-button">'+command.icon+"</button>";break}}html=html+"</div>"+"</div>",item.insertAdjacentHTML("afterend",html)}}function tryVibrate(){try{navigator.vibrate&&navigator.vibrate(200)}catch(err){console.log("error in navigator.vibrate: "+err)}}let MinXDragPct=62.5;function showDragXCommands(e,elem,item,itemsContainer){ensureDragXCommands(elem,item,itemsContainer),elem.leftDragSection||(elem.leftDragSection=elem.querySelector(".listItem-drag-x-axis-content-left")),elem.rightDragSection||(elem.rightDragSection=elem.querySelector(".listItem-drag-x-axis-content-right"));item=e.detail.pt,itemsContainer=e.detail.ptDown,e=item.x-itemsContainer.x,item=Math.abs(e);let width=elem.cachedOffsetWidth,pct=(width||(width=elem.offsetWidth,elem.cachedOffsetWidth=width),0);width&&(pct=item/width*100)>=MinXDragPct?elem.vibratedForXDrag||(tryVibrate(),elem.vibratedForXDrag=!0):elem.vibratedForXDrag=null,0<e?(elem.leftDragSection.style.width=item+"px",elem.leftDragSection.classList.remove("hide"),elem.rightDragSection.classList.add("hide"),elem.dragCommand=pct>=MinXDragPct?"left":null):e<0?(elem.leftDragSection.classList.add("hide"),elem.rightDragSection.style.width=item+"px",elem.rightDragSection.classList.remove("hide"),elem.dragCommand=pct>=MinXDragPct?"right":null):(elem.leftDragSection.classList.add("hide"),elem.rightDragSection.classList.add("hide"),elem.dragCommand=null)}function onItemDragOver(e){var data=window.CurrentDragInfo,draggingElement=data?data.element:null,target=e.target,elem=getClosest(target,".drop-target"),detail=e.detail,dragY=detail.dragY,detail=detail.dragX;if(dragY&&detail&&elem?.classList.contains("full-drop-target")){data=data?data.item:null;data&&("Playlist"===(listType=itemShortcuts.getItemFromChildNode(elem).Type)&&itemManager.canAddToPlaylist(data)||"BoxSet"===listType&&supportsAddingToCollection(data))&&(e.preventDefault(),e.dataTransfer.dropEffect=e.dataTransfer.dropEffectEmby="copy",elem.classList.add("dragging-over"))}else if(detail&&elem?.classList.contains("ordered-drop-target-x")&&draggingElement.classList.contains("ordered-drop-target-x")){e.preventDefault(),e.dataTransfer.dropEffect=e.dataTransfer.dropEffectEmby="move";var listType=elem.classList,data=elem.getBoundingClientRect(),data=data.x+data.width/2;e.clientX<=data?(listType.remove("dragging-over-right"),listType.add("dragging-over","dragging-over-left")):(listType.remove("dragging-over-left"),listType.add("dragging-over","dragging-over-right"))}else if(dragY&&elem?.classList.contains("ordered-drop-target-y")&&draggingElement.classList.contains("ordered-drop-target-y")){e.preventDefault(),e.dataTransfer.dropEffect=e.dataTransfer.dropEffectEmby="move";let classList=elem.classList,rect=elem.getBoundingClientRect();data=rect.y+rect.height/2;e.clientY<=data?(classList.remove("dragging-over-bottom"),classList.add("dragging-over","dragging-over-top")):(classList.remove("dragging-over-top"),classList.add("dragging-over","dragging-over-bottom"))}else!detail||dragY||draggingElement!==target&&!draggingElement.contains(target)||(e.preventDefault(),e.dataTransfer.dropEffect=e.dataTransfer.dropEffectEmby="move",draggingElement.classList.add("dragging-over","dragging-over-x-axis"))}function onItemDragLeave(e){var listType,data=window.CurrentDragInfo,data=data?data.item:null,elem=getClosest(e.target,".drop-target"),detail=e.detail,dragY=detail.dragY,detail=detail.dragX;dragY&&detail&&elem?.classList.contains("full-drop-target")?(listType=itemShortcuts.getItemFromChildNode(elem).Type,data&&("Playlist"===listType&&itemManager.canAddToPlaylist(data)||"BoxSet"===listType&&supportsAddingToCollection(data))&&(e.preventDefault(),elem.classList.remove("dragging-over"))):detail&&elem?.classList.contains("ordered-drop-target-x")?(e.preventDefault(),elem.classList.remove("dragging-over","dragging-over-left","dragging-over-right")):dragY&&elem?.classList.contains("ordered-drop-target-y")?(e.preventDefault(),elem.classList.remove("dragging-over","dragging-over-top","dragging-over-bottom")):detail&&!dragY&&e.preventDefault()}function onItemDrop(e){e.preventDefault();var dragInfo=window.CurrentDragInfo,draggedElement=dragInfo.element,draggedElementIndex=dragInfo.elementIndex,elem=getClosest(e.target,".drop-target");if(elem){var dragInfo=dragInfo.items,detail=(elem.classList.remove("dragging-over","dragging-over-top","dragging-over-bottom","dragging-over-left","dragging-over-right"),e.detail),dragY=detail.dragY,detail=detail.dragX;if(dragY&&detail&&elem.classList.contains("full-drop-target"))onDroppedOntoFullTarget(elem.closest(".itemsContainer"),draggedElement,elem,dragInfo);else if(detail&&elem.classList.contains("ordered-drop-target-x")){detail=elem.closest(".itemsContainer");detail.contains(draggedElement)&&onDroppedForReorderingHorizontally(e,detail,dragInfo,draggedElement,draggedElementIndex,elem)}else if(dragY&&elem.classList.contains("ordered-drop-target-y")){let itemsContainer=elem.closest(".itemsContainer");itemsContainer.contains(draggedElement)&&onDroppedForReorderingVertically(e,itemsContainer,dragInfo,draggedElement,draggedElementIndex,elem)}}}function setFocus(itemsContainer,focusId,focusIndex){if(console.log("setFocus: focusId: "+focusId+", focusIndex: "+focusIndex),focusId){focusId=itemsContainer.indexOfItemId(focusId);if(-1!==focusId)return console.log("setFocus: found item at index "+focusId),void itemsContainer.scrollToIndex(focusId,{},!0)}null!=focusIndex&&(focusIndex=parseInt(focusIndex),0<=(focusIndex=Math.min(focusIndex,itemsContainer.getItems().length-1)))?itemsContainer.scrollToIndex(focusIndex,{},!0):(focusId={skipIfNotEnabled:!0},console.log("setFocus: auto-focusing into itemsContainer"),focusManager.autoFocus(itemsContainer,focusId)||(focusIndex=itemsContainer.closest(".view"))&&(focusIndex.controller?.autoFocus?focusIndex.controller.autoFocus(focusId):focusManager.autoFocus(focusIndex,focusId)))}function loadMorphdom(){morphdom||Emby.importModule("./modules/morphdom/morphdom.js").then(function(response){morphdom=response})}function bindDragEvents(elem){layoutManager.tv||elem._dragEventsBound||(elem._dragEventsBound=!0,elem.addEventListener("dragstart",onItemDragStart),elem.addEventListener("drag",onItemDrag),elem.addEventListener("dragend",onItemDragEnd),elem.addEventListener("dragendcomplete",onItemDragEndComplete),elem.addEventListener("dragenter",onItemDragOver),elem.addEventListener("dragover",onItemDragOver),elem.addEventListener("dragleave",onItemDragLeave),elem.addEventListener("drop",onItemDrop))}class EmbyItemsContainer extends VirtualScroller{constructor(){var self=super();return onInit.call(self),this.paused=!0,self}connectedCallback(){VirtualScroller.prototype.connectedCallback.apply(this,arguments),onInit.call(this),this.bound_onDataFetched=onDataFetched.bind(this),this.bound_onDataFetchedInitial=onDataFetchedInitial.bind(this),this.bound_onGetItemsFailed=onGetItemsFailed.bind(this),this.addEventListener("click",onClick),layoutManager.tv&&this.classList.add("itemsContainer-tv"),this.hasAttribute("data-domdiff")&&(this._enableDomDiff=!0,loadMorphdom()),itemShortcuts.on(this,getShortcutOptions()),layoutManager.tv||!RequiresDragEventsPolyfill||dragEventsPolyfillLoaded||(dragEventsPolyfillLoaded=!0,Emby.importModule("./modules/polyfills/dragdroptouch.js")),this.hasAttribute("data-contextmenu")&&this.enableContextMenu(!0),this.hasAttribute("data-multiselect")&&this.enableMultiSelect(!0),this.__upgraded=!0,this.dispatchEvent(new CustomEvent("upgraded",{cancelable:!1}))}getEventsToMonitor(){var monitor=this.getAttribute("data-monitor");return monitor?monitor.split(","):[]}disconnectedCallback(){var refreshMonitor=this.refreshMonitor;refreshMonitor&&(refreshMonitor.destroy(),this.refreshMonitor=null),VirtualScroller.prototype.disconnectedCallback.apply(this,arguments),abortRequests(this),this.enableMultiSelect(!1),this.removeEventListener("click",onClick),this.removeEventListener("change",onChange),this.removeEventListener("contextmenu",onContextMenu,!0),itemShortcuts.off(this,getShortcutOptions()),this.fetchData=null,this.getItemsHtml=null,this.parentContainer=null,this.virtualScroller=null,this.currentListOptions=null,this.itemParts=null,this.items=null,this._touchEventsBound=null,this._contextMenuEventsBound=!0,this.bound_onDataFetched=null,this.bound_onDataFetchedInitial=null,this.bound_onGetItemsFailed=null}updateVirtualElement(child,item,index){var listOptions=this.currentListOptions,listItemOptions=listOptions.options,listOptions=listOptions.renderer,allItemParts=this.itemParts,allItemParts=allItemParts[index]||(allItemParts[index]=listOptions.getItemParts(item,index,listItemOptions)),attributes=allItemParts.attributes;for(let i=0,length=attributes.length;i<length;i++){var att=attributes[i];child.setAttribute(att.name,att.value)}this._enableDomDiff?1===(listOptions=child.childNodes).length&&morphdom?morphdom(listOptions[0],allItemParts.html):child.innerHTML=allItemParts.html:child.lastInnerHTML!==allItemParts.html&&(child.lastInnerHTML=allItemParts.html,child.innerHTML=allItemParts.html);index=MultiSelect;index&&index.isSelected(item)&&(listItemOptions=child.querySelector(".chkItemSelect"))&&(listItemOptions.checked=!0,child.classList.add("item-multiselected"))}pause(){this.paused=!0;var refreshMonitor=this.refreshMonitor,refreshMonitor=(refreshMonitor&&refreshMonitor.pause(),this.virtualScroller);refreshMonitor&&super.pause()}resume(options){this.paused=!1;this.virtualScroller&&super.resume(options);var refreshMonitor=this.refreshMonitor;return refreshMonitor?refreshMonitor.resume(options):!refreshMonitor&&options?.refresh?this.refreshItems():Promise.resolve()}setOtherInnerHTML(html){this.virtualScroller&&this.virtualScroller.resetAll(),this._hasOtherInnerHtml=!0,this.innerHTML=html}getItemFromElement(element){if(this.virtualScroller)return super.getItemFromElement(element);if(element.parentNode===this||!element.hasAttribute("data-type")){element=this.indexOfElement(element);if(0<=element){element=this.getItem(element);if(element)return element}}return null}getItem(index){var items;return this.virtualScroller?super.getItem(index):(items=this.items)?items[index]:null}refreshItems(){var refreshMonitor=this.refreshMonitor;return refreshMonitor?refreshMonitor.refreshItems():this.refreshItemsInternal()}refreshItemsInternal(){if(!this.fetchData)return Promise.resolve();if(this.paused)return this.notifyRefreshNeeded(!1),Promise.resolve();this.refreshMonitor&&this.refreshMonitor.notifyIsRefreshing(),abortRequests(this);var abortController=new AbortController,query=(this.currentAbortController=abortController,{}),limit=getVirtualChunkSize(this);return limit&&(query.Limit=limit),this.onGetItems&&this.onGetItems(query),this.fetchData(query,abortController.signal).then(this.bound_onDataFetchedInitial,this.bound_onGetItemsFailed)}notifyRefreshNeeded(isInForeground){if(this.refreshMonitor)return this.refreshMonitor.notifyRefreshNeeded(isInForeground)}showMultiSelect(childElement,selected){childElement=itemShortcuts.getItemElementFromChildNode(childElement,!0,this);this.multiSelect.showSelections(childElement,selected)}enableMultiSelect(enabled){var current=this.multiSelect;if(enabled){if(!current){let self=this;loadMultiSelect().then(function(multiSelect){MultiSelect=multiSelect,self.multiSelect=new MultiSelect({container:self})})}}else current&&(this.multiSelect=null)}enableContextMenu(enabled){enabled&&bindContextMenuEvents(this)}getItemSelector(){var listOptions=this.currentListOptions;return listOptions?listOptions.options.itemSelector:".card,.listItem,.epgRow,.dataGridItem"}getElement(index){var items;return this.virtualScroller?super.getElement(index):(items=this.querySelectorAll(this.getItemSelector())).length?items[index]:void 0}scrollToIndex(index,scrollOptions,focus){if(this.virtualScroller)return super.scrollToIndex(index,scrollOptions,focus);var items=this.querySelectorAll(this.getItemSelector());items.length&&(index=items[index=Math.min(index,items.length-1)]||items[items.length-1])&&(focus?focusManager.focus(index):(items=this.closest("[is=emby-scroller]"))&&items.toStart(index,scrollOptions))}pageUp(activeElement,offset){this.getItems()&&(offset=offset||12,activeElement=itemShortcuts.getItemElementFromChildNode(activeElement,!0,this)||activeElement,activeElement=-1===(activeElement=this.indexOfElement(activeElement))?0:Math.max(0,activeElement-offset),this.scrollToIndex(activeElement,{},!0))}pageDown(activeElement,offset){var items=this.getItems();items&&(offset=offset||12,activeElement=itemShortcuts.getItemElementFromChildNode(activeElement,!0,this)||activeElement,items=-1===(activeElement=this.indexOfElement(activeElement))?0:Math.min(items.length-1,activeElement+offset),this.scrollToIndex(items,{},!0))}indexOfElement(element){return this.virtualScroller?super.indexOfElement(element):parseInt(element.getAttribute("data-index")||"-1")}indexOfItemId(id){return this.virtualScroller?super.indexOfItemId(id):(id=this.querySelector('[data-id="'+id+'"]'))?this.indexOfElement(id):-1}indexOfItem(item){var items;return this.virtualScroller||item.Id?this.indexOfItemId(item.Id):(items=this.getItems())?items.indexOf(item):-1}focusLast(){var items=this.getItems();items&&this.scrollToIndex(items.length-1,{},!0)}getItems(){var virtualScroller=this.virtualScroller;return virtualScroller?virtualScroller._itemSource:this.items}onItemUpdated(index,item){var itemParts=this.itemParts;if(itemParts){if(itemParts[index]=null,this.virtualScroller)return super.onItemUpdated(index,item);itemParts=this.items;if(itemParts){let any=!1;var child=this.getElement(index);child&&(itemParts[index]=item,this.updateVirtualElement(child,item,index),any=!0),any&&lazyImageLoader.lazyChildren(this)}}}getContextMenuElementFromChildNode(child){return itemShortcuts.getItemElementFromChildNode(child,!0,this)}mergeRefreshOptions(options){this.refreshMonitor?.mergeOptions(options)}getCommandOptions(item){var currentListOptions=this.currentListOptions;let commandOptions=currentListOptions?.commandOptions||{};if(layoutManager.tv){currentListOptions=currentListOptions?.options;if(item&¤tListOptions?.fields.includes("ItemCheckbox")){let checked;checked=currentListOptions.getIsItemChecked?currentListOptions.getIsItemChecked(item):item.Selected||!1===item.Disabled,commandOptions=Object.assign({setChecked:!1===checked,setUnchecked:!0===checked},commandOptions)}}return commandOptions}onCommandResult(result){this.onCommandResultInternal&&this.onCommandResultInternal(result)}}customElements.define("emby-itemscontainer",EmbyItemsContainer,{extends:"div"});export default EmbyItemsContainer; |