diff --git a/src/generators/nodes/Element.ts b/src/generators/nodes/Element.ts index b1bd650bf7..c70f22b447 100644 --- a/src/generators/nodes/Element.ts +++ b/src/generators/nodes/Element.ts @@ -232,7 +232,7 @@ export default class Element extends Node { ); } else { block.builders.create.addLine( - `${name}.innerHTML = ${stringify(this.children.map(node => toHTML(node, false)).join(''))};` + `${name}.innerHTML = ${stringify(this.children.map(toHTML).join(''))};` ); } } else { @@ -414,9 +414,13 @@ export default class Element extends Node { ); } - function toHTML(node: Element | Text, dontEscapeText: Boolean) { + function toHTML(node: Element | Text) { if (node.type === 'Text') { - return dontEscapeText ? node.data : escapeHTML(node.data); + return node.parent && + node.parent.type === 'Element' && + (node.parent.name === 'script' || node.parent.name === 'style') + ? node.data + : escapeHTML(node.data); } let open = `<${node.name}`; @@ -435,9 +439,7 @@ export default class Element extends Node { if (isVoidElementName(node.name)) return open + '>'; - const shouldNotEscapeText = node.name === 'script' || node.name === 'style'; - - return `${open}>${node.children.map(node => toHTML(node, shouldNotEscapeText)).join('')}`; + return `${open}>${node.children.map(toHTML).join('')}`; } }