diff options
author | Tom Smeding <tom.smeding@gmail.com> | 2020-06-18 21:48:33 +0200 |
---|---|---|
committer | Tom Smeding <tom.smeding@gmail.com> | 2020-06-18 22:15:14 +0200 |
commit | e66f29ff85392e3c06e9033e37ead06a9d9d5daa (patch) | |
tree | 96c2328a9b9df299373290e7bd389e6f7833e9bf /modules/blog/template.js | |
parent | e92239cec7151cbd3bf1b025375fae70505fe6be (diff) |
Add blog
Diffstat (limited to 'modules/blog/template.js')
-rw-r--r-- | modules/blog/template.js | 56 |
1 files changed, 56 insertions, 0 deletions
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 = `<div class="tree-node tree-file"><a href="/${path}/${entry}">${entry}</a></div>\n`; + out += elt; + } else { // subdirectory + out += '<div class="tree-node tree-dir">\n'; + out += `<span class="tree-dir-name">${entry}/</span>\n`; + out += '<div class="tree-sub">\n'; + out += generateTree(sub, path + "/" + entry); + out += "</div></div>\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("<!-- REPLACE TREE -->", generateTree(tree, pathRoot)); + if (contentPath) { + const content = await fs.readFile(repodir + "/" + contentPath, { encoding: "utf-8" }); + html = html.replace("<!-- REPLACE CONTENT -->", content); + } + + return html; +} + +module.exports = template; |