From e66f29ff85392e3c06e9033e37ead06a9d9d5daa Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Thu, 18 Jun 2020 21:48:33 +0200 Subject: Add blog --- modules/blog/template.js | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 modules/blog/template.js (limited to 'modules/blog/template.js') diff --git a/modules/blog/template.js b/modules/blog/template.js new file mode 100644 index 0000000..1f26e82 --- /dev/null +++ b/modules/blog/template.js @@ -0,0 +1,56 @@ +const fs = require("fs").promises; + +const pathRoot = "blog"; + +async function recursiveTree(dir) { + const res = new Map(); + + const entries = await fs.readdir(dir, { withFileTypes: true }); + for (const entry of entries) { + if (entry.name[0] == ".") continue; + + if (entry.isDirectory()) { + res.set(entry.name, await recursiveTree(dir + "/" + entry.name)); + } else if (entry.isFile() && entry.name.endsWith(".html")) { + res.set(entry.name.slice(0, entry.name.length - 5), true); + } + } + + return res; +} + +function generateTree(tree, path) { + let out = ""; + + for (const [entry, sub] of tree) { + if (sub === true) { // file + const elt = `
${entry}
\n`; + out += elt; + } else { // subdirectory + out += '
\n'; + out += `${entry}/\n`; + out += '
\n'; + out += generateTree(sub, path + "/" + entry); + out += "
\n"; + } + } + + return out; +} + +async function template(repodir, contentPath) { + const tree = await recursiveTree(repodir); + tree.delete("index"); + + let html = await fs.readFile(repodir + "/index.html", { encoding: "utf-8" }); + + html = html.replace("", generateTree(tree, pathRoot)); + if (contentPath) { + const content = await fs.readFile(repodir + "/" + contentPath, { encoding: "utf-8" }); + html = html.replace("", content); + } + + return html; +} + +module.exports = template; -- cgit v1.2.3-54-g00ecf