Changeset 181872 in webkit
- Timestamp:
- Mar 23, 2015, 3:00:19 PM (11 years ago)
- Location:
- trunk/Source/WebInspectorUI
- Files:
-
- 4 added
- 7 edited
-
ChangeLog (modified) (1 diff)
-
Localizations/en.lproj/localizedStrings.js (modified) (1 diff)
-
UserInterface/Main.html (modified) (1 diff)
-
UserInterface/Views/DebuggerSidebarPanel.js (modified) (3 diffs)
-
UserInterface/Views/FilterBar.css (modified) (1 diff)
-
UserInterface/Views/FilterBar.js (modified) (4 diffs)
-
UserInterface/Views/FilterBarButton.js (added)
-
UserInterface/Views/NavigationSidebarPanel.js (modified) (5 diffs)
-
WebInspectorUI.esproj (added)
-
WebInspectorUI.esproj/Project.espressostorage (added)
-
WebInspectorUI.esproj/user.jonowells.espressostorage (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebInspectorUI/ChangeLog
r181844 r181872 1 2015-03-17 Jono Wells <jonowells@apple.com> 2 3 Web Inspector: Debugger sidebar should have a filter button for breakpoints 4 https://bugs.webkit.org/show_bug.cgi?id=142779 5 6 Reviewed by Timothy Hatcher. 7 8 Add the infrastructure for activation filter buttons that can appear next to the text filters at the bottom 9 of any navigation sidebar panel. These filter bar buttons have defined within them a function that returns 10 a boolean value that indicates whether the input, typically a tree element, should be filtered or not. 11 12 This infrastructure is then used to create a filter for the debugger sidebar that, when applied, only shows 13 scripts that have breakpoints set on them. 14 15 * Localizations/en.lproj/localizedStrings.js: Updated. 16 * UserInterface/Main.html: Files added. 17 18 * UserInterface/Views/DebuggerSidebarPanel.js: 19 (WebInspector.DebuggerSidebarPanel.showResourcesWithChildrenOnlyFilterFunction): 20 (WebInspector.DebuggerSidebarPanel): 21 (WebInspector.DebuggerSidebarPanel.prototype._addBreakpoint): Drive-by fix. 22 Add filter button to filter bar. 23 24 * UserInterface/Views/FilterBar.css: 25 (.filter-bar > .navigation-bar > .item): 26 Style filter button. 27 28 * UserInterface/Views/FilterBar.js: 29 (WebInspector.FilterBar): 30 (WebInspector.FilterBar.prototype.get filters): 31 (WebInspector.FilterBar.prototype.set filters): 32 (WebInspector.FilterBar.prototype.hasActiveFilters): 33 (WebInspector.FilterBar.prototype._handleFilterChanged): 34 (WebInspector.FilterBar.prototype._inputFieldChanged): Deleted. 35 Create space for filter bar buttons and set up event handlers to deal with them. 36 37 * UserInterface/Views/FilterBarButton.js: Copied from Source/WebInspectorUI/UserInterface/Views/FilterBar.css. 38 (WebInspector.FilterBarButton): 39 (WebInspector.FilterBarButton.prototype.get filterFunction): 40 (WebInspector.FilterBarButton.prototype.toggle): 41 Create class for a filter bar button that stores a filter function. 42 43 * UserInterface/Views/NavigationSidebarPanel.js: 44 (WebInspector.NavigationSidebarPanel): 45 (WebInspector.NavigationSidebarPanel.prototype.matchTreeElementAgainstFilterFunctions): 46 (WebInspector.NavigationSidebarPanel.prototype.applyFiltersToTreeElement): 47 (WebInspector.NavigationSidebarPanel.prototype._filterDidChange): 48 (WebInspector.NavigationSidebarPanel.prototype._updateFilter): 49 (WebInspector.NavigationSidebarPanel.prototype._textFilterDidChange): Deleted. 50 Add functionality to support button filters and process their corresponding functions correctly when filtering. 51 1 52 2015-03-22 Matt Baker <mattbaker@apple.com> 2 53 -
trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js
r181626 r181872 424 424 localizedStrings["Show console (%s)"] = "Show console (%s)"; 425 425 localizedStrings["Show full-height console"] = "Show full-height console"; 426 localizedStrings["Show only resources with breakpoints."] = "Show only resources with breakpoints."; 427 localizedStrings["Show resources with and without breakpoints."] = "Show resources with and without breakpoints."; 426 428 localizedStrings["Show shadow DOM nodes"] = "Show shadow DOM nodes"; 427 429 localizedStrings["Show split console"] = "Show split console"; -
trunk/Source/WebInspectorUI/UserInterface/Main.html
r181723 r181872 394 394 <script src="Views/EventListenerSectionGroup.js"></script> 395 395 <script src="Views/FilterBar.js"></script> 396 <script src="Views/FilterBarButton.js"></script> 396 397 <script src="Views/FindBanner.js"></script> 397 398 <script src="Views/FlexibleSpaceNavigationItem.js"></script> -
trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js
r181768 r181872 54 54 this._navigationBar = new WebInspector.NavigationBar; 55 55 this.element.appendChild(this._navigationBar.element); 56 57 var breakpointsImage, pauseImage, resumeImage, stepOverImage, stepIntoImage, stepOutImage; 58 if (WebInspector.Platform.isLegacyMacOS) { 59 breakpointsImage = {src: "Images/Legacy/Breakpoints.svg", width: 16, height: 16}; 60 pauseImage = {src: "Images/Legacy/Pause.svg", width: 16, height: 16}; 61 resumeImage = {src: "Images/Legacy/Resume.svg", width: 16, height: 16}; 62 stepOverImage = {src: "Images/Legacy/StepOver.svg", width: 16, height: 16}; 63 stepIntoImage = {src: "Images/Legacy/StepInto.svg", width: 16, height: 16}; 64 stepOutImage = {src: "Images/Legacy/StepOut.svg", width: 16, height: 16}; 65 } else { 66 breakpointsImage = {src: "Images/Breakpoints.svg", width: 15, height: 15}; 67 pauseImage = {src: "Images/Pause.svg", width: 15, height: 15}; 68 resumeImage = {src: "Images/Resume.svg", width: 15, height: 15}; 69 stepOverImage = {src: "Images/StepOver.svg", width: 15, height: 15}; 70 stepIntoImage = {src: "Images/StepInto.svg", width: 15, height: 15}; 71 stepOutImage = {src: "Images/StepOut.svg", width: 15, height: 15}; 72 } 56 57 var imageSize = WebInspector.Platform.isLegacyMacOS ? 16 : 15; 58 59 var breakpointsImage = {src: platformImagePath("Breakpoints.svg"), width: imageSize, height: imageSize}; 60 var pauseImage = {src: platformImagePath("Pause.svg"), width: imageSize, height: imageSize}; 61 var resumeImage = {src: platformImagePath("Resume.svg"), width: imageSize, height: imageSize}; 62 var stepOverImage = {src: platformImagePath("StepOver.svg"), width: imageSize, height: imageSize}; 63 var stepIntoImage = {src: platformImagePath("StepInto.svg"), width: imageSize, height: imageSize}; 64 var stepOutImage = {src: platformImagePath("StepOut.svg"), width: imageSize, height: imageSize}; 73 65 74 66 var toolTip = WebInspector.UIString("Enable all breakpoints (%s)").format(this._toggleBreakpointsKeyboardShortcut.displayName); … … 110 102 111 103 this.filterBar.placeholder = WebInspector.UIString("Filter Breakpoint List"); 104 var showResourcesWithBreakpointsOnlyFilterFunction = function(treeElement) 105 { 106 // Keep breakpoints and other elements that aren't resources. 107 if (!treeElement instanceof WebInspector.ResourceTreeElement || treeElement instanceof WebInspector.BreakpointTreeElement) 108 return true; 109 110 // Keep resources with breakpoints. 111 if (treeElement.hasChildren) { 112 for (var child of treeElement.children) { 113 if (child instanceof WebInspector.BreakpointTreeElement) 114 return true; 115 } 116 } 117 return false; 118 }; 119 120 this.filterBar.addFilterBarButton("debugger-show-resources-with-children-only", showResourcesWithBreakpointsOnlyFilterFunction, true, WebInspector.UIString("Show only resources with breakpoints."), WebInspector.UIString("Show resources with and without breakpoints."), platformImagePath("Breakpoints.svg"), 15, 15); 112 121 113 122 this._breakpointsContentTreeOutline = this.contentTreeOutline; … … 283 292 }, 284 293 285 _addBreakpoint: function(breakpoint , sourceCode)294 _addBreakpoint: function(breakpoint) 286 295 { 287 296 var sourceCode = breakpoint.sourceCodeLocation.displaySourceCode; -
trunk/Source/WebInspectorUI/UserInterface/Views/FilterBar.css
r173707 r181872 35 35 body.mac-platform.legacy .filter-bar { 36 36 height: 21px; 37 } 38 39 .filter-bar > .navigation-bar > .item { 40 padding: 0 0 3px 8px; 37 41 } 38 42 -
trunk/Source/WebInspectorUI/UserInterface/Views/FilterBar.js
r181769 r181872 31 31 this._element.classList.add(WebInspector.FilterBar.StyleClassName); 32 32 33 this._filtersNavigationBar = new WebInspector.NavigationBar; 34 this._element.appendChild(this._filtersNavigationBar.element); 35 36 this._filterFunctionsMap = new Map; 37 33 38 this._inputField = document.createElement("input"); 34 39 this._inputField.type = "search"; 35 40 this._inputField.spellcheck = false; 36 41 this._inputField.incremental = true; 37 this._inputField.addEventListener("search", this._ inputFieldChanged.bind(this), false);42 this._inputField.addEventListener("search", this._handleFilterChanged.bind(this), false); 38 43 this._element.appendChild(this._inputField); 39 44 }; … … 45 50 46 51 WebInspector.FilterBar.Event = { 47 TextFilterDidChange: "filter-bar-text-filter-did-change"52 FilterDidChange: "filter-bar-text-filter-did-change" 48 53 }; 49 54 50 55 WebInspector.FilterBar.prototype = { 51 56 constructor: WebInspector.FilterBar, 57 __proto__: WebInspector.Object.prototype, 52 58 53 59 // Public … … 75 81 get filters() 76 82 { 77 return {text: this._inputField.value };83 return {text: this._inputField.value, functions: [...this._filterFunctionsMap.values()]}; 78 84 }, 79 85 … … 85 91 this._inputField.value = filters.text || ""; 86 92 if (oldTextValue !== this._inputField.value) 87 this._inputFieldChanged(); 93 this._handleFilterChanged(); 94 }, 95 96 addFilterBarButton: function(identifier, filterFunction, activatedByDefault, defaultToolTip, activatedToolTip, image, imageWidth, imageHeight, suppressEmboss) 97 { 98 var filterBarButton = new WebInspector.FilterBarButton(identifier, filterFunction, activatedByDefault, defaultToolTip, activatedToolTip, image, imageWidth, imageHeight, suppressEmboss); 99 filterBarButton.addEventListener(WebInspector.ButtonNavigationItem.Event.Clicked, this._handleFilterBarButtonClicked, this); 100 filterBarButton.addEventListener(WebInspector.FilterBarButton.Event.ActivatedStateToggled, this._handleFilterButtonToggled, this); 101 this._filtersNavigationBar.addNavigationItem(filterBarButton); 102 if (filterBarButton.activated) { 103 this._filterFunctionsMap.set(filterBarButton.identifier, filterBarButton.filterFunction); 104 this._handleFilterChanged(); 105 } 88 106 }, 89 107 90 108 hasActiveFilters: function() 91 109 { 92 if (this._inputField.value) 93 return true; 94 return false; 110 return !!this._inputField.value || !!this._filterFunctionsMap.size; 95 111 }, 96 112 97 113 // Private 98 114 99 _ inputFieldChanged: function(event)115 _handleFilterBarButtonClicked(event) 100 116 { 101 this.dispatchEventToListeners(WebInspector.FilterBar.Event.TextFilterDidChange); 117 var filterBarButton = event.target; 118 filterBarButton.toggle(); 119 }, 120 121 _handleFilterButtonToggled: function(event) 122 { 123 var filterBarButton = event.target; 124 if (filterBarButton.activated) 125 this._filterFunctionsMap.set(filterBarButton.identifier, filterBarButton.filterFunction); 126 else 127 this._filterFunctionsMap.delete(filterBarButton.identifier); 128 this._handleFilterChanged(); 129 }, 130 131 _handleFilterChanged: function() 132 { 133 this.dispatchEventToListeners(WebInspector.FilterBar.Event.FilterDidChange); 102 134 } 103 135 }; 104 105 WebInspector.FilterBar.prototype.__proto__ = WebInspector.Object.prototype; -
trunk/Source/WebInspectorUI/UserInterface/Views/NavigationSidebarPanel.js
r180001 r181872 53 53 54 54 this._filterBar = new WebInspector.FilterBar(); 55 this._filterBar.addEventListener(WebInspector.FilterBar.Event. TextFilterDidChange, this._textFilterDidChange, this);55 this._filterBar.addEventListener(WebInspector.FilterBar.Event.FilterDidChange, this._filterDidChange, this); 56 56 this.element.appendChild(this._filterBar.element); 57 57 … … 313 313 }, 314 314 315 matchTreeElementAgainstFilterFunctions: function(treeElement) 316 { 317 for (var filterFunction of this._filterFunctions) { 318 if (filterFunction(treeElement)) 319 return true; 320 } 321 return false; 322 }, 323 315 324 applyFiltersToTreeElement: function(treeElement) 316 325 { … … 376 385 } 377 386 378 if (matchTextFilter(filterableData.text) && this.matchTreeElementAgainst CustomFilters(treeElement)) {387 if (matchTextFilter(filterableData.text) && this.matchTreeElementAgainstFilterFunctions(treeElement) && this.matchTreeElementAgainstCustomFilters(treeElement)) { 379 388 // Make this element visible since it matches. 380 389 makeVisible(); … … 491 500 }, 492 501 493 _ textFilterDidChange: function()502 _filterDidChange: function() 494 503 { 495 504 this._updateFilter(); … … 504 513 this._textFilterRegex = simpleGlobStringToRegExp(filters.text, "i"); 505 514 this._filtersSetting.value = filters; 515 this._filterFunctions = filters.functions; 506 516 507 517 // Don't populate if we don't have any active filters.
Note:
See TracChangeset
for help on using the changeset viewer.