|
var chartData; |
|
function generateUniqueId() { |
|
return 'chart-' + Date.now(); |
|
} |
|
|
|
function submitForm() { |
|
var form = document.getElementById('sentenceForm'); |
|
var formData = new FormData(form); |
|
|
|
|
|
var presentationDiv = document.getElementById('presentation'); |
|
presentationDiv.classList.add('d-none'); |
|
|
|
|
|
fetch('/sentence', { |
|
method: 'POST', |
|
body: formData |
|
}) |
|
.then(response => response.text()) |
|
.then(data => { |
|
|
|
|
|
var textarea = document.getElementById("ocr-result"); |
|
textarea.style.height = "50px"; |
|
|
|
|
|
var userMessageElement = createUserMessageElement(formData.get('text')); |
|
var chatConversation = document.querySelector('.chat-conversation-content .os-content'); |
|
chatConversation.appendChild(userMessageElement); |
|
|
|
|
|
var flaskResponseElement = createFlaskResponseElement(data); |
|
|
|
chatConversation.appendChild(flaskResponseElement); |
|
var canvasElement = document.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); |
|
|
|
addAutoResize(); |
|
scrollDown(); |
|
|
|
form.reset(); |
|
|
|
var canvasId = generateUniqueId(); |
|
var canvasHTML = document.getElementById('bestSellers#'); |
|
canvasHTML.id = generateUniqueId(); |
|
canvasId = canvasHTML.id; |
|
|
|
|
|
updateChart(canvasId); |
|
}) |
|
.catch(error => console.error('Error:', error)); |
|
} |
|
function updateChart(canvasId) { |
|
var canvas = document.getElementById(canvasId); |
|
var chartData = JSON.parse(canvas.dataset.chart); |
|
var data = chartData.datasets[0].data.slice(0, 5).map(function(element) { |
|
return parseFloat(element).toFixed(2); |
|
}); |
|
var backgroundColor = chartData.datasets[0].backgroundColor.slice(0,5); |
|
var borderColor = chartData.datasets[0].borderColor.slice(0,5); |
|
var labels = chartData.labels.slice(0,5); |
|
var Data = { |
|
datasets: [{ |
|
data: data, |
|
backgroundColor: |
|
backgroundColor |
|
, |
|
borderColor: backgroundColor, |
|
}], |
|
|
|
labels: labels |
|
}; |
|
var pieChart = new Chart(canvas, { |
|
type: 'doughnut', |
|
data: Data, |
|
options: { |
|
responsive: true, |
|
cutoutPercentage: 80, |
|
legend: { |
|
display: false, |
|
}, |
|
animation: { |
|
animateScale: true, |
|
animateRotate: true |
|
}, |
|
plugins: { |
|
datalabels: { |
|
display: false, |
|
align: 'center', |
|
anchor: 'center' |
|
} |
|
} |
|
} |
|
}); |
|
} |
|
|
|
|
|
function handleEnter(event) { |
|
if (event.key === "Enter" && !event.shiftKey) { |
|
event.preventDefault(); |
|
submitForm(); |
|
} |
|
} |
|
|
|
|
|
document.getElementById('sentenceForm').addEventListener('submit', function (event) { |
|
event.preventDefault(); |
|
var form = event.target; |
|
var formData = new FormData(form); |
|
|
|
|
|
var presentationDiv = document.getElementById('presentation'); |
|
presentationDiv.classList.add('d-none'); |
|
|
|
|
|
fetch('/sentence', { |
|
method: 'POST', |
|
body: formData |
|
}) |
|
.then(response => response.text()) |
|
.then(data => { |
|
|
|
|
|
var textarea = document.getElementById("ocr-result"); |
|
textarea.style.height = "50px"; |
|
|
|
var userMessageElement = createUserMessageElement(formData.get('text')); |
|
var chatConversation = document.querySelector('.chat-conversation-content .os-content'); |
|
chatConversation.appendChild(userMessageElement); |
|
|
|
|
|
var flaskResponseElement = createFlaskResponseElement(data); |
|
|
|
|
|
chatConversation.appendChild(flaskResponseElement); |
|
var canvasElement = document.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); |
|
addAutoResize(); |
|
scrollDown(); |
|
|
|
form.reset(); |
|
|
|
var canvasId = generateUniqueId(); |
|
var canvasHTML = document.getElementById('bestSellers#'); |
|
canvasHTML.id = generateUniqueId(); |
|
canvasId = canvasHTML.id; |
|
|
|
|
|
updateChart(canvasId); |
|
}) |
|
.catch(error => console.error('Error:', error)); |
|
}); |
|
|
|
|
|
function createUserMessageElement(message) { |
|
var userMessageElement = document.createElement('div'); |
|
userMessageElement.classList.add('d-flex', 'justify-content-end', 'text-end', 'mb-1'); |
|
var userMessageSubElement = document.createElement('div'); |
|
userMessageSubElement.classList.add('w-100'); |
|
var userMessageContainer = document.createElement('div'); |
|
userMessageContainer.classList.add('d-flex', 'flex-column', 'align-items-end'); |
|
|
|
var userMessageContent = document.createElement('div'); |
|
userMessageContent.classList.add('bg-primary', 'text-white', 'p-2', 'px-3', 'rounded-2', 'mw-80'); |
|
var userMessageText = document.createTextNode(message); |
|
userMessageContent.appendChild(userMessageText); |
|
userMessageContainer.appendChild(userMessageContent); |
|
userMessageSubElement.appendChild(userMessageContainer); |
|
userMessageElement.appendChild(userMessageSubElement); |
|
return userMessageElement; |
|
} |
|
|
|
|
|
function createFlaskResponseElement(response) { |
|
var flaskResponseElement = document.createElement('div'); |
|
flaskResponseElement.classList.add('d-flex', 'mb-1'); |
|
var flaskAvatarElement = document.createElement('div'); |
|
flaskAvatarElement.classList.add('flex-shrink-0', 'avatar', 'avatar-xs', 'me-2'); |
|
var flaskAvatarImg = document.createElement('img'); |
|
flaskAvatarImg.classList.add('avatar-img', 'rounded-circle'); |
|
flaskAvatarImg.setAttribute('src', '../static/icons/logo_header_128x128.png'); |
|
flaskAvatarElement.appendChild(flaskAvatarImg); |
|
var flaskMessageContent = document.createElement('div'); |
|
flaskMessageContent.classList.add('flex-grow-1'); |
|
flaskMessageContent.innerHTML = response; |
|
flaskResponseElement.appendChild(flaskAvatarElement); |
|
flaskResponseElement.appendChild(flaskMessageContent); |
|
return flaskResponseElement; |
|
} |
|
|
|
function reloadDashboardScript(data, backgroundColor, borderColor, labels) { |
|
|
|
var scriptElement = document.createElement('script'); |
|
scriptElement.type = 'text/javascript'; |
|
scriptElement.onload = function () { |
|
initializeChart(data, backgroundColor, borderColor, labels); |
|
}; |
|
|
|
scriptElement.src = `../static/js/dashboard_sentence.js?data=${data}&backgroundColor=${backgroundColor}&borderColor=${borderColor}&labels=${labels}`; |
|
|
|
|
|
document.body.appendChild(scriptElement); |
|
} |
|
|
|
function addAutoResize() { |
|
document.querySelectorAll('[data-autoresize]').forEach(function (element) { |
|
element.style.boxSizing = 'border-box'; |
|
var offset = element.offsetHeight - element.clientHeight; |
|
element.addEventListener('input', function (event) { |
|
event.target.style.height = 'auto'; |
|
event.target.style.height = event.target.scrollHeight + offset + 'px'; |
|
}); |
|
element.removeAttribute('data-autoresize'); |
|
}); |
|
} |
|
|
|
function scrollDown() { |
|
var objDiv = document.getElementsByClassName("os-viewport os-viewport-native-scrollbars-invisible"); |
|
var index = 0; |
|
while (index < objDiv.length) { |
|
objDiv[index].scrollTop = objDiv[index].scrollHeight; |
|
index++; |
|
} |
|
} |
|
|
|
|
|
function resizeTextarea(textarea) { |
|
textarea.style.height = "auto"; |
|
textarea.style.height = textarea.scrollHeight + "px"; |
|
} |
|
|
|
|
|
|