swig.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. 'use strict';
  2. const swig = require('swig-templates');
  3. const extras = require('swig-extras');
  4. const forTag = require('swig-templates/lib/tags/for');
  5. extras.useTag(swig, 'markdown');
  6. extras.useTag(swig, 'switch');
  7. extras.useTag(swig, 'case');
  8. extras.useFilter(swig, 'batch');
  9. extras.useFilter(swig, 'groupby');
  10. extras.useFilter(swig, 'markdown');
  11. extras.useFilter(swig, 'nl2br');
  12. extras.useFilter(swig, 'pluck');
  13. extras.useFilter(swig, 'split');
  14. extras.useFilter(swig, 'trim');
  15. extras.useFilter(swig, 'truncate');
  16. swig.setDefaults({
  17. cache: false,
  18. autoescape: false
  19. });
  20. // Hack: Override for tag of Swig
  21. swig.setTag('for', forTag.parse, (...args) => {
  22. const compile = forTag.compile(...args).split('\n');
  23. compile.splice(3, 0, ' if (!Array.isArray(__l) && typeof __l.toArray === "function") { __l = __l.toArray(); }');
  24. return compile.join('\n');
  25. }, forTag.ends, true);
  26. function swigRenderer(data, locals) {
  27. return swig.render(data.text, {
  28. locals,
  29. filename: data.path
  30. });
  31. }
  32. swigRenderer.compile = (data, locals) => swig.compile(data.text, {
  33. filename: data.path
  34. });
  35. module.exports = swigRenderer;