diff --git a/src/Template/Template.js b/src/Template/Template.js index 5cf73ed..6bcfa58 100644 --- a/src/Template/Template.js +++ b/src/Template/Template.js @@ -61,15 +61,52 @@ if (typeof HTMLTemplateElement === 'undefined') { }, configurable: true }); + + template.cloneNode = function(deep) { + return HTMLTemplateElement.cloneNode(this, deep); + }; + } catch (err) { canDecorate = false; } } + var nativeCloneNode = Node.prototype.cloneNode; + + HTMLTemplateElement.cloneNode = function(template, deep) { + var clone = nativeCloneNode.call(template); + this.decorate(clone); + if (deep) { + // NOTE: use native clone node to make sure CE's wrapped + // cloneNode does not cause elements to upgrade. + clone.content.appendChild( + nativeCloneNode.call(template.content, true)); + // these two lists should be coincident + var s$ = template.content.querySelectorAll(TEMPLATE_TAG); + var t$ = clone.content.querySelectorAll(TEMPLATE_TAG); + for (var i=0, l=t$.length, t, s; i + document.importNode = function(element, deep) { + return (element.localName === TEMPLATE_TAG) ? + HTMLTemplateElement.cloneNode(element, deep) : + originalImportNode.call(document, element, deep); + }; + /** The `bootstrap` method is called automatically and "fixes" all