UNPKG

node-framework

Version:

node-framework

120 lines (100 loc) 3 kB
/** * @file index.js ~ 2014-08-11 14:56 * @author sekiyika (px.pengxing@gmail.com) * @description * */ var markdown = require('markdown').markdown; var glob = require('glob'); var path = require('path'); var fs = require('fs'); var app = require('../')(); var list = []; // 启动的时候扫描所有的md文件,建立索引 app.component('scan', function () { function scan() { var docs = path.join(__dirname, 'docs'); var files = glob.sync('**/*.md', { cwd: docs, root: docs }); var newList = []; files.forEach(function (file) { var text = fs.readFileSync(path.join(docs, file)); var tree = markdown.parse(text.toString()); var data = { file: file, tree: tree }; data.pageTitle = getPageTitle(tree); data.tocTree = getTocTree(tree); newList.push(data); }); var seq = app.config.wiki.sequence; if (seq && (seq instanceof Array) && seq.length != 0) { var orderedList = []; for (var i in seq) { var title = seq[i]; for (var j in newList) { if (newList[j].pageTitle === title) { orderedList.push(newList[j]); newList.splice(j, 1); break; } } } if (newList.length > 0) { for (var i in newList) { orderedList.push(newList[i]); } } list = orderedList; } else { list = newList; } // 十秒钟之后重新scan setTimeout(scan, 10000); } scan(); return function () { return list; }; }); app.run(); function getPageTitle(tree) { var pageTitle; var token; for(var i = 0, l = tree.length; i < l; i++) { token = tree[i]; if (typeof token === 'object' && token !== null) { if (token[0] === 'header') { pageTitle = token[2]; break; } } } if (!pageTitle) { pageTitle = 'No Title'; } return pageTitle; } // @UPDATE by wangyisheng // 这里增加返回level,从而允许左侧树只显示h2。 // 因为显示h1会导致第一个标题总是重复的;而显示了h3,左侧树又只支持两级,会跟h2显示成兄弟节点,很混乱。 function getTocTree(tree) { var tocTree = []; var token; for (var i = 0, l = tree.length; i < l; i++) { token = tree[i]; if (typeof token === 'object' && token !== null) { if (token[0] === 'header') { tocTree.push({ title: token[2], url: '#' + token[2], level: token[1].level }); } } } return tocTree; }