diff options
-rw-r--r-- | lib/handlebars/compiler/compiler.js | 2 | ||||
-rw-r--r-- | lib/handlebars/compiler/javascript-compiler.js | 4 | ||||
-rw-r--r-- | lib/handlebars/runtime.js | 21 |
3 files changed, 20 insertions, 7 deletions
diff --git a/lib/handlebars/compiler/compiler.js b/lib/handlebars/compiler/compiler.js index f823daa..131cb98 100644 --- a/lib/handlebars/compiler/compiler.js +++ b/lib/handlebars/compiler/compiler.js @@ -217,7 +217,7 @@ Compiler.prototype = { this.opcode('push', 'depth0'); } - this.opcode('invokePartial', partialName.name); + this.opcode('invokePartial', partialName.name, partial.indent || ''); this.opcode('append'); }, diff --git a/lib/handlebars/compiler/javascript-compiler.js b/lib/handlebars/compiler/javascript-compiler.js index bc9d3c1..c92cf58 100644 --- a/lib/handlebars/compiler/javascript-compiler.js +++ b/lib/handlebars/compiler/javascript-compiler.js @@ -596,8 +596,8 @@ 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(), this.popStack(), "helpers", "partials"]; + invokePartial: function(name, indent) { + var params = [this.nameLookup('partials', name, 'partial'), "'" + indent + "'", "'" + name + "'", this.popStack(), this.popStack(), "helpers", "partials"]; if (this.options.data) { params.push("data"); diff --git a/lib/handlebars/runtime.js b/lib/handlebars/runtime.js index b9fc77d..9b61afe 100644 --- a/lib/handlebars/runtime.js +++ b/lib/handlebars/runtime.js @@ -31,18 +31,31 @@ export function template(templateSpec, env) { // for external users to override these as psuedo-supported APIs. env.VM.checkRevision(templateSpec.compiler); - var invokePartialWrapper = function(partial, name, context, hash, helpers, partials, data) { + var invokePartialWrapper = function(partial, indent, 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) { + if (result == null && env.compile) { var options = { helpers: helpers, partials: partials, data: data }; partials[name] = env.compile(partial, { data: data !== undefined }, env); - return partials[name](context, options); + result = partials[name](context, options); + } + if (result != null) { + if (indent) { + var lines = result.split('\n'); + for (var i = 0, l = lines.length; i < l; i++) { + if (!lines[i] && i + 1 === l) { + break; + } + + lines[i] = indent + lines[i]; + } + result = lines.join('\n'); + } + return result; } else { throw new Exception("The partial " + name + " could not be compiled when running in runtime-only mode"); } |