Simplify fix for fragment children management.

This commit is contained in:
Steven Orvell 2016-01-22 16:50:01 -08:00
parent 25da63d132
commit 713377ead8
2 changed files with 12 additions and 13 deletions

View File

@ -56,8 +56,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
'of this node'); 'of this node');
} }
// remove node from its current position iff it's in a tree. // remove node from its current position iff it's in a tree.
var isFragment = node.nodeType === Node.DOCUMENT_FRAGMENT_NODE; if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {
if (!isFragment) {
var parent = TreeApi.Logical.getParentNode(node); var parent = TreeApi.Logical.getParentNode(node);
// notify existing parent that this node is being removed. // notify existing parent that this node is being removed.
if (parent) { if (parent) {
@ -82,11 +81,6 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
} else { } else {
TreeApi.Composed.appendChild(container, node); TreeApi.Composed.appendChild(container, node);
} }
// if a fragment provoked distribution, clean up it's actual dom.
} else if (isFragment) {
while (node.firstChild) {
node.removeChild(node.firstChild);
}
} }
this.notifyObserver(); this.notifyObserver();
return node; return node;
@ -105,8 +99,17 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
TreeApi.Logical.recordInsertBefore(node, this.node, ref_node); TreeApi.Logical.recordInsertBefore(node, this.node, ref_node);
} }
// if not distributing and not adding to host, do a fast path addition // if not distributing and not adding to host, do a fast path addition
return (this._maybeDistribute(node) || var handled = (this._maybeDistribute(node) ||
this._tryRemoveUndistributedNode(node)); this._tryRemoveUndistributedNode(node));
// if distribution is handling this node and it's a fragment,
// the actual dom may not be removed from the fragment if some nodes
// remain undistributed so we ensure removal here.
if (handled && (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE)) {
while (node.firstChild) {
node.removeChild(node.firstChild);
}
}
return handled;
}, },
/** /**

View File

@ -195,11 +195,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
// the act of setting this info can affect patched nodes // the act of setting this info can affect patched nodes
// getters; therefore capture childNodes before patching. // getters; therefore capture childNodes before patching.
for (var n=node.firstChild; n; n=n.nextSibling) { for (var n=node.firstChild; n; n=n.nextSibling) {
// only link in the child iff it's not already in the container's this._linkNode(n, container, ref_node);
// logical tree.
if (this.getParentNode(n) !== container) {
this._linkNode(n, container, ref_node);
}
} }
} else { } else {
this._linkNode(node, container, ref_node); this._linkNode(node, container, ref_node);