malaknihed commited on
Commit
0f65f9d
·
verified ·
1 Parent(s): cc5ab19

Update static/script.js

Browse files
Files changed (1) hide show
  1. static/script.js +272 -92
static/script.js CHANGED
@@ -40,11 +40,11 @@ function loadResumerPage() {
40
  </label>
41
  <input type="file" id="fileInput" class="file-input" accept=".doc,.docx,.xls,.xlsx,.pdf,.ppt,.pptx" hidden>
42
  </div>
43
- <button class="summary-action-btn">RÉSUMER</button>
44
  </div>
45
  <div class="results-container">
46
  <div class="results-placeholder">
47
- <p class="placeholder-text">Le résultat apparaîtra ici...</p>
48
  </div>
49
  </div>
50
  </div>
@@ -54,6 +54,66 @@ function loadResumerPage() {
54
  // Insérer la nouvelle interface sans écraser les scripts
55
  document.body.innerHTML = "";
56
  document.body.appendChild(appContainer);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
 
58
 
59
  document.getElementById('traductionbutton').addEventListener('click', loadTraductionPage);
@@ -428,91 +488,138 @@ fileInput.addEventListener('change', function(event) {
428
  }
429
  }
430
  function loadDocPage() {
431
- document.body.style.setProperty('--background-image', "url('qstdoc2.webp')");
432
-
433
- // Créer une nouvelle structure pour ne pas écraser les événements
434
- let appContainer = document.createElement("div");
435
- appContainer.classList.add("app-container");
436
- appContainer.innerHTML = `
437
- <div class="sidebar">
438
- <div class="logo-container">
439
- <div class="logo-top">SMARTDOCS</div>
440
- <div class="logo-bottom">AI</div>
441
- </div>
442
- <div class="menu-section">
443
- <button class="menu-btn" id="resumerButton">RESUME</button>
444
- <button class="menu-btn" id="traductionbutton">TRANSLATE</button>
445
- <button class="menu-btn" id="visualisationButton">VISUALISATION</button>
446
- </div>
447
- <div class="menu-section">
448
- <div class="menu-title">IMAGES</div>
449
- <button class="menu-btn" id="interpretationButton">INTERPRETER</button>
450
- <button class="menu-btn" id="qesimgButton">QUESTIONS</button>
 
 
 
451
  </div>
452
- </div>
453
- <div class="main-content-area">
454
- <div class="document-container">
455
- <h1 class="document-main-title">Opérations sur documents</h1>
456
- <h2 class="document-subtitle">QUESTION DOCUMENTS 📄❓</h2>
457
- <div class="upload-container">
458
- <div class="file-drop-zone" id="fileDropZone">
459
- <label for="fileInput" class="file-upload-label">
460
- <img src="up.png" id="uploadIcon" class="upload-icon" alt="Upload">
461
- <span class="drop-text" id="dropText">Déposez votre fichier ici ou cliquez pour parcourir</span>
462
- </label>
463
- <input type="file" id="fileInput" class="file-input" accept=".doc,.docx,.xls,.xlsx,.pdf,.ppt,.pptx" hidden>
464
- </div>
465
- <div class="question-container">
466
- <div class="question">
467
- <input type="text" id="questionInput" placeholder="Tapez votre question ici...">
 
 
 
 
468
  </div>
469
- <button class="question-btn">Envoyer</button>
470
  </div>
471
- </div>
472
- <div class="results-container">
473
- <div class="results-placeholder">
474
- <p class="placeholder-text">Le résultat apparaîtra ici...</p>
 
475
  </div>
476
  </div>
477
  </div>
478
- </div>
479
- `;
480
-
481
- // Insérer la nouvelle structure sans écraser les événements
482
- document.body.innerHTML = "";
483
- document.body.appendChild(appContainer);
484
-
485
- // Réassocier les événements aux boutons
486
- document.getElementById('resumerButton').addEventListener('click', loadResumerPage);
487
- document.getElementById('traductionbutton').addEventListener('click', loadTraductionPage);
488
- document.getElementById('visualisationButton').addEventListener('click', loadVisualisationPage);
489
- document.getElementById('interpretationButton').addEventListener('click', loadInterpretationPage);
490
- document.getElementById('qesimgButton').addEventListener('click', loadImagePage);
491
-
492
  const fileInput = document.getElementById('fileInput');
493
  const dropText = document.getElementById('dropText');
494
  const uploadIcon = document.getElementById('uploadIcon');
495
  +
496
 
497
  dropText.addEventListener('click', function(event) {
498
- event.preventDefault();
499
- event.stopPropagation();
500
- fileInput.click();
501
  });
502
 
503
  uploadIcon.addEventListener('click', function(event) {
504
- event.preventDefault();
505
- event.stopPropagation();
506
- fileInput.click();
507
  });
508
 
509
  fileInput.addEventListener('change', function(event) {
510
- let file = event.target.files[0];
511
- if (file) {
512
- dropText.textContent = file.name;
513
- uploadIcon.style.display = "none";
514
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
515
  });
 
516
  }
517
 
518
  //quand on clique sur visualisation ----------------------
@@ -687,8 +794,7 @@ if (file) {
687
 
688
 
689
  //quand on clique sur interpretation ---------------------
690
-
691
- function loadInterpretationPage() {
692
  document.body.style.setProperty('--background-image', "url('interpreter.webp')");
693
 
694
  // Créer une nouvelle structure pour ne pas écraser les événements
@@ -727,11 +833,11 @@ if (file) {
727
  </label>
728
  <input type="file" id="fileInput" class="file-input" accept=".jpg,.jpeg,.png,.gif,.bmp,.webp" hidden>
729
  </div>
730
- <button class="summary-action-btn">INTERPRET</button>
731
  </div>
732
 
733
  <div class="results-container">
734
- <div class="results-placeholder">
735
  <p class="placeholder-text">Le résultat apparaîtra ici...</p>
736
  </div>
737
  </div>
@@ -749,10 +855,12 @@ if (file) {
749
  document.getElementById('qesdocButton').addEventListener('click', loadDocPage);
750
  document.getElementById('visualisationButton').addEventListener('click', loadVisualisationPage);
751
  document.getElementById('qesimgButton').addEventListener('click', loadImagePage);
752
-
 
 
753
  const fileInput = document.getElementById('fileInput');
754
- const dropText = document.getElementById('dropText');
755
- const uploadIcon = document.getElementById('uploadIcon');
756
  +
757
 
758
  dropText.addEventListener('click', function(event) {
@@ -774,7 +882,47 @@ fileInput.addEventListener('change', function(event) {
774
  uploadIcon.style.display = "none";
775
  }
776
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
777
  }
 
 
 
778
 
779
  //quand on clique sur quesion image ---------------
780
 
@@ -815,7 +963,7 @@ fileInput.addEventListener('change', function(event) {
815
  <img src="up.png" id="uploadIcon" class="upload-icon" alt="Upload">
816
  <span class="drop-text" id="dropText">Déposez votre image ici ou cliquez pour parcourir</span>
817
  </label>
818
- <input type="file" id="fileInput" class="file-input" accept=".jpg,.jpeg,.png,.gif,.bmp,.webp" hidden>
819
  </div>
820
 
821
 
@@ -823,11 +971,11 @@ fileInput.addEventListener('change', function(event) {
823
  <div class="question">
824
  <input type="text" id="questionInput" placeholder="Tapez votre question ici...">
825
  </div>
826
- <button class="question-btn">Envoyer</button>
827
  </div>
828
  </div>
829
 
830
- <div class="results-container">
831
  <div class="results-placeholder">
832
  <p class="placeholder-text">Le résultat apparaîtra ici...</p>
833
  </div>
@@ -839,7 +987,7 @@ fileInput.addEventListener('change', function(event) {
839
  // Insérer la nouvelle structure sans écraser les événements
840
  document.body.innerHTML = "";
841
  document.body.appendChild(appContainer);
842
-
843
  // Réassocier les événements aux boutons
844
  document.getElementById('resumerButton').addEventListener('click', loadResumerPage);
845
  document.getElementById('traductionbutton').addEventListener('click', loadTraductionPage);
@@ -847,7 +995,7 @@ fileInput.addEventListener('change', function(event) {
847
  document.getElementById('visualisationButton').addEventListener('click', loadVisualisationPage);
848
  document.getElementById('interpretationButton').addEventListener('click', loadInterpretationPage);
849
 
850
- const fileInput = document.getElementById('fileInput');
851
  const dropText = document.getElementById('dropText');
852
  const uploadIcon = document.getElementById('uploadIcon');
853
  +
@@ -871,16 +1019,48 @@ fileInput.addEventListener('change', function(event) {
871
  uploadIcon.style.display = "none";
872
  }
873
  });
874
-
875
-
876
- // Gestion du bouton "Envoyer"
877
- document.getElementById('sendQuestionBtn').addEventListener('click', function() {
878
- const questionText = document.getElementById('questionInput').value;
879
- if (questionText.trim() === "") {
880
- alert("Veuillez entrer une question !");
881
- return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
882
  }
883
- alert("Question envoyée : " + questionText);
884
- });
885
-
886
- }
 
 
 
 
40
  </label>
41
  <input type="file" id="fileInput" class="file-input" accept=".doc,.docx,.xls,.xlsx,.pdf,.ppt,.pptx" hidden>
42
  </div>
43
+ <button class="summary-action-btn">RÉSUMER</button>
44
  </div>
45
  <div class="results-container">
46
  <div class="results-placeholder">
47
+ <div id="documentResult" class="placeholder-text">Le résultat apparaîtra ici...</div>
48
  </div>
49
  </div>
50
  </div>
 
54
  // Insérer la nouvelle interface sans écraser les scripts
55
  document.body.innerHTML = "";
56
  document.body.appendChild(appContainer);
57
+ // Ajouter l'événement de clic pour le bouton "RÉSUMER"
58
+ document.querySelector('.summary-action-btn').addEventListener('click', async () => {
59
+ await uploadDocument();
60
+ });
61
+
62
+
63
+ async function uploadDocument() {
64
+ let fileInput = document.getElementById("fileInput");
65
+ let resultElement = document.getElementById("documentResult");
66
+
67
+ // Vérifier si un fichier a été sélectionné
68
+ if (fileInput.files.length === 0) {
69
+ resultElement.innerText = "⚠️ Aucun fichier sélectionné !";
70
+ return; // Arrêter l'exécution si aucun fichier
71
+ }
72
+
73
+ // Afficher "Chargement..." pendant que le résumé est en cours de préparation
74
+ resultElement.innerText = "Chargement du résumé... 🕐";
75
+
76
+ let formData = new FormData();
77
+ formData.append("file", fileInput.files[0]);
78
+
79
+ try {
80
+ let response = await fetch("https://malaknihed-smartdocsai.hf.space/summarize/", {
81
+ method: "POST",
82
+ body: formData,
83
+ headers: { "Accept": "application/json" }
84
+ });
85
+
86
+ if (!response.ok) {
87
+ throw new Error("Erreur de requête !");
88
+ }
89
+
90
+ let data = await response.json();
91
+ console.log("📤 Réponse du serveur :", data);
92
+
93
+ // Vérification si le modèle est encore en cours de chargement
94
+ if (data.message && data.message.includes("Modèle en cours de chargement")) {
95
+ resultElement.innerText = "Le résumé est en cours de génération. Veuillez patienter... 🕐";
96
+ return; // Ne pas continuer tant que le modèle n'est pas prêt
97
+ }
98
+
99
+ // Afficher le résumé ou un message d'erreur
100
+ if (data.summary) {
101
+ resultElement.innerHTML = `
102
+ <h3 class="centered-title">📝 Résumé généré :</h3>
103
+ <br>
104
+ <p>${data.summary}</p>
105
+ `;
106
+ } else {
107
+ resultElement.innerText = "❌ Résumé non disponible.";
108
+ }
109
+ } catch (error) {
110
+ console.error("❌ Erreur : ", error);
111
+ resultElement.innerText = "Erreur lors de la demande !";
112
+ }
113
+ }
114
+
115
+
116
+
117
 
118
 
119
  document.getElementById('traductionbutton').addEventListener('click', loadTraductionPage);
 
488
  }
489
  }
490
  function loadDocPage() {
491
+ document.body.style.setProperty('--background-image', "url('qstdoc2.webp')");
492
+
493
+ // Créer une nouvelle structure pour ne pas écraser les événements
494
+ let appContainer = document.createElement("div");
495
+ appContainer.classList.add("app-container");
496
+ appContainer.innerHTML = `
497
+ <div class="sidebar">
498
+ <div class="logo-container">
499
+ <div class="logo-top">SMARTDOCS</div>
500
+ <div class="logo-bottom">AI</div>
501
+ </div>
502
+
503
+ <div class="menu-section">
504
+ <button class="menu-btn" id="resumerButton">RESUME</button>
505
+ <button class="menu-btn" id="traductionbutton">TRANSLATE</button>
506
+ <button class="menu-btn" id="visualisationButton">VISUALISATION</button>
507
+ </div>
508
+
509
+ <div class="menu-section">
510
+ <div class="menu-title">IMAGES</div>
511
+ <button class="menu-btn" id="interpretationButton">INTERPRETER</button>
512
+ <button class="menu-btn" id="qesimgButton">QUESTIONS</button>
513
+ </div>
514
  </div>
515
+
516
+ <div class="main-content-area">
517
+ <div class="document-container">
518
+ <h1 class="document-main-title">Opérations sur documents</h1>
519
+ <h2 class="document-subtitle">QUESTION DOCUMENTS 📄❓</h2>
520
+
521
+ <div class="upload-container">
522
+ <div class="file-drop-zone" id="fileDropZone">
523
+ <label for="fileInput" class="file-upload-label">
524
+ <img src="up.png" id="uploadIcon" class="upload-icon" alt="Upload">
525
+ <span class="drop-text" id="dropText">Déposez votre fichier ici ou cliquez pour parcourir</span>
526
+ </label>
527
+ <input type="file" id="fileInput" class="file-input" accept=".doc,.docx,.xls,.xlsx,.pdf,.ppt,.pptx" hidden>
528
+ </div>
529
+
530
+ <div class="question-container">
531
+ <div class="question">
532
+ <input type="text" id="questionInput" placeholder="Tapez votre question ici...">
533
+ </div>
534
+ <button class="question-btn" id="askDocBtn">Envoyer</button>
535
  </div>
 
536
  </div>
537
+
538
+ <div class="results-container">
539
+ <div class="results-placeholder">
540
+ <p id="documentAnswer" class="placeholder-text">Le résultat apparaîtra ici...</p>
541
+ </div>
542
  </div>
543
  </div>
544
  </div>
545
+ `;
546
+
547
+ // Insérer la nouvelle structure sans écraser les événements
548
+ document.body.innerHTML = "";
549
+ document.body.appendChild(appContainer);
550
+ // Réassocier les événements aux boutons
551
+ document.getElementById('resumerButton').addEventListener('click', loadResumerPage);
552
+ document.getElementById('traductionbutton').addEventListener('click', loadTraductionPage);
553
+ document.getElementById('visualisationButton').addEventListener('click', loadVisualisationPage);
554
+ document.getElementById('interpretationButton').addEventListener('click', loadInterpretationPage);
555
+ document.getElementById('qesimgButton').addEventListener('click', loadImagePage);
556
+
 
 
557
  const fileInput = document.getElementById('fileInput');
558
  const dropText = document.getElementById('dropText');
559
  const uploadIcon = document.getElementById('uploadIcon');
560
  +
561
 
562
  dropText.addEventListener('click', function(event) {
563
+ event.preventDefault();
564
+ event.stopPropagation();
565
+ fileInput.click();
566
  });
567
 
568
  uploadIcon.addEventListener('click', function(event) {
569
+ event.preventDefault();
570
+ event.stopPropagation();
571
+ fileInput.click();
572
  });
573
 
574
  fileInput.addEventListener('change', function(event) {
575
+ let file = event.target.files[0];
576
+ if (file) {
577
+ dropText.textContent = file.name;
578
+ uploadIcon.style.display = "none";
579
+ }
580
+ });
581
+ // 👉 Fonction d'envoi de la question/document
582
+ // 👉 Fonction d'envoi de la question/document
583
+ const askBtn = document.getElementById('askDocBtn');
584
+ askBtn.addEventListener('click', async () => {
585
+ const file = fileInput.files[0];
586
+ const question = document.getElementById('questionInput').value;
587
+ const answerDiv = document.getElementById('documentAnswer');
588
+
589
+ if (!file || !question) {
590
+ answerDiv.innerHTML = "⚠️ Veuillez ajouter un fichier et une question.";
591
+ return;
592
+ }
593
+
594
+ const formData = new FormData();
595
+ formData.append("file", file);
596
+ formData.append("question", question);
597
+
598
+ // Afficher "⏳ Analyse du document en cours..." pendant le traitement
599
+ answerDiv.innerHTML = "⏳ Analyse du document en cours...";
600
+
601
+ try {
602
+ const response = await fetch("/doc-qa/", {
603
+ method: "POST",
604
+ body: formData
605
+ });
606
+
607
+ const data = await response.json();
608
+ if (data.answer) {
609
+
610
+ answerDiv.innerHTML = `
611
+ <h3 class="centered-title">✅ La réponse :</h3>
612
+ <br>
613
+ <p>${data.answer}</p>
614
+ `;
615
+ } else {
616
+ answerDiv.innerHTML = `❌ ${data.error || "Erreur inconnue"}`;
617
+ }
618
+ } catch (error) {
619
+ answerDiv.innerHTML = "❌ Erreur lors de l'envoi de la requête.";
620
+ }
621
  });
622
+
623
  }
624
 
625
  //quand on clique sur visualisation ----------------------
 
794
 
795
 
796
  //quand on clique sur interpretation ---------------------
797
+ function loadInterpretationPage() {
 
798
  document.body.style.setProperty('--background-image', "url('interpreter.webp')");
799
 
800
  // Créer une nouvelle structure pour ne pas écraser les événements
 
833
  </label>
834
  <input type="file" id="fileInput" class="file-input" accept=".jpg,.jpeg,.png,.gif,.bmp,.webp" hidden>
835
  </div>
836
+ <button class="summary-action-btn" id="interpretButton">INTERPRET</button>
837
  </div>
838
 
839
  <div class="results-container">
840
+ <div class="results-placeholder" id="imageCaptionResult">
841
  <p class="placeholder-text">Le résultat apparaîtra ici...</p>
842
  </div>
843
  </div>
 
855
  document.getElementById('qesdocButton').addEventListener('click', loadDocPage);
856
  document.getElementById('visualisationButton').addEventListener('click', loadVisualisationPage);
857
  document.getElementById('qesimgButton').addEventListener('click', loadImagePage);
858
+
859
+ const interpretButton = document.getElementById('interpretButton');
860
+ const resultContainer = document.getElementById('imageCaptionResult');
861
  const fileInput = document.getElementById('fileInput');
862
+ const dropText = document.getElementById('dropText');
863
+ const uploadIcon = document.getElementById('uploadIcon');
864
  +
865
 
866
  dropText.addEventListener('click', function(event) {
 
882
  uploadIcon.style.display = "none";
883
  }
884
  });
885
+
886
+ // Appel API backend pour interprétation
887
+ interpretButton.addEventListener('click', async function () {
888
+ let file = fileInput.files[0];
889
+
890
+
891
+ if (!file) {
892
+ resultContainer.innerHTML = `<p class="placeholder-text">⚠️ Veuillez sélectionner une image.</p>`;
893
+ return;
894
+ }
895
+
896
+ let formData = new FormData();
897
+ formData.append("file", file);
898
+
899
+ // Afficher le message de chargement pendant l'analyse
900
+ resultContainer.innerHTML = `<p class="placeholder-text">⏳ Analyse en cours...</p>`;
901
+
902
+ try {
903
+ const response = await fetch("/image-caption/", {
904
+ method: "POST",
905
+ body: formData,
906
+ });
907
+
908
+ const data = await response.json();
909
+
910
+ if (data.caption) {
911
+
912
+ resultContainer.innerHTML = `
913
+ <h3 class="centered-title">📸 Légende générée :</h3>
914
+ <br>
915
+ <p class="result-text">${data.caption}</p>
916
+ `;
917
+ } else if (data.error) {
918
+ resultContainer.innerHTML = `<p class="error-text">❌ Erreur : ${data.error}</p>`;
919
+ }
920
+ } catch (error) {
921
+ resultContainer.innerHTML = `<p class="error-text">❌ Erreur lors de l'envoi de l'image.</p>`;
922
  }
923
+ });
924
+
925
+ }
926
 
927
  //quand on clique sur quesion image ---------------
928
 
 
963
  <img src="up.png" id="uploadIcon" class="upload-icon" alt="Upload">
964
  <span class="drop-text" id="dropText">Déposez votre image ici ou cliquez pour parcourir</span>
965
  </label>
966
+ <input type="file" id="imageInput" class="file-input" accept=".jpg,.jpeg,.png,.gif,.bmp,.webp" hidden>
967
  </div>
968
 
969
 
 
971
  <div class="question">
972
  <input type="text" id="questionInput" placeholder="Tapez votre question ici...">
973
  </div>
974
+ <button class="question-btn" id="sendImageQuestionBtn">Envoyer</button>
975
  </div>
976
  </div>
977
 
978
+ <div id="imageAnswer" class="results-container">
979
  <div class="results-placeholder">
980
  <p class="placeholder-text">Le résultat apparaîtra ici...</p>
981
  </div>
 
987
  // Insérer la nouvelle structure sans écraser les événements
988
  document.body.innerHTML = "";
989
  document.body.appendChild(appContainer);
990
+
991
  // Réassocier les événements aux boutons
992
  document.getElementById('resumerButton').addEventListener('click', loadResumerPage);
993
  document.getElementById('traductionbutton').addEventListener('click', loadTraductionPage);
 
995
  document.getElementById('visualisationButton').addEventListener('click', loadVisualisationPage);
996
  document.getElementById('interpretationButton').addEventListener('click', loadInterpretationPage);
997
 
998
+ const fileInput = document.getElementById('imageInput');
999
  const dropText = document.getElementById('dropText');
1000
  const uploadIcon = document.getElementById('uploadIcon');
1001
  +
 
1019
  uploadIcon.style.display = "none";
1020
  }
1021
  });
1022
+
1023
+ const sendBtn = document.getElementById("sendImageQuestionBtn");
1024
+ const questionInput = document.getElementById("questionInput");
1025
+ const resultContainer = document.getElementById("imageAnswer");
1026
+
1027
+ sendBtn.addEventListener("click", async function () {
1028
+ const file = fileInput.files[0];
1029
+ const question = questionInput.value.trim();
1030
+
1031
+ if (!file || !question) {
1032
+ resultContainer.innerHTML = "<p class='placeholder-text'>⚠️ Veuillez sélectionner une image et poser une question.</p>";
1033
+ return;
1034
+ }
1035
+
1036
+ const formData = new FormData();
1037
+ formData.append("file", file);
1038
+ formData.append("question", question);
1039
+
1040
+ // Afficher le message de chargement
1041
+ resultContainer.innerHTML = `<p class="placeholder-text">⏳ En attente de la réponse...</p>`;
1042
+
1043
+ try {
1044
+ const response = await fetch("/image-qa/", {
1045
+ method: "POST",
1046
+ body: formData
1047
+ });
1048
+
1049
+ const data = await response.json();
1050
+ if (data.answer) {
1051
+
1052
+ resultContainer.innerHTML = `
1053
+ <h3 class="centered-title">🧠 Réponse générée :</h3>
1054
+ <br>
1055
+ <p class="result-text">${data.answer}</p>
1056
+ `;
1057
+ } else {
1058
+ resultContainer.innerHTML = `<p class="placeholder-text">Erreur : ${data.error}</p>`;
1059
  }
1060
+ } catch (error) {
1061
+ resultContainer.innerHTML = `<p class="placeholder-text">Erreur lors de l'envoi : ${error.message}</p>`;
1062
+ }
1063
+ });
1064
+ }
1065
+
1066
+