marko/benchmark/vdom/codegen-create/codegen-marko-vdom.js
Michael Rawlings 0f5e639775 Format + lint (#1016)
* add prettierignore

* switch to eslint:recommended + eslint-config-prettier

* fix eslint violations

* remove more .jshintrc files

* better conditional structure

* add prettier and update prettier ignore

* add precommit hook to run prettier

* add lint check to precommit and format check to ci

* format all the things

* add generated files

* let npm do it's thing with package.json
2018-03-09 10:02:11 -08:00

64 lines
1.4 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;
`;
};