Chromium Code Reviews| Index: Source/devtools/front_end/timeline/TimelineUIUtils.js |
| diff --git a/Source/devtools/front_end/timeline/TimelineUIUtils.js b/Source/devtools/front_end/timeline/TimelineUIUtils.js |
| index a32b796afdf420e77bb7fee9098b290e5582e1ae..6e548fd8b10610fea12ad7a7c56191e04f1e8cdb 100644 |
| --- a/Source/devtools/front_end/timeline/TimelineUIUtils.js |
| +++ b/Source/devtools/front_end/timeline/TimelineUIUtils.js |
| @@ -754,10 +754,14 @@ WebInspector.TimelineUIUtils._generateInvalidationsForType = function(type, targ |
| var detailsNode = createElementWithClass("div", "timeline-details-view-row"); |
| var titleElement = detailsNode.createChild("span", "timeline-details-view-row-title"); |
| titleElement.textContent = WebInspector.UIString("%s: ", title); |
| - var eventsList = detailsNode.createChild("div", "timeline-details-view-row-value"); |
| + |
| + var eventsTreeOutline = new TreeOutlineInShadow(); |
| + eventsTreeOutline.element.classList.add("invalidations-tree"); |
| + detailsNode.appendChild(eventsTreeOutline.element); |
| + |
| var invalidationGroups = groupInvalidationsByCause(invalidations); |
| invalidationGroups.forEach(function(group) { |
| - appendInvalidationGroup(eventsList, group); |
| + appendInvalidationGroup(eventsTreeOutline, group); |
| }); |
| contentHelper.element.appendChild(detailsNode); |
| @@ -791,39 +795,68 @@ WebInspector.TimelineUIUtils._generateInvalidationsForType = function(type, targ |
| } |
| /** |
| - * @param {!Element} parentElement |
| + * @param {!TreeOutline} treeOutline |
| * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations |
| */ |
| - function appendInvalidationGroup(parentElement, invalidations) |
| + function appendInvalidationGroup(treeOutline, invalidations) |
| { |
| if (!target) |
| return; |
| - var row = parentElement.createChild("div", "invalidations-group section"); |
| - var header = row.createChild("div", "header"); |
| - header.addEventListener("click", function() { |
| - toggleDetails(header, invalidations); |
| - }); |
| - |
| var first = invalidations[0]; |
| var reason = first.cause.reason; |
| var topFrame = first.cause.stackTrace && first.cause.stackTrace[0]; |
| + var title = createElement("span"); |
| if (reason) |
| - header.createTextChild(WebInspector.UIString("%s for ", reason)); |
| + title.createTextChild(WebInspector.UIString("%s for ", reason)); |
| else |
| - header.createTextChild(WebInspector.UIString("Unknown cause for ")); |
| + title.createTextChild(WebInspector.UIString("Unknown cause for ")); |
| - appendTruncatedNodeList(header, invalidations); |
| + var treeElement = new TreeElement(title, true); |
| + treeElement.listItemElement.classList.add("header"); |
| + treeElement.selectable = false; |
| + treeElement.isEventWithinDisclosureTriangle = function() {return true;} |
|
pfeldman
2015/04/07 15:02:09
you should not need this.
pdr.
2015/04/09 06:14:49
Fixed. "toggleOnClick = true" was what I was looki
|
| + treeOutline.appendChild(treeElement); |
| - if (topFrame && contentHelper.linkifier()) { |
| - header.createTextChild(WebInspector.UIString(". ")); |
| - var stack = header.createChild("span", "monospace"); |
| + appendTruncatedNodeList(title, invalidations); |
| + if (topFrame && contentHelper.linkifier()) { |
| + title.createTextChild(WebInspector.UIString(". ")); |
| + var stack = title.createChild("span", "monospace"); |
| stack.createChild("span").textContent = WebInspector.beautifyFunctionName(topFrame.functionName); |
| stack.createChild("span").textContent = " @ "; |
| stack.createChild("span").appendChild(contentHelper.linkifier().linkifyConsoleCallFrame(target, topFrame)); |
| } |
| + |
| + treeElement.onexpand = onExpand.bind(null, treeElement, invalidations); |
|
pfeldman
2015/04/07 15:02:09
We try not to do this. You should extend TreeEleme
pdr.
2015/04/09 06:14:49
Done. This is much cleaner but unfortunately makes
|
| + |
| + /** |
| + * @param {!TreeElement} treeElement |
| + * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations |
| + */ |
| + function onExpand(treeElement, invalidations) |
| + { |
| + if (treeElement.childCount() >= 1) |
|
pfeldman
2015/04/07 15:02:09
You should override onpopulate which is going to b
pdr.
2015/04/09 06:14:49
Done.
|
| + return; |
| + |
| + var content = createElementWithClass("div", "content"); |
| + |
| + var first = invalidations[0]; |
| + if (first.cause.stackTrace) { |
| + var stack = content.createChild("div"); |
| + stack.createTextChild(WebInspector.UIString("Stack trace:")); |
| + contentHelper.createChildStackTraceElement(stack, first.cause.stackTrace); |
| + } |
| + |
| + content.createTextChild(invalidations.length > 1 ? WebInspector.UIString("Nodes:") : WebInspector.UIString("Node:")); |
| + var nodeList = content.createChild("div", "node-list"); |
| + appendDetailedNodeList(nodeList, invalidations); |
| + |
| + var contentTreeElement = new TreeElement(content, false); |
| + contentTreeElement.selectable = false; |
| + treeElement.appendChild(contentTreeElement); |
| + } |
| } |
| /** |
| @@ -857,6 +890,10 @@ WebInspector.TimelineUIUtils._generateInvalidationsForType = function(type, targ |
| for (var i = 0; i < invalidations.length; i++) { |
| var invalidation = invalidations[i]; |
| var invalidationNode = createInvalidationNode(invalidation, false); |
| + invalidationNode.onclick = function(event) { |
|
pfeldman
2015/04/07 15:02:09
add named click listener please.
pdr.
2015/04/09 06:14:49
Done, and switched to "consume".
|
| + event.cancelBubble = true; |
| + return false; |
| + } |
| if (invalidationNode && !invalidationNodeIdMap[invalidation.nodeId]) { |
| invalidationNodes.push(invalidationNode); |
| invalidationNodeIdMap[invalidation.nodeId] = true; |
| @@ -878,25 +915,6 @@ WebInspector.TimelineUIUtils._generateInvalidationsForType = function(type, targ |
| } |
| /** |
| - * @param {!Element} header |
| - * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations |
| - */ |
| - function toggleDetails(header, invalidations) |
| - { |
| - var wasExpanded = header.classList.contains("expanded"); |
| - header.classList.toggle("expanded", !wasExpanded); |
| - header.parentElement.classList.toggle("expanded", !wasExpanded); |
| - |
| - if (wasExpanded) { |
| - var content = header.nextElementSibling; |
| - if (content) |
| - content.remove(); |
| - } else { |
| - createInvalidationGroupDetails(header.parentElement, invalidations); |
| - } |
| - } |
| - |
| - /** |
| * @param {!Element} parentElement |
| * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations |
| */ |
| @@ -912,7 +930,7 @@ WebInspector.TimelineUIUtils._generateInvalidationsForType = function(type, targ |
| } |
| content.createTextChild(invalidations.length > 1 ? WebInspector.UIString("Nodes:") : WebInspector.UIString("Node:")); |
| - var nodeList = content.createChild("div", "node-list timeline-details-view-row-stack-trace"); |
| + var nodeList = content.createChild("div", "node-list"); |
| appendDetailedNodeList(nodeList, invalidations); |
| } |