From 7e52727bf0f80209ddbceb8287f93bae273805a4 Mon Sep 17 00:00:00 2001 From: bingus_violet Date: Sun, 7 Jul 2024 23:33:16 -0500 Subject: [PATCH] Blog in development --- api.js | 55 ++++++- ...code-sans-expanded-v11-latin-regular.woff2 | Bin 0 -> 23400 bytes .../source-code-pro-v23-latin-regular.woff2 | Bin 0 -> 11048 bytes assets/html/blog.html | 33 ++++ blog.js | 33 ++++ index.js | 2 + package-lock.json | 39 +++++ package.json | 1 + pageUpdater.js | 50 +++++- static/blog/index.html | 37 +++++ static/blog/style.css | 147 ++++++++++++++++++ static/index.html | 2 +- 12 files changed, 389 insertions(+), 10 deletions(-) create mode 100644 assets/fonts/encode-sans-expanded-v11-latin-regular.woff2 create mode 100644 assets/fonts/source-code-pro-v23-latin-regular.woff2 create mode 100644 assets/html/blog.html create mode 100644 blog.js create mode 100644 static/blog/index.html create mode 100644 static/blog/style.css diff --git a/api.js b/api.js index ab08787..8605a92 100644 --- a/api.js +++ b/api.js @@ -14,6 +14,9 @@ module.exports = { "connected": false, "lastLanyardUpdate": Date.now(), + "blogConnected": false, + "blogPosts": undefined, + "events": events, "spins": 0, @@ -69,4 +72,54 @@ function socketeer() { }) } -socketeer() \ No newline at end of file +socketeer() + +function blogSocket() { + var blog = new WebSocket('https://blog.violets-purgatory.dev') + + blog.on("error", (error) => { + console.log(error) + }) + + blog.on("close", () => { + console.log("Connection Closed. Attempting Reconnect in 30 seconds.") + module.exports.blogConnected = false + setTimeout(() => { + blogSocket() + }, 30000); + }) + + function ping(dur) { + blog.send(JSON.stringify({ + type: "ping" + })) + setTimeout(() => { + ping(dur) + if (Date.now() - lastPong > 120000) { + blog.close() + console.log("Max duration since last pong exceeded- Closing socket.") + } + }, dur); + } + + blog.addEventListener("message", async (res) => { + var data = JSON.parse(res.data) + if (data.type == "init") { + console.log("Connected to Blog Websocket!") + module.exports.blogConnected = true + ping(30000) + lastPong = Date.now() + events.emit("blogConnect") + } else if (data.type == "ping") { + lastPong = Date.now() + } else if (data.type == "allPosts") { + console.log("Recieved posts!") + module.exports.blogPosts = data.data + events.emit("blogUpdate") + } else { + console.log(data) + } + }) +} + +blogSocket() \ No newline at end of file diff --git a/assets/fonts/encode-sans-expanded-v11-latin-regular.woff2 b/assets/fonts/encode-sans-expanded-v11-latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..dbdfcebcd5bfa89b098b15c2b849a000d1008a05 GIT binary patch literal 23400 zcmV)GK)%0sPew8T0RR9109$AP5dZ)H0N(5X09yh80RR9100000000000000000000 z0000QffyUr8XS*u24Db%I0%6@37QrW2nvFX7=h_j3xy;A0X7081Bx;PAO(bO2aqTX zfiWA_$p_He_8{C2KrT=B8DciV2IoQL&p0@xXhaSh2Qcz9FZ=&LDXEOH?dW!Zh)lJh zNKoX=3=A8!Wrccc%Fˡ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 ix+~(budP9n?YD-|;xONG;vV<|2 + + + + + + + + + + + + {BLOG_TITLE} + + + + + + + + + + + {WEATHER_MODIFIER} + + {TOPBAR} +

Blog

+
+ {BLOG_POST} +
+ + + \ No newline at end of file diff --git a/blog.js b/blog.js new file mode 100644 index 0000000..9c182ed --- /dev/null +++ b/blog.js @@ -0,0 +1,33 @@ +const api = require("./api.js"), +app = require("./expressHandler.js").app, +showdown = require("showdown"), +pageUpdater = require("./pageUpdater.js"), +fs = require("fs"), +path = require("path") +mkhtml = new showdown.Converter() + +mkhtml.setFlavor("github") + +app.use((req, res, next) => { + if (req.path.includes("blog") && api.blogPosts) { + var postName = decodeURIComponent(req.path.substring(6, req.path.length - 1)) + for (var i = 0; i < api.blogPosts.length; i++) { + var post = api.blogPosts[i] + + if (post.folder == postName || post.folder == decodeURIComponent(post.title)) { + var mkdwn = post.data + var html = mkhtml.makeHtml(mkdwn) + + html = fs.readFileSync(path.join(__dirname, "assets/html/blog.html")).toString().replace("{BLOG_POST}", html) + + html = pageUpdater.converter(html, false) + + res.send(html) + return + } + } + next() + } else { + next() + } +}) \ No newline at end of file diff --git a/index.js b/index.js index f18948c..a68365e 100644 --- a/index.js +++ b/index.js @@ -2,6 +2,8 @@ const fs = require("fs") require("./fileHandler.js") require('./expressHandler.js') +require("./pageUpdater.js") +require("./blog.js") // require("./imageEmbedder.js") process.on('uncaughtException', (err, origin) => { diff --git a/package-lock.json b/package-lock.json index 86c401b..be0ecd7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "glob": "^10.4.2", "himalaya": "^1.1.0", "minify-html": "^0.0.2", + "showdown": "^2.1.0", "ws": "^8.16.0", "youtubei.js": "^9.0.2" } @@ -282,6 +283,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -1235,6 +1245,22 @@ "node": ">=8" } }, + "node_modules/showdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", + "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", + "license": "MIT", + "dependencies": { + "commander": "^9.0.0" + }, + "bin": { + "showdown": "bin/showdown.js" + }, + "funding": { + "type": "individual", + "url": "https://www.paypal.me/tiviesantos" + } + }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -1802,6 +1828,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" + }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -2470,6 +2501,14 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, + "showdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", + "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", + "requires": { + "commander": "^9.0.0" + } + }, "side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", diff --git a/package.json b/package.json index 1c7cf98..7b4a677 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "glob": "^10.4.2", "himalaya": "^1.1.0", "minify-html": "^0.0.2", + "showdown": "^2.1.0", "ws": "^8.16.0", "youtubei.js": "^9.0.2" } diff --git a/pageUpdater.js b/pageUpdater.js index 249f48d..498cfe5 100644 --- a/pageUpdater.js +++ b/pageUpdater.js @@ -89,7 +89,20 @@ function highlighter(json, full = true) { var element = json[i] if (element.type == "element") { if (element.children.length > 0) { - element.children = highlighter(element.children, full) + if (element.attributes) { + var valid = true + for (var x in element.attributes) { + var attribute = element.attributes[x] + if (attribute.key == "class" && attribute.value == "value") { + valid = false + break + } + } + } + + if (valid) { + element.children = highlighter(element.children, full) + } } } else if (element.type == "text") { var index = 0 @@ -291,6 +304,26 @@ function converter(html, dynamic = true) { } return html }, + "BLOG_POSTS": () => { + var addedHTML = "" + for (var i in api.blogPosts) { + var post = api.blogPosts[i] + addedHTML += + `
` + } + if (!api.blogConnected) { + addedHTML += "

Not connected to blog server :(

" + } else if (addedHTML.length < 10) { + addedHTML += "

No blog posts found...
wait
huh ???
what???????
how ???????????????
WHY ?!
Violet must've fucked up like. REALLY bad.
We're so cooked

" + } + return addedHTML + } } var realtimeReplacers = { @@ -389,14 +422,13 @@ module.exports = { } res.send(data) - } else { - res.status(404).send(` - -

404

-

Uh oh... I think your lost? There's nothing here :P

- `) + } + else { + next() } - } + }, + + converter: converter } async function updateCommits() { @@ -438,6 +470,8 @@ pregenerate() api.events.on("lanyardConnect", pregenerate) +api.events.on("blogUpdate", pregenerate) + api.events.on("lanyardUpdate", async () => { if (!api.lanyard.activityChanged) { pregenerate() diff --git a/static/blog/index.html b/static/blog/index.html new file mode 100644 index 0000000..e1d2226 --- /dev/null +++ b/static/blog/index.html @@ -0,0 +1,37 @@ + + + + + + + + + + + + + Blog - Violet's Purgatory + + + + + + + + + + + {WEATHER_MODIFIER} + + {TOPBAR} +
+

Blog

+

Welcome to my blog! Where I go on nonsensical rants about uninteresting and unimportant topics. The blog just went through a MAJOR rewrite, so expect bugs!

+
+
+ {BLOG_POSTS} +
+
+ + + \ No newline at end of file diff --git a/static/blog/style.css b/static/blog/style.css new file mode 100644 index 0000000..af27a20 --- /dev/null +++ b/static/blog/style.css @@ -0,0 +1,147 @@ +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: url('../fonts/source-code-pro-v23-latin-regular.woff2') format('woff2'); +} + +@font-face { + font-display: swap; + font-family: 'Rubik'; + font-style: normal; + font-weight: 400; + src: url('../fonts/rubik-v28-latin-regular.woff2') format('woff2'); +} + +@font-face { + font-display: swap; + font-family: 'Encode Sans Expanded'; + font-style: normal; + font-weight: 400; + src: url('../fonts/encode-sans-expanded-v11-latin-regular.woff2') format('woff2'); +} + +* { + font-family: "Encode Sans Expanded", "Rubik", Verdana, Geneva, Tahoma, sans-serif; + padding: 0; + /* text-align: center; */ +} + +h1 { + color: rgb(0, 255, 0); + font-size: 2.5rem; + text-align: center; +} + +h2 { + color: rgb(0, 255, 0); +} + +li, +h3, h4, h5, h6 { + color: white; +} + +h3 { + font-size: 1.5rem; +} + +body, +html { + margin: auto; + background-color: rgb(10, 10, 10); + margin: 0; + padding: 0; +} + +a { + color: rgb(175, 225, 255); + display: inline-block; + transition: 1.5s all cubic-bezier(0.075, 0.82, 0.165, 1); +} + +.textBlock { + color: rgb(255, 255, 255); + white-space: pre-wrap; + background-color: rgb(20, 20, 20); + border: 2px lightgray solid; + padding: 0 10px; + font-style: italic; + font-family: 'Source Code Pro', sans-serif; + text-align: center; +} + +.post { + color: rgb(240, 240, 240); + background-color: rgb(5, 5, 5); + border: 2px gray solid; + padding: 10px; + padding-top: 0; + margin: 25px 10px; + text-align: center; +} + +a:hover { + color: white; + transition: 0.5s all cubic-bezier(0.075, 0.82, 0.165, 1); +} + +p, li { + color: white; + font-size: 1.2rem; + padding: 0; + margin: 10px; + line-height: 2rem; +} + +img { + width: 100%; + max-width: 135px; + transition: all 2s cubic-bezier(0.075, 0.82, 0.165, 1); +} + +hr { + color: white; + opacity: 0.25; + border-width: 2px; + margin: 15px 10%; +} + +ol, ul { + display: block; + width: 80%; + margin: auto; +} + +#topbar { + background-color: rgb(50, 125, 50, 0.5); + width: 100%; + padding: 0.5vh 0px; + margin-bottom: 1vh; + /* position: sticky; */ + left: 0px; + top: 0px; + z-index: 10; + /* opacity: 0.5; */ + transform: scale(1); + transition: all 2s cubic-bezier(0.075, 0.82, 0.165, 1); +} + +#topbar > * > * { + text-align: center; + display: inline-block; + margin: auto; + padding: 0 2%; +} + +#topbar > h3 { + display: block; + text-align: center; +} + +main:nth-of-type(1), .mainDiv { + width: 95%; + max-width: 1000px; + margin: auto; +} \ No newline at end of file diff --git a/static/index.html b/static/index.html index ffa41d8..688a5ba 100644 --- a/static/index.html +++ b/static/index.html @@ -58,7 +58,7 @@ Stats Nerd FAQ {BRANCH_NAME} site - Blog + Blog FileShare
+ +

${post.title}

+

${post.desc}

+

Path: /${post.folder}/

+
+