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.
 
 
 
 

90 lines
2.3 KiB

const fs = require('fs');
const path = require('path');
const assert = require('assert');
const marked = require('marked');
const getPostMeta = (author='bcoin-org') => '<ul class="post-meta">'
+ '<li class="author">By ' + author + '</li>'
+ '</ul>';
const insertToTemplate = (template, targetText, customText) => {
assert(typeof template === 'string', 'template must be a string');
assert(typeof customText === 'string', 'customText must be a string');
const templateByLine = template.split('\n');
const customTextByLine = customText.split('\n');
let startLine = 0;
for (let i=0; i < templateByLine.length; i++) {
if (templateByLine[i].indexOf(targetText) > -1) {
startLine = i + 1;
break;
}
}
templateByLine.splice(startLine, 0, ...customTextByLine);
return templateByLine.join('\n');
}
const getPostInfo = function getPostInfo(pathToFiles, postMeta) {
const posts = [];
const renderer = new marked.Renderer();
// Add text to list of titles if in a header level 1 or 2
renderer.heading = (text, level) => {
if (level == '1' ) {
let iconCloseTag = text.indexOf('</i>')
if ( iconCloseTag > -1) {
text = text.slice(iconCloseTag + 4);
}
posts[0].title = text;
}
}
renderer.code = function (code, language) {
if (language === 'post-author') {
// only return code block if wasn't set by argument
posts[0].author = code;
return;
}
if (language === 'post-description') {
posts[0].description = code;
return;
}
}
marked.setOptions({
renderer,
gfm: true,
});
// Promisify the readdir so we can retrieve the titles when it's done
return new Promise((resolve, reject) => {
fs.readdir(pathToFiles, (err, files) => {
if (err) reject(err);
for (let i=0; i < files.length; i++) {
const file = files[i];
const ext = path.extname(file);
if (ext === '.md') {
posts.unshift({
fileName: file,
description: '',
author: ''
});
markdownFile = path.resolve(pathToFiles, file);
const markdownString = fs.readFileSync(markdownFile, 'utf8');
marked(markdownString);
}
}
resolve(posts);
});
});
}
module.exports = {
insertToTemplate,
getPostMeta,
getPostInfo
};