ikraamkb commited on
Commit
acecb79
·
verified ·
1 Parent(s): ae530df

Update static/appS.js

Browse files
Files changed (1) hide show
  1. static/appS.js +53 -81
static/appS.js CHANGED
@@ -173,83 +173,23 @@ document.addEventListener('DOMContentLoaded', () => {
173
  return bubble;
174
  }
175
 
176
- /* async function handleSubmit() {
177
- if (!selectedFile) {
178
- alert("Please upload a file first");
179
- return;
180
- }
181
-
182
- const isSummarizeMode = document.querySelector('input[name="mode"]:checked').value === 'Summarize';
183
-
184
- const endpoint = isSummarizeMode
185
- ? `/Summarization/summarize/`
186
- : `/Summarization/imagecaption/`;
187
-
188
- const thinkingText = isSummarizeMode
189
- ? 'Processing document 📄... <div class="loader"></div>'
190
- : "Generating caption 🖼️... <div class='loader'></div>";
191
-
192
- const thinkingBubble = createMessageBubble(thinkingText, "Aidan");
193
-
194
- const formData = new FormData();
195
- formData.append('file', selectedFile);
196
- if (isSummarizeMode) formData.append('length', 'medium');
197
-
198
- try {
199
- const response = await fetch(endpoint, {
200
- method: 'POST',
201
- body: formData
202
- });
203
-
204
- if (!response.ok) {
205
- const error = await response.json().catch(() => null);
206
- throw new Error(error?.detail || error?.error || "Request failed");
207
- }
208
-
209
- const result = await response.json();
210
- thinkingBubble.remove();
211
-
212
- if (isSummarizeMode) {
213
- createMessageBubble(
214
- result.summary || "No summary generated.",
215
- "Aidan",
216
- result.audioUrl,
217
- result.pdfUrl
218
- );
219
- } else {
220
- createMessageBubble(
221
- result.caption || result.answer || "No caption generated.",
222
- "Aidan",
223
- result.audio,
224
- null
225
- );
226
- }
227
- } catch (error) {
228
- thinkingBubble.remove();
229
- createMessageBubble(`⚠️ Error: ${error.message}`, "Aidan");
230
- } finally {
231
- selectedFile = null;
232
- }
233
- } */
234
- async function handleSubmit() {
235
  if (!selectedFile) {
236
  alert("Please upload a file first");
237
  return;
238
  }
239
 
240
  const isSummarizeMode = document.querySelector('input[name="mode"]:checked').value === 'Summarize';
241
-
242
- const endpoint = isSummarizeMode
243
  ? `/Summarization/summarize/`
244
  : `/Summarization/imagecaption/`;
245
 
246
- const thinkingBubble = createMessageBubble("Thinking...", "Aidan");
 
 
247
 
248
- // Inject loader correctly
249
- const messageDiv = thinkingBubble.querySelector('.text');
250
- const loader = document.createElement('div');
251
- loader.className = 'loader';
252
- messageDiv.appendChild(loader);
253
 
254
  const formData = new FormData();
255
  formData.append('file', selectedFile);
@@ -262,31 +202,39 @@ document.addEventListener('DOMContentLoaded', () => {
262
  });
263
 
264
  if (!response.ok) {
265
- const error = await response.json().catch(() => null);
266
- throw new Error(error?.detail || error?.error || "Request failed");
 
 
267
  }
268
 
269
  const result = await response.json();
270
  thinkingBubble.remove();
271
 
272
  if (isSummarizeMode) {
273
- const answerBubble = createMessageBubble(
274
  result.summary || "No summary generated.",
275
  "Aidan",
276
  result.audioUrl,
277
  result.pdfUrl
278
  );
279
- if (result.audioUrl) injectAudio(answerBubble, result.audioUrl);
 
 
 
 
280
  } else {
281
- const answerBubble = createMessageBubble(
282
  result.caption || result.answer || "No caption generated.",
283
  "Aidan",
284
  result.audio,
285
  null
286
  );
287
- if (result.audio) injectAudio(answerBubble, result.audio);
 
 
 
288
  }
289
-
290
  } catch (error) {
291
  thinkingBubble.remove();
292
  createMessageBubble(`⚠️ Error: ${error.message}`, "Aidan");
@@ -295,14 +243,38 @@ document.addEventListener('DOMContentLoaded', () => {
295
  }
296
  }
297
 
298
- // ✅ Helper to inject audio player
299
- function injectAudio(bubble, audioUrl) {
300
  const messageDiv = bubble.querySelector('.text');
301
- const audioPlayer = document.createElement('audio');
302
- audioPlayer.src = audioUrl;
303
- audioPlayer.controls = true;
304
- audioPlayer.style.marginTop = "10px";
305
- messageDiv.appendChild(audioPlayer);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
306
  }
307
 
308
 
 
173
  return bubble;
174
  }
175
 
176
+ async function handleSubmit() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  if (!selectedFile) {
178
  alert("Please upload a file first");
179
  return;
180
  }
181
 
182
  const isSummarizeMode = document.querySelector('input[name="mode"]:checked').value === 'Summarize';
183
+
184
+ const endpoint = isSummarizeMode
185
  ? `/Summarization/summarize/`
186
  : `/Summarization/imagecaption/`;
187
 
188
+ const thinkingText = isSummarizeMode
189
+ ? 'Processing document 📄... <div class="loader"></div>'
190
+ : "Generating caption 🖼️... <div class='loader'></div>";
191
 
192
+ const thinkingBubble = createMessageBubble(thinkingText, "Aidan");
 
 
 
 
193
 
194
  const formData = new FormData();
195
  formData.append('file', selectedFile);
 
202
  });
203
 
204
  if (!response.ok) {
205
+ if (response.status === 404) {
206
+ throw new Error("Service endpoint not found. Please check the AI service deployment.");
207
+ }
208
+ throw new Error("Request failed");
209
  }
210
 
211
  const result = await response.json();
212
  thinkingBubble.remove();
213
 
214
  if (isSummarizeMode) {
215
+ const bubble = createMessageBubble(
216
  result.summary || "No summary generated.",
217
  "Aidan",
218
  result.audioUrl,
219
  result.pdfUrl
220
  );
221
+
222
+ // Add audio controls if audio exists
223
+ if (result.audioUrl) {
224
+ injectAudioPlayer(bubble, result.audioUrl);
225
+ }
226
  } else {
227
+ const bubble = createMessageBubble(
228
  result.caption || result.answer || "No caption generated.",
229
  "Aidan",
230
  result.audio,
231
  null
232
  );
233
+
234
+ if (result.audio) {
235
+ injectAudioPlayer(bubble, result.audio);
236
+ }
237
  }
 
238
  } catch (error) {
239
  thinkingBubble.remove();
240
  createMessageBubble(`⚠️ Error: ${error.message}`, "Aidan");
 
243
  }
244
  }
245
 
246
+ // ✅ New helper function for audio player
247
+ function injectAudioPlayer(bubble, audioUrl) {
248
  const messageDiv = bubble.querySelector('.text');
249
+ const audioContainer = document.createElement('div');
250
+ audioContainer.style.marginTop = "10px";
251
+ audioContainer.style.display = "flex";
252
+ audioContainer.style.justifyContent = "flex-end";
253
+ audioContainer.style.gap = "15px";
254
+
255
+ const audio = new Audio(audioUrl);
256
+ const audioIcon = document.createElement("i");
257
+ audioIcon.className = "fa-solid fa-volume-high audio-toggle";
258
+ audioIcon.title = "Play Audio";
259
+ audioIcon.style.cursor = "pointer";
260
+ audioIcon.style.fontSize = "18px";
261
+
262
+ audioIcon.addEventListener("click", () => {
263
+ if (audio.paused) {
264
+ audio.play();
265
+ audioIcon.classList.remove("fa-volume-xmark");
266
+ audioIcon.classList.add("fa-volume-high");
267
+ audioIcon.title = "Mute Audio";
268
+ } else {
269
+ audio.pause();
270
+ audioIcon.classList.remove("fa-volume-high");
271
+ audioIcon.classList.add("fa-volume-xmark");
272
+ audioIcon.title = "Unmute Audio";
273
+ }
274
+ });
275
+
276
+ audioContainer.appendChild(audioIcon);
277
+ messageDiv.appendChild(audioContainer);
278
  }
279
 
280