FatimaGr commited on
Commit
7db6873
·
verified ·
1 Parent(s): c47a775
Files changed (1) hide show
  1. static/script.js +52 -48
static/script.js CHANGED
@@ -682,7 +682,8 @@ askBtn.addEventListener('click', async () => {
682
  }
683
 
684
  //quand on clique sur visualisation ----------------------
685
- function loadVisualisationPage() {
 
686
  // 1. Configuration de l'arrière-plan
687
  document.body.style.setProperty('--background-image', "url('visualisation.webp')");
688
 
@@ -695,50 +696,55 @@ askBtn.addEventListener('click', async () => {
695
  <div class="logo-top">SMARTDOCS</div>
696
  <div class="logo-bottom">AI</div>
697
  </div>
 
698
  <div class="menu-section">
699
- <button class="menu-btn" id="resumerButton">SUMMARIZE</button>
700
  <button class="menu-btn" id="traductionbutton">TRANSLATE</button>
701
- <button class="menu-btn" id="qesdocButton">DOC-QUESTIONS</button>
702
  </div>
 
703
  <div class="menu-section">
704
  <div class="menu-title">IMAGES</div>
705
- <button class="menu-btn" id="interpretationButton">INTERPRETATION</button>
706
- <button class="menu-btn" id="qesimgButton">IMAGES-QUESTIONS</button>
707
  </div>
708
  </div>
 
709
  <div class="main-content-area">
710
  <div class="document-container">
711
- <h1 class="document-main-title">Documents Operations</h1>
712
- <h2 class="document-subtitle">VISUALIZATION 📊 </h2>
 
713
  <div class="upload-container">
714
  <div class="file-drop-zone" id="fileDropZone">
715
  <label for="graphFileInput" class="file-upload-label">
716
  <img src="up.png" id="uploadIcon" class="upload-icon" alt="Upload">
717
- <span class="drop-text" id="dropText">Drop your file here or click to browse</span>
718
  </label>
719
  <input type="file" id="graphFileInput" class="file-input"
720
  accept=".doc,.docx,.xls,.xlsx,.pdf,.ppt,.pptx" hidden>
721
  </div>
722
 
723
- <div class="action-container">
724
  <select id="graphTypeSelect" class="language-dropdown">
725
  <option value="">Select type</option>
726
- <option value="histplot">Histogram</option>
727
- <option value="scatterplot">Scatter plot</option>
728
- <option value="lineplot">line plot</option>
729
- <option value="barplot">bar plot</option>
730
- <option value="boxplot">box plot</option>
731
  </select>
732
- <button type="button" id="generateGraphBtn" class="graph-generate-btn">Generate</button>
733
  </div>
734
  </div>
 
735
  <div class="graph-results-container">
736
  <div class="graph-results-placeholder">
737
  <img id="graphResultImage" class="graph-result-img">
738
- <p class="placeholder-text" id="graphPlaceholderText">The result will appear here...</p>
739
  </div>
740
  <div id="downloadSection" style="display: none; margin-top: 20px; text-align: center;">
741
- <h3 style="color: white; margin-bottom: 10px;">Download the graph</h3>
742
  <div style="display: flex; justify-content: center; gap: 10px;">
743
  <button id="downloadPng" class="download-btn">PNG</button>
744
  <button id="downloadJpg" class="download-btn">JPG</button>
@@ -806,13 +812,13 @@ askBtn.addEventListener('click', async () => {
806
 
807
  // Validation
808
  if (!fileInput.files[0]) {
809
- placeholderText.textContent = "⚠️No file selected";
810
  downloadSection.style.display = "none";
811
  return;
812
  }
813
 
814
  if (!graphTypeSelect.value) {
815
- placeholderText.textContent = "⚠️No graph type selected";
816
  downloadSection.style.display = "none";
817
  return;
818
  }
@@ -820,43 +826,41 @@ askBtn.addEventListener('click', async () => {
820
  // Préparation de l'interface
821
  resultImage.style.display = "none";
822
  downloadSection.style.display = "none";
823
- placeholderText.textContent = "Graph generation in progress...🕐";
824
 
825
  try {
826
  // Envoi des données
827
  const formData = new FormData();
828
  formData.append("file", fileInput.files[0]);
829
  formData.append("query", graphTypeSelect.value);
 
 
 
 
 
830
 
831
- const response = await fetch("/generate_viz/", {
832
- method: "POST",
833
- body: formData,
834
- headers: { 'Accept': 'image/*' }
835
- });
836
 
837
- // Vérification
838
- if (!response.ok) {
839
- throw new Error(`Erreur ${response.status}: ${await response.text()}`);
840
- }
841
 
842
- const contentType = response.headers.get('Content-Type');
843
- if (!contentType?.includes('image')) {
844
- throw new Error("Réponse non reconnue comme image");
845
- }
846
 
847
- // Affichage du résultat
848
- const imageBlob = await response.blob();
849
- const imageUrl = URL.createObjectURL(imageBlob);
850
-
851
- resultImage.onload = () => {
852
- URL.revokeObjectURL(imageUrl);
853
- // Afficher les options de téléchargement une fois l'image chargée
854
- document.getElementById("downloadSection").style.display = "block";
855
- placeholderText.textContent = "";
856
- };
857
-
858
- resultImage.src = imageUrl;
859
- resultImage.style.display = "block";
860
 
861
  } catch (error) {
862
  console.error("Erreur:", error);
@@ -870,7 +874,7 @@ askBtn.addEventListener('click', async () => {
870
  const downloadGraph = (format) => {
871
  const resultImage = document.getElementById('graphResultImage');
872
  if (!resultImage.src || resultImage.style.display === "none") {
873
- alert("⚠️Veuillez d'abord générer un graphique");
874
  return;
875
  }
876
 
@@ -896,7 +900,7 @@ askBtn.addEventListener('click', async () => {
896
  // Conversion et téléchargement
897
  canvas.toBlob((blob) => {
898
  downloadFile(blob, `graphique.${extension}`);
899
- }, mimeType, format === 'jpg' ? 0.92 : 1); // Qualité à 92% pour JPG, 100% pour PN
900
  };
901
 
902
  // 7. Fonction utilitaire pour le téléchargement
 
682
  }
683
 
684
  //quand on clique sur visualisation ----------------------
685
+ //quand on clique sur visualisation ----------------------
686
+ function loadVisualisationPage() {
687
  // 1. Configuration de l'arrière-plan
688
  document.body.style.setProperty('--background-image', "url('visualisation.webp')");
689
 
 
696
  <div class="logo-top">SMARTDOCS</div>
697
  <div class="logo-bottom">AI</div>
698
  </div>
699
+
700
  <div class="menu-section">
701
+ <button class="menu-btn" id="resumerButton">RESUME</button>
702
  <button class="menu-btn" id="traductionbutton">TRANSLATE</button>
703
+ <button class="menu-btn" id="qesdocButton">QUESTION</button>
704
  </div>
705
+
706
  <div class="menu-section">
707
  <div class="menu-title">IMAGES</div>
708
+ <button class="menu-btn" id="interpretationButton">INTERPRETER</button>
709
+ <button class="menu-btn" id="qesimgButton">QUESTIONS</button>
710
  </div>
711
  </div>
712
+
713
  <div class="main-content-area">
714
  <div class="document-container">
715
+ <h1 class="document-main-title">Opérations sur documents</h1>
716
+ <h2 class="document-subtitle">VISUALISATION</h2>
717
+
718
  <div class="upload-container">
719
  <div class="file-drop-zone" id="fileDropZone">
720
  <label for="graphFileInput" class="file-upload-label">
721
  <img src="up.png" id="uploadIcon" class="upload-icon" alt="Upload">
722
+ <span class="drop-text" id="dropText">Déposez votre fichier ici ou cliquez pour parcourir</span>
723
  </label>
724
  <input type="file" id="graphFileInput" class="file-input"
725
  accept=".doc,.docx,.xls,.xlsx,.pdf,.ppt,.pptx" hidden>
726
  </div>
727
 
728
+ <div class="graph-action-container">
729
  <select id="graphTypeSelect" class="language-dropdown">
730
  <option value="">Select type</option>
731
+ <option value="histplot">Histogramme</option>
732
+ <option value="scatterplot">Nuage de points</option>
733
+ <option value="lineplot">Courbe</option>
734
+ <option value="barplot">Diagramme en barres</option>
735
+ <option value="boxplot">Boîte à moustaches</option>
736
  </select>
737
+ <button type="button" id="generateGraphBtn" class="graph-generate-btn">Générer</button>
738
  </div>
739
  </div>
740
+
741
  <div class="graph-results-container">
742
  <div class="graph-results-placeholder">
743
  <img id="graphResultImage" class="graph-result-img">
744
+ <p class="placeholder-text" id="graphPlaceholderText">Le résultat apparaîtra ici...</p>
745
  </div>
746
  <div id="downloadSection" style="display: none; margin-top: 20px; text-align: center;">
747
+ <h3 style="color: white; margin-bottom: 10px;">Télécharger le graphique</h3>
748
  <div style="display: flex; justify-content: center; gap: 10px;">
749
  <button id="downloadPng" class="download-btn">PNG</button>
750
  <button id="downloadJpg" class="download-btn">JPG</button>
 
812
 
813
  // Validation
814
  if (!fileInput.files[0]) {
815
+ placeholderText.textContent = "Veuillez sélectionner un fichier";
816
  downloadSection.style.display = "none";
817
  return;
818
  }
819
 
820
  if (!graphTypeSelect.value) {
821
+ placeholderText.textContent = "Veuillez sélectionner un type de graphique";
822
  downloadSection.style.display = "none";
823
  return;
824
  }
 
826
  // Préparation de l'interface
827
  resultImage.style.display = "none";
828
  downloadSection.style.display = "none";
829
+ placeholderText.textContent = "Génération du graphique en cours...";
830
 
831
  try {
832
  // Envoi des données
833
  const formData = new FormData();
834
  formData.append("file", fileInput.files[0]);
835
  formData.append("query", graphTypeSelect.value);
836
+ const response = await fetch("/generate_viz/", {
837
+ method: "POST",
838
+ body: formData,
839
+ headers: { 'Accept': 'application/json' }
840
+ });
841
 
842
+ if (!response.ok) {
843
+ throw new Error(`Erreur ${response.status}: ${await response.text()}`);
844
+ }
 
 
845
 
846
+ const result = await response.json();
 
 
 
847
 
848
+ if (result.error) {
849
+ throw new Error(result.error);
850
+ }
 
851
 
852
+ // Créer une URL de l'image à partir de la chaîne base64
853
+ const imageUrl = `data:image/png;base64,${result.image_base64}`;
854
+
855
+ // Afficher l'image
856
+ resultImage.onload = () => {
857
+ // Afficher les options de téléchargement une fois l'image chargée
858
+ document.getElementById("downloadSection").style.display = "block";
859
+ placeholderText.textContent = "";
860
+ };
861
+
862
+ resultImage.src = imageUrl;
863
+ resultImage.style.display = "block";
 
864
 
865
  } catch (error) {
866
  console.error("Erreur:", error);
 
874
  const downloadGraph = (format) => {
875
  const resultImage = document.getElementById('graphResultImage');
876
  if (!resultImage.src || resultImage.style.display === "none") {
877
+ alert("Veuillez d'abord générer un graphique");
878
  return;
879
  }
880
 
 
900
  // Conversion et téléchargement
901
  canvas.toBlob((blob) => {
902
  downloadFile(blob, `graphique.${extension}`);
903
+ }, mimeType, format === 'jpg' ? 0.92 : 1); // Qualité à 92% pour JPG, 100% pour PNG
904
  };
905
 
906
  // 7. Fonction utilitaire pour le téléchargement