import browser from"./../browser.js";import dom from"./../dom.js";import layoutManager from"./../layoutmanager.js";import focusManager from"./../focusmanager.js";import dialogHelper from"./../dialoghelper/dialoghelper.js";import inputManager from"./../common/inputmanager.js";import cardBuilder from"./../cardbuilder/cardbuilder.js";import{appHost}from"./../common/servicelocator.js";import events from"./../emby-apiclient/events.js";import connectionManager from"./../emby-apiclient/connectionmanager.js";import mouseManager from"./../input/mouse.js";import"./../emby-elements/emby-scroller/emby-scroller.js";import"./../emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js";import EmbyItemsContainer from"./../emby-elements/emby-itemscontainer/emby-itemscontainer.js";import playbackManager from"./../common/playback/playbackmanager.js";let CSSPromise=require(["css!modules/slideshow/style.css"]).then(function(){CSSPromise=Promise.resolve()});function getIcon(icon,cssClass,iconClass,canFocus,autoFocus){return'"}function showContextMenu(options){return Emby.importModule("./modules/itemcontextmenu.js").then(function(itemContextMenu){return itemContextMenu.show(options)})}function setUserScalable(scalable){try{appHost.setUserScalable(scalable)}catch(err){console.log("error in appHost.setUserScalable: "+err)}}function getItems(query){query=query||{};let items=this.options.items;var totalRecordCount=items.length,limit=query.Limit;return items=items.slice(query.StartIndex||0),limit&&items.length>limit&&(items.length=limit),Promise.resolve({Items:items,TotalRecordCount:totalRecordCount})}function afterRefresh(result){this.TotalRecordCount=result.TotalRecordCount}function getListOptions(items){var fields=this.options.cardFields||["Name"],windowSize=dom.getWindowSize();let cardFooterClass="slideshowCardFooter";return this.options.interactive&&(cardFooterClass+=" slideshowCardFooter-interactive"),layoutManager.tv?cardFooterClass+=" slideshow-largefont-tv":cardFooterClass+=" slideshow-largefont",{renderer:cardBuilder,options:{shape:"backdrop",preferBackdrop:!0,overlayText:!0,fields:fields,multiSelect:!1,hoverMenu:!1,cardClass:"slideshowCard",cardBoxClass:"slideshowCardBox",cardContentClass:"slideshowCardContent",cardImageClass:"slideshowCardImage",innerCardFooterClass:cardFooterClass,cardTextClass:"slideshowCardText",centerText:!0,staticElement:!0,action:"none",contextMenu:!1,draggable:!1,ignoreUIAspect:!0,playedIndicator:!1},virtualScrollLayout:"horizontal-grid",minOverhang:5*Math.max(windowSize.innerHeight,windowSize.innerWidth)}}let isNativeSmoothScrollSupported="scrollBehavior"in document.documentElement.style;export default function(options){let self=this,dlg,currentTimeout,currentIntervalMs,currentIndex,supportsTouchEvent=(this.options=options,browser.chromecast&&(options.interactive=!1),"ontouchstart"in document.documentElement);function onScrollTimeout(){self.scrolling=!1;var isProgramScroll=self.isProgramScroll;if(self.isProgramScroll=!1,!isProgramScroll){isProgramScroll="smooth";var windowSize=dom.getWindowSize(),x=windowSize.innerWidth/2;let elem=document.elementFromPoint(x,windowSize.innerHeight/2);(elem=elem&&elem.closest(".card"))&&scrollToIndex(self.itemsContainer.indexOfElement(elem),isProgramScroll,!1)}self.dlg.classList.remove("slideshow-scrolling"),"Video"===getCurrentItem()?.MediaType?self.btnPlayVideo.classList.remove("hide"):self.btnPlayVideo.classList.add("hide")}let scrollTimeout;function onScroll(){var isProgramScroll=self.isProgramScroll;self.scrolling=!0,isProgramScroll||(restartInterval(),self.dlg.classList.add("slideshow-scrolling")),scrollTimeout&&clearTimeout(scrollTimeout),scrollTimeout=setTimeout(onScrollTimeout,400)}let resizeTimeout,resizeIndex;function onResizeTimeout(){scrollToIndex(resizeIndex,"instant",!1)}function stopResizeTimer(){resizeTimeout&&clearTimeout(resizeTimeout)}function onResize(){self.scrolling&&!self.isProgramScroll||(console.log("slideshow resize"),resizeIndex=currentIndex,stopResizeTimer(),resizeTimeout&&clearTimeout(resizeTimeout),resizeTimeout=setTimeout(onResizeTimeout,100))}function onItemsContainerUpgraded(){let instance=this;CSSPromise.then(function(){instance.itemsContainer.resume({refresh:!0}).then(function(){instance.scroller.addResizeObserver(onResize),showNextImage(instance.options.startIndex||0,"instant",!0)})})}function createElements(options){dlg=dialogHelper.createDialog({size:"fullscreen",autoFocus:!1,scrollY:!1,removeOnClose:!0,autoLowResLayout:!1}),(self.dlg=dlg).classList.add("slideshowDialog");let html="";html=(html=html+('
':html+='
',html=(html=(html+='
')+getIcon("",layoutManager.tv?"btnSlideshowPrevious buttonItems-item slideshowButton":"btnSlideshowPrevious buttonItems-item slideshowButton btnSlideshow-autohide","md-icon-fill",!0,!1))+getIcon("","btnSlideshowPause buttonItems-item slideshowButton","md-icon-fill",!0,!0),layoutManager.tv?html+=getIcon("","btnSlideshowNext buttonItems-item slideshowButton","md-icon-fill",!0,!1):html+=getIcon("","btnSlideshowNext buttonItems-item slideshowButton btnSlideshow-autohide","md-icon-fill",!0,!1),html=(html+='
"),dlg.innerHTML=html;var itemsContainer=dlg.querySelector(".itemsContainer");itemsContainer.fetchData=options.getItems||getItems.bind(self),itemsContainer.getListOptions=getListOptions.bind(self),itemsContainer.afterRefresh=afterRefresh.bind(self),itemsContainer.updateVirtualElement=function(elem,item,index){EmbyItemsContainer.prototype.updateVirtualElement.apply(this,arguments),elem&&(elem=elem.classList)&&(index===currentIndex?elem.add("slideshowCard-current"):elem.remove("slideshowCard-current"))}.bind(itemsContainer),self.itemsContainer=itemsContainer,self.scroller=dlg.querySelector(".slideshowScroller"),options.interactive&&(dlg.querySelector(".btnSlideshowNext").addEventListener("click",nextImage),dlg.querySelector(".btnSlideshowPrevious").addEventListener("click",previousImage),(itemsContainer=dlg.querySelector(".btnSlideshowPause"))&&itemsContainer.addEventListener("click",self.playPause.bind(self)),(options=dlg.querySelector(".btnMore"))&&(options.addEventListener("click",self.showMoreMenu.bind(self)),options.classList.add("paper-icon-button-light-blur"),dom.allowBackdropFilter())&&options.classList.add("paper-icon-button-light-blur-bf"),itemsContainer=dlg.querySelector(".btnPlayVideo"),self.btnPlayVideo=itemsContainer)&&itemsContainer.addEventListener("click",self.playVideo.bind(self)),setUserScalable(!0),mouseManager.requestMouseListening("slideshow"),dlg.addEventListener("opened",function(){this.dlg.classList.add("slideshow-crossfade");var itemsContainer=this.itemsContainer;itemsContainer.resume?onItemsContainerUpgraded.call(this):dom.addEventListener(itemsContainer,"upgraded",onItemsContainerUpgraded.bind(this),{once:!0}),this.scroller.addScrollEventListener(onScroll.bind(this),{})}.bind(self)),dialogHelper.open(dlg).then(function(){mouseManager.releaseMouseListening("slideshow"),setUserScalable(!1),stopInterval()}),document.activeElement&&document.activeElement.blur(),inputManager.on(dlg,onInputCommand),dom.addEventListener(document,window.PointerEvent?"pointermove":"mousemove",onPointerMove,{passive:!0}),dom.addEventListener(document,window.PointerEvent?"pointerenter":"mouseenter",onPointerEnter,{passive:!0,capture:!0}),dom.addEventListener(document,window.PointerEvent?"pointerleave":"mouseleave",onPointerLeave,{passive:!0,capture:!0}),dlg.addEventListener("close",onDialogClosed)}function previousImage(){stopInterval(),showNextImage(currentIndex-1,!1)}function nextImage(){stopInterval(),showNextImage(currentIndex+1,!1)}function getCurrentItem(){var index=currentIndex;if(null!=index&&-1!==index)return self.itemsContainer.getItem(index)}function showMoreMenu(item,button){let apiClient=connectionManager.getApiClient(item.ServerId);apiClient.getCurrentUser().then(function(user){return apiClient.getItem(apiClient.getCurrentUserId(),item.Id,{ExcludeFields:"Chapters,Overview,People,MediaStreams"}).then(function(serverItem){return showContextMenu(((item,user,button)=>Object.assign({positionTo:button,positionX:"before",positionY:"bottom",transformOrigin:"right top",noTextWrap:!0},{items:[item],open:!1,play:!1,playSlideshow:!1,playAllFromHere:!1,queueAllFromHere:!1,cancelTimer:!1,record:!1,deleteItem:!1,shuffle:!1,instantMix:!1,user:user,share:!0,queue:!1,editSubtitles:!1,convert:!1,refreshMetadata:!1,identify:!1}))(serverItem,user,button))})})}function onDialogClosed(){inputManager.off(this,onInputCommand),dom.removeEventListener(document,window.PointerEvent?"pointermove":"mousemove",onPointerMove,{passive:!0}),dom.removeEventListener(document,window.PointerEvent?"pointerenter":"mouseenter",onPointerEnter,{passive:!0,capture:!0}),dom.removeEventListener(document,window.PointerEvent?"pointerleave":"mouseleave",onPointerLeave,{passive:!0,capture:!0}),events.trigger(self,"closed")}self.play=function(){var btnSlideshowPause=dlg.querySelector(".btnSlideshowPause i");btnSlideshowPause&&(btnSlideshowPause.innerHTML=""),self.paused=!1},self.pause=function(){var btnSlideshowPause=dlg.querySelector(".btnSlideshowPause i");btnSlideshowPause&&(btnSlideshowPause.innerHTML=""),self.paused=!0},self.playVideo=function(){var item=getCurrentItem();item&&(hideOsd(),self.pause(),playbackManager.play({items:[item]}))},self.playPause=function(){showOsd(),self.paused?self.play():self.pause()};let _osdOpen=!(self.showMoreMenu=function(e){showOsd(),showMoreMenu(getCurrentItem(),e.target)});function getOsdTop(){return dlg.querySelector(".topActionButtons")}function getOsdBottom(){return dlg.querySelector(".slideshowBottomBar")}function showOsd(){var bottom=getOsdBottom();if(bottom){var elem=bottom;if(elem.classList.contains("hide")){_osdOpen=!0,elem.classList.remove("hide");let onFinish=function(){focusManager.focus(elem.querySelector(".btnSlideshowPause"))};onFinish(),elem.animate?requestAnimationFrame(function(){var keyframes=[{transform:"translate3d(0,"+elem.offsetHeight+"px,0)",opacity:".3",offset:0},{transform:"translate3d(0,0,0)",opacity:"1",offset:1}];elem.animate(keyframes,{duration:300,iterations:1,easing:"ease-out"}).onfinish=onFinish}):onFinish()}hideTimeout&&(clearTimeout(hideTimeout),hideTimeout=null),hideTimeout=setTimeout(hideOsd,5e3)}bottom=getOsdTop();bottom&&(elem=>{if(elem.classList.contains("hide")){elem.classList.remove("hide");let onFinish=function(){};elem.animate&&requestAnimationFrame(function(){var keyframes=[{transform:"translate3d(0,-"+elem.offsetHeight+"px,0)",opacity:".3",offset:0},{transform:"translate3d(0,0,0)",opacity:"1",offset:1}];elem.animate(keyframes,{duration:300,iterations:1,easing:"ease-out"}).onfinish=onFinish})}})(bottom)}let mouseOverButton;function hideOsd(){if(!mouseOverButton){var bottom=getOsdBottom();if(bottom){var elem=bottom;if(!elem.classList.contains("hide")){let onFinish=function(){elem.classList.add("hide"),_osdOpen=!1};elem.animate?requestAnimationFrame(function(){var keyframes=[{transform:"translate3d(0,0,0)",opacity:"1",offset:0},{transform:"translate3d(0,"+elem.offsetHeight+"px,0)",opacity:".3",offset:1}];elem.animate(keyframes,{duration:300,iterations:1,easing:"ease-out"}).onfinish=onFinish}):onFinish()}}bottom=getOsdTop();bottom&&(elem=>{if(!elem.classList.contains("hide")){let onFinish=function(){elem.classList.add("hide")};elem.animate?requestAnimationFrame(function(){var keyframes=[{transform:"translate3d(0,0,0)",opacity:"1",offset:0},{transform:"translate3d(0,-"+elem.offsetHeight+"px,0)",opacity:".3",offset:1}];elem.animate(keyframes,{duration:300,iterations:1,easing:"ease-out"}).onfinish=onFinish}):onFinish()}})(bottom)}}let hideTimeout;function onPointerEnter(e){var pointerType=e.pointerType;"touch"===pointerType||!pointerType&&supportsTouchEvent||(mouseOverButton=null!=e.target.closest("button,a"))}function onPointerLeave(e){mouseOverButton=null}let lastMouseMoveData;function onPointerMove(e){e.pointerType||supportsTouchEvent;var eventX=e.screenX||0,e=e.screenY||0,obj=lastMouseMoveData;obj?Math.abs(eventX-obj.x)<10&&Math.abs(e-obj.y)<10||(obj.x=eventX,obj.y=e,showOsd()):lastMouseMoveData={x:eventX,y:e}}let lastRepeatingKeyTime=0;function throttleDirectional(e){var timeStamp=e.timeStamp||Date.now();return timeStamp&&(timeStamp-lastRepeatingKeyTime<240?(e.preventDefault(),e.stopPropagation(),1):void(lastRepeatingKeyTime=timeStamp))}function onInputCommand(e){switch(e.detail.command){case"back":_osdOpen&&(e.preventDefault(),hideOsd());break;case"left":_osdOpen?showOsd():throttleDirectional(e)||(e.preventDefault(),e.stopPropagation(),("rtl"===document.dir?nextImage:previousImage)());break;case"right":_osdOpen?showOsd():throttleDirectional(e)||(e.preventDefault(),e.stopPropagation(),("rtl"===document.dir?previousImage:nextImage)());break;case"up":(_osdOpen?hideOsd:showOsd)();break;case"down":case"select":case"menu":case"info":showOsd();break;case"play":self.options.interactive&&(e.preventDefault(),self.play(),showOsd());break;case"playpause":self.options.interactive&&(e.preventDefault(),self.playPause(),showOsd());break;case"pause":self.options.interactive&&(e.preventDefault(),self.pause(),showOsd());break;case"next":self.options.interactive&&(e.preventDefault(),nextImage());break;case"previous":self.options.interactive&&(e.preventDefault(),previousImage());break;default:showOsd()}}let currentElement,currentElementTimeout;function scrollToIndex(index,behavior,enableCrossfade){currentIndex=index;var scrollOptions={};behavior&&(scrollOptions.behavior=behavior),currentElement&&(currentElement.classList.remove("slideshowCard-current"),currentElement=null),self.isProgramScroll="smooth"!==behavior,enableCrossfade||(behavior=self.itemsContainer.getElement(index))&&behavior.classList.add("slideshowCard-current"),enableCrossfade?self.dlg.classList.add("slideshow-crossfade"):self.dlg.classList.remove("slideshow-crossfade"),self.isProgramScroll?self.dlg.classList.remove("slideshow-scrolling"):self.dlg.classList.add("slideshow-scrolling"),self.itemsContainer.scrollToIndex(index,scrollOptions,!1),currentElementTimeout&&clearTimeout(currentElementTimeout),currentElementTimeout=setTimeout(function(){var elem=self.itemsContainer.getElement(index);elem&&(elem.classList.add("slideshowCard-current"),currentElement=elem)},100)}function showNextImage(index,scrollBehavior,enableCrossfade){scrollTimeout&&clearTimeout(scrollTimeout),stopResizeTimer(),scrollToIndex(index=(index=Math.max(0,index))>=self.TotalRecordCount?0:index,scrollBehavior,enableCrossfade),restartInterval()}function onInterval(){self.paused?restartInterval():showNextImage(currentIndex+1,"instant",!0)}function restartInterval(){stopInterval(),currentTimeout=setTimeout(onInterval,currentIntervalMs)}function stopInterval(){currentTimeout&&(clearTimeout(currentTimeout),currentTimeout=null)}self.show=function(){stopInterval(),createElements(self.options),currentIntervalMs=self.options.interval||1e4,!self.options.interactive||layoutManager.tv||self.options.autoplay?self.play():self.pause()},self.hide=function(){var dialog=dlg;dialog&&dialogHelper.close(dialog)}}