ikraamkb commited on
Commit
84ee43e
·
verified ·
1 Parent(s): 7321a65

Update static/appS.js

Browse files
Files changed (1) hide show
  1. static/appS.js +54 -74
static/appS.js CHANGED
@@ -173,75 +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
- const isSummarizeMode = document.querySelector('input[name="mode"]:checked').value === 'Summarize';
182
-
183
- const endpoint = isSummarizeMode
184
- ? `/Summarization/summarize/`
185
- : `/Summarization/imagecaption/`;
186
- const thinkingText = isSummarizeMode
187
- ? 'Processing document 📄... <div class="loader"></div>'
188
- : "Generating caption 🖼️... <div class='loader'></div>";
189
- const thinkingBubble = createMessageBubble(thinkingText, "Aidan");
190
- const formData = new FormData();
191
- formData.append('file', selectedFile);
192
- if (isSummarizeMode) formData.append('length', 'medium');
193
- try {
194
- const response = await fetch(endpoint, {
195
- method: 'POST',
196
- body: formData
197
- });
198
- if (!response.ok) {
199
- const error = await response.json().catch(() => null);
200
- throw new Error(error?.detail || error?.error || "Request failed");
201
- }
202
- const result = await response.json();
203
- thinkingBubble.remove();
204
- if (isSummarizeMode) {
205
- createMessageBubble(
206
- result.summary || "No summary generated.",
207
- "Aidan",
208
- result.audioUrl,
209
- result.pdfUrl
210
- );
211
- } else {
212
- createMessageBubble(
213
- result.caption || result.answer || "No caption generated.",
214
- "Aidan",
215
- result.audio,
216
- null
217
- );
218
- }
219
- } catch (error) {
220
- thinkingBubble.remove();
221
- createMessageBubble(`⚠️ Error: ${error.message}`, "Aidan");
222
- } finally {
223
- selectedFile = null;
224
- }
225
- } */
226
- async function handleSubmit() {
227
  if (!selectedFile) {
228
  alert("Please upload a file first");
229
  return;
230
  }
231
 
232
  const isSummarizeMode = document.querySelector('input[name="mode"]:checked').value === 'Summarize';
233
-
234
- const endpoint = isSummarizeMode
235
  ? `/Summarization/summarize/`
236
  : `/Summarization/imagecaption/`;
237
 
238
- const thinkingBubble = createMessageBubble("Thinking...", "Aidan");
 
 
239
 
240
- // Inject loader correctly
241
- const messageDiv = thinkingBubble.querySelector('.text');
242
- const loader = document.createElement('div');
243
- loader.className = 'loader';
244
- messageDiv.appendChild(loader);
245
 
246
  const formData = new FormData();
247
  formData.append('file', selectedFile);
@@ -254,31 +202,39 @@ document.addEventListener('DOMContentLoaded', () => {
254
  });
255
 
256
  if (!response.ok) {
257
- const error = await response.json().catch(() => null);
258
- throw new Error(error?.detail || error?.error || "Request failed");
 
 
259
  }
260
 
261
  const result = await response.json();
262
  thinkingBubble.remove();
263
 
264
  if (isSummarizeMode) {
265
- const answerBubble = createMessageBubble(
266
  result.summary || "No summary generated.",
267
  "Aidan",
268
  result.audioUrl,
269
  result.pdfUrl
270
  );
271
- if (result.audioUrl) injectAudio(answerBubble, result.audioUrl);
 
 
 
 
272
  } else {
273
- const answerBubble = createMessageBubble(
274
  result.caption || result.answer || "No caption generated.",
275
  "Aidan",
276
  result.audio,
277
  null
278
  );
279
- if (result.audio) injectAudio(answerBubble, result.audio);
 
 
 
280
  }
281
-
282
  } catch (error) {
283
  thinkingBubble.remove();
284
  createMessageBubble(`⚠️ Error: ${error.message}`, "Aidan");
@@ -287,14 +243,38 @@ document.addEventListener('DOMContentLoaded', () => {
287
  }
288
  }
289
 
290
- // ✅ Helper to inject audio player
291
- function injectAudio(bubble, audioUrl) {
292
  const messageDiv = bubble.querySelector('.text');
293
- const audioPlayer = document.createElement('audio');
294
- audioPlayer.src = audioUrl;
295
- audioPlayer.controls = true;
296
- audioPlayer.style.marginTop = "10px";
297
- messageDiv.appendChild(audioPlayer);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
  }
299
 
300
 
@@ -320,4 +300,4 @@ function injectAudio(bubble, audioUrl) {
320
  backarrow.addEventListener('click', function () {
321
  window.location.href = '/';
322
  });
323
- });
 
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
 
 
300
  backarrow.addEventListener('click', function () {
301
  window.location.href = '/';
302
  });
303
+ });