EmbyCrackedClient/web/home_horiz/spotlight.js

1 line
2 KiB
JavaScript
Raw Permalink Normal View History

2025-06-25 11:46:04 +08:00
import cardBuilder from"./../modules/cardbuilder/cardbuilder.js";function trimResultByIndex(result,index){result=result.Items.slice(index);return result.length=1,{Items:result,TotalRecordCount:1}}function getItems(){let instance=this;return instance._itemsResult?Promise.resolve(trimResultByIndex(instance._itemsResult,instance._currentIndex)):instance.getItemsFn({Limit:20}).then(function(result){return result.Items.length||(result.Items.push(instance._defaultItem),result.TotalRecordCount=1),trimResultByIndex(instance._itemsResult=result,instance._currentIndex)})}function getListOptions(){return{renderer:cardBuilder,options:{shape:"backdrop",multiSelect:!1,contextMenu:!1,overlayText:!0,fields:["Name"],cardClass:"wideSpotlightCard"},virtualScrollLayout:"vertical-grid"}}function Spotlight(itemsContainer,getItemsFn,getDefaultItemFn){(this.itemsContainer=itemsContainer).fetchData=getItems.bind(this),itemsContainer.getListOptions=getListOptions.bind(this),this.getItemsFn=getItemsFn,this._currentIndex=0,this._defaultItem=getDefaultItemFn()}Spotlight.prototype.resume=function(options){this.paused=!1;let instance=this;return this.itemsContainer.resume(options).then(function(){instance.startInterval()})},Spotlight.prototype.onInterval=function(){if(!this.paused){var itemsResult=this._itemsResult;if(itemsResult){var itemsContainer=this.itemsContainer;if(document.body.contains(itemsContainer)){let newIndex=this._currentIndex+1;newIndex>=itemsResult.TotalRecordCount&&(newIndex=0),this._currentIndex=newIndex,itemsContainer.refreshItems()}else this.clearInterval()}}},Spotlight.prototype.startInterval=function(){this.interval||(this.interval=setInterval(this.onInterval.bind(this),3e4))},Spotlight.prototype.clearInterval=function(){this.interval&&(clearInterval(this.interval),this.interval=null)},Spotlight.prototype.pause=function(){this.paused=!0,this.clearInterval()},Spotlight.prototype.destroy=function(){this.clearInterval(),this.itemsContainer=null,this._itemsResult=null,this._currentIndex=null,this._defaultItem=null};export default Spotlight;