const express = require("express"), chokidar = require("chokidar"), fs = require("fs"), path = require("path"), showdown = require("showdown"), mkthtml = new showdown.Converter() mkthtml.setFlavor("github") const PORT = process.env.PORT || 8080 var dataPath = path.join(__dirname, 'data') var postsPath = path.join(dataPath, 'posts') var staticPath = path.join(__dirname, 'static') var watcher = chokidar.watch(postsPath) var app = express() app.use(express.static(staticPath)) var reqPaths = [dataPath, postsPath] for (var i = 0; i < reqPaths.length; i++) { var p = reqPaths[i] if (!fs.existsSync(p)) { fs.mkdirSync(p) } } app.listen(PORT, () => { console.log("Violet's Limbo is now listening on: " + PORT) }) function pageUpdate() { var postsArray = fs.readdirSync(postsPath).reverse() var html = "" for (var i = 0; i < postsArray.length; i++) { var addedHTML = "" var post = postsArray[i] post = post.substring(post.indexOf("]") + 2, post.length - 3) addedHTML += `

${post}

` html += addedHTML } var html = fs.readFileSync(path.join(__dirname, 'resources/mainPage.html')).toString().replace('{POSTS}', html) fs.writeFileSync(path.join(staticPath, 'index.html'), html) } watcher .on('add', pageUpdate) .on('change', pageUpdate) .on('unlink', pageUpdate) app.get('/post/:post*', (req, res) => { var postName = req.params.post var postsArray = fs.readdirSync(postsPath).reverse() var postsDict = {} for (let index = 0; index < postsArray.length; index++) { const post = postsArray[index]; postsDict[post.substring(post.indexOf("]") + 2, post.length - 3).split(' ').join('_')] = post } console.log(postsDict, postName) if (!postsDict[postName]) { var html = fs.readFileSync(path.join(__dirname, 'resources/postPage.html')).toString() html = html.replace("{POST_TITLE}", "Not found!") html = html.replace("{POST}", "

Couldn't find this post... Maybe try clearing your cache? Violet's Limbo is currently going through alot of backend changes, so expect things to break!

") res.send(html) return } postName = postsDict[postName] var post = fs.readFileSync(path.join(postsPath, postName)).toString() post = mkthtml.makeHtml(post) var html = fs.readFileSync(path.join(__dirname, 'resources/postPage.html')).toString() html = html.replace('{POST}', post) html = html.replace('{POST_TITLE}', postName.substring(postName.indexOf("]") + 2, postName.length - 3)) res.send(html) })