diff --git a/mustache.js b/mustache.js index 7165a8aba..b7caf586a 100644 --- a/mustache.js +++ b/mustache.js @@ -33,6 +33,8 @@ var Mustache; var eqRe = /\s*=/; var curlyRe = /\s*\}/; var tagRe = /#|\^|\/|>|\{|&|=|!/; + var dotRe = /\s*\.\s*/g; + var pipeRe = /\s*\|\s*/g; // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577 // See https://github.com/janl/mustache.js/issues/189 @@ -143,10 +145,19 @@ var Mustache; return new Context(view, this); }; - Context.prototype.lookup = function (name) { + Context.prototype.lookup = function (name, view) { var value = this._cache[name]; if (!value) { + + if (typeof view === 'undefined' && name.indexOf("|") > 0) { + var names = name.split(pipeRe); + for (var i=0,len=names.length; i 0) { - var names = name.split("."), i = 0; + var names = name.split(dotRe), i = 0; value = context.view; @@ -177,7 +188,7 @@ var Mustache; } if (typeof value === "function") { - value = value.call(this.view); + value = value.call(typeof view === 'undefined' ? this.view : view); } return value; diff --git a/test/_files/dot_notation.mustache b/test/_files/dot_notation.mustache index f89d70ba2..1258c610a 100644 --- a/test/_files/dot_notation.mustache +++ b/test/_files/dot_notation.mustache @@ -5,5 +5,5 @@

VAT: {{{price.currency.symbol}}}{{#price}}{{vat}}{{/price}}

Test truthy false values:

-

Zero: {{truthy.zero}}

-

False: {{truthy.notTrue}}

+

Zero: {{truthy . zero}}

+

False: {{truthy . notTrue}}

diff --git a/test/_files/piped_helpers_date.js b/test/_files/piped_helpers_date.js new file mode 100644 index 000000000..743af6d05 --- /dev/null +++ b/test/_files/piped_helpers_date.js @@ -0,0 +1,6 @@ +({ + timestamp: 0, + iso8601Date: function() { + return new Date(this).toISOString(); + } +}) diff --git a/test/_files/piped_helpers_date.mustache b/test/_files/piped_helpers_date.mustache new file mode 100644 index 000000000..0382c0082 --- /dev/null +++ b/test/_files/piped_helpers_date.mustache @@ -0,0 +1 @@ +{{timestamp | iso8601Date}} diff --git a/test/_files/piped_helpers_date.txt b/test/_files/piped_helpers_date.txt new file mode 100644 index 000000000..967aa9d02 --- /dev/null +++ b/test/_files/piped_helpers_date.txt @@ -0,0 +1 @@ +1970-01-01T00:00:00.000Z diff --git a/test/_files/piped_helpers_sum.js b/test/_files/piped_helpers_sum.js new file mode 100644 index 000000000..816b61224 --- /dev/null +++ b/test/_files/piped_helpers_sum.js @@ -0,0 +1,14 @@ +({ + numbers: [1,2,3,4,-10], + sum: function() { + var total = 0; + for (var i=0,len=this.length; i