diff --git a/src/snek/templates/web.html b/src/snek/templates/web.html index 4078d92..01c5506 100644 --- a/src/snek/templates/web.html +++ b/src/snek/templates/web.html @@ -1,99 +1,89 @@ {% extends "app.html" %} + {% block main %} - - {{ channel.label.value }} + + + {{ channel.label.value }} + - {% for message in messages %} - {% autoescape false %} - {{message.html}} - {% endautoescape %} - - {{message.user_nick[0]}} - - {% autoescape false %} - {{ message.html }} - - {% endautoescape %} - {{message.created_at}} - - + {% autoescape false %} + {{ message.html }} + {% endautoescape %} {% endfor %} - - + + - - + }); + } + + function updateTimes() { + document.querySelectorAll(".time").forEach((time) => { + time.innerText = app.timeDescription(time.dataset.created_at); + }); + } + + function updateLayout() { + const messagesContainer = document.querySelector(".chat-messages"); + messagesContainer.scrollTop = messagesContainer.scrollHeight + 1000; + + updateTimes(); + let previousUser = null; + document.querySelectorAll(".message").forEach((message) => { + if (previousUser !== message.dataset.user_uid) { + message.classList.add("switch-user"); + previousUser = message.dataset.user_uid; + } else { + message.classList.remove("switch-user"); + } + }); + } + + setInterval(updateTimes, 1000); + + app.addEventListener("channel-message", (data) => { + if (data.channel_uid !== channelUid) return; + + if (data.username !== "{{ user.username.value }}") { + app.playSound(0); + } + + const message = document.createElement("div"); + message.dataset.color = data.color; + message.dataset.created_at = data.created_at; + message.dataset.user_nick = data.user_nick; + message.dataset.uid = data.uid; + message.innerHTML = data.html; + document.querySelector(".chat-messages").appendChild(message.firstChild); + updateLayout(); + }); + + initInputField(document.querySelector("textarea")); + updateLayout(); + {% endblock %} + +