mirror of
https://github.com/Akif9748/akf-forum.git
synced 2024-11-22 20:10:40 +03:00
Added markdown editor
This commit is contained in:
parent
c06af31f26
commit
00c509d0ec
4 changed files with 28 additions and 21 deletions
|
@ -35,11 +35,14 @@ Akf-forum has got an API for AJAX (fetch), other clients etc. And, you can learn
|
||||||
| To do | Is done? | Priority |
|
| To do | Is done? | Priority |
|
||||||
| ----- | -------- | -------- |
|
| ----- | -------- | -------- |
|
||||||
| Profile Message | 🟡 | LOW |
|
| Profile Message | 🟡 | LOW |
|
||||||
| IPs of users will add SecretModel | ⚪ | MEDIUM |
|
| IPs of users will add UserModel with select- | ⚪ | MEDIUM |
|
||||||
| Better Auth | ⚪ | MEDIUM |
|
| Better Auth | ⚪ | MEDIUM |
|
||||||
|
- mod role, permissions
|
||||||
- Fix footer, theme, category pages
|
- Fix footer, theme, category pages
|
||||||
- upload other photos, model for it
|
- upload other photos, model for it
|
||||||
|
- category system bloat.
|
||||||
|
- replace not found errors with no perm
|
||||||
|
- prewiev for send messages in markdown format.
|
||||||
## Major Version History
|
## Major Version History
|
||||||
- V4: Caching
|
- V4: Caching
|
||||||
- V3: New Theme
|
- V3: New Theme
|
||||||
|
|
|
@ -33,13 +33,13 @@ window.send_edit = async function (id) {
|
||||||
const res = await request(`/api/messages/${id}/`, "PATCH", { content });
|
const res = await request(`/api/messages/${id}/`, "PATCH", { content });
|
||||||
if (res.error) return;
|
if (res.error) return;
|
||||||
alert(`Message updated`);
|
alert(`Message updated`);
|
||||||
message.querySelector(".content").innerHTML = res.content;
|
message.querySelector(".content").innerHTML = converter.makeHtml(res.content);
|
||||||
}
|
}
|
||||||
window.edit_message = async function (id) {
|
window.edit_message = async function (id) {
|
||||||
const content = document.getElementById(`message-${id}`).querySelector(".content");
|
const content = document.getElementById(`message-${id}`).querySelector(".content");
|
||||||
|
|
||||||
content.innerHTML = `
|
content.innerHTML = `
|
||||||
<textarea rows="4" cols="40" id="content">${content.innerHTML}</textarea>
|
<textarea rows="4" cols="40" id="content">${content.rawText}</textarea>
|
||||||
<button onclick="send_edit(${id});" class="btn-primary">Edit!</button>`;
|
<button onclick="send_edit(${id});" class="btn-primary">Edit!</button>`;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,10 +30,8 @@ app.get("/:id/", async (req, res) => {
|
||||||
if (!user || !user.admin) query.deleted = false;
|
if (!user || !user.admin) query.deleted = false;
|
||||||
|
|
||||||
const messages = await Promise.all(await MessageModel.find(query).sort({ time: 1 }).limit(10).skip(page * 10)
|
const messages = await Promise.all(await MessageModel.find(query).sort({ time: 1 }).limit(10).skip(page * 10)
|
||||||
.then(messages => messages.map(async message => {
|
.then(messages => messages.map(message => message.get_author())));
|
||||||
message.content = clearContent(message.content)
|
|
||||||
return await message.get_author();
|
|
||||||
})));
|
|
||||||
res.reply("thread", { page, thread, messages, scroll: req.query.scroll || messages[0]?.id });
|
res.reply("thread", { page, thread, messages, scroll: req.query.scroll || messages[0]?.id });
|
||||||
|
|
||||||
thread.save();
|
thread.save();
|
||||||
|
|
|
@ -6,14 +6,13 @@
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<%- include("extra/navbar") %>
|
<%- include("extra/navbar") %>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/2.1.0/showdown.min.js"></script>
|
||||||
|
|
||||||
<link href='https://unpkg.com/boxicons@2.1.2/css/boxicons.min.css' rel='stylesheet'>
|
<link href='https://unpkg.com/boxicons@2.1.2/css/boxicons.min.css' rel='stylesheet'>
|
||||||
|
|
||||||
<link rel="stylesheet" href="/css/thread.css" />
|
<link rel="stylesheet" href="/css/thread.css" />
|
||||||
<link rel="stylesheet" href="/css/pages.css" />
|
<link rel="stylesheet" href="/css/pages.css" />
|
||||||
|
|
||||||
<% if (user){ %>
|
|
||||||
<script type="module" src="/js/thread.js"></script>
|
|
||||||
<% }; %>
|
|
||||||
|
|
||||||
<div style="text-align:center;padding:8px">
|
<div style="text-align:center;padding:8px">
|
||||||
<div class="title" id="title"><%= thread.title %></div>
|
<div class="title" id="title"><%= thread.title %></div>
|
||||||
|
@ -52,7 +51,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="content"><%- message.content %></div>
|
<div class="content"><%= message.content %></div>
|
||||||
<% if(user){ %>
|
<% if(user){ %>
|
||||||
<% if(user.id === message.authorID || user.admin){ %>
|
<% if(user.id === message.authorID || user.admin){ %>
|
||||||
|
|
||||||
|
@ -92,7 +91,22 @@
|
||||||
|
|
||||||
<% }); %>
|
<% }); %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const converter = new showdown.Converter();
|
||||||
|
for (const message of document.querySelectorAll(".message")) {
|
||||||
|
const content = message.querySelector(".content");
|
||||||
|
content.innerHTML = converter.makeHtml(content.rawText = content.innerHTML);
|
||||||
|
}
|
||||||
|
document.getElementById("message-<%= scroll %>").scrollIntoView();
|
||||||
|
|
||||||
|
function dots(id) {
|
||||||
|
document.getElementById('message-' + id).querySelector(".dots-menu").classList.toggle('active')
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<% if (user){ %>
|
<% if (user){ %>
|
||||||
|
<script type="module" src="/js/thread.js"></script>
|
||||||
|
|
||||||
<div class="message" id="send-div">
|
<div class="message" id="send-div">
|
||||||
<form id="send" style="width:100%">
|
<form id="send" style="width:100%">
|
||||||
|
@ -121,7 +135,7 @@
|
||||||
let tp = Number("<%= thread.pages %>")
|
let tp = Number("<%= thread.pages %>")
|
||||||
let tm = Number("<%= thread.count %>")
|
let tm = Number("<%= thread.count %>")
|
||||||
if (tp * 10 === tm) tp++;
|
if (tp * 10 === tm) tp++;
|
||||||
if (res) location.href = `/threads/${data.get("threadID")}?page=${tp-1}`;
|
if (res) location.href = `/threads/<%= thread.id %>?page=${tp-1}`;
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -148,14 +162,6 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
|
||||||
document.getElementById("message-<%= scroll %>").scrollIntoView();
|
|
||||||
|
|
||||||
function dots(id) {
|
|
||||||
document.getElementById('message-' + id).querySelector(".dots-menu").classList.toggle('active')
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
Loading…
Reference in a new issue