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

Commit 06501ab

Browse files
author
Steve Orvell
committed
Merge pull request #251 from arv/issue-245-dont-clear-inner-shadows
Make sure we do not remove the shadow dom of nested hosts.
2 parents be345ce + 00ef46e commit 06501ab

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

src/ShadowRenderer.js

+5
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@
266266
* the real DOM tree and make minimal changes as needed.
267267
*/
268268
function RenderNode(node) {
269+
this.skip = false;
269270
this.node = node;
270271
this.childNodes = [];
271272
}
@@ -278,6 +279,9 @@
278279
},
279280

280281
sync: function(opt_added) {
282+
if (this.skip)
283+
return;
284+
281285
var nodeWrapper = this.node;
282286
// plain array of RenderNodes
283287
var newChildren = this.childNodes;
@@ -390,6 +394,7 @@
390394

391395
if (isShadowHost(node)) {
392396
var renderer = getRendererForHost(node);
397+
renderNode.skip = !renderer.dirty;
393398
renderer.render(renderNode);
394399
} else {
395400
// We associate the parent of a content/shadow with the renderer

test/js/test.js

+14
Original file line numberDiff line numberDiff line change
@@ -451,4 +451,18 @@ suite('Shadow DOM', function() {
451451
assert.equal(a.childNodes.length, 2);
452452
});
453453

454+
test('nested shadow hosts (issue 245)', function() {
455+
var outer = document.createElement('outer');
456+
var inner = outer.appendChild(document.createElement('inner'));
457+
458+
// Inner first. Order matters.
459+
var innerShadowRoot = inner.createShadowRoot();
460+
innerShadowRoot.textContent = 'inner';
461+
462+
var outerShadowRoot = outer.createShadowRoot();
463+
outerShadowRoot.innerHTML = '<content></content>outer';
464+
465+
assert.equal(getVisualInnerHtml(outer), '<inner>inner</inner>outer');
466+
});
467+
454468
});

0 commit comments

Comments
 (0)