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

Unified Diff: Source/devtools/front_end/elements/ElementsTreeOutline.js

Issue 467233002: DevTools: Make sure ElementsTreeOutline is correctly rendered when element's hasChildren state chan… (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Comments addressed Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « LayoutTests/inspector/elements/user-properties-expected.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/elements/ElementsTreeOutline.js
diff --git a/Source/devtools/front_end/elements/ElementsTreeOutline.js b/Source/devtools/front_end/elements/ElementsTreeOutline.js
index 3da19999680d08461292236cd72ed89742c8446b..083929395de81cee8240aac3ed8eceabe766c21b 100644
--- a/Source/devtools/front_end/elements/ElementsTreeOutline.js
+++ b/Source/devtools/front_end/elements/ElementsTreeOutline.js
@@ -1198,7 +1198,8 @@ WebInspector.ElementsTreeElement.prototype = {
onpopulate: function()
{
- if (this.children.length || this._showInlineText() || this._elementCloseTag)
+ this.populated = true;
+ if (this.children.length || !this.hasChildren)
return;
this.updateChildren();
@@ -1209,8 +1210,9 @@ WebInspector.ElementsTreeElement.prototype = {
*/
updateChildren: function(fullRefresh)
{
- if (this._elementCloseTag)
+ if (!this.hasChildren)
return;
+ console.assert(!this._elementCloseTag);
this._node.getChildNodes(this._updateChildren.bind(this, fullRefresh));
},
@@ -1324,7 +1326,7 @@ WebInspector.ElementsTreeElement.prototype = {
this._adjustCollapsedRange();
var lastChild = this.children[this.children.length - 1];
- if (this._node.nodeType() == Node.ELEMENT_NODE && (!lastChild || !lastChild._elementCloseTag))
+ if (this._node.nodeType() === Node.ELEMENT_NODE && this.hasChildren)
this.insertChildElement(this._node, this.children.length, true);
// We want to restore the original selection and tree scroll position after a full refresh, if possible.
@@ -2348,6 +2350,7 @@ WebInspector.ElementsTreeElement.prototype = {
// just show that text and the closing tag inline rather than
// create a subtree for them
if (showInlineText) {
+ console.assert(!this.hasChildren);
var textNodeElement = info.titleDOM.createChild("span", "webkit-html-text-node");
var result = this._convertWhitespaceToEntities(node.firstChild.nodeValue());
textNodeElement.textContent = result.text;
@@ -2663,13 +2666,25 @@ WebInspector.ElementsTreeUpdater.prototype = {
},
/**
- * @param {!WebInspector.DOMNode} parentNode
+ * @param {?WebInspector.DOMNode} parentNode
*/
_parentNodeModified: function(parentNode)
{
+ if (!parentNode)
+ return;
+ this._recentlyModifiedParentNodes.add(parentNode);
+
+ var treeElement = this._treeOutline.findTreeElement(parentNode);
+ if (treeElement) {
+ var oldHasChildren = treeElement.hasChildren;
+ var oldShowInlineText = treeElement._showInlineText();
+ treeElement._updateHasChildren();
+ if (treeElement.hasChildren !== oldHasChildren || oldShowInlineText || treeElement._showInlineText())
+ this._nodeModified(parentNode);
+ }
+
if (this._treeOutline._visible)
this._updateModifiedNodesSoon();
- this._recentlyModifiedParentNodes.add(parentNode);
},
/**
@@ -2677,9 +2692,9 @@ WebInspector.ElementsTreeUpdater.prototype = {
*/
_nodeModified: function(node)
{
+ this._recentlyModifiedNodes.add(node);
if (this._treeOutline._visible)
this._updateModifiedNodesSoon();
- this._recentlyModifiedNodes.add(node);
},
/**
@@ -2712,6 +2727,7 @@ WebInspector.ElementsTreeUpdater.prototype = {
_characterDataModified: function(event)
{
var node = /** @type {!WebInspector.DOMNode} */ (event.data);
+ this._parentNodeModified(node.parentNode);
this._nodeModified(node);
},
@@ -2721,8 +2737,7 @@ WebInspector.ElementsTreeUpdater.prototype = {
_nodeInserted: function(event)
{
var node = /** @type {!WebInspector.DOMNode} */ (event.data);
- var parentNode = /** @type {!WebInspector.DOMNode} */ (node.parentNode);
- this._parentNodeModified(parentNode);
+ this._parentNodeModified(node.parentNode);
},
/**
@@ -2742,13 +2757,7 @@ WebInspector.ElementsTreeUpdater.prototype = {
_childNodeCountUpdated: function(event)
{
var node = /** @type {!WebInspector.DOMNode} */ (event.data);
- var treeElement = this._treeOutline.findTreeElement(node);
- if (treeElement) {
- var oldHasChildren = treeElement.hasChildren;
- treeElement._updateHasChildren();
- if (treeElement.hasChildren !== oldHasChildren)
- treeElement.updateTitle();
- }
+ this._parentNodeModified(node);
},
_updateModifiedNodesSoon: function()
@@ -2787,7 +2796,7 @@ WebInspector.ElementsTreeUpdater.prototype = {
var parentNodes = this._recentlyModifiedParentNodes.values();
for (var i = 0, size = parentNodes.length; i < size; ++i) {
var parentNodeItem = this._treeOutline.findTreeElement(parentNodes[i]);
- if (parentNodeItem)
+ if (parentNodeItem && parentNodeItem.populated)
parentNodeItem.updateChildren();
}
}
« no previous file with comments | « LayoutTests/inspector/elements/user-properties-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698