From edf9fc83dc49f55fe635e8343c014170e197bc35 Mon Sep 17 00:00:00 2001 From: Akif9748 Date: Thu, 25 May 2023 17:23:31 +0300 Subject: [PATCH] full support for multiple themes, secure templates --- README.md | 4 +- index.js | 30 +++-- lib.js | 2 +- public/themes/common/footer.ejs | 44 ------- public/themes/common/navbar.ejs | 45 ------- public/themes/common/usermenu.ejs | 72 ---------- public/themes/default_black/extra/footer.ejs | 1 - public/themes/default_black/extra/navbar.ejs | 1 - .../themes/default_black/extra/usermenu.ejs | 1 - public/themes/default_white/extra/footer.ejs | 1 - public/themes/default_white/extra/navbar.ejs | 1 - .../themes/default_white/extra/usermenu.ejs | 1 - routes/.js | 10 +- .../bootstrap_black/index.js | 0 .../public}/bootstrap-night.min.css | 0 .../bootstrap_black/public}/bootstrap.min.js | 0 .../bootstrap_black/public}/main.css | 0 .../bootstrap_black/views}/extra/footer.ejs | 0 .../bootstrap_black/views}/extra/meta.ejs | 0 .../bootstrap_black/views}/extra/navbar.ejs | 0 .../bootstrap_black/views}/extra/usermenu.ejs | 0 themes/bootstrap_black/views/index.ejs | 124 ++++++++++++++++++ .../common => themes/common/public}/main.css | 0 {views => themes/common/views}/admin.ejs | 7 +- .../common/views}/avatar_upload.ejs | 7 +- {views => themes/common/views}/categories.ejs | 7 +- {views => themes/common/views}/config.ejs | 7 +- .../common/views}/create_category.ejs | 7 +- .../common/views}/create_thread.ejs | 7 +- {views => themes/common/views}/edit_user.ejs | 7 +- themes/common/views/error.ejs | 17 +++ themes/common/views/extra/footer.ejs | 44 +++++++ themes/common/views/extra/navbar.ejs | 44 +++++++ themes/common/views/extra/usermenu.ejs | 72 ++++++++++ {views => themes/common/views}/index.ejs | 11 +- {views => themes/common/views}/login.ejs | 7 +- {views => themes/common/views}/messages.ejs | 7 +- {views => themes/common/views}/register.ejs | 7 +- {views => themes/common/views}/search.ejs | 7 +- {views => themes/common/views}/setup.ejs | 5 +- {views => themes/common/views}/thread.ejs | 7 +- {views => themes/common/views}/threads.ejs | 7 +- {views => themes/common/views}/user.ejs | 7 +- {views => themes/common/views}/users.ejs | 7 +- .../themes => themes}/default_black/index.js | 0 .../default_black/public}/main.css | 0 themes/default_black/views/extra/footer.ejs | 1 + .../default_black/views}/extra/meta.ejs | 0 themes/default_black/views/extra/navbar.ejs | 1 + themes/default_black/views/extra/usermenu.ejs | 1 + .../themes => themes}/default_white/index.js | 0 .../default_white/public}/main.css | 0 themes/default_white/views/extra/footer.ejs | 1 + .../default_white/views}/extra/meta.ejs | 0 themes/default_white/views/extra/navbar.ejs | 1 + themes/default_white/views/extra/usermenu.ejs | 1 + views/error.ejs | 16 --- views/extra/footer.ejs | 1 - views/extra/meta.ejs | 1 - views/extra/navbar.ejs | 1 - 60 files changed, 403 insertions(+), 257 deletions(-) delete mode 100644 public/themes/common/footer.ejs delete mode 100644 public/themes/common/navbar.ejs delete mode 100644 public/themes/common/usermenu.ejs delete mode 100644 public/themes/default_black/extra/footer.ejs delete mode 100644 public/themes/default_black/extra/navbar.ejs delete mode 100644 public/themes/default_black/extra/usermenu.ejs delete mode 100644 public/themes/default_white/extra/footer.ejs delete mode 100644 public/themes/default_white/extra/navbar.ejs delete mode 100644 public/themes/default_white/extra/usermenu.ejs rename {public/themes => themes}/bootstrap_black/index.js (100%) rename {public/themes/bootstrap_black => themes/bootstrap_black/public}/bootstrap-night.min.css (100%) rename {public/themes/bootstrap_black => themes/bootstrap_black/public}/bootstrap.min.js (100%) rename {public/themes/bootstrap_black => themes/bootstrap_black/public}/main.css (100%) rename {public/themes/bootstrap_black => themes/bootstrap_black/views}/extra/footer.ejs (100%) rename {public/themes/bootstrap_black => themes/bootstrap_black/views}/extra/meta.ejs (100%) rename {public/themes/bootstrap_black => themes/bootstrap_black/views}/extra/navbar.ejs (100%) rename {public/themes/bootstrap_black => themes/bootstrap_black/views}/extra/usermenu.ejs (100%) create mode 100644 themes/bootstrap_black/views/index.ejs rename {public/themes/common => themes/common/public}/main.css (100%) rename {views => themes/common/views}/admin.ejs (88%) rename {views => themes/common/views}/avatar_upload.ejs (91%) rename {views => themes/common/views}/categories.ejs (82%) rename {views => themes/common/views}/config.ejs (73%) rename {views => themes/common/views}/create_category.ejs (80%) rename {views => themes/common/views}/create_thread.ejs (84%) rename {views => themes/common/views}/edit_user.ejs (85%) create mode 100644 themes/common/views/error.ejs create mode 100644 themes/common/views/extra/footer.ejs create mode 100644 themes/common/views/extra/navbar.ejs create mode 100644 themes/common/views/extra/usermenu.ejs rename {views => themes/common/views}/index.ejs (72%) rename {views => themes/common/views}/login.ejs (71%) rename {views => themes/common/views}/messages.ejs (72%) rename {views => themes/common/views}/register.ejs (74%) rename {views => themes/common/views}/search.ejs (78%) rename {views => themes/common/views}/setup.ejs (86%) rename {views => themes/common/views}/thread.ejs (95%) rename {views => themes/common/views}/threads.ejs (85%) rename {views => themes/common/views}/user.ejs (89%) rename {views => themes/common/views}/users.ejs (82%) rename {public/themes => themes}/default_black/index.js (100%) rename {public/themes/default_black => themes/default_black/public}/main.css (100%) create mode 100644 themes/default_black/views/extra/footer.ejs rename {public/themes/default_black => themes/default_black/views}/extra/meta.ejs (100%) create mode 100644 themes/default_black/views/extra/navbar.ejs create mode 100644 themes/default_black/views/extra/usermenu.ejs rename {public/themes => themes}/default_white/index.js (100%) rename {public/themes/default_white => themes/default_white/public}/main.css (100%) create mode 100644 themes/default_white/views/extra/footer.ejs rename {public/themes/default_white => themes/default_white/views}/extra/meta.ejs (100%) create mode 100644 themes/default_white/views/extra/navbar.ejs create mode 100644 themes/default_white/views/extra/usermenu.ejs delete mode 100644 views/error.ejs delete mode 100644 views/extra/footer.ejs delete mode 100644 views/extra/meta.ejs delete mode 100644 views/extra/navbar.ejs diff --git a/README.md b/README.md index 0796139..a373d42 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,8 @@ Run `node util/reset` to **reset the database** for duplicate key errors, and ru Edit `config.json` for default theme color (`black` or `white`) of users, and forum name, meta description, character limits, discord auth enabler, global ratelimit. ### How to install theme: -- Copy your theme to `public/themes` folder. +- Copy your theme to `themes` folder. +Additional note for themes: If a theme has not got any .ejs file, it will use default theme's .ejs files. default theme is in themes folder, named as `common`. ### DISCORD AUTH: `"discord_auth": "your_app_id"` in config.json. @@ -61,6 +62,7 @@ Akf-forum has got an API for AJAX (fetch), other clients etc. And, you can learn - add support for transition around gravatar - BETTER SETUP PAGE - add used open source libraries to README.md +- better folder system ### front-end - text alling center body - add a css file for CodeMirror in threads / send message ok diff --git a/index.js b/index.js index 07f2c9f..d6f33f8 100644 --- a/index.js +++ b/index.js @@ -23,6 +23,12 @@ 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("./themes")) + app.use(`/themes/${theme}`, express.static(`./themes/${theme}/public/`)); + + app.use(express.static("public"), express.json(), express.urlencoded({ extended: true }), IP(), SES({ secret: process.env.SECRET, store: MS.create({ clientPromise: DB, stringify: false }), resave: false, saveUninitialized: false }), async (req, res, next) => { @@ -37,15 +43,19 @@ app.use(express.static("public"), express.json(), express.urlencoded({ extended: if (!themes.some(t => t.codename === theme.codename)) theme = def_theme; - res.reply = (page, options = {}, status = 200) => res.status(status).render(page, { - dataset: { - themes, theme, forum_name, description, - getFile: file => join(__dirname, "public", "themes", file), - }, - user: req.user, - ...options - }); + res.reply = (page, options = {}, status = 200) => { + const road = join(__dirname, "themes", theme.codename, "views", `${page}.ejs`); + const renderpage = fs.existsSync(road) ? road : join(__dirname, "themes", "common", "views", `${page}.ejs`); + return res.status(status).render(renderpage, { + dataset: { + themes, theme, forum_name, description, + getFile: file => join(__dirname, "themes", file), + }, + user: req.user, + ...options + }); + } res.error = (type, error) => res.reply("error", { type, error }, type); @@ -63,11 +73,9 @@ app.use(express.static("public"), express.json(), express.urlencoded({ extended: if (discord_auth) app.set("discord_auth", `https://discord.com/api/oauth2/authorize?client_id=${discord_auth}&redirect_uri=${host}%2Fauth%2Fdiscord&response_type=code&scope=identify`); -if (RLS.enabled) app.use(RL(RLS.windowMs, RLS.max)); - for (const file of fs.readdirSync("./routes")) app.use("/" + file.replace(".js", ""), require(`./routes/${file}`)); app.all("*", (req, res) => res.error(404, "This page does not exist on this forum.")); -app.listen(port, () => console.log(`${forum_name}-forum on port:`, port)); \ No newline at end of file +app.listen(port, () => console.log(`${forum_name} on port:`, port)); \ No newline at end of file diff --git a/lib.js b/lib.js index d297dff..7866db1 100644 --- a/lib.js +++ b/lib.js @@ -6,7 +6,7 @@ const { readdirSync } = require('fs'); require("dotenv").config(); module.exports = { - themes: readdirSync("./public/themes").filter(f => f !== "common").map(f => require(`./public/themes/${f}`)), + themes: readdirSync("./themes").filter(f => f !== "common").map(f => require(`./themes/${f}`)), threadEnum: ["OPEN", "APPROVAL", "DELETED"], userEnum: ["ACTIVE", "APPROVAL", "DELETED", "BANNED"], RL(windowMs = 60_000, max = 1) { diff --git a/public/themes/common/footer.ejs b/public/themes/common/footer.ejs deleted file mode 100644 index f209e01..0000000 --- a/public/themes/common/footer.ejs +++ /dev/null @@ -1,44 +0,0 @@ - \ No newline at end of file diff --git a/public/themes/common/navbar.ejs b/public/themes/common/navbar.ejs deleted file mode 100644 index b5f8dc5..0000000 --- a/public/themes/common/navbar.ejs +++ /dev/null @@ -1,45 +0,0 @@ - -<% if (user?.admin){ %> -
- Click here to reach admin panel -
-<% } %> - -
- -
- - <% if (user){ %> - -
<%= user.name %> -
-
-
- Logout - <% } else { %> - - Login - Register - - <% } %> - -
-
- \ No newline at end of file diff --git a/public/themes/common/usermenu.ejs b/public/themes/common/usermenu.ejs deleted file mode 100644 index 863fd69..0000000 --- a/public/themes/common/usermenu.ejs +++ /dev/null @@ -1,72 +0,0 @@ -<% if(user?.admin || user?.id === member.id){ %> -
- User Menu: - - <% if (!member.discordID && discord && user?.id === member.id) { %> - DC auth - <% } else if(member.discordID && user?.id === member.id) { %> - Unauth DC! - <% } %> - Upload avatar - Edit user! - - - <% if (member.hideLastSeen) {%> - Unhide last seen! - <% } else { %> - Hide last seen! - <% } %> - - <% if (member.deleted) {%> -

This user has been deleted!

- Undelete user! - <% } else if (user?.admin){ %> - Delete user! - <% } %> - <% if (user?.admin) {%> -

IP adresses of the user:

- - - <% } %> -
-<% } %> \ No newline at end of file diff --git a/public/themes/default_black/extra/footer.ejs b/public/themes/default_black/extra/footer.ejs deleted file mode 100644 index 622f620..0000000 --- a/public/themes/default_black/extra/footer.ejs +++ /dev/null @@ -1 +0,0 @@ -<%- include(dataset.getFile("common/footer")) %> \ No newline at end of file diff --git a/public/themes/default_black/extra/navbar.ejs b/public/themes/default_black/extra/navbar.ejs deleted file mode 100644 index 46322ec..0000000 --- a/public/themes/default_black/extra/navbar.ejs +++ /dev/null @@ -1 +0,0 @@ -<%- include(dataset.getFile("common/navbar")) %> \ No newline at end of file diff --git a/public/themes/default_black/extra/usermenu.ejs b/public/themes/default_black/extra/usermenu.ejs deleted file mode 100644 index 8b10460..0000000 --- a/public/themes/default_black/extra/usermenu.ejs +++ /dev/null @@ -1 +0,0 @@ -<%- include(dataset.getFile("common/usermenu")) %> \ No newline at end of file diff --git a/public/themes/default_white/extra/footer.ejs b/public/themes/default_white/extra/footer.ejs deleted file mode 100644 index 622f620..0000000 --- a/public/themes/default_white/extra/footer.ejs +++ /dev/null @@ -1 +0,0 @@ -<%- include(dataset.getFile("common/footer")) %> \ No newline at end of file diff --git a/public/themes/default_white/extra/navbar.ejs b/public/themes/default_white/extra/navbar.ejs deleted file mode 100644 index 46322ec..0000000 --- a/public/themes/default_white/extra/navbar.ejs +++ /dev/null @@ -1 +0,0 @@ -<%- include(dataset.getFile("common/navbar")) %> \ No newline at end of file diff --git a/public/themes/default_white/extra/usermenu.ejs b/public/themes/default_white/extra/usermenu.ejs deleted file mode 100644 index 8b10460..0000000 --- a/public/themes/default_white/extra/usermenu.ejs +++ /dev/null @@ -1 +0,0 @@ -<%- include(dataset.getFile("common/usermenu")) %> \ No newline at end of file diff --git a/routes/.js b/routes/.js index 686d8e9..6ad6c8f 100644 --- a/routes/.js +++ b/routes/.js @@ -1,16 +1,16 @@ -const { UserModel, ThreadModel, MessageModel } = require("../models") +const { UserModel, ThreadModel, MessageModel, CategoryModel } = require("../models") const { Router } = require("express"); const app = Router(); app.get("/", async (req, res) => { - const - mem = process.memoryUsage().heapUsed / Math.pow(2, 20), + const categories = await CategoryModel.count(), users = await UserModel.count({ deleted: false }), threads = await ThreadModel.count({ state: "OPEN" }), - messages = await MessageModel.count({ deleted: false }); + messages = await MessageModel.count({ deleted: false }), + newestMember = await UserModel.findOne({ deleted: false }, "name").sort({ time: -1 }); - res.reply("index", { mem, users, threads, messages }); + res.reply("index", { categories, users, threads, messages, newestMember: newestMember.name }); }); diff --git a/public/themes/bootstrap_black/index.js b/themes/bootstrap_black/index.js similarity index 100% rename from public/themes/bootstrap_black/index.js rename to themes/bootstrap_black/index.js diff --git a/public/themes/bootstrap_black/bootstrap-night.min.css b/themes/bootstrap_black/public/bootstrap-night.min.css similarity index 100% rename from public/themes/bootstrap_black/bootstrap-night.min.css rename to themes/bootstrap_black/public/bootstrap-night.min.css diff --git a/public/themes/bootstrap_black/bootstrap.min.js b/themes/bootstrap_black/public/bootstrap.min.js similarity index 100% rename from public/themes/bootstrap_black/bootstrap.min.js rename to themes/bootstrap_black/public/bootstrap.min.js diff --git a/public/themes/bootstrap_black/main.css b/themes/bootstrap_black/public/main.css similarity index 100% rename from public/themes/bootstrap_black/main.css rename to themes/bootstrap_black/public/main.css diff --git a/public/themes/bootstrap_black/extra/footer.ejs b/themes/bootstrap_black/views/extra/footer.ejs similarity index 100% rename from public/themes/bootstrap_black/extra/footer.ejs rename to themes/bootstrap_black/views/extra/footer.ejs diff --git a/public/themes/bootstrap_black/extra/meta.ejs b/themes/bootstrap_black/views/extra/meta.ejs similarity index 100% rename from public/themes/bootstrap_black/extra/meta.ejs rename to themes/bootstrap_black/views/extra/meta.ejs diff --git a/public/themes/bootstrap_black/extra/navbar.ejs b/themes/bootstrap_black/views/extra/navbar.ejs similarity index 100% rename from public/themes/bootstrap_black/extra/navbar.ejs rename to themes/bootstrap_black/views/extra/navbar.ejs diff --git a/public/themes/bootstrap_black/extra/usermenu.ejs b/themes/bootstrap_black/views/extra/usermenu.ejs similarity index 100% rename from public/themes/bootstrap_black/extra/usermenu.ejs rename to themes/bootstrap_black/views/extra/usermenu.ejs diff --git a/themes/bootstrap_black/views/index.ejs b/themes/bootstrap_black/views/index.ejs new file mode 100644 index 0000000..e40446d --- /dev/null +++ b/themes/bootstrap_black/views/index.ejs @@ -0,0 +1,124 @@ + + + +<%- include("extra/meta", {title: "Welcome to the "+dataset.forum_name+"-forum!" }) %> + + + + <%- include("extra/navbar") %> + + +
+ +
+
+
+ +

Forum category

+ + + + + + + + + + + + + + + + + +
ForumTopicsPostsLast post
+

Forum name

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In laoreet pellentesque lorem sed elementum.

+
+
5
+
+
18
+
+

Post name

+ +
05 Apr 2017, 20:07
+
+
+
+
+ +
+
+
+ + <%- include("extra/footer") %> + + + + \ No newline at end of file diff --git a/public/themes/common/main.css b/themes/common/public/main.css similarity index 100% rename from public/themes/common/main.css rename to themes/common/public/main.css diff --git a/views/admin.ejs b/themes/common/views/admin.ejs similarity index 88% rename from views/admin.ejs rename to themes/common/views/admin.ejs index 4a247c9..b6d6fc0 100644 --- a/views/admin.ejs +++ b/themes/common/views/admin.ejs @@ -1,11 +1,12 @@ -<%- include("extra/meta", {title: "Admin Panel!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Admin Panel!" }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> + - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> +
@@ -107,7 +108,7 @@ }); - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/categories.ejs b/themes/common/views/categories.ejs similarity index 82% rename from views/categories.ejs rename to themes/common/views/categories.ejs index 9692c88..d1813e5 100644 --- a/views/categories.ejs +++ b/themes/common/views/categories.ejs @@ -1,11 +1,12 @@ -<%- include("extra/meta", {title: "Thread list!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Category list!" }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> +
<% categories.forEach(category=>{ %> @@ -48,7 +49,7 @@
<% } %> - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/config.ejs b/themes/common/views/config.ejs similarity index 73% rename from views/config.ejs rename to themes/common/views/config.ejs index b52ad92..8e74e89 100644 --- a/views/config.ejs +++ b/themes/common/views/config.ejs @@ -1,10 +1,11 @@ -<%- include("extra/meta", {title: "Edit Forum Config!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Edit Forum Config!" }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> +

Edit forum config

Edit config @@ -24,7 +25,7 @@ } - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/create_category.ejs b/themes/common/views/create_category.ejs similarity index 80% rename from views/create_category.ejs rename to themes/common/views/create_category.ejs index 0b771f8..b897f48 100644 --- a/views/create_category.ejs +++ b/themes/common/views/create_category.ejs @@ -1,9 +1,10 @@ -<%- include("extra/meta", {title: "Create Category!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Create Category!" }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> + @@ -41,7 +42,7 @@ }); - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/create_thread.ejs b/themes/common/views/create_thread.ejs similarity index 84% rename from views/create_thread.ejs rename to themes/common/views/create_thread.ejs index 2a3f2cf..82a4222 100644 --- a/views/create_thread.ejs +++ b/themes/common/views/create_thread.ejs @@ -1,11 +1,12 @@ -<%- include("extra/meta", {title: "Create thread!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Create thread!" }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> + @@ -53,7 +54,7 @@ }); - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/edit_user.ejs b/themes/common/views/edit_user.ejs similarity index 85% rename from views/edit_user.ejs rename to themes/common/views/edit_user.ejs index 64ff508..05d1cab 100644 --- a/views/edit_user.ejs +++ b/themes/common/views/edit_user.ejs @@ -1,11 +1,12 @@ -<%- include("extra/meta", {title: member.name }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: member.name }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> + @@ -47,7 +48,7 @@ location.reload(); }); - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/themes/common/views/error.ejs b/themes/common/views/error.ejs new file mode 100644 index 0000000..99c8e38 --- /dev/null +++ b/themes/common/views/error.ejs @@ -0,0 +1,17 @@ + + + +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: type+" error!" }) %> + + + + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> + + +

<%= type %>

+

<%= error %>

+ <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> + + + + \ No newline at end of file diff --git a/themes/common/views/extra/footer.ejs b/themes/common/views/extra/footer.ejs new file mode 100644 index 0000000..aadaf4e --- /dev/null +++ b/themes/common/views/extra/footer.ejs @@ -0,0 +1,44 @@ + \ No newline at end of file diff --git a/themes/common/views/extra/navbar.ejs b/themes/common/views/extra/navbar.ejs new file mode 100644 index 0000000..602c135 --- /dev/null +++ b/themes/common/views/extra/navbar.ejs @@ -0,0 +1,44 @@ +<% if (user?.admin){ %> + + <% } %> + +
+ +
+ + <% if (user){ %> + +
<%= user.name %> +
+
+
+ Logout + <% } else { %> + + Login + Register + + <% } %> + +
+
+ \ No newline at end of file diff --git a/themes/common/views/extra/usermenu.ejs b/themes/common/views/extra/usermenu.ejs new file mode 100644 index 0000000..8b9a7dd --- /dev/null +++ b/themes/common/views/extra/usermenu.ejs @@ -0,0 +1,72 @@ +<% if(user?.admin || user?.id === member.id){ %> +
+ User Menu: + + <% if (!member.discordID && discord && user?.id === member.id) { %> + DC auth + <% } else if(member.discordID && user?.id === member.id) { %> + Unauth DC! + <% } %> + Upload avatar + Edit user! + + + <% if (member.hideLastSeen) {%> + Unhide last seen! + <% } else { %> + Hide last seen! + <% } %> + + <% if (member.deleted) {%> +

This user has been deleted!

+ Undelete user! + <% } else if (user?.admin){ %> + Delete user! + <% } %> + <% if (user?.admin) {%> +

IP adresses of the user:

+ + + <% } %> +
+ <% } %> \ No newline at end of file diff --git a/views/index.ejs b/themes/common/views/index.ejs similarity index 72% rename from views/index.ejs rename to themes/common/views/index.ejs index 19d83b7..23fcef7 100644 --- a/views/index.ejs +++ b/themes/common/views/index.ejs @@ -1,13 +1,12 @@ -<%- include("extra/meta", {title: "Welcome to the "+dataset.forum_name+"-forum!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Welcome to the "+dataset.forum_name+"-forum!" }) %> - + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> - <%- include("extra/navbar") %>
<% if (user) { %> @@ -44,12 +43,12 @@
-

Memory usage:

-

<%= mem.toFixed(2); %> MB

+

Category count:

+

<%= categories %>

- <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/login.ejs b/themes/common/views/login.ejs similarity index 71% rename from views/login.ejs rename to themes/common/views/login.ejs index a666160..9ebb8d2 100644 --- a/views/login.ejs +++ b/themes/common/views/login.ejs @@ -1,11 +1,12 @@ -<%- include("extra/meta", {title: "Log in!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Log in!" }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> +

Login

@@ -20,7 +21,7 @@ <% } %> Register - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/messages.ejs b/themes/common/views/messages.ejs similarity index 72% rename from views/messages.ejs rename to themes/common/views/messages.ejs index cf8c7f3..41a5f9e 100644 --- a/views/messages.ejs +++ b/themes/common/views/messages.ejs @@ -1,11 +1,12 @@ -<%- include("extra/meta", {title:"Message search!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title:"Message search!" }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> +
@@ -27,7 +28,7 @@ <% }); %>
- <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/register.ejs b/themes/common/views/register.ejs similarity index 74% rename from views/register.ejs rename to themes/common/views/register.ejs index 326f870..a6855c0 100644 --- a/views/register.ejs +++ b/themes/common/views/register.ejs @@ -1,12 +1,13 @@ -<%- include("extra/meta", {title: "Register!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Register!" }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> +

Register

@@ -24,7 +25,7 @@ Login - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/search.ejs b/themes/common/views/search.ejs similarity index 78% rename from views/search.ejs rename to themes/common/views/search.ejs index 2ab49ff..b9bcba0 100644 --- a/views/search.ejs +++ b/themes/common/views/search.ejs @@ -1,11 +1,12 @@ -<%- include("extra/meta", {title: "Search page!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Search page!" }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> +

Search

@@ -27,7 +28,7 @@ - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/setup.ejs b/themes/common/views/setup.ejs similarity index 86% rename from views/setup.ejs rename to themes/common/views/setup.ejs index 943cec0..e967a3f 100644 --- a/views/setup.ejs +++ b/themes/common/views/setup.ejs @@ -1,11 +1,12 @@ -<%- include("extra/meta", {title: "Setup the Akf-forum!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Setup the Akf-forum!" }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> +

Setup

There is default settings for akf-forum, you not need to edit them, but you can! And, the first registered user will be admin.

diff --git a/views/thread.ejs b/themes/common/views/thread.ejs similarity index 95% rename from views/thread.ejs rename to themes/common/views/thread.ejs index d846a6e..948ee9b 100644 --- a/views/thread.ejs +++ b/themes/common/views/thread.ejs @@ -1,11 +1,12 @@ -<%- include("extra/meta", {title: thread.title }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: thread.title }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> + @@ -159,7 +160,7 @@ - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/threads.ejs b/themes/common/views/threads.ejs similarity index 85% rename from views/threads.ejs rename to themes/common/views/threads.ejs index bd62e2f..5b8380e 100644 --- a/views/threads.ejs +++ b/themes/common/views/threads.ejs @@ -1,11 +1,12 @@ -<%- include("extra/meta", {title: "Thread list!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "Thread list!" }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> +

<%= title || "Threads" %>

<%= desp %>

@@ -54,7 +55,7 @@
<% } %> - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/user.ejs b/themes/common/views/user.ejs similarity index 89% rename from views/user.ejs rename to themes/common/views/user.ejs index 668b9e6..bf028e1 100644 --- a/views/user.ejs +++ b/themes/common/views/user.ejs @@ -1,11 +1,12 @@ -<%- include("extra/meta", {title: member.name }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: member.name }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> + @@ -72,7 +73,7 @@ color: var(--anti); - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/views/users.ejs b/themes/common/views/users.ejs similarity index 82% rename from views/users.ejs rename to themes/common/views/users.ejs index 4fba3a9..7fd7954 100644 --- a/views/users.ejs +++ b/themes/common/views/users.ejs @@ -1,13 +1,14 @@ -<%- include("extra/meta", {title: "User list!" }) %> +<%- include(dataset.getFile(dataset.theme.codename +"/views/extra/meta"), {title: "User list!" }) %> - <%- include("extra/navbar") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/navbar")) %> +
<% users.filter(member=> !member.deleted || user.admin ).forEach(member => { %>
@@ -43,7 +44,7 @@
<% } %> - <%- include("extra/footer") %> + <%- include(dataset.getFile(dataset.theme.codename +"/views/extra/footer")) %> diff --git a/public/themes/default_black/index.js b/themes/default_black/index.js similarity index 100% rename from public/themes/default_black/index.js rename to themes/default_black/index.js diff --git a/public/themes/default_black/main.css b/themes/default_black/public/main.css similarity index 100% rename from public/themes/default_black/main.css rename to themes/default_black/public/main.css diff --git a/themes/default_black/views/extra/footer.ejs b/themes/default_black/views/extra/footer.ejs new file mode 100644 index 0000000..9e93ba4 --- /dev/null +++ b/themes/default_black/views/extra/footer.ejs @@ -0,0 +1 @@ +<%- include(dataset.getFile("common/views/extra/footer")) %> \ No newline at end of file diff --git a/public/themes/default_black/extra/meta.ejs b/themes/default_black/views/extra/meta.ejs similarity index 100% rename from public/themes/default_black/extra/meta.ejs rename to themes/default_black/views/extra/meta.ejs diff --git a/themes/default_black/views/extra/navbar.ejs b/themes/default_black/views/extra/navbar.ejs new file mode 100644 index 0000000..edd8d76 --- /dev/null +++ b/themes/default_black/views/extra/navbar.ejs @@ -0,0 +1 @@ +<%- include(dataset.getFile("common/views/extra/navbar")) %> \ No newline at end of file diff --git a/themes/default_black/views/extra/usermenu.ejs b/themes/default_black/views/extra/usermenu.ejs new file mode 100644 index 0000000..ab0693b --- /dev/null +++ b/themes/default_black/views/extra/usermenu.ejs @@ -0,0 +1 @@ +<%- include(dataset.getFile("common/views/extra/usermenu")) %> \ No newline at end of file diff --git a/public/themes/default_white/index.js b/themes/default_white/index.js similarity index 100% rename from public/themes/default_white/index.js rename to themes/default_white/index.js diff --git a/public/themes/default_white/main.css b/themes/default_white/public/main.css similarity index 100% rename from public/themes/default_white/main.css rename to themes/default_white/public/main.css diff --git a/themes/default_white/views/extra/footer.ejs b/themes/default_white/views/extra/footer.ejs new file mode 100644 index 0000000..9e93ba4 --- /dev/null +++ b/themes/default_white/views/extra/footer.ejs @@ -0,0 +1 @@ +<%- include(dataset.getFile("common/views/extra/footer")) %> \ No newline at end of file diff --git a/public/themes/default_white/extra/meta.ejs b/themes/default_white/views/extra/meta.ejs similarity index 100% rename from public/themes/default_white/extra/meta.ejs rename to themes/default_white/views/extra/meta.ejs diff --git a/themes/default_white/views/extra/navbar.ejs b/themes/default_white/views/extra/navbar.ejs new file mode 100644 index 0000000..edd8d76 --- /dev/null +++ b/themes/default_white/views/extra/navbar.ejs @@ -0,0 +1 @@ +<%- include(dataset.getFile("common/views/extra/navbar")) %> \ No newline at end of file diff --git a/themes/default_white/views/extra/usermenu.ejs b/themes/default_white/views/extra/usermenu.ejs new file mode 100644 index 0000000..ab0693b --- /dev/null +++ b/themes/default_white/views/extra/usermenu.ejs @@ -0,0 +1 @@ +<%- include(dataset.getFile("common/views/extra/usermenu")) %> \ No newline at end of file diff --git a/views/error.ejs b/views/error.ejs deleted file mode 100644 index 815fc1d..0000000 --- a/views/error.ejs +++ /dev/null @@ -1,16 +0,0 @@ - - - -<%- include("extra/meta", {title: type+" error!" }) %> - - - - <%- include("extra/navbar") %> - -

<%= type %>

-

<%= error %>

- <%- include("extra/footer") %> - - - - \ No newline at end of file diff --git a/views/extra/footer.ejs b/views/extra/footer.ejs deleted file mode 100644 index 7fe0c27..0000000 --- a/views/extra/footer.ejs +++ /dev/null @@ -1 +0,0 @@ -<%- include(dataset.getFile(dataset.theme.codename +"/extra/footer")) %> \ No newline at end of file diff --git a/views/extra/meta.ejs b/views/extra/meta.ejs deleted file mode 100644 index a09ded5..0000000 --- a/views/extra/meta.ejs +++ /dev/null @@ -1 +0,0 @@ -<%- include(dataset.getFile(dataset.theme.codename +"/extra/meta")) %> \ No newline at end of file diff --git a/views/extra/navbar.ejs b/views/extra/navbar.ejs deleted file mode 100644 index 8772e03..0000000 --- a/views/extra/navbar.ejs +++ /dev/null @@ -1 +0,0 @@ -<%- include(dataset.getFile(dataset.theme.codename +"/extra/navbar")) %> \ No newline at end of file