let ws = null; function uploadFile() { const file = document.getElementById("fileInput").files[0]; if (!file) return alert("Choose a file!"); const formData = new FormData(); formData.append("file", file); // Show spinner document.getElementById("spinner").style.display = "block"; fetch("/upload", { method: "POST", body: formData }) .then(res => res.json()) .then(data => { // Hide spinner document.getElementById("spinner").style.display = "none"; if (data.status === "success") { document.getElementById("uploadStatus").innerText = "Uploaded!"; startChat(); } else { alert(data.message); } }) .catch(err => { document.getElementById("spinner").style.display = "none"; alert("Upload failed"); }); } function startChat() { ws = new WebSocket(`ws://${location.host}/ws`); // Show chat card document.getElementById("chatCard").style.display = "block"; ws.onmessage = (e) => { appendMessage("Bot: " + e.data); }; } function sendMessage() { const input = document.getElementById("msg"); const text = input.value.trim(); if (!text) return; appendMessage("You: " + text); input.value = ""; // Show chat spinner document.getElementById("chatSpinner").style.display = "block"; // Send message to WebSocket ws.send(text); // Wait for backend reply ws.onmessage = (e) => { // Hide spinner document.getElementById("chatSpinner").style.display = "none"; appendMessage("Bot: " + e.data); // Keep WebSocket listener alive for next message ws.onmessage = (e) => { document.getElementById("chatSpinner").style.display = "none"; appendMessage("Bot: " + e.data); }; }; } function appendMessage(msg) { const box = document.getElementById("messages"); box.innerHTML += msg + "
"; box.scrollTop = box.scrollHeight; }