@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 3.88 kB
JavaScript
import*as Common from"../../core/common/common.js";import*as i18n from"../../core/i18n/i18n.js";import*as UI from"../../ui/legacy/legacy.js";import editFileSystemViewStyles from"./editFileSystemView.css.js";import{Events,IsolatedFileSystemManager}from"./IsolatedFileSystemManager.js";const UIStrings={excludedFolders:"Excluded folders",add:"Add",none:"None",sViaDevtools:"{PH1} (via .devtools)",folderPath:"Folder path",enterAPath:"Enter a path",enterAUniquePath:"Enter a unique path"},str_=i18n.i18n.registerUIStrings("models/persistence/EditFileSystemView.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class EditFileSystemView extends UI.Widget.VBox{fileSystemPath;excludedFolders;eventListeners;excludedFoldersList;muteUpdate;excludedFolderEditor;constructor(e){super(!0),this.fileSystemPath=e,this.excludedFolders=[],this.eventListeners=[IsolatedFileSystemManager.instance().addEventListener(Events.ExcludedFolderAdded,this.update,this),IsolatedFileSystemManager.instance().addEventListener(Events.ExcludedFolderRemoved,this.update,this)];const t=this.contentElement.createChild("div","file-system-header");t.createChild("div","file-system-header-text").textContent=i18nString(UIStrings.excludedFolders),t.appendChild(UI.UIUtils.createTextButton(i18nString(UIStrings.add),this.addExcludedFolderButtonClicked.bind(this),"add-button")),this.excludedFoldersList=new UI.ListWidget.ListWidget(this),this.excludedFoldersList.element.classList.add("file-system-list");const i=document.createElement("div");i.classList.add("file-system-list-empty"),i.textContent=i18nString(UIStrings.none),this.excludedFoldersList.setEmptyPlaceholder(i),this.excludedFoldersList.show(this.contentElement),this.update()}dispose(){Common.EventTarget.removeEventListeners(this.eventListeners)}getFileSystem(){return IsolatedFileSystemManager.instance().fileSystem(this.fileSystemPath)}update(){if(!this.muteUpdate){this.excludedFoldersList.clear(),this.excludedFolders=[];for(const e of this.getFileSystem().excludedFolders().values())this.excludedFolders.push(e),this.excludedFoldersList.appendItem(e,!0)}}addExcludedFolderButtonClicked(){this.excludedFoldersList.addNewItem(0,"")}renderItem(e,t){const i=document.createElement("div");i.classList.add("file-system-list-item");const s=t?e:i18nString(UIStrings.sViaDevtools,{PH1:e}),d=i.createChild("div","file-system-value");return d.textContent=s,UI.Tooltip.Tooltip.install(d,s),i}removeItemRequested(e,t){this.getFileSystem().removeExcludedFolder(this.excludedFolders[t])}commitEdit(e,t,i){this.muteUpdate=!0,i||this.getFileSystem().removeExcludedFolder(e),this.getFileSystem().addExcludedFolder(this.normalizePrefix(t.control("pathPrefix").value)),this.muteUpdate=!1,this.update()}beginEdit(e){const t=this.createExcludedFolderEditor();return t.control("pathPrefix").value=e,t}createExcludedFolderEditor(){if(this.excludedFolderEditor)return this.excludedFolderEditor;const e=new UI.ListWidget.Editor;this.excludedFolderEditor=e;const t=e.contentElement();t.createChild("div","file-system-edit-row").createChild("div","file-system-value").textContent=i18nString(UIStrings.folderPath);return t.createChild("div","file-system-edit-row").createChild("div","file-system-value").appendChild(e.createInput("pathPrefix","text","/path/to/folder/",function(e,t,i){const s=this.normalizePrefix(i.value.trim());if(!s)return{valid:!1,errorMessage:i18nString(UIStrings.enterAPath)};const d=this.getFileSystem().excludedFolders().size;for(let e=0;e<d;++e)if(e!==t&&this.excludedFolders[e]===s)return{valid:!1,errorMessage:i18nString(UIStrings.enterAUniquePath)};return{valid:!0,errorMessage:void 0}}.bind(this))),e}normalizePrefix(e){return e?e+("/"===e[e.length-1]?"":"/"):""}wasShown(){super.wasShown(),this.excludedFoldersList.registerCSSFiles([editFileSystemViewStyles]),this.registerCSSFiles([editFileSystemViewStyles])}}