generator.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. 'use strict';
  2. var minimatch = require('minimatch');
  3. var template = require('./template');
  4. module.exports = function(locals) {
  5. var config = this.config;
  6. var skipRenderList = [
  7. '**/*.js',
  8. '**/*.css'
  9. ];
  10. if (Array.isArray(config.skip_render)) {
  11. skipRenderList = skipRenderList.concat(config.skip_render);
  12. } else if (config.skip_render != null) {
  13. skipRenderList.push(config.skip_render);
  14. }
  15. var posts = [].concat(locals.posts.toArray(), locals.pages.toArray())
  16. .filter(function(post) {
  17. return post.sitemap !== false && !isMatch(post.source, skipRenderList);
  18. })
  19. .sort(function(a, b) {
  20. return b.updated - a.updated;
  21. });
  22. var xml = template(config).render({
  23. config: config,
  24. posts: posts
  25. });
  26. return {
  27. path: config.sitemap.path,
  28. data: xml
  29. };
  30. };
  31. function isMatch(path, patterns) {
  32. if (!patterns) return false;
  33. if (!Array.isArray(patterns)) patterns = [patterns];
  34. if (!patterns.length) return false;
  35. for (var i = 0, len = patterns.length; i < len; i++) {
  36. if (minimatch(path, patterns[i])) return true;
  37. }
  38. return false;
  39. }