pfe_site / static /js /pdf.js
YsnHdn's picture
Adding the result side legend
834b97c
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);
}