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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/components/DOMBreakpointsSidebarPane.js

Issue 2389883003: DevTools: hoist debugger paused reason to top (Closed)
Patch Set: re-add stray line Created 4 years, 2 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 24 matching lines...) Expand all
35 */ 35 */
36 WebInspector.DOMBreakpointsSidebarPane = function() 36 WebInspector.DOMBreakpointsSidebarPane = function()
37 { 37 {
38 WebInspector.BreakpointsSidebarPaneBase.call(this); 38 WebInspector.BreakpointsSidebarPaneBase.call(this);
39 this._domBreakpointsSetting = WebInspector.settings.createLocalSetting("domB reakpoints", []); 39 this._domBreakpointsSetting = WebInspector.settings.createLocalSetting("domB reakpoints", []);
40 this.listElement.classList.add("dom-breakpoints-list"); 40 this.listElement.classList.add("dom-breakpoints-list");
41 41
42 /** @type {!Map<string, !Element>} */ 42 /** @type {!Map<string, !Element>} */
43 this._breakpointElements = new Map(); 43 this._breakpointElements = new Map();
44 44
45 this._breakpointTypes = {
46 SubtreeModified: "subtree-modified",
47 AttributeModified: "attribute-modified",
48 NodeRemoved: "node-removed"
49 };
50 this._breakpointTypeLabels = {};
51 this._breakpointTypeLabels[this._breakpointTypes.SubtreeModified] = WebInspe ctor.UIString("Subtree Modified");
52 this._breakpointTypeLabels[this._breakpointTypes.AttributeModified] = WebIns pector.UIString("Attribute Modified");
53 this._breakpointTypeLabels[this._breakpointTypes.NodeRemoved] = WebInspector .UIString("Node Removed");
54
55 this._contextMenuLabels = {};
56 this._contextMenuLabels[this._breakpointTypes.SubtreeModified] = WebInspecto r.UIString.capitalize("Subtree ^modifications");
57 this._contextMenuLabels[this._breakpointTypes.AttributeModified] = WebInspec tor.UIString.capitalize("Attributes ^modifications");
58 this._contextMenuLabels[this._breakpointTypes.NodeRemoved] = WebInspector.UI String.capitalize("Node ^removal");
59
60 WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebInspec tor.DOMModel.Events.NodeRemoved, this._nodeRemoved, this); 45 WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebInspec tor.DOMModel.Events.NodeRemoved, this._nodeRemoved, this);
61 this._update(); 46 this._update();
62 } 47 }
63 48
49 WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes = {
50 SubtreeModified: "subtree-modified",
51 AttributeModified: "attribute-modified",
52 NodeRemoved: "node-removed"
53 };
54
55 WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeLabels = {
56 "subtree-modified": WebInspector.UIString("Subtree Modified"),
57 "attribute-modified": WebInspector.UIString("Attribute Modified"),
58 "node-removed": WebInspector.UIString("Node Removed")
59 };
60
61 WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeNouns = {
62 "subtree-modified": WebInspector.UIString.capitalize("Subtree ^modifications "),
63 "attribute-modified": WebInspector.UIString.capitalize("Attribute ^modificat ions"),
64 "node-removed": WebInspector.UIString.capitalize("Node ^removal")
65 }
66
64 WebInspector.DOMBreakpointsSidebarPane.Marker = "breakpoint-marker"; 67 WebInspector.DOMBreakpointsSidebarPane.Marker = "breakpoint-marker";
65 68
66 WebInspector.DOMBreakpointsSidebarPane.prototype = { 69 WebInspector.DOMBreakpointsSidebarPane.prototype = {
67 /** 70 /**
68 * @param {!WebInspector.DOMNode} node 71 * @param {!WebInspector.DOMNode} node
69 * @param {!WebInspector.ContextMenu} contextMenu 72 * @param {!WebInspector.ContextMenu} contextMenu
70 * @param {boolean} createSubMenu 73 * @param {boolean} createSubMenu
71 */ 74 */
72 populateNodeContextMenu: function(node, contextMenu, createSubMenu) 75 populateNodeContextMenu: function(node, contextMenu, createSubMenu)
73 { 76 {
74 if (node.pseudoType()) 77 if (node.pseudoType())
75 return; 78 return;
76 79
77 var nodeBreakpoints = this._nodeBreakpoints(node); 80 var nodeBreakpoints = this._nodeBreakpoints(node);
78 81
79 /** 82 /**
80 * @param {!DOMDebuggerAgent.DOMBreakpointType} type 83 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
81 * @this {WebInspector.DOMBreakpointsSidebarPane} 84 * @this {WebInspector.DOMBreakpointsSidebarPane}
82 */ 85 */
83 function toggleBreakpoint(type) 86 function toggleBreakpoint(type)
84 { 87 {
85 if (!nodeBreakpoints.has(type)) 88 if (!nodeBreakpoints.has(type))
86 this._setBreakpoint(node, type, true); 89 this._setBreakpoint(node, type, true);
87 else 90 else
88 this._removeBreakpoint(node, type); 91 this._removeBreakpoint(node, type);
89 this._saveBreakpoints(); 92 this._saveBreakpoints();
90 } 93 }
91 94
92 var breakpointsMenu = createSubMenu ? contextMenu.appendSubMenuItem(WebI nspector.UIString("Break on...")) : contextMenu; 95 var breakpointsMenu = createSubMenu ? contextMenu.appendSubMenuItem(WebI nspector.UIString("Break on...")) : contextMenu;
93 for (var key in this._breakpointTypes) { 96 for (var key in WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes) {
94 var type = this._breakpointTypes[key]; 97 var type = WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes[ke y];
95 var label = this._contextMenuLabels[type]; 98 var label = WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeNou ns[type];
96 breakpointsMenu.appendCheckboxItem(label, toggleBreakpoint.bind(this , type), nodeBreakpoints.has(type)); 99 breakpointsMenu.appendCheckboxItem(label, toggleBreakpoint.bind(this , type), nodeBreakpoints.has(type));
97 } 100 }
98 }, 101 },
99 102
100 /** 103 /**
101 * @param {!WebInspector.DOMNode} node 104 * @param {!WebInspector.DOMNode} node
102 * @return {!Set<!DOMDebuggerAgent.DOMBreakpointType>} 105 * @return {!Set<!DOMDebuggerAgent.DOMBreakpointType>}
103 */ 106 */
104 _nodeBreakpoints: function(node) 107 _nodeBreakpoints: function(node)
105 { 108 {
(...skipping 12 matching lines...) Expand all
118 */ 121 */
119 hasBreakpoints: function(node) 122 hasBreakpoints: function(node)
120 { 123 {
121 for (var element of this._breakpointElements.values()) { 124 for (var element of this._breakpointElements.values()) {
122 if (element._node === node && element._checkboxElement.checked) 125 if (element._node === node && element._checkboxElement.checked)
123 return true; 126 return true;
124 } 127 }
125 return false; 128 return false;
126 }, 129 },
127 130
128 /**
129 * @param {!WebInspector.DebuggerPausedDetails} details
130 * @return {!Element}
131 */
132 createBreakpointHitStatusMessage: function(details)
133 {
134 var auxData = /** @type {!Object} */ (details.auxData);
135 var message = "Paused on a \"%s\" breakpoint.";
136 var substitutions = [];
137 substitutions.push(this._breakpointTypeLabels[auxData["type"]]);
138
139 var domModel = WebInspector.DOMModel.fromTarget(details.target());
140 if (!domModel)
141 return WebInspector.formatLocalized(message, substitutions);
142
143 var node = domModel.nodeForId(auxData["nodeId"]);
144 var linkifiedNode = WebInspector.DOMPresentationUtils.linkifyNodeReferen ce(node);
145 substitutions.push(linkifiedNode);
146
147 var targetNode = auxData["targetNodeId"] ? domModel.nodeForId(auxData["t argetNodeId"]) : null;
148 var targetNodeLink = targetNode ? WebInspector.DOMPresentationUtils.link ifyNodeReference(targetNode) : "";
149
150 if (auxData.type === this._breakpointTypes.SubtreeModified) {
151 if (auxData["insertion"]) {
152 if (targetNode !== node) {
153 message = "Paused on a \"%s\" breakpoint set on %s, because a new child was added to its descendant %s.";
154 substitutions.push(targetNodeLink);
155 } else
156 message = "Paused on a \"%s\" breakpoint set on %s, because a new child was added to that node.";
157 } else {
158 message = "Paused on a \"%s\" breakpoint set on %s, because its descendant %s was removed.";
159 substitutions.push(targetNodeLink);
160 }
161 } else {
162 message = "Paused on a \"%s\" breakpoint set on %s.";
163 }
164
165 return WebInspector.formatLocalized(message, substitutions);
166 },
167
168 _nodeRemoved: function(event) 131 _nodeRemoved: function(event)
169 { 132 {
170 var node = event.data.node; 133 var node = event.data.node;
171 this._removeBreakpointsForNode(event.data.node); 134 this._removeBreakpointsForNode(event.data.node);
172 var children = node.children(); 135 var children = node.children();
173 if (!children) 136 if (!children)
174 return; 137 return;
175 for (var i = 0; i < children.length; ++i) 138 for (var i = 0; i < children.length; ++i)
176 this._removeBreakpointsForNode(children[i]); 139 this._removeBreakpointsForNode(children[i]);
177 this._saveBreakpoints(); 140 this._saveBreakpoints();
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 191
229 var labelElement = createElementWithClass("div", "dom-breakpoint"); 192 var labelElement = createElementWithClass("div", "dom-breakpoint");
230 element.appendChild(labelElement); 193 element.appendChild(labelElement);
231 194
232 var linkifiedNode = WebInspector.DOMPresentationUtils.linkifyNodeReferen ce(node); 195 var linkifiedNode = WebInspector.DOMPresentationUtils.linkifyNodeReferen ce(node);
233 linkifiedNode.classList.add("monospace"); 196 linkifiedNode.classList.add("monospace");
234 linkifiedNode.style.display = "block"; 197 linkifiedNode.style.display = "block";
235 labelElement.appendChild(linkifiedNode); 198 labelElement.appendChild(linkifiedNode);
236 199
237 var description = createElement("div"); 200 var description = createElement("div");
238 description.textContent = this._breakpointTypeLabels[type]; 201 description.textContent = WebInspector.DOMBreakpointsSidebarPane.Breakpo intTypeLabels[type];
239 labelElement.appendChild(description); 202 labelElement.appendChild(description);
240 203
241 var currentElement = this.listElement.firstChild; 204 var currentElement = this.listElement.firstChild;
242 while (currentElement) { 205 while (currentElement) {
243 if (currentElement._type && currentElement._type < element._type) 206 if (currentElement._type && currentElement._type < element._type)
244 break; 207 break;
245 currentElement = currentElement.nextSibling; 208 currentElement = currentElement.nextSibling;
246 } 209 }
247 this.addListElement(element, currentElement); 210 this.addListElement(element, currentElement);
248 return element; 211 return element;
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 domModel.pushNodeByPathToFrontend(path, didPushNodeByPathToFront end.bind(this, path)); 363 domModel.pushNodeByPathToFrontend(path, didPushNodeByPathToFront end.bind(this, path));
401 } 364 }
402 pathToBreakpoints.get(path).push(breakpoint); 365 pathToBreakpoints.get(path).push(breakpoint);
403 } 366 }
404 }, 367 },
405 368
406 __proto__: WebInspector.BreakpointsSidebarPaneBase.prototype 369 __proto__: WebInspector.BreakpointsSidebarPaneBase.prototype
407 } 370 }
408 371
409 /** 372 /**
373 * @param {!WebInspector.DebuggerPausedDetails} details
374 * @return {!Element}
375 */
376 WebInspector.DOMBreakpointsSidebarPane.createBreakpointHitMessage = function(det ails)
377 {
378 var messageWrapper = createElement("span");
379 var mainElement = messageWrapper.createChild("div", "status-main");
380 var auxData = /** @type {!Object} */ (details.auxData);
381 mainElement.textContent = String.sprintf("Paused on %s", WebInspector.DOMBre akpointsSidebarPane.BreakpointTypeNouns[auxData["type"]]);
382
383 var domModel = WebInspector.DOMModel.fromTarget(details.target());
384 if (domModel) {
385 var subElement = messageWrapper.createChild("div", "status-sub");
386 var node = domModel.nodeForId(auxData["nodeId"]);
387 var linkifiedNode = WebInspector.DOMPresentationUtils.linkifyNodeReferen ce(node);
388 subElement.appendChild(linkifiedNode);
389
390 var targetNode = auxData["targetNodeId"] ? domModel.nodeForId(auxData["t argetNodeId"]) : null;
391 var targetNodeLink = targetNode ? WebInspector.DOMPresentationUtils.link ifyNodeReference(targetNode) : "";
392 var message;
393 if (auxData.type === WebInspector.DOMBreakpointsSidebarPane.BreakpointTy pes.SubtreeModified) {
394 if (auxData["insertion"])
395 message = targetNode === node ? "Child %s added" : "Descendant % s added";
396 else
397 message = "Descendant %s removed";
398 subElement.appendChild(createElement("br"));
399 subElement.appendChild(WebInspector.formatLocalized(message, [target NodeLink]));
400 }
401 }
402 return messageWrapper;
403 }
404
405 /**
410 * @constructor 406 * @constructor
411 * @extends {WebInspector.VBox} 407 * @extends {WebInspector.VBox}
412 */ 408 */
413 WebInspector.DOMBreakpointsSidebarPane.Proxy = function() 409 WebInspector.DOMBreakpointsSidebarPane.Proxy = function()
414 { 410 {
415 WebInspector.VBox.call(this); 411 WebInspector.VBox.call(this);
416 this.registerRequiredCSS("components/breakpointsList.css"); 412 this.registerRequiredCSS("components/breakpointsList.css");
417 } 413 }
418 414
419 WebInspector.DOMBreakpointsSidebarPane.Proxy.prototype = { 415 WebInspector.DOMBreakpointsSidebarPane.Proxy.prototype = {
420 wasShown: function() 416 wasShown: function()
421 { 417 {
422 WebInspector.SimpleView.prototype.wasShown.call(this); 418 WebInspector.SimpleView.prototype.wasShown.call(this);
423 var pane = WebInspector.domBreakpointsSidebarPane; 419 var pane = WebInspector.domBreakpointsSidebarPane;
424 if (pane.element.parentNode !== this.element) 420 if (pane.element.parentNode !== this.element)
425 pane.show(this.element); 421 pane.show(this.element);
426 }, 422 },
427 423
428 __proto__: WebInspector.VBox.prototype 424 __proto__: WebInspector.VBox.prototype
429 } 425 }
430 426
431 /** 427 /**
432 * @type {!WebInspector.DOMBreakpointsSidebarPane} 428 * @type {!WebInspector.DOMBreakpointsSidebarPane}
433 */ 429 */
434 WebInspector.domBreakpointsSidebarPane; 430 WebInspector.domBreakpointsSidebarPane;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698