diff --git a/README.md b/README.md index 0360654..e017863 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ Akf-forum has got an API for AJAX, other clients etc. And, you can learn about A | Send | 🟢 | HIGH | | Delete | 🟢 | HIGH | | Regex for scripts | 🔴 | HIGH | -| Undelete | 🟡 | MEDIUM | +| Undelete | 🟢 | MEDIUM | | React | 🟢 | MEDIUM | | Edit | 🔴 | MEDIUM | diff --git a/models/Thread.js b/models/Thread.js index 889c8ba..32c6144 100644 --- a/models/Thread.js +++ b/models/Thread.js @@ -1,5 +1,5 @@ const mongoose = require("mongoose") -const UserModel = require("./User"); +const UserModel = require("./User"); const schema = new mongoose.Schema({ id: { type: String, unique: true }, @@ -8,7 +8,8 @@ const schema = new mongoose.Schema({ title: String, time: { type: Date, default: Date.now }, deleted: { type: Boolean, default: false }, - messages: [String] + messages: [String], + views: { type: Number, default: 0 } }); diff --git a/package.json b/package.json index ed954d4..cee063b 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,10 @@ "bugs": { "url": "https://github.com/Akif9748/akf-forum/issues" }, - "homepage": "https://akf-forum.herokuapp.com/", + "engines": { + "node": ">=16" + }, + "homepage": "https://akf-forum.glitch.me/", "dependencies": { "bcrypt": "^5.0.1", "body-parser": "^1.19.2", @@ -30,4 +33,4 @@ "express-session": "^1.17.2", "mongoose": "^6.5.1" } -} +} \ No newline at end of file diff --git a/public/css/thread.css b/public/css/thread.css index 716a2c2..23a6bbe 100644 --- a/public/css/thread.css +++ b/public/css/thread.css @@ -28,7 +28,6 @@ textarea { font-family: monospace; - background-color: var(--col-bg); border: 2px solid var(--col-8); color: var(--col-fg); width: auto; @@ -130,36 +129,6 @@ button:hover { /* NAVBAR: */ -.navbar { - background-color: #333; - overflow: hidden; -} - -.navbar a { - float: left; - color: var(--col-fg); - text-align: center; - padding: 14px 16px; - text-decoration: none; - font-size: 17px; - border-right: 3px solid var(--col-8); -} - -.navbar a:hover { - background-color: var(--col-bg); - color: var(--col-fg); -} - -.navbar h1:hover { - background-color: var(--col-bg); - color: var(--col-fg); -} - -.navbar a.active { - background-color: var(--col-14); - color: var(--col-15); -} - .user { margin: 0; @@ -211,52 +180,9 @@ img.logo { } -/* -***************************** - FOOTER -***************************** -*/ -.footer { - position: fixed; - left: 0; - bottom: 0; - width: 100%; - background-color: var(--col-8); - color: white; - text-align: center; -} - -.footer p { - - font-size: 16px; - color: white; - -} - /* ***************************** ADMIN TEXT ***************************** */ -.admin { - position: fixed; - left: 0; - top: 0; - height: 20px; - width: 100%; - text-align: center; -} - -.admin p { - font-size: 16px; - margin: auto; - color: var(--col-15); -} - -.admin a { - background-color: var(--col-13); - border: 2px solid var(--col-8); - height: 20px; - color: var(--col-15); -} p {font-size: 18px;} \ No newline at end of file diff --git a/routes/register.js b/routes/register.js index 4fce31a..e18f78a 100644 --- a/routes/register.js +++ b/routes/register.js @@ -23,7 +23,7 @@ app.post("/", rateLimit({ const user2 = new UserModel({ name: req.body.username }) - if (avatar&&/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g.test(avatar)) user2.avatar = avatar; + if (avatar && /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g.test(avatar)) user2.avatar = avatar; await user2.takeId() await user2.save(); diff --git a/routes/threads.js b/routes/threads.js index 29668f5..5ae7d0b 100644 --- a/routes/threads.js +++ b/routes/threads.js @@ -6,33 +6,26 @@ const { ThreadModel, MessageModel } = require("../models") app.get("/", async (req, res) => { - const threads = await ThreadModel.find(req.user?.admin ? {} : { deleted: false }).limit(10); + const threads = await ThreadModel.find(req.user?.admin ? {} : { deleted: false })//.limit(10); return res.reply("threads", { threads }); }); -app.get("/create*", async (req, res) => { - res.reply("create_thread") -}); +app.get("/create*", (req, res) => res.reply("create_thread")); app.get("/:id", async (req, res) => { const { id } = req.params; const thread = await ThreadModel.get(id); - const user = req.user; + thread.views++; - if (thread && (user?.admin || !thread.deleted)) { - - const messages = await Promise.all(thread.messages.map(async id => { - const message = await MessageModel.get(id) - return user?.admin || !message?.deleted ? message.toObject({ virtuals: true }) : null; - })); - - res.reply("thread", { thread, messages, scroll: req.query.scroll || false }); - } else + if (thread && (req.user?.admin || !thread.deleted)) + res.reply("thread", { thread, scroll: req.query.scroll || false }); + else res.error(404, "We have not got this thread."); + thread.save(); }); diff --git a/views/thread.ejs b/views/thread.ejs index 28f43e7..3d342b0 100644 --- a/views/thread.ejs +++ b/views/thread.ejs @@ -14,6 +14,7 @@

<%= thread.title %>

+

View count: <%= thread.views %>

By <%= thread.author.name %> diff --git a/views/user.ejs b/views/user.ejs index 4df01ed..7270040 100644 --- a/views/user.ejs +++ b/views/user.ejs @@ -4,93 +4,94 @@ <%- include("extra/meta", {title: member.name }) %> - - <%- include("extra/navbar") %> + + <%- include("extra/navbar") %> - - <% if (user?.admin && !member.deleted) {%> - Give admin permissions! + <% if (user?.admin && !member.deleted) {%> + Give admin permissions! - Delete user! - - - <% }; %> - <% if (member.deleted) {%> -

This user has been deleted!

- Undelete user! - - - - <% }; %> - + <% }; %> + <% if (member.deleted) {%> +

This user has been deleted!

+ Undelete user! + + + + + <% }; %> + \ No newline at end of file