dashboard-ui/modules/viewmanager/baseview.js
2023-08-31 15:30:17 +02:00

1 line
9.2 KiB
JavaScript

define(["exports","./../dom.js","./../layoutmanager.js","./../browser.js","./../focusmanager.js","./../maintabsmanager.js","./../common/inputmanager.js","./../navdrawer/navdrawer.js","./viewmanager.js","./../approuter.js","./../emby-apiclient/connectionmanager.js"],function(_exports,_dom,_layoutmanager,_browser,_focusmanager,_maintabsmanager,_inputmanager,_navdrawer,_viewmanager,_approuter,_connectionmanager){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var EnableNativeTransitions=document.startViewTransition,docElem=document.documentElement;var deviceMemory,platform,cores,EnableAnimation=!((cores=navigator.hardwareConcurrency||4)<4||(2400<=(screen.width||screen.availWidth||0)||1400<=(screen.height||screen.availHeight||0))&&cores<6||(deviceMemory=navigator.deviceMemory||2)<2||!CSS.supports("transition","all")||!CSS.supports("transform","scale(1)")||!_dom.default.supportsEventListenerOnce()||!docElem.animate||(platform=(navigator.platform||"").toLowerCase(),"android"===globalThis.appMode&&(cores<4||deviceMemory<2||platform.includes("armv7"))));function onFinished(result){return docElem.classList.remove("back-transition"),Promise.resolve(result)}EnableNativeTransitions&&EnableAnimation&&require(["css!modules/viewmanager/transitions.css"]);var currentRequestId=0;var transition=EnableNativeTransitions?function(detail,newView,oldView,isBack){var newViewClassList;return oldView===newView?Promise.resolve():(newViewClassList=newView.classList,EnableAnimation&&_layoutmanager.default.tv?(_layoutmanager.default.tv&&detail.transition&&newViewClassList.add("view-transition-scale","animatedView"),newView=docElem.classList,newViewClassList.contains("view-transition-scale")||isBack&&oldView.classList.contains("view-transition-scale")?newView.add("transition-scale"):newView.remove("transition-scale"),newViewClassList.contains("animatedView")||isBack&&oldView.classList.contains("animatedView")?document.startViewTransition(onStarted).finished.then(onFinished):(onStarted(),Promise.resolve())):(oldView&&(oldView.classList.add("hide"),oldView.classList.remove("animatedView")),newViewClassList.remove("hide","animatedView"),Promise.resolve()));function onStarted(){oldView&&(oldView.classList.add("hide"),isBack)&&newViewClassList.remove("hide")}}:function(detail,newAnimatedPage,oldAnimatedPage,isBack){return oldAnimatedPage===newAnimatedPage?(newAnimatedPage.classList.remove("backgroundContainer","animatedView-in","animatedView-out","animatedView-top"),Promise.resolve()):EnableAnimation&&_layoutmanager.default.tv&&!_browser.default.android?(newAnimatedPage.classList.add("animatedView","animatedView-fade"),new Promise(function(resolve,reject){var elemForEvents,timeout,transitionRequestId=currentRequestId++,onDone=(oldAnimatedPage&&isBack&&(elemForEvents=oldAnimatedPage,newAnimatedPage.classList.add("animatedView-out","animatedView-top"),newAnimatedPage.classList.remove("hide"),oldAnimatedPage.offsetWidth),elemForEvents||((elemForEvents=newAnimatedPage).classList.add("backgroundContainer","animatedView-in","animatedView-top"),oldAnimatedPage.classList.remove("animatedView-top"),oldAnimatedPage.classList.add("backgroundContainer","animatedView-out"),elemForEvents.offsetWidth),function(e){var target=e?e.target:null;target&&target!==e.currentTarget||elemForEvents.currentRequestId===transitionRequestId&&(target&&(_dom.default.removeEventListener(target,"transitioncancel",onDone,{once:!0,passive:!0}),_dom.default.removeEventListener(target,"transitionend",onDone,{once:!0,passive:!0})),clearTimeout(timeout),oldAnimatedPage!==elemForEvents&&(elemForEvents.classList.remove("backgroundContainer"),!oldAnimatedPage)||(oldAnimatedPage.classList.add("hide"),oldAnimatedPage.classList.remove("backgroundContainer","animatedView-in")),resolve())});_dom.default.addEventListener(elemForEvents,"transitioncancel",onDone,{once:!0,passive:!0}),_dom.default.addEventListener(elemForEvents,"transitionend",onDone,{once:!0,passive:!0}),timeout=setTimeout(onDone,400),elemForEvents.currentRequestId=transitionRequestId,requestAnimationFrame(function(){elemForEvents===oldAnimatedPage?(newAnimatedPage.classList.remove("animatedView-out","animatedView-top"),oldAnimatedPage.classList.add("backgroundContainer","animatedView-in","animatedView-top")):newAnimatedPage.classList.remove("animatedView-in")})})):(oldAnimatedPage&&(oldAnimatedPage.classList.add("hide"),oldAnimatedPage.classList.remove("animatedView","animatedView-fade","backgroundContainer","animatedView-in","animatedView-top","animatedView-out")),newAnimatedPage.classList.remove("hide","animatedView","animatedView-fade","backgroundContainer","animatedView-in","animatedView-top","animatedView-out"),Promise.resolve())};function onViewBeforeShow(e){var resumeOptions={refresh:!e.detail.isRestored},instance=this;instance.transitionPromise=(this.onBeginResume(resumeOptions)||Promise.resolve()).then(function(){return function(instance,e){var previousView,isBack,e=e.detail;return instance.getTransitionPromise?instance.getTransitionPromise(e):(previousView=e.previousView)?(isBack=e.isBack,instance=instance.view,transition(e,instance,previousView,isBack)):Promise.resolve()}(instance,e)})}function getScrollerNavOutDestination(direction){return direction===_focusmanager.default.directions.up?document.querySelector(".skinHeader"):null}function BaseView(view,params){this.view=view,this.params=params,this.requestedItemFields="BasicSyncInfo,CanDelete",this.scroller="emby-scroller"===view.getAttribute("is")?view:view.querySelector(".viewScroller"),view.addEventListener("viewbeforeshow",onViewBeforeShow.bind(this)),view.addEventListener("viewshow",function(e){var instance=this,resumeOptions={refresh:!e.detail.isRestored};resumeOptions.autoFocus=!e.detail.isRestored,this.transitionPromise.then(function(){instance.onResume(resumeOptions)})}.bind(this)),view.addEventListener("viewbeforehide",function(e){this.onPause({event:e})}.bind(this)),view.addEventListener("viewdestroy",this.destroy.bind(this)),this.view.classList.add("focuscontainer-x"),this.scroller&&(this.scroller.classList.add("focuscontainer-y","navout-up"),this.scroller.getNavOutDestination=getScrollerNavOutDestination),this.onInputCommandFn=this.onInputCommand.bind(this);params=this.onInputCommandFn;params&&_inputmanager.default.on(view,params)}function onBackCommand(e){_layoutmanager.default.tv&&this.enableBackMenu&&!e.defaultPrevented&&(_approuter.default.showBackMenu(),e.preventDefault())}function shouldShowLeftNav(e){var _viewManager$currentV;return!1!==(null==(_viewManager$currentV=_viewmanager.default.currentViewInfo())?void 0:_viewManager$currentV.drawer)&&!(null!=(_viewManager$currentV=e.detail)&&null!=(_viewManager$currentV=_viewManager$currentV.originalEvent)&&_viewManager$currentV.repeat||e.target.closest(".itemsViewSettingsContainer"))}BaseView.prototype.onWindowInputCommand=function(e){"back"===e.detail.command&&onBackCommand.call(this,e)},BaseView.prototype.onInputCommand=function(e){switch(e.detail.command){case"moveleftedge":"rtl"!==document.dir&&shouldShowLeftNav(e)&&(_navdrawer.default.openIfClosed(!0),e.preventDefault());break;case"moverightedge":"rtl"===document.dir&&shouldShowLeftNav(e)&&(_navdrawer.default.openIfClosed(!0),e.preventDefault());break;case"back":onBackCommand.call(this,e)}},BaseView.prototype.getApiClient=function(){var serverId=this.params.serverId;return serverId?_connectionmanager.default.getApiClient(serverId):_connectionmanager.default.currentApiClient()},BaseView.prototype.getRequestedItemFields=function(){return this.requestedItemFields},BaseView.prototype.autoFocus=function(options){options=Object.assign({skipIfNotEnabled:!0},options);var elem,view=this.view;return view&&(elem=_focusmanager.default.autoFocus(view,options))?elem:(!options.skipIfNotEnabled||_focusmanager.default.isAutoFocusEnabled())&&(elem=_maintabsmanager.default.focus())||null},BaseView.prototype.enableTransitions=function(){return!1},BaseView.prototype.enableWindowInputCommands=function(){return this.enableBackMenu},BaseView.prototype.onBeginResume=function(options){var scroller=this.scroller;scroller&&scroller.beginResume&&scroller.beginResume()},BaseView.prototype.onResume=function(options){this.paused=!1,!this.onWindowInputCommandFn&&this.enableWindowInputCommands()&&(this.onWindowInputCommandFn=this.onWindowInputCommand.bind(this),onWindowInputCommandFn=this.onWindowInputCommandFn)&&_inputmanager.default.on(window,onWindowInputCommandFn);var onWindowInputCommandFn=this.scroller;onWindowInputCommandFn&&onWindowInputCommandFn.resume&&onWindowInputCommandFn.resume()},BaseView.prototype.onPause=function(options){this.paused=!0,(onWindowInputCommandFn=(instance=this).onWindowInputCommandFn)&&_inputmanager.default.off(window,onWindowInputCommandFn),instance.onWindowInputCommandFn=null;var instance,onWindowInputCommandFn=this.scroller;onWindowInputCommandFn&&onWindowInputCommandFn.pause&&onWindowInputCommandFn.pause()},BaseView.prototype.isDestroyed=function(){return null==this.view},BaseView.prototype.destroy=function(){var view=this.view,onInputCommandFn=this.onInputCommandFn;onInputCommandFn&&view&&_inputmanager.default.off(view,onInputCommandFn),this.onInputCommandFn=null,this.animationSourceElement=null,this.scroller=null,this.view=null,this.params=null,this.paused=null,this.apiClient=null},_exports.default=BaseView});