diff --git a/src/lib/dom-api.html b/src/lib/dom-api.html index 5282130508..929c1ac912 100644 --- a/src/lib/dom-api.html +++ b/src/lib/dom-api.html @@ -65,11 +65,15 @@ // 3. node is (host of container needs distribution) appendChild: function(node) { var handled; + // if a is added, make sure it's parent has logical info. + this._ensureContentLogicalInfo(node); this._removeNodeFromHost(node, true); if (this._nodeIsInLogicalTree(this.node)) { this._addLogicalInfo(node, this.node); this._addNodeToHost(node); handled = this._maybeDistribute(node, this.node); + } else { + this._addNodeToHost(node); } // if not distributing and not adding to host, do a fast path addition if (!handled && !this._tryRemoveUndistributedNode(node)) { @@ -86,9 +90,10 @@ return this.appendChild(node); } var handled; + // if a is added, make sure it's parent has logical info. + this._ensureContentLogicalInfo(node); this._removeNodeFromHost(node, true); if (this._nodeIsInLogicalTree(this.node)) { - saveLightChildrenIfNeeded(this.node); var children = this.childNodes; var index = children.indexOf(ref_node); if (index < 0) { @@ -98,6 +103,8 @@ this._addLogicalInfo(node, this.node, index); this._addNodeToHost(node); handled = this._maybeDistribute(node, this.node); + } else { + this._addNodeToHost(node); } // if not distributing and not adding to host, do a fast path addition if (!handled && !this._tryRemoveUndistributedNode(node)) { @@ -125,6 +132,8 @@ if (this._nodeIsInLogicalTree(this.node)) { this._removeNodeFromHost(node); handled = this._maybeDistribute(node, this.node); + } else { + this._removeNodeFromHost(node); } if (!handled) { // if removing from a shadyRoot, remove form host instead @@ -237,10 +246,23 @@ // or has a lightParent _nodeIsInLogicalTree: function(node) { return Boolean((node._lightParent !== undefined) || node._isShadyRoot || - this._ownerShadyRootForNode(node) || node.shadyRoot); }, + _ensureContentLogicalInfo: function(node) { + if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { + saveLightChildrenIfNeeded(this.node); + var c$ = Array.prototype.slice.call(node.childNodes); + for (var i=0, n; (i