From 31e805054c9683c0b4c2fae112885c59abd526dc Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Fri, 24 Feb 2012 13:25:15 +0100 Subject: [PATCH] Release 0.5.48 --- 0.5.48/LICENSE | 23 + 0.5.48/README.md | 418 +++++++++++ 0.5.48/index.html | 57 ++ 0.5.48/mustache-0.5.48.tar.gz | Bin 0 -> 10885 bytes 0.5.48/mustache-0.5.48/LICENSE | 23 + 0.5.48/mustache-0.5.48/README.md | 418 +++++++++++ 0.5.48/mustache-0.5.48/mustache-0.5.48.tar.gz | Bin 0 -> 10885 bytes 0.5.48/mustache-0.5.48/mustache.js | 536 ++++++++++++++ 0.5.48/mustache-0.5.48/mustache.min.js | 5 + 0.5.48/mustache-0.5.48/package.json | 8 + 0.5.48/mustache-dojo/LICENSE | 23 + 0.5.48/mustache-dojo/README.md | 418 +++++++++++ 0.5.48/mustache-dojo/dojo.mustache.js | 549 ++++++++++++++ 0.5.48/mustache-dojo/dojo.mustache.min.js | 6 + 0.5.48/mustache-dojo/mustache-dojo.tar.gz | Bin 0 -> 10869 bytes 0.5.48/mustache-jquery/LICENSE | 23 + 0.5.48/mustache-jquery/README.md | 418 +++++++++++ 0.5.48/mustache-jquery/jquery.mustache.js | 559 +++++++++++++++ 0.5.48/mustache-jquery/jquery.mustache.min.js | 6 + 0.5.48/mustache-jquery/mustache-jquery.tar.gz | Bin 0 -> 10948 bytes 0.5.48/mustache-mootools/LICENSE | 23 + 0.5.48/mustache-mootools/README.md | 418 +++++++++++ 0.5.48/mustache-mootools/mootools.mustache.js | 543 ++++++++++++++ .../mootools.mustache.min.js | 1 + .../mustache-mootools.tar.gz | Bin 0 -> 10815 bytes 0.5.48/mustache-qooxdoo/LICENSE | 23 + 0.5.48/mustache-qooxdoo/README.md | 418 +++++++++++ .../mustache-qooxdoo/mustache-qooxdoo.tar.gz | Bin 0 -> 12071 bytes 0.5.48/mustache-qooxdoo/qooxdoo.mustache.js | 671 ++++++++++++++++++ .../mustache-qooxdoo/qooxdoo.mustache.min.js | 74 ++ 0.5.48/mustache-requirejs/LICENSE | 23 + 0.5.48/mustache-requirejs/README.md | 418 +++++++++++ .../mustache-requirejs.tar.gz | Bin 0 -> 10771 bytes .../mustache-requirejs/requirejs.mustache.js | 545 ++++++++++++++ .../requirejs.mustache.min.js | 5 + 0.5.48/mustache-yui3/LICENSE | 23 + 0.5.48/mustache-yui3/README.md | 418 +++++++++++ 0.5.48/mustache-yui3/mustache-yui3.tar.gz | Bin 0 -> 10735 bytes 0.5.48/mustache-yui3/yui3.mustache.js | 541 ++++++++++++++ 0.5.48/mustache-yui3/yui3.mustache.min.js | 1 + 0.5.48/mustache.js | 536 ++++++++++++++ 0.5.48/mustache.min.js | 5 + 0.5.48/package.json | 8 + index.html | 1 + 44 files changed, 8185 insertions(+) create mode 100644 0.5.48/LICENSE create mode 100644 0.5.48/README.md create mode 100644 0.5.48/index.html create mode 100644 0.5.48/mustache-0.5.48.tar.gz create mode 100644 0.5.48/mustache-0.5.48/LICENSE create mode 100644 0.5.48/mustache-0.5.48/README.md create mode 100644 0.5.48/mustache-0.5.48/mustache-0.5.48.tar.gz create mode 100644 0.5.48/mustache-0.5.48/mustache.js create mode 100644 0.5.48/mustache-0.5.48/mustache.min.js create mode 100644 0.5.48/mustache-0.5.48/package.json create mode 100644 0.5.48/mustache-dojo/LICENSE create mode 100644 0.5.48/mustache-dojo/README.md create mode 100644 0.5.48/mustache-dojo/dojo.mustache.js create mode 100644 0.5.48/mustache-dojo/dojo.mustache.min.js create mode 100644 0.5.48/mustache-dojo/mustache-dojo.tar.gz create mode 100644 0.5.48/mustache-jquery/LICENSE create mode 100644 0.5.48/mustache-jquery/README.md create mode 100644 0.5.48/mustache-jquery/jquery.mustache.js create mode 100644 0.5.48/mustache-jquery/jquery.mustache.min.js create mode 100644 0.5.48/mustache-jquery/mustache-jquery.tar.gz create mode 100644 0.5.48/mustache-mootools/LICENSE create mode 100644 0.5.48/mustache-mootools/README.md create mode 100644 0.5.48/mustache-mootools/mootools.mustache.js create mode 100644 0.5.48/mustache-mootools/mootools.mustache.min.js create mode 100644 0.5.48/mustache-mootools/mustache-mootools.tar.gz create mode 100644 0.5.48/mustache-qooxdoo/LICENSE create mode 100644 0.5.48/mustache-qooxdoo/README.md create mode 100644 0.5.48/mustache-qooxdoo/mustache-qooxdoo.tar.gz create mode 100644 0.5.48/mustache-qooxdoo/qooxdoo.mustache.js create mode 100644 0.5.48/mustache-qooxdoo/qooxdoo.mustache.min.js create mode 100644 0.5.48/mustache-requirejs/LICENSE create mode 100644 0.5.48/mustache-requirejs/README.md create mode 100644 0.5.48/mustache-requirejs/mustache-requirejs.tar.gz create mode 100644 0.5.48/mustache-requirejs/requirejs.mustache.js create mode 100644 0.5.48/mustache-requirejs/requirejs.mustache.min.js create mode 100644 0.5.48/mustache-yui3/LICENSE create mode 100644 0.5.48/mustache-yui3/README.md create mode 100644 0.5.48/mustache-yui3/mustache-yui3.tar.gz create mode 100644 0.5.48/mustache-yui3/yui3.mustache.js create mode 100644 0.5.48/mustache-yui3/yui3.mustache.min.js create mode 100644 0.5.48/mustache.js create mode 100644 0.5.48/mustache.min.js create mode 100644 0.5.48/package.json diff --git a/0.5.48/LICENSE b/0.5.48/LICENSE new file mode 100644 index 0000000..395e263 --- /dev/null +++ b/0.5.48/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.48/README.md b/0.5.48/README.md new file mode 100644 index 0000000..32f98f6 --- /dev/null +++ b/0.5.48/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.48/index.html b/0.5.48/index.html new file mode 100644 index 0000000..67ce5be --- /dev/null +++ b/0.5.48/index.html @@ -0,0 +1,57 @@ + + + + + +Mustache.js 0.5.48 +

Mustache.js 0.5.48

+ +

Mustache.js 0.5.48 was released on Fri Feb 24 13:25:13 CET 2012. + +

+ +

Distributions

+ + +

Thanks!

+ +

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

} diff --git a/0.5.48/mustache-0.5.48.tar.gz b/0.5.48/mustache-0.5.48.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..07315c611faee8043564386486f26c11fbca35b1 GIT binary patch literal 10885 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 literal 0 HcmV?d00001 diff --git a/0.5.48/mustache-0.5.48/LICENSE b/0.5.48/mustache-0.5.48/LICENSE new file mode 100644 index 0000000..395e263 --- /dev/null +++ b/0.5.48/mustache-0.5.48/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.48/mustache-0.5.48/README.md b/0.5.48/mustache-0.5.48/README.md new file mode 100644 index 0000000..32f98f6 --- /dev/null +++ b/0.5.48/mustache-0.5.48/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.48/mustache-0.5.48/mustache-0.5.48.tar.gz b/0.5.48/mustache-0.5.48/mustache-0.5.48.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..07315c611faee8043564386486f26c11fbca35b1 GIT binary patch literal 10885 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 literal 0 HcmV?d00001 diff --git a/0.5.48/mustache-0.5.48/mustache.js b/0.5.48/mustache-0.5.48/mustache.js new file mode 100644 index 0000000..99b365e --- /dev/null +++ b/0.5.48/mustache-0.5.48/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 || "