Files
Futontime_UI/modules/dialoghelper/dialoghelper.js
2026-02-09 10:48:21 +01:00

1 line
19 KiB
JavaScript

define(["exports","./../approuter.js","./../dom.js","./../focusmanager.js","./../common/inputmanager.js","./../browser.js","./../emby-apiclient/events.js","./../layoutmanager.js","./../gesture/gesture.js"],function(_exports,_approuter,_dom,_focusmanager,_inputmanager,_browser,_events,_layoutmanager,_gesture){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var globalOnOpenCallback,uiDependencies=["css!modules/dialoghelper/dialoghelper.css","css!!tv|modules/dialoghelper/dialoghelper_nontv.css","css!modules/dialoghelper/dialoghelper2.css","css!!tv|modules/dialoghelper/dialoghelper_nontv2.css","css!modules/dialoghelper/dialoghelper3.css"],appMode=globalThis.appMode,SupportsTranslate=CSS.supports("translate","40px 100px"),SupportsPositionAnchoring=!1,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&&hideDialog(dlg)}function onNavigate(e){dlg._closedForNavigation=!0,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"channelup":case"channeldown":case"select":e.stopPropagation();break;case"home":"false"!==dlg.getAttribute("data-blocknav")&&e.preventDefault();break;case"end":case"settings":case"guide":case"recordedtv":case"favorites":e.preventDefault();break;case"back":e.preventDefault(),e.stopPropagation(),requestClose(dlg);break;case"forward":e.preventDefault(),e.stopPropagation()}}function afterClosed(){resolve({element:dlg})}_dom.default.addEventListener(dlg,"preclosing",function(){var elemForEvents=dlg.dialogContainer;elemForEvents&&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),_inputmanager.default.off(dlg,onInputCommand),_events.default.off(_approuter.default,"navigate",onNavigate),window.removeEventListener("popstate",onHashChange)},{once:!0}),_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),_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.isCurrentlyFocusable(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"),isHistoryEnabled(dlg)?setTimeout(afterClosed,1):afterClosed()},{once:!0}),function(dlg){var transparentBackground=dlg.getAttribute("data-transparentbackground")||"false",blurBackground=dlg.getAttribute("data-blurbackground")&&_dom.default.allowBackdropFilter();"true"===transparentBackground&&!blurBackground||(dlg.dialogContainer.classList.add("dialogBackdrop"),"true"===transparentBackground&&dlg.dialogContainer.classList.add("dialogBackdrop-nomouse"),blurBackground&&dlg.dialogContainer.classList.add("dialogBackdrop-blur"),"auto"===transparentBackground&&dlg.dialogContainer.classList.add("dialogBackdrop-auto"),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){e=e.target;this.pointerDownTarget&&this.pointerDownTarget!==this.dialogContainer||e!==this.dialogContainer&&this.contains(e)||requestClose(this);this.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),positionDialog(dlg,!1===(null==(scrollingElement=dlg.dialogOptions)?void 0:scrollingElement.setDialogSize))}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:!1!==(null==(e=this.dialogOptions)?void 0:e.skipAutoFocusIfNotEnabled)}),this.classList.add("afterOpened"))}function isHistoryEnabled(dlg){return"true"===dlg.getAttribute("data-history")}var UnknownDialogHeight=300,UnknownDialogWidth=160;function getPosition(options,dlg,isInitialPositioning){var dlgHeight,dlgWidth,containerHeight,padding,overflowLeft,windowSize=_dom.default.getWindowSize(),pos=function(elem,windowSize){return document?{top:(elem=elem.getBoundingClientRect()).top,bottom:windowSize.innerHeight-elem.bottom,left:elem.left,right:windowSize.innerWidth-elem.right,width:elem.width,height:elem.height,verticalPositionProp:"top",horizontalPositionProp:"left"}:null}(options.positionTo,windowSize),positionX=options.positionX,positionY=options.positionY,isRTL="rtl"===document.dir;if(isRTL)switch(positionX){case"right":positionX="left";break;case"left":positionX="right";break;case"after":positionX="before";break;case"before":positionX="after"}switch(null!=options.positionClientY&&(positionY="top"),null!=options.positionClientX&&(positionX="left"),positionY){case"bottom":pos.top+=pos.height||0,pos.height&&(pos.top+=2);break;case"above":pos.verticalPositionProp="bottom";break;case"top":case"match":break;default:pos.top+=(pos.height||0)/2}switch(positionX){case"after":isRTL||(pos.left+=pos.width||0);break;case"right":isRTL||(pos.horizontalPositionProp="right");break;case"before":isRTL||(pos.horizontalPositionProp="right",pos.right+=pos.width||0);break;case"left":case"match":break;default:null==dlgWidth&&(dlgWidth=dlg.offsetWidth||UnknownDialogWidth),pos.left+=(pos.width||0)/2,pos.left-=dlgWidth/2}switch(pos.offsetTop=options.offsetTop||0,pos.offsetLeft=options.offsetLeft||0,null!=options.positionClientY&&(pos.offsetTop+=options.positionClientY-pos.top),null!=options.positionClientX&&(pos.offsetLeft+=options.positionClientX-pos.left),pos.top+=pos.offsetTop||0,pos.left+=pos.offsetLeft||0,positionY){case"above":pos.bottom+=pos.height;break;case"bottom":case"center":case"top":case"match":break;default:isInitialPositioning||(null==dlgHeight&&(dlgHeight=dlg.offsetHeight||UnknownDialogHeight),pos.top-=dlgHeight/2)}return isInitialPositioning||(containerHeight=windowSize.innerHeight,windowSize=windowSize.innerWidth,padding=_layoutmanager.default.tv?30:20,null==dlgWidth&&(dlgWidth=dlg.offsetWidth||UnknownDialogWidth),0<(overflowLeft=pos.left+dlgWidth-windowSize+padding)&&(pos.left-=overflowLeft),0<(overflowLeft=pos.right+dlgWidth-windowSize+padding)&&(pos.right-=overflowLeft),!1!==options.autoRepositionY&&(null==dlgHeight&&(dlgHeight=dlg.offsetHeight||UnknownDialogHeight),0<(windowSize=pos.top+dlgHeight-containerHeight+padding)&&pos.top>containerHeight/2&&(pos.top-=windowSize),0<(overflowLeft=pos.bottom+dlgHeight-containerHeight+padding))&&pos.bottom>containerHeight/2&&(pos.bottom-=overflowLeft)),pos.top=Math.max(pos.top,10),pos.bottom=Math.max(pos.bottom,10),pos.left=Math.max(pos.left,10),pos.right=Math.max(pos.right,10),pos.positionY=positionY,pos.positionX=positionX,pos}function enablePositioning(dialogOptions){return dialogOptions.positionTo&&"fullscreen"!==dialogOptions.size}var AnchorId=0;function positionDialog(dlg,isInitialPositioning){var options=dlg.dialogOptions,isInitialPositioning=enablePositioning(options)?getPosition(options,dlg,isInitialPositioning):null;if(isInitialPositioning){var positionYAnchored,positionXAnchored,anchorName,container=options.positionTo&&SupportsPositionAnchoring?(elem=options.positionTo,(container=elem.closest(".card,.listItem"))?container.querySelector(".cardFooterContent")||container.querySelector(".cardContent,.listItemContent")||container:elem):null,elem=(dlg.style.position="fixed",isInitialPositioning[isInitialPositioning.horizontalPositionProp]),verticalPos=isInitialPositioning[isInitialPositioning.verticalPositionProp];if(container){switch(isInitialPositioning.positionY){case"above":dlg.style.bottom="anchor(top)",positionYAnchored=!0;break;case"bottom":dlg.style.top="anchor(bottom)",positionYAnchored=!0;break;case"center":dlg.style.top="anchor(center)",positionYAnchored=!0;break;case"top":dlg.style.top="anchor(top)",positionYAnchored=!0}switch(isInitialPositioning.positionX){case"left":dlg.style.left="anchor(left)",positionXAnchored=!0;break;case"right":case"before":dlg.style.right="anchor(left)",positionXAnchored=!0;break;case"after":dlg.style.left="anchor(right)",positionXAnchored=!0}}(positionXAnchored||positionYAnchored)&&((anchorName=container.style.anchorName)||(anchorName="--dialoganchor"+AnchorId,AnchorId++,container.style.anchorName=anchorName),dlg.style.positionAnchor=anchorName,null!=(anchorName=dlg.dialogContainer)&&anchorName.classList.add("dialogBackdrop-anchored"),anchorName=[],positionYAnchored&&anchorName.push("flip-block"),positionXAnchored&&anchorName.push("flip-inline"),anchorName.length)&&(dlg.style.positionTryFallbacks=anchorName.join(",")),positionXAnchored?dlg.style.marginLeft=isInitialPositioning.offsetLeft+"px":dlg.style[isInitialPositioning.horizontalPositionProp]=elem+"px",positionYAnchored?dlg.style.marginTop=isInitialPositioning.offsetTop+"px":dlg.style[isInitialPositioning.verticalPositionProp]=verticalPos+"px",!1!==options.setDialogSize&&(anchorName="android"===appMode?"var(--window-inset-bottom, 0)":"env(safe-area-inset-bottom, 0)",options.fixedSize?dlg.style.height=positionYAnchored?"calc(98% - anchor(bottom) - "+anchorName+")":"calc(98% - "+verticalPos+"px - "+anchorName+")":positionYAnchored||(dlg.style.maxHeight="calc(98% - "+verticalPos+"px - "+anchorName+")"),options.minWidthToElement&&isInitialPositioning.width)&&(options.fixedSize?dlg.style.width=positionXAnchored?"anchor-size(width)":isInitialPositioning.width+"px":dlg.style.minWidth=positionXAnchored?"anchor-size(width)":isInitialPositioning.width+"px")}}function isOpened(dlg){return!dlg.classList.contains("hide")}function requestClose(dlg,forceClose){!isOpened(dlg)||dlg.queryCloseHandler&&!dlg.queryCloseHandler(dlg,forceClose)||close(dlg)}function close(dlg){isOpened(dlg)&&(isHistoryEnabled(dlg)?_approuter.default.back():hideDialog(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 hideDialog(dlg){dlg.gesture&&(dlg.gesture.destroy(),dlg.gesture=null),dlg.classList.contains("hide")||(dlg.dispatchEvent(new CustomEvent("preclosing",{bubbles:!1,cancelable:!1})),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){!_layoutmanager.default.tv&&SupportsTranslate&&dlg.classList.contains("dialog-swipe-close")&&!function(dlg){var gesture=new _gesture.default(dlg);(dlg.gesture=gesture).on("panmove",function(event){var target=event.target;if(target.closest('.dragHandle,input[type="range"]'))dlg.classList.remove("dialog-dragging"),gesture.isScrolling=!0,gesture.isDragging=null;else{var target=target.closest(".emby-scroller.scrollY"),diff=gesture.touchMoveY;if(target){target=target.getScrollTop();if(diff<0&&target<=0)return dlg.classList.remove("dialog-dragging"),gesture.isScrolling=!0,void(gesture.isDragging=null);if(0!==target)return dlg.classList.remove("dialog-dragging"),gesture.isScrolling=!0,void(gesture.isDragging=null)}gesture.isScrolling||(null==gesture.isSliding&&(gesture.isSliding="slideup"===getComputedStyle(dlg).getPropertyValue("animation-name")),gesture.isDragging=gesture.isSliding,gesture.isDragging&&(event.preventDefault(),dlg.classList.add("dialog-draggable","dialog-dragging"),dlg.style.translate="0 "+Math.max(Math.floor(diff),0)+"px"))}}),gesture.on("panend",function(event){dlg.classList.remove("dialog-dragging"),dlg.style.translate="none",gesture.isScrolling=null}),gesture.on("swipedown",function(){dlg.classList.remove("dialog-dragging"),dlg.style.translate="none",gesture.isDragging&&(gesture.isDragging=null,requestClose(dlg))})}(dlg),dlg.classList.remove("dialog-close"),globalOnOpenCallback&&globalOnOpenCallback(dlg),dlg.remove();var dialogContainer=document.createElement("div");return dialogContainer.classList.add("dialogContainer"),dialogContainer.appendChild(dlg),dlg.dialogContainer=dialogContainer,document.body.appendChild(dialogContainer),new Promise(function(resolve,reject){DialogHashHandler(dlg,"dlg"+Date.now(),resolve)})},close:close,createDialog:function(options){var positionX=(options=options||{}).positionX,transformOrigin=options.transformOrigin;if("rtl"===document.dir){switch(positionX){case"right":positionX="left";break;case"left":positionX="right";break;case"after":positionX="before";break;case"before":positionX="after"}"right top"===transformOrigin?transformOrigin="left top":"left top"===transformOrigin?transformOrigin="right top":"left bottom"===transformOrigin?transformOrigin="right bottom":"right bottom"===transformOrigin&&(transformOrigin="left bottom")}var dlg=options.dialog||document.createElement("div"),autoCenter=(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.blockInputCommandNavigation&&dlg.setAttribute("data-blocknav","false"),!1===options.setCurrentFocusScope&&dlg.setAttribute("data-focusscope","false"),options.removeOnClose&&dlg.setAttribute("data-removeonclose","true"),options.transparentBackground&&dlg.setAttribute("data-transparentbackground",options.transparentBackground),options.blurBackground&&"fullscreen"!==options.size&&dlg.setAttribute("data-blurbackground","true"),options.size&&dlg.classList.add("dialog-fixedSize","dialog-"+options.size),!1!==options.autoCenter),isFullscreen="fullscreen"===options.size;if(!1===options.autoLowResLayout||_layoutmanager.default.tv||isFullscreen||(dlg.classList.add("dialog-fullscreen-lowres"),options.lowResXMargin&&dlg.classList.add("dialog-fullscreen-lowres-xmargin"),options.lowResAutoHeight&&dlg.classList.add("dialog-fullscreen-lowres-autoheight"),options.lowResAutoHeight&&!autoCenter&&!options.size&&options.lowerLowResThreshold)||dlg.classList.add("dialog-fullscreen-lowres-higherthreshold"),autoCenter&&!dlg.classList.contains("dialog-fixedSize")&&dlg.classList.add("centeredDialog"),!1!==options.swipeClose&&dlg.classList.add("dialog-swipe-close"),enablePositioning(options))if(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"):"right bottom"===transformOrigin?dlg.classList.add("dialog-transformorigin-rightbottom"):"left bottom"===transformOrigin&&dlg.classList.add("dialog-transformorigin-leftbottom");else if("bottom"===options.positionY)switch(positionX){case"right":case"after":dlg.classList.add("dialog-transformorigin-lefttop");break;case"left":case"before":dlg.classList.add("dialog-transformorigin-righttop");break;default:dlg.classList.add("dialog-transformorigin-top")}else if("top"===options.positionY)switch(positionX){case"right":case"after":dlg.classList.add("dialog-transformorigin-lefttop");break;case"left":case"before":dlg.classList.add("dialog-transformorigin-righttop");break;default:dlg.classList.add("dialog-transformorigin-bottom")}return(dlg.dialogOptions=options).queryCloseHandler&&(dlg.queryCloseHandler=options.queryCloseHandler),dlg},setOnOpen:function(val){globalOnOpenCallback=val},positionDialog:positionDialog}});