diff options
Diffstat (limited to 'index.js')
-rw-r--r-- | index.js | 161 |
1 files changed, 103 insertions, 58 deletions
@@ -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 |