From 6469de499fdd69f67154543b8844cc108a4fe3b2 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Thu, 23 Apr 2020 11:18:23 +0200 Subject: [PATCH] Add NunjucksComponent --- src/components/NunjucksComponent.ts | 38 +++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/components/NunjucksComponent.ts diff --git a/src/components/NunjucksComponent.ts b/src/components/NunjucksComponent.ts new file mode 100644 index 0000000..dff672a --- /dev/null +++ b/src/components/NunjucksComponent.ts @@ -0,0 +1,38 @@ +import nunjucks from "nunjucks"; +import config from "config"; +import {Express, Router} from "express"; +import ApplicationComponent from "../ApplicationComponent"; +import Controller from "../Controller"; +import {ServerError} from "../HttpError"; + +export default class NunjucksComponent extends ApplicationComponent { + public async start(app: Express, router: Router): Promise { + const env = nunjucks.configure('views', { + autoescape: true, + express: app, + noCache: !config.get('view.cache'), + throwOnUndefined: true, + }) + .addGlobal('route', (route: string, params: { [p: string]: string } | [] = [], absolute: boolean = false) => { + const path = Controller.route(route, params, absolute); + if (path === null) throw new ServerError(`Route ${route} not found.`); + return path; + }) + .addGlobal('app_version', require('../package.json').version) + .addFilter('hex', (v: number) => { + return v.toString(16); + }); + app.set('view engine', 'njk'); + + router.use((req, res, next) => { + req.env = env; + res.locals.url = req.url; + res.locals.params = () => req.params; + next(); + }); + } + + public async stop(): Promise { + } + +} \ No newline at end of file