From 02cc9d3d2c46a612f67be5728ca7b371e2ee0040 Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Fri, 24 Feb 2012 13:22:04 +0100 Subject: [PATCH] Release 0.5.47 --- 0.5.47/LICENSE | 23 + 0.5.47/README.md | 418 +++++++++++ 0.5.47/index.html | 33 + 0.5.47/mustache-0.5.47.tar.gz | Bin 0 -> 10883 bytes 0.5.47/mustache-0.5.47/LICENSE | 23 + 0.5.47/mustache-0.5.47/README.md | 418 +++++++++++ 0.5.47/mustache-0.5.47/mustache-0.5.47.tar.gz | Bin 0 -> 10883 bytes 0.5.47/mustache-0.5.47/mustache.js | 536 ++++++++++++++ 0.5.47/mustache-0.5.47/mustache.min.js | 5 + 0.5.47/mustache-0.5.47/package.json | 8 + 0.5.47/mustache-dojo/LICENSE | 23 + 0.5.47/mustache-dojo/README.md | 418 +++++++++++ 0.5.47/mustache-dojo/dojo.mustache.js | 549 ++++++++++++++ 0.5.47/mustache-dojo/dojo.mustache.min.js | 6 + 0.5.47/mustache-dojo/mustache-dojo.tar.gz | Bin 0 -> 10872 bytes 0.5.47/mustache-jquery/LICENSE | 23 + 0.5.47/mustache-jquery/README.md | 418 +++++++++++ 0.5.47/mustache-jquery/jquery.mustache.js | 559 +++++++++++++++ 0.5.47/mustache-jquery/jquery.mustache.min.js | 6 + 0.5.47/mustache-jquery/mustache-jquery.tar.gz | Bin 0 -> 10950 bytes 0.5.47/mustache-mootools/LICENSE | 23 + 0.5.47/mustache-mootools/README.md | 418 +++++++++++ 0.5.47/mustache-mootools/mootools.mustache.js | 543 ++++++++++++++ .../mootools.mustache.min.js | 1 + .../mustache-mootools.tar.gz | Bin 0 -> 10815 bytes 0.5.47/mustache-qooxdoo/LICENSE | 23 + 0.5.47/mustache-qooxdoo/README.md | 418 +++++++++++ .../mustache-qooxdoo/mustache-qooxdoo.tar.gz | Bin 0 -> 12067 bytes 0.5.47/mustache-qooxdoo/qooxdoo.mustache.js | 671 ++++++++++++++++++ .../mustache-qooxdoo/qooxdoo.mustache.min.js | 74 ++ 0.5.47/mustache-requirejs/LICENSE | 23 + 0.5.47/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.47/mustache-yui3/LICENSE | 23 + 0.5.47/mustache-yui3/README.md | 418 +++++++++++ 0.5.47/mustache-yui3/mustache-yui3.tar.gz | Bin 0 -> 10739 bytes 0.5.47/mustache-yui3/yui3.mustache.js | 541 ++++++++++++++ 0.5.47/mustache-yui3/yui3.mustache.min.js | 1 + 0.5.47/mustache.js | 536 ++++++++++++++ 0.5.47/mustache.min.js | 5 + 0.5.47/package.json | 8 + index.html | 1 + 44 files changed, 8161 insertions(+) create mode 100644 0.5.47/LICENSE create mode 100644 0.5.47/README.md create mode 100644 0.5.47/index.html create mode 100644 0.5.47/mustache-0.5.47.tar.gz create mode 100644 0.5.47/mustache-0.5.47/LICENSE create mode 100644 0.5.47/mustache-0.5.47/README.md create mode 100644 0.5.47/mustache-0.5.47/mustache-0.5.47.tar.gz create mode 100644 0.5.47/mustache-0.5.47/mustache.js create mode 100644 0.5.47/mustache-0.5.47/mustache.min.js create mode 100644 0.5.47/mustache-0.5.47/package.json create mode 100644 0.5.47/mustache-dojo/LICENSE create mode 100644 0.5.47/mustache-dojo/README.md create mode 100644 0.5.47/mustache-dojo/dojo.mustache.js create mode 100644 0.5.47/mustache-dojo/dojo.mustache.min.js create mode 100644 0.5.47/mustache-dojo/mustache-dojo.tar.gz create mode 100644 0.5.47/mustache-jquery/LICENSE create mode 100644 0.5.47/mustache-jquery/README.md create mode 100644 0.5.47/mustache-jquery/jquery.mustache.js create mode 100644 0.5.47/mustache-jquery/jquery.mustache.min.js create mode 100644 0.5.47/mustache-jquery/mustache-jquery.tar.gz create mode 100644 0.5.47/mustache-mootools/LICENSE create mode 100644 0.5.47/mustache-mootools/README.md create mode 100644 0.5.47/mustache-mootools/mootools.mustache.js create mode 100644 0.5.47/mustache-mootools/mootools.mustache.min.js create mode 100644 0.5.47/mustache-mootools/mustache-mootools.tar.gz create mode 100644 0.5.47/mustache-qooxdoo/LICENSE create mode 100644 0.5.47/mustache-qooxdoo/README.md create mode 100644 0.5.47/mustache-qooxdoo/mustache-qooxdoo.tar.gz create mode 100644 0.5.47/mustache-qooxdoo/qooxdoo.mustache.js create mode 100644 0.5.47/mustache-qooxdoo/qooxdoo.mustache.min.js create mode 100644 0.5.47/mustache-requirejs/LICENSE create mode 100644 0.5.47/mustache-requirejs/README.md create mode 100644 0.5.47/mustache-requirejs/mustache-requirejs.tar.gz create mode 100644 0.5.47/mustache-requirejs/requirejs.mustache.js create mode 100644 0.5.47/mustache-requirejs/requirejs.mustache.min.js create mode 100644 0.5.47/mustache-yui3/LICENSE create mode 100644 0.5.47/mustache-yui3/README.md create mode 100644 0.5.47/mustache-yui3/mustache-yui3.tar.gz create mode 100644 0.5.47/mustache-yui3/yui3.mustache.js create mode 100644 0.5.47/mustache-yui3/yui3.mustache.min.js create mode 100644 0.5.47/mustache.js create mode 100644 0.5.47/mustache.min.js create mode 100644 0.5.47/package.json diff --git a/0.5.47/LICENSE b/0.5.47/LICENSE new file mode 100644 index 0000000..395e263 --- /dev/null +++ b/0.5.47/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.47/README.md b/0.5.47/README.md new file mode 100644 index 0000000..32f98f6 --- /dev/null +++ b/0.5.47/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.47/index.html b/0.5.47/index.html new file mode 100644 index 0000000..c9eb0f3 --- /dev/null +++ b/0.5.47/index.html @@ -0,0 +1,33 @@ + + + + + +Mustache.js 0.5.47 +

Mustache.js 0.5.47

+ +

Mustache.js 0.5.47 was released on Fri Feb 24 13:22:02 CET 2012. + +

+ +

Distributions

+ + +

Thanks!

+ +

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

} diff --git a/0.5.47/mustache-0.5.47.tar.gz b/0.5.47/mustache-0.5.47.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..839f727302265c4d27aee82cb818a3448858aaf5 GIT binary patch literal 10883 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 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.47/mustache-0.5.47/mustache-0.5.47.tar.gz b/0.5.47/mustache-0.5.47/mustache-0.5.47.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..839f727302265c4d27aee82cb818a3448858aaf5 GIT binary patch literal 10883 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": ">", + '"': '"', + "'": ''' + }; + + 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 || "