hexo-theme-next/scripts/renderer.js
2020-06-12 23:50:15 +08:00

37 lines
937 B
JavaScript

/* global hexo */
'use strict';
const nunjucks = require('nunjucks');
const path = require('path');
function njkCompile(data) {
const templateDir = path.dirname(data.path);
const env = nunjucks.configure(templateDir, {
autoescape: false
});
env.addFilter('json', dictionary => {
if (typeof dictionary !== 'undefined' && dictionary !== null) {
return JSON.stringify(dictionary);
}
return '""';
});
return nunjucks.compile(data.text, env, data.path);
}
function njkRenderer(data, locals) {
return njkCompile(data).render(locals);
}
// Return a compiled renderer.
njkRenderer.compile = function(data) {
const compiledTemplate = njkCompile(data);
// Need a closure to keep the compiled template.
return function(locals) {
return compiledTemplate.render(locals);
};
};
hexo.extend.renderer.register('njk', 'html', njkRenderer);
hexo.extend.renderer.register('swig', 'html', njkRenderer);