|
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'; |
|
}); |
|
}); |
|
} |
|
|