From 26bc1f38119271170323851de8bd1925fc2af4cd Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 8 Jan 2018 21:56:30 -0500 Subject: [PATCH 1/3] failing test for #1082 --- .../runtime/samples/script-style-non-top-level/_config.js | 8 ++++++++ test/runtime/samples/script-style-non-top-level/main.html | 4 ++++ 2 files changed, 12 insertions(+) create mode 100644 test/runtime/samples/script-style-non-top-level/_config.js create mode 100644 test/runtime/samples/script-style-non-top-level/main.html diff --git a/test/runtime/samples/script-style-non-top-level/_config.js b/test/runtime/samples/script-style-non-top-level/_config.js new file mode 100644 index 0000000000..1aade72239 --- /dev/null +++ b/test/runtime/samples/script-style-non-top-level/_config.js @@ -0,0 +1,8 @@ +export default { + html: ` +
+ + +
+ ` +}; \ No newline at end of file diff --git a/test/runtime/samples/script-style-non-top-level/main.html b/test/runtime/samples/script-style-non-top-level/main.html new file mode 100644 index 0000000000..94cf72e4bd --- /dev/null +++ b/test/runtime/samples/script-style-non-top-level/main.html @@ -0,0 +1,4 @@ +
+ + +
\ No newline at end of file From 8f9164836e825ae25fa16f0d76607e1db9c8bc98 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Thu, 8 Feb 2018 01:56:36 -0500 Subject: [PATCH 2/3] support tag interpolation in non-root ' + ); + parser.read(/<\/style>/); + element.end = parser.index; } else { parser.stack.push(element); } diff --git a/test/runtime/samples/non-root-style-interpolation/_config.js b/test/runtime/samples/non-root-style-interpolation/_config.js new file mode 100644 index 0000000000..326d17e3b1 --- /dev/null +++ b/test/runtime/samples/non-root-style-interpolation/_config.js @@ -0,0 +1,15 @@ +export default { + data: { + color: 'red', + }, + + html: ` +
+ + foo +
`, +}; diff --git a/test/runtime/samples/non-root-style-interpolation/main.html b/test/runtime/samples/non-root-style-interpolation/main.html new file mode 100644 index 0000000000..b49fc101a7 --- /dev/null +++ b/test/runtime/samples/non-root-style-interpolation/main.html @@ -0,0 +1,8 @@ +
+ + foo +
From 61909fb85f8f9d31089882bfbc8afd9d19384128 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Thu, 8 Feb 2018 02:19:59 -0500 Subject: [PATCH 3/3] parse non-root `; } return `${open}>${node.children.map(toHTML).join('')}`; diff --git a/src/generators/server-side-rendering/visitors/Element.ts b/src/generators/server-side-rendering/visitors/Element.ts index 7ea2b3a7cd..9ef9289d88 100644 --- a/src/generators/server-side-rendering/visitors/Element.ts +++ b/src/generators/server-side-rendering/visitors/Element.ts @@ -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); diff --git a/src/parse/state/tag.ts b/src/parse/state/tag.ts index 1b55617c33..8b701cae1d 100644 --- a/src/parse/state/tag.ts +++ b/src/parse/state/tag.ts @@ -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(``)); - parser.eat(``, true); + const start = parser.index; + const data = parser.readUntil(/<\/script>/); + const end = parser.index; + element.children.push({ start, end, type: 'Text', data }); + parser.eat('', true); element.end = parser.index; } else if (name === 'style') { // special case