blob: 38ce72eb1898fd4f0d97354854e2cb44ffd89cae (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
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("$template");
tree.delete("index");
let html = await fs.readFile(repodir + "/$template.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;
|