jinja function

AngelConfigurer jinja({
  1. Set<String> ext = const {'html'},
  2. String path = 'lib/src/templates',
  3. bool followLinks = true,
  4. String blockStart = '{%',
  5. String blockEnd = '%}',
  6. String varOpen = '{{',
  7. String varClose = '}}',
  8. String commentStart = '{#',
  9. String commentEnd = '#}',
  10. dynamic defaultValue,
  11. Map<String, Function> filters = const <String, Function>{},
  12. Map<String, Function> tests = const <String, Function>{},
  13. Loader createLoader()?,
})

Configures an Angel server to use Jinja2 to render templates.

By default, templates are loaded from the filesystem; pass your own createLoader callback to override this.

All options other than createLoader are passed to either FileSystemLoader or Environment.

Implementation

AngelConfigurer jinja({
  Set<String> ext = const {'html'},
  String path = 'lib/src/templates',
  bool followLinks = true,
  String blockStart = '{%',
  String blockEnd = '%}',
  String varOpen = '{{',
  String varClose = '}}',
  String commentStart = '{#',
  String commentEnd = '#}',
  defaultValue,
  //bool autoReload = true,
  Map<String, Function> filters = const <String, Function>{},
  Map<String, Function> tests = const <String, Function>{},
  Loader Function()? createLoader,
}) {
  return (app) {
    createLoader ??= () {
      return FileSystemLoader(
        extensions: ext,
        paths: [path],
        followLinks: followLinks,
      );
    };
    var env = Environment(
      loader: createLoader!(),
      blockStart: blockStart,
      blockEnd: blockEnd,
      variableStart: varOpen,
      variableEnd: varClose,
      commentStart: commentStart,
      commentEnd: commentEnd,
      //defaultValue: defaultValue,
      //autoReload: autoReload,
      filters: filters,
      tests: tests,
    );

    app.viewGenerator = (path, [values]) {
      return env.getTemplate(path).render(values);
    };
  };
}