@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 3.25 kB
JavaScript
import*as i18n from"../../core/i18n/i18n.js";import*as SDK from"../../core/sdk/sdk.js";import*as Logs from"../../models/logs/logs.js";import*as Components from"../../ui/legacy/components/utils/utils.js";import*as UI from"../../ui/legacy/legacy.js";import requestInitiatorViewStyles from"./requestInitiatorView.css.js";import requestInitiatorViewTreeStyles from"./requestInitiatorViewTree.css.js";const UIStrings={thisRequestHasNoInitiatorData:"This request has no initiator data.",requestCallStack:"Request call stack",requestInitiatorChain:"Request initiator chain"},str_=i18n.i18n.registerUIStrings("panels/network/RequestInitiatorView.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class RequestInitiatorView extends UI.Widget.VBox{linkifier;request;emptyWidget;hasShown;constructor(e){super(),this.element.classList.add("request-initiator-view"),this.linkifier=new Components.Linkifier.Linkifier,this.request=e,this.emptyWidget=new UI.EmptyWidget.EmptyWidget(i18nString(UIStrings.thisRequestHasNoInitiatorData)),this.emptyWidget.show(this.element),this.hasShown=!1}static createStackTracePreview(e,t,i){const s=e.initiator();if(!s||!s.stack)return null;const n=SDK.NetworkManager.NetworkManager.forRequest(e),r=n?n.target():null;return Components.JSPresentationUtils.buildStackTracePreviewContents(r,t,{stackTrace:s.stack,tabStops:i})}createTree(){const e=new UI.TreeOutline.TreeOutlineInShadow;return e.registerCSSFiles([requestInitiatorViewTreeStyles]),e.contentElement.classList.add("request-initiator-view-tree"),e}buildRequestChainTree(e,t,i){const s=new UI.TreeOutline.TreeElement(t);i.appendChild(s),s.titleElement instanceof HTMLElement&&s.titleElement.classList.add("request-initiator-view-section-title");const n=e.initiators;let r=s;for(const e of Array.from(n).reverse()){const t=new UI.TreeOutline.TreeElement(e.url());r.appendChild(t),r.expand(),r=t}s.expand(),r.select();const a=r.titleElement;a instanceof HTMLElement&&(a.style.fontWeight="bold");const o=e.initiated;return this.depthFirstSearchTreeBuilder(o,r,this.request),s}depthFirstSearchTreeBuilder(e,t,i){const s=new Set;s.add(this.request);for(const n of e.keys())if(e.get(n)===i){const i=new UI.TreeOutline.TreeElement(n.url());t.appendChild(i),t.expand(),s.has(n)||(s.add(n),this.depthFirstSearchTreeBuilder(e,i,n))}}buildStackTraceSection(e,t,i){const s=new UI.TreeOutline.TreeElement(t);i.appendChild(s),s.titleElement instanceof HTMLElement&&s.titleElement.classList.add("request-initiator-view-section-title");const n=new UI.TreeOutline.TreeElement(e,!1);n.selectable=!1,s.appendChild(n),s.expand()}wasShown(){if(this.hasShown)return;this.registerCSSFiles([requestInitiatorViewStyles]);let e=!1;const t=this.createTree(),i=RequestInitiatorView.createStackTracePreview(this.request,this.linkifier,!0);i&&(e=!0,this.buildStackTraceSection(i.element,i18nString(UIStrings.requestCallStack),t));const s=Logs.NetworkLog.NetworkLog.instance().initiatorGraphForRequest(this.request);(s.initiators.size>1||s.initiated.size>1)&&(e=!0,this.buildRequestChainTree(s,i18nString(UIStrings.requestInitiatorChain),t));const n=t.firstChild();n&&n.select(!0),e&&(this.element.appendChild(t.element),this.emptyWidget.hideWidget()),this.hasShown=!0}}