]> git.r.bdr.sh - rbdr/blog/commitdiff
Add TXT support
authorBen Beltran <redacted>
Wed, 3 Jun 2020 05:40:42 +0000 (07:40 +0200)
committerBen Beltran <redacted>
Wed, 3 Jun 2020 05:40:42 +0000 (07:40 +0200)
CHANGELOG.md
lib/blog.js
lib/generators/txt.js [new file with mode: 0644]
templates/index.txt [new file with mode: 0644]

index 1e3b1f86707ad8e37d45b949810e3bea2d4d8c9b..a38a69d02c76a4c9a9f15ba99318afd9375d275c 100644 (file)
@@ -7,7 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
 ## Unreleased
 ### Added
 - Post Metadata support
-- RSS Support
+- RSS support
+- TXT support
 
 ### Changed
 - Updated dependencies
index 98efabdf1fc618636390ef5874704aa0f9028bc7..541d6b35da767e6771b7a48dbac9e079253b70c2 100644 (file)
@@ -9,6 +9,7 @@ const { debuglog, promisify } = require('util');
 const StaticGenerator = require('./generators/static');
 const HTMLGenerator = require('./generators/html');
 const RSSGenerator = require('./generators/rss');
+const TXTGenerator = require('./generators/txt');
 
 const internals = {
 
@@ -108,6 +109,7 @@ module.exports = class Blog {
     await StaticGenerator(this.postsDirectory, this.staticDirectory, posts);
     await HTMLGenerator(this.templatesDirectory, this.staticDirectory, posts);
     await RSSGenerator(this.templatesDirectory, this.staticDirectory, posts);
+    await TXTGenerator(this.templatesDirectory, this.staticDirectory, posts);
   }
 
   // Reads the posts into an array
@@ -134,7 +136,8 @@ module.exports = class Blog {
         internals.debuglog('Parsing markdown');
         posts.push({
           ...metadata,
-          html: Marked(postContent)
+          html: Marked(postContent),
+          raw: postContent
         });
       }
       catch (error) {
diff --git a/lib/generators/txt.js b/lib/generators/txt.js
new file mode 100644 (file)
index 0000000..af5ec9c
--- /dev/null
@@ -0,0 +1,38 @@
+'use strict';
+
+const { template, templateSettings } = require('dot');
+const { readFile, writeFile } = require('fs/promises');
+const { join } = require('path');
+const { debuglog } = require('util');
+
+const internals = {
+  debuglog: debuglog('blog'),
+
+  kTextName: 'index.txt'
+};
+
+/**
+ * Generates a TXT version of the blog
+ *
+ * @name TXTGenerator
+ * @param {string} source the source directory
+ * @param {string} target the target directory
+ * @param {Array.<Blog.tPost>} posts the list of posts
+ */
+module.exports = async function TXTGenerator(source, target, posts) {
+
+  internals.debuglog('Generating TXT');
+  const textTarget = join(target, internals.kTextName);
+  const textLocation = join(source, internals.kTextName);
+
+  internals.debuglog(`Reading ${textLocation}`);
+  const textTemplate = await readFile(textLocation, { encoding: 'utf8' });
+
+  internals.debuglog('Writing TXT');
+  const text = template(textTemplate, {
+    ...templateSettings,
+    strip: false
+  })({ posts });
+  await writeFile(textTarget, text);
+};
+
diff --git a/templates/index.txt b/templates/index.txt
new file mode 100644 (file)
index 0000000..b3b27a9
--- /dev/null
@@ -0,0 +1,18 @@
+╔══════════════════════════════════════════════════════════════════════════════╗
+║                                                                              ║
+║                         The Blog at Unlimited Pizza                          ║
+║                                                                              ║
+╚══════════════════════════════════════════════════════════════════════════════╝
+┌──────────────────────────────────────────────────────────────────────────────┐
+│                       Written by Rubén Beltrán del Río                       │
+└──────────────────────────────────────────────────────────────────────────────┘
+
+{{~ it.posts: post}}
+{{= post.raw}}
+■──────────────────────────────────────────────────────────────────────────────■
+{{~}}
+{{? it.posts.length === 0}}
+# This is a fresh blog!
+
+There are no posts yet.
+{{?}}