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

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

Issue 1304173004: Devtools UI: Add node-specific actions into a ghost toolbar in DOM (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 3 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 | Annotate | Revision Log
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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
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, 28); 47 this._searchableView.setMinimumSize(25, 28);
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 this._showLayoutEditor = false;
54 if (Runtime.experiments.isEnabled("materialDesign")) { 54 if (Runtime.experiments.isEnabled("materialDesign"))
55 this._toolbar = this._createElementsToolbar(); 55 this._initializeActionsToolbar();
56 var toolbar = stackElement.createChild("div", "elements-topbar hbox");
57 toolbar.appendChild(this._toolbar.element);
58 }
59 stackElement.appendChild(this._contentElement); 56 stackElement.appendChild(this._contentElement);
60 stackElement.appendChild(crumbsContainer); 57 stackElement.appendChild(crumbsContainer);
61 58
62 this._elementsPanelTreeOutilneSplit = new WebInspector.SplitWidget(false, tr ue, "treeOutlineAnimationTimelineWidget", 300, 300); 59 this._elementsPanelTreeOutilneSplit = new WebInspector.SplitWidget(false, tr ue, "treeOutlineAnimationTimelineWidget", 300, 300);
63 this._elementsPanelTreeOutilneSplit.hideSidebar(); 60 this._elementsPanelTreeOutilneSplit.hideSidebar();
64 this._elementsPanelTreeOutilneSplit.setMainWidget(this._searchableView); 61 this._elementsPanelTreeOutilneSplit.setMainWidget(this._searchableView);
65 this._splitWidget.setMainWidget(this._elementsPanelTreeOutilneSplit); 62 this._splitWidget.setMainWidget(this._elementsPanelTreeOutilneSplit);
66 63
67 this._contentElement.id = "elements-content"; 64 this._contentElement.id = "elements-content";
68 // FIXME: crbug.com/425984 65 // FIXME: crbug.com/425984
(...skipping 27 matching lines...) Expand all
96 this._updateSidebarPosition(); 93 this._updateSidebarPosition();
97 this._loadSidebarViews(); 94 this._loadSidebarViews();
98 95
99 /** @type {!Array.<!WebInspector.ElementsTreeOutline>} */ 96 /** @type {!Array.<!WebInspector.ElementsTreeOutline>} */
100 this._treeOutlines = []; 97 this._treeOutlines = [];
101 /** @type {!Map.<!WebInspector.DOMModel, !WebInspector.ElementsTreeOutline>} */ 98 /** @type {!Map.<!WebInspector.DOMModel, !WebInspector.ElementsTreeOutline>} */
102 this._modelToTreeOutline = new Map(); 99 this._modelToTreeOutline = new Map();
103 WebInspector.targetManager.observeTargets(this); 100 WebInspector.targetManager.observeTargets(this);
104 WebInspector.moduleSetting("showUAShadowDOM").addChangeListener(this._showUA ShadowDOMChanged.bind(this)); 101 WebInspector.moduleSetting("showUAShadowDOM").addChangeListener(this._showUA ShadowDOMChanged.bind(this));
105 WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebInspec tor.DOMModel.Events.DocumentUpdated, this._documentUpdatedEvent, this); 102 WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebInspec tor.DOMModel.Events.DocumentUpdated, this._documentUpdatedEvent, this);
106 if (Runtime.experiments.isEnabled("materialDesign"))
107 WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebIn spector.DOMModel.Events.MarkersChanged, this._updateToolbarButtons, this);
108 WebInspector.extensionServer.addEventListener(WebInspector.ExtensionServer.E vents.SidebarPaneAdded, this._extensionSidebarPaneAdded, this); 103 WebInspector.extensionServer.addEventListener(WebInspector.ExtensionServer.E vents.SidebarPaneAdded, this._extensionSidebarPaneAdded, this);
109 } 104 }
110 105
111 WebInspector.ElementsPanel._elementsSidebarViewTitleSymbol = Symbol("title"); 106 WebInspector.ElementsPanel._elementsSidebarViewTitleSymbol = Symbol("title");
112 107
113 WebInspector.ElementsPanel.prototype = { 108 WebInspector.ElementsPanel.prototype = {
114 /** 109 _initializeActionsToolbar: function()
115 * @return {!WebInspector.Toolbar}
116 */
117 _createElementsToolbar: function()
118 { 110 {
119 var toolbar = new WebInspector.ExtensibleToolbar("elements-toolbar"); 111 this._nodeActionsElement = createElementWithClass("div", "node-actions-c ontainer");
120 toolbar.element.classList.add("elements-toolbar"); 112 var button = this._nodeActionsElement.createChild("div", "node-actions-t oggle");
121 this._hideElementButton = new WebInspector.ToolbarButton(WebInspector.UI String("Hide element"), "visibility-off-toolbar-item"); 113 button.addEventListener("click", this._toggleActionsToolbar.bind(this, n ull));
122 this._hideElementButton.setAction("elements.hide-element"); 114 this._nodeActionsToolbar = new WebInspector.Toolbar();
123 toolbar.appendToolbarItem(this._hideElementButton); 115 this._nodeActionsElement.appendChild(this._nodeActionsToolbar.element);
116 this._nodeActionsToolbar.element.addEventListener("mousedown", consumeEv ent);
117 WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebIn spector.DOMModel.Events.MarkersChanged, this._markersChanged, this);
124 118
125 this._editAsHTMLButton = new WebInspector.ToolbarButton(WebInspector.UIS tring("Edit as HTML"), "edit-toolbar-item"); 119 this._editAsHTMLButton = new WebInspector.ToolbarButton(WebInspector.UIS tring("Edit as HTML"), "edit-toolbar-item");
126 this._editAsHTMLButton.setAction("elements.edit-as-html"); 120 this._editAsHTMLButton.setAction("elements.edit-as-html");
127 toolbar.appendToolbarItem(this._editAsHTMLButton); 121 this._nodeActionsToolbar.appendToolbarItem(this._editAsHTMLButton);
128 toolbar.appendSeparator(); 122 this._nodeActionsToolbar.element.classList.add("node-actions-toolbar");
129 123 this._hideElementButton = new WebInspector.ToolbarButton(WebInspector.UI String("Hide element"), "visibility-off-toolbar-item");
124 this._hideElementButton.setAction("elements.hide-element");
125 this._nodeActionsToolbar.appendToolbarItem(this._hideElementButton);
130 this._forceElementStateButton = new WebInspector.ToolbarMenuButton(WebIn spector.UIString("Force element state"), "pin-toolbar-item", this._showForceElem entStateMenu.bind(this)); 126 this._forceElementStateButton = new WebInspector.ToolbarMenuButton(WebIn spector.UIString("Force element state"), "pin-toolbar-item", this._showForceElem entStateMenu.bind(this));
131 toolbar.appendToolbarItem(this._forceElementStateButton); 127 this._nodeActionsToolbar.appendToolbarItem(this._forceElementStateButton );
132 this._breakpointsButton = new WebInspector.ToolbarMenuButton(WebInspecto r.UIString("Toggle breakpoints"), "add-breakpoint-toolbar-item", this._showBreak pointsMenu.bind(this)); 128 this._breakpointsButton = new WebInspector.ToolbarMenuButton(WebInspecto r.UIString("Toggle breakpoints"), "add-breakpoint-toolbar-item", this._showBreak pointsMenu.bind(this));
133 toolbar.appendToolbarItem(this._breakpointsButton); 129 this._nodeActionsToolbar.appendToolbarItem(this._breakpointsButton);
134
135 toolbar.appendSeparator();
136 if (Runtime.experiments.isEnabled("layoutEditor") && !Runtime.queryParam ("remoteFrontend")) {
137 this._layoutEditorButton = new WebInspector.ToolbarButton(WebInspect or.UIString("Toggle Layout Editor"), "layout-editor-toolbar-item");
138 toolbar.appendToolbarItem(this._layoutEditorButton);
139 this._layoutEditorButton.addEventListener("click", this._toggleLayou tEditor, this);
140 toolbar.appendSeparator();
141 }
142 return toolbar;
143 }, 130 },
144 131
145 _toggleHideElement: function() 132 _toggleHideElement: function()
146 { 133 {
147 var node = this.selectedDOMNode(); 134 var node = this.selectedDOMNode();
148 var treeOutline = this._treeOutlineForNode(node); 135 var treeOutline = this._treeOutlineForNode(node);
149 if (!node || !treeOutline) 136 if (!node || !treeOutline)
150 return; 137 return;
151 treeOutline.toggleHideElement(node); 138 treeOutline.toggleHideElement(node);
152 }, 139 },
153 140
154 _updateToolbarButtons: function() 141 /**
142 * @param {!WebInspector.DOMNode} node
143 */
144 _updateActionsToolbar: function(node)
155 { 145 {
156 if (!Runtime.experiments.isEnabled("materialDesign")) 146 if (!Runtime.experiments.isEnabled("materialDesign"))
157 return; 147 return;
158 var node = this.selectedDOMNode();
159 if (!node)
160 return;
161 var classText = node.getAttribute("class"); 148 var classText = node.getAttribute("class");
162 var treeOutline = this._treeOutlineForNode(node); 149 var treeOutline = this._treeOutlineForNode(node);
163 this._hideElementButton.setToggled(treeOutline && treeOutline.isToggledT oHidden(node)); 150 this._hideElementButton.setToggled(treeOutline && treeOutline.isToggledT oHidden(node));
164 this._editAsHTMLButton.setToggled(false); 151 this._editAsHTMLButton.setToggled(false);
165 this._breakpointsButton.setEnabled(!node.pseudoType()); 152 this._breakpointsButton.setEnabled(!node.pseudoType());
166 this._breakpointsButton.setToggled(WebInspector.domBreakpointsSidebarPan e.hasBreakpoints(node)); 153 this._breakpointsButton.setToggled(WebInspector.domBreakpointsSidebarPan e.hasBreakpoints(node));
167 this._forceElementStateButton.setEnabled(node.nodeType() === Node.ELEMEN T_NODE && !node.pseudoType()); 154 this._forceElementStateButton.setEnabled(node.nodeType() === Node.ELEMEN T_NODE && !node.pseudoType());
168 this._forceElementStateButton.setToggled(!!WebInspector.CSSStyleModel.fr omNode(node).pseudoState(node).length); 155 this._forceElementStateButton.setToggled(!!WebInspector.CSSStyleModel.fr omNode(node).pseudoState(node).length);
156
157 var treeElement = this._treeOutlineForNode(node).selectedTreeElement;
158 if (!treeElement)
159 return;
160 if (node.nodeType() !== Node.ELEMENT_NODE) {
161 this._nodeActionsElement.remove();
162 return;
163 }
164
165 var actionsToolbar = this._nodeActionsElement;
166 if (treeElement.selected && actionsToolbar.__node !== node) {
pfeldman 2015/09/17 00:06:18 You just fetched the selected one, surely it is .s
samli 2015/09/17 18:08:04 Done
167 treeElement.gutterElement().appendChild(actionsToolbar);
168 this._positionActionsToolbar();
169 actionsToolbar.__node = node;
170 this._toggleActionsToolbar(false);
171 }
169 }, 172 },
170 173
171 _toggleEditAsHTML: function() 174 _toggleEditAsHTML: function()
172 { 175 {
173 var node = this.selectedDOMNode(); 176 var node = this.selectedDOMNode();
174 var treeOutline = this._treeOutlineForNode(node); 177 var treeOutline = this._treeOutlineForNode(node);
175 if (!node || !treeOutline) 178 if (!node || !treeOutline)
176 return; 179 return;
177 180
178 var startEditing = true; 181 var startEditing = true;
179 if (Runtime.experiments.isEnabled("materialDesign")) { 182 if (Runtime.experiments.isEnabled("materialDesign")) {
180 startEditing = !this._editAsHTMLButton.toggled(); 183 startEditing = !this._editAsHTMLButton.toggled();
181 this._editAsHTMLButton.setToggled(startEditing); 184 this._editAsHTMLButton.setToggled(startEditing);
182 } 185 }
183 treeOutline.toggleEditAsHTML(node, startEditing, this._updateToolbarButt ons.bind(this)); 186 treeOutline.toggleEditAsHTML(node, startEditing, this._updateActionsTool bar.bind(this, node));
184 }, 187 },
185 188
186 /** 189 /**
187 * @param {!WebInspector.ContextMenu} contextMenu 190 * @param {!WebInspector.ContextMenu} contextMenu
188 */ 191 */
189 _showBreakpointsMenu: function(contextMenu) 192 _showBreakpointsMenu: function(contextMenu)
190 { 193 {
191 var node = this.selectedDOMNode(); 194 var node = this.selectedDOMNode();
192 if (!node) 195 if (!node)
193 return; 196 return;
194 WebInspector.domBreakpointsSidebarPane.populateNodeContextMenu(node, con textMenu, false); 197 WebInspector.domBreakpointsSidebarPane.populateNodeContextMenu(node, con textMenu, false);
195 }, 198 },
196 199
197 /** 200 /**
198 * @param {!WebInspector.ContextMenu} contextMenu 201 * @param {!WebInspector.ContextMenu} contextMenu
199 */ 202 */
200 _showForceElementStateMenu: function(contextMenu) 203 _showForceElementStateMenu: function(contextMenu)
201 { 204 {
202 var node = this.selectedDOMNode(); 205 var node = this.selectedDOMNode();
203 if (!node) 206 if (!node)
204 return; 207 return;
205 WebInspector.ElementsTreeElement.populateForcedPseudoStateItems(contextM enu, node); 208 WebInspector.ElementsTreeElement.populateForcedPseudoStateItems(contextM enu, node);
206 }, 209 },
207 210
211 /**
212 * @param {!WebInspector.Event} event
213 */
214 _decorationsClicked: function(event)
215 {
216 var node = /** @type {!WebInspector.DOMNode} */(event.data);
217 this.selectDOMNode(node, true);
218 this._toggleActionsToolbar(true);
219 },
220
221 /**
222 * @param {?boolean} toggled
pfeldman 2015/09/17 00:06:18 we typically make params like this optional.
samli 2015/09/17 18:08:04 Done.
223 */
224 _toggleActionsToolbar: function(toggled)
225 {
226 if (toggled === null)
227 toggled = !this._actionsToolbarShown();
228 this._nodeActionsElement.classList.toggle("expanded", toggled);
229 this._positionActionsToolbar();
230 },
231
232 _positionActionsToolbar: function()
233 {
234 if (!this._actionsToolbarShown())
235 return;
236 var toolbarElement = this._nodeActionsToolbar.element;
237 if (toolbarElement.totalOffsetTop() < this.element.totalOffsetTop()) {
238 toolbarElement.style.top = this._nodeActionsElement.parentElement.of fsetHeight + "px";
239 toolbarElement.classList.add("node-actions-toolbar-below");
240 } else {
241 toolbarElement.style.top = "";
242 toolbarElement.classList.remove("node-actions-toolbar-below");
243 }
244 },
245
246 /**
247 * @return {boolean}
248 */
249 _actionsToolbarShown: function()
250 {
251 return this._nodeActionsElement.classList.contains("expanded");
252 },
253
254 /**
255 * @param {!WebInspector.Event} event
256 */
257 _markersChanged: function(event)
258 {
259 var node = /** @type {!WebInspector.DOMNode} */ (event.data);
260 if (node !== this.selectedDOMNode())
261 return;
262 this._updateActionsToolbar(node);
263 },
264
208 _loadSidebarViews: function() 265 _loadSidebarViews: function()
209 { 266 {
210 var extensions = self.runtime.extensions("@WebInspector.Widget"); 267 var extensions = self.runtime.extensions("@WebInspector.Widget");
211 268
212 for (var i = 0; i < extensions.length; ++i) { 269 for (var i = 0; i < extensions.length; ++i) {
213 var descriptor = extensions[i].descriptor(); 270 var descriptor = extensions[i].descriptor();
214 if (descriptor["location"] !== "elements-panel") 271 if (descriptor["location"] !== "elements-panel")
215 continue; 272 continue;
216 273
217 var title = WebInspector.UIString(descriptor["title"]); 274 var title = WebInspector.UIString(descriptor["title"]);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 { 311 {
255 var domModel = WebInspector.DOMModel.fromTarget(target); 312 var domModel = WebInspector.DOMModel.fromTarget(target);
256 if (!domModel) 313 if (!domModel)
257 return; 314 return;
258 var treeOutline = new WebInspector.ElementsTreeOutline(domModel, true, t rue); 315 var treeOutline = new WebInspector.ElementsTreeOutline(domModel, true, t rue);
259 treeOutline.setWordWrap(WebInspector.moduleSetting("domWordWrap").get()) ; 316 treeOutline.setWordWrap(WebInspector.moduleSetting("domWordWrap").get()) ;
260 treeOutline.wireToDOMModel(); 317 treeOutline.wireToDOMModel();
261 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Sel ectedNodeChanged, this._selectedNodeChanged, this); 318 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Sel ectedNodeChanged, this._selectedNodeChanged, this);
262 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Nod ePicked, this._onNodePicked, this); 319 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Nod ePicked, this._onNodePicked, this);
263 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Ele mentsTreeUpdated, this._updateBreadcrumbIfNeeded, this); 320 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Ele mentsTreeUpdated, this._updateBreadcrumbIfNeeded, this);
321 treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.Dec orationsClicked, this._decorationsClicked, this);
264 this._treeOutlines.push(treeOutline); 322 this._treeOutlines.push(treeOutline);
265 this._modelToTreeOutline.set(domModel, treeOutline); 323 this._modelToTreeOutline.set(domModel, treeOutline);
266 324
267 // Perform attach if necessary. 325 // Perform attach if necessary.
268 if (this.isShowing()) 326 if (this.isShowing())
269 this.wasShown(); 327 this.wasShown();
270 328
271 }, 329 },
272 330
273 /** 331 /**
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 if (!selectedNode && this._lastValidSelectedNode) 446 if (!selectedNode && this._lastValidSelectedNode)
389 this._selectedPathOnReset = this._lastValidSelectedNode.path(); 447 this._selectedPathOnReset = this._lastValidSelectedNode.path();
390 448
391 this._breadcrumbs.setSelectedNode(selectedNode); 449 this._breadcrumbs.setSelectedNode(selectedNode);
392 450
393 WebInspector.context.setFlavor(WebInspector.DOMNode, selectedNode); 451 WebInspector.context.setFlavor(WebInspector.DOMNode, selectedNode);
394 452
395 if (selectedNode) { 453 if (selectedNode) {
396 selectedNode.setAsInspectedNode(); 454 selectedNode.setAsInspectedNode();
397 this._lastValidSelectedNode = selectedNode; 455 this._lastValidSelectedNode = selectedNode;
456 this._updateActionsToolbar(selectedNode);
398 } 457 }
399 WebInspector.notifications.dispatchEventToListeners(WebInspector.Notific ationService.Events.SelectedNodeChanged); 458 WebInspector.notifications.dispatchEventToListeners(WebInspector.Notific ationService.Events.SelectedNodeChanged);
400 this._selectedNodeChangedForTest(); 459 this._selectedNodeChangedForTest();
401 if (Runtime.experiments.isEnabled("materialDesign"))
402 this._updateToolbarButtons();
403 }, 460 },
404 461
405 _selectedNodeChangedForTest: function() { }, 462 _selectedNodeChangedForTest: function() { },
406 463
407 _reset: function() 464 _reset: function()
408 { 465 {
409 delete this.currentQuery; 466 delete this.currentQuery;
410 }, 467 },
411 468
412 /** 469 /**
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after
1081 setWidgetBelowDOM: function(widget) 1138 setWidgetBelowDOM: function(widget)
1082 { 1139 {
1083 if (widget) { 1140 if (widget) {
1084 this._elementsPanelTreeOutilneSplit.setSidebarWidget(widget); 1141 this._elementsPanelTreeOutilneSplit.setSidebarWidget(widget);
1085 this._elementsPanelTreeOutilneSplit.showBoth(true); 1142 this._elementsPanelTreeOutilneSplit.showBoth(true);
1086 } else { 1143 } else {
1087 this._elementsPanelTreeOutilneSplit.hideSidebar(true); 1144 this._elementsPanelTreeOutilneSplit.hideSidebar(true);
1088 } 1145 }
1089 }, 1146 },
1090 1147
1091 _toggleLayoutEditor: function()
1092 {
1093 this._showLayoutEditor = !this._showLayoutEditor;
1094 this._layoutEditorButton.setToggled(this._showLayoutEditor);
1095 var targets = WebInspector.targetManager.targets();
1096
1097 if (this._showLayoutEditor)
1098 WebInspector.inspectElementModeController.disable();
1099 else
1100 WebInspector.inspectElementModeController.enable();
1101
1102 var mode = this._showLayoutEditor ? DOMAgent.InspectMode.ShowLayoutEdito r : DOMAgent.InspectMode.None;
1103 for (var domModel of WebInspector.DOMModel.instances())
1104 domModel.setInspectMode(mode);
1105 },
1106
1107 __proto__: WebInspector.Panel.prototype 1148 __proto__: WebInspector.Panel.prototype
1108 } 1149 }
1109 1150
1110 /** 1151 /**
1111 * @constructor 1152 * @constructor
1112 * @implements {WebInspector.ContextMenu.Provider} 1153 * @implements {WebInspector.ContextMenu.Provider}
1113 */ 1154 */
1114 WebInspector.ElementsPanel.ContextMenuProvider = function() 1155 WebInspector.ElementsPanel.ContextMenuProvider = function()
1115 { 1156 {
1116 } 1157 }
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
1275 WebInspector.ElementsPanel.HiddenMarkerDecorator.prototype = { 1316 WebInspector.ElementsPanel.HiddenMarkerDecorator.prototype = {
1276 /** 1317 /**
1277 * @override 1318 * @override
1278 * @param {!WebInspector.DOMNode} node 1319 * @param {!WebInspector.DOMNode} node
1279 * @return {?{title: string, color: string}} 1320 * @return {?{title: string, color: string}}
1280 */ 1321 */
1281 decorate: function(node) 1322 decorate: function(node)
1282 { 1323 {
1283 return { color: "#555", title: WebInspector.UIString("Element is hidden" ) }; 1324 return { color: "#555", title: WebInspector.UIString("Element is hidden" ) };
1284 } 1325 }
1285 } 1326 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698