const chatContainer = document.getElementById('chat-container'); let lastMessageCount = 0; function fetchChatMessages() { fetch('http://127.0.0.1:5000/chat') .then(response => response.json()) .then(messages => { // Only append new messages if (messages.length > lastMessageCount) { for (let i = lastMessageCount; i < messages.length; i++) { const messageData = messages[i]; const messageElement = document.createElement('div'); messageElement.classList.add('chat-message'); const authorElement = document.createElement('span'); authorElement.classList.add('chat-author'); authorElement.style.color = messageData.author_color; // Apply author color authorElement.textContent = `${messageData.author}: `; const textElement = document.createElement('span'); textElement.classList.add('chat-text'); // Basic rich markup conversion (e.g., [blue]text[/blue] to text) let formattedMessage = messageData.message; formattedMessage = formattedMessage.replace(/\[magenta\](.*?)\[\/magenta\]/g, '$1'); formattedMessage = formattedMessage.replace(/\[blue\](.*?)\[\/blue\]/g, '$1'); textElement.innerHTML = formattedMessage; messageElement.appendChild(authorElement); messageElement.appendChild(textElement); chatContainer.prepend(messageElement); // Add new messages to the top (due to flex-direction: column-reverse) // Keep only a certain number of messages visible while (chatContainer.children.length > 50) { // Keep last 50 messages chatContainer.removeChild(chatContainer.lastChild); } } lastMessageCount = messages.length; } }) .catch(error => console.error('Error fetching chat messages:', error)); } // Fetch messages every 1 second setInterval(fetchChatMessages, 1000); // Initial fetch fetchChatMessages();