Skip to content

Commit 101eb3d

Browse files
author
Steven Orvell
committed
Ensure fragments added via Polymer.dom always have elements removed, even when distribution does not select those elements.
1 parent 9f2464d commit 101eb3d

2 files changed

Lines changed: 17 additions & 1 deletion

File tree

‎src/lib/dom-api-shady.html‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@
5656
'of this node');
5757
}
5858
// remove node from its current position iff it's in a tree.
59-
if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {
59+
var isFragment = node.nodeType === Node.DOCUMENT_FRAGMENT_NODE;
60+
if (!isFragment) {
6061
var parent = TreeApi.Logical.getParentNode(node);
6162
// notify existing parent that this node is being removed.
6263
if (parent) {
@@ -81,6 +82,11 @@
8182
} else {
8283
TreeApi.Composed.appendChild(container, node);
8384
}
85+
// if a fragment provoked distribution, clean up it's actual dom.
86+
} else if (isFragment) {
87+
while (node.firstChild) {
88+
node.removeChild(node.firstChild);
89+
}
8490
}
8591
this.notifyObserver();
8692
return node;

‎test/unit/polymer-dom-content.html‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1439,6 +1439,16 @@
14391439
});
14401440
});
14411441

1442+
test('adding a document fragment always clears nodes in the fragment', function() {
1443+
var x = document.createElement('x-dist-star');
1444+
var frag = document.createDocumentFragment();
1445+
frag.appendChild(document.createTextNode('hi'));
1446+
frag.appendChild(document.createElement('div'));
1447+
Polymer.dom(x).appendChild(frag);
1448+
Polymer.dom.flush();
1449+
assert.equal(frag.childNodes.length, 0);
1450+
});
1451+
14421452
});
14431453

14441454

0 commit comments

Comments
 (0)