Comment style
Comment-style templates use HTML comments as delimiters: <!--# ... #-->. This makes them ideal for
HTML templates that are edited in HTML editors, since the template markers are valid HTML comments and
will not interfere with the editor.
Select render mode Comment style to use only this style, or Comment, Curly, ASP to combine it with other styles.
Value replacement
Use <!--# expression #--> to output the value of an expression.
<p>Workflow <!--# $workflow.id #--> has been updated by <!--# source.person_name #-->.</p>
Nested properties are supported:
<a href="<!--# source.account #-->/workflows/<!--# $workflow.id #-->">
<!--# $workflow.subject #-->
</a>
Values are automatically HTML-encoded when the template contains HTML. This prevents HTML injection. Rich text types (see Rich text rendering below) are not encoded, since they produce HTML output by design.
Conditionals
Use <!--BEGIN-IF# ... #--> and <!--END-IF--> to conditionally include content.
Existence check
By default (with !=), the block is included when the value is not empty and not null:
<!--BEGIN-IF# $workflow.release #!=-->
<tr>
<td>Release: <!--#$workflow.release.subject#--></td>
</tr>
<!--END-IF-->
or, equivalently:
<!--BEGIN-IF# $workflow.release #-->
<tr>
<td>Release: <!--#$workflow.release.subject#--></td>
</tr>
<!--END-IF-->
Equality check
Use == to compare against a specific value:
<!--BEGIN-IF#$workflow.status#==completed-->
<p>This workflow is completed.</p>
<!--END-IF-->
Inequality check
Use != with a value to check that the expression does not equal that value:
<!--BEGIN-IF#$workflow.status#!=completed-->
<p>This workflow is not yet completed.</p>
<!--END-IF-->
Nested conditionals
Conditionals can be nested:
<!--BEGIN-IF#$workflow.release#!=-->
<!--BEGIN-IF#$workflow.release.status#==active-->
<p>Active release: <!--#$workflow.release.subject#--></p>
<!--END-IF-->
<!--END-IF-->
Lists and loops
Lists repeat a section of the template for each element of an array. The items in the repeated
section are accessed through the ITEM variable.
List variants
| Tag | Description |
|---|---|
BEGIN-LIST | Iterates over all items |
BEGIN-LIST-ALL | Iterates over all non-internal items (filters out items where internal is true) |
BEGIN-LIST-FIRST | Renders only the first non-internal item |
BEGIN-LIST-LAST | Renders only the last non-internal item |
The BEGIN-LIST-ALL, BEGIN-LIST-FIRST and BEGIN-LIST-LAST tags are especially useful for
working with lists of Xurrent notes.
Basic list
<!--BEGIN-LIST-ALL#$workflow.notes#-->
<table class="notes">
<!--BEGIN-ITEM-->
<tr>
<td><!--#ITEM.person.name#-->: <!--#ITEM.text#--></td>
</tr>
<!--END-ITEM-->
</table>
<!--END-LIST-->
Header and footer
Content outside the <!--BEGIN-ITEM-->...<!--END-ITEM--> block but inside the list is rendered
once as header (before the items) or footer (after the items). The header and footer are only
rendered when the list has items.
<!--BEGIN-LIST-ALL#$workflow.notes#-->
<table class="notes">
<tr><th>Notes</th></tr>
<!--BEGIN-ITEM-->
<tr>
<td><!--#ITEM.person.name#-->: <!--#ITEM.text#--></td>
</tr>
<!--END-ITEM-->
</table>
<!--END-LIST-->
Nested lists and conditionals
Lists can contain conditionals, and conditionals can contain lists:
<!--BEGIN-LIST-ALL#$workflow.notes#-->
<!--BEGIN-ITEM-->
<tr>
<td>
<!--#ITEM.person.name#-->
<!--BEGIN-IF#ITEM.person.account.name#!=-->
<span class="account"><!--#ITEM.person.account.name#--></span>
<!--END-IF-->
</td>
</tr>
<!--END-ITEM-->
<!--END-LIST-->
Formatting
Values can be formatted by using the extended syntax: <!--#[expression,TYPE,format;parameter]#-->.
Date
Format a date value:
<!--#[$workflow.created_at,DATE,DD/MM/YYYY]#-->
DateTime
Format a date-time value with an optional timezone. The timezone defaults to Berlin if not specified.
<!--#[ITEM.created_at,DATETIME,DD.MM.YYYY HH:mm z;Paris]#-->
The timezone parameter (after ;) specifies the city name for the timezone (e.g. Paris, Berlin, New_York).
Number
Format a number with an optional locale. The locale defaults to en-gb if not specified.
<!--#[$total,NUMBER,0,0.00]#-->
<!--#[$total,NUMBER,0.00;de]#-->
Currency
Format a currency value with an optional locale:
<!--#[$price,CURRENCY,$0,0.00]#-->
<!--#[$price,CURRENCY,0,0.00 €;de]#-->
Rich text rendering
Rich text values can be converted to HTML using the following types:
| Type | Description |
|---|---|
TEXTILE | Converts Textile markup to HTML |
XURRENT | Converts Xurrent rich text to HTML |
ITRP | Same as XURRENT, for backward compatibility reasons |
MARKDOWN | Converts Markdown to HTML |
<!--#[ITEM.text,TEXTILE]#-->
<!--#[ITEM.text,XURRENT]#-->
<!--#[ITEM.text,MARKDOWN]#-->
Rich text output is not HTML-encoded, since the conversion itself produces HTML.