mirror of https://notabug.org/acetone/ircabot.git
164 lines
5.6 KiB
JavaScript
164 lines
5.6 KiB
JavaScript
let objPath = document.getElementById("path");
|
|
let objPayload = document.getElementById("payload");
|
|
let objCurrentServerStatus = document.getElementById("serverStatus");
|
|
let objOnlineCounter = document.getElementById("online");
|
|
let objOnlineList = document.getElementById("onlineList");
|
|
let objMusicanotes = document.getElementById("musicanotes");
|
|
|
|
let lastMessageId = document.getElementById("LMId").innerText;
|
|
let reqIsFailed = false;
|
|
let firstLoadingWithDisconnectedServer = false;
|
|
let unreadedCount = 0;
|
|
let soundEnabled = false;
|
|
|
|
const ajaxUrl = document.getElementById("ajaxPath").innerText;
|
|
const originalTitle = document.title;
|
|
const audio = new Audio('/newmessage.mp3');
|
|
const HTML_SERVER_ONLINE_MARKER = "✅";
|
|
const HTML_SERVER_OFFLINE_MARKER = "❌";
|
|
|
|
function sound() {
|
|
if (!soundEnabled) {
|
|
soundEnabled = true;
|
|
objMusicanotes.style.opacity = "1";
|
|
objMusicanotes.title = "Sound notifications enabled";
|
|
} else {
|
|
soundEnabled = false;
|
|
objMusicanotes.style.opacity = ".3";
|
|
objMusicanotes.title = "Sound notifications disabled";
|
|
}
|
|
}
|
|
|
|
function appendMessage(nick /* if == "***", then system message */, message)
|
|
{
|
|
let messageObject = document.createElement("div");
|
|
messageObject.setAttribute("class", "main_payload__chat");
|
|
const date = new Date;
|
|
messageObject.setAttribute("title", date.toLocaleString());
|
|
|
|
let nicknameContainer = document.createElement("div");
|
|
nicknameContainer.setAttribute("class", "main_payload__chat_username");
|
|
if (nick === "***") {
|
|
nicknameContainer.setAttribute("style", "color: white; text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;");
|
|
nicknameContainer.innerText = "IRCaBot";
|
|
} else {
|
|
nicknameContainer.innerText = nick;
|
|
nicknameContainer.setAttribute("style", "color: #1b4af5");
|
|
if (document.hidden) {
|
|
unreadedCount++;
|
|
document.title = '(' + unreadedCount + ') ' + originalTitle;
|
|
if (soundEnabled) {
|
|
audio.play();
|
|
}
|
|
}
|
|
}
|
|
|
|
let textContainer = document.createElement("div");
|
|
textContainer.setAttribute("class", "main_payload__chat_mail");
|
|
textContainer.innerHTML = message;
|
|
|
|
messageObject.appendChild(nicknameContainer);
|
|
messageObject.appendChild(textContainer);
|
|
objPayload.appendChild(messageObject);
|
|
objPayload.scrollBy(0,1000);
|
|
}
|
|
|
|
function changeOnlineList(nicksArray)
|
|
{
|
|
objOnlineList.innerHTML = "";
|
|
nicksArray.forEach(function(nick) {
|
|
let nickObject = document.createElement("div");
|
|
nickObject.setAttribute("class", "main_middle__online_point");
|
|
nickObject.innerText = nick;
|
|
objOnlineList.appendChild(nickObject);
|
|
});
|
|
}
|
|
|
|
function toAJAX()
|
|
{
|
|
loop();
|
|
let xhttp = new XMLHttpRequest();
|
|
xhttp.onload = function() {
|
|
if (reqIsFailed) {
|
|
reqIsFailed = false;
|
|
objPath.removeAttribute("style");
|
|
}
|
|
const answer = JSON.parse(xhttp.responseText);
|
|
if (firstLoadingWithDisconnectedServer && answer.serverStatus) {
|
|
firstLoadingWithDisconnectedServer = false;
|
|
appendMessage("***", "<b>Connected to the server</b>. New messages will appear below!");
|
|
objPath.removeAttribute("style");
|
|
}
|
|
if (!answer.status) {
|
|
appendMessage("***", answer.message);
|
|
return;
|
|
}
|
|
if (answer.serverStatusChanged) {
|
|
if (answer.serverStatus) {
|
|
objPath.removeAttribute("style");
|
|
objCurrentServerStatus.innerText = HTML_SERVER_ONLINE_MARKER;
|
|
} else {
|
|
objPath.setAttribute("style", "color: red");
|
|
objCurrentServerStatus.innerText = HTML_SERVER_OFFLINE_MARKER;
|
|
}
|
|
}
|
|
if (answer.onlineUsersChanged) {
|
|
const onlineInfo = answer.online;
|
|
objOnlineCounter.innerText = onlineInfo.count;
|
|
changeOnlineList(onlineInfo.list);
|
|
}
|
|
if (answer.LMIdChanged) {
|
|
lastMessageId = answer.LMId;
|
|
let msgArray = answer.newMessages;
|
|
msgArray.forEach(function(singleMsg) {
|
|
appendMessage(singleMsg.user, singleMsg.text);
|
|
});
|
|
}
|
|
setTimeout(toAJAX, 2000); // 2 sec
|
|
}
|
|
xhttp.onerror = function() {
|
|
if (!reqIsFailed) {
|
|
reqIsFailed = true;
|
|
objPath.setAttribute("style", "color: red");
|
|
}
|
|
setTimeout(toAJAX, 1000); // 1 sec
|
|
}
|
|
|
|
let currentServerStatus = objCurrentServerStatus.innerText === HTML_SERVER_ONLINE_MARKER;
|
|
xhttp.open("GET", "/ajax/"+ajaxUrl+"?onlineCounter="+objOnlineCounter.innerText+"&messageId="+lastMessageId+"&serverStatus="+currentServerStatus);
|
|
xhttp.send();
|
|
}
|
|
|
|
function loop()
|
|
{
|
|
if (!document.hidden && unreadedCount>0) {
|
|
unreadedCount = 0;
|
|
document.title = originalTitle;
|
|
}
|
|
let dots = objPath.innerText;
|
|
if (dots === "...") {
|
|
dots = ""
|
|
} else {
|
|
dots += ".";
|
|
}
|
|
objPath.innerText = dots;
|
|
}
|
|
|
|
function main()
|
|
{
|
|
sound();
|
|
objPayload.scrollBy(0,100000);
|
|
let objHr = document.getElementById("hr");
|
|
if (objCurrentServerStatus.innerText === HTML_SERVER_OFFLINE_MARKER) {
|
|
firstLoadingWithDisconnectedServer = true;
|
|
objPath.setAttribute("style", "color: red");
|
|
hr.innerHTML = "Now the logger is disconnected from the server, so there will be no new messages.";
|
|
} else {
|
|
hr.innerHTML = "<b>New messages will appear below<b>";
|
|
}
|
|
|
|
toAJAX();
|
|
}
|
|
|
|
main();
|