File size: 9,020 Bytes
aef7e33 dbb882b aef7e33 dbb882b baf039a aef7e33 baf039a aef7e33 dbb882b aef7e33 dbb882b baf039a aef7e33 baf039a aef7e33 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
const dropArea = document.getElementById("dropArea");
const dragText = dropArea.querySelector("h6");
const input = dropArea.querySelector("input");
const form = document.querySelector("form");
const ocrResult = document.getElementById("ocr-result");
const categoryResult = document.getElementById("category-result")
const reset = document.getElementById("reset");
const imagePreview = dropArea.querySelector("#image-preview");
const currentClassProbabilitiesList = document.getElementById("class-probabilities");
const currentClassProbabilitiesList_resultSection = document.getElementById("class-probabilities-result-section");
const currentPredictedClass = document.getElementById('predicted-class')
const currentPredictedClass_resultSection = document.getElementById('predicted-class-result-section')
const sentencePredictions = document.getElementById('classifiedText')
const staticDiv = document.getElementById("static");
const dynamicDiv = document.getElementById("dynamic");
const sentenceResultDiv = document.getElementById("dynamicResult");
var chartData;
let file;
// Event listener for clicking the dropArea to upload a file
dropArea.addEventListener("click", () => {
// Trigger click event on the file input when the dropArea is clicked
const input = document.getElementById("file-input");
input.click();
});
// Update the event listener for input change to handle file selection
const fileInput = document.getElementById("file-input");
fileInput.addEventListener("change", function () {
file = this.files[0];
dropArea.classList.add("active");
viewFile();
});
input.addEventListener("change", function () {
file = this.files[0];
dropArea.classList.add("active");
viewFile();
});
dropArea.addEventListener("dragover", (event) => {
event.preventDefault();
dropArea.classList.add("active");
dragText.textContent = "Release to Upload File";
});
dropArea.addEventListener("dragleave", () => {
dropArea.classList.remove("active");
dragText.textContent = "Drag & Drop or Click to Upload File";
});
dropArea.addEventListener("drop", (event) => {
event.preventDefault();
file = event.dataTransfer.files[0];
viewFile();
});
// Définir la fonction initializeChart en premier
function initializeChart(data, backgroundColor, borderColor, labels) {
// Créer une nouvelle instance Chart.js pour chaque élément canvas avec la classe 'bestSellers'
data = data.map(function (element) {
return parseFloat(element).toFixed(2);
});
document.querySelectorAll('.bestSellers').forEach(function (canvas) {
// Initialiser le graphique
new Chart(canvas, {
type: 'doughnut', // Définir le type de graphique sur doughnut
data: {
datasets: [{
data: data,
backgroundColor: backgroundColor,
borderColor: borderColor,
}],
labels: labels
},
options: {
responsive: true, // Rendre le graphique responsive
cutoutPercentage: 80, // Définir le pourcentage de découpe
legend: {
display: false, // Masquer la légende
},
animation: {
animateScale: true,
animateRotate: true
},
plugins: {
datalabels: {
display: false,
align: 'center',
anchor: 'center'
}
}
}
});
});
}
form.addEventListener("submit", (event) => {
event.preventDefault();
if (!file) {
alert("Please select a file!");
return;
}
const formData = new FormData();
formData.append("file", file);
fetch("/pdf/upload", {
method: "POST",
body: formData,
})
.then((response) => response.text())
.then((html) => {
const responseDOM = new DOMParser().parseFromString(html, "text/html");
const resultTextArea = responseDOM.getElementById("ocr-result");
ocrResult.value = resultTextArea.value;
const classProbabilitiesList = responseDOM.getElementById("class-probabilities");
currentClassProbabilitiesList.innerHTML = classProbabilitiesList.innerHTML;
currentClassProbabilitiesList_resultSection.innerHTML = classProbabilitiesList.innerHTML;
const PredictedClass = responseDOM.getElementById("predicted-class")
currentPredictedClass.innerHTML = PredictedClass.innerHTML;
currentPredictedClass_resultSection.innerHTML = PredictedClass.innerHTML;
document.getElementById('transcribedText').innerHTML = responseDOM.getElementById('transcribedText').innerHTML;
const sentencePredictionsResponse= responseDOM.getElementById('classifiedText').innerHTML;
sentencePredictions.innerHTML = sentencePredictionsResponse;
dynamicDiv.classList.remove('d-none');
staticDiv.classList.add('d-none');
sentenceResultDiv.classList.remove('d-none');
setTimeout(() => {
const resultsDiv = document.getElementById('dynamicResult');
if (resultsDiv) {
resultsDiv.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
}, 100);
if (resultsHeading) {
resultsHeading.scrollIntoView({ behavior: 'smooth' });
}
var canvasElement = responseDOM.querySelector('.bestSellers'); // Sélectionnez le premier élément avec la classe 'bestSellers'
chartData = canvasElement.getAttribute('data-chart');
var data = JSON.parse(chartData).datasets[0].data.slice(0, 5);
var backgroundColor = JSON.parse(chartData).datasets[0].backgroundColor.slice(0, 5);
var borderColor = JSON.parse(chartData).datasets[0].borderColor.slice(0, 5);
var labels = JSON.parse(chartData).labels.slice(0, 5);
// Créer de nouveaux graphiques
loadDashboardScript(data, backgroundColor, borderColor, labels);
})
.catch((error) => console.error(error));
});
function destroyPreviousCharts() {
// Trouver tous les éléments canvas avec la classe 'bestSellers'
document.querySelectorAll('.bestSellers').forEach(function (canvas) {
// Récupérer l'instance du graphique
var chartInstance = Chart.getChart(canvas);
// Si une instance existe, détruire le graphique
if (chartInstance) {
chartInstance.destroy();
}
});
}
function loadDashboardScript(data, backgroundColor, borderColor, labels) { // Correction ici
var scriptElement = document.createElement('script');
scriptElement.type = 'text/javascript';
scriptElement.src = '../static/js/dashboard_pdf.js';
// Attendez que le script soit chargé avant d'appeler la fonction d'initialisation
scriptElement.onload = function () {
initializeChart(data, backgroundColor, borderColor, labels);
};
document.body.appendChild(scriptElement);
}
// Define the original HTML structure of the drop area
const originalDropAreaHTML = `
<h6 class="text-white-50">Drag and Drop File Here</h6>
<span class="text-white-50">OR</span>
<h6 class="text-white-50">Click here</h6>
<input id="file-input" type="file" name="image" accept=".pdf" hidden>
`;
function deleteCurrentFile() {
// Recharger le fichier index.js après l'envoi du formulaire
window.location.reload();
file = null;
// Restore the original HTML structure
dropArea.innerHTML = originalDropAreaHTML;
// Remove the 'active' class to reset the styling
dropArea.classList.remove("active");
// Update the event listener for input change to handle file selection
const fileInput = document.getElementById("file-input");
fileInput.addEventListener("change", function () {
file = this.files[0];
dropArea.classList.add("active");
viewFile();
});
}
function viewFile() {
let fileType = file.type;
let validExtensions = ["application/pdf"];
if (validExtensions.includes(fileType)) {
let fileURL = URL.createObjectURL(file);
let pdfTag = `<iframe src="${fileURL}" style="width:100%;height:100%;"></iframe>`;
dropArea.innerHTML = pdfTag;
} else {
alert("This is not a PDF File!");
dropArea.classList.remove("active");
dragText.textContent = "Drag & Drop or Click to Upload File";
}
}
const copyBtn = document.getElementById("copy-btn");
copyBtn.addEventListener("click", () => {
ocrResult.select();
document.execCommand("copy");
});
function createResponseElement(response) {
var pdfResponseElement = document.createElement('ul');
pdfResponseElement.classList.add('graph-legend-rectangle');
pdfResponseElement.innerHTML = response;
return pdfResponseElement;
}
// Modifiez la fonction reloadDashboardScript pour accepter les données supplémentaires
function reloadDashboardScript(data, backgroundColor, borderColor, labels) {
var scriptElement = document.createElement('script');
scriptElement.type = 'text/javascript';
scriptElement.src = `../static/js/dashboard_pdf.js?data=${encodeURIComponent(JSON.stringify(data))}&backgroundColor=${encodeURIComponent(JSON.stringify(backgroundColor))}&borderColor=${encodeURIComponent(JSON.stringify(borderColor))}&labels=${encodeURIComponent(JSON.stringify(labels))}`;
document.body.appendChild(scriptElement);
}
|