From ed3d8c3db2b7d674c67fe3c42db8a56ba533ff58 Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Fri, 24 Feb 2012 13:26:19 +0100 Subject: [PATCH] Release 0.5.49 --- 0.5.49/LICENSE | 23 + 0.5.49/README.md | 418 +++++++++++ 0.5.49/index.html | 57 ++ 0.5.49/mustache-0.5.49.tar.gz | Bin 0 -> 10883 bytes 0.5.49/mustache-0.5.49/LICENSE | 23 + 0.5.49/mustache-0.5.49/README.md | 418 +++++++++++ 0.5.49/mustache-0.5.49/mustache-0.5.49.tar.gz | Bin 0 -> 10883 bytes 0.5.49/mustache-0.5.49/mustache.js | 536 ++++++++++++++ 0.5.49/mustache-0.5.49/mustache.min.js | 5 + 0.5.49/mustache-0.5.49/package.json | 8 + 0.5.49/mustache-dojo/LICENSE | 23 + 0.5.49/mustache-dojo/README.md | 418 +++++++++++ 0.5.49/mustache-dojo/dojo.mustache.js | 549 ++++++++++++++ 0.5.49/mustache-dojo/dojo.mustache.min.js | 6 + 0.5.49/mustache-dojo/mustache-dojo.tar.gz | Bin 0 -> 10865 bytes 0.5.49/mustache-jquery/LICENSE | 23 + 0.5.49/mustache-jquery/README.md | 418 +++++++++++ 0.5.49/mustache-jquery/jquery.mustache.js | 559 +++++++++++++++ 0.5.49/mustache-jquery/jquery.mustache.min.js | 6 + 0.5.49/mustache-jquery/mustache-jquery.tar.gz | Bin 0 -> 10947 bytes 0.5.49/mustache-mootools/LICENSE | 23 + 0.5.49/mustache-mootools/README.md | 418 +++++++++++ 0.5.49/mustache-mootools/mootools.mustache.js | 543 ++++++++++++++ .../mootools.mustache.min.js | 1 + .../mustache-mootools.tar.gz | Bin 0 -> 10812 bytes 0.5.49/mustache-qooxdoo/LICENSE | 23 + 0.5.49/mustache-qooxdoo/README.md | 418 +++++++++++ .../mustache-qooxdoo/mustache-qooxdoo.tar.gz | Bin 0 -> 12068 bytes 0.5.49/mustache-qooxdoo/qooxdoo.mustache.js | 671 ++++++++++++++++++ .../mustache-qooxdoo/qooxdoo.mustache.min.js | 74 ++ 0.5.49/mustache-requirejs/LICENSE | 23 + 0.5.49/mustache-requirejs/README.md | 418 +++++++++++ .../mustache-requirejs.tar.gz | Bin 0 -> 10768 bytes .../mustache-requirejs/requirejs.mustache.js | 545 ++++++++++++++ .../requirejs.mustache.min.js | 5 + 0.5.49/mustache-yui3/LICENSE | 23 + 0.5.49/mustache-yui3/README.md | 418 +++++++++++ 0.5.49/mustache-yui3/mustache-yui3.tar.gz | Bin 0 -> 10733 bytes 0.5.49/mustache-yui3/yui3.mustache.js | 541 ++++++++++++++ 0.5.49/mustache-yui3/yui3.mustache.min.js | 1 + 0.5.49/mustache.js | 536 ++++++++++++++ 0.5.49/mustache.min.js | 5 + 0.5.49/package.json | 8 + index.html | 1 + 44 files changed, 8185 insertions(+) create mode 100644 0.5.49/LICENSE create mode 100644 0.5.49/README.md create mode 100644 0.5.49/index.html create mode 100644 0.5.49/mustache-0.5.49.tar.gz create mode 100644 0.5.49/mustache-0.5.49/LICENSE create mode 100644 0.5.49/mustache-0.5.49/README.md create mode 100644 0.5.49/mustache-0.5.49/mustache-0.5.49.tar.gz create mode 100644 0.5.49/mustache-0.5.49/mustache.js create mode 100644 0.5.49/mustache-0.5.49/mustache.min.js create mode 100644 0.5.49/mustache-0.5.49/package.json create mode 100644 0.5.49/mustache-dojo/LICENSE create mode 100644 0.5.49/mustache-dojo/README.md create mode 100644 0.5.49/mustache-dojo/dojo.mustache.js create mode 100644 0.5.49/mustache-dojo/dojo.mustache.min.js create mode 100644 0.5.49/mustache-dojo/mustache-dojo.tar.gz create mode 100644 0.5.49/mustache-jquery/LICENSE create mode 100644 0.5.49/mustache-jquery/README.md create mode 100644 0.5.49/mustache-jquery/jquery.mustache.js create mode 100644 0.5.49/mustache-jquery/jquery.mustache.min.js create mode 100644 0.5.49/mustache-jquery/mustache-jquery.tar.gz create mode 100644 0.5.49/mustache-mootools/LICENSE create mode 100644 0.5.49/mustache-mootools/README.md create mode 100644 0.5.49/mustache-mootools/mootools.mustache.js create mode 100644 0.5.49/mustache-mootools/mootools.mustache.min.js create mode 100644 0.5.49/mustache-mootools/mustache-mootools.tar.gz create mode 100644 0.5.49/mustache-qooxdoo/LICENSE create mode 100644 0.5.49/mustache-qooxdoo/README.md create mode 100644 0.5.49/mustache-qooxdoo/mustache-qooxdoo.tar.gz create mode 100644 0.5.49/mustache-qooxdoo/qooxdoo.mustache.js create mode 100644 0.5.49/mustache-qooxdoo/qooxdoo.mustache.min.js create mode 100644 0.5.49/mustache-requirejs/LICENSE create mode 100644 0.5.49/mustache-requirejs/README.md create mode 100644 0.5.49/mustache-requirejs/mustache-requirejs.tar.gz create mode 100644 0.5.49/mustache-requirejs/requirejs.mustache.js create mode 100644 0.5.49/mustache-requirejs/requirejs.mustache.min.js create mode 100644 0.5.49/mustache-yui3/LICENSE create mode 100644 0.5.49/mustache-yui3/README.md create mode 100644 0.5.49/mustache-yui3/mustache-yui3.tar.gz create mode 100644 0.5.49/mustache-yui3/yui3.mustache.js create mode 100644 0.5.49/mustache-yui3/yui3.mustache.min.js create mode 100644 0.5.49/mustache.js create mode 100644 0.5.49/mustache.min.js create mode 100644 0.5.49/package.json diff --git a/0.5.49/LICENSE b/0.5.49/LICENSE new file mode 100644 index 0000000..395e263 --- /dev/null +++ b/0.5.49/LICENSE @@ -0,0 +1,23 @@ +The MIT License + +Copyright (c) 2009 Chris Wanstrath (Ruby) +Copyright (c) 2010 Jan Lehnardt (JavaScript) + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/0.5.49/README.md b/0.5.49/README.md new file mode 100644 index 0000000..32f98f6 --- /dev/null +++ b/0.5.49/README.md @@ -0,0 +1,418 @@ +# mustache.js - Logic-less {{mustache}} templates with JavaScript + +> What could be more logical awesome than no logic at all? + +[mustache.js](http://github.com/janl/mustache.js) is an implementation of the +[Mustache](http://mustache.github.com/) template system in JavaScript. + +[Mustache](http://mustache.github.com/) is a logic-less template syntax. It can +be used for HTML, config files, source code - anything. It works by expanding +tags in a template using values provided in a hash or object. + +We call it "logic-less" because there are no if statements, else clauses, or for +loops. Instead there are only tags. Some tags are replaced with a value, some +nothing, and others a series of values. + +For a language-agnostic overview of Mustache's template syntax, see the +`mustache(5)` [manpage](http://mustache.github.com/mustache.5.html). + +## Where to use mustache.js? + +You can use mustache.js to render templates in many various scenarios where you +can use JavaScript. For example, you can render templates in a browser, +server-side using [node](http://nodejs.org/), in [CouchDB](http://couchdb.apache.org/) +views, or in almost any other environment where you can use JavaScript. + +## Who uses mustache.js? + +An updated list of mustache.js users is kept [on the Github wiki](http://wiki.github.com/janl/mustache.js/beard-competition). +Add yourself or your company if you use mustache.js! + +## Usage + +Below is quick example how to use mustache.js: + + var view = { + title: "Joe", + calc: function () { + return 2 + 4; + } + }; + + var output = Mustache.render("{{title}} spends {{calc}}", view); + +In this example, the `Mustache.render` function takes two parameters: 1) the +[mustache](http://mustache.github.com/) template and 2) a `view` object that +contains the data and code needed to render the template. + +### CommonJS + +mustache.js is usable without any modification in both browsers and [CommonJS](http://www.commonjs.org/) +environments like [node.js](http://nodejs.org/). To use it as a CommonJS module, +simply require the file, like this: + + var Mustache = require("mustache"); + +## Templates + +A [mustache](http://mustache.github.com/) template is a string that contains +any number of mustache tags. Tags are indicated by the double mustaches that +surround them. `{{person}}` is a tag, as is `{{#person}}`. In both examples we +refer to `person` as the tag's key. + +There are several types of tags available in mustache.js. + +### Variables + +The most basic tag type is a simple variable. A `{{name}}` tag renders the value +of the `name` key in the current context. If there is no such key, nothing is +rendered. + +All variables are HTML-escaped by default. If you want to render unescaped HTML, +use the triple mustache: `{{{name}}}`. You can also use `&` to unescape a +variable. + +Template: + + * {{name}} + * {{age}} + * {{company}} + * {{{company}}} + * {{&company}} + +View: + + { + "name": "Chris", + "company": "GitHub" + } + +Output: + + * Chris + * + * <b>GitHub</b> + * GitHub + * GitHub + +JavaScript's dot notation may be used to access keys that are properties of +objects in a view. + +Template: + + * {{name.first}} {{name.last}} + * {{age}} + +View: + + { + "name": { + "first": "Michael", + "last": "Jackson" + }, + "age": "RIP" + } + +Output: + + * Michael Jackson + * RIP + +### Sections + +Sections render blocks of text one or more times, depending on the value of the +key in the current context. + +A section begins with a pound and ends with a slash. That is, `{{#person}}` +begins a `person` section, while `{{/person}}` ends it. The text between the two +tags is referred to as that section's "block". + +The behavior of the section is determined by the value of the key. + +#### False Values or Empty Lists + +If the `person` key exists and has a value of `null`, `undefined`, or `false`, +or is an empty list, the block will not be rendered. + +Template: + + Shown. + {{#nothin}} + Never shown! + {{/nothin}} + +View: + + { + "person": true + } + +Output: + + Shown. + +#### Non-Empty Lists + +If the `person` key exists and is not `null`, `undefined`, or `false`, and is +not an empty list the block will be rendered one or more times. + +When the value is a list, the block is rendered once for each item in the list. +The context of the block is set to the current item in the list for each +iteration. In this way we can loop over collections. + +Template: + + {{#stooges}} + {{name}} + {{/stooges}} + +View: + + { + "stooges": [ + { "name": "Moe" }, + { "name": "Larry" }, + { "name": "Curly" } + ] + } + +Output: + + Moe + Larry + Curly + +When looping over an array of strings, a `.` can be used to refer to the current +item in the list. + +Template: + + {{#musketeers}} + * {{.}} + {{/musketeers}} + +View: + + { + "musketeers": ["Athos", "Aramis", "Porthos", "D'Artagnan"] + } + +Output: + + * Athos + * Aramis + * Porthos + * D'Artagnan + +If the value of a section variable is a function, it will be called in the +context of the current item in the list on each iteration. + +Template: + + {{#beatles}} + * {{name}} + {{/beatles}} + +View: + + { + "beatles": [ + { "firstName": "John", "lastName": "Lennon" }, + { "firstName": "Paul", "lastName": "McCartney" }, + { "firstName": "George", "lastName": "Harrison" }, + { "firstName": "Ringo", "lastName": "Starr" } + ], + "name": function () { + return this.firstName + " " + this.lastName; + } + } + +Output: + + * John Lennon + * Paul McCartney + * George Harrison + * Ringo Starr + +#### Functions + +If the value of a section key is a function, it is called with the section's +literal block of text, un-rendered, as its first argument. The second argument +is a special rendering function that uses the current view as its view argument. +It is called in the context of the current view object. + +Template: + + {{#bold}}Hi {{name}}.{{/bold}} + +View: + + { + "name": "Tater", + "bold": function () { + return function (text, render) { + return "" + render(text) + ""; + } + } + } + +Output: + + Hi Tater. + +### Inverted Sections + +An inverted section opens with `{{^section}}` instead of `{{#section}}`. The +block of an inverted section is rendered only if the value of that section's tag +is `null`, `undefined`, `false`, or an empty list. + +Template: + + {{#repos}}{{name}}{{/repos}} + {{^repos}}No repos :({{/repos}} + +View: + + { + "repos": [] + } + +Output: + + No repos :( + +### Comments + +Comments begin with a bang and are ignored. The following template: + +

Today{{! ignore me }}.

+ +Will render as follows: + +

Today.

+ +Comments may contain newlines. + +### Partials + +Partials begin with a greater than sign, like {{> box}}. + +Partials are rendered at runtime (as opposed to compile time), so recursive +partials are possible. Just avoid infinite loops. + +They also inherit the calling context. Whereas in ERB you may have this: + + <%= partial :next_more, :start => start, :size => size %> + +Mustache requires only this: + + {{> next_more}} + +Why? Because the `next_more.mustache` file will inherit the `size` and `start` +variables from the calling context. In this way you may want to think of +partials as includes, or template expansion, even though it's not literally true. + +For example, this template and partial: + + base.mustache: +

Names

+ {{#names}} + {{> user}} + {{/names}} + + user.mustache: + {{name}} + +Can be thought of as a single, expanded template: + +

Names

+ {{#names}} + {{name}} + {{/names}} + +In mustache.js an object of partials may be passed as the third argument to +`Mustache.render`. The object should be keyed by the name of the partial, and +its value should be the partial text. + +### Set Delimiter + +Set Delimiter tags start with an equals sign and change the tag delimiters from +`{{` and `}}` to custom strings. + +Consider the following contrived example: + + * {{ default_tags }} + {{=<% %>=}} + * <% erb_style_tags %> + <%={{ }}=%> + * {{ default_tags_again }} + +Here we have a list with three items. The first item uses the default tag style, +the second uses ERB style as defined by the Set Delimiter tag, and the third +returns to the default style after yet another Set Delimiter declaration. + +According to [ctemplates](http://google-ctemplate.googlecode.com/svn/trunk/doc/howto.html), +this "is useful for languages like TeX, where double-braces may occur in the +text and are awkward to use for markup." + +Custom delimiters may not contain whitespace or the equals sign. + +## Streaming + +To stream template results out of mustache.js, you can pass an optional callback +to the call to `Mustache.render`: + + Mustache.render(template, view, partials, function (chunk) { + print(chunk); + }); + +When the template is finished rendering, the callback will be called with `null` +after which it won't be called anymore for that rendering. + +## Plugins for JavaScript Libraries + +By default mustache.js may be used in a browser or any [CommonJS](http://www.commonjs.org/) +environment, including [node](http://nodejs.org/). Additionally, mustache.js may +be built specifically for several different client libraries and platforms, +including the following: + + - [jQuery](http://jquery.com/) + - [MooTools](http://mootools.net/) + - [Dojo](http://www.dojotoolkit.org/) + - [YUI](http://developer.yahoo.com/yui/) + - [RequireJS](http://requirejs.org/) + - [qooxdoo](http://qooxdoo.org/) + +These may be built using [Rake](http://rake.rubyforge.org/) and one of the +following commands: + + $ rake jquery + $ rake mootools + $ rake dojo + $ rake yui + $ rake requirejs + $ rake qooxdoo + +## Thanks + +Mustache.js wouldn't kick ass if it weren't for these fine souls: + + * Chris Wanstrath / defunkt + * Alexander Lang / langalex + * Sebastian Cohnen / tisba + * J Chris Anderson / jchris + * Tom Robinson / tlrobinson + * Aaron Quint / quirkey + * Douglas Crockford + * Nikita Vasilyev / NV + * Elise Wood / glytch + * Damien Mathieu / dmathieu + * Jakub Kuźma / qoobaa + * Will Leinweber / will + * dpree + * Jason Smith / jhs + * Aaron Gibralter / agibralter + * Ross Boucher / boucher + * Matt Sanford / mzsanford + * Ben Cherry / bcherry + * Michael Jackson / mjijackson diff --git a/0.5.49/index.html b/0.5.49/index.html new file mode 100644 index 0000000..493eb0f --- /dev/null +++ b/0.5.49/index.html @@ -0,0 +1,57 @@ + + + + + +Mustache.js 0.5.49 +

Mustache.js 0.5.49

+ +

Mustache.js 0.5.49 was released on Fri Feb 24 13:26:16 CET 2012. + +

+ +

Distributions

+ + +

Thanks!

+ +

Thanks to all contributors! — Love, Jan, Michael, Nathan. + +

} diff --git a/0.5.49/mustache-0.5.49.tar.gz b/0.5.49/mustache-0.5.49.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..343b16670530de036d7c1cb17b7d333792a0929c GIT binary patch literal 10883 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 Zxqt4T`{(|-fBqkM{x69CDA@p@005~7{`CL= literal 0 HcmV?d00001 diff --git a/0.5.49/mustache-0.5.49/LICENSE b/0.5.49/mustache-0.5.49/LICENSE new file mode 100644 index 0000000..395e263 --- /dev/null +++ b/0.5.49/mustache-0.5.49/LICENSE @@ -0,0 +1,23 @@ +The MIT License + +Copyright (c) 2009 Chris Wanstrath (Ruby) +Copyright (c) 2010 Jan Lehnardt (JavaScript) + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/0.5.49/mustache-0.5.49/README.md b/0.5.49/mustache-0.5.49/README.md new file mode 100644 index 0000000..32f98f6 --- /dev/null +++ b/0.5.49/mustache-0.5.49/README.md @@ -0,0 +1,418 @@ +# mustache.js - Logic-less {{mustache}} templates with JavaScript + +> What could be more logical awesome than no logic at all? + +[mustache.js](http://github.com/janl/mustache.js) is an implementation of the +[Mustache](http://mustache.github.com/) template system in JavaScript. + +[Mustache](http://mustache.github.com/) is a logic-less template syntax. It can +be used for HTML, config files, source code - anything. It works by expanding +tags in a template using values provided in a hash or object. + +We call it "logic-less" because there are no if statements, else clauses, or for +loops. Instead there are only tags. Some tags are replaced with a value, some +nothing, and others a series of values. + +For a language-agnostic overview of Mustache's template syntax, see the +`mustache(5)` [manpage](http://mustache.github.com/mustache.5.html). + +## Where to use mustache.js? + +You can use mustache.js to render templates in many various scenarios where you +can use JavaScript. For example, you can render templates in a browser, +server-side using [node](http://nodejs.org/), in [CouchDB](http://couchdb.apache.org/) +views, or in almost any other environment where you can use JavaScript. + +## Who uses mustache.js? + +An updated list of mustache.js users is kept [on the Github wiki](http://wiki.github.com/janl/mustache.js/beard-competition). +Add yourself or your company if you use mustache.js! + +## Usage + +Below is quick example how to use mustache.js: + + var view = { + title: "Joe", + calc: function () { + return 2 + 4; + } + }; + + var output = Mustache.render("{{title}} spends {{calc}}", view); + +In this example, the `Mustache.render` function takes two parameters: 1) the +[mustache](http://mustache.github.com/) template and 2) a `view` object that +contains the data and code needed to render the template. + +### CommonJS + +mustache.js is usable without any modification in both browsers and [CommonJS](http://www.commonjs.org/) +environments like [node.js](http://nodejs.org/). To use it as a CommonJS module, +simply require the file, like this: + + var Mustache = require("mustache"); + +## Templates + +A [mustache](http://mustache.github.com/) template is a string that contains +any number of mustache tags. Tags are indicated by the double mustaches that +surround them. `{{person}}` is a tag, as is `{{#person}}`. In both examples we +refer to `person` as the tag's key. + +There are several types of tags available in mustache.js. + +### Variables + +The most basic tag type is a simple variable. A `{{name}}` tag renders the value +of the `name` key in the current context. If there is no such key, nothing is +rendered. + +All variables are HTML-escaped by default. If you want to render unescaped HTML, +use the triple mustache: `{{{name}}}`. You can also use `&` to unescape a +variable. + +Template: + + * {{name}} + * {{age}} + * {{company}} + * {{{company}}} + * {{&company}} + +View: + + { + "name": "Chris", + "company": "GitHub" + } + +Output: + + * Chris + * + * <b>GitHub</b> + * GitHub + * GitHub + +JavaScript's dot notation may be used to access keys that are properties of +objects in a view. + +Template: + + * {{name.first}} {{name.last}} + * {{age}} + +View: + + { + "name": { + "first": "Michael", + "last": "Jackson" + }, + "age": "RIP" + } + +Output: + + * Michael Jackson + * RIP + +### Sections + +Sections render blocks of text one or more times, depending on the value of the +key in the current context. + +A section begins with a pound and ends with a slash. That is, `{{#person}}` +begins a `person` section, while `{{/person}}` ends it. The text between the two +tags is referred to as that section's "block". + +The behavior of the section is determined by the value of the key. + +#### False Values or Empty Lists + +If the `person` key exists and has a value of `null`, `undefined`, or `false`, +or is an empty list, the block will not be rendered. + +Template: + + Shown. + {{#nothin}} + Never shown! + {{/nothin}} + +View: + + { + "person": true + } + +Output: + + Shown. + +#### Non-Empty Lists + +If the `person` key exists and is not `null`, `undefined`, or `false`, and is +not an empty list the block will be rendered one or more times. + +When the value is a list, the block is rendered once for each item in the list. +The context of the block is set to the current item in the list for each +iteration. In this way we can loop over collections. + +Template: + + {{#stooges}} + {{name}} + {{/stooges}} + +View: + + { + "stooges": [ + { "name": "Moe" }, + { "name": "Larry" }, + { "name": "Curly" } + ] + } + +Output: + + Moe + Larry + Curly + +When looping over an array of strings, a `.` can be used to refer to the current +item in the list. + +Template: + + {{#musketeers}} + * {{.}} + {{/musketeers}} + +View: + + { + "musketeers": ["Athos", "Aramis", "Porthos", "D'Artagnan"] + } + +Output: + + * Athos + * Aramis + * Porthos + * D'Artagnan + +If the value of a section variable is a function, it will be called in the +context of the current item in the list on each iteration. + +Template: + + {{#beatles}} + * {{name}} + {{/beatles}} + +View: + + { + "beatles": [ + { "firstName": "John", "lastName": "Lennon" }, + { "firstName": "Paul", "lastName": "McCartney" }, + { "firstName": "George", "lastName": "Harrison" }, + { "firstName": "Ringo", "lastName": "Starr" } + ], + "name": function () { + return this.firstName + " " + this.lastName; + } + } + +Output: + + * John Lennon + * Paul McCartney + * George Harrison + * Ringo Starr + +#### Functions + +If the value of a section key is a function, it is called with the section's +literal block of text, un-rendered, as its first argument. The second argument +is a special rendering function that uses the current view as its view argument. +It is called in the context of the current view object. + +Template: + + {{#bold}}Hi {{name}}.{{/bold}} + +View: + + { + "name": "Tater", + "bold": function () { + return function (text, render) { + return "" + render(text) + ""; + } + } + } + +Output: + + Hi Tater. + +### Inverted Sections + +An inverted section opens with `{{^section}}` instead of `{{#section}}`. The +block of an inverted section is rendered only if the value of that section's tag +is `null`, `undefined`, `false`, or an empty list. + +Template: + + {{#repos}}{{name}}{{/repos}} + {{^repos}}No repos :({{/repos}} + +View: + + { + "repos": [] + } + +Output: + + No repos :( + +### Comments + +Comments begin with a bang and are ignored. The following template: + +

Today{{! ignore me }}.

+ +Will render as follows: + +

Today.

+ +Comments may contain newlines. + +### Partials + +Partials begin with a greater than sign, like {{> box}}. + +Partials are rendered at runtime (as opposed to compile time), so recursive +partials are possible. Just avoid infinite loops. + +They also inherit the calling context. Whereas in ERB you may have this: + + <%= partial :next_more, :start => start, :size => size %> + +Mustache requires only this: + + {{> next_more}} + +Why? Because the `next_more.mustache` file will inherit the `size` and `start` +variables from the calling context. In this way you may want to think of +partials as includes, or template expansion, even though it's not literally true. + +For example, this template and partial: + + base.mustache: +

Names

+ {{#names}} + {{> user}} + {{/names}} + + user.mustache: + {{name}} + +Can be thought of as a single, expanded template: + +

Names

+ {{#names}} + {{name}} + {{/names}} + +In mustache.js an object of partials may be passed as the third argument to +`Mustache.render`. The object should be keyed by the name of the partial, and +its value should be the partial text. + +### Set Delimiter + +Set Delimiter tags start with an equals sign and change the tag delimiters from +`{{` and `}}` to custom strings. + +Consider the following contrived example: + + * {{ default_tags }} + {{=<% %>=}} + * <% erb_style_tags %> + <%={{ }}=%> + * {{ default_tags_again }} + +Here we have a list with three items. The first item uses the default tag style, +the second uses ERB style as defined by the Set Delimiter tag, and the third +returns to the default style after yet another Set Delimiter declaration. + +According to [ctemplates](http://google-ctemplate.googlecode.com/svn/trunk/doc/howto.html), +this "is useful for languages like TeX, where double-braces may occur in the +text and are awkward to use for markup." + +Custom delimiters may not contain whitespace or the equals sign. + +## Streaming + +To stream template results out of mustache.js, you can pass an optional callback +to the call to `Mustache.render`: + + Mustache.render(template, view, partials, function (chunk) { + print(chunk); + }); + +When the template is finished rendering, the callback will be called with `null` +after which it won't be called anymore for that rendering. + +## Plugins for JavaScript Libraries + +By default mustache.js may be used in a browser or any [CommonJS](http://www.commonjs.org/) +environment, including [node](http://nodejs.org/). Additionally, mustache.js may +be built specifically for several different client libraries and platforms, +including the following: + + - [jQuery](http://jquery.com/) + - [MooTools](http://mootools.net/) + - [Dojo](http://www.dojotoolkit.org/) + - [YUI](http://developer.yahoo.com/yui/) + - [RequireJS](http://requirejs.org/) + - [qooxdoo](http://qooxdoo.org/) + +These may be built using [Rake](http://rake.rubyforge.org/) and one of the +following commands: + + $ rake jquery + $ rake mootools + $ rake dojo + $ rake yui + $ rake requirejs + $ rake qooxdoo + +## Thanks + +Mustache.js wouldn't kick ass if it weren't for these fine souls: + + * Chris Wanstrath / defunkt + * Alexander Lang / langalex + * Sebastian Cohnen / tisba + * J Chris Anderson / jchris + * Tom Robinson / tlrobinson + * Aaron Quint / quirkey + * Douglas Crockford + * Nikita Vasilyev / NV + * Elise Wood / glytch + * Damien Mathieu / dmathieu + * Jakub Kuźma / qoobaa + * Will Leinweber / will + * dpree + * Jason Smith / jhs + * Aaron Gibralter / agibralter + * Ross Boucher / boucher + * Matt Sanford / mzsanford + * Ben Cherry / bcherry + * Michael Jackson / mjijackson diff --git a/0.5.49/mustache-0.5.49/mustache-0.5.49.tar.gz b/0.5.49/mustache-0.5.49/mustache-0.5.49.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..343b16670530de036d7c1cb17b7d333792a0929c GIT binary patch literal 10883 zcmV-}Dty%+iwFSffk#gO1MPk7cH6eH=>E;8fZ1JJifGx+N4vHaB};Lf#66CkW4q1i za@?9CA&Is`DkNpcb#$KPJjeZc*Sha@X9fchq-Z;7ySwi_$6ReJ;$r{|2J?X#fRkC4 z`@u-AuD74GAOB9e+peW^W$5~L9xN$mV6$E`TPILGpWq~?#|Zs-r@G2+6Lg`yT^}jod1U# zPc|y^|M=14M}HIRe`+soc>aga|ItW_w>w8-Hwt8&NyphrrdMe+9Oa@BG{wX9^?!)1 zQ5t39y&q?J>gOZTIGFXXnhPa2*2NEgEOzB6_R|njfABB-!yt{OdDC&;$#fEBS(L;A zfQ@7-`&VL^`f)BpPYhBiMKTb<$WMpT6L}*1_)1J=nn8u6pZif9#Y4vz0kn!G^AUi_ zl0kmyrxFT>!q2iKhiZgf_~Fji{4QgXvLW#LUTqDwR<^ACgqU;iUzYZ zh9+f5!%YBX)Z&>8a)g4#2g!JxT*A$wU zVp=&X8~M=rzH}7EpkctTZ;dC#_F*~2c?8IxCMh*o9cLRm@Mc>a?!P*E-#geAJBQ-k z!TwJ>FSlO`w|5Bdt|#8_9KG59@kl_4gWlfJ&tm_T=rq+uhlI>4}}at=%7A?(Dr5FQDGuK9K$nEC2v{v@fth2DP&d^ir14KcN0??Z5l^VCVIlBk^W`_vJPuzSwqlcX}^&w^dUx zsIA@J&Rb8s?7i*1-lkgn0OdenG49>_H`|m1?e*Zlt)rd&JqK{IwZC_C0Iwd5^5Do+ zeZO$x9E1f)Y6c{Q!E0$Q1D4e1Re~ z8|S9mH`Z)YZ-s~kW?m7L=;EyEhFuL=P-a5`Z+0kcF60>Sstcqt2la*9=MwPmoZ7*j z{hB9-ph$u0(iQup)U>B*k|)@DTjzCj;VA2+sec7!>2I6gO+Mgt8<1}D3s9V6N&?&o z6jSi+CL!H)&H|4Z(ar1e7rpt_Dp|rnQKXo*q<_||BFLbj9e}2#iV)I|6Q$`9m=l*# zNbTreT0^5=^1E)Mz)7hKpx{DFNQ6KxpxMdAK58GFEPeprG^kq{&kO#PE*M9ks zJ^1??O~2`Pl)WECz%j8@BcnOetuvk&KpP6>xRG_@V(Y5f(Tq!!KIk719;) z4D|5l!ga-_qG29&(Q4gv=uYg)LGID71GELK#a-E9`#&~+I{t+kGoL7*@P zGXB0+%LRb_?QDbXBC~iU7ZX1R(uk9IwVz7=97jg&vQYW}{3{>%@p&fB{(UCXt9D&4 zjz47B%aa@WVzNz-oIj3nLvm`V>bf8lfSCf`3KY9;IhFcF$#n}@W`RGIZ~ZCsO!dQE zb~oW4e=_a3o=SO2DZoT^!ZS)3nuHa1WmBvyf1D+GXNAkGxR~_KqknW(4A(VdSIxdT zdb?Xs*EfuEZMpG$>BD8K)BJq=^qISIvNrT=gf8IH4DUEQLE)b<4vIyx_TT{~JrKPR z#334yr&>atdg62ps>G=>n@@2o;8Xy=2D>#!YZQ!PtT2o&fMdusO;QDl`6lfvjC0Tw zsMrKlB7Z2c7QncOLP$zLAcMs}n2kj!`?KK?XFiI7BTZ;?fanht9}9IMkri@$8vEcIOgBH=$Zly0o^D11lU_=s>#)ZJWBw#YJy-%dquqyD~mCw*T5pJ?g_q~1YMw0w%{@2TF~QfYd=PEjE~Kdqt6F+iP78(7y9RLTQt9r&Pr{e*28-36Gw z(yvj=XuCBW5b7S&zdWlzZX0EcBN-qNq+k52X}7KU91*ymwLpmW;XnY%m}j)O9=MwE<~048S((s_JtW6R=>|@+DG9;y{A^nn4-0cV57v%2|b>oy)5>7{ETvDk*motz6n;X0W)& zY>F1Zw8khuMH#O5ObozCMfE-(}wQSwWX z>BK!3FomRC;e#G3QbU+iP=?(QZjQk?2gsrtVFU_>e?=ZC4a|B-``0Rd)-0N%tw4Nw zF$@m(W1u-0YD}mK#tF<3l_{GZXcc5_@lx^ktfoaaJ`A(d`=Ye@ShP>(0+v4nfqI&! zGk^_M$H|bY_ml9-=zcPmDY-z4nMyQ^t+Wm@F-yj>Xot+`#dfBt%w&2YQCVRdUm;Z4 z9!LoyfhN++D7&E@bl(E6A723pU0=iK=JNtE*v2U_*3(6Wl=fGxrN+dfR|3D{UJw7$ z+rxT+^FA(Tt8HBboEUhQv4#YGg-*ZvL56GGyXr+aQrB*fCrnRHPE)2K} zmwr|rOQd!Q%nDF+u5jBfaE*O2BQsK_;ONNY8H1opEEzoDizZ$IY6~PbAGk3^jb*(b zhevi58s@4P30F^SSTcXEMOS&_P1q!|U=Nh%TW2p!ppr^9*(tqHn@~u6vuOycdzZ}Q z7*xc4wGP$G7O%V#i2O*cYis9-)`hj}s0!fzna*Pa6So@I%;>H5igj;iZr!=^t0QC~ z_D;D)ZtW$_59vq-=PRz>fWyZ^O;JLziK&6F9Wcl4ifEOF46iHhi471cBdu{2=t()x z)-71k;iBFR>XcWwf6Acd<<|vXBt&x&cgTX-s;NQTqDfP1BUC24W81C8UWIF~k9?FS zm%JSp%S*A1DnP^4?NcqZUg9K2YlF-MiX5u!+vx>L`*#Zq#U^+)*VhPnQz$D-kEk%6 z=0)fK2z_V=DAEM|ZdK}XIjutC=2?j~RVjm&%3I4U8kxVB3U(M9H&a6~l@`?)Nz>k8sBB7b#>XqOClP*|uZOI_3C-DJFC zlW|xf1CnF01Pl{I8LoUaSzElkI)1j_zLbWUaLP7IHGf{^E=_2{A|VTL+?VzuudqAg z+QeA1ouYPA%w~!rC%3>uRaX99$R(hQIIFCg8j40Y`nxfz*#8VkQ#8(dL-jI-2ZcVW z-?QLx4BO=C3IEBXu>4kEIH2D*BCW)OtzVe?w>d$KaeTWMgmyxVw}%wF$Roc9TQ5cr zM0v+)_6mrw=jF16CK!}_Nf@V@B6wR_EHDgZ0UbQh6?SwW@;WO;@v?r!?Uu7G4J$Cp zo-Sb2Ok9B0mUng;p(7Y$k8N*0EJ=6C-9()oY=7K`u(aW*)#_NUmf*v!K0B+jU#{SG z8ScoBhmwY}R#^Y&$Qic5GUz`2R($)cJD=aua4}#2iax1@VV8Qx`tF?_e5N|6H&IwI z`yvFCb=Esu`bM>+Tye~Azo;EcQs3FgFLooF^8V)>3HDkHJ%Hnq@d2WdpjEhA)yhC(8< z^qTg+yg`-=wcaZVfFQTE;aU+o(e?)ojWS@4&5El`2c@lUl&$3(6e*kt5)yiUsL-Im zFraoq-u)b3eX%07Fb>|?Szy2zMiG@9>UtbTg(%zndP}&Xv6dQy$$1O&NIP@Hwu59A z=Omgy+k!+@xn1gEZ2KfiBck+|_2o;OKL}Q>&2g#=r zM$b9zaWX8M!zQ_b-K(0n7VIeqqWng`t5EqBAU3V&34j8N4#^*p2K!gyl%wX!^Q665 zKmn}$_iALqF30CUdgQIH!Glm zr}`%MRZ(ydlW4jWuei4j?1v{9kDAIT{@(`%bTvt4SuwQB)SqTIx&E?5T%st5MVM$n z+B*v~FVlcxX280D<(nlFY4o&A#Y=*r6OJXVY+4VQh9YB97bx^XX#w(+3}!jSK5{U{ z!fs*Zuz(>Qonmcdm)v;TgTnp-1as0+2A+yNqAXpOd|-wsbtmG+!XXD0EWwsUAvYsT3zqjBl#cMs?k8DWErm5&%O;Y8UT}WP+)qV4X5@PTOK97JjIX zqG~U>cJTT^Ag8(F7RF&t>x|KK62I4^--=1ZP z7grS}J$0Z-asWmlM(F@I=yV7NPr_-Epi|kv`k^%hk>zsAN6SYTDXjJt{9J)EQ?JKa z!#VCc8&*CYP{nhzDjgWz^JYUYa!C4DpO*aZ_uP2?cM`>a)*0a2&;M?0JbYX||NGs; z?;qcv|NSeTwFgV$C&kY4_U9Jdq~UvgFYvuAvMp+9)kLz{)ieeVD2#tC66 z?E2P;5D)rb3INu^V|n5Yy^$Anbw%&YJMWM+(ukVZ=ZI)Nm;tEk(gp33I+ zs5?3i`7{OeY1HjfkiObx;$V$YbBnm(S^*ADS^Us6LVS%%c1w|?P0Ys0wgvloMIV5ay&p&^LAKj&m z&z~WwxxB1t0utAovegY5%{klk4J^?dHby1N?yE8TfNv`8^_4S!-t6dli)d)}HKr=H z>gp7G2Q(g-K6~b2f@&7pC5$#|&N~2|&l5);Hgnd573QiD!2~r_>rGA3vcO{6Ai4{> z0r3n)Ujc=G!U|Slpg>_5@`4+c9A0UX0C5y^mh%WhFF*-7{owcKDn3 zQH?e&k9O|mrJ6$yLck$Uz1srMTG&KO1)I6m7&F4o9||oa2=fKpHs{{V>Tt12us66o zB(fQ|sm$}_YofgR-fv#OhI(wrZAs6BY=v`JwRI>mu~#kGTCwQm##k%HP+f=>4ccrh zm8ftL8yBVNn*mCe)*<<_l&r}AjFx#fW{fX&*O!;$gp2Hm%_|+Offy~Z*rmN+4>Nh%dW~ct5Q!nh)HJy5Cr(V08 z(Bd3gRPW2G6tLlSDEf(uYWEZ;U(FGf+kgq}BprBL#H6+XVXGT;t4q0_iHY3ev8gVt zR|eat*lu~-&CZMEzqaJCw*_I1uDHGgkFf&3!>5%Lhd;i9}opd^)D zMHTzX@&`S)eM4`Wo3IN&izzULRqqqx0(-&2BFW|SrboUaIjRT-NLlElX zC|kuU86&!zokGb6MZr??%?$=2P`H|re)qKOb}h z;LkONL|<7CK1!(SAyfe~So3&Pu&*q`)Zc06lIavZU8L*%_QN#V;|K&EHH_p52svQtX z>SmqhCZ!b@-(Ze)&rP%5^0L}o+$JFf!n}>~ZB8<7(!EBJsIQ>G+h_Rl8I;I;?F@+`+n$GJa^pxy#Dy%!|MHy z-#xs)|M@R@&?)1hJi+UrG%-+cjLQNAGZb;Cvbo7L_=sBxUMt*ALe7KuK$DW z-pjY!?Me72wsHIVfB5*(!zb1I-@ki!@BjHro^SrJkH>i?-lNkyNM_>@_s{4?v@yc* z$HKpq6j+2;@`25y(lPcA)R*Uub8NMK(ztuoH~He02zn!n8{U;e+&R`7g8^l#S}>c1 z<2<{{;5TmJ7XxZLUkr!t9vT-Iv*1F{KDEV8j?q_6pKgc?DP&DW7=dXuh=%HBdQS&_ z(^2$Q^zi2+RBW+2Ft_szLtW&jsUOq*^K`J8y!WO(6;nX>NM!nEI(6?l9-kTEg*Qsq zg~7d-=8`10=(`Iu7x)-pz$fkDf0(XlU;V8%@|4A}u(`k_^y z4#LxEX>mw2fE~vS))+%YOTNCD3kk&myBY`Y6^H6Gic?7WE_^je7{@DU9tSKoXjW;uabj>&BaK1eZj0vFvtT#@i5dc3uKHxVdYT+SINxLuq>(- zh!6S6$AzJyJ+M$6bYJwr%ms{k4&CdKu4Z_Vp`xMV7>Lje9$(I~c9IUkKES%iTgfaK zy?kLx1o$5I+y0csL?sLocU{-LZG_y$P55q+P83=wLaLxAq79loC4Bdx_e=W zod#2SJiuY%Z*>ndj51O|JC(U!qS5?_-ciSSA;-xjcJJdX3eNSki4i0&($A)Kg&op$ zw+IW5^05R3=7&U@cxG7J!Dj6Z6J}HWp=gQ63$cf$5x$tDTSV8fv&Ox?rWQdQWK&2& z5rNIk=dOzO!Fbi3SbZ46kRn}*Qvr2q1x)$p7(IBIpf3sZP`sUEQ*1O9L!W#lLr13Z zun8p20aa|_QzR4LL!-j7fOLFyeGf8S46srmR&|#Z;mm!5k&crj{^8JZY(k5W)+n~o zM5_Y{&}TnD{;5a=jClq=$Ez-*W{)+vf)Fn+aWs&qSDa(5lnluHT&m@1%SwBNw#AVm z9=wtSxu$M|Ln&arquj*H*nsX*X|7E26mXn3i`cAN+POlb(6Di;0VzkCvA~KHUp-qS zKRNC(S2~26A_tMEF1N8)HVcy@El23C8lPi9X;zaNPK7S7E+=xbS(+v@71}mwi_`0C z_0g31{8V)z$3tR1O(tZ1V{$1DmFAAA8F;XCQiMJMI{R=-D6Wt)cF9?c>?I#_FO^^g}(7vC6c!SymijhZ(kO|vviyn>u z?KvDAmbGIMNp?CMJ;)b?LU(VvERio-RNs*SWgr7qkL5kVLK@N?eFGnKya!r^2_UDj zqq4KA&j7+4@lL%7Y`pa2+*)Nlt0wpt%I)Kq1BU88r-FM+L1a|)3Q1o+x7oMY=Ue^5B~>-liyK5GMSJ7oaZ8!fnVb1e;5s z5Q}f4VC2iOTO8PT5iVx^;0NchTwN{r%p^cdn18VI?k2P|RKXxP6)LFJ$_@)ytooOx z=>9l?8no)w&6g6@1+tJZdOO40by1Y!Vqzu5zWUO+WpyIQ)z@$I<#n%e9Nr0ogO*in-(E2jJlu~sSq&ZtDhzQ`8 zDbo*=4TA=1a|uDNVweD9ToFoh@r`&zS9JcQY$1TP zO?Q0mf|3aH!&k?eK_Y(XdeDr|yJXrNLCB}L^^I4E8xPqjX|;Sfz;kLY5>*Nh4NJxH zb5x1NCoAjW5Y#?C)&^6eSSzoCJ&K^nu)q=*SThA`mxdY`kTb?M)KW7yr;xRm#H(L} zph!7B??MchMPsgvohowdD_j>A2O6s*X|D=pa96M#Wj2gJeI7;P_ah=U?y;=8HmiC$|}00y)JIjOqdU1*K>5|||)w?dPc3{hxoJZ7G-IP);wS)L?A zneluBW7g8huxps|qEPLeb2e^)8m@O;h@7`z9TeQIl(p-p>D5h{TeEbGnVff0OHI&Y zfNweruLRRhAUI0W&~zelh~FW8eCtY0r3vEEGjZBJB}7`n$EaP_1UZW{T!UlK8_t1! z07YBkrOm$qy`}tG3>PJ6pScH`KJ6v5Hpw`g&)-C5y|i(yP~zi@--8k z%4q`JuOixEvN?mx{lc$%DCyvr*lbv3YAJ#;k#W|G84FUegN0j3_>o`rOBoK@Lg@Rj zIOvNvX!6sw2BBJ5#TR1p^7x*PHl7_Np?`IKy~I@n@F<|>r)!V}65qN39M+TqlvQi% z(xzW%cU9ssE45n@#UtQJIiI2(kNG3KYWsy83O?D=+XpYy2~NNZov^j`>YjdU;_$^LUUKs* zs?eU;=B+~!+gq>`gH0P`$g7i;tC#Y1zRIQ?;N2mgp1yq26Nn7xggALBYDs= zl0))>%nH0U3)uXMGHO`(;P}CIVh@wGjU8p>eP(Wv5ryBgFbLRW@_zUXg>wef{ZK3O z-_QqK%;j*1UvyR!`jXD4cg(6n1vNQ|hZZ;C1Xw;wV^#wriR7zI!gz>7P%cF40sylN z@9yW#tya6eQ`*l&2FaW77(1#bi8q$;U_CB8-aj2hX(7Gw>(mQ=1I3OQAlSw1at2kS z*ch-s2%yiG;Dk9O(23s{HLXH|w^h`RPA*PQFG!rQ;3Z^LS5A_AWH>G^Ehc7e1Mtywgw4?k&%Yv0hNDA1yB<(56nK{QP;9KktC zkZ$3vV2|p9tr@x!E1ucHHO-f5@Z|-t{PejRN89*x2SKvvJY<@$x+ib`o^7H31|ygW z>*g5>Tvv&F9RxbI%&wE|sX`f^jbvCD5}xTMo#?6<+e(8a{n1f02WTa0T3jahS)!t- zkGJ~pcYUo3Brpbqko|5vqup7|FE;DNZUn@DaS@L5!uVE7%-7z(w>|$#bG`a%FQmt! z_4Y`CHhzdPQnNa~@~S<;aG3rq!Uc(@8Tv_4=;GkCuPlu4C?lSQn)V>@z`bezdDuKnGQ*LhzLX<3%U9^1Gi23@ENV$g+R61ZFG1yI`7#PAD zsQ+2tr_3K1bdQ{?31*%J?3;Taj)1)$Bz;)2l#`EBeo@W(u$sib&+s<2HH-jB)mO_N zh?k(ZjX~aRrC`azutG}Ri-630@spoL<12Xqb@qOujO{UgZsdKEgpf8IU**9_fdR%0 z{l!}ZB00lBPt;G8j!H_Kpc z9Mj<>B5aK7_-0Ctghfw4lA+gHCR3%Z$$LmxkwisP94mZ{&A z`2xnV1trrftQF8Nr^X|P70;qGcF+B*gDUTz`{(|-f9{|A=l;2W?w|YT{<(kdpZn+j Zxqt4T`{(|-fBqkM{x69CDA@p@005~7{`CL= literal 0 HcmV?d00001 diff --git a/0.5.49/mustache-0.5.49/mustache.js b/0.5.49/mustache-0.5.49/mustache.js new file mode 100644 index 0000000..99b365e --- /dev/null +++ b/0.5.49/mustache-0.5.49/mustache.js @@ -0,0 +1,536 @@ +/*! + * mustache.js - Logic-less {{mustache}} templates with JavaScript + * http://github.com/janl/mustache.js + */ +var Mustache = (typeof module !== "undefined" && module.exports) || {}; + +(function (exports) { + + exports.name = "mustache.js"; + exports.version = "0.5.14"; + exports.tags = ["{{", "}}"]; + exports.parse = parse; + exports.compile = compile; + exports.render = render; + exports.clearCache = clearCache; + + // This is here for backwards compatibility with 0.4.x. + exports.to_html = function (template, view, partials, send) { + var result = render(template, view, partials); + + if (typeof send === "function") { + send(result); + } else { + return result; + } + }; + + var _toString = Object.prototype.toString; + var _isArray = Array.isArray; + var _forEach = Array.prototype.forEach; + var _trim = String.prototype.trim; + + var isArray; + if (_isArray) { + isArray = _isArray; + } else { + isArray = function (obj) { + return _toString.call(obj) === "[object Array]"; + }; + } + + var forEach; + if (_forEach) { + forEach = function (obj, callback, scope) { + return _forEach.call(obj, callback, scope); + }; + } else { + forEach = function (obj, callback, scope) { + for (var i = 0, len = obj.length; i < len; ++i) { + callback.call(scope, obj[i], i, obj); + } + }; + } + + var spaceRe = /^\s*$/; + + function isWhitespace(string) { + return spaceRe.test(string); + } + + var trim; + if (_trim) { + trim = function (string) { + return string == null ? "" : _trim.call(string); + }; + } else { + var trimLeft, trimRight; + + if (isWhitespace("\xA0")) { + trimLeft = /^\s+/; + trimRight = /\s+$/; + } else { + // IE doesn't match non-breaking spaces with \s, thanks jQuery. + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; + } + + trim = function (string) { + return string == null ? "" : + String(string).replace(trimLeft, "").replace(trimRight, ""); + }; + } + + var escapeMap = { + "&": "&", + "<": "<", + ">": ">", + '"': '"', + "'": ''' + }; + + function escapeHTML(string) { + return String(string).replace(/&(?!\w+;)|[<>"']/g, function (s) { + return escapeMap[s] || s; + }); + } + + /** + * Adds the `template`, `line`, and `file` properties to the given error + * object and alters the message to provide more useful debugging information. + */ + function debug(e, template, line, file) { + file = file || "