2023-02-03 21:26:35 +01:00
|
|
|
<head th:fragment="head">
|
2023-02-07 21:14:03 +01:00
|
|
|
|
|
|
|
<!-- Metadata -->
|
|
|
|
<meta charset="UTF-8">
|
|
|
|
<title th:text="'S-PDF ' + ${title}"></title>
|
|
|
|
<link rel="shortcut icon" href="favicon.svg">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
|
|
|
|
<!-- jQuery -->
|
|
|
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
|
|
|
|
|
|
|
|
<!-- Bootstrap -->
|
|
|
|
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
|
|
|
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
|
|
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.3/font/bootstrap-icons.css">
|
|
|
|
|
|
|
|
<!-- FontAwesome -->
|
|
|
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.1/css/all.css">
|
|
|
|
|
|
|
|
<!-- PDF.js -->
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/pdfjs-dist@3.3.122/build/pdf.min.js"></script>
|
|
|
|
<link href="https://cdn.jsdelivr.net/npm/pdfjs-dist@3.3.122/web/pdf_viewer.min.css" rel="stylesheet">
|
|
|
|
|
|
|
|
<!-- Custom -->
|
|
|
|
<link rel="stylesheet" href="general.css">
|
|
|
|
<link rel="stylesheet" th:href="@{dark-mode.css}" id="dark-mode-styles">
|
|
|
|
|
|
|
|
<script>
|
|
|
|
function toggleDarkMode() {
|
|
|
|
var checkbox = document.getElementById("toggle-dark-mode");
|
|
|
|
var darkModeStyles = document.getElementById("dark-mode-styles");
|
|
|
|
if (checkbox.checked) {
|
|
|
|
localStorage.setItem("dark-mode", "on");
|
|
|
|
darkModeStyles.disabled = false;
|
|
|
|
} else {
|
|
|
|
localStorage.setItem("dark-mode", "off");
|
|
|
|
darkModeStyles.disabled = true;
|
|
|
|
}
|
2023-02-03 21:26:35 +01:00
|
|
|
}
|
2023-02-07 21:14:03 +01:00
|
|
|
$(document).ready(function() {
|
|
|
|
var darkModeStyles = document.getElementById("dark-mode-styles");
|
|
|
|
var checkbox = document.getElementById("toggle-dark-mode");
|
|
|
|
if (localStorage.getItem("dark-mode") == "on") {
|
|
|
|
darkModeStyles.disabled = false;
|
|
|
|
checkbox.checked = true;
|
|
|
|
}
|
|
|
|
if (localStorage.getItem("dark-mode") == "off") {
|
|
|
|
darkModeStyles.disabled = true;
|
|
|
|
checkbox.checked = false;
|
|
|
|
}
|
2023-02-03 21:26:35 +01:00
|
|
|
|
2023-02-07 21:14:03 +01:00
|
|
|
});
|
|
|
|
</script>
|
2023-02-03 21:26:35 +01:00
|
|
|
</head>
|
|
|
|
|
|
|
|
<th:block th:fragment="filelist">
|
|
|
|
<div id="fileList"></div>
|
|
|
|
<div id="fileList2"></div>
|
|
|
|
<script>
|
|
|
|
var input = document.getElementById("fileInput");
|
|
|
|
var output = document.getElementById("fileList");
|
|
|
|
|
|
|
|
input.addEventListener("change", function() {
|
|
|
|
var files = input.files;
|
|
|
|
var fileNames = "";
|
|
|
|
|
|
|
|
for (var i = 0; i < files.length; i++) {
|
|
|
|
fileNames += (i + 1) + ". " + files[i].name + "<br>";
|
|
|
|
}
|
|
|
|
|
|
|
|
output.innerHTML = fileNames;
|
|
|
|
});
|
|
|
|
</script>
|
|
|
|
<script>
|
|
|
|
var input2 = document.getElementById("fileInput2");
|
|
|
|
var output2 = document.getElementById("fileList2");
|
|
|
|
if (input2 != null && !input2) {
|
|
|
|
input2.addEventListener("change", function() {
|
|
|
|
var files = input2.files;
|
|
|
|
var fileNames = "";
|
|
|
|
|
|
|
|
for (var i = 0; i < files.length; i++) {
|
|
|
|
fileNames += (i + 1) + ". " + files[i].name + "<br>";
|
|
|
|
}
|
|
|
|
|
|
|
|
output2.innerHTML = fileNames;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
if (dropContainer) {
|
|
|
|
dropContainer.ondragover = dropContainer.ondragenter = function(evt) {
|
|
|
|
evt.preventDefault();
|
|
|
|
};
|
|
|
|
|
|
|
|
dropContainer.ondrop = function(evt) {
|
|
|
|
if (fileInput) {
|
|
|
|
fileInput.files = evt.dataTransfer.files;
|
|
|
|
|
|
|
|
const dT = new DataTransfer();
|
|
|
|
dT.items.add(evt.dataTransfer.files[0]);
|
|
|
|
dT.items.add(evt.dataTransfer.files[3]);
|
|
|
|
fileInput.files = dT.files;
|
|
|
|
|
|
|
|
evt.preventDefault();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
</script>
|
2023-02-05 00:45:33 +01:00
|
|
|
</th:block>
|
|
|
|
|
|
|
|
<th:block th:fragment="fileSelector(name, multiple)">
|
|
|
|
<div class="custom-file-chooser">
|
|
|
|
<div class="custom-file">
|
|
|
|
<input type="file" class="custom-file-input" th:name="${name}" th:id="${name}+'-input'" th:multiple="${multiple}">
|
2023-02-05 20:04:37 +01:00
|
|
|
<label class="custom-file-label" th:for="${name}+'-input'" th:text="#{pdfPrompt}"></label>
|
2023-02-05 00:45:33 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<script th:inline="javascript">
|
|
|
|
$([[${"#"+name+"-input"}]]).on("change", function() {
|
|
|
|
const files = $(this).get(0).files;
|
|
|
|
const fileNames = Array.from(files).map(f => f.name).join(", ");
|
|
|
|
if (fileNames) {
|
|
|
|
$(this).siblings(".custom-file-label").addClass("selected").html(fileNames);
|
|
|
|
} else {
|
2023-02-05 20:04:37 +01:00
|
|
|
$(this).siblings(".custom-file-label").addClass("selected").html([[#{pdfPrompt}]]);
|
2023-02-05 00:45:33 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
</script>
|
2023-02-06 12:26:20 +01:00
|
|
|
|
|
|
|
<style>
|
|
|
|
.custom-file-label {
|
|
|
|
padding-right: 90px;
|
|
|
|
}
|
|
|
|
</style>
|
2023-02-03 21:26:35 +01:00
|
|
|
</th:block>
|