diff --git a/README.md b/README.md
index f6208a7..0391f07 100644
--- a/README.md
+++ b/README.md
@@ -58,8 +58,11 @@ Akf-forum has got an API for AJAX (fetch), other clients etc. And, you can learn
- add used open source libraries to README.md
- send public to common/public
- user.ejs for per theme
+- categori search title like thread search
### front-end
+- working reset button
+- better pagination
- text alling center body
- add a css file for CodeMirror in threads / send message ok
- old contents / titles add to forum interface
diff --git a/src/index.js b/src/index.js
index 2df22dd..c2124a2 100644
--- a/src/index.js
+++ b/src/index.js
@@ -23,8 +23,6 @@ app.ips = [];
app.set("view engine", "ejs");
app.set("limits", limits);
-if (RLS.enabled) app.use(RL(RLS.windowMs, RLS.max));
-
for (const theme of fs.readdirSync(join(__dirname, "themes")))
app.use(`/themes/${theme}`, express.static(join(__dirname, "themes", theme, "public")));
@@ -70,6 +68,8 @@ app.use(express.static(join(__dirname, "public")), express.json(), express.urlen
}
);
+if (RLS.enabled) app.use(RL(RLS.windowMs, RLS.max));
+
if (discord_auth)
app.set("DISCORD_AUTH_URL", `https://discord.com/api/oauth2/authorize?client_id=${process.env.DISCORD_ID}&redirect_uri=${host}%2Fauth%2Fdiscord&response_type=code&scope=identify`);
diff --git a/src/themes/bootstrap_black/public/main.css b/src/themes/bootstrap_black/public/main.css
index b98806f..77443b7 100644
--- a/src/themes/bootstrap_black/public/main.css
+++ b/src/themes/bootstrap_black/public/main.css
@@ -293,51 +293,6 @@ a {
}
-/***********************************
-PAGINATION
-***********************************/
-.pagination {
- box-shadow: 0 0 5px 0 var(--box-shadow);
- margin: 10px auto;
- padding: 8px;
- display: flex;
- justify-content: space-between;
- align-items: center;
- max-width: 400px;
- gap: 10px;
- position: relative;
-}
-
-.pagination .back,
-.pagination .after {
- color: var(--second);
- font-size: 26px;
- cursor: pointer;
-}
-
-
-.pagination .numbers {
- display: flex;
- align-items: center;
- gap: 5px;
-}
-
-.pagination .number {
- color: var(--second);
- font-size: 22px;
- border: 0 0 5px var(--second);
- padding: 8px;
- border-radius: 2px;
- font-weight: 600;
- cursor: pointer;
- margin: 8px;
-}
-
-.pagination .number.active {
- color: var(--main);
- font-weight: 700;
-}
-
/************************************
Threads
diff --git a/src/themes/bootstrap_black/views/admin.ejs b/src/themes/bootstrap_black/views/admin.ejs
new file mode 100644
index 0000000..62aa5ea
--- /dev/null
+++ b/src/themes/bootstrap_black/views/admin.ejs
@@ -0,0 +1,124 @@
+
+
+
+<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Admin Panel!" }) %>
+
+
+
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %>
+
+
+
+ Welcome to the admin panel of the forum, <%= user.name %>!
+
+
+
+
+
+
+
+
+
+
+
+
+ IP |
+ Reason |
+ AuthorID |
+
+ <% for (const ban of bans) { %>
+
+ <%=ban.ip%> |
+ <%=ban.reason%> |
+ <%=ban.authorID%> |
+
+ <% } %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Admin list |
+
+ <% for (const admin of admins) { %>
+
+ <%= admin.name %> |
+
+ <% } %>
+
+
+
+
+
+
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %>
+
+
+
+
\ No newline at end of file
diff --git a/src/themes/bootstrap_black/views/categories.ejs b/src/themes/bootstrap_black/views/categories.ejs
new file mode 100644
index 0000000..8086e65
--- /dev/null
+++ b/src/themes/bootstrap_black/views/categories.ejs
@@ -0,0 +1,74 @@
+
+
+<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Category list!" }) %>
+
+
+
+
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %>
+
+
+
+
+
<%= "Categories" %>
+
+
+
+
+ Topic |
+ Description |
+ <% if (user?.admin){ %> Action | <% } %>
+
+
+
+ <% categories.forEach(category=>{ %>
+
+
+
+ |
+
+ <%= category.desp %>
+ |
+ <% if (user?.admin){ %>
+
+
+ |
+ <% } %>
+
+ <% }); %>
+
+
+
+
+
+
+
+ <% if(typeof page === "number"){ %>
+
+
+
+
+ <% } %>
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %>
+
+
+
+
\ No newline at end of file
diff --git a/src/themes/bootstrap_black/views/create_category.ejs b/src/themes/bootstrap_black/views/create_category.ejs
new file mode 100644
index 0000000..12aae29
--- /dev/null
+++ b/src/themes/bootstrap_black/views/create_category.ejs
@@ -0,0 +1,59 @@
+
+
+<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Create Category!" }) %>
+
+
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %>
+
+
+
+
+
+
+
Create new category
+
+
+
+
+
+
+
+
+
+
+
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %>
+
+
+
+
\ No newline at end of file
diff --git a/src/themes/bootstrap_black/views/create_thread.ejs b/src/themes/bootstrap_black/views/create_thread.ejs
new file mode 100644
index 0000000..9d9db3a
--- /dev/null
+++ b/src/themes/bootstrap_black/views/create_thread.ejs
@@ -0,0 +1,69 @@
+
+
+
+<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Create thread!" }) %>
+
+
+
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %>
+
+
+
+
+
+
+
+
Create new thread
+
+
+
+
+
+
+
+
+
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %>
+
+
+
+
\ No newline at end of file
diff --git a/src/themes/bootstrap_black/views/thread.ejs b/src/themes/bootstrap_black/views/thread.ejs
new file mode 100644
index 0000000..415c89e
--- /dev/null
+++ b/src/themes/bootstrap_black/views/thread.ejs
@@ -0,0 +1,168 @@
+
+
+
+<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: thread.title }) %>
+
+
+
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %>
+
+
+
+
+
+
+
+
<%= thread.title %>
+
+ <%= new Date(thread.time).toLocaleString() %> • Views: <%= thread.views %>
+
+
+
+
+
+
+ <% if (user && (user.id === thread.authorID || user.admin ) && !thread.deleted){ %>
+
DELETE
+
EDIT
+ <% } else if (thread.deleted) { %>
+
This thread has been deleted
+ UNDELETE
+ <% }; %>
+
+
+
+
+ <% messages.filter(Boolean).forEach(message=>{ %>
+
+
+
+
+
+
+ <%= new Date(message.time).toLocaleDateString() %>
+
+
+ <%= new Date(message.time).toLocaleTimeString() %>
+
+
+
+
<%= message.content %>
+ <% if(user){ %>
+ <% if(user.id === message.authorID || user.admin){ %>
+
+
+ <% if (message.deleted){ %>
+
+ <% } %>
+ <% if (message.edited){ %>
+
+ <% } %>
+
+
+
+
+ <% } %>
+
+
+
style="color: var(--main)" <% } %>>
+
+
<%=message.react.like.length %>
+
+
style="color: var(--main)" <% } %>>
+
+
<%=message.react.dislike.length %>
+
+
+ <% }; %>
+
+
+
+ <% }); %>
+
+
+
+
+ <% if (user){ %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <% }%>
+
+
+
+
+
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %>
+
+
+
+
\ No newline at end of file
diff --git a/src/themes/bootstrap_black/views/threads.ejs b/src/themes/bootstrap_black/views/threads.ejs
new file mode 100644
index 0000000..b2b0f5e
--- /dev/null
+++ b/src/themes/bootstrap_black/views/threads.ejs
@@ -0,0 +1,83 @@
+
+
+<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Thread list!" }) %>
+
+
+
+
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %>
+
+
+
+
+
+
<%= title || "Threads" %>
+
<%= desp %>
+
+
+
+
+ Topic |
+ Created |
+ Statistics |
+ <% if (user?.admin){ %> Action | <% } %>
+
+
+
+
+ <% threads.forEach(thread=>{ %>
+
+
+
+ <% if (thread.deleted) { %> [DELETED]<% } %>
+ <%= thread.title %>
+
+ |
+
+
+
+ <%= new Date(thread.time).toLocaleString() %>
+ |
+
+ <%= thread.messages.length %> messages
+ <%= thread.views %> views
+ |
+ <% if (user?.admin){ %>
+
+ <% if (!thread.deleted){ %>
+
+ <% } %>
+ |
+ <% } %>
+
+ <% }); %>
+
+
+
+
+
+
+
+
New Thread
+
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %>
+
+
+
+
\ No newline at end of file
diff --git a/src/themes/bootstrap_black/views/users.ejs b/src/themes/bootstrap_black/views/users.ejs
new file mode 100644
index 0000000..16661e7
--- /dev/null
+++ b/src/themes/bootstrap_black/views/users.ejs
@@ -0,0 +1,51 @@
+
+
+
+<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "User list!" }) %>
+
+
+
+
+
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %>
+
+
+ <% users.filter(member=> !member.deleted || user.admin ).forEach(member => { %>
+
+
+
+
+
+
+ <% }); %>
+
+
+ <% if(typeof page === "number"){ %>
+
+
+
+
+ <% } %>
+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %>
+
+
+
+
\ No newline at end of file