summaryrefslogtreecommitdiff
path: root/index.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2022-01-21 14:39:46 +0100
committerMinteck <contact@minteck.org>2022-01-21 14:39:46 +0100
commit3a04cb197f152f171fba679663a91a9bb61d710e (patch)
tree825d8f9b0daab3e434d85704144ca87492da9b92 /index.js
parentc2aa7bf38fb30de2d04f87f8e7780e4c768ae6b1 (diff)
downloadcobalt-3a04cb197f152f171fba679663a91a9bb61d710e.tar.gz
cobalt-3a04cb197f152f171fba679663a91a9bb61d710e.tar.bz2
cobalt-3a04cb197f152f171fba679663a91a9bb61d710e.zip
Add config management
Diffstat (limited to 'index.js')
-rw-r--r--index.js161
1 files changed, 103 insertions, 58 deletions
diff --git a/index.js b/index.js
index 20bcebf..d63ec35 100644
--- a/index.js
+++ b/index.js
@@ -1,12 +1,31 @@
+global.version = "1.2";
+
+const YAML = require('yaml');
+const ejs = require('ejs');
+
const fs = require('fs');
const path = require('path');
-const uniqueid = require('./modules/uniqueid');
const md = require('markdown-it')("commonmark", {
html: true,
linkify: true,
typographer: true
});
+const uniqueid = require('./modules/uniqueid');
+const containsPublishTag = require('./modules/publishtag');
+const removeFromSitemap = require('./modules/removesm');
+
+if (!fs.existsSync("./config.yml")) fs.copyFileSync("./config.default.yml", "./config.yml");
+if (!fs.existsSync("./data")) fs.mkdirSync("./data");
+
+if (fs.readdirSync("./data").length < 1) {
+ console.log("Your data folder is empty, add at least one Markdown file and start the rendering process again.");
+ process.exit(1);
+}
+
+global.config = YAML.parse(fs.readFileSync("./config.yml").toString());
+global.config._version = global.version;
+
global.files = [];
global.directories = [];
global.sitemap = "";
@@ -31,31 +50,47 @@ function analyze(dir, levels) {
sitemap = sitemap + "\n" + " ".repeat(levels - 1) + "* [" + file + "](./" + id + "/index.html)";
analyze(dir + "/" + file, levels + 1);
} else if (file.endsWith(".md")) {
- if (path.basename(file) === "index.md") {
- id = uniqueid(dir + "/" + file)
- files.push({
- source: dir + "/" + file,
- dest: "./output/" + uniqueid(path.dirname(dir + "/" + file)) + "/index.html",
- name: file,
- id,
- parent: {
- path: "./index.html",
- name: "index"
- }
- })
- } else {
- id = uniqueid(dir + "/" + file)
- files.push({
- source: dir + "/" + file,
- dest: "./output/" + uniqueid(path.dirname(dir + "/" + file)) + "/" + id + ".html",
- name: file,
- id,
- parent: {
- path: "./" + uniqueid(path.dirname(dir + "/" + file)) + "/index.html",
- name: path.basename(path.dirname(dir + "/" + file))
+ if (!config.conditional_publishing || containsPublishTag(dir + "/" + file)) {
+ if (path.basename(file) === "index.md") {
+ if (dir === "./data") {
+ id = uniqueid(dir + "/" + file)
+ files.push({
+ source: dir + "/" + file,
+ dest: "./output/index.html",
+ name: file,
+ id,
+ parent: {
+ path: "./index.html",
+ name: "index"
+ }
+ })
+ } else {
+ id = uniqueid(dir + "/" + file)
+ files.push({
+ source: dir + "/" + file,
+ dest: "./output/" + uniqueid(path.dirname(dir + "/" + file)) + "/index.html",
+ name: file,
+ id,
+ parent: {
+ path: "./index.html",
+ name: "index"
+ }
+ })
}
- })
- sitemap = sitemap + "\n" + " ".repeat(levels - 1) + "* [" + file.substring(0, file.length - 3) + "](./" + uniqueid(path.dirname(dir + "/" + file)) + "/" + id + ".html)";
+ } else {
+ id = uniqueid(dir + "/" + file)
+ files.push({
+ source: dir + "/" + file,
+ dest: "./output/" + uniqueid(path.dirname(dir + "/" + file)) + "/" + id + ".html",
+ name: file,
+ id,
+ parent: {
+ path: "./" + uniqueid(path.dirname(dir + "/" + file)) + "/index.html",
+ name: path.basename(path.dirname(dir + "/" + file))
+ }
+ })
+ sitemap = sitemap + "\n" + " ".repeat(levels - 1) + "* [" + file.substring(0, file.length - 3) + "](./" + uniqueid(path.dirname(dir + "/" + file)) + "/" + id + ".html)";
+ }
}
}
}
@@ -76,31 +111,33 @@ function aanalyze(dir, levels) {
asitemap = asitemap + "\n" + " ".repeat(levels - 1) + "* [" + file + "](../" + id + "/index.html)";
aanalyze(dir + "/" + file, levels + 1);
} else if (file.endsWith(".md")) {
- if (path.basename(file) === "index.md") {
- id = uniqueid(dir + "/" + file)
- afiles.push({
- source: dir + "/" + file,
- dest: "./output/" + uniqueid(path.dirname(dir + "/" + file)) + "/index.html",
- name: file,
- id,
- parent: {
- path: "./index.html",
- name: "index"
- }
- })
- } else {
- id = uniqueid(dir + "/" + file)
- afiles.push({
- source: dir + "/" + file,
- dest: "./output/" + uniqueid(path.dirname(dir + "/" + file)) + "/" + id + ".html",
- name: file,
- id,
- parent: {
- path: "./" + uniqueid(path.dirname(dir + "/" + file)) + "/index.html",
- name: path.basename(path.dirname(dir + "/" + file))
- }
- })
- asitemap = asitemap + "\n" + " ".repeat(levels - 1) + "* [" + file.substring(0, file.length - 3) + "](../" + uniqueid(path.dirname(dir + "/" + file)) + "/" + id + ".html)";
+ if (!config.conditional_publishing || containsPublishTag(dir + "/" + file)) {
+ if (path.basename(file) === "index.md") {
+ id = uniqueid(dir + "/" + file)
+ afiles.push({
+ source: dir + "/" + file,
+ dest: "./output/" + uniqueid(path.dirname(dir + "/" + file)) + "/index.html",
+ name: file,
+ id,
+ parent: {
+ path: "./index.html",
+ name: "index"
+ }
+ })
+ } else {
+ id = uniqueid(dir + "/" + file)
+ afiles.push({
+ source: dir + "/" + file,
+ dest: "./output/" + uniqueid(path.dirname(dir + "/" + file)) + "/" + id + ".html",
+ name: file,
+ id,
+ parent: {
+ path: "./" + uniqueid(path.dirname(dir + "/" + file)) + "/index.html",
+ name: path.basename(path.dirname(dir + "/" + file))
+ }
+ })
+ asitemap = asitemap + "\n" + " ".repeat(levels - 1) + "* [" + file.substring(0, file.length - 3) + "](../" + uniqueid(path.dirname(dir + "/" + file)) + "/" + id + ".html)";
+ }
}
}
}
@@ -130,8 +167,8 @@ for (let dir of directories) {
}
console.log("Loading templates...");
-header = fs.readFileSync("./templates/header.html").toString();
-footer = fs.readFileSync("./templates/footer.html").toString();
+header = fs.readFileSync("./templates/header.ejs").toString();
+footer = fs.readFileSync("./templates/footer.ejs").toString();
console.log("Generating sitemaps for every directory...");
for (let dir of directories) {
@@ -150,28 +187,36 @@ for (let dir of directories) {
console.log("Rendering pages...");
for (let page of files) {
content = md.render(fs.readFileSync(page.source).toString());
- fs.writeFileSync(page.dest, header.replaceAll("$TITLE$", page.name) + "<a href=\"." + page.parent.path + "\">« " + page.parent.name + "</a><hr>" + content + footer.replaceAll("$TITLE$", page.name));
+ fs.writeFileSync(page.dest, ejs.render(header, {config, name: page.name}) + "<header class=\"" + config.classes.header.join(" ") + "\"><a href=\"." + page.parent.path + "\">« " + page.parent.name + "</a><hr></header><article class=\"" + config.classes.article.join(" ") + "\">" + content + "</article>" + ejs.render(footer, {config, name: page.name}));
}
console.log("Generating home page...");
if (fs.existsSync("./data/index.md")) {
- content = md.render(fs.readFileSync(page.source).toString()) + "<hr>";
+ content = md.render(fs.readFileSync("./data/index.md").toString()) + "<hr>";
} else {
content = "";
}
-fs.writeFileSync("./output/index.html", header.replaceAll("$TITLE$", "Home") + "Home<hr>" + content + md.render(sitemap) + footer.replaceAll("$TITLE$", "Home"));
+fs.writeFileSync("./output/index.html", ejs.render(header, {config, name: "Home"}) + "<header class=\"" + config.classes.header.join(" ") + "\">Home<hr></header><article class=\"" + config.classes.article.join(" ") + "\">" + content + md.render(sitemap) + "</article>" + ejs.render(footer, {config, name: "Home"}));
console.log("Generating missing index files...");
for (let dir of directories) {
if (!fs.existsSync(dir.dest + "/index.html")) {
if (sitemaps[dir.id].trim() !== "") {
- fs.writeFileSync(dir.dest + "/index.html", header.replaceAll("$TITLE$", dir.name) + "<a href=\"../index.html\">« index</a><hr>" + md.render(sitemaps[dir.id]) + footer.replaceAll("$TITLE$", dir.name));
+ fs.writeFileSync(dir.dest + "/index.html", ejs.render(header, {config, name: dir.name}) + "<header class=\"" + config.classes.header.join(" ") + "\"><a href=\"../index.html\">« index</a><hr></header><article class=\"" + config.classes.article.join(" ") + "\">" + md.render(sitemaps[dir.id]) + "</article>" + ejs.render(footer, {config, name: dir.name}));
} else {
- fs.writeFileSync(dir.dest + "/index.html", "<script>location.href = \"../index.html\";</script>");
+ removeFromSitemap(dir.id);
+ console.log("Generating home page...");
+ if (fs.existsSync("./data/index.md")) {
+ content = md.render(fs.readFileSync("./data/index.md").toString()) + "<hr>";
+ } else {
+ content = "";
+ }
+ fs.writeFileSync("./output/index.html", ejs.render(header, {config, name: "Home"}) + "<header class=\"" + config.classes.header.join(" ") + "\">Home<hr></header><article class=\"" + config.classes.article.join(" ") + "\">" + content + md.render(sitemap) + "</article>" + ejs.render(footer, {config, name: "Home"}));
+ fs.writeFileSync(dir.dest + "/index.html", ejs.render(header, {config, name: dir.name}) + "<header class=\"" + config.classes.header.join(" ") + "\"><a href=\"../index.html\">« index</a><hr></header><article class=\"" + config.classes.article.join(" ") + "\"><p><i>This folder is empty</i></p></article>" + ejs.render(footer, {config, name: dir.name}));
}
} else {
if (sitemaps[dir.id].trim() !== "") {
- fs.writeFileSync(dir.dest + "/index.html", header.replaceAll("$TITLE$", dir.name) + "<a href=\"../index.html\">« index</a><hr>" + md.render(fs.readFileSync(dir.source + "/index.md").toString()) + "<hr>" + md.render(sitemaps[dir.id]) + footer.replaceAll("$TITLE$", dir.name));
+ fs.writeFileSync(dir.dest + "/index.html", ejs.render(header, {config, name: dir.name}) + "<header class=\"" + config.classes.header.join(" ") + "\"><a href=\"../index.html\">« index</a><hr></header><article class=\"" + config.classes.article.join(" ") + "\">" + md.render(fs.readFileSync(dir.source + "/index.md").toString()) + "<hr>" + md.render(sitemaps[dir.id]) + "</article>" + ejs.render(footer, {config, name: dir.name}));
}
}
} \ No newline at end of file