Templates
Templates enable reuse of page elements. For example, a template for a footer could be:
define footer() { All your page are belong to us. }
This template can be included in a page with a template call:
define page example(){
footer
}
Like pages, templates can be parameterized.
define edit(g:Group){
form {
input(g.members)
action("save",action{})
}
}
define page editGroup(g:Group){
edit(g)
}
Overloading
While pages must have unique names, templates can be overloaded. The overloading is resolved compile-time, based on the static types of the arguments.
define edit(g:Group){...}
define edit(u:User){...}
define page editGroup(g:Group){
edit(g)
}
Dynamically scoped templates redefinitions
Template definitions can be redefined locally in a page or template, to change their meaning in that specific context. All uses are replaced in templates called from the redefining template.
define main{
body()
}
define body(){
"default body"
}
define page root(){
main
define body(){
"custom body"
}
}
