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