summaryrefslogtreecommitdiff
path: root/modules/blog/template.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/blog/template.js')
-rw-r--r--modules/blog/template.js56
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;