You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.3 KiB
JavaScript
35 lines
1.3 KiB
JavaScript
const path = require('path');
|
|
const nunjucks = require('nunjucks');
|
|
const markdown = require('./markdown');
|
|
const options = require('../options');
|
|
const perm = require('../permission');
|
|
const builtin = require('../model/builtin');
|
|
const model = require('../model');
|
|
const misc = require('./misc');
|
|
|
|
class Nunjucks extends nunjucks.Environment {
|
|
constructor() {
|
|
super(
|
|
new nunjucks.FileSystemLoader(path.resolve(options.template.path)),
|
|
{ autoescape: true, trimBlocks: true },
|
|
);
|
|
this.addFilter('json', (self) => JSON.stringify(self), false);
|
|
this.addFilter('assign', (self, data) => Object.assign(self, data));
|
|
this.addFilter('markdown', (self) => markdown.render(self));
|
|
this.addFilter('gravatar_url', misc.gravatar_url);
|
|
this.addFilter('format_size', misc.format_size);
|
|
this.addGlobal('typeof', (o) => typeof o);
|
|
this.addGlobal('console', console);
|
|
this.addGlobal('static_url', (str) => `/${str}`);
|
|
this.addGlobal('reverse_url', (str) => str);
|
|
this.addGlobal('datetime_span', misc.datetime_span);
|
|
this.addGlobal('paginate', misc.paginate);
|
|
this.addGlobal('perm', perm);
|
|
this.addGlobal('status', builtin.STATUS);
|
|
this.addGlobal('model', model);
|
|
}
|
|
}
|
|
const env = new Nunjucks();
|
|
|
|
module.exports = env;
|