@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 18.8 kB
JavaScript
import*as Common from"../../core/common/common.js";import*as Platform from"../../core/platform/platform.js";import*as ARIAUtils from"./ARIAUtils.js";import{Constraints}from"./Geometry.js";import{Events as ResizerWidgetEvents,SimpleResizerWidget}from"./ResizerWidget.js";import{ToolbarButton}from"./Toolbar.js";import{Widget}from"./Widget.js";import{ZoomManager}from"./ZoomManager.js";import splitWidgetStyles from"./splitWidget.css.legacy.js";export class SplitWidget extends(Common.ObjectWrapper.eventMixin(Widget)){sidebarElementInternal;mainElement;resizerElementInternal;resizerElementSize;resizerWidget;defaultSidebarWidth;defaultSidebarHeight;constraintsInDip;resizeStartSizeDIP;setting;totalSizeCSS;totalSizeOtherDimensionCSS;mainWidgetInternal;sidebarWidgetInternal;animationFrameHandle;animationCallback;showSidebarButtonTitle;hideSidebarButtonTitle;shownSidebarString;hiddenSidebarString;showHideSidebarButton;isVerticalInternal;sidebarMinimized;detaching;sidebarSizeDIP;savedSidebarSizeDIP;secondIsSidebar;shouldSaveShowMode;savedVerticalMainSize;savedHorizontalMainSize;showModeInternal;savedShowMode;constructor(e,t,i,s,n,r){super(!0),this.element.classList.add("split-widget"),this.registerRequiredCSS(splitWidgetStyles),this.contentElement.classList.add("shadow-split-widget"),this.sidebarElementInternal=this.contentElement.createChild("div","shadow-split-widget-contents shadow-split-widget-sidebar vbox"),this.mainElement=this.contentElement.createChild("div","shadow-split-widget-contents shadow-split-widget-main vbox"),this.mainElement.createChild("slot").name="insertion-point-main",this.sidebarElementInternal.createChild("slot").name="insertion-point-sidebar",this.resizerElementInternal=this.contentElement.createChild("div","shadow-split-widget-resizer"),this.resizerElementSize=null,this.resizerWidget=new SimpleResizerWidget,this.resizerWidget.setEnabled(!0),this.resizerWidget.addEventListener(ResizerWidgetEvents.ResizeStart,this.onResizeStart,this),this.resizerWidget.addEventListener(ResizerWidgetEvents.ResizeUpdatePosition,this.onResizeUpdate,this),this.resizerWidget.addEventListener(ResizerWidgetEvents.ResizeEnd,this.onResizeEnd,this),this.defaultSidebarWidth=s||200,this.defaultSidebarHeight=n||this.defaultSidebarWidth,this.constraintsInDip=Boolean(r),this.resizeStartSizeDIP=0,this.setting=i?Common.Settings.Settings.instance().createSetting(i,{}):null,this.totalSizeCSS=0,this.totalSizeOtherDimensionCSS=0,this.mainWidgetInternal=null,this.sidebarWidgetInternal=null,this.animationFrameHandle=0,this.animationCallback=null,this.showSidebarButtonTitle=Common.UIString.LocalizedEmptyString,this.hideSidebarButtonTitle=Common.UIString.LocalizedEmptyString,this.shownSidebarString=Common.UIString.LocalizedEmptyString,this.hiddenSidebarString=Common.UIString.LocalizedEmptyString,this.showHideSidebarButton=null,this.isVerticalInternal=!1,this.sidebarMinimized=!1,this.detaching=!1,this.sidebarSizeDIP=-1,this.savedSidebarSizeDIP=this.sidebarSizeDIP,this.secondIsSidebar=!1,this.shouldSaveShowMode=!1,this.savedVerticalMainSize=null,this.savedHorizontalMainSize=null,this.setSecondIsSidebar(t),this.innerSetVertical(e),this.showModeInternal=ShowMode.Both,this.savedShowMode=this.showModeInternal,this.installResizer(this.resizerElementInternal)}isVertical(){return this.isVerticalInternal}setVertical(e){this.isVerticalInternal!==e&&(this.innerSetVertical(e),this.isShowing()&&this.updateLayout())}innerSetVertical(e){this.contentElement.classList.toggle("vbox",!e),this.contentElement.classList.toggle("hbox",e),this.isVerticalInternal=e,this.resizerElementSize=null,this.sidebarSizeDIP=-1,this.restoreSidebarSizeFromSettings(),this.shouldSaveShowMode&&this.restoreAndApplyShowModeFromSettings(),this.updateShowHideSidebarButton(),this.resizerWidget.setVertical(!e),this.invalidateConstraints()}updateLayout(e){this.totalSizeCSS=0,this.totalSizeOtherDimensionCSS=0,this.mainElement.style.removeProperty("width"),this.mainElement.style.removeProperty("height"),this.sidebarElementInternal.style.removeProperty("width"),this.sidebarElementInternal.style.removeProperty("height"),this.innerSetSidebarSizeDIP(this.preferredSidebarSizeDIP(),Boolean(e))}setMainWidget(e){this.mainWidgetInternal!==e&&(this.suspendInvalidations(),this.mainWidgetInternal&&this.mainWidgetInternal.detach(),this.mainWidgetInternal=e,e&&(e.element.slot="insertion-point-main",this.showModeInternal!==ShowMode.OnlyMain&&this.showModeInternal!==ShowMode.Both||e.show(this.element)),this.resumeInvalidations())}setSidebarWidget(e){this.sidebarWidgetInternal!==e&&(this.suspendInvalidations(),this.sidebarWidgetInternal&&this.sidebarWidgetInternal.detach(),this.sidebarWidgetInternal=e,e&&(e.element.slot="insertion-point-sidebar",this.showModeInternal!==ShowMode.OnlySidebar&&this.showModeInternal!==ShowMode.Both||e.show(this.element)),this.resumeInvalidations())}mainWidget(){return this.mainWidgetInternal}sidebarWidget(){return this.sidebarWidgetInternal}sidebarElement(){return this.sidebarElementInternal}childWasDetached(e){this.detaching||(this.mainWidgetInternal===e&&(this.mainWidgetInternal=null),this.sidebarWidgetInternal===e&&(this.sidebarWidgetInternal=null),this.invalidateConstraints())}isSidebarSecond(){return this.secondIsSidebar}enableShowModeSaving(){this.shouldSaveShowMode=!0,this.restoreAndApplyShowModeFromSettings()}showMode(){return this.showModeInternal}setSecondIsSidebar(e){e!==this.secondIsSidebar&&(this.secondIsSidebar=e,this.mainWidgetInternal&&this.mainWidgetInternal.shouldHideOnDetach()?this.sidebarWidgetInternal&&this.sidebarWidgetInternal.shouldHideOnDetach()?(console.error("Could not swap split widget side. Both children widgets contain iframes."),this.secondIsSidebar=!e):e?this.contentElement.insertBefore(this.sidebarElementInternal,this.resizerElementInternal):this.contentElement.insertBefore(this.sidebarElementInternal,this.mainElement):e?this.contentElement.insertBefore(this.mainElement,this.sidebarElementInternal):this.contentElement.insertBefore(this.mainElement,this.resizerElementInternal))}sidebarSide(){return this.showModeInternal!==ShowMode.Both?null:this.isVerticalInternal?this.secondIsSidebar?"right":"left":this.secondIsSidebar?"bottom":"top"}resizerElement(){return this.resizerElementInternal}hideMain(e){this.showOnly(this.sidebarWidgetInternal,this.mainWidgetInternal,this.sidebarElementInternal,this.mainElement,e),this.updateShowMode(ShowMode.OnlySidebar)}hideSidebar(e){this.showOnly(this.mainWidgetInternal,this.sidebarWidgetInternal,this.mainElement,this.sidebarElementInternal,e),this.updateShowMode(ShowMode.OnlyMain)}setSidebarMinimized(e){this.sidebarMinimized=e,this.invalidateConstraints()}isSidebarMinimized(){return this.sidebarMinimized}showOnly(e,t,i,s,n){function r(){e&&(e===this.mainWidgetInternal?this.mainWidgetInternal.show(this.element,this.sidebarWidgetInternal?this.sidebarWidgetInternal.element:null):this.sidebarWidgetInternal&&this.sidebarWidgetInternal.show(this.element)),t&&(this.detaching=!0,t.detach(),this.detaching=!1),this.resizerElementInternal.classList.add("hidden"),i.classList.remove("hidden"),i.classList.add("maximized"),s.classList.add("hidden"),s.classList.remove("maximized"),this.removeAllLayoutProperties(),this.doResize(),this.showFinishedForTest()}this.cancelAnimation(),n?this.animate(!0,r.bind(this)):r.call(this),this.sidebarSizeDIP=-1,this.setResizable(!1)}showFinishedForTest(){}removeAllLayoutProperties(){this.sidebarElementInternal.style.removeProperty("flexBasis"),this.mainElement.style.removeProperty("width"),this.mainElement.style.removeProperty("height"),this.sidebarElementInternal.style.removeProperty("width"),this.sidebarElementInternal.style.removeProperty("height"),this.resizerElementInternal.style.removeProperty("left"),this.resizerElementInternal.style.removeProperty("right"),this.resizerElementInternal.style.removeProperty("top"),this.resizerElementInternal.style.removeProperty("bottom"),this.resizerElementInternal.style.removeProperty("margin-left"),this.resizerElementInternal.style.removeProperty("margin-right"),this.resizerElementInternal.style.removeProperty("margin-top"),this.resizerElementInternal.style.removeProperty("margin-bottom")}showBoth(e){this.showModeInternal===ShowMode.Both&&(e=!1),this.cancelAnimation(),this.mainElement.classList.remove("maximized","hidden"),this.sidebarElementInternal.classList.remove("maximized","hidden"),this.resizerElementInternal.classList.remove("hidden"),this.setResizable(!0),this.suspendInvalidations(),this.sidebarWidgetInternal&&this.sidebarWidgetInternal.show(this.element),this.mainWidgetInternal&&this.mainWidgetInternal.show(this.element,this.sidebarWidgetInternal?this.sidebarWidgetInternal.element:null),this.resumeInvalidations(),this.setSecondIsSidebar(this.secondIsSidebar),this.sidebarSizeDIP=-1,this.updateShowMode(ShowMode.Both),this.updateLayout(e)}setResizable(e){this.resizerWidget.setEnabled(e)}isResizable(){return this.resizerWidget.isEnabled()}setSidebarSize(e){const t=ZoomManager.instance().cssToDIP(e);this.savedSidebarSizeDIP=t,this.saveSetting(),this.innerSetSidebarSizeDIP(t,!1,!0)}sidebarSize(){const e=Math.max(0,this.sidebarSizeDIP);return ZoomManager.instance().dipToCSS(e)}totalSizeDIP(){return this.totalSizeCSS||(this.totalSizeCSS=this.isVerticalInternal?this.contentElement.offsetWidth:this.contentElement.offsetHeight,this.totalSizeOtherDimensionCSS=this.isVerticalInternal?this.contentElement.offsetHeight:this.contentElement.offsetWidth),ZoomManager.instance().cssToDIP(this.totalSizeCSS)}updateShowMode(e){this.showModeInternal=e,this.saveShowModeToSettings(),this.updateShowHideSidebarButton(),this.dispatchEventToListeners(Events.ShowModeChanged,e),this.invalidateConstraints()}innerSetSidebarSizeDIP(e,t,i){if(this.showModeInternal!==ShowMode.Both||!this.isShowing())return;if(e=this.applyConstraints(e,i),this.sidebarSizeDIP===e)return;this.resizerElementSize||(this.resizerElementSize=this.isVerticalInternal?this.resizerElementInternal.offsetWidth:this.resizerElementInternal.offsetHeight),this.removeAllLayoutProperties();const s=Math.round(ZoomManager.instance().dipToCSS(e)),n=s+"px",r=this.totalSizeCSS-s+"px";this.sidebarElementInternal.style.flexBasis=n,this.isVerticalInternal?(this.sidebarElementInternal.style.width=n,this.mainElement.style.width=r,this.sidebarElementInternal.style.height=this.totalSizeOtherDimensionCSS+"px",this.mainElement.style.height=this.totalSizeOtherDimensionCSS+"px"):(this.sidebarElementInternal.style.height=n,this.mainElement.style.height=r,this.sidebarElementInternal.style.width=this.totalSizeOtherDimensionCSS+"px",this.mainElement.style.width=this.totalSizeOtherDimensionCSS+"px"),this.isVerticalInternal?this.secondIsSidebar?(this.resizerElementInternal.style.right=n,this.resizerElementInternal.style.marginRight=-this.resizerElementSize/2+"px"):(this.resizerElementInternal.style.left=n,this.resizerElementInternal.style.marginLeft=-this.resizerElementSize/2+"px"):this.secondIsSidebar?(this.resizerElementInternal.style.bottom=n,this.resizerElementInternal.style.marginBottom=-this.resizerElementSize/2+"px"):(this.resizerElementInternal.style.top=n,this.resizerElementInternal.style.marginTop=-this.resizerElementSize/2+"px"),this.sidebarSizeDIP=e,t?this.animate(!1):(this.doResize(),this.dispatchEventToListeners(Events.SidebarSizeChanged,this.sidebarSize()))}animate(e,t){let i;this.animationCallback=t||null,i=this.isVerticalInternal?this.secondIsSidebar?"margin-right":"margin-left":this.secondIsSidebar?"margin-bottom":"margin-top";const s=e?"0":"-"+ZoomManager.instance().dipToCSS(this.sidebarSizeDIP)+"px",n=e?"-"+ZoomManager.instance().dipToCSS(this.sidebarSizeDIP)+"px":"0";this.contentElement.style.setProperty(i,s),this.contentElement.style.setProperty("overflow","hidden"),e||(suppressUnused(this.mainElement.offsetWidth),suppressUnused(this.sidebarElementInternal.offsetWidth)),!e&&this.sidebarWidgetInternal&&this.sidebarWidgetInternal.doResize(),this.contentElement.style.setProperty("transition",i+" 50ms linear");const r=function(){if(this.animationFrameHandle=0,a){if(!(window.performance.now()<a+50))return this.cancelAnimation(),this.mainWidgetInternal&&this.mainWidgetInternal.doResize(),void this.dispatchEventToListeners(Events.SidebarSizeChanged,this.sidebarSize());this.mainWidgetInternal&&this.mainWidgetInternal.doResize()}else this.contentElement.style.setProperty(i,n),a=window.performance.now();this.animationFrameHandle=this.contentElement.window().requestAnimationFrame(r)}.bind(this);let a=null;this.animationFrameHandle=this.contentElement.window().requestAnimationFrame(r)}cancelAnimation(){this.contentElement.style.removeProperty("margin-top"),this.contentElement.style.removeProperty("margin-right"),this.contentElement.style.removeProperty("margin-bottom"),this.contentElement.style.removeProperty("margin-left"),this.contentElement.style.removeProperty("transition"),this.contentElement.style.removeProperty("overflow"),this.animationFrameHandle&&(this.contentElement.window().cancelAnimationFrame(this.animationFrameHandle),this.animationFrameHandle=0),this.animationCallback&&(this.animationCallback(),this.animationCallback=null)}applyConstraints(e,t){const i=this.totalSizeDIP(),s=this.constraintsInDip?1:ZoomManager.instance().zoomFactor();let n=this.sidebarWidgetInternal?this.sidebarWidgetInternal.constraints():new Constraints,r=this.isVertical()?n.minimum.width:n.minimum.height;r||(r=MinPadding),r*=s,this.sidebarMinimized&&(e=r);let a=this.isVertical()?n.preferred.width:n.preferred.height;a||(a=MinPadding),a*=s,e<a&&(a=Math.max(e,r)),a+=s,n=this.mainWidgetInternal?this.mainWidgetInternal.constraints():new Constraints;let o=this.isVertical()?n.minimum.width:n.minimum.height;o||(o=MinPadding),o*=s;let h=this.isVertical()?n.preferred.width:n.preferred.height;h||(h=MinPadding),h*=s;const d=this.isVertical()?this.savedVerticalMainSize:this.savedHorizontalMainSize;null!==d&&(h=Math.min(h,d*s)),t&&(h=o);const l=h+a;if(l<=i)return Platform.NumberUtilities.clamp(e,a,i-h);if(o+r<=i){return e=a-(l-i)*a/l,Platform.NumberUtilities.clamp(e,r,i-o)}return Math.max(0,i-o)}wasShown(){this.forceUpdateLayout(),ZoomManager.instance().addEventListener("ZoomChanged",this.onZoomChanged,this)}willHide(){ZoomManager.instance().removeEventListener("ZoomChanged",this.onZoomChanged,this)}onResize(){this.updateLayout()}onLayout(){this.updateLayout()}calculateConstraints(){if(this.showModeInternal===ShowMode.OnlyMain)return this.mainWidgetInternal?this.mainWidgetInternal.constraints():new Constraints;if(this.showModeInternal===ShowMode.OnlySidebar)return this.sidebarWidgetInternal?this.sidebarWidgetInternal.constraints():new Constraints;let e=this.mainWidgetInternal?this.mainWidgetInternal.constraints():new Constraints,t=this.sidebarWidgetInternal?this.sidebarWidgetInternal.constraints():new Constraints;const i=MinPadding;return this.isVerticalInternal?(e=e.widthToMax(i).addWidth(1),t=t.widthToMax(i),e.addWidth(t).heightToMax(t)):(e=e.heightToMax(i).addHeight(1),t=t.heightToMax(i),e.widthToMax(t).addHeight(t))}onResizeStart(){this.resizeStartSizeDIP=this.sidebarSizeDIP}onResizeUpdate(e){const t=e.data.currentPosition-e.data.startPosition,i=ZoomManager.instance().cssToDIP(t),s=this.secondIsSidebar?this.resizeStartSizeDIP-i:this.resizeStartSizeDIP+i,n=this.applyConstraints(s,!0);this.savedSidebarSizeDIP=n,this.saveSetting(),this.innerSetSidebarSizeDIP(n,!1,!0),this.isVertical()?this.savedVerticalMainSize=this.totalSizeDIP()-this.sidebarSizeDIP:this.savedHorizontalMainSize=this.totalSizeDIP()-this.sidebarSizeDIP}onResizeEnd(){this.resizeStartSizeDIP=0}hideDefaultResizer(e){this.resizerElementInternal.classList.toggle("hidden",Boolean(e)),this.uninstallResizer(this.resizerElementInternal),this.sidebarElementInternal.classList.toggle("no-default-splitter",Boolean(e))}installResizer(e){this.resizerWidget.addElement(e)}uninstallResizer(e){this.resizerWidget.removeElement(e)}hasCustomResizer(){const e=this.resizerWidget.elements();return e.length>1||1===e.length&&e[0]!==this.resizerElementInternal}toggleResizer(e,t){t?this.installResizer(e):this.uninstallResizer(e)}settingForOrientation(){const e=this.setting?this.setting.get():{};return this.isVerticalInternal?e.vertical:e.horizontal}preferredSidebarSizeDIP(){let e=this.savedSidebarSizeDIP;return e||(e=this.isVerticalInternal?this.defaultSidebarWidth:this.defaultSidebarHeight,0<e&&e<1&&(e*=this.totalSizeDIP())),e}restoreSidebarSizeFromSettings(){const e=this.settingForOrientation();this.savedSidebarSizeDIP=e?e.size:0}restoreAndApplyShowModeFromSettings(){const e=this.settingForOrientation();switch(this.savedShowMode=e&&e.showMode?e.showMode:this.showModeInternal,this.showModeInternal=this.savedShowMode,this.savedShowMode){case ShowMode.Both:this.showBoth();break;case ShowMode.OnlyMain:this.hideSidebar();break;case ShowMode.OnlySidebar:this.hideMain()}}saveShowModeToSettings(){this.savedShowMode=this.showModeInternal,this.saveSetting()}saveSetting(){if(!this.setting)return;const e=this.setting.get(),t=(this.isVerticalInternal?e.vertical:e.horizontal)||{};t.size=this.savedSidebarSizeDIP,this.shouldSaveShowMode&&(t.showMode=this.savedShowMode),this.isVerticalInternal?e.vertical=t:e.horizontal=t,this.setting.set(e)}forceUpdateLayout(){this.sidebarSizeDIP=-1,this.updateLayout()}onZoomChanged(){this.forceUpdateLayout()}createShowHideSidebarButton(e,t,i,s){return this.showSidebarButtonTitle=e,this.hideSidebarButtonTitle=t,this.shownSidebarString=i,this.hiddenSidebarString=s,this.showHideSidebarButton=new ToolbarButton("",""),this.showHideSidebarButton.addEventListener(ToolbarButton.Events.Click,(function(){this.toggleSidebar()}),this),this.updateShowHideSidebarButton(),this.showHideSidebarButton}toggleSidebar(){this.showModeInternal!==ShowMode.Both?(this.showBoth(!0),ARIAUtils.alert(this.shownSidebarString)):(this.hideSidebar(!0),ARIAUtils.alert(this.hiddenSidebarString))}updateShowHideSidebarButton(){if(!this.showHideSidebarButton)return;const e=this.showModeInternal===ShowMode.OnlyMain;let t="";t=e?this.isVertical()?this.isSidebarSecond()?"right-panel-open":"left-panel-open":this.isSidebarSecond()?"bottom-panel-open":"top-panel-open":this.isVertical()?this.isSidebarSecond()?"right-panel-close":"left-panel-close":this.isSidebarSecond()?"bottom-panel-close":"top-panel-close",this.showHideSidebarButton.setGlyph(t),this.showHideSidebarButton.setTitle(e?this.showSidebarButtonTitle:this.hideSidebarButtonTitle)}}export var ShowMode;!function(e){e.Both="Both",e.OnlyMain="OnlyMain",e.OnlySidebar="OnlySidebar"}(ShowMode||(ShowMode={}));export var Events;!function(e){e.SidebarSizeChanged="SidebarSizeChanged",e.ShowModeChanged="ShowModeChanged"}(Events||(Events={}));const MinPadding=20,suppressUnused=function(e){};