@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 6.22 kB
JavaScript
import*as Common from"../../core/common/common.js";import*as i18n from"../../core/i18n/i18n.js";import*as Platform from"../../core/platform/platform.js";import*as SDK from"../../core/sdk/sdk.js";import*as UI from"../../ui/legacy/legacy.js";import blockedURLsPaneStyles from"./blockedURLsPane.css.js";const UIStrings={enableNetworkRequestBlocking:"Enable network request blocking",addPattern:"Add pattern",removeAllPatterns:"Remove all patterns",addNetworkRequestBlockingPattern:"Add network request blocking pattern",networkRequestsAreNotBlockedS:"Network requests are not blocked. {PH1}",dBlocked:"{PH1} blocked",textPatternToBlockMatching:"Text pattern to block matching requests; use * for wildcard",patternInputCannotBeEmpty:"Pattern input cannot be empty.",patternAlreadyExists:"Pattern already exists.",itemDeleted:"Item successfully deleted"},str_=i18n.i18n.registerUIStrings("panels/network/BlockedURLsPane.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export let blockedURLsPaneInstance=null;export class BlockedURLsPane extends UI.Widget.VBox{manager;toolbar;enabledCheckbox;list;editor;blockedCountForUrl;updateThrottler;constructor(e){super(!0),this.manager=SDK.NetworkManager.MultitargetNetworkManager.instance(),this.manager.addEventListener(SDK.NetworkManager.MultitargetNetworkManager.Events.BlockedPatternsChanged,(()=>{this.update()}),this),this.toolbar=new UI.Toolbar.Toolbar("",this.contentElement),this.enabledCheckbox=new UI.Toolbar.ToolbarCheckbox(i18nString(UIStrings.enableNetworkRequestBlocking),void 0,this.toggleEnabled.bind(this)),this.toolbar.appendToolbarItem(this.enabledCheckbox),this.toolbar.appendSeparator();const t=new UI.Toolbar.ToolbarButton(i18nString(UIStrings.addPattern),"plus");t.addEventListener(UI.Toolbar.ToolbarButton.Events.Click,this.addButtonClicked,this),this.toolbar.appendToolbarItem(t);const n=new UI.Toolbar.ToolbarButton(i18nString(UIStrings.removeAllPatterns),"clear");n.addEventListener(UI.Toolbar.ToolbarButton.Events.Click,this.removeAll,this),this.toolbar.appendToolbarItem(n),this.list=new UI.ListWidget.ListWidget(this),this.list.element.classList.add("blocked-urls"),this.list.setEmptyPlaceholder(this.createEmptyPlaceholder()),this.list.show(this.contentElement),this.editor=null,this.blockedCountForUrl=new Map,SDK.TargetManager.TargetManager.instance().addModelListener(SDK.NetworkManager.NetworkManager,SDK.NetworkManager.Events.RequestFinished,this.onRequestFinished,this,{scoped:!0}),this.updateThrottler=e,this.update()}static instance(e){return blockedURLsPaneInstance&&!e?.forceNew||(blockedURLsPaneInstance=new BlockedURLsPane(e?.updateThrottler||new Common.Throttler.Throttler(200))),blockedURLsPaneInstance}createEmptyPlaceholder(){const e=this.contentElement.createChild("div","no-blocked-urls"),t=UI.UIUtils.createTextButton(i18nString(UIStrings.addPattern),this.addButtonClicked.bind(this),"add-button");return UI.ARIAUtils.setLabel(t,i18nString(UIStrings.addNetworkRequestBlockingPattern)),e.appendChild(i18n.i18n.getFormatLocalizedString(str_,UIStrings.networkRequestsAreNotBlockedS,{PH1:t})),e}static reset(){blockedURLsPaneInstance&&blockedURLsPaneInstance.reset()}addButtonClicked(){this.manager.setBlockingEnabled(!0),this.list.addNewItem(0,{url:Platform.DevToolsPath.EmptyUrlString,enabled:!0})}renderItem(e,t){const n=this.blockedRequestsCount(e.url),r=document.createElement("div");r.classList.add("blocked-url");const o=r.createChild("input","blocked-url-checkbox");return o.type="checkbox",o.checked=e.enabled,o.disabled=!t,r.createChild("div","blocked-url-label").textContent=e.url,r.createChild("div","blocked-url-count").textContent=i18nString(UIStrings.dBlocked,{PH1:n}),t&&(r.addEventListener("click",(t=>this.togglePattern(e,t))),o.addEventListener("click",(t=>this.togglePattern(e,t)))),r}togglePattern(e,t){t.consume(!0);const n=this.manager.blockedPatterns();n.splice(n.indexOf(e),1,{enabled:!e.enabled,url:e.url}),this.manager.setBlockedPatterns(n)}toggleEnabled(){this.manager.setBlockingEnabled(!this.manager.blockingEnabled()),this.update()}removeItemRequested(e,t){const n=this.manager.blockedPatterns();n.splice(t,1),this.manager.setBlockedPatterns(n),UI.ARIAUtils.alert(UIStrings.itemDeleted)}beginEdit(e){return this.editor=this.createEditor(),this.editor.control("url").value=e.url,this.editor}commitEdit(e,t,n){const r=t.control("url").value,o=this.manager.blockedPatterns();n?o.push({enabled:!0,url:r}):o.splice(o.indexOf(e),1,{enabled:!0,url:r}),this.manager.setBlockedPatterns(o)}createEditor(){if(this.editor)return this.editor;const e=new UI.ListWidget.Editor,t=e.contentElement();t.createChild("div","blocked-url-edit-row").createChild("div").textContent=i18nString(UIStrings.textPatternToBlockMatching);const n=t.createChild("div","blocked-url-edit-row"),r=e.createInput("url","text","",((e,t,n)=>{let r,o=!0;return n.value?this.manager.blockedPatterns().find((e=>e.url===n.value))&&(r=i18nString(UIStrings.patternAlreadyExists),o=!1):(r=i18nString(UIStrings.patternInputCannotBeEmpty),o=!1),{valid:o,errorMessage:r}}));return n.createChild("div","blocked-url-edit-value").appendChild(r),e}removeAll(){this.manager.setBlockedPatterns([])}update(){const e=this.manager.blockingEnabled();this.list.element.classList.toggle("blocking-disabled",!e&&Boolean(this.manager.blockedPatterns().length)),this.enabledCheckbox.setChecked(e),this.list.clear();for(const t of this.manager.blockedPatterns())this.list.appendItem(t,e);return Promise.resolve()}blockedRequestsCount(e){if(!e)return 0;let t=0;for(const n of this.blockedCountForUrl.keys())this.matches(e,n)&&(t+=this.blockedCountForUrl.get(n));return t}matches(e,t){let n=0;const r=e.split("*");for(let e=0;e<r.length;e++){const o=r[e];if(o.length){if(n=t.indexOf(o,n),-1===n)return!1;n+=o.length}}return!0}reset(){this.blockedCountForUrl.clear(),this.updateThrottler.schedule(this.update.bind(this))}onRequestFinished(e){const t=e.data;if(t.wasBlocked()){const e=this.blockedCountForUrl.get(t.url())||0;this.blockedCountForUrl.set(t.url(),e+1),this.updateThrottler.schedule(this.update.bind(this))}}wasShown(){super.wasShown(),this.list.registerCSSFiles([blockedURLsPaneStyles]),this.registerCSSFiles([blockedURLsPaneStyles])}}