/* * Polyfill for attaching shadow trees for declarative Shadow DOM for * implementations that do not support declarative Shadow DOM. * * Note: this polyfill will feature-detect the native feature, and do nothing * if supported. * * See: https://github.com/whatwg/html/pull/5465 * * root: The root of the subtree in which to upgrade shadow roots * */ function polyfill_declarative_shadow_dom(root) { if (HTMLTemplateElement.prototype.hasOwnProperty('shadowRootMode')) return; root.querySelectorAll("template[shadowrootmode]").forEach(template => { const mode = template.getAttribute("shadowrootmode"); const delegatesFocus = template.hasAttribute("shadowrootdelegatesfocus"); const shadowRoot = template.parentNode.attachShadow({ mode, delegatesFocus }); shadowRoot.appendChild(template.content); template.remove(); polyfill_declarative_shadow_dom(shadowRoot); }); }