Spaces:
Running
Running
add
Browse files- 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 |
-
|
|
|
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">
|
700 |
<button class="menu-btn" id="traductionbutton">TRANSLATE</button>
|
701 |
-
<button class="menu-btn" id="qesdocButton">
|
702 |
</div>
|
|
|
703 |
<div class="menu-section">
|
704 |
<div class="menu-title">IMAGES</div>
|
705 |
-
<button class="menu-btn" id="interpretationButton">
|
706 |
-
<button class="menu-btn" id="qesimgButton">
|
707 |
</div>
|
708 |
</div>
|
|
|
709 |
<div class="main-content-area">
|
710 |
<div class="document-container">
|
711 |
-
<h1 class="document-main-title">
|
712 |
-
<h2 class="document-subtitle">
|
|
|
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">
|
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">
|
727 |
-
<option value="scatterplot">
|
728 |
-
<option value="lineplot">
|
729 |
-
<option value="barplot">
|
730 |
-
<option value="boxplot">
|
731 |
</select>
|
732 |
-
<button type="button" id="generateGraphBtn" class="graph-generate-btn">
|
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">
|
739 |
</div>
|
740 |
<div id="downloadSection" style="display: none; margin-top: 20px; text-align: center;">
|
741 |
-
<h3 style="color: white; margin-bottom: 10px;">
|
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 = "
|
810 |
downloadSection.style.display = "none";
|
811 |
return;
|
812 |
}
|
813 |
|
814 |
if (!graphTypeSelect.value) {
|
815 |
-
placeholderText.textContent = "
|
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 = "
|
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 |
-
|
832 |
-
|
833 |
-
|
834 |
-
headers: { 'Accept': 'image/*' }
|
835 |
-
});
|
836 |
|
837 |
-
|
838 |
-
if (!response.ok) {
|
839 |
-
throw new Error(`Erreur ${response.status}: ${await response.text()}`);
|
840 |
-
}
|
841 |
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
}
|
846 |
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
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("
|
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
|
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
|