summaryrefslogtreecommitdiff
path: root/static/js/shadow.js
blob: 20c35e12220a485e27087930a449d0dcf1a8739b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const ShadowRenderer = {
    render: function (hostElement, htmlContent) {
        let shadow = hostElement.shadowRoot;
        if (!shadow) {
            shadow = hostElement.attachShadow({ mode: 'open' });
        }

        const parser = new DOMParser();
        const doc = parser.parseFromString(htmlContent, 'text/html');

        shadow.innerHTML = '';

        if (doc.head) {
            doc.head.querySelectorAll('style').forEach(style => {
                const styleClone = style.cloneNode(true);
                let css = styleClone.textContent;
                css = css.replace(/\bbody\b/g, ':host');
                styleClone.textContent = css;
                shadow.appendChild(styleClone);
            });

            doc.head.querySelectorAll('link[rel="stylesheet"]').forEach(link => {
                shadow.appendChild(link.cloneNode(true));
            });
        }

        if (doc.body) {
            while (doc.body.firstChild) {
                shadow.appendChild(doc.body.firstChild);
            }
        }

        setTimeout(() => {
            EmailUtils.adjustContrast(shadow);
        }, 100);

        return shadow;
    }
};