This repository has been archived on 2024-10-20. You can view files and clone it, but cannot push or open issues or pull requests.
burgercat/static/js/chat.js

100 lines
3.2 KiB
JavaScript
Raw Normal View History

2023-07-11 20:41:57 +01:00
let channelDiv = document.getElementById("channelDiv")
let messageDiv = document.getElementById("messageDiv")
let messageBox = document.getElementById("messageBox")
let statusMessage = document.getElementById("statusMessage")
let channelID = 0
async function updateMessages(id) {
try {
let response = await fetch("/api/chat/getmessages/" + id);
let messages = await response.json()
statusMessage.innerText = ""
document.querySelectorAll(".messageParagraph").forEach(el => el.remove());
for (let i in messages) {
let messageParagraph = document.createElement("p")
2023-07-12 17:57:14 +01:00
let timeParagraph = document.createElement("p")
2023-07-11 20:41:57 +01:00
messageParagraph.appendChild(document.createTextNode(messages[i]["creator"]["username"] + ": " + messages[i]["content"]))
messageParagraph.classList.add("messageParagraph")
messageParagraph.id = "messageParagraph" + messages[i]["id"]
2023-07-12 17:57:14 +01:00
messageParagraph.appendChild(timeParagraph)
2023-07-12 19:23:58 +01:00
let time = new Intl.DateTimeFormat("en-GB", { hour: "numeric", minute: "numeric" }).format(Number(messages[i]["created"].split(".")[0]) * 1000 + 20265)
2023-07-12 17:57:14 +01:00
messageParagraph.innerHTML = "<span style='color: #515051; font-size: 14px;'>" + time + "</span> " + messageParagraph.innerHTML
2023-07-11 20:41:57 +01:00
messageDiv.append(messageParagraph)
}
}
catch {
statusMessage.innerText = "Not connected"
}
}
function selectChannel(id) {
channelID = id
let selectedButton = channelDiv.querySelector(".selected");
if (selectedButton) {
selectedButton.classList.remove("selected");
}
let channelButton = document.getElementById("channelButton" + id)
if (channelButton) {
channelButton.classList.add("selected")
}
else {
console.log("channelButton not found")
}
updateMessages(id)
}
async function updateRooms() {
let response = await fetch("/api/chat/listrooms");
let rooms = await response.json()
for (let i in rooms) {
let channelButton = document.createElement("button")
channelButton.appendChild(document.createTextNode(rooms[i]["name"]))
channelButton.id = "channelButton" + rooms[i]["id"]
channelButton.onclick = function () { selectChannel(rooms[i]["id"]) }
channelDiv.append(channelButton)
}
selectChannel(1)
}
async function sendMessage(content, id) {
fetch("/api/chat/send/" + String(id), {
method: "POST",
body: JSON.stringify({
content: content
}),
headers: {
"Content-Type": "application/json"
}
})
}
messageBox.addEventListener("keyup", function onEvent(event) {
if (event.key === "Enter") {
2023-07-12 00:03:03 +01:00
if (!messageBox.value == "") {
2023-07-12 01:24:51 +01:00
if (messageBox.value.length < 140) {
sendMessage(messageBox.value, channelID)
updateMessages(channelID)
messageBox.value = ""
}
2023-07-12 00:03:03 +01:00
}
2023-07-11 20:41:57 +01:00
}
})
function update() {
updateMessages(channelID)
setTimeout(update, 1500);
}
window.addEventListener("load", function () {
updateRooms()
update()
})