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.
62 lines
1.4 KiB
62 lines
1.4 KiB
'use strict'; |
|
var nunjucks = require('nunjucks'); |
|
var env = new nunjucks.Environment(); |
|
var pathFn = require('path'); |
|
var fs = require('fs'); |
|
|
|
env.addFilter('uriencode', function(str) { |
|
return encodeURI(str); |
|
}); |
|
|
|
env.addFilter('noControlChars', function(str) { |
|
return str && str.replace(/[\x00-\x1F\x7F]/g, ''); |
|
}); |
|
|
|
module.exports = function(locals){ |
|
var config = this.config; |
|
var searchConfig = config.search; |
|
|
|
var searchTmplSrc = searchConfig.template || pathFn.join(__dirname, '../templates/search.xml'); |
|
var searchTmpl = nunjucks.compile(fs.readFileSync(searchTmplSrc, 'utf8'), env); |
|
|
|
var template = searchTmpl; |
|
var searchfield = searchConfig.field; |
|
var content = searchConfig.content; |
|
if (content == undefined) content=true; |
|
|
|
var posts, pages; |
|
|
|
if(searchfield.trim() != ''){ |
|
searchfield = searchfield.trim(); |
|
if(searchfield == 'post'){ |
|
posts = locals.posts.sort('-date'); |
|
}else if(searchfield == 'page'){ |
|
pages = locals.pages; |
|
}else{ |
|
posts = locals.posts.sort('-date'); |
|
pages = locals.pages; |
|
} |
|
}else{ |
|
posts = locals.posts.sort('-date'); |
|
} |
|
|
|
var rootURL; |
|
if (config.root == null){ |
|
rootURL = "/"; |
|
}else{ |
|
rootURL = config.root; |
|
} |
|
|
|
var xml = template.render({ |
|
config: config, |
|
posts: posts, |
|
pages: pages, |
|
content: content, |
|
url: rootURL |
|
}); |
|
|
|
return { |
|
path: searchConfig.path, |
|
data: xml |
|
}; |
|
};
|
|
|