JaveaAI / static /js /utils.js
brestok's picture
Upload 37 files
56779ed verified
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';
});
});
}