You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
core/src/engines/nunjucks.js

92 lines
2.3 KiB

1 year ago
const nunjucks = require('nunjucks')
const fs = require('fs')
const assign = require('assign-deep')
const { minify } = require('html-minifier')
const configStore = require('./../config.js')
1 year ago
const { asset } = require('./helpers.js')
1 year ago
const PageQuery = require('./../queries/pages.js')
const dayjs = require('dayjs')
/**
* nunjucks
*
*
* @author Björn Hase <me@herr-hase.wtf>
* @license http://opensource.org/licenses/MIT The MIT License
* @link https://gitea.node001.net/HerrHase/siteomat-webpack-plugin.git
*
*/
class Engine {
/**
*
*
* @param {string} views
* @param {object} site
* @param {object} options
*
*/
constructor(views, site, options) {
// merge data
this._options = assign({}, {
autoescapes: true,
throwOnUndefined: true
}, options)
this.nunjucks = nunjucks.configure(views, this._options)
// adding defaults for view, data from site.yml, functions and pageQuery
1 year ago
this._defaults = assign(this._options.defaults, {
1 year ago
site: site,
asset: asset,
dayjs: dayjs,
pageQuery: new PageQuery(configStore.get('source'))
1 year ago
})
1 year ago
}
/**
* render
*
* @param {object} page
* @param {function} done
*
*/
render(page, done) {
// merge data
const data = assign({
page: page
}, this._defaults)
this.nunjucks.render(data.page.view, data, (error, response) => {
if (error) {
console.error(error)
}
const options = configStore.get('options')
// if options minifyHtml is set, minify html, but only if page has type html
1 year ago
if (options.minifyHtml === true && data.page.extensions === 'html') {
1 year ago
response = minify(response, {
removeComments: true,
collapseWhitespace: true,
keepClosingSlash: true,
removeOptionalTags: false
})
// remove empty lines
} else {
response = response.replace(/^(?:[\t ]*(?:\r?\n|\r))+/gm, '')
}
done(error, response)
})
}
}
1 year ago
module.exports = Engine