mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
64 lines
1.3 KiB
JavaScript
64 lines
1.3 KiB
JavaScript
function indentStr(level) {
|
|
var str = "";
|
|
for (var i = 0; i < level; i++) {
|
|
str += " ";
|
|
}
|
|
|
|
return str;
|
|
}
|
|
module.exports = function(node) {
|
|
var code = "";
|
|
|
|
function codegenEl(node, level) {
|
|
if (level === 0) {
|
|
code += "createElement";
|
|
} else {
|
|
code += ".e";
|
|
}
|
|
|
|
var attrsMap = {};
|
|
|
|
var attributes = node.attributes;
|
|
for (var i = 0; i < attributes.length; i++) {
|
|
var attr = attributes[i];
|
|
attrsMap[attr.name] = attr.value;
|
|
}
|
|
|
|
code += `(${JSON.stringify(node.nodeName)}, ${JSON.stringify(attrsMap)}, ${
|
|
node.childNodes.length
|
|
})\n`;
|
|
// codegenAttrs(node.attributes, level + 1);
|
|
|
|
var curChild = node.firstChild;
|
|
while (curChild) {
|
|
codegen(curChild, level + 1);
|
|
curChild = curChild.nextSibling;
|
|
}
|
|
}
|
|
|
|
function codegenText(node) {
|
|
code += `.t(${JSON.stringify(node.nodeValue)})\n`;
|
|
}
|
|
|
|
function codegen(node, level) {
|
|
code += indentStr(level);
|
|
|
|
if (node.nodeType === 1) {
|
|
codegenEl(node, level);
|
|
} else if (node.nodeType === 3) {
|
|
codegenText(node, level);
|
|
}
|
|
}
|
|
|
|
codegen(node, 0);
|
|
|
|
return "return " + code + "\n";
|
|
};
|
|
|
|
module.exports.generateInitCode = function() {
|
|
return `
|
|
var MarkoVDOM = window.MarkoVDOM;
|
|
var createElement = MarkoVDOM.createElement;
|
|
`;
|
|
};
|