ikraamkb commited on
Commit
1ee8945
·
verified ·
1 Parent(s): 0353524

Update static/application.js

Browse files
Files changed (1) hide show
  1. static/application.js +76 -34
static/application.js CHANGED
@@ -11,12 +11,21 @@ document.addEventListener("DOMContentLoaded", () => {
11
  // Hidden file input
12
  const fileInput = document.createElement("input");
13
  fileInput.type = "file";
14
- fileInput.accept = ".pdf,.docx,.pptx,.xlsx,image/*";
15
  fileInput.style.display = "none";
16
  document.body.appendChild(fileInput);
17
 
18
- fileBtn.addEventListener("click", () => fileInput.click());
19
- imageBtn.addEventListener("click", () => fileInput.click());
 
 
 
 
 
 
 
 
 
 
20
 
21
  fileInput.addEventListener("change", () => {
22
  const file = fileInput.files[0];
@@ -32,6 +41,33 @@ document.addEventListener("DOMContentLoaded", () => {
32
  }
33
  });
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  function createMessageBubble(text, sender = "You", audioSrc = null, fileName = null) {
36
  const bubble = document.createElement("div");
37
  bubble.className = `bubble ${sender === "You" ? "right" : "left"}`;
@@ -42,10 +78,10 @@ document.addEventListener("DOMContentLoaded", () => {
42
 
43
  const message = document.createElement("div");
44
  message.className = "text";
45
- message.style.whiteSpace = "pre-wrap"; // preserve line breaks
46
 
47
  if (sender === "You") {
48
- let fileLine = fileName ? `📎 Selected file: ${fileName}\n` : "";
49
  message.innerText = `${fileLine}❓ ${text}`;
50
  } else {
51
  message.style.display = "flex";
@@ -63,22 +99,24 @@ document.addEventListener("DOMContentLoaded", () => {
63
  icon.style.cursor = "pointer";
64
  icon.style.fontSize = "18px";
65
 
66
- const audio = new Audio(audioSrc);
67
- audio.play();
68
 
69
- icon.addEventListener("click", () => {
70
- if (audio.muted) {
71
- audio.currentTime = 0; // ⏮️ Rewind to beginning
72
- audio.muted = false;
73
- audio.play(); // 🔊 Play from start
74
- icon.classList.replace("fa-volume-xmark", "fa-volume-high");
75
- icon.title = "Click to mute";
76
- } else {
77
- audio.muted = true;
78
- icon.classList.replace("fa-volume-high", "fa-volume-xmark");
79
- icon.title = "Click to unmute";
80
- }
81
- });
 
 
82
 
83
  message.appendChild(icon);
84
  }
@@ -100,17 +138,13 @@ document.addEventListener("DOMContentLoaded", () => {
100
  return;
101
  }
102
 
103
- // Remove file preview bubble
104
  if (filePreviewBubble) {
105
  filePreviewBubble.remove();
106
  filePreviewBubble = null;
107
  }
108
 
109
- // User message with file info
110
  createMessageBubble(question, "You", null, selectedFile.name);
111
-
112
- // Chris is thinking...
113
- const thinkingBubble = createMessageBubble("Wait , Let me think 🤔...", "Chris");
114
 
115
  const formData = new FormData();
116
  formData.append("question", question);
@@ -126,7 +160,6 @@ document.addEventListener("DOMContentLoaded", () => {
126
  const answerText = result.answer || "No response.";
127
  const audioSrc = result.audio || null;
128
 
129
- // Replace "Let me think..." with actual answer
130
  const message = thinkingBubble.querySelector(".text");
131
  message.innerText = answerText;
132
 
@@ -138,14 +171,23 @@ document.addEventListener("DOMContentLoaded", () => {
138
  icon.style.fontSize = "18px";
139
  icon.style.marginLeft = "10px";
140
 
141
- const audio = new Audio(audioSrc);
142
- audio.play();
143
 
 
144
  icon.addEventListener("click", () => {
145
- audio.muted = !audio.muted;
146
- icon.classList.toggle("fa-volume-high", !audio.muted);
147
- icon.classList.toggle("fa-volume-xmark", audio.muted);
148
- icon.title = audio.muted ? "Click to unmute" : "Click to mute";
 
 
 
 
 
 
 
 
149
  });
150
 
151
  message.style.display = "flex";
@@ -158,9 +200,9 @@ document.addEventListener("DOMContentLoaded", () => {
158
  }
159
 
160
  input.value = "";
161
- selectedFile = null;
162
  });
163
- }); /*
 
164
  document.addEventListener("DOMContentLoaded", () => {
165
  const convo = document.querySelector(".convo");
166
  const input = document.querySelector(".qt input");
 
11
  // Hidden file input
12
  const fileInput = document.createElement("input");
13
  fileInput.type = "file";
 
14
  fileInput.style.display = "none";
15
  document.body.appendChild(fileInput);
16
 
17
+ // Handle file button clicks
18
+ fileBtn.addEventListener("click", () => {
19
+ fileInput.value = ""; // allow reselecting the same file
20
+ fileInput.accept = ".pdf,.docx,.pptx,.xlsx";
21
+ fileInput.click();
22
+ });
23
+
24
+ imageBtn.addEventListener("click", () => {
25
+ fileInput.value = "";
26
+ fileInput.accept = "image/*";
27
+ fileInput.click();
28
+ });
29
 
30
  fileInput.addEventListener("change", () => {
31
  const file = fileInput.files[0];
 
41
  }
42
  });
43
 
44
+ // Drag & drop support
45
+ convo.addEventListener("dragover", (e) => {
46
+ e.preventDefault();
47
+ convo.classList.add("drag-over");
48
+ });
49
+
50
+ convo.addEventListener("dragleave", () => {
51
+ convo.classList.remove("drag-over");
52
+ });
53
+
54
+ convo.addEventListener("drop", (e) => {
55
+ e.preventDefault();
56
+ convo.classList.remove("drag-over");
57
+
58
+ const file = e.dataTransfer.files[0];
59
+ if (file) {
60
+ selectedFile = file;
61
+ if (filePreviewBubble) filePreviewBubble.remove();
62
+
63
+ filePreviewBubble = document.createElement("div");
64
+ filePreviewBubble.className = "file-preview-bubble bubble right";
65
+ filePreviewBubble.textContent = `📎 Selected: ${file.name}`;
66
+ convo.appendChild(filePreviewBubble);
67
+ convo.scrollTop = convo.scrollHeight;
68
+ }
69
+ });
70
+
71
  function createMessageBubble(text, sender = "You", audioSrc = null, fileName = null) {
72
  const bubble = document.createElement("div");
73
  bubble.className = `bubble ${sender === "You" ? "right" : "left"}`;
 
78
 
79
  const message = document.createElement("div");
80
  message.className = "text";
81
+ message.style.whiteSpace = "pre-wrap";
82
 
83
  if (sender === "You") {
84
+ const fileLine = fileName ? `📎 Selected file: ${fileName}\n` : "";
85
  message.innerText = `${fileLine}❓ ${text}`;
86
  } else {
87
  message.style.display = "flex";
 
99
  icon.style.cursor = "pointer";
100
  icon.style.fontSize = "18px";
101
 
102
+ let currentAudio = new Audio(audioSrc);
103
+ currentAudio.play();
104
 
105
+ let isMuted = false;
106
+ icon.addEventListener("click", () => {
107
+ if (isMuted) {
108
+ currentAudio = new Audio(audioSrc); // restart
109
+ currentAudio.play();
110
+ isMuted = false;
111
+ icon.classList.replace("fa-volume-xmark", "fa-volume-high");
112
+ icon.title = "Click to mute";
113
+ } else {
114
+ currentAudio.pause();
115
+ isMuted = true;
116
+ icon.classList.replace("fa-volume-high", "fa-volume-xmark");
117
+ icon.title = "Click to unmute";
118
+ }
119
+ });
120
 
121
  message.appendChild(icon);
122
  }
 
138
  return;
139
  }
140
 
 
141
  if (filePreviewBubble) {
142
  filePreviewBubble.remove();
143
  filePreviewBubble = null;
144
  }
145
 
 
146
  createMessageBubble(question, "You", null, selectedFile.name);
147
+ const thinkingBubble = createMessageBubble("Wait, let me think 🤔...", "Chris");
 
 
148
 
149
  const formData = new FormData();
150
  formData.append("question", question);
 
160
  const answerText = result.answer || "No response.";
161
  const audioSrc = result.audio || null;
162
 
 
163
  const message = thinkingBubble.querySelector(".text");
164
  message.innerText = answerText;
165
 
 
171
  icon.style.fontSize = "18px";
172
  icon.style.marginLeft = "10px";
173
 
174
+ let currentAudio = new Audio(audioSrc);
175
+ currentAudio.play();
176
 
177
+ let isMuted = false;
178
  icon.addEventListener("click", () => {
179
+ if (isMuted) {
180
+ currentAudio = new Audio(audioSrc);
181
+ currentAudio.play();
182
+ isMuted = false;
183
+ icon.classList.replace("fa-volume-xmark", "fa-volume-high");
184
+ icon.title = "Click to mute";
185
+ } else {
186
+ currentAudio.pause();
187
+ isMuted = true;
188
+ icon.classList.replace("fa-volume-high", "fa-volume-xmark");
189
+ icon.title = "Click to unmute";
190
+ }
191
  });
192
 
193
  message.style.display = "flex";
 
200
  }
201
 
202
  input.value = "";
 
203
  });
204
+ });
205
+ /*
206
  document.addEventListener("DOMContentLoaded", () => {
207
  const convo = document.querySelector(".convo");
208
  const input = document.querySelector(".qt input");