Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(824)

Unified Diff: third_party/WebKit/Source/devtools/front_end/resources/DOMStorageItemsView.js

Issue 2649923006: [DevTools] Add filtering to DOM storages (Closed)
Patch Set: No more UI.SimpleView Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/resources/DOMStorageItemsView.js
diff --git a/third_party/WebKit/Source/devtools/front_end/resources/DOMStorageItemsView.js b/third_party/WebKit/Source/devtools/front_end/resources/DOMStorageItemsView.js
index 6e367413f2f10360c0bf58264fec750e0a453962..14b5341d24a28834cdf51f61a3b1ec8277c1d664 100644
--- a/third_party/WebKit/Source/devtools/front_end/resources/DOMStorageItemsView.js
+++ b/third_party/WebKit/Source/devtools/front_end/resources/DOMStorageItemsView.js
@@ -27,23 +27,24 @@
/**
* @unrestricted
*/
-Resources.DOMStorageItemsView = class extends UI.SimpleView {
+Resources.DOMStorageItemsView = class extends Resources.ItemsView {
constructor(domStorage) {
- super(Common.UIString('DOM Storage'));
+ super(Common.UIString('DOM Storage'), 'domStoragePanel');
this.domStorage = domStorage;
dgozman 2017/01/26 22:21:09 While you are here, mind renaming to _domStorage?
eostroukhov 2017/01/26 23:35:46 Done.
this.element.classList.add('storage-view', 'table');
- this._deleteButton = new UI.ToolbarButton(Common.UIString('Delete'), 'largeicon-delete');
- this._deleteButton.setEnabled(false);
- this._deleteButton.addEventListener(UI.ToolbarButton.Events.Click, this._deleteButtonClicked, this);
-
- this._clearButton = new UI.ToolbarButton(Common.UIString('Clear All'), 'largeicon-clear');
- this._clearButton.addEventListener(UI.ToolbarButton.Events.Click, () => this.domStorage.clear(), this);
+ var columns = /** @type {!Array<!DataGrid.DataGrid.ColumnDescriptor>} */ ([
+ {id: 'key', title: Common.UIString('Key'), sortable: false, editable: true, weight: 50},
+ {id: 'value', title: Common.UIString('Value'), sortable: false, editable: true, weight: 50}
+ ]);
+ var dataGrid = new DataGrid.DataGrid(columns, this._editingCallback.bind(this), this._deleteCallback.bind(this));
dgozman 2017/01/26 22:21:09 this._dataGrid
eostroukhov 2017/01/26 23:35:45 Done.
+ dataGrid.setName('DOMStorageItemsView');
- this._refreshButton = new UI.ToolbarButton(Common.UIString('Refresh'), 'largeicon-refresh');
- this._refreshButton.addEventListener(UI.ToolbarButton.Events.Click, this._refreshButtonClicked, this);
+ this._dataGrid = dataGrid;
+ this.showFilterBar();
dgozman 2017/01/26 22:21:09 Why show filter by default?
eostroukhov 2017/01/26 23:35:46 I will rename to "showFilterUI" - what it does is
+ this._dataGrid.asWidget().show(this.element);
this.domStorage.addEventListener(
Resources.DOMStorage.Events.DOMStorageItemsCleared, this._domStorageItemsCleared, this);
@@ -56,24 +57,16 @@ Resources.DOMStorageItemsView = class extends UI.SimpleView {
/**
* @override
- * @return {!Array.<!UI.ToolbarItem>}
- */
- syncToolbarItems() {
- return [this._refreshButton, this._clearButton, this._deleteButton];
- }
-
- /**
- * @override
*/
wasShown() {
- this._update();
+ this.onRefresh();
}
/**
* @override
*/
willHide() {
- this._deleteButton.setEnabled(false);
+ this._setDeleteEnabled(false);
}
/**
@@ -85,7 +78,7 @@ Resources.DOMStorageItemsView = class extends UI.SimpleView {
this._dataGrid.rootNode().removeChildren();
this._dataGrid.addCreationNode(false);
- this._deleteButton.setEnabled(false);
+ this._setDeleteEnabled(false);
}
/**
@@ -103,7 +96,7 @@ Resources.DOMStorageItemsView = class extends UI.SimpleView {
var childNode = children[i];
if (childNode.data.key === storageData.key) {
rootNode.removeChild(childNode);
- this._deleteButton.setEnabled(children.length > 1);
+ this._setDeleteEnabled(children.length > 1);
return;
}
}
@@ -120,7 +113,7 @@ Resources.DOMStorageItemsView = class extends UI.SimpleView {
var rootNode = this._dataGrid.rootNode();
var children = rootNode.children;
- this._deleteButton.setEnabled(true);
+ this._setDeleteEnabled(true);
for (var i = 0; i < children.length; ++i) {
if (children[i].data.key === storageData.key)
@@ -157,59 +150,53 @@ Resources.DOMStorageItemsView = class extends UI.SimpleView {
childNode.select();
childNode.reveal();
}
- this._deleteButton.setEnabled(true);
+ this._setDeleteEnabled(true);
}
}
}
- _update() {
- this.detachChildWidgets();
- this.domStorage.getItems(this._showDOMStorageItems.bind(this));
- }
-
+ /**
+ * @param {?Object} error
+ * @param {!Array<!Array<string>>} items
+ */
_showDOMStorageItems(error, items) {
if (error)
return;
-
- this._dataGrid = this._dataGridForDOMStorageItems(items);
- this._dataGrid.asWidget().show(this.element);
- this._deleteButton.setEnabled(this._dataGrid.rootNode().children.length > 1);
- }
-
- _dataGridForDOMStorageItems(items) {
- var columns = /** @type {!Array<!DataGrid.DataGrid.ColumnDescriptor>} */ ([
- {id: 'key', title: Common.UIString('Key'), sortable: false, editable: true, weight: 50},
- {id: 'value', title: Common.UIString('Value'), sortable: false, editable: true, weight: 50}
- ]);
-
- var nodes = [];
-
- var keys = [];
- var length = items.length;
- for (var i = 0; i < items.length; i++) {
- var key = items[i][0];
- var value = items[i][1];
- var node = new DataGrid.DataGridNode({key: key, value: value}, false);
+ var rootNode = this._dataGrid.rootNode();
+ var selectedKey = null;
+ for (var node of rootNode.children) {
+ if (!node.selected)
+ continue;
+ selectedKey = node.data.key;
+ break;
+ }
+ rootNode.removeChildren();
+ var selectedNode = null;
+ for (var item of this.filter(items, item => `${item[0]} ${item[1]}`)) {
dgozman 2017/01/26 22:21:09 Mind extracting |filteredItems| variable?
eostroukhov 2017/01/26 23:35:46 Done.
+ var key = item[0];
+ var value = item[1];
+ var node = new DataGrid.DataGridNode({key, value}, false);
dgozman 2017/01/26 22:21:09 Don't use new language features without discussion
eostroukhov 2017/01/26 23:35:45 Assumed it was ok to use ES6 - I removed this feat
node.selectable = true;
- nodes.push(node);
- keys.push(key);
+ rootNode.appendChild(node);
+ if (!selectedNode || key === selectedKey) {
dgozman 2017/01/26 22:21:09 if (key === selectedKey) selectedNode = node;
eostroukhov 2017/01/26 23:35:46 Done. Note that I kept "!selectedNode" to select t
+ if (selectedNode)
+ selectedNode.selected = false;
+ selectedNode = node;
+ node.selected = true;
+ }
}
+ this._dataGrid.addCreationNode(false);
+ this._setDeleteEnabled(!!selectedNode);
+ }
- var dataGrid = new DataGrid.DataGrid(columns, this._editingCallback.bind(this), this._deleteCallback.bind(this));
- dataGrid.setName('DOMStorageItemsView');
- length = nodes.length;
- for (var i = 0; i < length; ++i)
- dataGrid.rootNode().appendChild(nodes[i]);
- dataGrid.addCreationNode(false);
- if (length > 0)
- nodes[0].selected = true;
- return dataGrid;
+ _setDeleteEnabled(enabled) {
+ this.deleteButton.setEnabled(enabled);
dgozman 2017/01/26 22:21:09 Inline this.
eostroukhov 2017/01/26 23:35:45 Done.
}
/**
- * @param {!Common.Event} event
+ * @override
*/
- _deleteButtonClicked(event) {
+ onDelete() {
if (!this._dataGrid || !this._dataGrid.selectedNode)
return;
@@ -217,10 +204,17 @@ Resources.DOMStorageItemsView = class extends UI.SimpleView {
}
/**
- * @param {!Common.Event} event
+ * @override
+ */
+ onRefresh() {
+ this.domStorage.getItems((error, items) => this._showDOMStorageItems(error, items));
+ }
+
+ /**
+ * @override
*/
- _refreshButtonClicked(event) {
- this._update();
+ onClearAll() {
+ this.domStorage.clear();
}
_editingCallback(editingNode, columnIdentifier, oldText, newText) {

Powered by Google App Engine
This is Rietveld 408576698