Preparing for production #8
15
pom.xml
15
pom.xml
@ -82,6 +82,21 @@
|
|||||||
<artifactId>spring-boot-starter-tomcat</artifactId>
|
<artifactId>spring-boot-starter-tomcat</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.webjars</groupId>
|
||||||
|
<artifactId>webjars-locator</artifactId>
|
||||||
|
<version>0.52</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.webjars</groupId>
|
||||||
|
<artifactId>bootstrap</artifactId>
|
||||||
|
<version>5.3.3</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.webjars.npm</groupId>
|
||||||
|
<artifactId>bootstrap-icons</artifactId>
|
||||||
|
<version>1.11.3</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-test</artifactId>
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
@ -8,6 +8,10 @@ app.upload-root=@project.basedir@/files/uploads
|
|||||||
app.output-root=@project.basedir@/files/outputs
|
app.output-root=@project.basedir@/files/outputs
|
||||||
app.onSuccess-homepage=/files/manage
|
app.onSuccess-homepage=/files/manage
|
||||||
|
|
||||||
|
# Webjars properties
|
||||||
|
spring.web.resources.chain.strategy.content.enabled=true
|
||||||
|
spring.web.resources.chain.strategy.content.paths=/**
|
||||||
|
|
||||||
# Whisper properties
|
# Whisper properties
|
||||||
whisper.activate-virtual-env-command=bash, -c, source activate
|
whisper.activate-virtual-env-command=bash, -c, source activate
|
||||||
whisper.model-path=@project.basedir@/whisper-models
|
whisper.model-path=@project.basedir@/whisper-models
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
// Select/Deselect all checkboxes
|
||||||
|
document.querySelectorAll('[id^=select-all]').forEach(function (element) {
|
||||||
|
element.addEventListener('change', function () {
|
||||||
|
const checkboxes = element.closest('table').querySelectorAll('input[name="selectedFiles"]');
|
||||||
|
checkboxes.forEach(checkbox => checkbox.checked = this.checked);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle bulk download
|
||||||
|
function downloadSelected() {
|
||||||
|
const selectedFiles = Array.from(document.querySelectorAll('input[name="selectedFiles"]:checked'))
|
||||||
|
.map(checkbox => checkbox.value);
|
||||||
|
if (selectedFiles.length === 0) {
|
||||||
|
alert('No files selected.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const form = document.getElementById('bulk-actions-form');
|
||||||
|
form.action = '/files/download-zip'; // Backend endpoint for bulk download
|
||||||
|
form.method = 'post';
|
||||||
|
form.submit();
|
||||||
|
clearCheckboxes();
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearCheckboxes() {
|
||||||
|
const checkboxes = document.querySelectorAll('input[name="selectedFiles"], #select-all');
|
||||||
|
checkboxes.forEach(checkbox => (checkbox.checked = false));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle bulk delete
|
||||||
|
function deleteSelected() {
|
||||||
|
const selectedFiles = Array.from(document.querySelectorAll('input[name="selectedFiles"]:checked'))
|
||||||
|
.map(checkbox => checkbox.value);
|
||||||
|
if (selectedFiles.length === 0) {
|
||||||
|
alert('No files selected.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (confirm('Are you sure you want to delete the selected files?')) {
|
||||||
|
const form = document.getElementById('bulk-actions-form');
|
||||||
|
form.action = '/files/bulk-delete'; // Backend endpoint for bulk delete
|
||||||
|
form.submit();
|
||||||
|
}
|
||||||
|
}
|
@ -1,13 +1,13 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html xmlns:th="http://www.thymeleaf.org">
|
<html xmlns:th="http://www.thymeleaf.org" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Seshat Auido Transcriber</title>
|
<title>Seshat Auido Transcriber</title>
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css">
|
<link th:rel="stylesheet" th:href="@{/webjars/bootstrap/css/bootstrap.min.css}" />
|
||||||
<link rel="stylesheet"
|
<link th:rel="stylesheet" th:href="@{/webjars/bootstrap-icons/font/bootstrap-icons.min.css}" />
|
||||||
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.9.1/font/bootstrap-icons.min.css">
|
<script type="text/javascript" th:src="@{/webjars/bootstrap/js/bootstrap.bundle.min.js}"></script>
|
||||||
<link rel="stylesheet" th:href="@{/css/styles.css}">
|
<link th:rel="stylesheet" th:href="@{/css/styles.css}" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header class="header bg-primary text-white py-3">
|
<header class="header bg-primary text-white py-3">
|
||||||
@ -133,50 +133,6 @@
|
|||||||
<footer class="bg-primary text-white text-center py-3">
|
<footer class="bg-primary text-white text-center py-3">
|
||||||
<p>© 2024 Seshat App</p>
|
<p>© 2024 Seshat App</p>
|
||||||
</footer>
|
</footer>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
|
<script type="text/javascript" th:src="@{/js/script.js}"></script>
|
||||||
<script>
|
|
||||||
// Select/Deselect all checkboxes
|
|
||||||
document.querySelectorAll('[id^=select-all]').forEach(function (element) {
|
|
||||||
element.addEventListener('change', function () {
|
|
||||||
const checkboxes = element.closest('table').querySelectorAll('input[name="selectedFiles"]');
|
|
||||||
checkboxes.forEach(checkbox => checkbox.checked = this.checked);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Handle bulk download
|
|
||||||
function downloadSelected() {
|
|
||||||
const selectedFiles = Array.from(document.querySelectorAll('input[name="selectedFiles"]:checked'))
|
|
||||||
.map(checkbox => checkbox.value);
|
|
||||||
if (selectedFiles.length === 0) {
|
|
||||||
alert('No files selected.');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const form = document.getElementById('bulk-actions-form');
|
|
||||||
form.action = '/files/download-zip'; // Backend endpoint for bulk download
|
|
||||||
form.method = 'post';
|
|
||||||
form.submit();
|
|
||||||
clearCheckboxes();
|
|
||||||
}
|
|
||||||
|
|
||||||
function clearCheckboxes() {
|
|
||||||
const checkboxes = document.querySelectorAll('input[name="selectedFiles"], #select-all');
|
|
||||||
checkboxes.forEach(checkbox => (checkbox.checked = false));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle bulk delete
|
|
||||||
function deleteSelected() {
|
|
||||||
const selectedFiles = Array.from(document.querySelectorAll('input[name="selectedFiles"]:checked'))
|
|
||||||
.map(checkbox => checkbox.value);
|
|
||||||
if (selectedFiles.length === 0) {
|
|
||||||
alert('No files selected.');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (confirm('Are you sure you want to delete the selected files?')) {
|
|
||||||
const form = document.getElementById('bulk-actions-form');
|
|
||||||
form.action = '/files/bulk-delete'; // Backend endpoint for bulk delete
|
|
||||||
form.submit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user