TarSh8654 commited on
Commit
85b779a
·
verified ·
1 Parent(s): feaf77b

Update templates/index.html

Browse files
Files changed (1) hide show
  1. templates/index.html +59 -39
templates/index.html CHANGED
@@ -75,9 +75,9 @@
75
  textarea {
76
  resize: none; /* Prevent manual resizing */
77
  flex-grow: 1;
78
- min-height: 2.5rem; /* Minimum height for single line */
79
- max-height: 8rem; /* Max height before scrolling */
80
- overflow-y: auto; /* Enable scrolling if content exceeds max-height */
81
  background-color: #2d3748; /* Same as container */
82
  color: #e2e8f0; /* Light text */
83
  border: 1px solid #4a5568; /* Darker border */
@@ -174,7 +174,7 @@
174
  <div id="messagesArea" class="messages-area">
175
  <!-- Chat messages will be appended here -->
176
  <div class="ai-message message-bubble">
177
- Hello! How can I assist you today? You can type a message, or upload an image or a text document.
178
  </div>
179
  </div>
180
  <div class="input-area flex-col items-stretch">
@@ -253,9 +253,9 @@
253
  }
254
 
255
  let uploadedFile = null; // Stores the selected file object
256
- let uploadedFileType = null; // 'image' or 'document'
257
- let uploadedFileBase64 = null; // For images
258
- let uploadedFileText = null; // For documents
259
 
260
  // Function to show custom message box
261
  function showMessage(title, content) {
@@ -288,9 +288,7 @@
288
  } else if (typeof content === 'string') {
289
  messageDiv.innerHTML = marked.parse(content); // Render Markdown for text
290
  } else if (typeof content === 'object' && content.type === 'image') {
291
- // Display image in message bubble
292
- // This block is now effectively unused for user messages as displayContent will be a string
293
- // But keeping it here for potential future use or if AI sends image back
294
  const img = document.createElement('img');
295
  img.src = content.src;
296
  img.alt = "Uploaded image";
@@ -302,8 +300,7 @@
302
  messageDiv.appendChild(textDiv);
303
  }
304
  } else if (typeof content === 'object' && content.type === 'document') {
305
- // Display document info in message bubble
306
- // This block is now effectively unused for user messages as displayContent will be a string
307
  const docInfoDiv = document.createElement('div');
308
  docInfoDiv.innerHTML = `<strong>Document Uploaded:</strong> ${content.name}<br>`;
309
  if (content.textPreview) {
@@ -368,17 +365,15 @@
368
 
369
  uploadedFile = file;
370
  uploadedFileType = 'image';
371
- // Update this line to show success message and file name
372
- fileNameDisplay.textContent = `Image: ${file.name} (Uploaded successfully!)`;
373
  clearFileButton.classList.remove('hidden');
374
 
375
  const reader = new FileReader();
376
  reader.onload = (e) => {
377
  uploadedFileBase64 = e.target.result.split(',')[1]; // Get base64 part
378
  console.log("DEBUG: Image FileReader loaded. Base64 length:", uploadedFileBase64.length);
379
- // Removed image preview code here
380
- filePreview.innerHTML = ''; // Ensure no old preview remains
381
- filePreview.classList.add('hidden'); // Ensure preview container remains hidden
382
  };
383
  reader.onerror = (e) => {
384
  console.error("DEBUG: FileReader error for image:", e);
@@ -403,35 +398,56 @@
403
 
404
  console.log("DEBUG: Selected document file:", file);
405
  uploadedFile = file;
406
- uploadedFileType = 'document';
407
- // Update this line to show success message and file name
408
- fileNameDisplay.textContent = `Document: ${file.name} (Uploaded successfully!)`;
409
  clearFileButton.classList.remove('hidden');
410
 
411
- // Basic text extraction for .txt files on frontend
412
  if (file.type === 'text/plain') {
 
413
  const reader = new FileReader();
414
  reader.onload = (e) => {
415
  uploadedFileText = e.target.result;
416
- console.log("DEBUG: Document FileReader loaded. Text length:", uploadedFileText.length);
417
- // Removed document preview code here
418
- filePreview.innerHTML = ''; // Ensure no old preview remains
419
- filePreview.classList.add('hidden'); // Ensure preview container remains hidden
420
  };
421
  reader.onerror = (e) => {
422
- console.error("DEBUG: FileReader error for document:", e);
423
- showMessage("File Read Error", "Could not read the document file.");
424
  clearFileSelection();
425
  };
426
  reader.readAsText(file);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
427
  } else {
428
- // For other document types, inform the user about limitations
429
- // The filename will still be displayed via fileNameDisplay.textContent
430
- showMessage("Unsupported Document", "Only plain text (.txt) files are directly processed on the frontend. For PDF, DOCX, etc., advanced backend parsing is required.");
431
  console.warn("DEBUG: Unsupported document type selected:", file.type);
432
- uploadedFileText = null; // Ensure no text is sent for unsupported types
433
- filePreview.innerHTML = ''; // Ensure no old preview remains
434
- filePreview.classList.add('hidden'); // Ensure preview container remains hidden
 
435
  }
436
  });
437
 
@@ -460,18 +476,22 @@
460
  mimeType: uploadedFile.type,
461
  data: uploadedFileBase64
462
  };
463
- // Change displayContent to a text message for the chat bubble
464
  displayContent = `Image uploaded: ${uploadedFile.name}. ${userQuery ? `\n\n${userQuery}` : ''}`;
465
  console.log("DEBUG: Prepared image data for requestBody. MimeType:", requestBody.image_data.mimeType, "Data length:", requestBody.image_data.data.length);
466
- } else if (uploadedFileType === 'document' && uploadedFileText) {
467
  requestBody.document_text = uploadedFileText;
468
- // Change displayContent to a text message for the chat bubble
469
  displayContent = `Document uploaded: ${uploadedFile.name}. ${userQuery ? `\n\n${userQuery}` : ''}`;
470
- console.log("DEBUG: Prepared document text for requestBody. Text length:", requestBody.document_text.length);
471
- } else if (uploadedFileType === 'document' && uploadedFile && !uploadedFileText) {
 
 
 
 
 
 
 
472
  // For unsupported document types, send filename and a note
473
  requestBody.query = `${userQuery}\n\nUser uploaded a document named "${uploadedFile.name}". Please note: Content extraction for this file type is not supported in this demo.`;
474
- // Change displayContent to a text message for the chat bubble
475
  displayContent = `Document uploaded: ${uploadedFile.name} (unsupported type). ${userQuery ? `\n\n${userQuery}` : ''}`;
476
  console.log("DEBUG: Prepared unsupported document type as text query:", requestBody.query);
477
  }
 
75
  textarea {
76
  resize: none; /* Prevent manual resizing */
77
  flex-grow: 1;
78
+ min-height: 2.5rem;
79
+ max-height: 8rem;
80
+ overflow-y: auto;
81
  background-color: #2d3748; /* Same as container */
82
  color: #e2e8f0; /* Light text */
83
  border: 1px solid #4a5568; /* Darker border */
 
174
  <div id="messagesArea" class="messages-area">
175
  <!-- Chat messages will be appended here -->
176
  <div class="ai-message message-bubble">
177
+ Hello! How can I assist you today? You can type a message, or upload an image, a text document, or a PDF.
178
  </div>
179
  </div>
180
  <div class="input-area flex-col items-stretch">
 
253
  }
254
 
255
  let uploadedFile = null; // Stores the selected file object
256
+ let uploadedFileType = null; // 'image', 'text_document', or 'pdf_document'
257
+ let uploadedFileBase64 = null; // For images and PDFs
258
+ let uploadedFileText = null; // For text documents
259
 
260
  // Function to show custom message box
261
  function showMessage(title, content) {
 
288
  } else if (typeof content === 'string') {
289
  messageDiv.innerHTML = marked.parse(content); // Render Markdown for text
290
  } else if (typeof content === 'object' && content.type === 'image') {
291
+ // Display image in message bubble (if AI sends image back, or if re-introduced)
 
 
292
  const img = document.createElement('img');
293
  img.src = content.src;
294
  img.alt = "Uploaded image";
 
300
  messageDiv.appendChild(textDiv);
301
  }
302
  } else if (typeof content === 'object' && content.type === 'document') {
303
+ // Display document info in message bubble (if AI sends document back, or if re-introduced)
 
304
  const docInfoDiv = document.createElement('div');
305
  docInfoDiv.innerHTML = `<strong>Document Uploaded:</strong> ${content.name}<br>`;
306
  if (content.textPreview) {
 
365
 
366
  uploadedFile = file;
367
  uploadedFileType = 'image';
368
+ fileNameDisplay.textContent = `Image: ${file.name} (Ready to send)`;
 
369
  clearFileButton.classList.remove('hidden');
370
 
371
  const reader = new FileReader();
372
  reader.onload = (e) => {
373
  uploadedFileBase64 = e.target.result.split(',')[1]; // Get base64 part
374
  console.log("DEBUG: Image FileReader loaded. Base64 length:", uploadedFileBase64.length);
375
+ filePreview.innerHTML = '';
376
+ filePreview.classList.add('hidden');
 
377
  };
378
  reader.onerror = (e) => {
379
  console.error("DEBUG: FileReader error for image:", e);
 
398
 
399
  console.log("DEBUG: Selected document file:", file);
400
  uploadedFile = file;
401
+ fileNameDisplay.textContent = `Document: ${file.name} (Ready to send)`;
 
 
402
  clearFileButton.classList.remove('hidden');
403
 
404
+ // Determine file type and read accordingly
405
  if (file.type === 'text/plain') {
406
+ uploadedFileType = 'text_document';
407
  const reader = new FileReader();
408
  reader.onload = (e) => {
409
  uploadedFileText = e.target.result;
410
+ console.log("DEBUG: Text Document FileReader loaded. Text length:", uploadedFileText.length);
411
+ filePreview.innerHTML = '';
412
+ filePreview.classList.add('hidden');
 
413
  };
414
  reader.onerror = (e) => {
415
+ console.error("DEBUG: FileReader error for text document:", e);
416
+ showMessage("File Read Error", "Could not read the text document file.");
417
  clearFileSelection();
418
  };
419
  reader.readAsText(file);
420
+ } else if (file.type === 'application/pdf') {
421
+ uploadedFileType = 'pdf_document';
422
+ if (file.size > 10 * 1024 * 1024) { // 10MB limit for PDFs (adjust as needed)
423
+ showMessage("File Too Large", "Please upload a PDF smaller than 10MB.");
424
+ documentUpload.value = '';
425
+ console.error("DEBUG: PDF file too large:", file.size);
426
+ clearFileSelection();
427
+ return;
428
+ }
429
+ const reader = new FileReader();
430
+ reader.onload = (e) => {
431
+ uploadedFileBase64 = e.target.result.split(',')[1]; // Get base64 part
432
+ console.log("DEBUG: PDF FileReader loaded. Base64 length:", uploadedFileBase64.length);
433
+ filePreview.innerHTML = '';
434
+ filePreview.classList.add('hidden');
435
+ };
436
+ reader.onerror = (e) => {
437
+ console.error("DEBUG: FileReader error for PDF:", e);
438
+ showMessage("File Read Error", "Could not read the PDF file.");
439
+ clearFileSelection();
440
+ };
441
+ reader.readAsDataURL(file); // Read PDF as Data URL (base64)
442
  } else {
443
+ // For other document types like .docx, inform the user
444
+ uploadedFileType = 'unsupported_document';
445
+ showMessage("Unsupported Document", "Only plain text (.txt) and PDF (.pdf) files are directly processed. For DOCX, etc., advanced backend parsing is required.");
446
  console.warn("DEBUG: Unsupported document type selected:", file.type);
447
+ uploadedFileText = null;
448
+ uploadedFileBase64 = null;
449
+ filePreview.innerHTML = '';
450
+ filePreview.classList.add('hidden');
451
  }
452
  });
453
 
 
476
  mimeType: uploadedFile.type,
477
  data: uploadedFileBase64
478
  };
 
479
  displayContent = `Image uploaded: ${uploadedFile.name}. ${userQuery ? `\n\n${userQuery}` : ''}`;
480
  console.log("DEBUG: Prepared image data for requestBody. MimeType:", requestBody.image_data.mimeType, "Data length:", requestBody.image_data.data.length);
481
+ } else if (uploadedFileType === 'text_document' && uploadedFileText) {
482
  requestBody.document_text = uploadedFileText;
 
483
  displayContent = `Document uploaded: ${uploadedFile.name}. ${userQuery ? `\n\n${userQuery}` : ''}`;
484
+ console.log("DEBUG: Prepared text document text for requestBody. Text length:", requestBody.document_text.length);
485
+ } else if (uploadedFileType === 'pdf_document' && uploadedFileBase64) {
486
+ requestBody.pdf_data = {
487
+ mimeType: uploadedFile.type,
488
+ data: uploadedFileBase64
489
+ };
490
+ displayContent = `PDF uploaded: ${uploadedFile.name}. ${userQuery ? `\n\n${userQuery}` : ''}`;
491
+ console.log("DEBUG: Prepared PDF data for requestBody. MimeType:", requestBody.pdf_data.mimeType, "Data length:", requestBody.pdf_data.data.length);
492
+ } else if (uploadedFileType === 'unsupported_document' && uploadedFile) {
493
  // For unsupported document types, send filename and a note
494
  requestBody.query = `${userQuery}\n\nUser uploaded a document named "${uploadedFile.name}". Please note: Content extraction for this file type is not supported in this demo.`;
 
495
  displayContent = `Document uploaded: ${uploadedFile.name} (unsupported type). ${userQuery ? `\n\n${userQuery}` : ''}`;
496
  console.log("DEBUG: Prepared unsupported document type as text query:", requestBody.query);
497
  }