jael function
AngelConfigurer
jael(})
Configures an Angel server to use Jael to render templates.
To enable "minified" output, set minified to true
For custom HTML formating, you need to override the createBuffer
parameter
with a function that returns a new instance of CodeBuffer
.
To apply additional transforms to parsed documents, provide a set of patch
functions.
Implementation
AngelConfigurer jael(Directory viewsDirectory,
{String fileExtension = '.jael',
bool strictResolution = false,
bool cacheViews = true,
Map<String, Document>? cache,
Iterable<Patcher> patch = const [],
bool asDSX = false,
bool minified = true,
CodeBuffer Function()? createBuffer}) {
var localCache = cache ?? <String, Document>{};
var bufferFunc = createBuffer ?? () => CodeBuffer();
if (minified) {
bufferFunc = () => CodeBuffer(space: '', newline: '');
}
return (Angel app) async {
app.viewGenerator = (String name, [Map? locals]) async {
var errors = <JaelError>[];
Document? processed;
//var stopwatch = Stopwatch()..start();
if (cacheViews && localCache.containsKey(name)) {
processed = localCache[name];
} else {
processed = await _loadViewTemplate(viewsDirectory, name,
fileExtension: fileExtension, asDSX: asDSX, patch: patch);
if (cacheViews) {
localCache[name] = processed!;
}
}
//print('Time executed: ${stopwatch.elapsed.inMilliseconds}');
//stopwatch.stop();
var buf = bufferFunc();
var scope = SymbolTable(
values: locals?.keys.fold<Map<String, dynamic>>(<String, dynamic>{},
(out, k) => out..[k.toString()] = locals[k]) ??
<String, dynamic>{});
if (errors.isEmpty) {
try {
const Renderer().render(processed!, buf, scope,
strictResolution: strictResolution);
return buf.toString();
} on JaelError catch (e) {
errors.add(e);
}
}
Renderer.errorDocument(errors, buf..clear());
return buf.toString();
};
};
}