1 line
8.6 KiB
JavaScript
1 line
8.6 KiB
JavaScript
define(["exports","./../layoutmanager.js","./../focusmanager.js","./../common/pluginmanager.js","./../common/usersettings/usersettings.js","./../emby-apiclient/events.js","./../common/appsettings.js"],function(_exports,_layoutmanager,_focusmanager,_pluginmanager,_usersettings,_events,_appsettings){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var currentViewInfo,mainAnimatedPages,allPages=[],currentUrls=[],selectedPageIndex=-1;function disableRestoreOnCurrentViews(){for(var views=allPages,i=0,length=views.length;i<length;i++){var view=views[i];view&&(view.allowRestore=!1)}}function setControllerClass(view,options){return!options.controllerFactory&&(view=view.getAttribute("data-controller"))?(view.startsWith("__plugin/")&&(view=view.substring("__plugin/".length)),view=_pluginmanager.default.getConfigurationResourceUrl(view),require([view]).then(function(deps){options.controllerFactory=deps[0]})):Promise.resolve()}function normalizeNewView(options,isPluginpage){var options=options.view,hasScript=!!isPluginpage&&options.includes("<script"),elem=function(html,hasScript){return hasScript&&(html=(html=html.replaceAll("\x3c!--<script","<script")).replaceAll("<\/script>--\x3e","<\/script>")),(hasScript=document.createElement("div")).innerHTML=html,hasScript.querySelector('.view,div[data-role="page"]')}(options,hasScript),hasScript=hasScript&&null!=elem.querySelector("script"),hasjQuery=!1;return{elem:elem,hasScript:hasScript,hasjQuery:hasjQuery=isPluginpage?options.includes("jQuery")||options.includes("$(")||options.includes("$."):hasjQuery}}function onBeforeChange(previousView,newView,isRestored,isBack,options){previousView&&dispatchViewEvent(previousView,null,"viewbeforehide",newView),console.log("viewManager.onBeforeChange - processing path: isBack: "+isBack);isRestored=getViewEventDetail(newView,options,isRestored,isBack,previousView),isBack=isRestored.detail.navMenuId;return isBack||"search"===(null==(previousView=isRestored.detail.params)?void 0:previousView.type)&&(isBack="search"),isBack=isBack||(isBack=window.location.href.toString()).substring(isBack.indexOf("#!")+2),isRestored.detail.navMenuId=isBack,newView.initComplete||(newView.initComplete=!0,options.controllerFactory&&(newView.controller=new options.controllerFactory(newView,isRestored.detail.params)),dispatchViewEvent(newView,isRestored,"viewinit")),options.controller&&newView.controller&&(newView.controller.name=options.controller.replaceAll(".js","").replaceAll(".","").replaceAll("/","-"),newView.classList.add("view-"+newView.controller.name)),dispatchViewEvent(newView,isRestored,"viewbeforeshow"),newView.controller}function onViewChange(previousView,newViewInfo,options,isRestore,isBack){previousView&&dispatchViewEvent(previousView,null,"viewhide");var newView=(currentViewInfo=newViewInfo).view,controller=newView.controller;return((controller?controller.transitionPromise:null)||Promise.resolve()).then(function(){var eventDetail=getViewEventDetail(newView,options,isRestore,isBack);return isRestore?newView.activeElement&&document.body.contains(newView.activeElement)&&_focusmanager.default.isCurrentlyFocusable(newView.activeElement)?_focusmanager.default.focus(newView.activeElement):controller.autoFocus?controller.autoFocus({skipIfNotEnabled:!0}):_focusmanager.default.autoFocus(newView,{skipIfNotEnabled:!0}):!1!==options.autoFocus&&(controller.autoFocus?controller.autoFocus({skipIfNotEnabled:!0}):_focusmanager.default.autoFocus(newView,{skipIfNotEnabled:!0})),newView.dispatchEvent(new CustomEvent("viewshow",eventDetail)),newView.dispatchEvent(new CustomEvent("pageshow",eventDetail)),newView})}function dispatchViewEvent(view,eventInfo,eventName,newView){eventInfo=eventInfo||{detail:{newView:newView},bubbles:!0,cancelable:!1};view.dispatchEvent(new CustomEvent(eventName,eventInfo));view.dispatchEvent(new CustomEvent(eventName.replace("view","page"),eventInfo))}function getViewEventDetail(view,options,isRestore,isBack,previousView){var params=options.params;return options.isRestored=isRestore,options.isBack=isBack,options.params=params,options.previousView=previousView,null==options.title&&(options.title=view.getAttribute("data-title")||null),options.helpUrl||(options.helpUrl=view.getAttribute("data-helpurl")||null),3===options.windowScroll&&(options.windowScroll=!view.classList.contains("scrollFrameY"),options.windowScroll||(options.adjustHeaderForEmbeddedScroll=!0)),{detail:options,bubbles:!0,cancelable:!1}}function ViewManager(){}_events.default.on(_layoutmanager.default,"modechange",disableRestoreOnCurrentViews),_events.default.on(_usersettings.default,"change",function(e,name){switch(name){case"language":case"datetimelocale":case"tvhome":disableRestoreOnCurrentViews()}}),_events.default.on(_appsettings.default,"change",function(e,name){"name"===name&&disableRestoreOnCurrentViews()}),ViewManager.prototype.loadView=function(options,signal){var previousView=currentViewInfo?currentViewInfo.view:null;previousView&&(previousView.activeElement=document.activeElement);var pageIndex=selectedPageIndex+1,isPluginpage=(3<=pageIndex&&(pageIndex=0),options.isPluginPage),newViewInfo=normalizeNewView(options,isPluginpage),newView=newViewInfo.elem,dependencies="string"==typeof newView?null:newView.getAttribute("data-require"),dependencyPromises=[];return(dependencies=dependencies?dependencies.split(","):[]).length&&dependencyPromises.push(require(dependencies)),isPluginpage&&(dependencyPromises.push(Emby.importModule("./legacy/dashboard.js")),dependencyPromises.push(require(["css!legacy/dashboard.css"]))),newViewInfo.hasjQuery&&dependencyPromises.push(require(["jQuery"])),Promise.all(dependencyPromises).then(function(){var splash,currentPage=allPages[pageIndex],view=(currentPage&&!function(view){view.activeElement=null,view.controller=null,view.dispatchEvent(new CustomEvent("viewdestroy",{cancelable:!1}))}(currentPage),newView);return"string"==typeof view&&((view=document.createElement("div")).innerHTML=newView),view.classList.add("page"),function(detail,view){var windowScroll=detail.windowScroll;return 3!==windowScroll||(windowScroll=detail.windowScroll=!view.classList.contains("scrollFrameY"))||(detail.adjustHeaderForEmbeddedScroll=!0),!0===windowScroll}(options,view)&&view.classList.add("page-windowScroll"),!mainAnimatedPages&&(mainAnimatedPages=document.querySelector(".mainAnimatedPages"),splash=document.querySelector(".app-splash"))&&splash.parentNode.removeChild(splash),currentPage?newViewInfo.hasScript&&window.$?(view=window.$(view).appendTo(mainAnimatedPages)[0],mainAnimatedPages.removeChild(currentPage)):mainAnimatedPages.replaceChild(view,currentPage):newViewInfo.hasScript&&window.$?view=window.$(view).appendTo(mainAnimatedPages)[0]:mainAnimatedPages.appendChild(view),setControllerClass(allPages[pageIndex]=view,options).then(function(){var controller=onBeforeChange(previousView,view,!1,options.isBack,options);return currentUrls[selectedPageIndex=pageIndex]=options.url,!previousView||controller&&controller.onBeginResume||previousView.classList.add("hide"),options.view=view,onViewChange(previousView,options,options,!1,options.isBack)})})},ViewManager.prototype.tryRestoreView=function(options,signal){var previousView=currentViewInfo?currentViewInfo.view:null,url=(previousView&&(previousView.activeElement=document.activeElement),options.url),index=currentUrls.indexOf(url);if(-1!==index){var view=allPages[index];if(view&&!1!==view.allowRestore)return setControllerClass(view,options).then(function(){console.log("viewManager.tryRestoreView - processing path: isBack: "+options.isBack);var controller=onBeforeChange(previousView,view,!0,options.isBack,options);return selectedPageIndex=index,controller&&controller.onBeginResume||previousView&&(view.classList.remove("hide"),previousView.classList.add("hide")),options.view=view,onViewChange(previousView,options,options,!0,options.isBack)})}return Promise.reject()},ViewManager.prototype.replaceCurrentUrl=function(url){-1!==selectedPageIndex&&(currentUrls[selectedPageIndex]=url)},ViewManager.prototype.currentView=function(){var _currentViewInfo;return null==(_currentViewInfo=currentViewInfo)?void 0:_currentViewInfo.view},ViewManager.prototype.currentViewController=function(){var _currentViewInfo2;return null==(_currentViewInfo2=currentViewInfo)||null==(_currentViewInfo2=_currentViewInfo2.view)?void 0:_currentViewInfo2.controller},ViewManager.prototype.currentViewInfo=function(){return currentViewInfo},ViewManager.prototype.autoFocusCurrentView=function(options){var view=this.currentView();return view?view.controller&&view.controller.autoFocus?view.controller.autoFocus(options):_focusmanager.default.autoFocus(view,options):null};_layoutmanager=new ViewManager;_exports.default=_layoutmanager}); |