diff --git a/compiler/Builder.js b/compiler/Builder.js index e4e3881fd..6d626e524 100644 --- a/compiler/Builder.js +++ b/compiler/Builder.js @@ -44,6 +44,7 @@ var ThisExpression = require('./ast/ThisExpression'); var Expression = require('./ast/Expression'); var parseExpression = require('./util/parseExpression'); var parseJavaScriptArgs = require('./util/parseJavaScriptArgs'); +var removeEscapeFunctions = require('./util/removeEscapeFunctions'); var DEFAULT_BUILDER; @@ -295,9 +296,13 @@ class Builder { return new ObjectExpression({properties}); } - parseExpression(str) { + parseExpression(str, options) { ok(typeof str === 'string', '"str" should be a string expression'); - return parseExpression(str, DEFAULT_BUILDER); + var parsed = parseExpression(str, DEFAULT_BUILDER); + if (options && options.escapeXml === false) { + parsed = removeEscapeFunctions(parsed); + } + return parsed; } parseJavaScriptArgs(args) { diff --git a/taglibs/html/html-element-tag.js b/taglibs/html/html-element-tag.js new file mode 100644 index 000000000..e58f2e751 --- /dev/null +++ b/taglibs/html/html-element-tag.js @@ -0,0 +1,14 @@ +'use strict'; + +module.exports = function(elNode, codegen) { + var tagName = elNode.argument; + if (!tagName) { + codegen.addError('Invalid tag. Expected: ) ... >'); + return; + } + + tagName = codegen.builder.parseExpression(tagName, { escapeXml: false }); + + elNode.setTagName(tagName); + return elNode; +}; \ No newline at end of file diff --git a/taglibs/html/marko-taglib.json b/taglibs/html/marko-taglib.json index 750a12308..409f32798 100644 --- a/taglibs/html/marko-taglib.json +++ b/taglibs/html/marko-taglib.json @@ -2,5 +2,8 @@ "taglib-id": "marko-html", "": { "renderer": "./html-comment-tag.js" + }, + "": { + "code-generator": "./html-element-tag.js" } } \ No newline at end of file diff --git a/test/fixtures/render/autotest/dynamic-tag-name/template.marko b/test/fixtures/render/autotest/dynamic-tag-name/template.marko deleted file mode 100644 index b440eb846..000000000 --- a/test/fixtures/render/autotest/dynamic-tag-name/template.marko +++ /dev/null @@ -1,3 +0,0 @@ - - My nested content - \ No newline at end of file diff --git a/test/fixtures/render/autotest/dynamic-tag-name/expected.html b/test/fixtures/render/autotest/html-element-tag/expected.html similarity index 100% rename from test/fixtures/render/autotest/dynamic-tag-name/expected.html rename to test/fixtures/render/autotest/html-element-tag/expected.html diff --git a/test/fixtures/render/autotest/html-element-tag/template.marko b/test/fixtures/render/autotest/html-element-tag/template.marko new file mode 100644 index 000000000..2bbc19fb9 --- /dev/null +++ b/test/fixtures/render/autotest/html-element-tag/template.marko @@ -0,0 +1,3 @@ + + My nested content + \ No newline at end of file diff --git a/test/fixtures/render/autotest/dynamic-tag-name/test.js b/test/fixtures/render/autotest/html-element-tag/test.js similarity index 100% rename from test/fixtures/render/autotest/dynamic-tag-name/test.js rename to test/fixtures/render/autotest/html-element-tag/test.js