man/mustache.5.ron in mustache-0.9.2 vs man/mustache.5.ron in mustache-0.10.0

- old
+ new

@@ -39,28 +39,29 @@ values. This document explains the different types of Mustache tags. ## TAG TYPES -Tags are indicated by the double mustaches. `{{name}}` is a tag. Let's -talk about the different types of tags. +Tags are indicated by the double mustaches. `{{name}}` is a tag, as is +`{{#name}}`. Let's talk about the different types of tags. ### Variables The most basic tag is the variable. A `{{name}}` tag in a basic -template will try to call the `name` method on your view. If there is -no `name` method, an exception will be raised. +template will try to find the `name` key or method on your view. If +there is no `name` method, nothing will be rendered. All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: `{{{name}}}`. You can also use `&` to unescape a variable: `{{& name}}`. This may be useful when changing delimiters (see "Set Delimter" below). By default a variable "miss" returns an empty string. This can usually -be configured in your Mustache library. +be configured in your Mustache library. The Ruby version of Mustache +supports raising an exception in this situation, for instance. Template: * {{name}} * {{age}} @@ -79,72 +80,92 @@ * Chris * * &lt;b&gt;GitHub&lt;/b&gt; * <b>GitHub</b> -### Boolean Sections +### Sections + +Sections render blocks of text one or more times, depending on the +value of the referenced tag. + A section begins with a pound and ends with a slash. That is, `{{#person}}` begins a "person" section while `{{/person}}` ends it. -If the `person` key exists and calling it returns false, the HTML -between the pound and slash will not be displayed. +If the `person` key exists and calling it returns false or an empty +list, the HTML between the pound and slash will not be displayed. -If the `person` method exists and calling it returns true, the HTML -between the pound and slash will be rendered and displayed. +If the `person` method exists and calling it returns true or an +object, the HTML between the pound and slash will be rendered and +displayed exactly one time. The object that was returned by the +`person` method will become the context of the block, as well. +If the `person` method exists and calling it returns a non-empty list, +the text in the block will be displayed once for each item in the +list. The context of the block will be set to the current item for +each iteration. In this way we can loop over collections. + Template: {{#person}} Shown! {{/person}} {{#anything_else}} Never shown! {{/anything_else}} + {{#repo}} + <b>{{name}}</b> + {{/repo}} Hash: { - "person": true + "person": true, + "repo": [ + { "name": "resque" }, + { "name": "hub" }, + { "name": "rip" }, + ] } Output: Shown! + <b>resque</b> + <b>hub</b> + <b>rip</b> -### Enumerable Sections -Enumerable sections are syntactically identical to boolean sections in -that they begin with a pound and end with a slash. The difference, -however, is in the view: if the method called returns an enumerable, -the section is repeated as the enumerable is iterated over. +### Inverted Sections -Each item in the enumerable is expected to be a hash which will then -become the context of the corresponding iteration. In this way we can -construct loops. +An inverted section begins with a caret (hat) and ends with a +slash. That is `{{^person}}` begins a "person" inverted section while +`{{/person}}` ends it. +While sections can be used to render text one or more times based on the +value of the key given, inverted sections may render text once based +on the inverse value of the key given. That is, they will be rendered +if the key doesn't exist, is false, or is an empty list. + Template: {{#repo}} <b>{{name}}</b> {{/repo}} + {{^repo}} + No repos :( + {{/repo}} Hash: { - "repo": [ - { "name": "resque" }, - { "name": "hub" }, - { "name": "rip" }, - ] + "repo": [] } Output: - <b>resque</b> - <b>hub</b> - <b>rip</b> + No repos :( ### Comments Comments begin with a bang and are ignored. The following template: @@ -158,14 +179,28 @@ ### Partials Partials begin with a greater than sign, like `{{> box}}`. -It is useful to think of partials as a "template expansion" - that is, -the actual partial tag will be replaced with the content of the -partial. Therefor partials share the current context. +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` methods 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: <h2>Names</h2> {{# names }} @@ -218,6 +253,6 @@ ## SEE ALSO mustache(1), mustache(7), gem(1), -<http://defunkt.github.com/mustache/> +<http://mustache.github.com/>