marko
Version:
UI Components + streaming, async, high performance, HTML templating for Node.js and the browser.
60 lines (46 loc) • 1.75 kB
JavaScript
;
var GlobalComponentsContext = require("./GlobalComponentsContext");
function ComponentsContext(out, parentComponentsContext) {
var globalComponentsContext;
var componentDef;
if (parentComponentsContext) {
globalComponentsContext = parentComponentsContext.___globalContext;
componentDef = parentComponentsContext.___componentDef;
var nestedContextsForParent;
if (
!(nestedContextsForParent = parentComponentsContext.___nestedContexts)
) {
nestedContextsForParent = parentComponentsContext.___nestedContexts = [];
}
nestedContextsForParent.push(this);
} else {
globalComponentsContext = out.global.___components;
if (globalComponentsContext === undefined) {
out.global.___components = globalComponentsContext =
new GlobalComponentsContext(out);
}
}
this.___globalContext = globalComponentsContext;
this.___components = [];
this.___out = out;
this.___componentDef = componentDef;
this.___nestedContexts = undefined;
this.___isPreserved =
parentComponentsContext && parentComponentsContext.___isPreserved;
}
ComponentsContext.prototype = {
___initComponents: function (host) {
var componentDefs = this.___components;
ComponentsContext.___initClientRendered(componentDefs, host);
this.___out.emit("___componentsInitialized");
// Reset things stored in global since global is retained for
// future renders
this.___out.global.___components = undefined;
return componentDefs;
},
};
function getComponentsContext(out) {
return out.___components || (out.___components = new ComponentsContext(out));
}
module.exports = exports = ComponentsContext;
exports.___getComponentsContext = getComponentsContext;