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.author.name} - ${message.author.name}: + ${message.author.name} + ${message.author.name}:

${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 %> +

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

- Akif9748 + Akif9748:

Example message for development


-
- -
+ DELETE + EDIT +

0

- - + +🔼 + -🔽
@@ -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=>{ %> +
+
<% }); %>