Title: [248916] trunk/Source/WebInspectorUI
Revision
248916
Author
drou...@apple.com
Date
2019-08-20 14:11:11 -0700 (Tue, 20 Aug 2019)

Log Message

Web Inspector: Sources: move the resource type scope bar to be next to the filter
https://bugs.webkit.org/show_bug.cgi?id=200891

Reviewed by Joseph Pecoraro.

It's odd to have UI for controlling the active filters in two different places. Move the
resource type `WI.ScopeBar` to the filter bar area, and "promote" the resource grouping mode
items from a context menu to an always visible `WI.ScopeBar` in the space left by the
resource type `WI.ScopeBar` (switching between grouping modes quickly is a useful workflow).

* UserInterface/Views/SourcesNavigationSidebarPanel.js:
(WI.SourcesNavigationSidebarPanel):
(WI.SourcesNavigationSidebarPanel.prototype.hasCustomFilters):
(WI.SourcesNavigationSidebarPanel.prototype._handleResourceGroupingModeScopeBarSelectionChanged): Added.
(WI.SourcesNavigationSidebarPanel.prototype._handleResourceGroupingModeChanged):
(WI.SourcesNavigationSidebarPanel.prototype._populateResourceGroupingModeContextMenu.addOption): Deleted.
(WI.SourcesNavigationSidebarPanel.prototype._populateResourceGroupingModeContextMenu): Deleted.
* UserInterface/Views/SourcesNavigationSidebarPanel.css:
(.sidebar > .panel.navigation.sources > .filter-bar .sources-resource-type-scope-bar.default-item-selected:not(:hover)): Added.
(.sidebar > .panel.navigation.sources > .filter-bar .sources-resource-type-scope-bar.default-item-selected:hover): Added.

* UserInterface/Views/FilterBar.js:
(WI.FilterBar.prototype.addFilterNavigationItem): Added.
(WI.FilterBar.prototype.addFilterBarButton):
* UserInterface/Views/FilterBar.css:
(.filter-bar > .navigation-bar > .item):
(.filter-bar > .navigation-bar > .item.button): Added.
(.filter-bar > .navigation-bar > .item.scope-bar): Added.
(.filter-bar > input[type="search"] + .navigation-bar > .item.scope-bar:last-child): Added.
Provide a way to add arbitrary `WI.NavigationItem` to the contained `WI.NavigationBar`.
Slightly adjust the spacing of the items (depending on their type) in the `WI.NavigationBar`
so they are all centered.

* UserInterface/Views/ScopeBar.css:
(.scope-bar):
(.scope-bar > li):
(.scope-bar > li::after):
(.scope-bar > li:not(.selected):hover): Added.
(body[dir=ltr] .scope-bar > li.multiple > select):
(body[dir=rtl] .scope-bar > li.multiple > select):
(.scope-bar > li:not(.selected):hover::after): Added.
Introduce CSS variables for `margin`, `padding`, and `opacity` that callers can override to
customize the appearance of the `WI.ScopeBar`.

* Localizations/en.lproj/localizedStrings.js:

Modified Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (248915 => 248916)


--- trunk/Source/WebInspectorUI/ChangeLog	2019-08-20 20:40:32 UTC (rev 248915)
+++ trunk/Source/WebInspectorUI/ChangeLog	2019-08-20 21:11:11 UTC (rev 248916)
@@ -1,3 +1,51 @@
+2019-08-20  Devin Rousso  <drou...@apple.com>
+
+        Web Inspector: Sources: move the resource type scope bar to be next to the filter
+        https://bugs.webkit.org/show_bug.cgi?id=200891
+
+        Reviewed by Joseph Pecoraro.
+
+        It's odd to have UI for controlling the active filters in two different places. Move the
+        resource type `WI.ScopeBar` to the filter bar area, and "promote" the resource grouping mode
+        items from a context menu to an always visible `WI.ScopeBar` in the space left by the
+        resource type `WI.ScopeBar` (switching between grouping modes quickly is a useful workflow).
+
+        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
+        (WI.SourcesNavigationSidebarPanel):
+        (WI.SourcesNavigationSidebarPanel.prototype.hasCustomFilters):
+        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceGroupingModeScopeBarSelectionChanged): Added.
+        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceGroupingModeChanged):
+        (WI.SourcesNavigationSidebarPanel.prototype._populateResourceGroupingModeContextMenu.addOption): Deleted.
+        (WI.SourcesNavigationSidebarPanel.prototype._populateResourceGroupingModeContextMenu): Deleted.
+        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
+        (.sidebar > .panel.navigation.sources > .filter-bar .sources-resource-type-scope-bar.default-item-selected:not(:hover)): Added.
+        (.sidebar > .panel.navigation.sources > .filter-bar .sources-resource-type-scope-bar.default-item-selected:hover): Added.
+
+        * UserInterface/Views/FilterBar.js:
+        (WI.FilterBar.prototype.addFilterNavigationItem): Added.
+        (WI.FilterBar.prototype.addFilterBarButton):
+        * UserInterface/Views/FilterBar.css:
+        (.filter-bar > .navigation-bar > .item):
+        (.filter-bar > .navigation-bar > .item.button): Added.
+        (.filter-bar > .navigation-bar > .item.scope-bar): Added.
+        (.filter-bar > input[type="search"] + .navigation-bar > .item.scope-bar:last-child): Added.
+        Provide a way to add arbitrary `WI.NavigationItem` to the contained `WI.NavigationBar`.
+        Slightly adjust the spacing of the items (depending on their type) in the `WI.NavigationBar`
+        so they are all centered.
+
+        * UserInterface/Views/ScopeBar.css:
+        (.scope-bar):
+        (.scope-bar > li):
+        (.scope-bar > li::after):
+        (.scope-bar > li:not(.selected):hover): Added.
+        (body[dir=ltr] .scope-bar > li.multiple > select):
+        (body[dir=rtl] .scope-bar > li.multiple > select):
+        (.scope-bar > li:not(.selected):hover::after): Added.
+        Introduce CSS variables for `margin`, `padding`, and `opacity` that callers can override to
+        customize the appearance of the `WI.ScopeBar`.
+
+        * Localizations/en.lproj/localizedStrings.js:
+
 2019-08-20  Joseph Pecoraro  <pecor...@apple.com>
 
         Web Inspector: Sources: Give Origins their own icon in the Sources sidebar

Modified: trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js (248915 => 248916)


--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js	2019-08-20 20:40:32 UTC (rev 248915)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js	2019-08-20 21:11:11 UTC (rev 248916)
@@ -184,6 +184,8 @@
 localizedStrings["Breakpoints disabled"] = "Breakpoints disabled";
 localizedStrings["Bubbling"] = "Bubbling";
 localizedStrings["Busy"] = "Busy";
+localizedStrings["By Path"] = "By Path";
+localizedStrings["By Type"] = "By Type";
 localizedStrings["Byte Range %s\u2013%s"] = "Byte Range %s\u2013%s";
 localizedStrings["Bytes Received"] = "Bytes Received";
 localizedStrings["Bytes Sent"] = "Bytes Sent";
@@ -551,11 +553,8 @@
 localizedStrings["Group By Resource"] = "Group By Resource";
 localizedStrings["Group Media Requests"] = "Group Media Requests";
 localizedStrings["Group by Event"] = "Group by Event";
-localizedStrings["Group by Path"] = "Group by Path";
 localizedStrings["Group by Target"] = "Group by Target";
-localizedStrings["Group by Type"] = "Group by Type";
 localizedStrings["Grouping Method"] = "Grouping Method";
-localizedStrings["Grouping Mode"] = "Grouping Mode";
 localizedStrings["HAR Export (%s)"] = "HAR Export (%s)";
 localizedStrings["HAR Import"] = "HAR Import";
 localizedStrings["HAR Import Error: %s"] = "HAR Import Error: %s";

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/FilterBar.css (248915 => 248916)


--- trunk/Source/WebInspectorUI/UserInterface/Views/FilterBar.css	2019-08-20 20:40:32 UTC (rev 248915)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/FilterBar.css	2019-08-20 21:11:11 UTC (rev 248916)
@@ -39,9 +39,18 @@
 }
 
 .filter-bar > .navigation-bar > .item {
-    padding: 0 0 3px;
+    padding: 0 0 2px;
 }
 
+.filter-bar > .navigation-bar > .item.button {
+    padding-bottom: 3px;
+}
+
+.filter-bar > .navigation-bar > .item.scope-bar {
+    --scope-bar-padding-override: 4px;
+    --scope-bar-margin-override: 0;
+}
+
 .filter-bar > input[type="search"] {
     display: flex;
     flex: 1;
@@ -63,6 +72,10 @@
     height: 22px;
 }
 
+.filter-bar > input[type="search"] + .navigation-bar > .item.scope-bar:last-child {
+    -webkit-margin-end: 4px;
+}
+
 .filter-bar > .navigation-bar + input[type="search"] {
     -webkit-margin-start: 0;
 }

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/FilterBar.js (248915 => 248916)


--- trunk/Source/WebInspectorUI/UserInterface/Views/FilterBar.js	2019-08-20 20:40:32 UTC (rev 248915)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/FilterBar.js	2019-08-20 21:11:11 UTC (rev 248916)
@@ -140,12 +140,18 @@
         this._inputField.value = null; // Get the placeholder to show again.
     }
 
+    addFilterNavigationItem(navigationItem)
+    {
+        console.assert(navigationItem instanceof WI.NavigationItem);
+        this._filtersNavigationBar.addNavigationItem(navigationItem);
+    }
+
     addFilterBarButton(identifier, filterFunction, activatedByDefault, defaultToolTip, activatedToolTip, image, imageWidth, imageHeight)
     {
         var filterBarButton = new WI.FilterBarButton(identifier, filterFunction, activatedByDefault, defaultToolTip, activatedToolTip, image, imageWidth, imageHeight);
         filterBarButton.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._handleFilterBarButtonClicked, this);
         filterBarButton.addEventListener(WI.FilterBarButton.Event.ActivatedStateToggled, this._handleFilterButtonToggled, this);
-        this._filtersNavigationBar.addNavigationItem(filterBarButton);
+        this.addFilterNavigationItem(filterBarButton);
         if (filterBarButton.activated) {
             this._filterFunctionsMap.set(filterBarButton.identifier, filterBarButton.filterFunction);
             this._handleFilterChanged();

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ScopeBar.css (248915 => 248916)


--- trunk/Source/WebInspectorUI/UserInterface/Views/ScopeBar.css	2019-08-20 20:40:32 UTC (rev 248915)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ScopeBar.css	2019-08-20 21:11:11 UTC (rev 248916)
@@ -27,8 +27,11 @@
     padding: 0 3px;
     overflow: hidden;
 
+    --scope-bar-margin-default: 2px;
+    --scope-bar-padding-default: 9px;
     --scope-bar-text-color-default: var(--text-color);
     --scope-bar-background-color-default: unset;
+    --scope-bar-background-opacity-default: var(--glyph-opacity);
     --scope-bar-border-color-default: unset;
 }
 
@@ -36,15 +39,18 @@
     position: relative;
     z-index: 0;
     display: inline-block;
-    margin: 0 2px;
-    padding: 2px 9px 4px;
+    margin: 0 var(--scope-bar-margin);
+    padding: 2px var(--scope-bar-padding) 4px;
     font-size: 11px;
     line-height: 11px;
     color: var(--scope-bar-text-color);
     text-align: center;
 
+    --scope-bar-margin: var(--scope-bar-margin-override, var(--scope-bar-margin-default));
+    --scope-bar-padding: var(--scope-bar-padding-override, var(--scope-bar-padding-default));
     --scope-bar-text-color: var(--scope-bar-text-color-override, var(--scope-bar-text-color-default));
     --scope-bar-background-color: var(--scope-bar-background-color-override, var(--scope-bar-background-color-default));
+    --scope-bar-background-opacity: var(--scope-bar-background-opacity-override, var(--scope-bar-background-opacity-default));
     --scope-bar-border-color: var(--scope-bar-border-color-override, var(--scope-bar-border-color-default));
 }
 
@@ -59,7 +65,7 @@
     background-color: var(--scope-bar-background-color);
     border: 1px solid var(--scope-bar-border-color);
     border-radius: 3px;
-    opacity: var(--glyph-opacity);
+    opacity: var(--scope-bar-background-opacity);
 }
 
 .scope-bar > li:matches(.selected, :hover) {
@@ -68,8 +74,8 @@
     --scope-bar-border-color-default: var(--glyph-color-active);
 }
 
-.scope-bar > li:not(.selected):hover::after {
-    opacity: 0.5;
+.scope-bar > li:not(.selected):hover {
+    --scope-bar-background-opacity-default: 0.5;
 }
 
 .scope-bar > li.selected:active::after {
@@ -91,11 +97,11 @@
 }
 
 body[dir=ltr] .scope-bar > li.multiple > select {
-    left: 1px;
+    left: calc(var(--scope-bar-padding) - var(--scope-bar-padding-default) + 1px);
 }
 
 body[dir=rtl] .scope-bar > li.multiple > select {
-    right: 1px;
+    right: calc(var(--scope-bar-padding) - var(--scope-bar-padding-default) + 1px);
 }
 
 .scope-bar > li.multiple:not(.selected) > select {

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.css (248915 => 248916)


--- trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.css	2019-08-20 20:40:32 UTC (rev 248915)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.css	2019-08-20 21:11:11 UTC (rev 248916)
@@ -104,6 +104,16 @@
     display: none;
 }
 
+.sidebar > .panel.navigation.sources > .filter-bar .sources-resource-type-scope-bar.default-item-selected:not(:hover) {
+    --scope-bar-text-color-override: var(--text-color);
+    --scope-bar-background-color-override: transparent;
+    --scope-bar-border-color-override: transparent;
+}
+
+.sidebar > .panel.navigation.sources > .filter-bar .sources-resource-type-scope-bar.default-item-selected:hover {
+    --scope-bar-background-opacity-override: 0.5;
+}
+
 @media (min-height: 650px) {
     .sidebar > .panel.navigation.sources > .content {
         display: flex;

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js (248915 => 248916)


--- trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js	2019-08-20 20:40:32 UTC (rev 248915)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js	2019-08-20 21:11:11 UTC (rev 248916)
@@ -221,29 +221,18 @@
         this.contentView.addSubview(this._resourcesNavigationBar);
         this.contentView.element.insertBefore(this._resourcesNavigationBar.element, this._breakpointsContainer.nextSibling);
 
-        this._resourcesNavigationBar.addNavigationItem(new WI.FlexibleSpaceNavigationItem);
+        this._resourceGroupingModeScopeBarItems = {};
+        let createResourceGroupingModeScopeBarItem = (mode, label) => {
+            this._resourceGroupingModeScopeBarItems[mode] = new WI.ScopeBarItem("sources-resource-grouping-mode-" + mode, label, {exclusive: true});
+            this._resourceGroupingModeScopeBarItems[mode][SourcesNavigationSidebarPanel.ResourceGroupingModeSymbol] = mode;
+        };
+        createResourceGroupingModeScopeBarItem(WI.Resource.GroupingMode.Type, WI.UIString("By Type"));
+        createResourceGroupingModeScopeBarItem(WI.Resource.GroupingMode.Path, WI.UIString("By Path"));
 
-        const resourceTypeScopeItemPrefix = "sources-resource-type-";
-        let resourceTypeScopeBarItems = [];
-        resourceTypeScopeBarItems.push(new WI.ScopeBarItem(resourceTypeScopeItemPrefix + "all", WI.UIString("All Resources"), {exclusive: true}));
-        for (let value of Object.values(WI.Resource.Type)) {
-            let scopeBarItem = new WI.ScopeBarItem(resourceTypeScopeItemPrefix + value, WI.Resource.displayNameForType(value, true));
-            scopeBarItem[WI.SourcesNavigationSidebarPanel.ResourceTypeSymbol] = value;
-            resourceTypeScopeBarItems.push(scopeBarItem);
-        }
+        this._resourceGroupingModeScopeBar = new WI.ScopeBar("sources-resource-grouping-mode-scope-bar", Object.values(this._resourceGroupingModeScopeBarItems), this._resourceGroupingModeScopeBarItems[WI.settings.resourceGroupingMode.value]);
+        this._resourceGroupingModeScopeBar.addEventListener(WI.ScopeBar.Event.SelectionChanged, this._handleResourceGroupingModeScopeBarSelectionChanged, this);
+        this._resourcesNavigationBar.addNavigationItem(this._resourceGroupingModeScopeBar);
 
-        const shouldGroupNonExclusiveItems = true;
-        this._resourceTypeScopeBar = new WI.ScopeBar("sources-resource-type-scope-bar", resourceTypeScopeBarItems, resourceTypeScopeBarItems[0], shouldGroupNonExclusiveItems);
-        this._resourceTypeScopeBar.addEventListener(WI.ScopeBar.Event.SelectionChanged, this._handleResourceTypeScopeBarSelectionChanged, this);
-        this._resourcesNavigationBar.addNavigationItem(this._resourceTypeScopeBar);
-
-        this._resourcesNavigationBar.addNavigationItem(new WI.FlexibleSpaceNavigationItem);
-
-        let resourceGroupingModeNavigationItem = new WI.ButtonNavigationItem("grouping-mode", WI.UIString("Grouping Mode"), "Images/Gear.svg", 15, 15);
-        resourceGroupingModeNavigationItem.visibilityPriority = WI.NavigationItem.VisibilityPriority.Low;
-        WI.addMouseDownContextMenuHandlers(resourceGroupingModeNavigationItem.element, this._populateResourceGroupingModeContextMenu.bind(this));
-        this._resourcesNavigationBar.addNavigationItem(resourceGroupingModeNavigationItem);
-
         let resourcesContainer = document.createElement("div");
         resourcesContainer.classList.add("resources-container");
         this.contentView.element.insertBefore(resourcesContainer, this._resourcesNavigationBar.element.nextSibling);
@@ -266,6 +255,20 @@
         const activatedByDefault = false;
         this.filterBar.addFilterBarButton("sources-only-show-resources-with-issues", this._filterByResourcesWithIssues.bind(this), activatedByDefault, WI.UIString("Only show resources with issues"), WI.UIString("Show all resources"), "Images/Errors.svg", 15, 15);
 
+        const resourceTypeScopeItemPrefix = "sources-resource-type-";
+        let resourceTypeScopeBarItems = [];
+        resourceTypeScopeBarItems.push(new WI.ScopeBarItem(resourceTypeScopeItemPrefix + "all", WI.UIString("All")));
+        for (let value of Object.values(WI.Resource.Type)) {
+            let scopeBarItem = new WI.ScopeBarItem(resourceTypeScopeItemPrefix + value, WI.Resource.displayNameForType(value, true));
+            scopeBarItem[SourcesNavigationSidebarPanel.ResourceTypeSymbol] = value;
+            resourceTypeScopeBarItems.push(scopeBarItem);
+        }
+
+        const shouldGroupNonExclusiveItems = true;
+        this._resourceTypeScopeBar = new WI.ScopeBar("sources-resource-type-scope-bar", resourceTypeScopeBarItems, resourceTypeScopeBarItems[0], shouldGroupNonExclusiveItems);
+        this._resourceTypeScopeBar.addEventListener(WI.ScopeBar.Event.SelectionChanged, this._handleResourceTypeScopeBarSelectionChanged, this);
+        this.filterBar.addFilterNavigationItem(this._resourceTypeScopeBar);
+
         WI.settings.resourceGroupingMode.addEventListener(WI.Setting.Event.Changed, this._handleResourceGroupingModeChanged, this);
 
         WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._handleFrameMainResourceDidChange, this);
@@ -557,7 +560,7 @@
     {
         console.assert(this._resourceTypeScopeBar.selectedItems.length === 1);
         let selectedScopeBarItem = this._resourceTypeScopeBar.selectedItems[0];
-        return selectedScopeBarItem && !selectedScopeBarItem.exclusive;
+        return selectedScopeBarItem && selectedScopeBarItem !== this._resourceTypeScopeBar.defaultItem;
     }
 
     matchTreeElementAgainstCustomFilters(treeElement, flags)
@@ -569,8 +572,8 @@
         console.assert(this._resourceTypeScopeBar.selectedItems.length === 1);
         let selectedScopeBarItem = this._resourceTypeScopeBar.selectedItems[0];
 
-        // Show everything if there is no selection or "All Resources" is selected (the exclusive item).
-        if (!selectedScopeBarItem || selectedScopeBarItem.exclusive)
+        // Show everything if there is no selection or "All Resources" is selected (the default item).
+        if (!selectedScopeBarItem || selectedScopeBarItem === this._resourceTypeScopeBar.defaultItem)
             return true;
 
         // Folders are hidden on the first pass, but visible childen under the folder will force the folder visible again.
@@ -1514,20 +1517,16 @@
         return false;
     }
 
-    _handleResourceTypeScopeBarSelectionChanged(event)
+    _handleResourceGroupingModeScopeBarSelectionChanged(event)
     {
-        this.updateFilter();
+        console.assert(this._resourceGroupingModeScopeBar.selectedItems.length === 1);
+        let selectedScopeBarItem = this._resourceGroupingModeScopeBar.selectedItems[0];
+        WI.settings.resourceGroupingMode.value = selectedScopeBarItem[SourcesNavigationSidebarPanel.ResourceGroupingModeSymbol] || WI.Resource.GroupingMode.Type;
     }
 
-    _populateResourceGroupingModeContextMenu(contextMenu)
+    _handleResourceTypeScopeBarSelectionChanged(event)
     {
-        function addOption(mode, label) {
-            contextMenu.appendCheckboxItem(label, () => {
-                WI.settings.resourceGroupingMode.value = mode;
-            }, WI.settings.resourceGroupingMode.value === mode);
-        }
-        addOption(WI.Resource.GroupingMode.Path, WI.UIString("Group by Path"));
-        addOption(WI.Resource.GroupingMode.Type, WI.UIString("Group by Type"));
+        this.updateFilter();
     }
 
     _handleTreeSelectionDidChange(event)
@@ -1759,6 +1758,11 @@
 
         this._originTreeElementMap.clear();
 
+        let resourceGroupingModeScopeBarItem = this._resourceGroupingModeScopeBarItems[WI.settings.resourceGroupingMode.value];
+        console.assert(resourceGroupingModeScopeBarItem);
+        if (resourceGroupingModeScopeBarItem)
+            resourceGroupingModeScopeBarItem.selected = true;
+
         this._resourcesTreeOutline.removeChildren();
 
         let mainFrame = WI.networkManager.mainFrame;
@@ -2148,3 +2152,4 @@
 };
 
 WI.SourcesNavigationSidebarPanel.ResourceTypeSymbol = Symbol("resource-type");
+WI.SourcesNavigationSidebarPanel.ResourceGroupingModeSymbol = Symbol("resource-grouping-mode");
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to