1 line
11 KiB
JavaScript
1 line
11 KiB
JavaScript
define(["exports","./../approuter.js","./../dom.js","./../focusmanager.js","./../common/inputmanager.js","./../browser.js","./../emby-apiclient/events.js"],function(_exports,_approuter,_dom,_focusmanager,_inputmanager,_browser,_events){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var globalOnOpenCallback,uiDependencies=["css!modules/dialoghelper/dialoghelper.css"],appMode=globalThis.appMode,allowHistory=_browser.default.tv&&"standalone"===(appMode||"standalone");uiDependencies.length&&require(uiDependencies);var AnimationSupported=CSS.supports("animation-name","a")&&_dom.default.supportsEventListenerOnce();function enableAnimation(dlg){return!(!AnimationSupported||dlg&&dlg.classList.contains("dialog-noanimation"))}function tryRemoveElement(elem){try{elem.remove()}catch(err){console.log("Error removing dialog element: "+err)}}function getScrollingElement(){return document.scrollingElement||document.documentElement}function DialogHashHandler(dlg,hash,resolve){var originalUrl=window.location.href,activeElement=document.activeElement,removeScrollLockOnClose=!1;function onHashChange(e){var isBack=originalUrl===window.location.href;!isBack&&isOpened(dlg)||window.removeEventListener("popstate",onHashChange),isBack&&closeDialog(dlg)}function onDialogClick(e){var link=e.target.closest("a");link&&link.href&&!link.getAttribute("target")&&(e.preventDefault(),e.stopPropagation(),close(this),this.hrefOnClose=link)}function onNavigate(e){close(dlg)}function onInputCommand(e){var command=e.detail.command;switch(console.log("dialogHelper input command: "+command),command){case"left":case"right":case"up":case"down":case"pageup":case"pagedown":case"select":e.stopPropagation();break;case"home":case"end":case"settings":case"guide":case"recordedtv":case"favorites":case"channelup":case"channeldown":e.preventDefault();break;case"back":isHistoryEnabled(dlg)||(e.preventDefault(),e.stopPropagation(),closeDialog(dlg));break;case"forward":e.preventDefault(),e.stopPropagation()}}_dom.default.addEventListener(dlg,"close",function(){(elemForEvents=dlg.dialogContainer)&&dlg.boundDocumentMouseDown&&(_dom.default.removeEventListener(elemForEvents,window.PointerEvent?"pointerdown":"mousedown",dlg.boundDocumentMouseDown,{passive:!0}),dlg.boundDocumentMouseDown=null),elemForEvents&&dlg.boundDocumentClick&&(_dom.default.removeEventListener(elemForEvents,"click",dlg.boundDocumentClick,{passive:!0}),dlg.boundDocumentClick=null),_dom.default.removeEventListener(dlg,"click",onDialogClick,{capture:!0}),_inputmanager.default.off(dlg,onInputCommand),_events.default.off(_approuter.default,"navigate",onNavigate),window.removeEventListener("popstate",onHashChange),dlg.classList.remove("opened"),removeScrollLockOnClose&&getScrollingElement().classList.remove("withDialogOpen"),!1!==(null==(elemForEvents=dlg.dialogOptions)?void 0:elemForEvents.refocus)&&activeElement&&_focusmanager.default.focus(activeElement);var elemForEvents=dlg.dialogContainer;"false"!==dlg.getAttribute("data-removeonclose")?elemForEvents?(function(dlg){var onAnimationFinish,backdrop=dlg.dialogContainer;backdrop&&(onAnimationFinish=function(){tryRemoveElement(backdrop)},enableAnimation(dlg)?(backdrop.classList.remove("dialogBackdropOpened"),setTimeout(onAnimationFinish,300)):onAnimationFinish())}(dlg),dlg.dialogContainer=null):tryRemoveElement(dlg):elemForEvents&&elemForEvents.classList.remove("dialogBackdropOpened"),setTimeout(function(){dlg.hrefOnClose&&(dlg.hrefOnClose.click(),dlg.hrefOnClose=null),resolve({element:dlg})},1)},{once:!0}),function(dlg){var transparentBackground=dlg.getAttribute("data-transparentbackground"),blurBackground=dlg.getAttribute("data-blurbackground")&&_dom.default.allowBackdropFilter();transparentBackground&&!blurBackground||(dlg.dialogContainer.classList.add("dialogBackdrop"),transparentBackground&&dlg.dialogContainer.classList.add("dialogBackdrop-nomouse"),blurBackground&&dlg.dialogContainer.classList.add("dialogBackdrop-blur"),dlg.dialogContainer.offsetWidth,dlg.dialogContainer.classList.add("dialogBackdropOpened"));setTimeout(function(){this.boundDocumentMouseDown||(this.boundDocumentMouseDown=function(e){this.pointerDownTarget=e.target}.bind(this));var elemForEvents=this.dialogContainer;elemForEvents&&(_dom.default.addEventListener(elemForEvents,window.PointerEvent?"pointerdown":"mousedown",this.boundDocumentMouseDown,{passive:!0}),this.boundDocumentClick||(this.boundDocumentClick=function(e){var dlg=this,e=e.target;if(!(dlg.pointerDownTarget&&dlg.pointerDownTarget!==dlg.dialogContainer||e!==dlg.dialogContainer&&dlg.contains(e))){if(dlg.queryCloseHandler&&!dlg.queryCloseHandler(dlg))return;close(dlg)}dlg.pointerDownTarget=null}.bind(this)),_dom.default.addEventListener(elemForEvents,"click",this.boundDocumentClick,{passive:!0}))}.bind(dlg),100)}(dlg),dlg.classList.remove("hide"),dlg.classList.add("opened"),dlg.dispatchEvent(new CustomEvent("open",{bubbles:!1,cancelable:!1}));var scrollingElement=getScrollingElement();"true"!==dlg.getAttribute("data-lockscroll")||scrollingElement.classList.contains("withDialogOpen")||(scrollingElement.classList.add("withDialogOpen"),removeScrollLockOnClose=!0),function(dlg){enableAnimation(dlg)?_dom.default.addEventListener(dlg,"animationend",onOpenAnimationFinish,{passive:!0}):onOpenAnimationFinish.call(dlg,{target:dlg,currentTarget:dlg})}(dlg),isHistoryEnabled(dlg)&&(_approuter.default.pushState({dialogId:hash},"Dialog","#"+hash),window.addEventListener("popstate",onHashChange)),_inputmanager.default.on(dlg,onInputCommand),_events.default.on(_approuter.default,"navigate",onNavigate),_dom.default.addEventListener(dlg,"click",onDialogClick,{capture:!0}),positionDialog(dlg)}function onOpenAnimationFinish(e){e.target===e.currentTarget&&(_dom.default.removeEventListener(this,"animationend",onOpenAnimationFinish,{passive:!0}),"false"!==this.getAttribute("data-focusscope")&&_focusmanager.default.pushScope(this),this.dispatchEvent(new CustomEvent("opened",{bubbles:!1,cancelable:!1})),"true"===this.getAttribute("data-autofocus"))&&_focusmanager.default.autoFocus(this,{skipIfNotEnabled:!0})}function isHistoryEnabled(dlg){return"true"===dlg.getAttribute("data-history")}function getPosition(options,dlg){elem=options.positionTo;var elem=document?{top:(elem=elem.getBoundingClientRect()).top,left:elem.left,width:elem.width,height:elem.height}:null,positionX=options.positionX,height=("rtl"===document.dir&&("right"===positionX?positionX="left":"left"===positionX&&(positionX="right")),"bottom"===options.positionY?elem.top+=elem.height||0:"top"!==options.positionY&&"above"!==options.positionY&&(elem.top+=(elem.height||0)/2),dlg.offsetHeight||300),dlg=dlg.offsetWidth||160;return"right"===positionX?elem.left+=elem.width||0:"left"===positionX?elem.left-=Math.max(elem.width||0,dlg):"match"!==positionX&&(elem.left+=(elem.width||0)/2,elem.left-=dlg/2),null!=options.positionClientX&&(elem.left=options.positionClientX,elem.top=options.positionClientY,"right"!==positionX)&&("left"===positionX?elem.left-=dlg:"match"!==positionX&&(elem.left-=dlg/2)),"above"===options.positionY?elem.top-=height:"bottom"!==options.positionY&&"center"!==options.positionY&&"top"!==options.positionY&&(elem.top-=height/2),elem.top+=options.offsetTop||0,elem.left+=options.offsetLeft||0,!1!==options.preventOverflow&&(options=(positionX=_dom.default.getWindowSize()).innerHeight,positionX=positionX.innerWidth,dlg=elem.left+dlg-positionX,positionX=elem.top+height-options,0<dlg&&(elem.left-=20+dlg),0<positionX&&(elem.top-=20+positionX),elem.top=Math.max(elem.top,10),elem.left=Math.max(elem.left,10)),elem}function enablePositioning(dialogOptions){return dialogOptions.positionTo&&"fullscreen"!==dialogOptions.size}function positionDialog(dlg){var envCss,options=dlg.dialogOptions,pos=enablePositioning(options)?getPosition(options,dlg):null;pos&&(dlg.style.position="fixed",dlg.style.left=pos.left+"px",dlg.style.top=pos.top+"px",!1!==options.setDialogSize)&&(envCss="android"===appMode?"var(--window-inset-bottom, 0)":"env(safe-area-inset-bottom, 0)",options.fixedSize?dlg.style.height="calc(98% - "+pos.top+"px - "+envCss+")":dlg.style.maxHeight="calc(98% - "+pos.top+"px - "+envCss+")",options.minWidthToElement)&&pos.width&&(options.fixedSize?dlg.style.width=pos.width+"px":dlg.style.minWidth=pos.width+"px")}function isOpened(dlg){return!dlg.classList.contains("hide")}function close(dlg){isOpened(dlg)&&(isHistoryEnabled(dlg)?_approuter.default.back():closeDialog(dlg))}function onCloseAnimationFinish(e){e.target===e.currentTarget&&(_dom.default.removeEventListener(this,"animationend",onCloseAnimationFinish,{passive:!0}),_focusmanager.default.popScope(this),this.classList.add("hide"),this.dispatchEvent(new CustomEvent("close",{bubbles:!1,cancelable:!0})))}function closeDialog(dlg){dlg.classList.contains("hide")||(dlg.dispatchEvent(new CustomEvent("closing",{bubbles:!1,cancelable:!1})),dlg.classList.add("dialog-close"),enableAnimation(dlg)?_dom.default.addEventListener(dlg,"animationend",onCloseAnimationFinish,{passive:!0}):onCloseAnimationFinish.call(dlg,{target:dlg,currentTarget:dlg}))}_exports.default={open:function(dlg){dlg.classList.remove("dialog-close"),globalOnOpenCallback&&globalOnOpenCallback(dlg);var parent=dlg.parentNode;return parent&&parent.removeChild(dlg),(parent=document.createElement("div")).classList.add("dialogContainer"),parent.appendChild(dlg),dlg.dialogContainer=parent,document.body.appendChild(parent),new Promise(function(resolve,reject){DialogHashHandler(dlg,"dlg"+Date.now(),resolve)})},close:close,createDialog:function(options){var positionX=(options=options||{}).positionX,transformOrigin=options.transformOrigin,dlg=("rtl"===document.dir&&("right"===positionX?positionX="left":"left"===positionX&&(positionX="right"),"right top"===transformOrigin?transformOrigin="left top":"left top"===transformOrigin&&(transformOrigin="right top")),document.createElement("div"));return dlg.classList.add("hide","focuscontainer"),dlg.setAttribute("data-lockscroll","true"),allowHistory&&!1!==options.enableHistory&&dlg.setAttribute("data-history","true"),!1!==options.autoFocus&&dlg.setAttribute("data-autofocus","true"),dlg.classList.add("dialog","dialog-animated"),!1!==options.animate&&enableAnimation()||dlg.classList.add("dialog-noanimation"),!1===options.setCurrentFocusScope&&dlg.setAttribute("data-focusscope","false"),options.removeOnClose&&dlg.setAttribute("data-removeonclose","true"),options.transparentBackground&&dlg.setAttribute("data-transparentbackground","true"),options.blurBackground&&"fullscreen"!==options.size&&dlg.setAttribute("data-blurbackground","true"),options.size&&dlg.classList.add("dialog-fixedSize","dialog-fullscreen-lowres","dialog-"+options.size),!1===options.autoCenter||dlg.classList.contains("dialog-fixedSize")||dlg.classList.add("centeredDialog"),enablePositioning(options)&&(transformOrigin?"center top"===transformOrigin?dlg.classList.add("dialog-transformorigin-top"):"left top"===transformOrigin?dlg.classList.add("dialog-transformorigin-lefttop"):"right top"===transformOrigin?dlg.classList.add("dialog-transformorigin-righttop"):"center bottom"===transformOrigin&&dlg.classList.add("dialog-transformorigin-bottom"):"bottom"===options.positionY?"right"===positionX?dlg.classList.add("dialog-transformorigin-lefttop"):"left"===positionX?dlg.classList.add("dialog-transformorigin-righttop"):dlg.classList.add("dialog-transformorigin-top"):"top"===options.positionY&&dlg.classList.add("dialog-transformorigin-bottom")),(dlg.dialogOptions=options).queryCloseHandler&&(dlg.queryCloseHandler=options.queryCloseHandler),dlg},setOnOpen:function(val){globalOnOpenCallback=val},positionDialog:positionDialog}}); |