mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
Marko v3: Added support for <html-element>
This commit is contained in:
parent
b54c9da89c
commit
241bcc7db6
@ -44,6 +44,7 @@ var ThisExpression = require('./ast/ThisExpression');
|
|||||||
var Expression = require('./ast/Expression');
|
var Expression = require('./ast/Expression');
|
||||||
var parseExpression = require('./util/parseExpression');
|
var parseExpression = require('./util/parseExpression');
|
||||||
var parseJavaScriptArgs = require('./util/parseJavaScriptArgs');
|
var parseJavaScriptArgs = require('./util/parseJavaScriptArgs');
|
||||||
|
var removeEscapeFunctions = require('./util/removeEscapeFunctions');
|
||||||
|
|
||||||
var DEFAULT_BUILDER;
|
var DEFAULT_BUILDER;
|
||||||
|
|
||||||
@ -295,9 +296,13 @@ class Builder {
|
|||||||
return new ObjectExpression({properties});
|
return new ObjectExpression({properties});
|
||||||
}
|
}
|
||||||
|
|
||||||
parseExpression(str) {
|
parseExpression(str, options) {
|
||||||
ok(typeof str === 'string', '"str" should be a string expression');
|
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) {
|
parseJavaScriptArgs(args) {
|
||||||
|
|||||||
14
taglibs/html/html-element-tag.js
Normal file
14
taglibs/html/html-element-tag.js
Normal 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;
|
||||||
|
};
|
||||||
@ -2,5 +2,8 @@
|
|||||||
"taglib-id": "marko-html",
|
"taglib-id": "marko-html",
|
||||||
"<html-comment>": {
|
"<html-comment>": {
|
||||||
"renderer": "./html-comment-tag.js"
|
"renderer": "./html-comment-tag.js"
|
||||||
|
},
|
||||||
|
"<html-element>": {
|
||||||
|
"code-generator": "./html-element-tag.js"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,3 +0,0 @@
|
|||||||
<html-element tag-name="hello-${data.myTagName}" class="my-class" foo="bar">
|
|
||||||
My nested content
|
|
||||||
</html-element>
|
|
||||||
3
test/fixtures/render/autotest/html-element-tag/template.marko
vendored
Normal file
3
test/fixtures/render/autotest/html-element-tag/template.marko
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<html-element("hello-${data.myTagName}") class="my-class" foo="bar">
|
||||||
|
My nested content
|
||||||
|
</html-element>
|
||||||
Loading…
x
Reference in New Issue
Block a user