1 line
No EOL
9.3 KiB
JavaScript
1 line
No EOL
9.3 KiB
JavaScript
import layoutManager from"./../layoutmanager.js";import focusManager from"./../focusmanager.js";import mainTabsManager from"./../maintabsmanager.js";import inputManager from"./../common/inputmanager.js";import navDrawerInstance from"./../navdrawer/navdrawer.js";import viewManager from"./viewmanager.js";import appRouter from"./../approuter.js";import connectionManager from"./../emby-apiclient/connectionmanager.js";import userSettings from"./../common/usersettings/usersettings.js";import dialogHelper from"./../dialoghelper/dialoghelper.js";import backdrop from"./../backdrop/backdrop.js";let EnableNativeTransitions=document.startViewTransition,docElem=document.documentElement,appHeader=document.querySelector(".skinHeader");function allowAnimation(){var cores,deviceMemory,platform;return!!EnableNativeTransitions&&!((cores=navigator.hardwareConcurrency||4)<4||(2400<=(screen.width||screen.availWidth||0)||1400<=(screen.height||screen.availHeight||0))&&cores<6||(deviceMemory=navigator.deviceMemory||2)<2||(platform=(navigator.platform||"").toLowerCase(),"android"===globalThis.appMode&&(cores<4||deviceMemory<2||platform.includes("armv7"))))}let EnableAnimation=allowAnimation();function onFinished(result){return Promise.resolve(result)}function transitionWithStartViewTransition(detail,newView,oldView,isBack){if(oldView===newView)return Promise.resolve();let newViewClassList=newView.classList;if(!EnableAnimation||!layoutManager.tv)return 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")}layoutManager.tv&&detail.transition&&newViewClassList.add("view-transition-scale","animatedView");newView=docElem.classList;return 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())}function getTransitionPromise(instance,e){var detail=e.detail;if(instance.getTransitionPromise)return instance.getTransitionPromise(detail);let previousViewInfo=detail.previousViewInfo;if(!previousViewInfo)return Promise.resolve();var isBack=detail.isBack;let newView=instance.view;if(detail.params?.asDialog){dialogHelper.createDialog({dialog:newView,autoFocus:!1,size:layoutManager.tv?"fullscreen-border-force":"medium-tall",blockInputCommandNavigation:!1});let viewInfo=e.detail;return new Promise(function(resolve,reject){newView.addEventListener("opened",resolve),newView.addEventListener("closing",function(){newView._closedForNavigation||(viewManager.dispatchViewBeforeHide(viewInfo,previousViewInfo),viewManager.dispatchViewBeforeShow(previousViewInfo,!0,!0,viewInfo))}),dialogHelper.open(newView).then(function(){newView._closedForNavigation||viewManager.onViewChange(viewInfo,previousViewInfo,!0,!0)})})}return"true"===previousViewInfo.params.asDialog?Promise.resolve():transitionWithStartViewTransition(detail,newView,previousViewInfo.view,isBack)}function getResumeOptions(e){return{refresh:!e.detail.isRestored,previousViewInfo:e.detail.previousViewInfo}}function onViewBeforeShow(e){var resumeOptions=getResumeOptions(e);let instance=this;instance.transitionPromise=(this.onBeginResume(resumeOptions)||Promise.resolve()).then(function(){return getTransitionPromise(instance,e)})}function onViewShow(e){let instance=this,resumeOptions=getResumeOptions(e);resumeOptions.autoFocus=!e.detail.isRestored,this.transitionPromise.then(function(){instance.onResume(resumeOptions)})}function onViewBeforeHide(e){this.onPause({event:e,newViewInfo:e.detail?.newViewInfo})}function getScrollerNavOutDestination(direction){return direction===focusManager.directions.up?appHeader: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",onViewShow.bind(this)),view.addEventListener("viewbeforehide",onViewBeforeHide.bind(this)),this.view.classList.add("focuscontainer-x");var focusContainerElem=this.getFocusContainerElement(),params=(focusContainerElem&&("true"===params.asDialog?focusContainerElem.classList.add("focuscontainer-y"):focusContainerElem.classList.add("focuscontainer-y","navout-up"),focusContainerElem.getNavOutDestination=getScrollerNavOutDestination),this.onInputCommandFn=this.onInputCommand.bind(this),this.onInputCommandFn);params&&inputManager.on(view,params)}function onBackCommand(e){layoutManager.tv&&this.enableBackMenu&&!e.defaultPrevented&&(appRouter.showBackMenu(),e.preventDefault())}function shouldShowLeftNav(e,instance){return!1!==viewManager.currentViewInfo()?.drawer&&!e.detail?.originalEvent?.repeat&&!e.target.closest(".itemsViewSettingsContainer")}function destroyWindowInputCommand(instance){var onWindowInputCommandFn=instance.onWindowInputCommandFn;onWindowInputCommandFn&&inputManager.off(window,onWindowInputCommandFn),instance.onWindowInputCommandFn=null}function getBackdropItems(apiClient,types,parentId){types={SortBy:"Random",Limit:20,Recursive:!0,IncludeItemTypes:types,ImageTypes:"Backdrop",ParentId:parentId,EnableTotalRecordCount:!1,ImageTypeLimit:1,EnableImageTypes:"Backdrop"};return apiClient.getItems(apiClient.getCurrentUserId(),types)}function showBackdrop(instance,type,parentId){var apiClient=instance.getApiClient();apiClient&&(instance.backdropItems?backdrop.setBackdrops(instance.backdropItems):getBackdropItems(apiClient,type,parentId).then(function(result){result.Items.length?(result=result.Items,instance.backdropItems=result,backdrop.setBackdrops(result)):backdrop.clear()}))}function showAutoBackdropIfNeeded(instance){var backdropItemTypes;"true"===instance.params.asDialog||layoutManager.tv||(backdropItemTypes=instance.getAutoBackdropItemTypes()).length&&userSettings.enableBackdrops()&&showBackdrop(instance,backdropItemTypes,(backdropItemTypes=instance.params)?backdropItemTypes.parentId:null)}EnableNativeTransitions&&EnableAnimation&&require(["css!modules/viewmanager/transitions.css"]),BaseView.prototype.scrollDirection=function(){return this.options?.scrollDirection||"y"},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,this)&&(navDrawerInstance.openIfClosed(!0),e.preventDefault());break;case"moverightedge":"rtl"===document.dir&&shouldShowLeftNav(e,this)&&(navDrawerInstance.openIfClosed(!0),e.preventDefault());break;case"back":onBackCommand.call(this,e)}},BaseView.prototype.getFocusContainerElement=function(){var scroller=this.scroller;if(this.view===scroller){var elem=scroller.querySelector(".scrollSlider");if(elem)return elem}return scroller},BaseView.prototype.enablePushDownFocusPreview=function(){return!1},BaseView.prototype.enableFocusPreview=function(){return!!layoutManager.tv&&("y"!==this.scrollDirection()||this.enablePushDownFocusPreview())},BaseView.prototype.getRequestedImageTypes=function(){let fields="Primary,Backdrop,Thumb";return this.enableFocusPreview()&&(fields+=",Logo"),fields},BaseView.prototype.getApiClient=function(){var serverId=this.params.serverId;return serverId?connectionManager.getApiClient(serverId):connectionManager.currentApiClient()},BaseView.prototype.getRequestedItemFields=function(){return this.requestedItemFields},BaseView.prototype.autoFocus=function(options){options=Object.assign({skipIfNotEnabled:!0},options);let elem;var view=this.view;return view&&(elem=focusManager.autoFocus(view,options))?elem:(!options.skipIfNotEnabled||focusManager.isAutoFocusEnabled())&&(elem=mainTabsManager.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.getAutoBackdropItemTypes=function(){return[]},BaseView.prototype.onResume=function(options){this.paused=!1,!this.onWindowInputCommandFn&&this.enableWindowInputCommands()&&(this.onWindowInputCommandFn=this.onWindowInputCommand.bind(this),onWindowInputCommandFn=this.onWindowInputCommandFn)&&inputManager.on(window,onWindowInputCommandFn);var onWindowInputCommandFn=this.scroller;onWindowInputCommandFn&&onWindowInputCommandFn.resume&&onWindowInputCommandFn.resume(),showAutoBackdropIfNeeded(this)},BaseView.prototype.onPause=function(options){this.paused=!0,destroyWindowInputCommand(this);var scroller=this.scroller;scroller&&scroller.pause&&scroller.pause()},BaseView.prototype.isDestroyed=function(){return null==this.view},BaseView.prototype.destroy=function(){var view=this.view,onInputCommandFn=this.onInputCommandFn;onInputCommandFn&&view&&inputManager.off(view,onInputCommandFn),this.onInputCommandFn=null,this.animationSourceElement=null,this.scroller=null,this.view=null,this.params=null,this.paused=null,this.apiClient=null,this.backdropItems=null};export default BaseView; |