cro-webapp-template-modules
Cro Template Modules
Using template files as modules
Template subs and macros can be factored out into other template files. For
example, given common.crotmp as follows:
<:macro layout($title)>
<html>
<head>
<title><$title></title>
</head>
<body>
<:body>
</body>
</html>
</:>
<:sub alert($message)>
<div class="alert"><$message></div>
</:>These could be imported and called as follows:
<:use 'common.crotmp'>
<|layout('Home')>
<h1>Welcome!</h1>
<&alert('We missed you!')>
</|>Templates are located in the same manner as if template were called in the
route block that initiated rendering of the top-level template - that is to
say, any registered template-locations will be considered, and if resources
were registered as a template location those will be considered too.
In the module ecosystem
It is also possible to create Raku distributions of Cro template subs and macros, for reuse across multiple applications and potentially for publication in the Raku module ecosystem. Such a library should:
Place one or more Cro template files in
resources.Make sure those resources are mentioned in the
META6.jsonHave a Raku module with an
EXPORTsub, which is defined in terms of thetemplate-libraryfunction exported byCro::WebApp::Template::Library.
The module looks like this:
my %exports := template-library %?RESOURCES<foo.crotmp>, %?RESOURCES<bar.crotmp>;
sub EXPORT() {
return %exports;
}Supposing that the above code was in a module Some::Template::Library, they can
then be imported into another Cro template as:
<:use Some::Template::Library>