diff --git a/templates/pages/andersen-single.html b/templates/pages/andersen-single.html index 16b7667..91a7c46 100644 --- a/templates/pages/andersen-single.html +++ b/templates/pages/andersen-single.html @@ -130,54 +130,55 @@ }; function markSpans(span) { - const content = span.querySelector('#content'); - const walker = document.createTreeWalker( - content, - NodeFilter.SHOW_ALL | NodeFilter.SHOW_TEXT - ); - - - const delNodes = []; - content.querySelectorAll('a.delSpan').forEach((anchor) => { - walker.currentNode = anchor; - const end = content.querySelector(anchor.hash); - while (walker.nextNode()) { - if (walker.currentNode === end) { - break; - } - if (walker.currentNode.nodeType === Node.TEXT_NODE) { - delNodes.push(walker.currentNode); - } + let content = span.querySelector('#content'); + if (!content && span.shadowRoot) { + content = span.shadowRoot.querySelector('#content'); + } + if (!content) { + return; + } + + function process(root) { + const wrapBetweenAnchors = (cls, name) => { + root.querySelectorAll(`a.${cls}`).forEach((anchor) => { + const nodes = []; + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ALL); + walker.currentNode = anchor; + const end = root.querySelector(anchor.hash); + if (!end) { + return; + } + while (walker.nextNode()) { + if (walker.currentNode === end) { + break; + } + if (walker.currentNode.nodeType === Node.TEXT_NODE) { + nodes.push(walker.currentNode); + } + } + nodes.forEach((node) => { + const wrapper = document.createElement('span'); + wrapper.className = name; + wrapper.appendChild(node.cloneNode()); + node.replaceWith(wrapper); + }); + }); + }; + + wrapBetweenAnchors('delSpan', 'deleted'); + wrapBetweenAnchors('addSpan', 'added'); + + if (root instanceof Element && root.shadowRoot) { + process(root.shadowRoot); } - - delNodes.forEach((node) => { - const wrapper = document.createElement('span'); - wrapper.className = 'deleted'; - wrapper.appendChild(node.cloneNode()); - node.replaceWith(wrapper); - }); - }); - - const addNodes = []; - content.querySelectorAll('a.addSpan').forEach((anchor) => { - walker.currentNode = anchor; - const end = content.querySelector(anchor.hash); - while (walker.nextNode()) { - if (walker.currentNode === end) { - break; - } - if (walker.currentNode.nodeType === Node.TEXT_NODE) { - addNodes.push(walker.currentNode); + root.querySelectorAll('*').forEach((el) => { + if (el.shadowRoot) { + process(el.shadowRoot); } - } - - addNodes.forEach((node) => { - const wrapper = document.createElement('span'); - wrapper.className = 'added'; - wrapper.appendChild(node.cloneNode()); - node.replaceWith(wrapper); }); - }); + } + + process(content); }; window.addEventListener('load', () => { @@ -191,4 +192,4 @@ }); - \ No newline at end of file +