File size: 2,530 Bytes
0632cd1 1d7750a 0632cd1 56779ed 0632cd1 56779ed |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
const chatBody = document.getElementById('chatBody')
const openButton = document.getElementById('toggleButton')
const chatbotWindow = document.getElementById('chatbotWindow');
let socket
let isFirstWord = false
let botMessage
window.addEventListener('load', adjustChatBodyHeight);
window.addEventListener('resize', adjustChatBodyHeight);
function getTotalHeight(element) {
const styles = window.getComputedStyle(element);
const margins = ['marginTop', 'marginBottom', 'borderTopWidth', 'borderBottomWidth']
.reduce((acc, style) => acc + parseFloat(styles[style]), 0);
return element.offsetHeight + margins;
}
function adjustChatBodyHeight() {
const chatFooter = document.getElementById('chatFooter')
const chatHeader = document.getElementById('chatHeader')
const chatFooterHeight = getTotalHeight(chatFooter);
const chatHeaderHeight = getTotalHeight(chatHeader);
const viewportHeight = window.innerHeight - chatHeaderHeight - chatFooterHeight;
chatBody.style.height = viewportHeight + 'px';
}
function openChatBotWindow() {
let lastScrollHeight = chatBody.scrollHeight;
const uuid = generateUUID()
socket = new WebSocket(`wss://brestok-javeaai.hf.space/ws/${uuid}`);
socket.onclose = (event) => console.log('WebSocket disconnected', event);
socket.onerror = (error) => {
alert('Something was wrong. Try again later.')
window.location.reload()
};
socket.onmessage = (event) => {
if (chatBody.scrollHeight > lastScrollHeight) {
chatBody.scrollTop = chatBody.scrollHeight;
lastScrollHeight = chatBody.scrollHeight;
}
if (!isFirstWord) {
isFirstWord = true
createNewMessage(event.data, 'bot')
const botMessages = document.querySelectorAll('.bot_message');
botMessage = botMessages[botMessages.length - 1];
} else {
const aiMessage = event.data
if (aiMessage.startsWith('ENRICHED:')) {
botMessage.innerHTML = aiMessage.substring(9)
enrichAIResponse(botMessage)
} else {
botMessage.innerHTML = marked.parse(aiMessage)
}
}
}
}
function closeChatBotWindow() {
socket.close()
chatbotWindow.style.visibility = 'hidden'
openButton.style.display = 'block'
}
openButton.addEventListener('click', function () {
chatbotWindow.style.visibility = "visible";
openButton.style.display = 'none'
openChatBotWindow();
}); |