import request from "./request.js";
const messages = document.getElementById("messages");
let messages_raw = [];
function renderMessage(message) {
const messageElement = document.createElement("div");
messageElement.classList.add("message");
messageElement.setAttribute("id", "message-" + message.id);
messageElement.innerHTML = `
${new Date(message.time).toLocaleString()}
${message.content.replaceAll("\n", "
")}
${!message.deleted ?
`` :
"
This message has been deleted
"}
${message.reactCount}
`;
messages.appendChild(messageElement);
messages.innerHTML += "
";
};
/**
* Main Renderer
*/
(async () => {
messages_raw = await fetch(`/api/threads/${messages.getAttribute("value")}/messages/`).then(res => res.json());
if (messages_raw?.error) {
document.getElementById("messages").innerHTML
+= 'THIS THREAD HAS NOT GOT ANY MESSAGE
';
} else
for (const message of messages_raw)
renderMessage(message);
window.scrollTo(0, document.body.scrollHeight);
})();
/**
* Message Sender
*/
document.getElementById("send").addEventListener("submit", async e => {
e.preventDefault();
const form = e.target;
const data = new FormData(form);
request("/api/messages", "POST", { threadID: data.get("threadID"), content: data.get("content") })
.then(res => {
if (!res) return;
form.reset();
res.reactCount = 0;
renderMessage(res);
});
});
/**
* Button Listener
*/
document.addEventListener("click", async e => {
// e.preventDefault();
if (e.target.id === "delete_thread") {
const response = await request("/api/threads/" + e.target.value + "/delete");
if (response.deleted) {
alert("Thread deleted");
location.reload();
}
} else if (e.target.id === "undelete_thread") {
const response = await request("/api/threads/" + e.target.value + "/undelete");
if (!response.deleted) {
alert("Thread undeleted");
location.reload();
}
} else if (e.target.id === "delete_message") {
e.preventDefault();
const response = await request(`/api/messages/${e.target.value}/delete`);
if (response.deleted) {
alert("Message deleted");
document.getElementById("message-delete-" + e.target.value).innerHTML = "This message has been deleted
";
}
} /*else if (e.target.id === "edit_thread") {
window.location.href = "/threads/<%= thread.id }/edit";
} */
if (!e.target.id.includes("like")) return;
const res = await request("/api/messages/" + e.target.value + "/react/" + e.target.id)
document.getElementById("count" + e.target.value).innerHTML = res.reactCount;
});