From 241bcc7db6ff3f94ebb3572d12417e8f3eb525a3 Mon Sep 17 00:00:00 2001 From: Patrick Steele-Idem Date: Tue, 19 Jan 2016 16:41:39 -0700 Subject: [PATCH] Marko v3: Added support for --- compiler/Builder.js | 9 +++++++-- taglibs/html/html-element-tag.js | 14 ++++++++++++++ taglibs/html/marko-taglib.json | 3 +++ .../autotest/dynamic-tag-name/template.marko | 3 --- .../expected.html | 0 .../autotest/html-element-tag/template.marko | 3 +++ .../{dynamic-tag-name => html-element-tag}/test.js | 0 7 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 taglibs/html/html-element-tag.js delete mode 100644 test/fixtures/render/autotest/dynamic-tag-name/template.marko rename test/fixtures/render/autotest/{dynamic-tag-name => html-element-tag}/expected.html (100%) create mode 100644 test/fixtures/render/autotest/html-element-tag/template.marko rename test/fixtures/render/autotest/{dynamic-tag-name => html-element-tag}/test.js (100%) 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