Marko v3: Added support for <html-element>

This commit is contained in:
Patrick Steele-Idem 2016-01-19 16:41:39 -07:00
parent b54c9da89c
commit 241bcc7db6
7 changed files with 27 additions and 5 deletions

View File

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

View File

@ -0,0 +1,14 @@
'use strict';
module.exports = function(elNode, codegen) {
var tagName = elNode.argument;
if (!tagName) {
codegen.addError('Invalid <html-element> tag. Expected: <html-element(<tag-name-expression>) ... >');
return;
}
tagName = codegen.builder.parseExpression(tagName, { escapeXml: false });
elNode.setTagName(tagName);
return elNode;
};

View File

@ -2,5 +2,8 @@
"taglib-id": "marko-html",
"<html-comment>": {
"renderer": "./html-comment-tag.js"
},
"<html-element>": {
"code-generator": "./html-element-tag.js"
}
}

View File

@ -1,3 +0,0 @@
<html-element tag-name="hello-${data.myTagName}" class="my-class" foo="bar">
My nested content
</html-element>

View File

@ -0,0 +1,3 @@
<html-element("hello-${data.myTagName}") class="my-class" foo="bar">
My nested content
</html-element>