Скрипты и стили вынесены в отдельные файлы
parent
354d5fdbd5
commit
e1c1ca56ec
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"semi": true,
|
||||||
|
"trailingComma": "all",
|
||||||
|
"singleQuote": true,
|
||||||
|
"printWidth": 160,
|
||||||
|
"tabWidth": 2,
|
||||||
|
"endOfLine": "auto"
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
const renderResultMarkup = (query, result) =>
|
||||||
|
`
|
||||||
|
<h1 class="display-6">${query}</h1>
|
||||||
|
<table class="table table-bordered table-striped">
|
||||||
|
<tr>
|
||||||
|
${result.columns.map((column) => `<th>${column}</th>`).join('')}
|
||||||
|
</tr>
|
||||||
|
${result.rows.map(
|
||||||
|
(row) =>
|
||||||
|
`<tr>${Object.entries(row)
|
||||||
|
.map(([key, value]) => `<td>${value.value}</td>`)
|
||||||
|
.join('')}</tr>`,
|
||||||
|
)}
|
||||||
|
</table>`;
|
||||||
|
|
||||||
|
const processAnalyzeResult = (data) => {
|
||||||
|
const img = document.getElementById('imgslot');
|
||||||
|
const queriesResult = document.getElementById('queriesResult');
|
||||||
|
|
||||||
|
img.src = 'none.png';
|
||||||
|
if (data.image) {
|
||||||
|
img.src = 'data:image/jpg;base64,' + data.image;
|
||||||
|
}
|
||||||
|
|
||||||
|
queriesResult.innerHTML = '';
|
||||||
|
if (data.data && data.data.response) {
|
||||||
|
for (const [query, result] of Object.entries(data.data.response)) {
|
||||||
|
queriesResult.innerHTML += renderResultMarkup(query, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleFormSubmit = (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
const data = new FormData(event.target);
|
||||||
|
fetch('/analyze', { method: 'POST', body: data })
|
||||||
|
.then((res) => res.json())
|
||||||
|
.then(processAnalyzeResult);
|
||||||
|
};
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
document.getElementById('uploadForm').addEventListener('submit', handleFormSubmit);
|
||||||
|
});
|
Loading…
Reference in New Issue