UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 4.52 kB
import*as i18n from"../../core/i18n/i18n.js";import*as UI from"../../ui/legacy/legacy.js";import{EditFileSystemView}from"./EditFileSystemView.js";import workspaceSettingsTabStyles from"./workspaceSettingsTab.css.js";import{IsolatedFileSystem}from"./IsolatedFileSystem.js";import{Events,IsolatedFileSystemManager}from"./IsolatedFileSystemManager.js";import{NetworkPersistenceManager}from"./NetworkPersistenceManager.js";const UIStrings={workspace:"Workspace",mappingsAreInferredAutomatically:"Mappings are inferred automatically.",addFolder:"Add folder…",folderExcludePattern:"Folder exclude pattern",remove:"Remove"},str_=i18n.i18n.registerUIStrings("models/persistence/WorkspaceSettingsTab.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);let workspaceSettingsTabInstance;export class WorkspaceSettingsTab extends UI.Widget.VBox{containerElement;fileSystemsListContainer;elementByPath;mappingViewByPath;constructor(){super(),this.element.classList.add("workspace-settings-tab");const e=this.element.createChild("header");UI.UIUtils.createTextChild(e.createChild("h1"),i18nString(UIStrings.workspace)),this.containerElement=this.element.createChild("div","settings-container-wrapper").createChild("div","settings-tab settings-content settings-container"),IsolatedFileSystemManager.instance().addEventListener(Events.FileSystemAdded,(e=>this.fileSystemAdded(e.data)),this),IsolatedFileSystemManager.instance().addEventListener(Events.FileSystemRemoved,(e=>this.fileSystemRemoved(e.data)),this);const t=this.createFolderExcludePatternInput();t.classList.add("folder-exclude-pattern"),this.containerElement.appendChild(t);const s=this.containerElement.createChild("div","settings-info-message");UI.UIUtils.createTextChild(s,i18nString(UIStrings.mappingsAreInferredAutomatically)),this.fileSystemsListContainer=this.containerElement.createChild("div","");const i=UI.UIUtils.createTextButton(i18nString(UIStrings.addFolder),this.addFileSystemClicked.bind(this));this.containerElement.appendChild(i),this.setDefaultFocusedElement(i),this.elementByPath=new Map,this.mappingViewByPath=new Map;const n=IsolatedFileSystemManager.instance().fileSystems();for(let e=0;e<n.length;++e)this.addItem(n[e])}static instance(e={forceNew:null}){const{forceNew:t}=e;return workspaceSettingsTabInstance&&!t||(workspaceSettingsTabInstance=new WorkspaceSettingsTab),workspaceSettingsTabInstance}wasShown(){super.wasShown(),this.registerCSSFiles([workspaceSettingsTabStyles])}createFolderExcludePatternInput(){const e=document.createElement("p"),t=e.createChild("label");t.textContent=i18nString(UIStrings.folderExcludePattern);const s=UI.UIUtils.createInput("","text");UI.ARIAUtils.bindLabelToControl(t,s),e.appendChild(s);const i=IsolatedFileSystemManager.instance().workspaceFolderExcludePatternSetting(),n=UI.UIUtils.bindInput(s,i.set.bind(i),(function(e){let t;try{t=new RegExp(e)}catch(e){}return{valid:Boolean(t),errorMessage:void 0}}),!1);return i.addChangeListener((()=>n.call(null,i.get()))),n(i.get()),e}addItem(e){if(!(e instanceof IsolatedFileSystem))return;const t=NetworkPersistenceManager.instance().project();if(t&&IsolatedFileSystemManager.instance().fileSystem(t.fileSystemPath())===e)return;const s=this.renderFileSystem(e);this.elementByPath.set(e.path(),s),this.fileSystemsListContainer.appendChild(s);const i=new EditFileSystemView(e.path());this.mappingViewByPath.set(e.path(),i),i.element.classList.add("file-system-mapping-view"),i.show(s)}renderFileSystem(e){const t=e.path(),s=t.lastIndexOf("/"),i=t.substr(s+1),n=document.createElement("div");n.classList.add("file-system-container");const a=n.createChild("div","file-system-header"),r=a.createChild("div","file-system-name");r.textContent=i,UI.ARIAUtils.markAsHeading(r,2);const l=a.createChild("div","file-system-path");l.textContent=t,UI.Tooltip.Tooltip.install(l,t);const o=new UI.Toolbar.Toolbar(""),d=new UI.Toolbar.ToolbarButton(i18nString(UIStrings.remove),"cross");return d.addEventListener(UI.Toolbar.ToolbarButton.Events.Click,this.removeFileSystemClicked.bind(this,e)),o.appendToolbarItem(d),a.appendChild(o.element),n}removeFileSystemClicked(e){IsolatedFileSystemManager.instance().removeFileSystem(e)}addFileSystemClicked(){IsolatedFileSystemManager.instance().addFileSystem()}fileSystemAdded(e){this.addItem(e)}fileSystemRemoved(e){const t=this.mappingViewByPath.get(e.path());t&&(t.dispose(),this.mappingViewByPath.delete(e.path()));const s=this.elementByPath.get(e.path());s&&(this.elementByPath.delete(e.path()),s.remove())}}