diff --git a/dist/HTMLNormalizer/strategies/nodesAmendingFunctions.d.ts b/dist/HTMLNormalizer/strategies/nodesAmendingFunctions.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..edaf502f86786f53b7de96549eb34fa40f391896 --- /dev/null +++ b/dist/HTMLNormalizer/strategies/nodesAmendingFunctions.d.ts @@ -0,0 +1 @@ +export declare const unwindTags: (node: Element | Document, tagName: string) => void; diff --git a/dist/HTMLNormalizer/strategies/nodesAmendingFunctions.js b/dist/HTMLNormalizer/strategies/nodesAmendingFunctions.js new file mode 100644 index 0000000000000000000000000000000000000000..da12e8e0ec9d4230830c359e6ae1cc8259e26c82 --- /dev/null +++ b/dist/HTMLNormalizer/strategies/nodesAmendingFunctions.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.unwindTags = void 0; +const unwindTags = (node, tagName) => { + const tags = node.getElementsByTagName(tagName); + //Sort tags by depth to start unwinding the deepest ones, which does not contain nested spans + const tagsDepths = {}; + Array.from(tags).forEach((span) => { + let descendant = span; + let parent = descendant.parentNode; + let depth = 0; + while (parent && descendant !== parent) { + descendant = parent; + parent = descendant.parentNode; + depth++; + } + if (!tagsDepths[depth]) { + tagsDepths[depth] = []; + } + tagsDepths[depth].push(span); + }); + Object.keys(tagsDepths) + .sort((a, b) => parseInt(b) - parseInt(a)) + .forEach((depth) => { + tagsDepths[depth].forEach((span) => { + let child = span.firstChild; + const parent = span.parentNode; + while (child) { + parent.insertBefore(child.cloneNode(true), span); + child = child.nextSibling; + } + span.parentNode.removeChild(span); + }); + }); +}; +exports.unwindTags = unwindTags;