UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 4.36 kB
import*as i18n from"../../core/i18n/i18n.js";import*as UI from"../../ui/legacy/legacy.js";import{Events as ProfileHeaderEvents}from"./ProfileHeader.js";const UIStrings={save:"Save",saveWithEllipsis:"Save…",load:"Load…",delete:"Delete",enterToSave:"Save. Press enter to save file"},str_=i18n.i18n.registerUIStrings("panels/profiler/ProfileSidebarTreeElement.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);let sharedFileSelectorElement=null;function getSharedFileSelectorElement(){return sharedFileSelectorElement}export function setSharedFileSelectorElement(e){sharedFileSelectorElement=e}export class ProfileSidebarTreeElement extends UI.TreeOutline.TreeElement{iconElement;titlesElement;titleContainer;titleElement;subtitleElement;className;small;dataDisplayDelegate;profile;saveLinkElement;editing;constructor(e,t,i){super("",!1),this.iconElement=document.createElement("div"),this.iconElement.classList.add("icon"),this.titlesElement=document.createElement("div"),this.titlesElement.classList.add("titles"),this.titlesElement.classList.add("no-subtitle"),this.titleContainer=this.titlesElement.createChild("span","title-container"),this.titleElement=this.titleContainer.createChild("span","title"),this.subtitleElement=this.titlesElement.createChild("span","subtitle"),this.titleElement.textContent=t.title,this.className=i,this.small=!1,this.dataDisplayDelegate=e,this.profile=t,t.addEventListener(ProfileHeaderEvents.UpdateStatus,this.updateStatus,this),t.canSaveToFile()?this.createSaveLink():t.addEventListener(ProfileHeaderEvents.ProfileReceived,this.onProfileReceived,this)}createSaveLink(){this.saveLinkElement=this.titleContainer.createChild("span","save-link"),this.saveLinkElement.textContent=i18nString(UIStrings.save),this.saveLinkElement.tabIndex=0,UI.ARIAUtils.setLabel(this.saveLinkElement,i18nString(UIStrings.enterToSave)),this.saveLinkElement.addEventListener("click",this.saveProfile.bind(this),!1),this.saveLinkElement.addEventListener("keydown",this.saveProfileKeyDown.bind(this),!0)}onProfileReceived(){this.createSaveLink()}updateStatus(e){const t=e.data;null!==t.subtitle&&(this.subtitleElement.textContent=t.subtitle||"",this.titlesElement.classList.toggle("no-subtitle",!t.subtitle),UI.ARIAUtils.setLabel(this.listItemElement,`${this.profile.title}, ${t.subtitle}`)),"boolean"==typeof t.wait&&this.listItemElement&&(this.iconElement.classList.toggle("spinner",t.wait),this.listItemElement.classList.toggle("wait",t.wait))}ondblclick(e){return this.editing||this.startEditing(e.target),!1}startEditing(e){const t=e.enclosingNodeOrSelfWithClass("title");if(!t)return;const i=new UI.InplaceEditor.Config(this.editingCommitted.bind(this),this.editingCancelled.bind(this));this.editing=UI.InplaceEditor.InplaceEditor.startEditing(t,i)}editingCommitted(e,t){delete this.editing,this.profile.setTitle(t)}editingCancelled(){delete this.editing}dispose(){this.profile.removeEventListener(ProfileHeaderEvents.UpdateStatus,this.updateStatus,this),this.profile.removeEventListener(ProfileHeaderEvents.ProfileReceived,this.onProfileReceived,this)}onselect(){return this.dataDisplayDelegate.showProfile(this.profile),!0}ondelete(){return this.profile.profileType().removeProfile(this.profile),!0}onattach(){this.className&&this.listItemElement.classList.add(this.className),this.small&&this.listItemElement.classList.add("small"),this.listItemElement.append(this.iconElement,this.titlesElement),this.listItemElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!0),UI.ARIAUtils.setDescription(this.listItemElement,this.profile.profileType().name)}handleContextMenuEvent(e){const t=this.profile,i=new UI.ContextMenu.ContextMenu(e),s=getSharedFileSelectorElement();if(!s)throw new Error("File selector element shared by ProfilePanel instances is missing");i.headerSection().appendItem(i18nString(UIStrings.load),s.click.bind(s)),t.canSaveToFile()&&i.saveSection().appendItem(i18nString(UIStrings.saveWithEllipsis),t.saveToFile.bind(t)),i.footerSection().appendItem(i18nString(UIStrings.delete),this.ondelete.bind(this)),i.show()}saveProfile(e){this.profile.saveToFile()}saveProfileKeyDown(e){"Enter"===e.key&&this.profile.saveToFile()}setSmall(e){this.small=e,this.listItemElement&&this.listItemElement.classList.toggle("small",this.small)}setMainTitle(e){this.titleElement.textContent=e}}