mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
[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
50 lines
1.5 KiB
JavaScript
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;
|