diff options
author | kpdecker <kpdecker@gmail.com> | 2013-01-19 16:44:43 -0600 |
---|---|---|
committer | kpdecker <kpdecker@gmail.com> | 2013-01-19 16:44:43 -0600 |
commit | 5e20c809dccdf9c6bcd2bb1acd209542605c2ae4 (patch) | |
tree | 1c97e53650b6770757ce81d93a7e7dbc0456885a /lib/handlebars/compiler/compiler.js | |
parent | 2b875cfb33bdf946b2bdbef562efe7aa64397bec (diff) | |
download | handlebars.js-5e20c809dccdf9c6bcd2bb1acd209542605c2ae4.zip handlebars.js-5e20c809dccdf9c6bcd2bb1acd209542605c2ae4.tar.gz handlebars.js-5e20c809dccdf9c6bcd2bb1acd209542605c2ae4.tar.bz2 |
Output options only once to unknownHelper case
Diffstat (limited to 'lib/handlebars/compiler/compiler.js')
-rw-r--r-- | lib/handlebars/compiler/compiler.js | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/handlebars/compiler/compiler.js b/lib/handlebars/compiler/compiler.js index e25e826..b33684b 100644 --- a/lib/handlebars/compiler/compiler.js +++ b/lib/handlebars/compiler/compiler.js @@ -769,7 +769,7 @@ Handlebars.JavaScriptCompiler = function() {}; invokeHelper: function(paramSize, name) { this.context.aliases.helperMissing = 'helpers.helperMissing'; - var helper = this.lastHelper = this.setupHelper(paramSize, name); + var helper = this.lastHelper = this.setupHelper(paramSize, name, true); this.useRegister('foundHelper'); this.pushStack("(foundHelper = " + helper.name + ") ? foundHelper.call(" + @@ -980,22 +980,22 @@ Handlebars.JavaScriptCompiler = function() {}; .replace(/\r/g, '\\r') + '"'; }, - setupHelper: function(paramSize, name) { + setupHelper: function(paramSize, name, missingParams) { var params = []; - this.setupParams(paramSize, params); + this.setupParams(paramSize, params, missingParams); var foundHelper = this.nameLookup('helpers', name, 'helper'); return { params: params, name: foundHelper, callParams: ["depth0"].concat(params).join(", "), - helperMissingParams: ["depth0", this.quotedString(name)].concat(params).join(", ") + helperMissingParams: missingParams && ["depth0", this.quotedString(name)].concat(params).join(", ") }; }, // the params and contexts arguments are passed in arrays // to fill in - setupParams: function(paramSize, params) { + setupParams: function(paramSize, params, useRegister) { var options = [], contexts = [], types = [], param, inverse, program; options.push("hash:" + this.popStack()); @@ -1040,7 +1040,13 @@ Handlebars.JavaScriptCompiler = function() {}; options.push("data:data"); } - params.push("{" + options.join(",") + "}"); + options = "{" + options.join(",") + "}"; + if (useRegister) { + this.register('options', options); + params.push('options'); + } else { + params.push(options); + } return params.join(", "); } }; |