mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
Fixes #201 - Marko v3: Don't allow "undefined" and "null" in output for placeholders
This commit is contained in:
parent
9cadda400d
commit
ab59abaee9
@ -109,6 +109,7 @@ function generateCodeForExpressionAttr(name, value, codegen) {
|
||||
|
||||
} else if (isNoEscapeXml(part)) {
|
||||
part = removeEscapeFunctions(part);
|
||||
part = codegen.builder.functionCall(codegen.builder.identifier('str'), [part]);
|
||||
} else {
|
||||
var escapeXmlAttrVar = codegen.addStaticVar('escapeXmlAttr', '__helpers.xa');
|
||||
part = removeEscapeFunctions(part);
|
||||
|
||||
@ -42,6 +42,7 @@ class Text extends Node {
|
||||
this.normalizeText();
|
||||
|
||||
var argument = this.argument;
|
||||
var escape = this.escape !== false;
|
||||
|
||||
if (argument instanceof Literal) {
|
||||
if (!argument.value) {
|
||||
@ -49,12 +50,15 @@ class Text extends Node {
|
||||
}
|
||||
} else {
|
||||
let builder = codegen.builder;
|
||||
if (this.escape !== false) {
|
||||
|
||||
if (escape) {
|
||||
// TODO Only escape the parts that need to be escaped if it is a compound expression with static
|
||||
// text parts
|
||||
argument = builder.functionCall(
|
||||
'escapeXml',
|
||||
[argument]);
|
||||
} else {
|
||||
argument = builder.functionCall(builder.identifier('str'), [ argument ]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -15,9 +15,9 @@ function create(__helpers) {
|
||||
"b\" bar=\"a " +
|
||||
escapeXmlAttr(data.foo) +
|
||||
" b\" baz=\"a " +
|
||||
data.foo +
|
||||
str(data.foo) +
|
||||
" b\" nested=\"a " +
|
||||
data.foo + ("nested " + data.bar) +
|
||||
str(data.foo + ("nested " + data.bar)) +
|
||||
" b\"></div>");
|
||||
};
|
||||
}
|
||||
|
||||
1
test/fixtures/render/autotest/attr-placeholder-escaped-undefined/expected.html
vendored
Normal file
1
test/fixtures/render/autotest/attr-placeholder-escaped-undefined/expected.html
vendored
Normal file
@ -0,0 +1 @@
|
||||
<div foo="Hello ">Hello World!</div>
|
||||
3
test/fixtures/render/autotest/attr-placeholder-escaped-undefined/template.marko
vendored
Normal file
3
test/fixtures/render/autotest/attr-placeholder-escaped-undefined/template.marko
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<div foo='Hello ${data.foo}'>
|
||||
Hello World!
|
||||
</div>
|
||||
1
test/fixtures/render/autotest/attr-placeholder-unescaped-undefined/expected.html
vendored
Normal file
1
test/fixtures/render/autotest/attr-placeholder-unescaped-undefined/expected.html
vendored
Normal file
@ -0,0 +1 @@
|
||||
<div foo="Hello ">Hello World!</div>
|
||||
3
test/fixtures/render/autotest/attr-placeholder-unescaped-undefined/template.marko
vendored
Normal file
3
test/fixtures/render/autotest/attr-placeholder-unescaped-undefined/template.marko
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<div foo='Hello $!{data.foo}'>
|
||||
Hello World!
|
||||
</div>
|
||||
1
test/fixtures/render/autotest/attr-placeholder-unescaped-undefined/test.js
vendored
Normal file
1
test/fixtures/render/autotest/attr-placeholder-unescaped-undefined/test.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
exports.templateData = {};
|
||||
1
test/fixtures/render/autotest/hello-static/test.js
vendored
Normal file
1
test/fixtures/render/autotest/hello-static/test.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
exports.templateData = {};
|
||||
Loading…
x
Reference in New Issue
Block a user