Hadiil commited on
Commit
df3a4ea
·
verified ·
1 Parent(s): 7b718ca

Update static/scripts.js

Browse files
Files changed (1) hide show
  1. static/scripts.js +29 -29
static/scripts.js CHANGED
@@ -73,8 +73,6 @@ document.addEventListener('DOMContentLoaded', () => {
73
  otherBox.classList.add('shadowed');
74
  }
75
  });
76
- } else {
77
- console.error(`Modal with ID ${modalId} not found`);
78
  }
79
  });
80
  });
@@ -86,8 +84,6 @@ document.addEventListener('DOMContentLoaded', () => {
86
  const chatbotModal = document.getElementById('chatbot-modal');
87
  if (chatbotModal) {
88
  chatbotModal.classList.remove('hidden');
89
- } else {
90
- console.error('Chatbot modal not found');
91
  }
92
  });
93
  }
@@ -163,18 +159,15 @@ document.addEventListener('DOMContentLoaded', () => {
163
  if (chatbotForm) {
164
  chatbotForm.addEventListener('submit', async (e) => {
165
  e.preventDefault();
166
- console.log('Chatbot form submitted'); // Debug
167
  const input = e.target.querySelector('input');
168
  const message = input.value.trim();
169
  const spinner = e.target.querySelector('.loading-spinner') || document.createElement('div');
170
  if (!spinner.classList.contains('loading-spinner')) {
171
  spinner.className = 'loading-spinner';
 
172
  e.target.appendChild(spinner);
173
  }
174
- if (!message) {
175
- console.log('No message provided'); // Debug
176
- return;
177
- }
178
 
179
  spinner.classList.remove('hidden');
180
  const conversation = document.getElementById('chatbot-conversation');
@@ -183,15 +176,12 @@ document.addEventListener('DOMContentLoaded', () => {
183
  input.value = '';
184
 
185
  try {
186
- console.log('Sending request to /chat:', { message }); // Debug
187
  const response = await fetch('/chat', {
188
  method: 'POST',
189
  headers: { 'Content-Type': 'application/json' },
190
  body: JSON.stringify({ message })
191
  });
192
- console.log('Chat response status:', response.status); // Debug
193
  const data = await response.json();
194
- console.log('Chat response data:', data); // Debug
195
  spinner.classList.add('hidden');
196
  if (response.ok) {
197
  conversation.innerHTML += `<p class="bot-message">Gemini: ${data.response}</p>`;
@@ -200,14 +190,11 @@ document.addEventListener('DOMContentLoaded', () => {
200
  }
201
  conversation.scrollTop = conversation.scrollHeight;
202
  } catch (error) {
203
- console.error('Chat fetch error:', error); // Debug
204
  spinner.classList.add('hidden');
205
  conversation.innerHTML += `<p class="bot-message">Error: ${error.message}</p>`;
206
  conversation.scrollTop = conversation.scrollHeight;
207
  }
208
  });
209
- } else {
210
- console.error('Chatbot form not found');
211
  }
212
 
213
  // Form Submissions for Other Functionalities
@@ -224,35 +211,41 @@ document.addEventListener('DOMContentLoaded', () => {
224
 
225
  Object.keys(forms).forEach(formId => {
226
  const form = document.getElementById(formId);
227
- if (!form) {
228
- console.error(`Form with ID ${formId} not found`);
229
- return;
230
- }
231
  form.addEventListener('submit', async (e) => {
232
  e.preventDefault();
233
- console.log(`Submitting form: ${formId}`); // Debug
234
  const formData = new FormData();
235
  const responseCard = form.nextElementSibling;
236
  let spinner = form.querySelector('.loading-spinner');
237
  if (!spinner) {
238
  spinner = document.createElement('div');
239
  spinner.className = 'loading-spinner hidden';
 
240
  form.appendChild(spinner);
241
  }
242
 
243
  // Collect form data
244
  const textInput = form.querySelector('textarea, input[type="text"]');
245
  const fileInput = form.querySelector('input[type="file"]');
246
- if (textInput && textInput.value.trim()) {
247
- formData.append('text', textInput.value.trim());
 
 
 
 
 
 
 
248
  }
249
  if (fileInput && fileInput.files.length > 0) {
250
  formData.append('file', fileInput.files[0]);
251
  }
 
 
 
252
 
253
  // Validate input
254
- if (!textInput.value.trim() && (!fileInput || fileInput.files.length === 0)) {
255
- console.log(`No input provided for ${formId}`); // Debug
256
  responseCard.classList.remove('hidden');
257
  responseCard.innerHTML = '<p class="error">Please provide text or a file.</p>';
258
  return;
@@ -262,15 +255,23 @@ document.addEventListener('DOMContentLoaded', () => {
262
  responseCard.classList.add('hidden');
263
  responseCard.innerHTML = '';
264
 
 
 
 
 
 
 
 
 
 
 
 
265
  try {
266
- console.log(`Sending request to ${forms[formId].endpoint} for ${formId}:`, Array.from(formData.entries())); // Debug
267
  const response = await fetch(forms[formId].endpoint, {
268
  method: 'POST',
269
  body: formData
270
  });
271
- console.log(`Response status for ${formId}:`, response.status); // Debug
272
  const data = await response.json();
273
- console.log(`Response data for ${formId}:`, data); // Debug
274
  spinner.classList.add('hidden');
275
  responseCard.classList.remove('hidden');
276
  if (response.ok) {
@@ -278,7 +279,7 @@ document.addEventListener('DOMContentLoaded', () => {
278
  if (data.type === 'visualization_code') {
279
  responseText = `<pre>${responseText}</pre>`;
280
  } else if (data.type === 'caption' || data.type === 'visual_qa') {
281
- responseText = `${responseText}<br><img src="${data.additional_data.image_url}" alt="Processed Image" style="max-width: 100%; margin-top: 10px;">`;
282
  } else if (data.type === 'file_qa' || data.type === 'file_translation') {
283
  responseText = `${responseText}<br><small>File: ${data.additional_data.file_name}</small>`;
284
  }
@@ -290,7 +291,6 @@ document.addEventListener('DOMContentLoaded', () => {
290
  responseCard.innerHTML = `<p class="error">Error: ${data.detail || 'Unknown error'}</p>`;
291
  }
292
  } catch (error) {
293
- console.error(`Fetch error for ${formId}:`, error); // Debug
294
  spinner.classList.add('hidden');
295
  responseCard.classList.remove('hidden');
296
  responseCard.innerHTML = `<p class="error">Error: ${error.message}</p>`;
 
73
  otherBox.classList.add('shadowed');
74
  }
75
  });
 
 
76
  }
77
  });
78
  });
 
84
  const chatbotModal = document.getElementById('chatbot-modal');
85
  if (chatbotModal) {
86
  chatbotModal.classList.remove('hidden');
 
 
87
  }
88
  });
89
  }
 
159
  if (chatbotForm) {
160
  chatbotForm.addEventListener('submit', async (e) => {
161
  e.preventDefault();
 
162
  const input = e.target.querySelector('input');
163
  const message = input.value.trim();
164
  const spinner = e.target.querySelector('.loading-spinner') || document.createElement('div');
165
  if (!spinner.classList.contains('loading-spinner')) {
166
  spinner.className = 'loading-spinner';
167
+ spinner.innerHTML = '<span>Processing...</span>';
168
  e.target.appendChild(spinner);
169
  }
170
+ if (!message) return;
 
 
 
171
 
172
  spinner.classList.remove('hidden');
173
  const conversation = document.getElementById('chatbot-conversation');
 
176
  input.value = '';
177
 
178
  try {
 
179
  const response = await fetch('/chat', {
180
  method: 'POST',
181
  headers: { 'Content-Type': 'application/json' },
182
  body: JSON.stringify({ message })
183
  });
 
184
  const data = await response.json();
 
185
  spinner.classList.add('hidden');
186
  if (response.ok) {
187
  conversation.innerHTML += `<p class="bot-message">Gemini: ${data.response}</p>`;
 
190
  }
191
  conversation.scrollTop = conversation.scrollHeight;
192
  } catch (error) {
 
193
  spinner.classList.add('hidden');
194
  conversation.innerHTML += `<p class="bot-message">Error: ${error.message}</p>`;
195
  conversation.scrollTop = conversation.scrollHeight;
196
  }
197
  });
 
 
198
  }
199
 
200
  // Form Submissions for Other Functionalities
 
211
 
212
  Object.keys(forms).forEach(formId => {
213
  const form = document.getElementById(formId);
214
+ if (!form) return;
 
 
 
215
  form.addEventListener('submit', async (e) => {
216
  e.preventDefault();
 
217
  const formData = new FormData();
218
  const responseCard = form.nextElementSibling;
219
  let spinner = form.querySelector('.loading-spinner');
220
  if (!spinner) {
221
  spinner = document.createElement('div');
222
  spinner.className = 'loading-spinner hidden';
223
+ spinner.innerHTML = '<span>Processing...</span>';
224
  form.appendChild(spinner);
225
  }
226
 
227
  // Collect form data
228
  const textInput = form.querySelector('textarea, input[type="text"]');
229
  const fileInput = form.querySelector('input[type="file"]');
230
+ const languageSelect = form.querySelector('select[name="language"]');
231
+ const visualizationSelect = form.querySelector('select[name="visualization-type"]');
232
+ let textValue = textInput && textInput.value.trim() ? textInput.value.trim() : '';
233
+
234
+ if (languageSelect && textValue && (formId === 'translate-text-form' || formId === 'translate-file-form')) {
235
+ textValue = `Translate to ${languageSelect.value}: ${textValue}`;
236
+ }
237
+ if (textValue) {
238
+ formData.append('text', textValue);
239
  }
240
  if (fileInput && fileInput.files.length > 0) {
241
  formData.append('file', fileInput.files[0]);
242
  }
243
+ if (visualizationSelect) {
244
+ formData.append('text', visualizationSelect.value);
245
+ }
246
 
247
  // Validate input
248
+ if (!textValue && (!fileInput || fileInput.files.length === 0)) {
 
249
  responseCard.classList.remove('hidden');
250
  responseCard.innerHTML = '<p class="error">Please provide text or a file.</p>';
251
  return;
 
255
  responseCard.classList.add('hidden');
256
  responseCard.innerHTML = '';
257
 
258
+ // Display uploaded image locally for caption and visual QA
259
+ let localImageUrl = '';
260
+ if (fileInput && fileInput.files.length > 0 && (formId === 'image-caption-form' || formId === 'visual-qa-form')) {
261
+ const file = fileInput.files[0];
262
+ localImageUrl = await new Promise(resolve => {
263
+ const reader = new FileReader();
264
+ reader.onload = () => resolve(reader.result);
265
+ reader.readAsDataURL(file);
266
+ });
267
+ }
268
+
269
  try {
 
270
  const response = await fetch(forms[formId].endpoint, {
271
  method: 'POST',
272
  body: formData
273
  });
 
274
  const data = await response.json();
 
275
  spinner.classList.add('hidden');
276
  responseCard.classList.remove('hidden');
277
  if (response.ok) {
 
279
  if (data.type === 'visualization_code') {
280
  responseText = `<pre>${responseText}</pre>`;
281
  } else if (data.type === 'caption' || data.type === 'visual_qa') {
282
+ responseText = `${responseText}<br><img src="${localImageUrl}" alt="Uploaded Image" style="max-width: 100%; margin-top: 10px;">`;
283
  } else if (data.type === 'file_qa' || data.type === 'file_translation') {
284
  responseText = `${responseText}<br><small>File: ${data.additional_data.file_name}</small>`;
285
  }
 
291
  responseCard.innerHTML = `<p class="error">Error: ${data.detail || 'Unknown error'}</p>`;
292
  }
293
  } catch (error) {
 
294
  spinner.classList.add('hidden');
295
  responseCard.classList.remove('hidden');
296
  responseCard.innerHTML = `<p class="error">Error: ${error.message}</p>`;