Fixes #201 - Marko v3: Don't allow "undefined" and "null" in output for placeholders

This commit is contained in:
Patrick Steele-Idem 2016-01-11 09:43:46 -07:00
parent 9cadda400d
commit ab59abaee9
16 changed files with 18 additions and 3 deletions

View File

@ -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);

View File

@ -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 ]);
}
}

View File

@ -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>");
};
}

View File

@ -0,0 +1 @@
<div foo="Hello ">Hello World!</div>

View File

@ -0,0 +1,3 @@
<div foo='Hello ${data.foo}'>
Hello World!
</div>

View File

@ -0,0 +1 @@
<div foo="Hello ">Hello World!</div>

View File

@ -0,0 +1,3 @@
<div foo='Hello $!{data.foo}'>
Hello World!
</div>

View File

@ -0,0 +1 @@
exports.templateData = {};

View File

@ -0,0 +1 @@
exports.templateData = {};