diff --git a/data/demo.mv.db b/data/demo.mv.db index ed8ba420d0244dc24931da62cc9d2c7b49e48f71..f63f729016123528800d0112d9cc6acbd3a20409 100644 Binary files a/data/demo.mv.db and b/data/demo.mv.db differ diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index a0a54bf0204ff48e80acb4422bdfb50281501642..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1 +0,0 @@ -grobid.host=http://localhost:8070 \ No newline at end of file diff --git a/src/main/resources/application-mysql.properties b/src/main/resources/application-mysql.properties index fa0e8a471e8341a541a28b6c10131ffe3ced0949..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/src/main/resources/application-mysql.properties +++ b/src/main/resources/application-mysql.properties @@ -1,13 +0,0 @@ -server.port=8080 -spring.application.name=articleProcessor - -spring.jpa.hibernate.ddl-auto=update -spring.jpa.show-sql=true -spring.jpa.properties.hibernate.format_sql=true - -spring.thymeleaf.prefix=classpath:/templates/ -spring.thymeleaf.suffix=.html - -# Spring MVC for uploading PDF files -spring.servlet.multipart.max-file-size=5MB -spring.servlet.multipart.max-request-size=5MB diff --git a/src/main/resources/templates/about-project.html b/src/main/resources/templates/about-project.html index 02fbd4d8b56b74affe5c06db9a93dbeb7162db69..35aa3c1fe97403fff3e547a14535bd51c236c193 100644 --- a/src/main/resources/templates/about-project.html +++ b/src/main/resources/templates/about-project.html @@ -111,7 +111,7 @@ <p> The whole project was created at <strong>VĹ B Technical University of Ostrava</strong>. </p> - <p>f + <p> It utilizes the open-source GROBID system to extract metadata such as authors, titles, abstracts, and references. Users can upload PDF files, and the application automatically analyzes them and stores the structured results in a database. diff --git a/src/main/resources/templates/statistics.html b/src/main/resources/templates/statistics.html index b52459d59e9d00a5b935de2db4f7f2a26327ad10..7b11bb9d5a8da25dd1344caca8f4decb35044152 100644 --- a/src/main/resources/templates/statistics.html +++ b/src/main/resources/templates/statistics.html @@ -11,7 +11,7 @@ <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> - <title>Document Statistics</title> + <title>Application Statistics</title> <script src="https://cdn.plot.ly/plotly-1.58.5.min.js"></script> <link rel="icon" type="image/x-icon" href="/assets/favicon.ico" /> @@ -136,11 +136,11 @@ const categoryLabels = Object.keys(categoryData); const categoryValues = Object.values(categoryData); - // 🟡 PIE chart (animated) + // 🟡 PIE chart (without animation) const pieTrace = { type: 'pie', labels: statusLabels, - values: statusValues.map(() => 0), + values: statusValues, hole: 0.3, marker: { colors: ['#1c375e', '#d4af37', '#66ccff', '#ffff66'] @@ -155,22 +155,8 @@ font: { color: '#ffffff' } }; - Plotly.newPlot('statusChart', [{ - type: 'pie', - labels: statusLabels, - values: statusValues, - hole: 0.3, - marker: { - colors: ['#1c375e', '#d4af37', '#66ccff', '#ffff66'] - }, - textinfo: 'label+percent+value', - textposition: 'inside' - }], { - title: 'Documents by Status', - paper_bgcolor: '#6780a3', - font: { color: '#ffffff' } - }, { responsive: true }); - + // KoláčovĂ˝ graf sa zobrazĂ bez animácie + Plotly.newPlot('statusChart', [pieTrace], pieLayout, { responsive: true }); // 🔵 BAR chart (animated) const maxY = Math.max(...categoryValues); @@ -200,17 +186,33 @@ } }; - Plotly.newPlot('categoryChart', [traceBar], layoutBar, { responsive: true }) - .then(() => { - const update = { data: [{ y: categoryValues }] }; - setTimeout(() => { - Plotly.animate('categoryChart', update, { - frame: { duration: 800, redraw: true }, - transition: { duration: 500, easing: 'cubic-in-out' } - }); - }, 500); - }); + const categoryChartElement = document.getElementById('categoryChart'); + + // observer pre sledovanie, kedy je graf viditeÄľnĂ˝ + const observer = new IntersectionObserver(entries => { + entries.forEach(entry => { + if (entry.isIntersecting) { + // Ak je graf viditeÄľnĂ˝, spustĂme animáciu + Plotly.newPlot('categoryChart', [traceBar], layoutBar, { responsive: true }) + .then(() => { + const update = { data: [{ y: categoryValues }] }; + setTimeout(() => { + Plotly.animate('categoryChart', update, { + frame: { duration: 800, redraw: true }, + transition: { duration: 500, easing: 'cubic-in-out' } + }); + }, 500); + }); + observer.unobserve(entry.target); + } + }); + }, { threshold: 0.5 }); // 50% grafu musĂ byĹĄ viditeÄľnĂ© + + observer.observe(categoryChartElement); </script> + + + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script> <footer class="footer bg-light mt-5"> diff --git a/src/main/resources/templates/upload.html b/src/main/resources/templates/upload.html index 97538c398005fd05e60ffc5ceea851308242b1b2..c312ab62077d80f346800876de285e7e6d8adeef 100644 --- a/src/main/resources/templates/upload.html +++ b/src/main/resources/templates/upload.html @@ -15,7 +15,8 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Upload PDF</title> - <link rel="icon" type="image/x-icon" href="assets/favicon.ico" /> + <link rel="icon" type="image/x-icon" href="/assets/favicon.ico" /> + <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css" rel="stylesheet" type="text/css" /> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css" /> <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" /> diff --git a/src/main/resources/templates/view-pdf.html b/src/main/resources/templates/view-pdf.html index 8cd5e87c180ef3d974d9a84b7352f283cfd7a1fd..6d490fa235ab43f9cf8791e9695947b47a5cc183 100644 --- a/src/main/resources/templates/view-pdf.html +++ b/src/main/resources/templates/view-pdf.html @@ -14,7 +14,8 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>View single PDF</title> - <link rel="icon" type="image/x-icon" href="assets/favicon.ico" /> + <link rel="icon" type="image/x-icon" href="/assets/favicon.ico" /> + <!-- Bootstrap CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <link rel="stylesheet" href="/styles.css"> @@ -87,7 +88,7 @@ <!-- Button to show graph of references --> <div class="mt-4" id="graphContainer" style="display: none;"> - <button id="showGraphButton" class="btn btn-secondary">SHOW GRAPH OF REFERENCES</button> + <button id="showGraphButton" class="btn btn-dark">SHOW GRAPH OF REFERENCES</button> </div> <div class="row mt-4"> @@ -105,14 +106,16 @@ <!-- Form for adding notes and delete document buttons --> <div class="d-flex justify-content-between mt-4"> <!-- Add Notes Button --> - <button class="btn btn-info" id="addNotesButton">Add Notes</button> + <button class="btn btn-info ms-auto" id="addNotesButton">Add Notes</button> - <!-- Delete Document Button --> + <!-- Delete Document Button + - pripravenĂ© na dokonÄŤenie <form th:action="@{'/delete/' + ${documentId}}" method="post" onsubmit="return confirm('Are you sure you want to delete this document?');"> <button type="submit" class="btn btn-dark"> <i class="bi bi-trash"></i> Delete Document </button> </form> + --> </div> <!-- Form for adding notes -->