UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

17 lines 7.26 kB
import*as i18n from"../../core/i18n/i18n.js";import*as UI from"../../ui/legacy/legacy.js";import playerMessagesViewStyles from"./playerMessagesView.css.js";const UIStrings={default:"Default",custom:"Custom",all:"All",error:"Error",warning:"Warning",info:"Info",debug:"Debug",logLevel:"Log level:",filterLogMessages:"Filter log messages",errorGroupLabel:"Error Group:",errorCodeLabel:"Error Code:",errorDataLabel:"Data:",errorStackLabel:"Stacktrace:",errorCauseLabel:"Caused by:"},str_=i18n.i18n.registerUIStrings("panels/media/PlayerMessagesView.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);class MessageLevelSelector{items;view;itemMap;hiddenLevels;bitFieldValue;savedBitFieldValue;defaultTitleInternal;customTitle;allTitle;elementsForItems;constructor(e,t){this.items=e,this.view=t,this.itemMap=new Map,this.hiddenLevels=[],this.bitFieldValue=7,this.savedBitFieldValue=7,this.defaultTitleInternal=i18nString(UIStrings.default),this.customTitle=i18nString(UIStrings.custom),this.allTitle=i18nString(UIStrings.all),this.elementsForItems=new WeakMap}defaultTitle(){return this.defaultTitleInternal}setDefault(e){e.selectItem(this.items.at(0))}populate(){this.items.insert(this.items.length,{title:this.defaultTitleInternal,overwrite:!0,stringValue:"",value:7,selectable:void 0}),this.items.insert(this.items.length,{title:this.allTitle,overwrite:!0,stringValue:"",value:15,selectable:void 0}),this.items.insert(this.items.length,{title:i18nString(UIStrings.error),overwrite:!1,stringValue:"error",value:1,selectable:void 0}),this.items.insert(this.items.length,{title:i18nString(UIStrings.warning),overwrite:!1,stringValue:"warning",value:2,selectable:void 0}),this.items.insert(this.items.length,{title:i18nString(UIStrings.info),overwrite:!1,stringValue:"info",value:4,selectable:void 0}),this.items.insert(this.items.length,{title:i18nString(UIStrings.debug),overwrite:!1,stringValue:"debug",value:8,selectable:void 0})}updateCheckMarks(){this.hiddenLevels=[];for(const[e,t]of this.itemMap)if(!t.overwrite){const s=this.elementsForItems.get(t);s&&s.firstChild&&s.firstChild.remove(),s&&e&this.bitFieldValue?UI.UIUtils.createTextChild(s.createChild("div"),"✓"):this.hiddenLevels.push(t.stringValue)}}titleFor(e){if(e.overwrite?this.bitFieldValue=e.value:this.bitFieldValue^=e.value,7===this.bitFieldValue)return this.defaultTitleInternal;if(15===this.bitFieldValue)return this.allTitle;const t=this.itemMap.get(this.bitFieldValue);return t?t.title:this.customTitle}createElementForItem(e){const t=document.createElement("div"),s=UI.Utils.createShadowRootWithCoreStyles(t,{cssFile:[playerMessagesViewStyles],delegatesFocus:void 0}).createChild("div","media-messages-level-dropdown-element"),i=s.createChild("div","media-messages-level-dropdown-checkbox"),r=s.createChild("span","media-messages-level-dropdown-text");return UI.UIUtils.createTextChild(r,e.title),this.elementsForItems.set(e,i),this.itemMap.set(e.value,e),this.updateCheckMarks(),this.view.regenerateMessageDisplayCss(this.hiddenLevels),t}isItemSelectable(e){return!0}itemSelected(e){this.updateCheckMarks(),this.view.regenerateMessageDisplayCss(this.hiddenLevels)}highlightedItemChanged(e,t,s,i){}}export class PlayerMessagesView extends UI.Widget.VBox{headerPanel;bodyPanel;messageLevelSelector;constructor(){super(),this.headerPanel=this.contentElement.createChild("div","media-messages-header"),this.bodyPanel=this.contentElement.createChild("div","media-messages-body"),this.buildToolbar()}buildToolbar(){const e=new UI.Toolbar.Toolbar("media-messages-toolbar",this.headerPanel);e.appendText(i18nString(UIStrings.logLevel)),e.appendToolbarItem(this.createDropdown()),e.appendSeparator(),e.appendToolbarItem(this.createFilterInput())}createDropdown(){const e=new UI.ListModel.ListModel;this.messageLevelSelector=new MessageLevelSelector(e,this);const t=new UI.SoftDropDown.SoftDropDown(e,this.messageLevelSelector);t.setRowHeight(18),this.messageLevelSelector.populate(),this.messageLevelSelector.setDefault(t);const s=new UI.Toolbar.ToolbarItem(t.element);return s.element.classList.add("toolbar-has-dropdown"),s.setEnabled(!0),s.setTitle(this.messageLevelSelector.defaultTitle()),UI.ARIAUtils.setLabel(s.element,`${i18nString(UIStrings.logLevel)} ${this.messageLevelSelector.defaultTitle()}`),s}createFilterInput(){const e=new UI.Toolbar.ToolbarInput(i18nString(UIStrings.filterLogMessages));return e.addEventListener(UI.Toolbar.ToolbarInput.Event.TextChanged,(e=>{this.filterByString(e)}),this),e}regenerateMessageDisplayCss(e){const t=this.bodyPanel.getElementsByClassName("media-messages-message-container");for(const s of t)this.matchesHiddenLevels(s,e)?s.classList.add("media-messages-message-unselected"):s.classList.remove("media-messages-message-unselected")}matchesHiddenLevels(e,t){for(const s of t)if(e.classList.contains("media-message-"+s))return!0;return!1}filterByString(e){const t=e.data,s=this.bodyPanel.getElementsByClassName("media-messages-message-container");for(const e of s)""===t||e.textContent&&e.textContent.includes(t)?e.classList.remove("media-messages-message-filtered"):e.classList.add("media-messages-message-filtered")}addMessage(e){const t=this.bodyPanel.createChild("div","media-messages-message-container media-message-"+e.level);UI.UIUtils.createTextChild(t,e.message)}errorToDiv(e){const t=UI.Fragment.Fragment.build` <div class="status-error-box"> <div class="status-error-field-labeled"> <span class="status-error-field-label" $="status-error-group"></span> <span>${e.errorType}</span> </div> <div class="status-error-field-labeled"> <span class="status-error-field-label" $="status-error-code"></span> <span>${e.code}</span> </div> <div class="status-error-field-labeled" $="status-error-data"> </div> <div class="status-error-field-labeled" $="status-error-stack"> </div> <div class="status-error-field-labeled" $="status-error-cause"> </div> `;if(t.$("status-error-group").textContent=i18nString(UIStrings.errorGroupLabel),t.$("status-error-code").textContent=i18nString(UIStrings.errorCodeLabel),0!==Object.keys(e.data).length){const s=t.$("status-error-data").createChild("span","status-error-field-label");UI.UIUtils.createTextChild(s,i18nString(UIStrings.errorDataLabel));const i=t.$("status-error-data").createChild("div");for(const[t,s]of Object.entries(e.data)){const e=i.createChild("div");UI.UIUtils.createTextChild(e,`${t}: ${s}`)}}if(0!==e.stack.length){const s=t.$("status-error-stack").createChild("span","status-error-field-label");UI.UIUtils.createTextChild(s,i18nString(UIStrings.errorStackLabel));const i=t.$("status-error-stack").createChild("div");for(const t of e.stack){const e=i.createChild("div");UI.UIUtils.createTextChild(e,`${t.file}:${t.line}`)}}if(0!==e.cause.length){const s=t.$("status-error-cause").createChild("span","status-error-field-label");UI.UIUtils.createTextChild(s,i18nString(UIStrings.errorCauseLabel)),t.$("status-error-cause").appendChild(this.errorToDiv(e.cause[0]))}return t.element()}addError(e){this.bodyPanel.createChild("div","media-messages-message-container media-message-error").appendChild(this.errorToDiv(e))}wasShown(){super.wasShown(),this.registerCSSFiles([playerMessagesViewStyles])}}