@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 6.17 kB
JavaScript
import*as Common from"../../core/common/common.js";import*as i18n from"../../core/i18n/i18n.js";import*as TextUtils from"../../models/text_utils/text_utils.js";import*as DataGrid from"../../ui/legacy/components/data_grid/data_grid.js";import*as SourceFrame from"../../ui/legacy/components/source_frame/source_frame.js";import*as UI from"../../ui/legacy/legacy.js";import{DOMStorage}from"./DOMStorageModel.js";import{StorageItemsView}from"./StorageItemsView.js";const UIStrings={domStorage:"DOM Storage",key:"Key",value:"Value",domStorageItems:"DOM Storage Items",domStorageItemsCleared:"DOM Storage Items cleared",selectAValueToPreview:"Select a value to preview",domStorageItemDeleted:"The storage item was deleted.",domStorageNumberEntries:"Number of entries shown in table: {PH1}"},str_=i18n.i18n.registerUIStrings("panels/application/DOMStorageItemsView.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class DOMStorageItemsView extends StorageItemsView{domStorage;dataGrid;splitWidget;previewPanel;preview;previewValue;eventListeners;constructor(e){super(i18nString(UIStrings.domStorage),"domStoragePanel"),this.domStorage=e,e.storageKey&&this.setStorageKey(e.storageKey),this.element.classList.add("storage-view","table");const t=[{id:"key",title:i18nString(UIStrings.key),sortable:!1,editable:!0,longText:!0,weight:50},{id:"value",title:i18nString(UIStrings.value),sortable:!1,editable:!0,longText:!0,weight:50}];this.dataGrid=new DataGrid.DataGrid.DataGridImpl({displayName:i18nString(UIStrings.domStorageItems),columns:t,editCallback:this.editingCallback.bind(this),deleteCallback:this.deleteCallback.bind(this),refreshCallback:this.refreshItems.bind(this)}),this.dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,(e=>{this.previewEntry(e.data)})),this.dataGrid.addEventListener(DataGrid.DataGrid.Events.DeselectedNode,(()=>{this.previewEntry(null)})),this.dataGrid.setStriped(!0),this.dataGrid.setName("DOMStorageItemsView"),this.splitWidget=new UI.SplitWidget.SplitWidget(!1,!0,"domStorageSplitViewState"),this.splitWidget.show(this.element),this.previewPanel=new UI.Widget.VBox,this.previewPanel.setMinimumSize(0,50);const i=this.previewPanel.element.createChild("div","preview-panel-resizer"),a=this.dataGrid.asWidget();a.setMinimumSize(0,50),this.splitWidget.setMainWidget(a),this.splitWidget.setSidebarWidget(this.previewPanel),this.splitWidget.installResizer(i),this.preview=null,this.previewValue=null,this.showPreview(null,null),this.eventListeners=[],this.setStorage(e)}setStorage(e){Common.EventTarget.removeEventListeners(this.eventListeners),this.domStorage=e,e.storageKey&&this.setStorageKey(e.storageKey),this.eventListeners=[this.domStorage.addEventListener(DOMStorage.Events.DOMStorageItemsCleared,this.domStorageItemsCleared,this),this.domStorage.addEventListener(DOMStorage.Events.DOMStorageItemRemoved,this.domStorageItemRemoved,this),this.domStorage.addEventListener(DOMStorage.Events.DOMStorageItemAdded,this.domStorageItemAdded,this),this.domStorage.addEventListener(DOMStorage.Events.DOMStorageItemUpdated,this.domStorageItemUpdated,this)],this.refreshItems()}domStorageItemsCleared(){this.isShowing()&&this.dataGrid&&(this.dataGrid.rootNode().removeChildren(),this.dataGrid.addCreationNode(!1),UI.ARIAUtils.alert(i18nString(UIStrings.domStorageItemsCleared)),this.setCanDeleteSelected(!1))}domStorageItemRemoved(e){if(!this.isShowing()||!this.dataGrid)return;const t=e.data,i=this.dataGrid.rootNode(),a=i.children;for(let e=0;e<a.length;++e){const r=a[e];if(r.data.key===t.key)return i.removeChild(r),void this.setCanDeleteSelected(a.length>1)}}domStorageItemAdded(e){if(!this.isShowing()||!this.dataGrid)return;const t=e.data,i=this.dataGrid.rootNode(),a=i.children;for(let e=0;e<a.length;++e)if(a[e].data.key===t.key)return;const r=new DataGrid.DataGrid.DataGridNode({key:t.key,value:t.value},!1);i.insertChild(r,a.length-1)}domStorageItemUpdated(e){if(!this.isShowing()||!this.dataGrid)return;const t=e.data,i=this.dataGrid.rootNode().children.find((e=>e.data.key===t.key));i&&(i.data.value!==t.value&&(i.data.value=t.value,i.refresh()),i.selected&&(this.previewValue!==t.value&&this.previewEntry(i),this.setCanDeleteSelected(!0)))}showDOMStorageItems(e){const t=this.dataGrid.rootNode();let i=null;for(const e of t.children)if(e.selected){i=e.data.key;break}t.removeChildren();let a=null;const r=this.filter(e,(e=>`${e[0]} ${e[1]}`));for(const e of r){const r=e[0],s=e[1],o=new DataGrid.DataGrid.DataGridNode({key:r,value:s},!1);o.selectable=!0,t.appendChild(o),a&&r!==i||(a=o)}a&&(a.selected=!0),this.dataGrid.addCreationNode(!1),this.setCanDeleteSelected(Boolean(a)),UI.ARIAUtils.alert(i18nString(UIStrings.domStorageNumberEntries,{PH1:r.length}))}deleteSelectedItem(){this.dataGrid&&this.dataGrid.selectedNode&&this.deleteCallback(this.dataGrid.selectedNode)}refreshItems(){this.domStorage.getItems().then((e=>e&&this.showDOMStorageItems(e)))}deleteAllItems(){this.domStorage.clear(),this.domStorageItemsCleared()}editingCallback(e,t,i,a){const r=this.domStorage;"key"===t?("string"==typeof i&&r.removeItem(i),r.setItem(a,e.data.value||""),this.removeDupes(e)):r.setItem(e.data.key||"",a)}removeDupes(e){const t=this.dataGrid.rootNode(),i=t.children;for(let a=i.length-1;a>=0;--a){const r=i[a];r.data.key===e.data.key&&e!==r&&t.removeChild(r)}}deleteCallback(e){e&&!e.isCreationNode&&(this.domStorage&&this.domStorage.removeItem(e.data.key),UI.ARIAUtils.alert(i18nString(UIStrings.domStorageItemDeleted)))}showPreview(e,t){this.preview&&this.previewValue===t||(this.preview&&this.preview.detach(),e||(e=new UI.EmptyWidget.EmptyWidget(i18nString(UIStrings.selectAValueToPreview))),this.previewValue=t,this.preview=e,e.show(this.previewPanel.contentElement))}async previewEntry(e){const t=e&&e.data&&e.data.value;if(e&&e.data&&e.data.value){const i=`${this.domStorage.isLocalStorage?"localstorage":"sessionstorage"}://${e.key}`,a=TextUtils.StaticContentProvider.StaticContentProvider.fromString(i,Common.ResourceType.resourceTypes.XHR,t),r=await SourceFrame.PreviewFactory.PreviewFactory.createPreview(a,"text/plain");e.selected&&this.showPreview(r,t)}else this.showPreview(null,t)}}