Spaces:
Sleeping
Sleeping
const _ = require('lodash'); | |
const getTOC = (pages)=>{ | |
const add1 = (title, page)=>{ | |
res.push({ | |
title : title, | |
page : page + 1, | |
children : [] | |
}); | |
}; | |
const add2 = (title, page)=>{ | |
if(!_.last(res)) add1('', page); | |
_.last(res).children.push({ | |
title : title, | |
page : page + 1, | |
children : [] | |
}); | |
}; | |
const add3 = (title, page)=>{ | |
if(!_.last(res)) add1('', page); | |
if(!_.last(_.last(res).children)) add2('', page); | |
_.last(_.last(res).children).children.push({ | |
title : title, | |
page : page + 1, | |
children : [] | |
}); | |
}; | |
const res = []; | |
_.each(pages, (page, pageNum)=>{ | |
const lines = page.split('\n'); | |
_.each(lines, (line)=>{ | |
if(_.startsWith(line, '# ')){ | |
const title = line.replace('# ', ''); | |
add1(title, pageNum); | |
} | |
if(_.startsWith(line, '## ')){ | |
const title = line.replace('## ', ''); | |
add2(title, pageNum); | |
} | |
if(_.startsWith(line, '### ')){ | |
const title = line.replace('### ', ''); | |
add3(title, pageNum); | |
} | |
}); | |
}); | |
return res; | |
}; | |
module.exports = function(props){ | |
const pages = props.brew.text.split('\\page'); | |
const TOC = getTOC(pages); | |
const markdown = _.reduce(TOC, (r, g1, idx1)=>{ | |
r.push(`- **[${idx1 + 1} ${g1.title}](#p${g1.page})**`); | |
if(g1.children.length){ | |
_.each(g1.children, (g2, idx2)=>{ | |
r.push(` - [${idx1 + 1}.${idx2 + 1} ${g2.title}](#p${g2.page})`); | |
if(g2.children.length){ | |
_.each(g2.children, (g3, idx3)=>{ | |
r.push(` - [${idx1 + 1}.${idx2 + 1}.${idx3 + 1} ${g3.title}](#p${g3.page})`); | |
}); | |
} | |
}); | |
} | |
return r; | |
}, []).join('\n'); | |
return `<div class='toc'> | |
##### Table Of Contents | |
${markdown} | |
</div>\n`; | |
}; |