Web Inspector: Support search on IndexedDB stores and indexes
https://bugs.webkit.org/show_bug.cgi?id=129208
<rdar://problem/16142046>
Reviewed by Timothy Hatcher.
Add filter bars to the navigation bars for `IndexedDB`, `LocalStorage`, and `SessionStorage`.
* UserInterface/Views/StorageTabContentView.js:
(WI.StorageTabContentView.prototype.get canHandleFindEvent): Added.
(WI.StorageTabContentView.prototype.handleFindEvent): Added.
* UserInterface/Views/DOMStorageContentView.js:
(WI.DOMStorageContentView):
(WI.DOMStorageContentView.prototype.get navigationItems): Added.
(WI.DOMStorageContentView.prototype.get canFocusFilterBar): Added.
(WI.DOMStorageContentView.prototype.focusFilterBar): Added.
(WI.DOMStorageContentView.prototype._handleFilterBarFilterDidChange): Added.
* UserInterface/Views/IndexedDatabaseObjectStoreContentView.js:
(WI.IndexedDatabaseObjectStoreContentView):
(WI.IndexedDatabaseObjectStoreContentView.prototype.get navigationItems):
(WI.IndexedDatabaseObjectStoreContentView.prototype.get canFocusFilterBar): Added.
(WI.IndexedDatabaseObjectStoreContentView.prototype.focusFilterBar): Added.
(WI.IndexedDatabaseObjectStoreContentView.prototype.dataGridMatchNodeAgainstCustomFilters): Added.
(WI.IndexedDatabaseObjectStoreContentView.prototype._handleFilterBarFilterDidChange): Added.
Check against the `textContent` of each cell for a given `WI.DataGridNode` to see if it
matches the filter text as all of the pieces of data are `WI.RemoteObject`s.
* UserInterface/Views/FilterBar.css:
(.filter-bar):
* UserInterface/Views/NetworkTableContentView.css:
(.content-view.network .navigation-bar .filter-bar): Deleted.
Remove the `background-color` to let it match the background content.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@253161 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebInspectorUI/ChangeLog b/Source/WebInspectorUI/ChangeLog
index 277992a..7514fd7 100644
--- a/Source/WebInspectorUI/ChangeLog
+++ b/Source/WebInspectorUI/ChangeLog
@@ -1,5 +1,42 @@
2019-12-05 Devin Rousso <drousso@apple.com>
+ Web Inspector: Support search on IndexedDB stores and indexes
+ https://bugs.webkit.org/show_bug.cgi?id=129208
+ <rdar://problem/16142046>
+
+ Reviewed by Timothy Hatcher.
+
+ Add filter bars to the navigation bars for `IndexedDB`, `LocalStorage`, and `SessionStorage`.
+
+ * UserInterface/Views/StorageTabContentView.js:
+ (WI.StorageTabContentView.prototype.get canHandleFindEvent): Added.
+ (WI.StorageTabContentView.prototype.handleFindEvent): Added.
+
+ * UserInterface/Views/DOMStorageContentView.js:
+ (WI.DOMStorageContentView):
+ (WI.DOMStorageContentView.prototype.get navigationItems): Added.
+ (WI.DOMStorageContentView.prototype.get canFocusFilterBar): Added.
+ (WI.DOMStorageContentView.prototype.focusFilterBar): Added.
+ (WI.DOMStorageContentView.prototype._handleFilterBarFilterDidChange): Added.
+
+ * UserInterface/Views/IndexedDatabaseObjectStoreContentView.js:
+ (WI.IndexedDatabaseObjectStoreContentView):
+ (WI.IndexedDatabaseObjectStoreContentView.prototype.get navigationItems):
+ (WI.IndexedDatabaseObjectStoreContentView.prototype.get canFocusFilterBar): Added.
+ (WI.IndexedDatabaseObjectStoreContentView.prototype.focusFilterBar): Added.
+ (WI.IndexedDatabaseObjectStoreContentView.prototype.dataGridMatchNodeAgainstCustomFilters): Added.
+ (WI.IndexedDatabaseObjectStoreContentView.prototype._handleFilterBarFilterDidChange): Added.
+ Check against the `textContent` of each cell for a given `WI.DataGridNode` to see if it
+ matches the filter text as all of the pieces of data are `WI.RemoteObject`s.
+
+ * UserInterface/Views/FilterBar.css:
+ (.filter-bar):
+ * UserInterface/Views/NetworkTableContentView.css:
+ (.content-view.network .navigation-bar .filter-bar): Deleted.
+ Remove the `background-color` to let it match the background content.
+
+2019-12-05 Devin Rousso <drousso@apple.com>
+
Web Inspector: Network: pressing ⌘F when no network item is selected should focus the filter bar
https://bugs.webkit.org/show_bug.cgi?id=204862
diff --git a/Source/WebInspectorUI/UserInterface/Views/DOMStorageContentView.js b/Source/WebInspectorUI/UserInterface/Views/DOMStorageContentView.js
index a9551da..e0fd85e 100644
--- a/Source/WebInspectorUI/UserInterface/Views/DOMStorageContentView.js
+++ b/Source/WebInspectorUI/UserInterface/Views/DOMStorageContentView.js
@@ -50,14 +50,21 @@
this._dataGrid.sortColumnIdentifier = "key";
this._dataGrid.createSettings("dom-storage-content-view");
this._dataGrid.addEventListener(WI.DataGrid.Event.SortChanged, this._sortDataGrid, this);
-
this.addSubview(this._dataGrid);
+ this._filterBarNavigationItem = new WI.FilterBarNavigationItem;
+ this._filterBarNavigationItem.filterBar.addEventListener(WI.FilterBar.Event.FilterDidChange, this._handleFilterBarFilterDidChange, this);
+
this._populate();
}
// Public
+ get navigationItems()
+ {
+ return [this._filterBarNavigationItem];
+ }
+
saveToCookie(cookie)
{
cookie.type = WI.ContentViewCookieType.DOMStorage;
@@ -70,6 +77,16 @@
return [this._dataGrid.scrollContainer];
}
+ get canFocusFilterBar()
+ {
+ return true;
+ }
+
+ focusFilterBar()
+ {
+ this._filterBarNavigationItem.filterBar.focus();
+ }
+
itemsCleared(event)
{
this._dataGrid.removeChildren();
@@ -268,6 +285,11 @@
return node.data.originalValue;
return text;
}
+
+ _handleFilterBarFilterDidChange(event)
+ {
+ this._dataGrid.filterText = this._filterBarNavigationItem.filterBar.filters.text || "";
+ }
};
WI.DOMStorageContentView.DuplicateKeyStyleClassName = "duplicate-key";
diff --git a/Source/WebInspectorUI/UserInterface/Views/FilterBar.css b/Source/WebInspectorUI/UserInterface/Views/FilterBar.css
index 7df5875..fe54a40 100644
--- a/Source/WebInspectorUI/UserInterface/Views/FilterBar.css
+++ b/Source/WebInspectorUI/UserInterface/Views/FilterBar.css
@@ -25,13 +25,9 @@
.filter-bar {
display: flex;
-
height: var(--navigation-bar-height);
-
white-space: nowrap;
overflow: hidden;
-
- background-color: var(--panel-background-color);
}
.filter-bar > .navigation-bar {
diff --git a/Source/WebInspectorUI/UserInterface/Views/IndexedDatabaseObjectStoreContentView.js b/Source/WebInspectorUI/UserInterface/Views/IndexedDatabaseObjectStoreContentView.js
index 66202ad..a7e60a7 100644
--- a/Source/WebInspectorUI/UserInterface/Views/IndexedDatabaseObjectStoreContentView.js
+++ b/Source/WebInspectorUI/UserInterface/Views/IndexedDatabaseObjectStoreContentView.js
@@ -69,6 +69,7 @@
this._dataGrid = new WI.DataGrid(columnInfo);
this._dataGrid.variableHeightRows = true;
+ this._dataGrid.filterDelegate = this;
this._dataGrid.scrollContainer.addEventListener("scroll", this._dataGridScrolled.bind(this));
this.addSubview(this._dataGrid);
@@ -77,6 +78,9 @@
this._fetchingMoreData = false;
this._fetchMoreData();
+ this._filterBarNavigationItem = new WI.FilterBarNavigationItem;
+ this._filterBarNavigationItem.filterBar.addEventListener(WI.FilterBar.Event.FilterDidChange, this._handleFilterBarFilterDidChange, this);
+
this._refreshButtonNavigationItem = new WI.ButtonNavigationItem("indexed-database-object-store-refresh", WI.UIString("Refresh"), "Images/ReloadFull.svg", 13, 13);
this._refreshButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._refreshButtonClicked, this);
@@ -89,7 +93,12 @@
get navigationItems()
{
- return [this._refreshButtonNavigationItem, this._clearButtonNavigationItem];
+ return [
+ this._filterBarNavigationItem,
+ new WI.DividerNavigationItem,
+ this._refreshButtonNavigationItem,
+ this._clearButtonNavigationItem,
+ ];
}
closed()
@@ -113,6 +122,35 @@
return [this._dataGrid.scrollContainer];
}
+ get canFocusFilterBar()
+ {
+ return true;
+ }
+
+ focusFilterBar()
+ {
+ this._filterBarNavigationItem.filterBar.focus();
+ }
+
+ // Protected
+
+ dataGridMatchNodeAgainstCustomFilters(node)
+ {
+ let filterText = this._filterBarNavigationItem.filterBar.filters.text;
+ if (!filterText)
+ return true;
+
+ let regex = WI.SearchUtilities.regExpForString(filterText, WI.SearchUtilities.defaultSettings);
+
+ // Iterate over each cell.
+ for (let child of node.element.children) {
+ if (regex.test(child.textContent))
+ return true;
+ }
+
+ return false;
+ }
+
// Private
_reset()
@@ -161,6 +199,11 @@
WI.indexedDBManager.requestIndexedDatabaseData(this._objectStore, this._objectStoreIndex, this._entries.length, 25, processEntries.bind(this));
}
+ _handleFilterBarFilterDidChange(event)
+ {
+ this._dataGrid.filterDidChange();
+ }
+
_refreshButtonClicked()
{
this._reset();
diff --git a/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.css b/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.css
index 880848e..b4fdb12 100644
--- a/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.css
+++ b/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.css
@@ -23,10 +23,6 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-.content-view.network .navigation-bar .filter-bar {
- background: none;
-}
-
.content-view.tab.network > .content-browser > .navigation-bar .hierarchical-path .icon {
-webkit-margin-start: 8px;
-webkit-margin-end: 4px;
diff --git a/Source/WebInspectorUI/UserInterface/Views/StorageTabContentView.js b/Source/WebInspectorUI/UserInterface/Views/StorageTabContentView.js
index fd91ef3..3d1f155 100644
--- a/Source/WebInspectorUI/UserInterface/Views/StorageTabContentView.js
+++ b/Source/WebInspectorUI/UserInterface/Views/StorageTabContentView.js
@@ -78,6 +78,16 @@
|| representedObject instanceof WI.IndexedDatabaseObjectStoreIndex;
}
+ get canHandleFindEvent()
+ {
+ return this.contentBrowser.currentContentView.canFocusFilterBar;
+ }
+
+ handleFindEvent(event)
+ {
+ this.contentBrowser.currentContentView.focusFilterBar();
+ }
+
closed()
{
WI.applicationCacheManager.disable();