EmbyCrackedClient/web/modules/navdrawer/navdrawer.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
8.5 KiB
JavaScript

import dom from"./../dom.js";import browser from"./../browser.js";import globalize from"./../common/globalize.js";import events from"./../emby-apiclient/events.js";import navDrawerContent from"./navdrawercontent.js";import userSettings from"./../common/usersettings/usersettings.js";import"./../emby-elements/emby-scroller/emby-scroller.js";import focusManager from"./../focusmanager.js";import inputManager from"./../common/inputmanager.js";import viewManager from"./../viewmanager/viewmanager.js";import layoutManager from"./../layoutmanager.js";import{appHost}from"./../common/servicelocator.js";require(["css!modules/navdrawer/navdrawer.css"]);let instance,mask,navDrawerElement=document.querySelector(".mainDrawer"),allowBackdropFilter=dom.allowBackdropFilter(),DrawerStates={Closed:0,Open:1,Docked:2,DockedMini:3},previousFocusedElement;function closeOnNavCommand(instance){switch(instance.drawerState){case DrawerStates.Open:instance.close(),previousFocusedElement?(focusManager.focus(previousFocusedElement),previousFocusedElement=null):viewManager.autoFocusCurrentView({skipIfNotEnabled:!1});break;case DrawerStates.Docked:case DrawerStates.DockedMini:previousFocusedElement?(focusManager.focus(previousFocusedElement),previousFocusedElement=null):viewManager.autoFocusCurrentView({skipIfNotEnabled:!1})}}function onInputCommand(e){var command=e.detail.command;switch(command){case"back":layoutManager.tv&&viewManager.currentViewController()?.enableBackMenu&&appHost.supports("exit")&&!browser.electron?appHost.exit():closeOnNavCommand(this),e.preventDefault();break;case"left":"rtl"!==document.dir||e.target.closest("input")&&!inputManager.allowLeftOrRightNav(e.target,command)||(closeOnNavCommand(this),e.preventDefault());break;case"right":"rtl"===document.dir||e.target.closest("input")&&!inputManager.allowLeftOrRightNav(e.target,command)||(closeOnNavCommand(this),e.preventDefault())}}function onMainDrawerClick(e){e.target.closest(".btnPinNavDrawer")&&(instance.drawerState===DrawerStates.Open?(userSettings.drawerStyle("docked"),instance.open(!0)):(instance.closeState=null,userSettings.drawerStyle("closed"),instance.close()));e=e.target.closest(".btnToggleNavDrawer");e&&(instance.drawerState===DrawerStates.Docked?(userSettings.drawerStyle("docked-mini"),instance.open(!0,!0)):instance.drawerState!==DrawerStates.DockedMini&&instance.closeState!==DrawerStates.DockedMini||(instance.closeState=null,userSettings.drawerStyle("closed"),instance.close()))}function createMask(instance){var mask=document.createElement("div");return mask.className="drawer-backdrop"+(layoutManager.tv?" drawer-backdrop-tv":""),dom.addEventListener(mask,dom.whichAnimationEvent(),onMaskTransitionEnd,{passive:!0,capture:!0}),dom.addEventListener(mask,"click",instance.close.bind(instance),{passive:!0}),document.body.appendChild(mask),mask}function setPinIcon(icon,hidden,hoverShow){var btnPinNavDrawerIcon=navDrawerElement.querySelector(".btnPinNavDrawerIcon"),btnPinNavDrawerIcon=(btnPinNavDrawerIcon&&(btnPinNavDrawerIcon.innerHTML=icon),navDrawerElement.querySelector(".btnPinNavDrawer"));if(btnPinNavDrawerIcon){let title;"close"===icon?(title=globalize.translate("Close"),btnPinNavDrawerIcon.classList.remove("btnPinNavDrawer-iconpin"),btnPinNavDrawerIcon.classList.add("btnPinNavDrawer-hovershow")):(title=globalize.translate("HeaderPinSidebar"),btnPinNavDrawerIcon.classList.add("btnPinNavDrawer-iconpin"),btnPinNavDrawerIcon.classList.remove("btnPinNavDrawer-hovershow")),btnPinNavDrawerIcon.title=title,btnPinNavDrawerIcon.setAttribute("aria-label",title),hidden?btnPinNavDrawerIcon.classList.add("hide"):btnPinNavDrawerIcon.classList.remove("hide")}hidden=navDrawerElement.querySelector(".btnToggleNavDrawer");hidden&&("close"===icon?hidden.classList.remove("hide"):hidden.classList.add("hide"))}function onOpenRequested(){this.closeState=this.drawerState===DrawerStates.DockedMini?DrawerStates.DockedMini:null,this.open()}function onNavigated(){this.drawerState===DrawerStates.Open&&closeOnNavCommand(this)}function setRtlClasses(){"rtl"===document.dir?navDrawerElement.classList.add("mainDrawer-rtl"):navDrawerElement.classList.remove("mainDrawer-rtl")}function NavDrawer(){instance=this,dom.addEventListener(navDrawerElement,"click",onMainDrawerClick,{passive:!0}),dom.addEventListener(navDrawerElement,dom.whichTransitionEvent(),onNavDrawerTransitionEnd,{passive:!0,capture:!0}),events.on(navDrawerContent,"open-requested",onOpenRequested.bind(this)),events.on(navDrawerContent,"navigated",onNavigated.bind(this)),this.onInputCommandFn=onInputCommand.bind(this);var onInputCommandFn=this.onInputCommandFn;onInputCommandFn&&inputManager.on(navDrawerElement,onInputCommandFn),setRtlClasses()}events.on(userSettings,"change",function(e,name){"language"===name&&setRtlClasses()});let _scrollingElement;function getScrollingElement(){let elem=_scrollingElement;return elem||(elem=document.scrollingElement||document.documentElement,_scrollingElement=elem),elem}function expandAllCollapsibles(){var elems=navDrawerElement.querySelectorAll(".navDrawerCollapseSection");for(let i=0,length=elems.length;i<length;i++){var elem=elems[i];elem.expand&&elem.expand()}}function onNavDrawerTransitionEnd(e){e.target!==e.currentTarget||this.classList.contains("drawer-open")||this.classList.add("hide")}function onMaskTransitionEnd(e){e.target===e.currentTarget&&(e=mask)&&e.classList.contains("drawer-backdrop-fadeout")&&(e.remove(),mask=null)}NavDrawer.prototype.openIfClosed=function(autoFocus){switch(this.drawerState){case 1:case 2:this.autoFocus({skipIfNotEnabled:!1});break;case 3:onOpenRequested.call(this),this.autoFocus({skipIfNotEnabled:!1});break;default:this.open(!1,!1,!0)}},NavDrawer.prototype.open=function(isDocked,miniDock,autoFocus){navDrawerContent.onBeforeOpen(autoFocus);var focused,autoFocus=isDocked?miniDock?DrawerStates.DockedMini:DrawerStates.Docked:DrawerStates.Open,miniDock=this.drawerState;autoFocus!==miniDock&&((focused=document.activeElement)&&!navDrawerElement.contains(focused)&&(previousFocusedElement=focused),this.drawerState=autoFocus,isDocked?(focusManager.popScope(navDrawerElement),autoFocus===DrawerStates.DockedMini?(navDrawerElement.classList.add("drawer-docked","mainDrawer-mini"),expandAllCollapsibles()):(navDrawerElement.classList.add("drawer-docked"),navDrawerElement.classList.remove("mainDrawer-mini")),setPinIcon("close")):(focusManager.pushScope(navDrawerElement),navDrawerElement.classList.remove("drawer-docked","mainDrawer-mini"),navDrawerElement.classList.add("drawer-opening"),setPinIcon("view_sidebar",null,!0)),navDrawerElement.classList.remove("hide"),navDrawerElement.offsetWidth,allowBackdropFilter?navDrawerElement.classList.add("drawer-open","drawer-open-backdropfilter"):navDrawerElement.classList.add("drawer-open"),navDrawerElement.classList.remove("drawer-opening"),isDocked?(this.hideMask(),getScrollingElement().classList.remove("withDialogOpen")):(this.showMask(),getScrollingElement().classList.add("withDialogOpen")),autoFocus!==miniDock)&&events.trigger(this,"drawer-state-change",[autoFocus])},NavDrawer.prototype.autoFocus=function(options){return navDrawerContent.autoFocus(options)},NavDrawer.prototype.close=function(){var currentDrawerState,previousDrawerState,newDrawerState;this.closeState===DrawerStates.DockedMini?(this.closeState=null,this.open(!0,!0,!1)):(focusManager.popScope(navDrawerElement),currentDrawerState=this.drawerState,previousDrawerState=this.drawerState,newDrawerState=this.drawerState=DrawerStates.Closed,navDrawerElement.classList.remove("drawer-open","drawer-opening","drawer-open-backdropfilter","drawer-docked","mainDrawer-mini"),this.hideMask(),getScrollingElement().classList.remove("withDialogOpen"),currentDrawerState!==DrawerStates.Docked&&currentDrawerState!==DrawerStates.DockedMini||navDrawerElement.classList.add("hide"),setPinIcon("view_sidebar",null,!1),newDrawerState!==previousDrawerState&&events.trigger(this,"drawer-state-change",[newDrawerState]))},NavDrawer.prototype.onViewShow=function(e){navDrawerContent.onViewShow(e)},NavDrawer.prototype.toggle=function(){this.drawerState?this.close():this.open()},NavDrawer.prototype.togglePinState=function(){this.drawerState===DrawerStates.Open?(this.closeState,DrawerStates.DockedMini,userSettings.drawerStyle("docked-mini"),this.open(!0,!0)):this.drawerState===DrawerStates.Docked&&(userSettings.drawerStyle("docked-mini"),this.open(!0,!0))},NavDrawer.prototype.showMask=function(){mask=mask||createMask(this)},NavDrawer.prototype.hideMask=function(){var maskElement=mask;maskElement&&maskElement.classList.add("drawer-backdrop-fadeout")},NavDrawer.prototype.getDrawerState=function(){return this.drawerState};export default new NavDrawer;