Bläddra i källkod

Merge with trunk

tags/0.5.0-vsc
thegrandpoobah 16 år sedan
förälder
incheckning
1d6337de5c
16 ändrade filer med 87 tillägg och 77 borttagningar
  1. +2
    -0
      CHANGES.md
  2. +48
    -37
      README.md
  3. +0
    -1
      examples/array_of_partials_implicit_partial.html
  4. +1
    -2
      examples/array_of_strings.html
  5. +1
    -1
      examples/array_of_strings_options.html
  6. +1
    -3
      examples/array_partial.2.html
  7. +4
    -6
      examples/array_partial.txt
  8. +6
    -6
      examples/complex.html
  9. +5
    -5
      examples/complex.txt
  10. +1
    -1
      examples/partial_recursion.2.html
  11. +1
    -1
      examples/partial_recursion.html
  12. +2
    -2
      examples/recursion_with_same_names.txt
  13. +4
    -4
      examples/reuse_of_enumerables.txt
  14. +1
    -1
      examples/section_as_context.html
  15. +3
    -3
      examples/section_as_context.txt
  16. +7
    -4
      mustache.js

+ 2
- 0
CHANGES.md Visa fil

@@ -2,6 +2,8 @@

## 0.3.0 (??-??-????)

* Improved whitespace handling.
* Make IMPLICIT ITERATORS a first class feature.
* Fix Rhino compat.
* CommonJS packaging is no longer a special case.
* DRY Rakefile.


+ 48
- 37
README.md Visa fil

@@ -8,16 +8,15 @@ plugins, see <http://mustache.github.com/>.

## Where to Use?

You can use mustache.js rendering stuff in various scenarios. E.g. you can render
templates in your browser, or rendering server-side stuff with [node.js][node.js],
use it for rendering stuff in [CouchDB][couchdb]'s views.
You can use mustache.js rendering stuff in various scenarios. E.g. you can
render templates in your browser, or rendering server-side stuff with
[node.js][node.js], use it for rendering stuff in [CouchDB][couchdb]’s views.


## Who Uses Mustache?

An updated list is kept on the Github wiki. Add yourself, if you use
mustache.js:
<http://wiki.github.com/janl/mustache.js/beard-competition>
mustache.js: <http://wiki.github.com/janl/mustache.js/beard-competition>


## Usage
@@ -35,16 +34,16 @@ A quick example how to use mustache.js:

var html = Mustache.to_html(template, view);

`template` is a simple string with mustache tags and `view` is a JavaScript object containing the.
`template` is a simple string with mustache tags and `view` is a JavaScript
object containing the data and any code to render the template.


## Template Tag Types

There are several types of tags currently implemented in mustache.js.

For a language-agnostic overview of Mustache's template syntax, see
the `mustache(5)` manpage or
<http://mustache.github.com/mustache.5.html>.
For a language-agnostic overview of Mustache’s template syntax, see the
`mustache(5)` manpage or <http://mustache.github.com/mustache.5.html>.

### Simple Tags

@@ -57,10 +56,10 @@ Tags are always surrounded by mustaches like this `{{foobar}}`.

### Conditional Sections

Conditional sections begin with `{{#condition}}` and end with `{{/condition}}`. When
`condition` evaluates to true, the section is rendered, otherwise the hole block will
output nothing at all. `condition` may be a function returning true/false or a simple
boolean.
Conditional sections begin with `{{#condition}}` and end with
`{{/condition}}`. When `condition` evaluates to true, the section is rendered,
otherwise the hole block will output nothing at all. `condition` may be a
function returning true/false or a simple boolean.

var view = {condition: function() {
// [...your code goes here...]
@@ -76,8 +75,9 @@ boolean.

Enumerable Sections use the same syntax as condition sections do.
`{{#shopping_items}}` and `{{/shopping_items}}`. Actually the view decides how
mustache.js renders the section. If the view returns an array, it will iterator over
the items. Use `{{.}}` to access the current item inside the enumeration section.
mustache.js renders the section. If the view returns an array, it will
iterator over the items. Use `{{.}}` to access the current item inside the
enumeration section.

var view = {name: "Joe's shopping card",
items: ["bananas", "apples"]}
@@ -90,8 +90,8 @@ the items. Use `{{.}}` to access the current item inside the enumeration section

### Higher Order Sections

If a section key returns a function, it will be called and passed both the unrendered
block of text and a renderer convenience function.
If a section key returns a function, it will be called and passed both the
unrendered block of text and a renderer convenience function.

Given this JS:

@@ -110,8 +110,8 @@ We'll get this output:

<b>Hi Tater.</b>

As you can see, we're pre-processing the text in the block. This can be used to
implement caching, filters (like syntax highlighting), etc.
As you can see, were pre-processing the text in the block. This can be used
to implement caching, filters (like syntax highlighting), etc.

You can use `this.name` to access the attribute `name` from your view.

@@ -151,8 +151,8 @@ Here is the result:

### Inverted Sections

An inverted section opens with `{{^section}}` instead of `{{#section}}` and uses a
boolean negative to evaluate. Empty arrays are considered falsy.
An inverted section opens with `{{^section}}` instead of `{{#section}}` and
uses a boolean negative to evaluate. Empty arrays are considered falsy.

View:

@@ -172,8 +172,8 @@ Result:

### View Partials

mustache.js supports a quite powerful but yet simple view partial mechanism. Use the
following syntax for partials: `{{>partial_name}}`
mustache.js supports a quite powerful but yet simple view partial mechanism.
Use the following syntax for partials: `{{>partial_name}}`

var view = {
name: "Joe",
@@ -194,24 +194,25 @@ following syntax for partials: `{{>partial_name}}`
output will be:
Welcome, Joe! You just won $1000 (which is $600 after tax)

You invoke a partial with `{{>winnings}}`. Invoking the partial `winnings` will tell
mustache.js to look for a object in the context's property `winnings`. It will then
use that object as the context for the template found in `partials` for `winnings`.
You invoke a partial with `{{>winnings}}`. Invoking the partial `winnings`
will tell mustache.js to look for a object in the context's property
`winnings`. It will then use that object as the context for the template found
in `partials` for `winnings`.


## Escaping

mustache.js does escape all values when using the standard double mustache syntax.
Characters which will be escaped: `& \ " < >`. To disable escaping, simply use
tripple mustaches like `{{{unescaped_variable}}}`.
mustache.js does escape all values when using the standard double mustache
syntax. Characters which will be escaped: `& \ " < >`. To disable escaping,
simply use tripple mustaches like `{{{unescaped_variable}}}`.

Example: Using `{{variable}}` inside a template for `5 > 2` will result in `5 &gt; 2`, where as the usage of `{{{variable}}}` will result in `5 > 2`.


## Streaming

To stream template results out of mustache.js, you can pass an optional `send()`
callback to the `to_html()` call:
To stream template results out of mustache.js, you can pass an optional
`send()` callback to the `to_html()` call:

Mustache.to_html(template, view, partials, function(line) {
print(line);
@@ -220,7 +221,8 @@ callback to the `to_html()` call:

## Pragmas

Pragma tags let you alter the behaviour of mustache.js. They have the format of
Pragma tags let you alter the behaviour of mustache.js. They have the format
of

{{%PRAGMANAME}}

@@ -231,9 +233,9 @@ and they accept options:

### IMPLICIT-ITERATOR

When using a block to iterate over an enumerable (Array), mustache.js expects an
objects as enumerable items. The implicit iterator pragma enables optional behaviour
of allowing literals as enumerable items. Consider this view:
When using a block to iterate over an enumerable (Array), mustache.js expects
an objects as enumerable items. The implicit iterator pragma enables optional
behaviour of allowing literals as enumerable items. Consider this view:

var view = {
foo: [1, 2, 3, 4, 5, "french"]
@@ -246,14 +248,23 @@ The following template can iterate over the member `foo`:
{{.}}
{{/foo}}

If you don't like the dot in there, the pragma accepts an option to set your own
iteration marker:
If you don't like the dot in there, the pragma accepts an option to set your
own iteration marker:

{{%IMPLICIT-ITERATOR iterator=bob}}
{{#foo}}
{{bob}}
{{/foo}}

## FaQ

### Why doesn’t Mustache allow dot notation like `{{variable.member}}`?

The reason is given in the [mustache.rb
bugtracker](http://github.com/defunkt/mustache/issues/issue/6).

Mustache implementations strive to be template-compatible.


## More Examples and Documentation



+ 0
- 1
examples/array_of_partials_implicit_partial.html Visa fil

@@ -1,5 +1,4 @@
Here is some stuff!
{{%IMPLICIT-ITERATOR}}
{{#numbers}}
{{>partial}}
{{/numbers}}

+ 1
- 2
examples/array_of_strings.html Visa fil

@@ -1,2 +1 @@
{{%IMPLICIT-ITERATOR}}
{{#array_of_strings}} {{.}} {{/array_of_strings}}
{{#array_of_strings}}{{.}} {{/array_of_strings}}

+ 1
- 1
examples/array_of_strings_options.html Visa fil

@@ -1,2 +1,2 @@
{{%IMPLICIT-ITERATOR iterator=rob}}
{{#array_of_strings_options}} {{rob}} {{/array_of_strings_options}}
{{#array_of_strings_options}}{{rob}} {{/array_of_strings_options}}

+ 1
- 3
examples/array_partial.2.html Visa fil

@@ -1,6 +1,4 @@
Here's a non-sense array of values

{{%IMPLICIT-ITERATOR}}
{{#array}}
{{.}}
{{.}}
{{/array}}

+ 4
- 6
examples/array_partial.txt Visa fil

@@ -1,8 +1,6 @@
Here's a non-sense array of values


1
2
3
4
1
2
3
4


+ 6
- 6
examples/complex.html Visa fil

@@ -2,12 +2,12 @@
{{#list}}
<ul>
{{#item}}
{{#current}}
<li><strong>{{name}}</strong></li>
{{/current}}
{{#link}}
<li><a href="{{url}}">{{name}}</a></li>
{{/link}}
{{#current}}
<li><strong>{{name}}</strong></li>
{{/current}}
{{#link}}
<li><a href="{{url}}">{{name}}</a></li>
{{/link}}
{{/item}}
</ul>
{{/list}}


+ 5
- 5
examples/complex.txt Visa fil

@@ -1,6 +1,6 @@
<h1>Colors</h1>
<ul>
<li><strong>red</strong></li>
<li><a href="#Green">green</a></li>
<li><a href="#Blue">blue</a></li>
</ul>
<ul>
<li><strong>red</strong></li>
<li><a href="#Green">green</a></li>
<li><a href="#Blue">blue</a></li>
</ul>

+ 1
- 1
examples/partial_recursion.2.html Visa fil

@@ -1,4 +1,4 @@
{{name}}
{{#children}}
{{>partial}}
{{>partial}}
{{/children}}

+ 1
- 1
examples/partial_recursion.html Visa fil

@@ -1,4 +1,4 @@
{{name}}
{{#kids}}
{{>partial}}
{{>partial}}
{{/kids}}

+ 2
- 2
examples/recursion_with_same_names.txt Visa fil

@@ -1,6 +1,6 @@
name
desc
t1
t1
0
t2
t2
1

+ 4
- 4
examples/reuse_of_enumerables.txt Visa fil

@@ -1,8 +1,8 @@
t1
t1
0
t2
t2
1
t1
t1
0
t2
t2
1

+ 1
- 1
examples/section_as_context.html Visa fil

@@ -3,7 +3,7 @@
<p>{{description}}</p>
<ul>
{{#a_list}}
<li>{{label}}</li>
<li>{{label}}</li>
{{/a_list}}
</ul>
{{/a_object}}

+ 3
- 3
examples/section_as_context.txt Visa fil

@@ -1,6 +1,6 @@
<h1>this is an object</h1>
<h1>this is an object</h1>
<p>one of its attributes is a list</p>
<ul>
<li>listitem1</li>
<li>listitem2</li>
<li>listitem1</li>
<li>listitem2</li>
</ul>

+ 7
- 4
mustache.js Visa fil

@@ -85,7 +85,7 @@ var Mustache = function() {
*/
render_partial: function(name, context, partials) {
name = this.trim(name);
if(!partials || !partials[name]) {
if(!partials || partials[name] === undefined) {
throw({message: "unknown_partial '" + name + "'"});
}
if(typeof(context[name]) != "object") {
@@ -105,7 +105,7 @@ var Mustache = function() {
var that = this;
// CSW - Added "+?" so it finds the tighest bound, not the widest
var regex = new RegExp(this.otag + "(\\^|\\#)\\s*((.+?)(\\(.*\\))?)\\s*" + this.ctag +
"\\s*([\\s\\S]+?)" + this.otag + "\\/\\s*\\3\\s*" + this.ctag +
"\n*([\\s\\S]+?)" + this.otag + "\\/\\s*\\3\\s*" + this.ctag +
"\\s*", "mg");

// for each {{#foo}}{{/foo}} section do...
@@ -276,8 +276,11 @@ var Mustache = function() {
create_context: function(_context) {
if(this.is_object(_context)) {
return _context;
} else if(this.pragmas["IMPLICIT-ITERATOR"]) {
var iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator || ".";
} else {
var iterator = ".";
if(this.pragmas["IMPLICIT-ITERATOR"]) {
iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
}
var ctx = {};
ctx[iterator] = _context;
return ctx;


Laddar…
Avbryt
Spara