marko/compiler/ast/HtmlElement/vdom/generateCode.js
Patrick Steele-Idem e76c7fa6d6 vdom support
2016-09-19 16:50:44 -06:00

55 lines
1.5 KiB
JavaScript

'use strict';
var HtmlElementVDOM = require('./HtmlElementVDOM');
function checkAttributesStatic(attributes) {
if (attributes) {
for (let i=0; i<attributes.length; i++) {
let attr = attributes[i];
if (!attr.isStatic) {
return false;
}
}
}
return true;
}
module.exports = function(node, codegen, vdomUtil) {
var body = codegen.generateCode(node.body);
var tagName = codegen.generateCode(node.tagNameExpression);
var attributes = codegen.generateCode(node.getAttributes());
var dynamicAttributes = codegen.generateCode(node.dynamicAttributes);
var isAttrsStatic = checkAttributesStatic(attributes);
var isStatic = isAttrsStatic && node.isLiteralTagName();
var isHtmlOnly = true;
if (body && body.length) {
for (var i=0; i<body.length; i++) {
let child = body[i];
if (child.type === 'HtmlElementVDOM' || child.type === 'TextVDOM') {
if (!child.isHtmlOnly) {
isStatic = false;
isHtmlOnly = false;
} if (!child.isStatic) {
isStatic = false;
}
} else {
isHtmlOnly = false;
isStatic = false;
}
}
}
return new HtmlElementVDOM({
tagName,
attributes,
body,
isStatic,
isAttrsStatic,
isHtmlOnly,
dynamicAttributes
});
};