Using and itea

The using statement is used to evaluate a block of content and then use it, via a predeclared identifier named itea, in a statement or declaration.

In this example:

{% navigation := itea; using %}
  <li><a href="/">Home</a>
  <li><a href="/about-us">About Us</a>
{% end using %}

the body of the using statement:

  <li><a href="/">Home</a>
  <li><a href="/about-us">About Us</a>

is evaluated and the result, represented by the identifier itea, is assigned to the navigation variable.

The body of the using statement can contain any content, including other declarations and statements, and itea can be used like any other identifier. In the following example, the body also contains a show statement and itea is passed to a function:

{% sendmail(from, to, wordwrap(itea)); using %}
Hello {{ name }}, thanks for your kind reply.
{% end %}

Given this macro declaration:

{% macro Dialog(title string, content html) %}
<div class="dialog">
  <h1>{{ title }}</h1>
  <div class="content">{{ content }}</div>
{% end %}

you can call it like this:

{% show Dialog("You wrote", itea); using %}
  <p>You wrote:</p>
  <cite>{{ message }}</cite>
{% end %}

In the previous example itea must have type html in order to be passed to the Dialog macro. The type of itea depends on the context of the using statement. In the example above, assuming the context is HTML, itea has the type html.

You can specify the type for itea among the format types string, html, markdown, css, js and json.

Look at this example:

{% show itea; using markdown %}
# The ancient art of tea
The Ancient Art of Tea is a delightful glimpse into
the philosophy, history and culture of tea in China.
{% end %}
<h1>The ancient art of tea</h1>
<p>The Ancient Art of Tea is a delightful glimpse into
the philosophy, history and culture of tea in China.</p>

The body is evaluated as Markdown because we have explicitly specified the type of itea by writing using markdown. If the context of the show statement is HTML, the show statement then converts the value of itea from markdown to html and shows it.

Itea with a macro type

In some cases, you may not want to immediately evaluate the body of the using statement.

Look at this example:

{% show Header(itea); using %}
  <title>My Site</title>
  {{ socials() }}
{% end %}

The body is evaluated and the result is passed to the Header macro. If Header doesn't use its argument, Scriggo still executes the body and calls the socials function.

To avoid this, you can change Header by passing them a macro instead of a string. Header will only call the macro if it wants to render it. Now you can write using macro instead of using only:

{% show Header(itea); using macro %}
  <title>My Site</title>
  {{ socials() }}
{% end %}

In this case itea represents a macro with body the body of the using statement. The body is evaluated and the socials macro is called only when Header calls the macro.


The following Users macro shows the users that have been passed to them. To show each user, it calls the macro getUser, also passed as an argument:

{% macro Users(users []User, getUser macro(user User) html) %}
<div class="users">
  {% for user in users %}
  <div class="user">{{ getUser(user) }}</div>
  {% end %}
{% end %}

You can put together the call to Users with the macro showing a user, as follows:

{% show Users(users, itea); using macro(user User) %}
  <dt>First name</dt>
  <dd>{{ user.FirstName }}</dd>
  <dt>Lat name</dt>
  <dd>{{ user.LastName }}</dd>
{% end %}

Learn more about using

Now that you have learned, with examples of increasing complexity, how using works, you can find out more by reading the template specification of the using statement.