lintry

封装显示markdown的模块

......@@ -12,7 +12,8 @@ const configure = customize({
"md": {
"base_path": "md",
"default_md": "readme.md",
"theme": "metro-lake"
"theme": "metro-lake",
"toc": true
}
});
......
/**
* view-markdown
* Created by lintry on 2018/1/9.
*/
const path = require('path');
class ViewMarkdown {
constructor (options) {
this.options = options || {};
if (!this.options.base_path) {
throw new Error('no base path for markdown')
}
}
render (filename, theme) {
const options = this.options;
//默认md
if (!filename || filename.match(/.+\/$/)) {
filename = (filename || '') + options.default_md || 'readme.md'
}
let file = path.resolve(options.base_path, filename);
if (!path.parse(file).ext) {
//追加后缀
file += '.md'
}
const mdview = new (require('./mdview'))({parseTokens: true, toc: options.toc});
let result = mdview.renderFile(file);
let tittle = result.tokens && result.tokens[1] && result.tokens[1].content || filename;
theme = theme || options.theme;
return `
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>${tittle}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/markdown.css">
<link rel="stylesheet" href="/${theme}/${theme}.css">
</head>
<body>
<div class='markdown ${theme}'>
${result.html}
</div>
</body
</html>
`;
}
}
module.exports = ViewMarkdown
\ No newline at end of file
......@@ -3,54 +3,24 @@ const app = express();
const config = require('./init/config');
const mdview = new (require('./lib/mdview'))({parseTokens: true, toc: true}),
path = require('path');
const path = require('path');
const MARKDOWN_FILE_BASE = path.resolve(process.cwd(), config.md.base_path);
app.use(express.static(__dirname + '/themes'));
app.use(express.static(MARKDOWN_FILE_BASE));
function sendTemplate (filename, theme) {
//默认md
if (!filename || filename.match(/.+\/$/)) {
filename = (filename || '') + config.md.default_md
}
let file = path.resolve(MARKDOWN_FILE_BASE, filename);
if (!path.parse(file).ext) {
//追加后缀
file += '.md'
}
let result = mdview.renderFile(file);
let tittle = result.tokens && result.tokens[1] && result.tokens[1].content || filename;
theme = theme || config.md.theme;
return `
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>${tittle}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/markdown.css">
<link rel="stylesheet" href="/${theme}/${theme}.css">
</head>
<body>
<div class='markdown ${theme}'>
${result.html}
</div>
</body
</html>
`;
}
app.get('/**', function (req, res, next) {
function viewMarkdown (req, res, next) {
let url = req.url, urls = url.match(/^\/([\/\w]+)/) || [], query = req.query;
let ext = path.parse(url).ext;
if (ext && ext !== 'md') {
return next();
}
res.send(sendTemplate(urls[1], query.t));
})
const viewer = new (require('./lib/view-markdown'))(config.md);
res.send(viewer.render(urls[1], query.t));
}
app.get('/*', viewMarkdown);
const PORT = config.system.bind_port;
app.listen(PORT);
......