|
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; |
|
|
|
|
|
|
|
|
|
dropArea.addEventListener("click", () => { |
|
|
|
const input = document.getElementById("file-input"); |
|
input.click(); |
|
}); |
|
|
|
|
|
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(); |
|
}); |
|
|
|
|
|
function initializeChart(data, backgroundColor, borderColor, labels) { |
|
|
|
data = data.map(function (element) { |
|
return parseFloat(element).toFixed(2); |
|
}); |
|
document.querySelectorAll('.bestSellers').forEach(function (canvas) { |
|
|
|
new Chart(canvas, { |
|
type: 'doughnut', |
|
data: { |
|
datasets: [{ |
|
data: data, |
|
backgroundColor: backgroundColor, |
|
borderColor: borderColor, |
|
}], |
|
labels: labels |
|
}, |
|
options: { |
|
responsive: true, |
|
cutoutPercentage: 80, |
|
legend: { |
|
display: false, |
|
}, |
|
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'); |
|
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); |
|
|
|
|
|
loadDashboardScript(data, backgroundColor, borderColor, labels); |
|
}) |
|
.catch((error) => console.error(error)); |
|
}); |
|
|
|
function destroyPreviousCharts() { |
|
|
|
document.querySelectorAll('.bestSellers').forEach(function (canvas) { |
|
|
|
var chartInstance = Chart.getChart(canvas); |
|
|
|
if (chartInstance) { |
|
chartInstance.destroy(); |
|
} |
|
}); |
|
} |
|
|
|
function loadDashboardScript(data, backgroundColor, borderColor, labels) { |
|
var scriptElement = document.createElement('script'); |
|
scriptElement.type = 'text/javascript'; |
|
scriptElement.src = '../static/js/dashboard_pdf.js'; |
|
|
|
scriptElement.onload = function () { |
|
initializeChart(data, backgroundColor, borderColor, labels); |
|
}; |
|
document.body.appendChild(scriptElement); |
|
} |
|
|
|
|
|
|
|
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() { |
|
|
|
window.location.reload(); |
|
file = null; |
|
|
|
|
|
dropArea.innerHTML = originalDropAreaHTML; |
|
|
|
|
|
dropArea.classList.remove("active"); |
|
|
|
|
|
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; |
|
} |
|
|
|
|
|
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); |
|
} |
|
|