pull/1087/merge
Rich Harris 8 years ago committed by GitHub
commit d087baf160
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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

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

@ -224,10 +224,22 @@ export default function tag(parser: Parser) {
);
parser.read(/<\/textarea>/);
element.end = parser.index;
} else if (name === 'script' || name === 'style') {
} 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
element.children = readSequence(
parser,
() =>
parser.template.slice(parser.index, parser.index + 8) === '</style>'
);
parser.read(/<\/style>/);
element.end = parser.index;
} else {
parser.stack.push(element);

@ -0,0 +1,15 @@
export default {
data: {
color: 'red',
},
html: `
<div>
<style>
div {
color: red;
}
</style>
foo
</div>`,
};

@ -0,0 +1,8 @@
<div>
<style>
div {
color: {{color}};
}
</style>
foo
</div>

@ -0,0 +1,8 @@
export default {
html: `
<div>
<style>div { color: red; }</style>
<script>alert('<>');</script>
</div>
`
};

@ -0,0 +1,4 @@
<div>
<style>div { color: red; }</style>
<script>alert('<>');</script>
</div>
Loading…
Cancel
Save