Implement partial hash evaluation

This commit is contained in:
kpdecker
2014-01-17 16:49:44 -06:00
parent f90981adf6
commit 45ae86a248
4 changed files with 23 additions and 5 deletions
+8 -2
View File
@@ -203,8 +203,14 @@ Compiler.prototype = {
var partialName = partial.partialName;
this.usePartial = true;
if(partial.context) {
this.ID(partial.context);
if (partial.hash) {
this.accept(partial.hash);
} else {
this.opcode('push', 'undefined');
}
if (partial.context) {
this.accept(partial.context);
} else {
this.opcode('push', 'depth0');
}
@@ -569,7 +569,7 @@ JavaScriptCompiler.prototype = {
// This operation pops off a context, invokes a partial with that context,
// and pushes the result of the invocation back.
invokePartial: function(name) {
var params = [this.nameLookup('partials', name, 'partial'), "'" + name + "'", this.popStack(), "helpers", "partials"];
var params = [this.nameLookup('partials', name, 'partial'), "'" + name + "'", this.popStack(), this.popStack(), "helpers", "partials"];
if (this.options.data) {
params.push("data");
+6 -2
View File
@@ -29,8 +29,12 @@ export function template(templateSpec, env) {
// Note: Using env.VM references rather than local var references throughout this section to allow
// for external users to override these as psuedo-supported APIs.
var invokePartialWrapper = function(partial, name, context, helpers, partials, data) {
var result = env.VM.invokePartial.apply(this, arguments);
var invokePartialWrapper = function(partial, name, context, hash, helpers, partials, data) {
if (hash) {
context = Utils.extend({}, context, hash);
}
var result = env.VM.invokePartial.call(this, partial, name, context, helpers, partials, data);
if (result != null) { return result; }
if (env.compile) {
+8
View File
@@ -23,6 +23,14 @@ describe('partials', function() {
shouldCompileToWithPartials(string, [hash, {}, {dude: partial}], true, "Dudes: Empty");
});
it("partials with parameters", function() {
var string = "Dudes: {{#dudes}}{{> dude otherDude=name}}{{/dudes}}";
var partial = "{{otherDude}} ({{url}}) ";
var hash = {dudes: [{name: "Yehuda", url: "http://yehuda"}, {name: "Alan", url: "http://alan"}]};
shouldCompileToWithPartials(string, [hash, {}, {dude: partial}], true, "Dudes: Yehuda (http://yehuda) Alan (http://alan) ",
"Basic partials output based on current context.");
});
it("partial in a partial", function() {
var string = "Dudes: {{#dudes}}{{>dude}}{{/dudes}}";
var dude = "{{name}} {{> url}} ";