xml_generator.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. 'use strict';
  2. var nunjucks = require('nunjucks');
  3. var env = new nunjucks.Environment();
  4. var pathFn = require('path');
  5. var fs = require('fs');
  6. env.addFilter('uriencode', function(str) {
  7. return encodeURI(str);
  8. });
  9. env.addFilter('noControlChars', function(str) {
  10. return str && str.replace(/[\x00-\x1F\x7F]/g, '');
  11. });
  12. var searchTmplSrc = pathFn.join(__dirname, '../templates/search.xml');
  13. var searchTmpl = nunjucks.compile(fs.readFileSync(searchTmplSrc, 'utf8'), env);
  14. module.exports = function(locals){
  15. var config = this.config;
  16. var searchConfig = config.search;
  17. var template = searchTmpl;
  18. var searchfield = searchConfig.field;
  19. var content = searchConfig.content;
  20. if (content == undefined) content=true;
  21. var posts, pages;
  22. if(searchfield.trim() != ''){
  23. searchfield = searchfield.trim();
  24. if(searchfield == 'post'){
  25. posts = locals.posts.sort('-date');
  26. }else if(searchfield == 'page'){
  27. pages = locals.pages;
  28. }else{
  29. posts = locals.posts.sort('-date');
  30. pages = locals.pages;
  31. }
  32. }else{
  33. posts = locals.posts.sort('-date');
  34. }
  35. var xml = template.render({
  36. config: config,
  37. posts: posts,
  38. pages: pages,
  39. content: content,
  40. url: config.root
  41. });
  42. return {
  43. path: searchConfig.path,
  44. data: xml
  45. };
  46. };