Swig

A Node.js and Browser-based JavaScript Template Engine

Filters

The rendering of variables can be modified by filters. Filters are special functions that are applied after any object token in a variable block using the pipe character, for example: {{ names|join(', ') }}.

Filters can also be chained together, one after another. In this case, we have a list of names in HTML tags that we want to remove, output together, and make title-cased:

// names = ['

paul

', '

jim

']; {{ names|striptags|join(', ')|title }} // => Paul, Jim

Swig comes pre-loaded with a set of useful filters:


addslashes

Source: lib/filters.js#L40

Backslash-escape characters that need to be escaped.

Returns

*: Backslash-escaped string.

Examples

{{ "\"quoted string\""|addslashes }}
// => \"quoted string\"

capitalize

Source: lib/filters.js#L59

Upper-case the first letter of the input and lower-case the rest.

Returns

*: Returns the same type as the input.

Examples

{{ "i like Burritos"|capitalize }}
// => I like burritos

date(format, offset, abbr)

Source: lib/filters.js#L86

Format a date or Date-compatible string.

Parameters

Name Type Optional Default Description
format string undefined PHP-style date format compatible string. Escape characters with \ for string literals.
offset number undefined Timezone offset from GMT in minutes.
abbr string undefined Timezone abbreviation. Used for output only.

Returns

string: Formatted date string.

Examples

// now = new Date();
{{ now|date('Y-m-d') }}
// => 2013-08-14
// now = new Date();
{{ now|date('jS \o\f F') }}
// => 4th of July

default(def)

Source: lib/filters.js#L126

If the input is `undefined`, `null`, or `false`, a default return value can be specified.

Parameters

Name Type Optional Default Description
def * undefined Value to return if `input` is `undefined`, `null`, or `false`.

Returns

*: `input` or `def` value.

Examples

{{ null_value|default('Tacos') }}
// => Tacos
{{ "Burritos"|default("Tacos") }}
// => Burritos

escape(type)

Source: lib/filters.js#L145

Force escape the output of the variable. Optionally use `e` as a shortcut filter name. This filter will be applied by default if autoescape is turned on.

Parameters

Name Type Optional Default Description
type string 'html' If you pass the string js in as the type, output will be escaped so that it is safe for JavaScript execution.

Returns

string: Escaped string.

Examples

{{ "<blah>"|escape }}
// => <blah>
{{ "<blah>"|e("js") }}
// => \u003Cblah\u003E

first

Source: lib/filters.js#L209

Get the first item in an array or character in a string. All other objects will attempt to return the first value available.

Returns

*: The first item of the array or first character of the string input.

Examples

// my_arr = ['a', 'b', 'c']
{{ my_arr|first }}
// => a
// my_val = 'Tacos'
{{ my_val|first }}
// T

groupBy(key)

Source: lib/filters.js#L240

Group an array of objects by a common key. If an array is not provided, the input value will be returned untouched.

Parameters

Name Type Optional Default Description
key string undefined Key to group by.

Returns

object: Grouped arrays by given key.

Examples

// people = [{ age: 23, name: 'Paul' }, { age: 26, name: 'Jane' }, { age: 23, name: 'Jim' }];
{% for agegroup in people|groupBy('age') %}
  <h2>{{ loop.key }}</h2>
  <ul>
    {% for person in agegroup %}
    <li>{{ person.name }}</li>
    {% endfor %}
  </ul>
{% endfor %}

join(glue)

Source: lib/filters.js#L283

Join the input with a string.

Parameters

Name Type Optional Default Description
glue string undefined String value to join items together.

Returns

string:

Examples

// my_array = ['foo', 'bar', 'baz']
{{ my_array|join(', ') }}
// => foo, bar, baz
// my_key_object = { a: 'foo', b: 'bar', c: 'baz' }
{{ my_key_object|join(' and ') }}
// => foo and bar and baz

json(indent)

Source: lib/filters.js#L319

Return a string representation of an JavaScript object.

Backwards compatible with swig@0.x.x using `json_encode`.

Parameters

Name Type Optional Default Description
indent number undefined Number of spaces to indent for pretty-formatting.

Returns

string: A valid JSON string.

Examples

// val = { a: 'b' }
{{ val|json }}
// => {"a":"b"}
// val = { a: 'b' }
{{ val|json(4) }}
// => {
//        "a": "b"
//    }

last

Source: lib/filters.js#L340

Get the last item in an array or character in a string. All other objects will attempt to return the last value available.

Returns

*: The last item of the array or last character of the string.input.

Examples

// my_arr = ['a', 'b', 'c']
{{ my_arr|last }}
// => c
// my_val = 'Tacos'
{{ my_val|last }}
// s

length

Source: lib/filters.js#L374

Get the number of items in an array, string, or object.

Returns

*: The length of the input

Examples

// my_arr = ['a', 'b', 'c']
{{ my_arr|length }}
// => 3
// my_str = 'Tacos'
{{ my_str|length }}
// => 5
// my_obj = {a: 5, b: 20}
{{ my_obj|length }}
// => 2

lower

Source: lib/filters.js#L400

Return the input in all lowercase letters.

Returns

*: Returns the same type as the input.

Examples

{{ "FOOBAR"|lower }}
// => foobar
// myObj = { a: 'FOO', b: 'BAR' }
{{ myObj|lower|join('') }}
// => foobar

raw

Source: lib/filters.js#L412

Deprecated in favor of safe.

replace(search, replacement, flags)

Source: lib/filters.js#L441

Returns a new string with the matched search pattern replaced by the given replacement string. Uses JavaScript's built-in String.replace() method.

Parameters

Name Type Optional Default Description
search string undefined String or pattern to replace from the input.
replacement string undefined String to replace matched pattern.
flags string undefined Regular Expression flags. 'g': global match, 'i': ignore case, 'm': match over multiple lines

Returns

string: Replaced string.

Examples

// my_var = 'foobar';
{{ my_var|replace('o', 'e', 'g') }}
// => feebar
// my_var = "farfegnugen";
{{ my_var|replace('^f', 'p') }}
// => parfegnugen
// my_var = 'a1b2c3';
{{ my_var|replace('\w', '0', 'g') }}
// => 010203

reverse

Source: lib/filters.js#L457

Reverse sort the input. This is an alias for {{ input|sort(true) }}.

Returns

array: Reversed array. The original input object is returned if it was not an array.

Examples

// val = [1, 2, 3];
{{ val|reverse }}
// => 3,2,1

safe

Source: lib/filters.js#L472

Forces the input to not be auto-escaped. Use this only on content that you know is safe to be rendered on your page.

Returns

*: The input exactly how it was given, regardless of autoescaping status.

Examples

// my_var = "<p>Stuff</p>";
{{ my_var|safe }}
// => <p>Stuff</p>

sort(reverse)

Source: lib/filters.js#L502

Sort the input in an ascending direction.

If given an object, will return the keys as a sorted array.

If given a string, each character will be sorted individually.

Parameters

Name Type Optional Default Description
reverse boolean false Output is given reverse-sorted if true.

Returns

*: Sorted array;

Examples

// val = [2, 6, 4];
{{ val|sort }}
// => 2,4,6
// val = 'zaq';
{{ val|sort }}
// => aqz
// val = { bar: 1, foo: 2 }
{{ val|sort(true) }}
// => foo,bar

striptags

Source: lib/filters.js#L539

Strip HTML tags.

Returns

*: Returns the same object as the input, but with all string values stripped of tags.

Examples

// stuff = '<p>foobar</p>';
{{ stuff|striptags }}
// => foobar

title

Source: lib/filters.js#L564

Capitalizes every word given and lower-cases all other letters.

Returns

*: Returns the same object as the input, but with all words in strings title-cased.

Examples

// my_str = 'this is soMe text';
{{ my_str|title }}
// => This Is Some Text
// my_arr = ['hi', 'this', 'is', 'an', 'array'];
{{ my_arr|title|join(' ') }}
// => Hi This Is An Array

uniq

Source: lib/filters.js#L586

Remove all duplicate items from an array.

Returns

array: Array with unique items. If input was not an array, the original item is returned untouched.

Examples

// my_arr = [1, 2, 3, 4, 4, 3, 2, 1];
{{ my_arr|uniq|join(',') }}
// => 1,2,3,4

upper

Source: lib/filters.js#L618

Convert the input to all uppercase letters. If an object or array is provided, all values will be uppercased.

Returns

*: Returns the same type as the input, with all strings upper-cased.

Examples

// my_str = 'tacos';
{{ my_str|upper }}
// => TACOS
// my_arr = ['tacos', 'burritos'];
{{ my_arr|upper|join(' & ') }}
// => TACOS & BURRITOS

url_encode

Source: lib/filters.js#L638

URL-encode a string. If an object or array is passed, all values will be URL-encoded.

Returns

*: URL-encoded string.

Examples

// my_str = 'param=1&anotherParam=2';
{{ my_str|url_encode }}
// => param%3D1%26anotherParam%3D2

url_decode

Source: lib/filters.js#L657

URL-decode a string. If an object or array is passed, all values will be URL-decoded.

Returns

*: URL-decoded string.

Examples

// my_str = 'param%3D1%26anotherParam%3D2';
{{ my_str|url_decode }}
// => param=1&anotherParam=2