Changeset 260523 in webkit
- Timestamp:
- Apr 22, 2020 11:33:32 AM (4 years ago)
- Location:
- trunk/Source/WebInspectorUI
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebInspectorUI/ChangeLog
r260502 r260523 1 2020-04-22 Devin Rousso <drousso@apple.com> 2 3 Web Inspector: Storage: unable to filter cookies 4 https://bugs.webkit.org/show_bug.cgi?id=210837 5 6 Reviewed by Brian Burg. 7 8 * UserInterface/Views/CookieStorageContentView.js: 9 (WI.CookieStorageContentView): 10 (WI.CookieStorageContentView.prototype.get navigationItems): 11 (WI.CookieStorageContentView.prototype.get canFocusFilterBar): Added. 12 (WI.CookieStorageContentView.prototype.focusFilterBar): Added. 13 (WI.CookieStorageContentView.prototype.tableIndexForRepresentedObject): 14 (WI.CookieStorageContentView.prototype.tableRepresentedObjectForIndex): 15 (WI.CookieStorageContentView.prototype.tableNumberOfRows): 16 (WI.CookieStorageContentView.prototype.tableSortChanged): 17 (WI.CookieStorageContentView.prototype.tableCellContextMenuClicked): 18 (WI.CookieStorageContentView.prototype.tableDidRemoveRows): 19 (WI.CookieStorageContentView.prototype.tablePopulateCell): 20 (WI.CookieStorageContentView.prototype._getCookiesForHost): Renamed from `_filterCookies`. 21 (WI.CookieStorageContentView.prototype.async _willDismissCookiePopover): 22 (WI.CookieStorageContentView.prototype._handleFilterBarFilterDidChange): Added. 23 (WI.CookieStorageContentView.prototype._handleClearNavigationItemClicked): 24 (WI.CookieStorageContentView.prototype._reloadCookies): 25 (WI.CookieStorageContentView.prototype._updateFilteredCookies): Added. 26 (WI.CookieStorageContentView.prototype._updateEmptyFilterResultsMessage): Added. 27 (WI.CookieStorageContentView.prototype._cookiesAtIndexes): 28 (WI.CookieStorageContentView.prototype._filterCookies): Deleted. 29 * UserInterface/Views/CookieStorageContentView.css: 30 (.content-view.cookie-storage > .message-text-view): Added. 31 (.content-view.cookie-storage > .message-text-view > .message): Added. 32 (.content-view.cookie-storage > .data-grid): Deleted. 33 Add a filter bar to the navigation bar that checks the regex-ified filter text against the 34 formatted text of each cell for each cookie. Also hook it up to the global find shortcut. 35 36 * UserInterface/Views/NetworkTableContentView.js: 37 (WI.NetworkTableContentView.prototype.layout): 38 (WI.NetworkTableContentView.prototype._showEmptyFilterResultsMessage): 39 (WI.NetworkTableContentView.prototype._tableNameColumnDidChangeWidth): 40 (WI.NetworkTableContentView.prototype._positionEmptyFilterMessage): Deleted. 41 * UserInterface/Views/NetworkTableContentView.css: 42 (.content-view.network .message-text-view): Added. 43 Drive-by: instead of having the "No Filter Results" view only cover the "Name" column, it 44 should cover the entire table so as to be as noticable as possible (not to mention 45 the table will be empty anyways, so it's not like anything is being hidden). 46 Drive-by: ensure that the "No Filter Results" view doesn't cover the statistics. 47 1 48 2020-04-21 Devin Rousso <drousso@apple.com> 2 49 -
trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.css
r172399 r260523 1 1 /* 2 * Copyright (C) 2013 Apple Inc. All rights reserved.2 * Copyright (C) 2013-2020 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 24 24 */ 25 25 26 .content-view.cookie-storage > .data-grid { 27 position: absolute; 28 top: 0; 29 left: 0; 30 right: 0; 31 bottom: 0; 26 .content-view.cookie-storage > .message-text-view { 27 top: var(--navigation-bar-height); 32 28 } 29 30 .content-view.cookie-storage > .message-text-view > .message { 31 font-size: var(--message-text-view-font-size); 32 font-weight: normal; 33 } -
trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.js
r259744 r260523 33 33 34 34 this._cookies = []; 35 this._filteredCookies = []; 35 36 this._sortComparator = null; 36 37 this._table = null; 38 39 this._emptyFilterResultsMessageElement = null; 40 41 this._filterBarNavigationItem = new WI.FilterBarNavigationItem; 42 this._filterBarNavigationItem.filterBar.addEventListener(WI.FilterBar.Event.FilterDidChange, this._handleFilterBarFilterDidChange, this); 37 43 38 44 if (InspectorBackend.hasCommand("Page.setCookie")) { … … 54 60 { 55 61 let navigationItems = []; 62 navigationItems.push(this._filterBarNavigationItem); 63 navigationItems.push(new WI.DividerNavigationItem); 56 64 if (this._setCookieButtonNavigationItem) 57 65 navigationItems.push(this._setCookieButtonNavigationItem); … … 74 82 } 75 83 84 get canFocusFilterBar() 85 { 86 return true; 87 } 88 89 focusFilterBar() 90 { 91 this._filterBarNavigationItem.filterBar.focus(); 92 } 93 76 94 handleCopyEvent(event) 77 95 { … … 92 110 tableIndexForRepresentedObject(table, object) 93 111 { 94 let index = this._ cookies.indexOf(object);112 let index = this._filteredCookies.indexOf(object); 95 113 console.assert(index >= 0); 96 114 return index; … … 99 117 tableRepresentedObjectForIndex(table, index) 100 118 { 101 console.assert(index >= 0 && index < this._ cookies.length);102 return this._ cookies[index];119 console.assert(index >= 0 && index < this._filteredCookies.length); 120 return this._filteredCookies[index]; 103 121 } 104 122 105 123 tableNumberOfRows(table) 106 124 { 107 return this._ cookies.length;125 return this._filteredCookies.length; 108 126 } 109 127 … … 116 134 117 135 this._updateSort(); 136 this._updateFilteredCookies(); 137 this._updateEmptyFilterResultsMessage(); 118 138 this._table.reloadData(); 119 139 } … … 130 150 contextMenu.appendItem(WI.UIString("Edit"), () => { 131 151 console.assert(!this._editingCookie); 132 this._editingCookie = this._ cookies[rowIndex];152 this._editingCookie = this._filteredCookies[rowIndex]; 133 153 134 154 let popover = new WI.CookiePopover(this); … … 165 185 for (let i = rowIndexes.length - 1; i >= 0; --i) { 166 186 let rowIndex = rowIndexes[i]; 167 let cookie = this._ cookies[rowIndex];187 let cookie = this._filteredCookies[rowIndex]; 168 188 console.assert(cookie, "Missing cookie for row " + rowIndex); 169 189 if (!cookie) 170 190 continue; 171 191 172 this._cookies.splice(rowIndex, 1); 192 this._filteredCookies.splice(rowIndex, 1); 193 this._cookies.remove(cookie); 173 194 174 195 let target = WI.assumingMainTarget(); … … 179 200 tablePopulateCell(table, cell, column, rowIndex) 180 201 { 181 let cookie = this._ cookies[rowIndex];202 let cookie = this._filteredCookies[rowIndex]; 182 203 cell.textContent = this._formatCookiePropertyForColumn(cookie, column); 183 204 return cell; … … 287 308 // Private 288 309 289 _ filterCookies(cookies)310 _getCookiesForHost(cookies, host) 290 311 { 291 312 let resourceMatchesStorageDomain = (resource) => { 292 313 let urlComponents = resource.urlComponents; 293 return urlComponents && urlComponents.host && urlComponents.host === this.representedObject.host;314 return urlComponents && urlComponents.host && urlComponents.host === host; 294 315 }; 295 316 … … 382 403 await Promise.all(promises); 383 404 384 let index = this._ cookies.findIndex((existingCookie) => cookieToSet.equals(existingCookie));405 let index = this._filteredCookies.findIndex((existingCookie) => cookieToSet.equals(existingCookie)); 385 406 if (index >= 0) 386 407 this._table.selectRow(index); 387 408 } 388 409 410 _handleFilterBarFilterDidChange(event) 411 { 412 this._updateFilteredCookies(); 413 this._updateEmptyFilterResultsMessage(); 414 this._table.reloadData(); 415 } 416 389 417 _handleSetCookieButtonClick(event) 390 418 { … … 401 429 { 402 430 let target = WI.assumingMainTarget(); 403 for (let cookie of this._cookies .splice(0))431 for (let cookie of this._cookies) 404 432 target.PageAgent.deleteCookie(cookie.name, cookie.url); 405 433 406 this._ table.reloadData();434 this._reloadCookies(); 407 435 } 408 436 … … 411 439 let target = WI.assumingMainTarget(); 412 440 return target.PageAgent.getCookies().then((payload) => { 413 this._cookies = this._ filterCookies(payload.cookies.map(WI.Cookie.fromPayload));441 this._cookies = this._getCookiesForHost(payload.cookies.map(WI.Cookie.fromPayload), this.representedObject.host); 414 442 this._updateSort(); 443 this._updateFilteredCookies(); 444 this._updateEmptyFilterResultsMessage(); 415 445 this._table.reloadData(); 416 446 }).catch((error) => { … … 427 457 } 428 458 459 _updateFilteredCookies() 460 { 461 let filterText = this._filterBarNavigationItem.filterBar.filters.text; 462 if (filterText) { 463 let regex = WI.SearchUtilities.filterRegExpForString(filterText, WI.SearchUtilities.defaultSettings); 464 this._filteredCookies = this._cookies.filter((cookie) => { 465 for (let column of this._table.columns) { 466 let text = this._formatCookiePropertyForColumn(cookie, column); 467 if (text && regex.test(text)) 468 return true; 469 } 470 return false; 471 }); 472 } else 473 this._filteredCookies = this._cookies; 474 } 475 476 _updateEmptyFilterResultsMessage() 477 { 478 if (this._filteredCookies.length || !this._filterBarNavigationItem.filterBar.filters.text) { 479 if (this._emptyFilterResultsMessageElement) 480 this._emptyFilterResultsMessageElement.remove(); 481 this._emptyFilterResultsMessageElement = null; 482 } else { 483 if (!this._emptyFilterResultsMessageElement) { 484 let buttonElement = document.createElement("button"); 485 buttonElement.textContent = WI.UIString("Clear Filters"); 486 buttonElement.addEventListener("click", (event) => { 487 this._filterBarNavigationItem.filterBar.clear(); 488 }); 489 490 this._emptyFilterResultsMessageElement = WI.createMessageTextView(WI.UIString("No Filter Results")); 491 this._emptyFilterResultsMessageElement.appendChild(buttonElement); 492 } 493 494 this.element.appendChild(this._emptyFilterResultsMessageElement); 495 } 496 } 497 429 498 _handleTableKeyDown(event) 430 499 { … … 435 504 _cookiesAtIndexes(indexes) 436 505 { 437 if (!this._ cookies.length)506 if (!this._filteredCookies.length) 438 507 return []; 439 return indexes.map((index) => this._ cookies[index]);508 return indexes.map((index) => this._filteredCookies[index]); 440 509 } 441 510 -
trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.css
r259423 r260523 228 228 } 229 229 230 .content-view.network .message-text-view { 231 top: var(--navigation-bar-height); 232 bottom: var(--network-statistics-height); 233 } 234 230 235 .content-view.network .message-text-view > .message { 231 236 font-size: var(--message-text-view-font-size); -
trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js
r260291 r260523 1285 1285 this._processPendingEntries(); 1286 1286 this._positionDetailView(); 1287 this._positionEmptyFilterMessage();1288 1287 this._updateExportButton(); 1289 1288 } … … 1604 1603 1605 1604 this.element.appendChild(this._emptyFilterResultsMessageElement); 1606 this._positionEmptyFilterMessage();1607 1605 } 1608 1606 … … 1613 1611 1614 1612 this._emptyFilterResultsMessageElement.remove(); 1615 }1616 1617 _positionEmptyFilterMessage()1618 {1619 if (!this._emptyFilterResultsMessageElement)1620 return;1621 1622 let width = this._nameColumn.width - 1; // For the 1px border.1623 this._emptyFilterResultsMessageElement.style.width = width + "px";1624 1613 } 1625 1614 … … 2495 2484 2496 2485 this._positionDetailView(); 2497 this._positionEmptyFilterMessage();2498 2486 } 2499 2487
Note: See TracChangeset
for help on using the changeset viewer.