Skabelon
Simple templating engine for rust, using Angular syntax. You can use the build-in Angular parser from Prettier for formatting.
Features
- Angular syntax
- Templates are parsed at runtime. Templates can be recalculated with
templates.reload(). @if() {} @else if() {} @else {}support.@for() {}support for iteration.@defer {}support for partials. Partials can have a{{ content }}where block from@deferwill be rendered.object["value"]orobject.valuefor accessing object values
Usage
Templates can be loaded with a glob or string.
let mut templates = new;
templates.load_glob;
let template_str =
"<table>@for(row in table) {<tr>@for(col in row) {<td>{{col}}</td>}</tr>}</table>";
templates.load_str;
Templates are rendered with:
let ctx = json!;
let render = templates.render;
// or for load_str
let render = templates.render;
Context notation
Context can be referenced in templates with {{ key }}.
If key is an object, values can be referenced with {{ key["value"] }} or {{ key.value }}.
If key is an array, array can be indexed with {{ key[index] }}.
@if
Renders block if condition is true.
Supports ==, !=, &&, ||, <, >, <=, >=,
@if (condition) {
block
}
If else
@if (condition) {
block
} @else {
otherwhere
}
if else if
@if (condition) {
block
} @else if (condition) {
block
}
if else if else
@if (condition) {
block
} @else if (condition) {
block
} @else {
otherwhere
}
@for
Iterates over array. index is added to the context:
@for (item in items) {
{{index}}: {{item}}
}
@defer
Includes other template by key.
@defer (key) {}
Render block in partial content slot
main
@defer (partial) {Hello}
partial
{{ content }} World
Context can be send to partial.
@defer (key; value="hello") {}
or for variables
@defer (key; value=variable) {}