parse non-root <script> elements as a single Text node to fix hydration

pull/1087/head
Conduitry 8 years ago
parent 4b4737af9f
commit 61909fb85f

@ -434,7 +434,7 @@ export default class Element extends Node {
if (isVoidElementName(node.name)) return open + '>';
if (node.name === 'script') {
return `${open}>${node.data}</${node.name}>`;
return `${open}>${node.children[0].data}</script>`;
}
return `${open}>${node.children.map(toHTML).join('')}</${node.name}>`;

@ -69,7 +69,7 @@ export default function visitElement(
if (node.name === 'textarea' && textareaContents !== undefined) {
generator.append(textareaContents);
} else if (node.name === 'script') {
generator.append(escape(node.data));
generator.append(node.children[0].data);
} else {
node.children.forEach((child: Node) => {
visit(generator, block, child);

@ -226,8 +226,11 @@ export default function tag(parser: Parser) {
element.end = parser.index;
} else if (name === 'script') {
// special case
element.data = parser.readUntil(new RegExp(`</${name}>`));
parser.eat(`</${name}>`, true);
const start = parser.index;
const data = parser.readUntil(/<\/script>/);
const end = parser.index;
element.children.push({ start, end, type: 'Text', data });
parser.eat('</script>', true);
element.end = parser.index;
} else if (name === 'style') {
// special case

Loading…
Cancel
Save