Skip to content
This repository was archived by the owner on Mar 13, 2018. It is now read-only.

Commit 3e60260

Browse files
committed
Fix issue with redistribution when shadow is present
Fixes #432
1 parent 68c2bfa commit 3e60260

File tree

3 files changed

+39
-9
lines changed

3 files changed

+39
-9
lines changed

src/ShadowRenderer.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -355,13 +355,13 @@
355355
// 1.3.2.2.1
356356
destributeNodeInto(pool[j], shadow);
357357
}
358-
359-
} else {
360-
// 1.3.3
361-
this.distributionResolution(shadowTree);
362358
}
359+
360+
// 1.3.3
361+
this.distributionResolution(shadowTree);
363362
}
364363
}
364+
365365
for (var child = node.firstChild; child; child = child.nextSibling) {
366366
this.distributionResolution(child);
367367
}
@@ -376,6 +376,8 @@
376376
var content = node;
377377
this.updateDependentAttributes(content.getAttribute('select'));
378378

379+
var anyDistributed = false;
380+
379381
// 1.1
380382
for (var i = 0; i < pool.length; i++) {
381383
var node = pool[i];
@@ -384,13 +386,13 @@
384386
if (matches(node, content)) {
385387
destributeNodeInto(node, content);
386388
pool[i] = undefined;
389+
anyDistributed = true;
387390
}
388391
}
389392

390393
// 1.2
391394
// Fallback content
392-
var distributedNodes = getDistributedNodes(content);
393-
if (distributedNodes && distributedNodes.length === 0) {
395+
if (!anyDistributed) {
394396
for (var child = content.firstChild;
395397
child;
396398
child = child.nextSibling) {

test/js/Document.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ htmlSuite('Document', function() {
4949

5050
test('getElementsByTagName', function() {
5151
var elements = document.getElementsByTagName('body');
52-
assert.isTrue(elements instanceof NodeList);
52+
assert.isTrue(elements instanceof HTMLCollection);
5353
assert.equal(elements.length, 1);
5454
assert.isTrue(elements[0] instanceof HTMLElement);
5555

@@ -58,7 +58,7 @@ htmlSuite('Document', function() {
5858
assert.equal(doc.body, elements.item(0));
5959

6060
var elements2 = doc.getElementsByTagName('body');
61-
assert.isTrue(elements2 instanceof NodeList);
61+
assert.isTrue(elements2 instanceof HTMLCollection);
6262
assert.equal(elements2.length, 1);
6363
assert.isTrue(elements2[0] instanceof HTMLElement);
6464
assert.equal(doc.body, elements2[0]);

test/js/reprojection.js

+29-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,35 @@ suite('Shadow DOM reprojection', function() {
192192

193193
testRender();
194194
testRender();
195+
});
196+
197+
test('Regression 432', function() {
198+
// https://github.com/Polymer/ShadowDOM/issues/432
199+
200+
var xFoo = document.createElement('x-foo');
201+
xFoo.innerHTML = '<div>Hello</div>';
202+
var div = xFoo.firstChild;
203+
204+
var xBarSr = xFoo.createShadowRoot();
205+
206+
var xFooSr = xFoo.createShadowRoot();
207+
xFooSr.innerHTML = '<x-zot><content></content></x-zot><shadow></shadow>';
208+
var xZot = xFooSr.firstChild;
209+
var content = xZot.firstChild;
210+
var shadow = xZot.lastChild;
211+
212+
xZotSr = xZot.createShadowRoot();
213+
xZotSr.innerHTML = '<content></content>';
214+
var content2 = xZotSr.firstChild;
215+
216+
xFoo.offsetWidth;
217+
218+
assertArrayEqual(content.getDistributedNodes(), [div]);
219+
assertArrayEqual(shadow.getDistributedNodes(), [div]);
220+
assertArrayEqual(content2.getDistributedNodes(), [div]);
221+
222+
assertArrayEqual(div.getDestinationInsertionPoints(), [content, content2]);
195223

196-
224+
assert.equal(getVisualInnerHtml(xFoo), '<x-zot><div>Hello</div></x-zot>');
197225
});
198226
});

0 commit comments

Comments
 (0)