csycms-core-test
Version:
Markdown powered Knowledgebase
80 lines (65 loc) • 2.44 kB
JavaScript
;
// Modules
var path = require('path');
var fs = require('fs');
var sm = require('sitemap');
var _ = require('underscore');
const contentProcessors = require('../functions/contentProcessors');
const utils = require('../core/utils');
function route_sitemap (config) {
return function (req, res, next) {
var hostname = config.hostname || req.headers.host;
var content_dir = path.normalize(config.content_dir);
// get list md files
var files = listFiles(content_dir);
files = _.filter(files, function (file) {
let lowerFile = file.toLowerCase()
return file.substr(-3) === '.md' && ! file.includes('/csycmsdocs/public') && ! lowerFile.includes('readme.md') && !file.includes('.error.md');
});
// files = _.filter(files, function (file) {
// file.substr(-3) === '.md' && ! file.includes('/csycmsdocs/public') && ! lowerFile.includes('readme.md')
// return file.substr(-3) === '.md';
// });
var filesPath = files.map(function (file) {
return file.replace(content_dir, '');
});
// generate list urls
var urls = filesPath.map(function (file) {
console.log(file)
let tmp = '/' + file.replace('.md', '').replace('\\', '/');
tmp = tmp.replace(/[0-9]*\./g,'')
tmp = tmp.replace(/\/chapter$/,'')
tmp = tmp.replace(/\/docs$/,'')
return tmp;
});
// create sitemap.xml
var sitemap = sm.createSitemap({
hostname: 'http://' + hostname,
cacheTime: 600000
});
for (var i = 0, len = urls.length; i < len; i++) {
var content = fs.readFileSync(files[i], 'utf8');
// Need to override the datetime format for sitemap
var conf = {
datetime_format : 'YYYY-MM-DD'
};
sitemap.add({
url: (config.prefix_url || '') + urls[i],
changefreq: 'hourly',
priority: 0.8,
lastmod: utils.getLastModified(conf, contentProcessors.processMeta(content), files[i])
});
}
res.header('Content-Type', 'application/xml');
res.send(sitemap.toString());
};
}
function listFiles (dir) {
return fs.readdirSync(dir).reduce(function (list, file) {
var name = path.join(dir, file);
var isDir = fs.statSync(name).isDirectory();
return list.concat(isDir ? listFiles(name) : [name]);
}, []);
}
// Exports
module.exports = route_sitemap;