Summarization / static /application.js
ikraamkb's picture
Update static/application.js
08ee300 verified
document.addEventListener("DOMContentLoaded", () => {
console.log("js file loaded")
const convo = document.querySelector(".convo");
const input = document.querySelector(".qt input");
const sendBtn = document.querySelector(".sendingQA");
const fileBtn = document.querySelector(".fa-file");
const imageBtn = document.querySelector(".fa-image");
let selectedFile = null;
let filePreviewBubble = null;
// Hidden file input
const fileInput = document.createElement("input");
fileInput.type = "file";
fileInput.accept = ".pdf,.docx,.pptx,.xlsx,image/*";
fileInput.style.display = "none";
document.body.appendChild(fileInput);
fileBtn.addEventListener("click", () => fileInput.click());
imageBtn.addEventListener("click", () => fileInput.click());
fileInput.addEventListener("change", () => {
const file = fileInput.files[0];
if (file) {
selectedFile = file;
if (filePreviewBubble) filePreviewBubble.remove();
filePreviewBubble = document.createElement("div");
filePreviewBubble.className = "file-preview-bubble bubble right";
filePreviewBubble.textContent = `πŸ“Ž Selected: ${file.name}`;
convo.appendChild(filePreviewBubble);
convo.scrollTop = convo.scrollHeight;
}
});
function createMessageBubble(text, sender = "You", audioSrc = null, fileName = null) {
const bubble = document.createElement("div");
bubble.className = `bubble ${sender === "You" ? "right" : "left"}`;
const label = document.createElement("div");
label.className = "label";
label.innerText = sender;
const message = document.createElement("div");
message.className = "text";
message.style.whiteSpace = "pre-wrap";
if (sender === "You") {
let fileLine = fileName ? `πŸ“Ž Selected file: ${fileName}\n` : "";
message.innerText = `${fileLine}❓ ${text}`;
} else {
message.style.display = "flex";
message.style.justifyContent = "space-between";
message.style.alignItems = "center";
const msgSpan = document.createElement("span");
msgSpan.innerText = text;
message.appendChild(msgSpan);
if (audioSrc) {
const icon = document.createElement("i");
icon.className = "fa-solid fa-volume-high audio-toggle";
icon.title = "Click to mute";
icon.style.cursor = "pointer";
icon.style.fontSize = "18px";
const audio = new Audio(audioSrc);
audio.play();
icon.addEventListener("click", () => {
if (audio.muted) {
audio.currentTime = 0;
audio.muted = false;
icon.classList.remove("fa-volume-xmark");
icon.classList.add("fa-volume-high");
icon.title = "Click to mute";
audio.play();
} else {
audio.muted = true;
icon.classList.remove("fa-volume-high");
icon.classList.add("fa-volume-xmark");
icon.title = "Click to unmute";
}
});
message.appendChild(icon);
}
}
bubble.appendChild(label);
bubble.appendChild(message);
convo.appendChild(bubble);
convo.scrollTop = convo.scrollHeight;
return bubble;
}
async function sendMessage() {
const question = input.value.trim();
if (!question) return;
if (!selectedFile) {
alert("Please upload a document or image first.");
return;
}
// Remove file preview bubble
if (filePreviewBubble) {
filePreviewBubble.remove();
filePreviewBubble = null;
}
// User message with file info
createMessageBubble(question, "You", null, selectedFile.name);
// Aidan is thinking...
const thinkingBubble = createMessageBubble("Wait, Let me think πŸ€”...", "Aidan");
const formData = new FormData();
formData.append("question", question);
formData.append("file", selectedFile);
try {
const response = await fetch("/qtAnswering/predict", {
method: "POST",
body: formData
});
const result = await response.json();
const answerText = result.answer || "No response.";
const audioSrc = result.audio || null;
// Replace "Let me think..." with actual answer
const message = thinkingBubble.querySelector(".text");
message.innerText = answerText;
if (audioSrc) {
const icon = document.createElement("i");
icon.className = "fa-solid fa-volume-high audio-toggle";
icon.title = "Click to mute";
icon.style.cursor = "pointer";
icon.style.fontSize = "18px";
icon.style.marginLeft = "10px";
const audio = new Audio(audioSrc);
audio.play();
icon.addEventListener("click", () => {
if (audio.muted) {
audio.currentTime = 0;
audio.muted = false;
icon.classList.remove("fa-volume-xmark");
icon.classList.add("fa-volume-high");
icon.title = "Click to mute";
audio.play();
} else {
audio.muted = true;
icon.classList.remove("fa-volume-high");
icon.classList.add("fa-volume-xmark");
icon.title = "Click to unmute";
}
});
message.style.display = "flex";
message.style.justifyContent = "space-between";
message.appendChild(icon);
}
} catch (err) {
const message = thinkingBubble.querySelector(".text");
message.innerText = "⚠️ Aidan had trouble responding.";
}
// Clear inputs after processing is complete
input.value = "";
selectedFile = null;
}
// Click event for send button
sendBtn.addEventListener("click", sendMessage);
// Enter key event for input field
input.addEventListener("keydown", (event) => {
if (event.key === "Enter") {
event.preventDefault(); // Prevent form submission
sendMessage();
}
});
var backarrow = document.querySelector(".fa-arrow-left");
backarrow.addEventListener('click', function () {
window.location.href = '/';
});
});