marko
Version:
UI Components + streaming, async, high performance, HTML templating for Node.js and the browser.
47 lines (41 loc) • 1.31 kB
JavaScript
module.exports = function render(input, out) {
var isComponent = !input.n;
var shouldPreserve = !("i" in input) || input.i;
var componentsContext = out.___components;
var isHydrate =
componentsContext && componentsContext.___globalContext.___isHydrate;
var ownerComponent = out.___assignedComponentDef.___component;
var referenceComponent = ownerComponent;
var key = out.___assignedKey;
var checkKey = key;
if (key[0] !== "@") {
var parentComponent = componentsContext.___componentDef.___component;
if (ownerComponent !== parentComponent) {
referenceComponent = parentComponent;
checkKey += ":" + ownerComponent.id;
}
}
var isPreserved =
shouldPreserve &&
((isHydrate && (isComponent || input.b)) ||
referenceComponent.___keyedElements[checkKey]);
if (isComponent) {
out.bf(key, ownerComponent, shouldPreserve);
if (!isPreserved && input.renderBody) {
input.renderBody(out);
}
out.ef();
} else {
if (isPreserved) {
if (input.b) {
out.___parent.___preserveBody = true;
} else {
out.beginElement("", null, key, ownerComponent);
out.___parent.___preserve = true;
out.endElement();
}
} else if (input.renderBody) {
input.renderBody(out);
}
}
};