const sendButton = document.getElementById('sendButton') const textInput = document.getElementById('textInput') function createNewMessage(text, type) { const message = document.createElement('div') message.className = 'message' let content = document.createElement('div') content.style.whiteSpace = "pre-line" if (type === 'bot') { content.className = 'bot_message mt-4 py-3 px-4 rounded-4 w-75 ms-3' } else { content.className = 'user_message mt-4 py-3 px-4 rounded-4 w-75 me-3' } content.innerText = text message.appendChild(content) chatBody.appendChild(message) } function sendMessageToServer() { const userQuery = textInput.value; if (userQuery.length === 0) { return } createNewMessage(userQuery, 'user') socket.send(JSON.stringify({'query': userQuery, 'country': "Undefined"})); textInput.value = '' isFirstWord = false chatBody.scrollTop = chatBody.scrollHeight; } function generateUUID() { const arr = new Uint8Array(16); window.crypto.getRandomValues(arr); arr[6] = (arr[6] & 0x0f) | 0x40; arr[8] = (arr[8] & 0x3f) | 0x80; return ([...arr].map((b, i) => (i === 4 || i === 6 || i === 8 || i === 10 ? "-" : "") + b.toString(16).padStart(2, "0") ).join("")); } textInput.addEventListener("keydown", function (event) { if (event.key === "Enter") { sendMessageToServer(); } }); sendButton.addEventListener("click", sendMessageToServer); function enrichAIResponse(botMessageElement) { const links = botMessageElement.querySelectorAll('.extraDataLink'); links.forEach(link => { const tooltip = link.nextElementSibling; link.addEventListener('mouseenter', function () { tooltip.style.display = 'block'; const tooltipWidth = parseInt(link.offsetWidth) * 2 tooltip.style.width = tooltipWidth + 'px' const tooltipImg = tooltip.querySelector('.tooltip-img') if (tooltipImg) { tooltipImg.width = tooltipWidth - 16 } const linkRect = this.getBoundingClientRect(); if (linkRect.top < tooltip.offsetHeight + 4) { tooltip.style.top = (window.scrollY + linkRect.bottom + 4) + 'px'; } else { tooltip.style.top = (window.scrollY + linkRect.top - tooltip.offsetHeight - 4) + 'px'; } tooltip.style.left = (linkRect.left + (linkRect.width / 2) - (tooltipWidth / 2)) + 'px'; }); link.addEventListener('mouseleave', function () { setTimeout(() => { if (!tooltip.matches(':hover')) { tooltip.style.display = 'none'; } }, 300) }); tooltip.addEventListener('mouseleave', function () { this.style.display = 'none'; }); }); }