Skip to content

Commit

Permalink
#189 properly reset escaping context after attribute value
Browse files Browse the repository at this point in the history
  • Loading branch information
casid committed Nov 28, 2022
1 parent e53d9d2 commit 2199e85
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 4 deletions.
Expand Up @@ -318,6 +318,9 @@ public void onHtmlTagAttributeCodePart(int depth, String codePart, String tagNam
kotlinCode.append("jteOutput.setContext(\"").append(tagName).append("\", \"").append(attributeName).append("\")\n");

writeCodePart(depth, codePart);

writeIndentation(depth + 1);
kotlinCode.append("jteOutput.setContext(\"").append(tagName).append("\", null)\n");
}

@Override
Expand Down Expand Up @@ -420,8 +423,6 @@ public void onHtmlAttributeOutput(int depth, TemplateParser.HtmlTag currentHtmlT
onConditionStart(depth, "gg.jte.runtime.TemplateUtils.isAttributeRendered(" + javaExpression + ")");
onTextPart(depth + 1, " " + htmlAttribute.name + "=" + htmlAttribute.quotes);
onHtmlTagAttributeCodePart(depth + 1, javaExpression, currentHtmlTag.name, htmlAttribute.name);
writeIndentation(depth + 1);
kotlinCode.append("jteOutput.setContext(\"").append(currentHtmlTag.name).append("\", null)\n");
onTextPart(depth + 1, "" + htmlAttribute.quotes);
}
onConditionEnd(depth);
Expand Down
Expand Up @@ -1372,6 +1372,16 @@ void localization_contentParams() {
assertThat(output.toString()).isEqualTo("<span>Hello? <a href=\"foo\">Click here</a></span>");
}

@Test
void localization_contentParams2() {
codeResolver.givenCode("template.kte", "@param localizer:gg.jte.kotlin.TemplateEngine_HtmlOutputEscapingTest.MyLocalizer\n" +
"<span>${localizer.localize(\"link\", @`<a style=\"color: ${\"foo\"};\">`, @`</a>`)}</span>");

templateEngine.render("template.kte", TemplateUtils.toMap("localizer", localizer), output);

assertThat(output.toString()).isEqualTo("<span>Hello? <a style=\"color: foo;\">Click here</a></span>");
}

@SuppressWarnings("unused")
public static class MyLocalizer implements LocalizationSupport {
Map<String, Object> resources = TemplateUtils.toMap(
Expand Down
5 changes: 3 additions & 2 deletions jte/src/main/java/gg/jte/compiler/java/JavaCodeGenerator.java
Expand Up @@ -311,6 +311,9 @@ public void onHtmlTagAttributeCodePart(int depth, String codePart, String tagNam
javaCode.append("jteOutput.setContext(\"").append(tagName).append("\", \"").append(attributeName).append("\");\n");

writeCodePart(depth, codePart);

writeIndentation(depth + 1);
javaCode.append("jteOutput.setContext(\"").append(tagName).append("\", null);\n");
}

@Override
Expand Down Expand Up @@ -413,8 +416,6 @@ public void onHtmlAttributeOutput(int depth, TemplateParser.HtmlTag currentHtmlT
onConditionStart(depth, "gg.jte.runtime.TemplateUtils.isAttributeRendered(" + javaExpression + ")");
onTextPart(depth + 1, " " + htmlAttribute.name + "=" + htmlAttribute.quotes);
onHtmlTagAttributeCodePart(depth + 1, javaExpression, currentHtmlTag.name, htmlAttribute.name);
writeIndentation(depth + 1);
javaCode.append("jteOutput.setContext(\"").append(currentHtmlTag.name).append("\", null);\n");
onTextPart(depth + 1, "" + htmlAttribute.quotes);
}
onConditionEnd(depth);
Expand Down
Expand Up @@ -1527,6 +1527,16 @@ void localization_contentParams() {
assertThat(output.toString()).isEqualTo("<span>Hello? <a href=\"foo\">Click here</a></span>");
}

@Test
void localization_contentParams2() {
codeResolver.givenCode("template.jte", "@param gg.jte.TemplateEngine_HtmlOutputEscapingTest.MyLocalizer localizer\n" +
"<span>${localizer.localize(\"link\", @`<a style=\"color: ${\"foo\"};\">`, @`</a>`)}</span>");

templateEngine.render("template.jte", TemplateUtils.toMap("localizer", localizer), output);

assertThat(output.toString()).isEqualTo("<span>Hello? <a style=\"color: foo;\">Click here</a></span>");
}

@SuppressWarnings("unused")
public static class MyLocalizer implements LocalizationSupport {
Map<String, Object> resources = TemplateUtils.toMap(
Expand Down

0 comments on commit 2199e85

Please sign in to comment.