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 %>!

+
+ + + + + + + + + + + + +
+ + + + + <% for (const admin of admins) { %> + + + + <% } %> +
Admin list
<%= 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" %>

+ + + + + + + <% if (user?.admin){ %> <% } %> + + + + <% categories.forEach(category=>{ %> + + + + <% if (user?.admin){ %> + + <% } %> + + <% }); %> + + +
TopicDescriptionAction
+

+ <%= category.name %> +

+
+
<%= category.desp %>
+
+ +
+
+
+ + + <% 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 %> +
+
+ <%= thread.author.name %> <%= "• "+(thread.edited ? "Edited" : "Not edited")%> +
+ +
+ +
+ <% 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 %>

+ + + + + + + + <% if (user?.admin){ %> <% } %> + + + + + <% threads.forEach(thread=>{ %> + + + + + <% if (user?.admin){ %> + + <% } %> + + <% }); %> + +
TopicCreatedStatisticsAction
+

+ <% if (thread.deleted) { %> [DELETED]<% } %> + <%= thread.title %> +

+
+
+ +
<%= new Date(thread.time).toLocaleString() %>
+
+
<%= thread.messages.length %> messages
+
<%= thread.views %> views
+
+ <% 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