diff --git a/README.md b/README.md
index 1866ee6..0360654 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,8 @@ Akf-forum has got an API for AJAX, other clients etc. And, you can learn about A
- If thread deleted, not show its messages in API.
- Thread.ejs fix with new theme
- Profile photos will store in database
+- regex for pfp for now and
+- admin perm for undelete, thread+message
### Frontend
### User
diff --git a/public/css/threads.css b/public/css/threads.css
index 9b06ce4..61357c3 100644
--- a/public/css/threads.css
+++ b/public/css/threads.css
@@ -1,4 +1,3 @@
-
.threads {
width: 100%;
padding: 20px;
@@ -18,6 +17,7 @@
.threads-box:hover {
background-color: #e2e2e2;
}
+
.thread-box-title {
padding: 10px;
font-size: 18px;
diff --git a/public/css/users.css b/public/css/users.css
index 6c2e740..208bd19 100644
--- a/public/css/users.css
+++ b/public/css/users.css
@@ -13,6 +13,7 @@
flex-direction: column;
align-items: center;
box-shadow: 0 0 5px 0 #beb9b9;
+ max-width:500px;
}
.user-box-title {
@@ -28,6 +29,7 @@
.user-box-img {
width: 80px;
height: 80px;
+ margin: auto;
}
@media (max-width: 992px) {
diff --git a/public/js/thread.js b/public/js/thread.js
index 14bc41c..e74013b 100644
--- a/public/js/thread.js
+++ b/public/js/thread.js
@@ -1,7 +1,11 @@
import request from "./request.js";
-const messages = document.getElementById("messages");
-let messages_raw = [];
+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) {
const messageElement = document.createElement("div");
messageElement.classList.add("message");
@@ -12,50 +16,35 @@ function renderMessage(message) {
${new Date(message.time).toLocaleString()}
${message.content.replaceAll("\n", "
")}
- ${!message.deleted ?
- `
` :
- "
This message has been deleted
"}
+ ${/* if */!message.deleted ?
+ `
+
DELETE
+
EDIT
+ ` /* else */ :
+ `
This message has been deleted
+
UNDELETE
+ `
+
+ }
-
${message.reactCount}
-
-
+
0
+
+🔼
+
-🔽
`;
- messages.appendChild(messageElement);
- messages.innerHTML += "
";
+ message_div.appendChild(messageElement);
+ message_div.innerHTML += "
";
};
-/**
- * Main Renderer
- */
-(async () => {
-
- messages_raw = await fetch(`/api/threads/${messages.getAttribute("value")}/messages/`).then(res => res.json());
- if (messages_raw?.error) {
-
- document.getElementById("messages").innerHTML
- += 'THIS THREAD HAS NOT GOT ANY MESSAGE
';
-
-
- } else
- for (const message of messages_raw)
- renderMessage(message);
-
- window.scrollTo(0, document.body.scrollHeight);
-
-})();
-
-
+window.scrollTo(0, document.body.scrollHeight);
/**
* Message Sender
@@ -74,41 +63,49 @@ document.getElementById("send").addEventListener("submit", async e => {
});
});
-
/**
- * Button Listener
+ * OTHER FUNCTIONS
*/
-document.addEventListener("click", async e => {
- // e.preventDefault();
- if (e.target.id === "delete_thread") {
- const response = await request("/api/threads/" + e.target.value + "/delete");
- if (response.deleted) {
- alert("Thread deleted");
- location.reload();
- }
- } else if (e.target.id === "undelete_thread") {
- const response = await request("/api/threads/" + e.target.value + "/undelete");
- if (!response.deleted) {
- alert("Thread undeleted");
- location.reload();
+async function delete_thread(id) {
+ const response = await request("/api/threads/" + id + "/delete");
+ if (response.deleted) {
+ alert("Thread deleted");
+ location.reload();
+ }
- }
+}
+async function undelete_thread(id) {
+ const response = await request("/api/threads/" + id + "/undelete");
+ if (!response.deleted) {
+ alert("Thread undeleted");
+ location.reload();
- } else if (e.target.id === "delete_message") {
- e.preventDefault();
- const response = await request(`/api/messages/${e.target.value}/delete`);
- if (response.deleted) {
- alert("Message deleted");
- document.getElementById("message-delete-" + e.target.value).innerHTML = "This message has been deleted
";
- }
- } /*else if (e.target.id === "edit_thread") {
- window.location.href = "/threads/<%= thread.id }/edit";
- } */
+ }
- if (!e.target.id.includes("like")) return;
- const res = await request("/api/messages/" + e.target.value + "/react/" + e.target.id)
+}
+async function undelete_message(id) {
+ const response = await request(`/api/messages/${id}/undelete`);
+ if (!response.deleted)
+ document.getElementById("message-delete-" + id).innerHTML = `DELETE`;
- document.getElementById("count" + e.target.value).innerHTML = res.reactCount;
+}
+async function delete_message(id) {
+ const response = await request(`/api/messages/${id}/delete`);
+ if (response.deleted) {
+ alert("Message deleted");
+ document.getElementById("message-delete-" + id).innerHTML = `
+ This message has been deleted
+ UNDELETE`;// ADMIN PERM FIX
+ }
+}
+async function react(id, type) {
+ const res = await request(`/api/messages/${id}/react/${type}`)
+ document.getElementById(`count${id}`).innerHTML = res.reactCount;
+}
-});
+window.delete_message = delete_message;
+window.undelete_message = undelete_message;
+window.react = react;
+window.delete_thread = delete_thread;
+window.undelete_thread = undelete_thread;
\ No newline at end of file
diff --git a/routes/api/index.js b/routes/api/index.js
index 5026339..b24e072 100644
--- a/routes/api/index.js
+++ b/routes/api/index.js
@@ -1,7 +1,6 @@
-const { Router } = require("express")
+const { Router, request, response } = require("express")
const app = Router();
const bcrypt = require("bcrypt");
-const { request, response } = require("express");
const { SecretModel, UserModel } = require("../../models")
/**
@@ -11,7 +10,7 @@ const { SecretModel, UserModel } = require("../../models")
*/
app.use(async (req, res, next) => {
- res.error = (status, error) => res.status(status).json({error});
+ res.error = (status, error) => res.status(status).json({ error });
res.complate = result => res.status(200).json(result);
@@ -26,10 +25,9 @@ app.use(async (req, res, next) => {
if (!user)
return res.error(401, "We have not got any user has got this name")
- const validPassword = await bcrypt.compare(password, user.password);
- if (!validPassword)
- return res.error(401, 'Incorrect Password!')
+ if (!bcrypt.compare(password, user.password)) return res.error(401, 'Incorrect Password!');
+
req.user = await UserModel.findOne({ name: req.headers.username });
next();
diff --git a/routes/login.js b/routes/login.js
index 93d1ad1..f187091 100644
--- a/routes/login.js
+++ b/routes/login.js
@@ -14,9 +14,7 @@ app.post("/", async (req, res) => {
const user = await SecretModel.findOne({ username });
if (user) {
- const validPassword = await bcrypt.compare(password, user.password);
-
- if (!validPassword) return res.error( 403, 'Incorrect Password!')
+ if (!bcrypt.compare(password, user.password)) return res.error( 403, 'Incorrect Password!')
const member = await UserModel.findOne({ name: username });
if (!member || member.deleted) return res.error( 403, 'Incorrect Username and/or Password!')
diff --git a/views/thread.ejs b/views/thread.ejs
index 310b4ce..28f43e7 100644
--- a/views/thread.ejs
+++ b/views/thread.ejs
@@ -8,26 +8,26 @@
<%- include("extra/navbar") %>
-
+ <% if (user){ %>
+
+ <% }%>
-
- <%= thread.title %>
-
+ <%= thread.title %>
- By "> <%= thread.author.name %>
+
<% if (user && !thread.deleted){ %>
-
-
- <% } else if (thread.deleted) { %>
- This thread has been deleted
-
+ DELETE
+ EDIT
+ <% } else if (thread.deleted) { %>
+ This thread has been deleted
+ UNDELETE
- <% }; %>
+ <% }; %>
@@ -44,20 +44,20 @@
26.08.2022 15:37:42
Example message for development
@@ -74,15 +74,13 @@
<% if (user){ %>
- <%} else {%>
-
- <% }%>
+ <%} else {%>
+
+ <% }%>
- <% if (user){ %>
-
- <% }%>
+
diff --git a/views/user.ejs b/views/user.ejs
index 3dabfba..4df01ed 100644
--- a/views/user.ejs
+++ b/views/user.ejs
@@ -40,22 +40,16 @@
<% if (user?.admin && !member.deleted) {%>
-
-
-
+ Give admin permissions!
+ Delete user!
+
diff --git a/views/users.ejs b/views/users.ejs
index 73392c8..a8a243a 100644
--- a/views/users.ejs
+++ b/views/users.ejs
@@ -11,12 +11,14 @@
<% users.forEach(user=>{ %>
+
<% }); %>