Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: Source/devtools/front_end/elements/ElementsPanel.js

Issue 1293793008: Devtools: Create a separate mode to turn LayoutEditor on (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: return hover Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/inspector/InspectorDOMAgent.cpp ('k') | Source/devtools/front_end/sdk/DOMModel.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> 3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
4 * Copyright (C) 2009 Joseph Pecoraro 4 * Copyright (C) 2009 Joseph Pecoraro
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 this._splitWidget.addEventListener(WebInspector.SplitWidget.Events.SidebarSi zeChanged, this._updateTreeOutlineVisibleWidth.bind(this)); 43 this._splitWidget.addEventListener(WebInspector.SplitWidget.Events.SidebarSi zeChanged, this._updateTreeOutlineVisibleWidth.bind(this));
44 this._splitWidget.show(this.element); 44 this._splitWidget.show(this.element);
45 45
46 this._searchableView = new WebInspector.SearchableView(this); 46 this._searchableView = new WebInspector.SearchableView(this);
47 this._searchableView.setMinimumSize(25, 19); 47 this._searchableView.setMinimumSize(25, 19);
48 this._searchableView.setPlaceholder(WebInspector.UIString("Find by string, s elector, or XPath")); 48 this._searchableView.setPlaceholder(WebInspector.UIString("Find by string, s elector, or XPath"));
49 var stackElement = this._searchableView.element; 49 var stackElement = this._searchableView.element;
50 50
51 this._contentElement = createElement("div"); 51 this._contentElement = createElement("div");
52 var crumbsContainer = createElement("div"); 52 var crumbsContainer = createElement("div");
53 this._showLayoutEditor = false;
53 if (Runtime.experiments.isEnabled("materialDesign")) { 54 if (Runtime.experiments.isEnabled("materialDesign")) {
54 this._toolbar = this._createElementsToolbar(); 55 this._toolbar = this._createElementsToolbar();
55 var toolbar = stackElement.createChild("div", "elements-topbar hbox"); 56 var toolbar = stackElement.createChild("div", "elements-topbar hbox");
56 toolbar.appendChild(this._toolbar.element); 57 toolbar.appendChild(this._toolbar.element);
57 toolbar.appendChild(crumbsContainer); 58 toolbar.appendChild(crumbsContainer);
58 stackElement.appendChild(this._contentElement); 59 stackElement.appendChild(this._contentElement);
59 } else { 60 } else {
60 stackElement.appendChild(this._contentElement); 61 stackElement.appendChild(this._contentElement);
61 stackElement.appendChild(crumbsContainer); 62 stackElement.appendChild(crumbsContainer);
62 } 63 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 this._editAsHTMLButton.setAction("elements.edit-as-html"); 129 this._editAsHTMLButton.setAction("elements.edit-as-html");
129 toolbar.appendToolbarItem(this._editAsHTMLButton); 130 toolbar.appendToolbarItem(this._editAsHTMLButton);
130 toolbar.appendSeparator(); 131 toolbar.appendSeparator();
131 132
132 this._forceElementStateButton = new WebInspector.ToolbarMenuButton(WebIn spector.UIString("Force element state"), "pin-toolbar-item", this._showForceElem entStateMenu.bind(this)); 133 this._forceElementStateButton = new WebInspector.ToolbarMenuButton(WebIn spector.UIString("Force element state"), "pin-toolbar-item", this._showForceElem entStateMenu.bind(this));
133 toolbar.appendToolbarItem(this._forceElementStateButton); 134 toolbar.appendToolbarItem(this._forceElementStateButton);
134 this._breakpointsButton = new WebInspector.ToolbarMenuButton(WebInspecto r.UIString("Toggle breakpoints"), "add-breakpoint-toolbar-item", this._showBreak pointsMenu.bind(this)); 135 this._breakpointsButton = new WebInspector.ToolbarMenuButton(WebInspecto r.UIString("Toggle breakpoints"), "add-breakpoint-toolbar-item", this._showBreak pointsMenu.bind(this));
135 toolbar.appendToolbarItem(this._breakpointsButton); 136 toolbar.appendToolbarItem(this._breakpointsButton);
136 137
137 toolbar.appendSeparator(); 138 toolbar.appendSeparator();
139 if (Runtime.experiments.isEnabled("layoutEditor")) {
dgozman 2015/08/19 22:49:43 && !Runtime.queryParam("remoteFrontend")
sergeyv 2015/08/19 23:36:42 Done.
140 this._layoutEditorButton = new WebInspector.ToolbarButton(WebInspect or.UIString("Turn on Layout Editor"), "layout-editor");
dgozman 2015/08/19 22:49:43 Toggle Layout Editor
sergeyv 2015/08/19 23:36:42 Done.
141 toolbar.appendToolbarItem(this._layoutEditorButton);
142 this._layoutEditorButton.addEventListener("click", this._toggleLayou tEditor, this);
143 toolbar.appendSeparator();
144 }
138 return toolbar; 145 return toolbar;
139 }, 146 },
140 147
141 _toggleHideElement: function() 148 _toggleHideElement: function()
142 { 149 {
143 var node = this.selectedDOMNode(); 150 var node = this.selectedDOMNode();
144 var treeOutline = this._treeOutlineForNode(node); 151 var treeOutline = this._treeOutlineForNode(node);
145 if (!node || !treeOutline) 152 if (!node || !treeOutline)
146 return; 153 return;
147 treeOutline.toggleHideElement(node); 154 treeOutline.toggleHideElement(node);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 treeOutline.wireToDOMModel(); 259 treeOutline.wireToDOMModel();
253 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Sel ectedNodeChanged, this._selectedNodeChanged, this); 260 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Sel ectedNodeChanged, this._selectedNodeChanged, this);
254 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Nod ePicked, this._onNodePicked, this); 261 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Nod ePicked, this._onNodePicked, this);
255 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Ele mentsTreeUpdated, this._updateBreadcrumbIfNeeded, this); 262 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Ele mentsTreeUpdated, this._updateBreadcrumbIfNeeded, this);
256 this._treeOutlines.push(treeOutline); 263 this._treeOutlines.push(treeOutline);
257 this._modelToTreeOutline.set(domModel, treeOutline); 264 this._modelToTreeOutline.set(domModel, treeOutline);
258 265
259 // Perform attach if necessary. 266 // Perform attach if necessary.
260 if (this.isShowing()) 267 if (this.isShowing())
261 this.wasShown(); 268 this.wasShown();
269
270 if (this._showLayoutEditor)
271 domModel.setHighlighter(new WebInspector.ElementsPanel.LayoutEditorN odeHighlighter(target, treeOutline));
262 }, 272 },
263 273
264 /** 274 /**
265 * @override 275 * @override
266 * @param {!WebInspector.Target} target 276 * @param {!WebInspector.Target} target
267 */ 277 */
268 targetRemoved: function(target) 278 targetRemoved: function(target)
269 { 279 {
270 var domModel = WebInspector.DOMModel.fromTarget(target); 280 var domModel = WebInspector.DOMModel.fromTarget(target);
271 if (!domModel) 281 if (!domModel)
272 return; 282 return;
273 var treeOutline = this._modelToTreeOutline.remove(domModel); 283 var treeOutline = this._modelToTreeOutline.remove(domModel);
274 treeOutline.unwireFromDOMModel(); 284 treeOutline.unwireFromDOMModel();
275 this._treeOutlines.remove(treeOutline); 285 this._treeOutlines.remove(treeOutline);
276 treeOutline.element.remove(); 286 treeOutline.element.remove();
287 if (this._showLayoutEditor)
288 domModel.setHighlighter(null);
277 }, 289 },
278 290
279 _updateTreeOutlineVisibleWidth: function() 291 _updateTreeOutlineVisibleWidth: function()
280 { 292 {
281 if (!this._treeOutlines.length) 293 if (!this._treeOutlines.length)
282 return; 294 return;
283 295
284 var width = this._splitWidget.element.offsetWidth; 296 var width = this._splitWidget.element.offsetWidth;
285 if (this._splitWidget.isVertical()) 297 if (this._splitWidget.isVertical())
286 width -= this._splitWidget.sidebarSize(); 298 width -= this._splitWidget.sidebarSize();
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 revealAndSelectNode: function(node) 881 revealAndSelectNode: function(node)
870 { 882 {
871 if (WebInspector.inspectElementModeController && WebInspector.inspectEle mentModeController.enabled()) { 883 if (WebInspector.inspectElementModeController && WebInspector.inspectEle mentModeController.enabled()) {
872 InspectorFrontendHost.bringToFront(); 884 InspectorFrontendHost.bringToFront();
873 WebInspector.inspectElementModeController.disable(); 885 WebInspector.inspectElementModeController.disable();
874 } 886 }
875 887
876 this._omitDefaultSelection = true; 888 this._omitDefaultSelection = true;
877 WebInspector.inspectorView.setCurrentPanel(this); 889 WebInspector.inspectorView.setCurrentPanel(this);
878 node = WebInspector.moduleSetting("showUAShadowDOM").get() ? node : this ._leaveUserAgentShadowDOM(node); 890 node = WebInspector.moduleSetting("showUAShadowDOM").get() ? node : this ._leaveUserAgentShadowDOM(node);
879 node.highlightForTwoSeconds(); 891 if (this._showLayoutEditor)
892 node.highlight();
893 else
894 node.highlightForTwoSeconds();
895
880 this.selectDOMNode(node, true); 896 this.selectDOMNode(node, true);
881 delete this._omitDefaultSelection; 897 delete this._omitDefaultSelection;
882 898
883 if (!this._notFirstInspectElement) 899 if (!this._notFirstInspectElement)
884 InspectorFrontendHost.inspectElementCompleted(); 900 InspectorFrontendHost.inspectElementCompleted();
885 this._notFirstInspectElement = true; 901 this._notFirstInspectElement = true;
886 }, 902 },
887 903
888 /** 904 /**
889 * @param {!Event} event 905 * @param {!Event} event
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 setWidgetBelowDOM: function(widget) 1087 setWidgetBelowDOM: function(widget)
1072 { 1088 {
1073 if (widget) { 1089 if (widget) {
1074 this._elementsPanelTreeOutilneSplit.setSidebarWidget(widget); 1090 this._elementsPanelTreeOutilneSplit.setSidebarWidget(widget);
1075 this._elementsPanelTreeOutilneSplit.showBoth(true); 1091 this._elementsPanelTreeOutilneSplit.showBoth(true);
1076 } else { 1092 } else {
1077 this._elementsPanelTreeOutilneSplit.hideSidebar(true); 1093 this._elementsPanelTreeOutilneSplit.hideSidebar(true);
1078 } 1094 }
1079 }, 1095 },
1080 1096
1097 _toggleLayoutEditor: function()
1098 {
1099 this._showLayoutEditor = !this._showLayoutEditor;
1100 this._layoutEditorButton.setToggled(this._showLayoutEditor);
1101 var targets = WebInspector.targetManager.targets();
1102 for (var target of targets) {
1103 var domModel = WebInspector.DOMModel.fromTarget(target);
1104 if (!domModel)
1105 continue;
1106
1107 var treeOutline = /** @type {!WebInspector.ElementsTreeOutline} */(t his._modelToTreeOutline.get(domModel));
1108 if (this._showLayoutEditor)
1109 domModel.setHighlighter(new WebInspector.ElementsPanel.LayoutEdi torNodeHighlighter(target, treeOutline));
1110 else
1111 domModel.setHighlighter(null);
1112
1113 if (WebInspector.inspectElementModeController && WebInspector.inspec tElementModeController.enabled())
dgozman 2015/08/19 22:49:43 Let's add a comment.
sergeyv 2015/08/19 23:36:41 Done.
1114 domModel.setInspectModeEnabled(true, WebInspector.moduleSetting( "showUAShadowDOM").get())
dgozman 2015/08/19 22:49:43 nit: semicolon missing
sergeyv 2015/08/19 23:36:42 Done.
1115 }
1116 WebInspector.DOMModel.hideDOMNodeHighlight();
1117 },
1118
1081 __proto__: WebInspector.Panel.prototype 1119 __proto__: WebInspector.Panel.prototype
1082 } 1120 }
1083 1121
1084 /** 1122 /**
1085 * @constructor 1123 * @constructor
1086 * @implements {WebInspector.ContextMenu.Provider} 1124 * @implements {WebInspector.ContextMenu.Provider}
1087 */ 1125 */
1088 WebInspector.ElementsPanel.ContextMenuProvider = function() 1126 WebInspector.ElementsPanel.ContextMenuProvider = function()
1089 { 1127 {
1090 } 1128 }
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1250 /** 1288 /**
1251 * @override 1289 * @override
1252 * @param {!WebInspector.DOMNode} node 1290 * @param {!WebInspector.DOMNode} node
1253 * @return {?{title: string, color: string}} 1291 * @return {?{title: string, color: string}}
1254 */ 1292 */
1255 decorate: function(node) 1293 decorate: function(node)
1256 { 1294 {
1257 return { color: "#555", title: WebInspector.UIString("Element is hidden" ) }; 1295 return { color: "#555", title: WebInspector.UIString("Element is hidden" ) };
1258 } 1296 }
1259 } 1297 }
1298
1299 /**
1300 * @constructor
1301 * @extends {WebInspector.DefaultDOMNodeHighlighter}
1302 * @param {!WebInspector.Target} target
1303 * @param {!WebInspector.ElementsTreeOutline} treeOutline
1304 */
1305 WebInspector.ElementsPanel.LayoutEditorNodeHighlighter = function(target, treeOu tline)
1306 {
1307 WebInspector.DefaultDOMNodeHighlighter.call(this, target.domAgent());
1308 this._treeOutline = treeOutline;
1309 }
1310
1311 WebInspector.ElementsPanel.LayoutEditorNodeHighlighter.prototype = {
1312 /**
1313 * @override
1314 * @param {?WebInspector.DOMNode} node
1315 * @param {!DOMAgent.HighlightConfig} config
1316 * @param {!DOMAgent.BackendNodeId=} backendNodeId
1317 * @param {!RuntimeAgent.RemoteObjectId=} objectId
1318 */
1319 highlightDOMNode: function(node, config, backendNodeId, objectId)
1320 {
1321 config.showLayoutEditor = config.showInfo;
1322 var selectedNode = this._treeOutline.selectedDOMNode();
1323 if (objectId || node || backendNodeId || !selectedNode)
1324 WebInspector.DefaultDOMNodeHighlighter.prototype.highlightDOMNode.ca ll(this, node, config, backendNodeId, objectId);
1325 else
1326 WebInspector.DefaultDOMNodeHighlighter.prototype.highlightDOMNode.ca ll(this, selectedNode, config)
dgozman 2015/08/19 22:49:43 nit: semicolon missing
sergeyv 2015/08/19 23:36:42 Done.
1327 },
1328
1329 /**
1330 * @override
1331 * @param {boolean} enabled
1332 * @param {boolean} inspectUAShadowDOM
1333 * @param {!DOMAgent.HighlightConfig} config
1334 * @param {function(?Protocol.Error)=} callback
1335 */
1336 setInspectModeEnabled: function(enabled, inspectUAShadowDOM, config, callbac k)
1337 {
1338 config.showLayoutEditor = config.showInfo;
1339 WebInspector.DefaultDOMNodeHighlighter.prototype.setInspectModeEnabled.c all(this, enabled, inspectUAShadowDOM, config, callback);
1340
1341 if (enabled)
1342 return;
1343
1344 var selectedNode = this._treeOutline.selectedDOMNode();
1345 if (selectedNode)
1346 WebInspector.DefaultDOMNodeHighlighter.prototype.highlightDOMNode.ca ll(this, selectedNode, config);
1347 },
1348
1349 __proto__: WebInspector.DefaultDOMNodeHighlighter.prototype
1350 }
OLDNEW
« no previous file with comments | « Source/core/inspector/InspectorDOMAgent.cpp ('k') | Source/devtools/front_end/sdk/DOMModel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698