<erl>
out(A) ->
    {ssi, "TAB.inc", "%%",[{"bindings", "choosen"}]}.
</erl>


<div id="entry">
<h2> Bindings </h2>
  <p>
    Bindings are the opposite of
    <a href="ssi.yaws"> Server Side Includes (SSI)</a>.
    SSI is used when entire pages are written largely in EHTML and
    snippets of HTML, or more typically javascript code is
    inserted into the EHTML
    code.
  </p>

  <p> Bindings are used the other way around. Essentially entire
    pages are written in regular HTML but parts of the HTML needs to be
    dynamically generated.
  </p>
  <p>The yaws callback out/1 can return
  </p>
  <div class="box">
    <pre>
      {bindings, [{Key1, Value2}, {Key2, Value2} .....]}.
    </pre>
  </div>


  <p>All bindings can then be used in the rest of yaws code (in HTML source and
    within erl tags). In HTML source <code>%%Key%%</code> is expanded to Value and
    within erl tags <code>yaws_api:binding(Key)</code> or
    <code>yaws_api:binding_find(Key)</code> can be used to extract Value.</p>

  <p>By default, text that looks like <code>%%Key%%</code> is left as
    is if Key is not included in the bindings list. To force Yaws to
    treat all undefined bindings as empty strings, so it strips out
    any text like <code>%%Key%%</code> when Key is not specified,
    include the special directive <code>strip_undefined</code> in the
    bindings list.</p>

  <p>With the binding feature it is easier to write transparent yaws code making
    it easier to to work together with Web people knowing little or
    nothing about Erlang.</p>

  <p>
    An example:
  </p>


  <div class="box">
  <verbatim>
<erl>
out(A) -> {bindings, [{"A", "foo"}, {"B", "baz"}]}.
</erl>

<html>
  <body>
    <p>%%A%%</p>
    <p><font size="4">%%A%% != %%B%%</font></p>
    <p>An enormous amount of plain html source here.</p>

<erl>
out(A) ->
    Value = yaws_api:binding("A"),
    {ehtml, {ul, [],
             [{li, [],
               Value},
              {li, [],
               "gazonk"}]}}.
</erl>

%%A%% = %%A%% (hit me)
</body>
</html>

</verbatim>
</div>



<p>
  Which expands to:</p>

  <div class="box">
    <verbatim>

<html>
  <body>
    <p>foo</p>
    <p><font size="4">foo != baz</font></p>
    <p>An enormous amount of plain html source here.</p>

    <ul>
      <li>foo</li>
      <li>gazonk</li></ul>

foo = foo (hit me)

  </body>
</html>

    </verbatim>
  </div>


  <p> And is rendered as:</p>

  <div class="box">
    <p>foo</p>
    <p><font size="4">foo != baz</font></p>
    <p>An enormous amount of plain html source here.</p>

    <ul>
      <li>foo</li>
      <li>gazonk</li>
    </ul>

    foo = foo (hit me)
  </div>



</div>


<erl>
out(A) -> {ssi, "END2",[],[]}.
</erl>




