@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 2.75 kB
JavaScript
import*as Common from"../../core/common/common.js";import*as Host from"../../core/host/host.js";import*as i18n from"../../core/i18n/i18n.js";import*as SDK from"../../core/sdk/sdk.js";import*as IconButton from"../../ui/components/icon_button/icon_button.js";import*as UI from"../../ui/legacy/legacy.js";import*as ElementsComponents from"./components/components.js";import*as ElementsTreeOutline from"./ElementsTreeOutline.js";const UIStrings={reveal:"reveal"},str_=i18n.i18n.registerUIStrings("panels/elements/TopLayerContainer.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class TopLayerContainer extends UI.TreeOutline.TreeElement{tree;document;currentTopLayerDOMNodes=new Set;topLayerUpdateThrottler;constructor(e,t){super("#top-layer"),this.tree=e,this.document=t,this.topLayerUpdateThrottler=new Common.Throttler.Throttler(1)}async throttledUpdateTopLayerElements(){await this.topLayerUpdateThrottler.schedule((()=>this.updateTopLayerElements()))}async updateTopLayerElements(){this.removeChildren(),this.removeCurrentTopLayerElementsAdorners(),this.currentTopLayerDOMNodes=new Set;const e=this.document.domModel(),t=await e.getTopLayerElements();if(!t||0===t.length)return;let o=0;for(let n=0;n<t.length;n++){const r=e.idToDOMNode.get(t[n]);if(r&&r.ownerDocument===this.document&&"::backdrop"!==r.nodeName()){const s=new SDK.DOMModel.DOMNodeShortcut(e.target(),r.backendNodeId(),0,r.nodeName()),a=new ElementsTreeOutline.ShortcutTreeElement(s);this.appendChild(a),this.currentTopLayerDOMNodes.add(r);const d=n>0?e.idToDOMNode.get(t[n-1]):void 0;if(d&&"::backdrop"===d.nodeName()){const t=new SDK.DOMModel.DOMNodeShortcut(e.target(),d.backendNodeId(),0,d.nodeName()),o=new ElementsTreeOutline.ShortcutTreeElement(t);a.appendChild(o)}const i=this.tree.treeElementByNode.get(r);i&&this.addTopLayerAdorner(i,a,++o)}}}removeCurrentTopLayerElementsAdorners(){for(const e of this.currentTopLayerDOMNodes){const t=this.tree.treeElementByNode.get(e);t?.removeAllAdorners()}}addTopLayerAdorner(e,t,o){const n=ElementsComponents.AdornerManager.getRegisteredAdorner(ElementsComponents.AdornerManager.RegisteredAdorners.TOP_LAYER),r=document.createElement("span");r.classList.add("adorner-with-icon");const s=new IconButton.Icon.Icon;s.data={iconName:"select-element",color:"var(--icon-default)",width:"14px",height:"14px"};const a=document.createElement("span");a.textContent=` top-layer (${o}) `,r.append(s),r.append(a);const d=e?.adorn(n,r);if(d){const e=()=>{Host.userMetrics.badgeActivated(7),t.revealAndSelect()};d.addInteraction(e,{isToggle:!1,shouldPropagateOnKeydown:!1,ariaLabelDefault:i18nString(UIStrings.reveal),ariaLabelActive:i18nString(UIStrings.reveal)}),d.addEventListener("mousedown",(e=>e.consume()),!1)}}}