Explorar o código

App now creates html files from articles.
App now serves those html files on dynamically created routes.

Lee Morgan %!s(int64=5) %!d(string=hai) anos
pai
achega
a8c205d6f0
Modificáronse 3 ficheiros con 97 adicións e 1 borrados
  1. 3 0
      app.js
  2. 1 1
      controllers/writing.js
  3. 93 0
      htmlCreator.js

+ 3 - 0
app.js

@@ -1,3 +1,5 @@
+const htmlCreator = require("./htmlCreator.js");
+
 const express = require("express");
 const compression = require("compression");
 const mongoose = require("mongoose");
@@ -5,6 +7,7 @@ const https = require("https");
 const fs = require("fs");
 
 const app = express();
+htmlCreator(app);
 
 let mongooseOptions = {
     useNewUrlParser: true,

+ 1 - 1
controllers/writing.js

@@ -1,4 +1,4 @@
-const Comment = require("./models/comment.js");
+const Comment = require("../models/comment.js");
 
 const fs = require("fs");
 

+ 93 - 0
htmlCreator.js

@@ -0,0 +1,93 @@
+const fs = require("fs");
+
+module.exports = (app)=>{
+    let createHTML = (dir)=>{
+        let article = fs.readFileSync(`${dir}/article.txt`).toString().split("\n");
+        let meta = fs.readFileSync(`${dir}/meta.txt`).toString().split("\n");
+        let route = dir.substring(dir.indexOf("/content/writing/") + 17).replace(/\//g, "-");
+
+        let html = `
+        <!DOCTYPE html>
+        <html lang="en">
+            <head>
+                <meta charset="utf-8">
+                <title>${meta[0]}</title>
+                <link rel="stylesheet" href="/writing/style">
+            </head>
+            <body>
+                <div class="article">
+                    <h1>${meta[0]}</h1>
+
+                    <h3>${meta[1]}</h3>
+        `;
+
+        for(let i = 0; i < article.length; i++){
+            if(article[i] === "") continue;
+
+            html += `<p class="paragraph">${article[i]}</p>`;
+        }
+
+        html += `
+                    </div>
+
+                    <form id="createComment">
+                        <h2>Add Comment</h2>
+
+                        <label>Display Name:
+                            <input id="nameInput" type="text">
+                        </label>
+
+                        <label>Comment:
+                            <textarea id="commentInput" rows="10" columns="80" required></textarea>
+                        </label>
+
+                        <input type="Submit" value="SUBMIT">
+
+                        <input id="articleInput" type="hidden" article="${route}">
+                    </form>
+
+                    <div id="comments">
+                        <h2>Comments</h2>
+                        
+                        <template id="comment">
+                            <div class="comment">
+                                <div>
+                                    <h3></h3>
+
+                                    <p></p>
+                                </div>
+                                
+                                <p></p>
+                            </div>
+                        </template>
+                    </div>
+
+                    <script src="/writing/code"></script>
+                </body>
+            </html>
+        `
+
+        fs.writeFileSync(`${dir}/article.html`, html);
+    }
+
+    let createRoute = (dir)=>{
+        let route = dir.substring(dir.indexOf("/content/writing/") + 8);
+
+        app.get(route, (req, res)=>{res.sendFile(`${__dirname}/content/${route}/article.html`)});
+    }
+
+    let traverseDirectory = (dir)=>{
+        let contents = fs.readdirSync(dir);
+
+        let hasHtml = false;
+        for(let i = 0; i < contents.length; i++){
+            if(contents[i].includes(".") === false) return traverseDirectory(`${dir}/${contents[i]}`);
+            if(contents[i].includes(".html") === true) hasHtml = true;
+        }
+
+        if(hasHtml === false) createHTML(dir);
+        createRoute(dir);
+    }
+
+    traverseDirectory(`${__dirname}/content/writing`);
+}