Reviewers: pfeldman,
Message:
PTAL. Screenshot:
http://imgur.com/SNlm5KP
Description:
Devtools UX: Add elements toolbar with breadcrumbs
This change adds an elements toolbar to the material design UX in Devtools.
The bar contains the breadcrumbs and a global settings button.
BUG=494836
Please review this at
https://codereview.chromium.org/1158133004/
Base URL:
https://chromium.googlesource.com/chromium/blink.git@master
Affected files (+78, -5 lines):
M Source/devtools/front_end/elements/ElementsBreadcrumbs.js
M Source/devtools/front_end/elements/ElementsPanel.js
M Source/devtools/front_end/elements/breadcrumbs.css
M Source/devtools/front_end/elements/elementsPanel.css
M Source/devtools/front_end/settings/module.json
M Source/devtools/front_end/ui/toolbar.css
Index: Source/devtools/front_end/elements/ElementsBreadcrumbs.js
diff --git a/Source/devtools/front_end/elements/ElementsBreadcrumbs.js
b/Source/devtools/front_end/elements/ElementsBreadcrumbs.js
index
0b1c4e4d737abc1beec7efaaf86a0025af4d49b3..28a95eb402f055b77d74009ba36d6d03bd272263
100644
--- a/Source/devtools/front_end/elements/ElementsBreadcrumbs.js
+++ b/Source/devtools/front_end/elements/ElementsBreadcrumbs.js
@@ -223,9 +223,10 @@ WebInspector.ElementsBreadcrumbs.prototype = {
// Layout 1: Measure total and normal crumb sizes
var contentElementWidth = this.contentElement.offsetWidth;
var normalSizes = [];
+ const leftMargin =
Runtime.experiments.isEnabled("materialDesign") ? 5 : 0;
for (var i = 0; i < crumbs.childNodes.length; ++i) {
var crumb = crumbs.childNodes[i];
- normalSizes[i] = crumb.offsetWidth;
+ normalSizes[i] = crumb.offsetWidth + leftMargin;
}
// Layout 2: Measure collapsed crumb sizes
@@ -236,7 +237,7 @@ WebInspector.ElementsBreadcrumbs.prototype = {
}
for (var i = 0; i < crumbs.childNodes.length; ++i) {
var crumb = crumbs.childNodes[i];
- compactSizes[i] = crumb.offsetWidth;
+ compactSizes[i] = crumb.offsetWidth + leftMargin;
}
// Layout 3: Measure collapsed crumb size
Index: Source/devtools/front_end/elements/ElementsPanel.js
diff --git a/Source/devtools/front_end/elements/ElementsPanel.js
b/Source/devtools/front_end/elements/ElementsPanel.js
index
cb51eaa752a8ba0e8b30a9cadc2079d7d3dce0a8..66fb43b15d50e88b7088aeec376920e264d64e4e
100644
--- a/Source/devtools/front_end/elements/ElementsPanel.js
+++ b/Source/devtools/front_end/elements/ElementsPanel.js
@@ -48,19 +48,30 @@ WebInspector.ElementsPanel = function()
this._searchableView.setPlaceholder(WebInspector.UIString("Find by
string, selector, or XPath"));
var stackElement = this._searchableView.element;
+ this._contentElement = createElement("div");
+ var crumbsContainer = createElement("div");
+ if (Runtime.experiments.isEnabled("materialDesign")) {
+ this._toolbar = this._createElementsToolbar();
+ var toolbar = stackElement.createChild("div", "elements-topbar
hbox");
+ toolbar.appendChild(crumbsContainer);
+ toolbar.appendChild(this._toolbar.element);
+ stackElement.appendChild(this._contentElement);
+ } else {
+ stackElement.appendChild(this._contentElement);
+ stackElement.appendChild(crumbsContainer);
+ }
+
this._elementsPanelTreeOutilneSplit = new
WebInspector.SplitWidget(false, true, "treeOutlineAnimationTimelineWidget",
300, 300);
this._elementsPanelTreeOutilneSplit.hideSidebar();
this._elementsPanelTreeOutilneSplit.setMainWidget(this._searchableView);
this._splitWidget.setMainWidget(this._elementsPanelTreeOutilneSplit);
- this._contentElement = stackElement.createChild("div");
this._contentElement.id = "elements-content";
// FIXME:
crbug.com/425984
if (WebInspector.moduleSetting("domWordWrap").get())
this._contentElement.classList.add("elements-wrap");
WebInspector.moduleSetting("domWordWrap").addChangeListener(this._domWordWrapSettingChanged.bind(this));
- var crumbsContainer = stackElement.createChild("div");
crumbsContainer.id = "elements-crumbs";
this._breadcrumbs = new WebInspector.ElementsBreadcrumbs();
this._breadcrumbs.show(crumbsContainer);
@@ -109,6 +120,17 @@ WebInspector.ElementsPanel = function()
WebInspector.ElementsPanel._elementsSidebarViewTitleSymbol =
Symbol("title");
WebInspector.ElementsPanel.prototype = {
+ /**
+ * @return {!WebInspector.Toolbar}
+ */
+ _createElementsToolbar: function()
+ {
+ var toolbar = new
WebInspector.ExtensibleToolbar("elements-toolbar");
+ toolbar.element.classList.add("elements-toolbar");
+ toolbar.appendToolbarItem(new WebInspector.ToolbarSeparator());
+ return toolbar;
+ },
+
_loadSidebarViews: function()
{
var extensions = self.runtime.extensions("@WebInspector.Widget");
Index: Source/devtools/front_end/elements/breadcrumbs.css
diff --git a/Source/devtools/front_end/elements/breadcrumbs.css
b/Source/devtools/front_end/elements/breadcrumbs.css
index
ad0f668fb6e31da956f8b70bd09ee827fd28cfa4..80376d6d7ead108a17c37dcf2f6e4af4214311c1
100644
--- a/Source/devtools/front_end/elements/breadcrumbs.css
+++ b/Source/devtools/front_end/elements/breadcrumbs.css
@@ -19,6 +19,25 @@
white-space: nowrap;
}
+:host-context(.material) .crumbs .crumb {
+ padding: 0 5px;
+ cursor: pointer;
+ border-radius: 2px;
+ line-height: 18px;
+ margin: 5px 0px 5px 5px;
+ position: relative;
+ color: hsl(0, 0%, 39%);
+}
+
+:host-context(.material) .crumbs .crumb:not(.collapsed):not(:first-child):before
{
+ content: '⟩';
+ position: absolute;
+ left: -5px;
+ color: hsl(0, 0%, 39%);
+ width: 5px;
+ text-align: center;
+}
+
.crumbs .crumb.collapsed > * {
display: none;
}
@@ -38,6 +57,14 @@
text-shadow: rgba(255, 255, 255, 0.5) 0 0 0;
}
+:host-context(.material) .crumbs > .crumb.selected {
+ background-color: hsl(216, 68%, 53%) !important;
+}
+
.crumbs .crumb:hover {
background-color: rgb(216, 216, 216);
}
+
+:host-context(.material) .crumbs > .crumb {
+ background-color: hsla(216, 68%, 53%, 0.2);
+}
Index: Source/devtools/front_end/elements/elementsPanel.css
diff --git a/Source/devtools/front_end/elements/elementsPanel.css
b/Source/devtools/front_end/elements/elementsPanel.css
index
5de02d1166923f3de206fc95a7f40369b4714abd..0bc406b3c7a70c3a6c3c9c6b7a7d7d30ea1b3c8f
100644
--- a/Source/devtools/front_end/elements/elementsPanel.css
+++ b/Source/devtools/front_end/elements/elementsPanel.css
@@ -43,6 +43,11 @@
overflow-x: hidden;
}
+.elements-topbar {
+ border-bottom: 1px solid hsla(0, 0%, 0%, 0.1);
+ flex-shrink: 0;
+}
+
#elements-crumbs {
flex: 0 0 19px;
background-color: white;
@@ -52,6 +57,12 @@
width: 100%;
}
+.material #elements-crumbs {
+ flex: 1 0 28px;
+ border: none;
+ height: 100%;
+}
+
.metrics {
padding: 8px;
font-size: 10px;
Index: Source/devtools/front_end/settings/module.json
diff --git a/Source/devtools/front_end/settings/module.json
b/Source/devtools/front_end/settings/module.json
index
6632676bc9b10022f6dd0ba49653c99ef8d41526..f31047dc97268da021e23a02351c2447f56d3506
100644
--- a/Source/devtools/front_end/settings/module.json
+++ b/Source/devtools/front_end/settings/module.json
@@ -19,6 +19,14 @@
"elementClass": "settings-toolbar-item"
},
{
+ "type": "@WebInspector.ToolbarItem.Provider",
+ "actionId": "settings.show",
+ "location": "elements-toolbar",
+ "title": "Settings",
+ "order": 1,
+ "elementClass": "settings-toolbar-item"
+ },
+ {
"type": "@WebInspector.SettingUI",
"category": "Sources",
"className": "WebInspector.SettingsScreen.SkipStackFramePatternSettingUI"
Index: Source/devtools/front_end/ui/toolbar.css
diff --git a/Source/devtools/front_end/ui/toolbar.css
b/Source/devtools/front_end/ui/toolbar.css
index
cf1e1d897614ba5e20a42560feb9b905fde4bbee..3b15f039447ed202db6ac143a21f5c87c37d3193
100644
--- a/Source/devtools/front_end/ui/toolbar.css
+++ b/Source/devtools/front_end/ui/toolbar.css
@@ -257,7 +257,11 @@ select.toolbar-item {
.toolbar-divider {
margin-left: 7px;
- border-right: 1px solid #CCC;
+ border-right: 1px solid hsla(0, 0%, 0%, 0.1);
+}
+
+:host-context(.material) .toolbar-divider {
+ height: 18px;
}
.toolbar-group-label {