diff --git a/public/css/user.css b/public/css/user.css
index a0ecc09..55b4b89 100644
--- a/public/css/user.css
+++ b/public/css/user.css
@@ -3,25 +3,26 @@
font-weight: 700;
}
-.content{
-display: flex;
-flex-direction: column;
-box-shadow: 0 0 5px 0 #bebebe;
-max-width: 900px;
-margin: 0 auto;
-padding:10px;
+.content {
+ display: flex;
+ flex-direction: column;
+ box-shadow: 0 0 5px 0 #bebebe;
+ max-width: 900px;
+ margin: 0 auto;
+ padding: 10px;
}
-.box{
-display: flex;
-align-items: center;
-justify-content: space-between;
-margin: 0 auto;
-max-width: 800px;
-width:100%;
+.box {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin: 0 auto;
+ max-width: 800px;
+ width: 100%;
}
-.box-title, .box-value{
-color: #606060;
-font-weight: 300;
-}
+.box-title,
+.box-value {
+ color: #606060;
+ font-weight: 300;
+}
\ No newline at end of file
diff --git a/public/js/thread.js b/public/js/thread.js
index 77d9e50..97c0c51 100644
--- a/public/js/thread.js
+++ b/public/js/thread.js
@@ -1,12 +1,8 @@
import request from "./request.js";
-
const message_div = document.getElementById("messages");
-const messages_raw = await fetch(`/api/threads/${message_div.getAttribute("value")}/messages/`).then(res => res.json());
-for (const message of messages_raw)
- renderMessage(message);
-function renderMessage(message) {
+function render_message(message) {
const messageElement = document.createElement("div");
messageElement.classList.add("message");
messageElement.setAttribute("id", "message-" + message.id);
@@ -16,7 +12,7 @@ function renderMessage(message) {
${new Date(message.time).toLocaleString()}
@@ -34,7 +30,7 @@ function renderMessage(message) {
}
@@ -59,7 +55,7 @@ document.getElementById("send").addEventListener("submit", async e => {
if (!res) return;
form.reset();
res.reactCount = 0;
- renderMessage(res);
+ render_message(res);
});
});
diff --git a/routes/threads.js b/routes/threads.js
index b1a03f9..c46c982 100644
--- a/routes/threads.js
+++ b/routes/threads.js
@@ -1,7 +1,7 @@
const { Router } = require("express");
const app = Router();
-const { ThreadModel } = require("../models")
+const { ThreadModel,MessageModel } = require("../models")
app.get("/", async (req, res) => {
@@ -21,11 +21,17 @@ app.get("/:id", async (req, res) => {
const thread = await ThreadModel.get(id);
thread.views++;
- if (thread && (req.user?.admin || !thread.deleted))
- res.reply("thread", { thread, scroll: req.query.scroll || false });
- else
+ if (thread && (req.user?.admin || !thread.deleted)) {
+ const messages = await Promise.all(thread.messages.map(async id => {
+ const message = await MessageModel.get(id)
+ message.content = message.content.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\n", "
")
+ return req.user?.admin || !message?.deleted ? message.toObject({ virtuals: true }) : null;
+ }));
+
+ res.reply("thread", { thread, messages, scroll: req.query.scroll || false });
+ } else
res.error(404, "We have not got this thread.");
- thread.save();
+ thread.save();
});
diff --git a/views/thread.ejs b/views/thread.ejs
index c9a636a..7c59c47 100644
--- a/views/thread.ejs
+++ b/views/thread.ejs
@@ -35,33 +35,38 @@
- <% if (!user){ %>
-
Guests cant view messages!
- <% }%>
+
+ <% messages.filter(Boolean).forEach(message=>{ %>
-
-
+
-
26.08.2022 15:37:42
+
<%= new Date(message.time).toLocaleString() %>
-
Example message for development
-
-
DELETE
-
EDIT
+
<%= message.content%>
+
+
+ <% if (!message.deleted){ %>
+
+
DELETE
+
EDIT
+ <% }else{ %>
+
This message has been deleted
+
UNDELETE
+ <% } %>
-
+ <% }); %>