- Via United24 platform (the initiative of the President of Ukraine):
- Via National Bank of Ukraine:
Jinja Like Templates Optimizer (JLTO) is a Nodejs-based tool for optimizing Jinja like templates.
Gulp tool for JLTO:
Supported template engines:
- Nunjucks (Tested with unit tests)
- Twig.js (Tested with unit tests)
- LiquidNode (Tested with unit tests)
- Twig
- Jinja
- Django
- Liquid
- Jinjava
Available options:
- expressionStart - symbols at the beginning of expressions
- expressionEnd - symbols at the end of expressions
- blockStart - symbols at the beginning of blocks
- blockEnd - symbols at the end of blocks
- commentStart - symbols at the beginning of comments
- commentEnd - symbols at the beginning of comments
- specialChars - special chars in blocks and expressions
- cleanupBlocks - flag for optimize blocks
- cleanupExpressions - flag for optimize expressions
- removeComments - flag for removing comments
- minifyHtml - flag for minifying html code with html-minifier
- minifyHtmlOptions - options for html-minifier
See default values for above options here.
Simple example:
let jlto = require('jlto');
let template = `
{{ hello }}
{{ "<John & Paul> ?" | escape }}
{{ '2.7' | round }}{% if product %}Product exists.{% endif %}
`;
let optimizedTemplate = jlto.optimizeString(template);
// optimizedTemplate:
// `
//{{hello}}
//{{"<John & Paul> ?"|escape}}
//{{'2.7'|round}}{%if product%}Product exists.{%endif%}
// `
Example of using minifyHtml option:
let jlto = require('jlto');
let template = `
<div {% if id %}id="{{ id | escape('html_attr') }}"{% endif %} class="section-container {{ classes | join(' ') | html_attribute }}">
<div class="section-writables">
{% for writable in writables %}
{{ writable | write | raw }}
{% endfor %}
</div>
</div>`;
let optimizedTemplate = jlto.optimizeString(template, {minifyHtml: true});
// optimizedTemplate:
// `<div {%if id%} id="{{id|escape('html_attr')}}" {%endif%} class="section-container {{classes|join(' ')|html_attribute}}"><div class="section-writables"> {%for writable in writables%} {{writable|write|raw}} {%endfor%} </div></div>`
Example of "nunjucks" templates minification with the custom GruntJS task:
module.exports = (grunt) => {
grunt.registerTask('min-nunjucks', 'Min nunjucks templates', () => {
let jlto = require('jlto');
let fs = require('fs');
let glob = require('glob');
let done = this.async();
glob('./**/*.nunjucks.html', (error, files) => {
files.forEach((filePath) => {
let fileContent;
fileContent = fs.readFileSync(filePath).toString();
try {
fileContent = jlto.optimizeString(fileContent, {minifyHtml: true});
fs.writeFileSync(filePath, fileContent);
} catch (ignored) {}
});
return done();
});
});
};
Unit tests are written using Mocha and Chai. To run, invoke npm test
.
JLTO is available under the MIT license, see the LICENSE file for more information.