27. Greenbar Tags¶
27.1. if¶
Provides a small set of operators to express conditional logic.
Conditionally evaluates its body based on the value of the cond
attribute.
27.1.1. Example¶
~if cond=$doit bound?~
Hello there!
~end~
Given the variable $doit
is bound, the above template would produce:
Hello there!
Given that the variable $doit
is not bound, the above template would
produce an empty string.
27.1.2. Operators¶
Symbol | Name | Variable value types |
---|---|---|
> | greater than | int, float |
>= | greater than equal | int, float |
< | less than | int, float |
<= | less than equal | int, float |
== | equal | int, float, string |
!= | not equal | int, float, string |
bound? | is bound | any |
empty? | is empty | list, map |
27.2. Each¶
Iterates over a list binding each item to a variable scoped to the tag’s
body. Uses the value of the as
attribute as the name of the variable
during each iteration. If not provided it defaults to item
.
27.2.1. Examples¶
Using the default body variable item
:
~each var=$users~
First Name: ~$item.first_name~
Last Name: ~$item.last_name~
~end~
Customizing the body variable:
~each var=$users as=user~
First Name: ~$user.first_name~
Last Name: ~$user.last_name~
~end~
Given the variable $users
is bound to
[%{"first_name" => "John", "last_name"
=> "Doe"}]
then both of the above templates would produce:
First Name: John
Last Name: Doe
27.3. Join¶
Iterates over a list, joining the rendered items with the value of the
with
attribute, which defaults to ", "
. Similar to the each
tag, you may also provide an as
attribute which sets the name of the
variable scoped to the body of the tag.
27.3.1. Examples¶
Create a comma-delimited list
~join var=$names~~$item~~end~
Given that the variable $names
is bound to
["Mark", "Kevin", "Shelton"]
then the above template would produce:
Mark, Kevin, Shelton
Specify a custom joiner
~join var=$names with="-"~~$item~~end~
Custom binding
~join var=$names as=name~~$name~~end~
Bodies can contain arbitrary instructions
~join var=$users~~$item.profile.username~~end~
27.4. Count¶
Returns the size of the referenced variable. When referencing lists the size is the length of the list. For maps, size is the number of the map’s unique keys. Any other value type will display “N/A”.
27.4.1. Examples¶
There are ~count var=$users~ users.
Given that the variable $users
is bound to
[{ "name": "Mark" }, { "name":
"Kevin" }]
then the above template would produce:
There are 2 users.
Given that the variable $users
is bound to
{ "imbriaco": 1, "kevsmith": 2,
"shelton": 3 }
then the above template would produce:
There are 3 users.
27.5. Break¶
Inserts a hard newline into the rendered template. This can be useful to work around situtions where Markdown consolidates newlines.
27.5.1. Examples¶
Normally Markdown will combine two code blocks into one if they are separated by a single newline.
This is a line of code
This is another line of code
will render as
This a line of codeThis is another line of code
This is a line of code
~br~
This is another line of code
will render as
This is a line of code
This is another line of code
27.6. Attachment¶
Wraps body in an attachment directive. The initial design is heavily influenced by Slack’s attachment API.
27.6.1. Attributes¶
Name | Description |
title | Attachment title |
title_url | Optional title link URL |
color | Color to be used when rendering attachment (interpretation may vary by provider) |
image_url | Link to image asset (if any) |
author | Author name |
pretext | Preamble text displayed before attachment body |
footer | Brief text that appears as the attachment’s footer |
Any other attributes will be interpreted as custom fields and included
in the attachments’ fields
field. Custom fields have the following
structure:
{
"title": <attribute_name>,
"value": <attribute_value>,
"short": false
}
27.6.2. Examples¶
The template
~attachment title="VM Use By Region" runtime=$timestamp~
|Region|Count|
|---|---|
~each var=$regions as=region~
|~$region.name~|~$region.vm_count~|
~end~
~end~
when executed with the data
%{"timestamp" => "Mon Sep 12 13:06:57 EDT 2016",
"regions" => [%{"name" => "us-east-1", "vm_count" => 113},
%{"name" => "us-west-1", "vm_count" => 105}]}
generates the rendering directives
[%{name: :attachment,
title: "VM Use By Region",
fields: [%{short: false,
title: "runtime",
value: "Mon Sep 12 13:06:57 EDT 2016"}],
children: [%{name: :table, children: [%{name: :table_header,
children: [%{name: :table_cell,
children: [%{name: :text, text: "Region"}]},
%{name: :table_cell,
children: [%{name: :text, text: "Count"}]}]},
%{name: :table_row,
children: [%{name: :table_cell,
children: [%{name: :text, text: "us-east-1"}]},
%{name: :table_cell,
children: [%{name: :text, text: "113"}]}]},
%{name: :table_row,
children: [%{name: :table_cell,
children: [%{name: :text, text: "us-west-1"}]},
%{name: :table_cell,
children: [%{name: :text, text: "105"}]}]}]}]}]