marko/src/components/ComponentsContext.js
Patrick Steele-Idem 2be98636ea Fixes #817 - Support dynamic root elements
[Optimizations] Simplified bookkeeping for component tree
A component stack is no longer used

Small API improvements

Improved how component boundaries are managed

Assign keys to all HTML elements and custom tags for better diffing

Checking in progress

Just build the src when calculating size
2017-09-08 12:32:17 -06:00

50 lines
1.5 KiB
JavaScript

'use strict';
var GlobalComponentsContext = require('./GlobalComponentsContext');
function ComponentsContext(out, parentComponentsContext) {
var globalComponentsContext;
var componentDef;
var components;
if (parentComponentsContext) {
components = parentComponentsContext.___components;
globalComponentsContext = parentComponentsContext.___globalContext;
componentDef = parentComponentsContext.___componentDef;
} else {
globalComponentsContext = out.global.___components;
if (globalComponentsContext === undefined) {
out.global.___components = globalComponentsContext = new GlobalComponentsContext(out);
}
components = [];
}
this.___globalContext = globalComponentsContext;
this.___components = components;
this.___out = out;
this.___componentDef = componentDef;
}
ComponentsContext.prototype = {
___initComponents: function(doc) {
var componentDefs = this.___components;
ComponentsContext.___initClientRendered(componentDefs, doc);
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;