{{ mustache }} の man ページ翻訳

f:id:Naotsugu:20150527221914p:plain

気づいたら勢いで訳していたので貼っておきます。


名前

mustache - ロジックレステンプレート.

書式

典型的な Mustache テンプレート:

    Hello {{name}}
    You have just won {{value}} dollars!
    {{#in_ca}}
    Well, {{taxed_value}} dollars, after taxes.
    {{/in_ca}}

以下のハッシュが与えられた場合:

    {
      "name": "Chris",
      "value": 10000,
      "taxed_value": 10000 - (10000 * 0.4),
      "in_ca": true
    }

以下が生成される:

    Hello Chris
    You have just won 10000 dollars!
    Well, 6000.0 dollars, after taxes.

説明

Mustache は HTML、設定ファイル、ソースコードなど何にでも使うことができます。 テンプレートにタグを記載することで、ハッシュやオブジェクトにより値が提供されることで動作します。

私達が"ロジックレス"と呼んでいるのは、if 文や else 句、また for ループが無いためです。 その代わりにタグだけがあります。一部のタグは値に置換され、一部のタグは何もせず、他は値の連続として置き換えられます。

このドキュメントでは Mustache タグの種類について説明します。

タグの種類

タグは二重ヒゲで表します。{{person}} はタグであり、{{#person}} もタグです。この2つの例は、person の参照を、キー または タグキー により表しています。タグの種類について説明しましょう。

Variables

最も基本的なタグは変数です。基本的なテンプレートにおいて {{name}} は、現在のコンテキストから name キーを見つけます。name キーが見つからない場合には、親のコンテキストが再帰的にチェックされます。最上位のコンテキストまで巡り name キーが見つからなかった場合には何もレンダリングされません。

全ての変数はデフォルトで HTML エスケープされます。エスケープされていない HTML が必要な場合は三重ヒゲ {{{name}}} を使います。& を使い {{& name}} とすることでも同じ効果が得られます。デリミタを変更している場合には & を利用すると良いでしょう(以下 デリミタの設定 を参照)。

デフォルトでは変数ミス(キーの不在)は空の文字を返します。多くの場合はあなたの利用している Mustache ライブラリの設定により変更することができます。例えば Ruby 版の Mustache では変数ミスがあった場合に例外とすることができます。

テンプレート:

    * {{name}}
    * {{age}}
    * {{company}}
    * {{{company}}}

ハッシュ:

    {
      "name": "Chris",
      "company": "<b>GitHub</b>"
    }

出力:

    * Chris
    *
    * &lt;b&gt;GitHub&lt;/b&gt;
    * <b>GitHub</b>

Sections

セクションは、コンテキストにおけるキーの値に応じて、テキストブロックをレンダリングを1回以上行います。

セクションはパウンド#で始まりスラッシュ/で終わります。つまり {{#person}} は "person" セクションの始まりで {{/person}} が終わりです。

セクションの動作はキーの値によって決定されます。

False 値または空リスト

person というキーが存在し、false または空リストの場合、セクション内の HTML は表示されません。

テンプレート:

    Shown.
    {{#person}}
      Never shown!
    {{/person}}

ハッシュ:

    {
      "person": false
    }

出力:

    Shown.
空でないリスト

person というキーが存在し、false 値で以外の場合、セクション内の HTML のレンダリングが1回以上行われます。

空ではないリストの場合、ブロック内のテキストはリストの要素ごとに表示されます。ブロックのコンテキストは繰り返しごとの要素が設定されます。これによりコレクションのループを扱うことができます。

テンプレート:

    {{#repo}}
      <b>{{name}}</b>
    {{/repo}}

ハッシュ:

    {
      "repo": [
        { "name": "resque" },
        { "name": "hub" },
        { "name": "rip" }
      ]
    }

出力:

    <b>resque</b>
    <b>hub</b>
    <b>rip</b>
Lambdas

値が関数やラムダなどの呼び出し可能なオブジェクトの場合、オブジェクトが呼び出され、テキストブロックが渡されます。渡されたテキストはレンダリングされていないリテラルブロックになります。{{tags}} は展開されていないため、ラムダは自身でそれを行う必要があります。これによりフィルタやキャッシングを実現することができます。

テンプレート:

    {{#wrapped}}
      {{name}} is awesome.
    {{/wrapped}}

ハッシュ:

    {
      "name": "Willy",
      "wrapped": function() {
        return function(text, render) {
          return "<b>" + render(text) + "</b>"
        }
      }
    }

出力:

    <b>Willy is awesome.</b>
Non-False Values

値が false でもなく、リストではない場合、単独のブロックをレンダリングするコンテキストとみなされます。

テンプレート:

    {{#person?}}
      Hi {{name}}!
    {{/person?}}

ハッシュ:

    {
      "person?": { "name": "Jon" }
    }

出力:

    Hi Jon!

Inverted Sections

反転セクションはキャレットで始まりスラッシュで終わります。これは {{^person}} が "person" 反転セクションの開始で {{/person}} が終わりということになります.

セクションがキーに対応する値にもとづいて1回以上のテキストのレンダリングを行うのに対して、反転セクションはキーに対応する値の逆値にもとづいてテキストがレンダリングされます。これはつまり、キーが存在しなければレンダリングされ、false か 空のリストの場合にレンダリングされることになります。

テンプレート:

    {{#repo}}
      <b>{{name}}</b>
    {{/repo}}
    {{^repo}}
      No repos :(
    {{/repo}}

ハッシュ:

    {
      "repo": []
    }

出力:

    No repos :(

Comments

コメントはビックリマークで始まり、単に無視されます。以下のテンプレートがあった場合、

    <h1>Today{{! ignore me }}.</h1>

以下がレンダリングされます:

    <h1>Today.</h1>

コメントは改行を含むこともできます。

Partials

パーシャルは大なり記号で開始します。{{> box}} このようになります。

パーシャルはコンパイル時ではなく、実行時にレンダリングされます。そのため再帰パーシャルが可能ですが無限ループは禁止です。

呼び出し時のコンテキストは継承されます。ERB ファイルでは以下のようになります:

    <%= partial :next_more, :start => start, :size => size %>

Mustache では以下とするだけです:

    {{> next_more}}

なぜでしょうか。これは、next_more.mustache ファイルが呼び出し元のコンテキストから size と start メソッドを継承するためです。

文字通り正しいというわけではないですが、パーシャルはインクルードまたはテンプレート拡張と考えても良いです。

例えばテンプレートとパーシャルの以下のファイルがあった場合:

base.mustache:

    <h2>Names</h2>
    {{#names}}
      {{> user}}
    {{/names}}

user.mustache:

    <strong>{{name}}</strong>

以下のように単一の拡張されたテンプレートと考えることができます:

    <h2>Names</h2>
    {{#names}}
      <strong>{{name}}</strong>
    {{/names}}

Set Delimiter

デリミタタグの設定は、イコール記号で開始し、{{}} から任意文字列までのデリミタを変更します。

不自然ですが、以下の例を考えてみます:

    * {{default_tags}}
    {{=<% %>=}}
    * <% erb_style_tags %>
    <%={{ }}=%>
    * {{ default_tags_again }}

3つのアイテムのリストがあります。最初のリストはデフォルトのタグスタイルを使っています。2つ目ではデリミタ設定により erb スタイルに定義したタグを使っています。最後はデリミタ設定をデフォルトのスタイルに戻しています。

ctemplates によると、これは「TeXのような言語に有効です。2重カッコがテキスト中に発生するとマークアップが非常にやりにくくなります。」

カスタムデリミタにはホワイトスペースやイコール記号を含むことはできません。

COPYRIGHT

Mustache is Copyright (C) 2009 Chris Wanstrath

Original CTemplate by Google

SEE ALSO

mustache(1), http://mustache.github.io/