Convert children to nested functions. Reuse identifiers by closure where possible.
This commit is contained in:
+10
-30
@@ -3,66 +3,46 @@ var Handlebars = require("./base");
|
||||
// BEGIN(BROWSER)
|
||||
Handlebars.VM = {
|
||||
template: function(templateSpec) {
|
||||
// Setup all children
|
||||
for (var i = 0, len = templateSpec.children.length; i < len; i++) {
|
||||
templateSpec.children[i] = Handlebars.VM.template(templateSpec.children[i]);
|
||||
}
|
||||
|
||||
// Just add water
|
||||
var container = {
|
||||
escapeExpression: Handlebars.Utils.escapeExpression,
|
||||
invokePartial: Handlebars.VM.invokePartial,
|
||||
programs: [],
|
||||
program: function(i, helpers, partials, data) {
|
||||
program: function(i, fn, data) {
|
||||
var programWrapper = this.programs[i];
|
||||
if(data) {
|
||||
return Handlebars.VM.program(this.children[i], helpers, partials, data);
|
||||
return Handlebars.VM.program(fn, data);
|
||||
} else if(programWrapper) {
|
||||
return programWrapper;
|
||||
} else {
|
||||
programWrapper = this.programs[i] = Handlebars.VM.program(this.children[i], helpers, partials);
|
||||
programWrapper = this.programs[i] = Handlebars.VM.program(fn);
|
||||
return programWrapper;
|
||||
}
|
||||
},
|
||||
programWithDepth: Handlebars.VM.programWithDepth,
|
||||
noop: Handlebars.VM.noop
|
||||
};
|
||||
container.render = templateSpec.fn;
|
||||
container.children = templateSpec.children;
|
||||
|
||||
return function(context, options, $depth) {
|
||||
return function(context, options) {
|
||||
options = options || {};
|
||||
var args = [Handlebars, context, options.helpers, options.partials, options.data];
|
||||
var depth = Array.prototype.slice.call(arguments, 2);
|
||||
args = args.concat(depth);
|
||||
return container.render.apply(container, args);
|
||||
return templateSpec.call(container, Handlebars, context, options.helpers, options.partials, options.data);
|
||||
};
|
||||
},
|
||||
|
||||
programWithDepth: function(fn, helpers, partials, data, $depth) {
|
||||
var args = Array.prototype.slice.call(arguments, 4);
|
||||
programWithDepth: function(fn, data, $depth) {
|
||||
var args = Array.prototype.slice.call(arguments, 2);
|
||||
|
||||
return function(context, options) {
|
||||
options = options || {};
|
||||
|
||||
options = {
|
||||
helpers: options.helpers || helpers,
|
||||
partials: options.partials || partials,
|
||||
data: options.data || data
|
||||
};
|
||||
|
||||
return fn.apply(this, [context, options].concat(args));
|
||||
return fn.apply(this, [context, options.data || data].concat(args));
|
||||
};
|
||||
},
|
||||
program: function(fn, helpers, partials, data) {
|
||||
program: function(fn, data) {
|
||||
return function(context, options) {
|
||||
options = options || {};
|
||||
|
||||
return fn(context, {
|
||||
helpers: options.helpers || helpers,
|
||||
partials: options.partials || partials,
|
||||
data: options.data || data
|
||||
});
|
||||
return fn(context, options.data || data);
|
||||
};
|
||||
},
|
||||
noop: function() { return ""; },
|
||||
|
||||
Reference in New Issue
Block a user