const { JSDOM } = require("jsdom"); const fs = require("fs"); require("showdown-prettify"); const showdown = require("showdown"); const converter = new showdown.Converter({ parseImgDimensions: true, headerLevelStart: 3, extensions: ["prettify"] }); module.exports = function () { let folder = __dirname + "/../"; fs.watchFile(folder + "blog/posts.json", function (curr, prev) { if (curr.mtime == prev.mtime) return; console.log("Refreshing blog sub-sites..."); fs.readFile(folder + "index.html", function (_, data) { // set up the template let templateDom = new JSDOM(data); var templateDoc = templateDom.window.document; templateDoc.getElementById("main").innerHTML = ""; let template = templateDom.serialize(); fs.readFile(folder + "blog/posts.json", function (_, data) { let json = JSON.parse(data); for (let post of json) { let id = post["id"]; fs.readFile(folder + "blog/" + id + ".md", function (_, content) { let dom = new JSDOM(template); var document = dom.window.document; document.title += " - " + post["name"]; document.querySelector('meta[property="og:title"]').setAttribute("content", post["name"]); document.querySelector('meta[name="description"]').setAttribute("content", post["summary"]); document.querySelector('meta[property="og:description"]').setAttribute("content", post["summary"]); document.getElementById("nav-items").innerHTML = 'Back to Main Page' var c = ""; c += '
'; c += '
' c += '

' + post["name"] + '

'; c += '
' c += converter.makeHtml(content.toString()); c += '
'; c += '' + post["date"] + ""; var discussLink = post["discuss"]; if (discussLink) c += 'Discuss this post' c += '
'; document.getElementById("main").innerHTML = c; let html = dom.serialize(); fs.writeFile(folder + "blog-" + id + ".html", html, function (_, _) {}); }); } }); }); }); }