diff options
Diffstat (limited to '_posts')
-rw-r--r-- | _posts/hello_world.html | 9 | ||||
-rw-r--r-- | _posts/processPosts.js | 121 |
2 files changed, 130 insertions, 0 deletions
diff --git a/_posts/hello_world.html b/_posts/hello_world.html new file mode 100644 index 0000000..038f5db --- /dev/null +++ b/_posts/hello_world.html @@ -0,0 +1,9 @@ +<p> + Hello, world! +</p> +<p> + This is the first test of my simple, static blogging system. My goal is to avoid using anything too heavy and, instead, provide a simple script that will get run whenever I update a blog post. Heck, I could even set it up to a cronjob to refresh them everyday. But perhaps that is overkill for today 😆. I am satisfied with how it current works. +</p> +<p> + Expect to see some updates on Greek philosophy, emacs, and Linux coming soon to a website near you! +</p> diff --git a/_posts/processPosts.js b/_posts/processPosts.js new file mode 100644 index 0000000..9db4103 --- /dev/null +++ b/_posts/processPosts.js @@ -0,0 +1,121 @@ + + +const fs = require('fs'); +const path = require('path'); + +const tags = [ + { + id: 'personal', + title: 'Personal 👨' + } +] + +const posts = [ + { + url: "_posts/hello_world.html", + title: "Hello, World!", + tags: [ "personal" ] + } +]; + +function createTag(tag) { + return ` + <button id="${tag.id}">${tag.title}</button> + `; +} + +function createPostServableFile(post) { + const dir = path.resolve(path.join(__dirname, '..', 'posts')); + + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir); + } + + const baseFilePath = path.join(__dirname, '..', post.url); + const stats = fs.statSync(baseFilePath); + const content = fs.readFileSync(baseFilePath); + const fileName = post.url.substring(post.url.lastIndexOf('/')); + const filePath = path.join(dir, fileName); + fs.writeFileSync(filePath,` +<!DOCTYPE html> +<html lang="en"> + <head> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta charset="utf-8"> + <link rel="stylesheet" href="/index.css"> + <link rel="stylesheet" href="/posts.css"> + <title>Matthew Kosarek</title> + <link rel="shortcut icon" href="/favicon/favicon.ico" type="image/x-icon"> + </head> + <body> + <header> + <h1>Matthew Kosarek</h1> + <nav> + <ul> + <li><a href='/'>🏡 Home</a></li> + <li><a href='/resume.html'>📘 CV</a></li> + <li><a href="https://www.linkedin.com/in/matthew-kosarek/">🏢 LinkedIn</a></li> + <li><a href='/posts.html'>📝 Posts</a></li> + </ul> + </nav> + </header> + + <article> + <h2>${post.title}</h2> + <h3>Created ${stats.birthtime.toLocaleString()}. Last updated: ${stats.mtime.toLocaleString()}</h3> + ${content} + </article> + </body> +</html> + `) + return '/posts/' + fileName; +} + +function createPostLink(post) { + return ` + <li><a href="${createPostServableFile(post)}">${post.title}</a></li> + `; +} + +const output = ` +<!DOCTYPE html> +<html lang="en"> + <head> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta charset="utf-8"> + <link rel="stylesheet" href="/index.css"> + <link rel="stylesheet" href="/posts.css"> + <title>Matthew Kosarek</title> + <link rel="shortcut icon" href="/favicon/favicon.ico" type="image/x-icon"> + </head> + <body> + <header> + <h1>Matthew Kosarek</h1> + <nav> + <ul> + <li><a href='/'>🏡 Home</a></li> + <li><a href='/resume.html'>📘 CV</a></li> + <li><a href="https://www.linkedin.com/in/matthew-kosarek/">🏢 LinkedIn</a></li> + <li><a href='/posts.html'>📝 Posts</a></li> + </ul> + </nav> + </header> + + <section> + <h2>Tags</h2> + <div id='tag_list'> + ${tags.map(createTag)} + </div> + </section + + <section> + <h2>Posts</h2> + <ul id='post_list'> + ${posts.map(createPostLink)} + </ul> + </section> + </body> +</html> +` + +fs.writeFileSync(path.join(__dirname, '..', 'posts.html'), output); |