diff --git a/README.md b/README.md
index 480abd567..2f7838606 100644
--- a/README.md
+++ b/README.md
@@ -128,14 +128,14 @@ Stirling-PDF currently supports 39 languages!
| English (English) (en_GB) |  |
| English (US) (en_US) |  |
| French (Français) (fr_FR) |  |
-| German (Deutsch) (de_DE) |  |
+| German (Deutsch) (de_DE) |  |
| Greek (Ελληνικά) (el_GR) |  |
| Hindi (हिंदी) (hi_IN) |  |
| Hungarian (Magyar) (hu_HU) |  |
| Indonesian (Bahasa Indonesia) (id_ID) |  |
| Irish (Gaeilge) (ga_IE) |  |
| Italian (Italiano) (it_IT) |  |
-| Japanese (日本語) (ja_JP) |  |
+| Japanese (日本語) (ja_JP) |  |
| Korean (한국어) (ko_KR) |  |
| Norwegian (Norsk) (no_NB) |  |
| Persian (فارسی) (fa_IR) |  |
diff --git a/src/main/java/stirling/software/SPDF/config/security/UserBasedRateLimitingFilter.java b/src/main/java/stirling/software/SPDF/config/security/UserBasedRateLimitingFilter.java
index 7bc0cc9bd..5ca7df214 100644
--- a/src/main/java/stirling/software/SPDF/config/security/UserBasedRateLimitingFilter.java
+++ b/src/main/java/stirling/software/SPDF/config/security/UserBasedRateLimitingFilter.java
@@ -141,7 +141,7 @@ public class UserBasedRateLimitingFilter extends OncePerRequestFilter {
.build();
return Bucket.builder().addLimit(limit).build();
}
-
+
private static String stripNewlines(final String s) {
return s.replaceAll("[\n\r]", "");
}
diff --git a/src/main/resources/static/js/multitool/PdfContainer.js b/src/main/resources/static/js/multitool/PdfContainer.js
index 72dd7f4c0..32c34ba46 100644
--- a/src/main/resources/static/js/multitool/PdfContainer.js
+++ b/src/main/resources/static/js/multitool/PdfContainer.js
@@ -34,7 +34,8 @@ class PdfContainer {
this.splitPDF = this.splitPDF.bind(this);
this.splitAll = this.splitAll.bind(this);
this.deleteSelected = this.deleteSelected.bind(this);
- this.toggleSelectAll = this.toggleSelectAll.bind(this);
+ this.selectAll = this.selectAll.bind(this);
+ this.deselectAll = this.deselectAll.bind(this);
this.updateSelectedPagesDisplay = this.updateSelectedPagesDisplay.bind(this);
this.toggleSelectPageVisibility = this.toggleSelectPageVisibility.bind(this);
this.updatePagesFromCSV = this.updatePagesFromCSV.bind(this);
@@ -63,7 +64,8 @@ class PdfContainer {
window.rotateAll = this.rotateAll;
window.splitAll = this.splitAll;
window.deleteSelected = this.deleteSelected;
- window.toggleSelectAll = this.toggleSelectAll;
+ window.selectAll = this.selectAll;
+ window.deselectAll = this.deselectAll;
window.updateSelectedPagesDisplay = this.updateSelectedPagesDisplay;
window.toggleSelectPageVisibility = this.toggleSelectPageVisibility;
window.updatePagesFromCSV = this.updatePagesFromCSV;
@@ -72,7 +74,6 @@ class PdfContainer {
window.addFilesBlankAll = this.addFilesBlankAll;
window.removeAllElements = this.removeAllElements;
window.resetPages = this.resetPages;
- window.selectAll = false;
let undoBtn = document.getElementById('undo-btn');
let redoBtn = document.getElementById('redo-btn');
@@ -433,33 +434,43 @@ class PdfContainer {
this.undoManager.pushUndoClearRedo(removeSelectedCommand);
}
- toggleSelectAll() {
+ selectAll() {
const checkboxes = document.querySelectorAll('.pdf-actions_checkbox');
- window.selectAll = !window.selectAll;
const selectIcon = document.getElementById('select-All-Container');
const deselectIcon = document.getElementById('deselect-All-Container');
- if (!window.selectAll) {
- this.showButton(selectIcon, true);
- this.showButton(deselectIcon, false);
- } else {
- this.showButton(selectIcon, false);
- this.showButton(deselectIcon, true);
- }
+ this.showButton(selectIcon, false);
+ this.showButton(deselectIcon, true);
+
checkboxes.forEach((checkbox) => {
- checkbox.checked = window.selectAll;
+ checkbox.checked = true;
const pageNumber = Array.from(checkbox.parentNode.parentNode.children).indexOf(checkbox.parentNode) + 1;
- if (checkbox.checked) {
- if (!window.selectedPages.includes(pageNumber)) {
- window.selectedPages.push(pageNumber);
- }
- } else {
- const index = window.selectedPages.indexOf(pageNumber);
- if (index !== -1) {
- window.selectedPages.splice(index, 1);
- }
+ if (!window.selectedPages.includes(pageNumber)) {
+ window.selectedPages.push(pageNumber);
+ }
+ });
+
+ this.updateSelectedPagesDisplay();
+ }
+
+ deselectAll() {
+ const checkboxes = document.querySelectorAll('.pdf-actions_checkbox');
+ const selectIcon = document.getElementById('select-All-Container');
+ const deselectIcon = document.getElementById('deselect-All-Container');
+
+ this.showButton(selectIcon, true);
+ this.showButton(deselectIcon, false);
+
+ checkboxes.forEach((checkbox) => {
+ checkbox.checked = false;
+
+ const pageNumber = Array.from(checkbox.parentNode.parentNode.children).indexOf(checkbox.parentNode) + 1;
+
+ const index = window.selectedPages.indexOf(pageNumber);
+ if (index !== -1) {
+ window.selectedPages.splice(index, 1);
}
});
@@ -569,6 +580,34 @@ class PdfContainer {
// Update the input field with the formatted page list
selectedPagesInput.value = this.formatSelectedPages(window.selectedPages);
+
+ const selectIcon = document.getElementById('select-All-Container');
+ const deselectIcon = document.getElementById('deselect-All-Container');
+
+ if (window.selectPage) { // Check if selectPage mode is active
+ console.log("Page Select on. Showing buttons");
+ //Check if no pages are selected
+ if (window.selectedPages.length === 0) {
+ this.showButton(selectIcon, true);
+ this.showButton(deselectIcon, false);
+ } else {
+ this.showButton(deselectIcon, true);
+ }
+
+ //Check if all pages are selected
+ const allCheckboxes = document.querySelectorAll('.pdf-actions_checkbox');
+ const allSelected = Array.from(allCheckboxes).every((checkbox) => checkbox.checked);
+ if (allSelected) {
+ this.showButton(selectIcon, false);
+ this.showButton(deselectIcon, true);
+ } else {
+ this.showButton(selectIcon, true);
+ }
+ } else {
+ console.log("Page Select off. Hidding buttons");
+ this.showButton(selectIcon, false);
+ this.showButton(deselectIcon, false);
+ }
}
parsePageRanges(ranges) {
@@ -793,13 +832,9 @@ class PdfContainer {
});
const checkboxes = document.querySelectorAll('.pdf-actions_checkbox');
- window.selectAll = false;
const selectIcon = document.getElementById('select-All-Container');
const deselectIcon = document.getElementById('deselect-All-Container');
- selectIcon.style.display = 'inline';
- deselectIcon.style.display = 'none';
-
checkboxes.forEach((checkbox) => {
const pageNumber = Array.from(checkbox.parentNode.parentNode.children).indexOf(checkbox.parentNode) + 1;
@@ -852,18 +887,30 @@ class PdfContainer {
deleteButton.classList.toggle('hidden', !window.selectPage);
const selectedPages = document.getElementById('selected-pages-display');
selectedPages.classList.toggle('hidden', !window.selectPage);
+
if(!window.selectPage)
{
this.showButton(document.getElementById('deselect-All-Container'), false);
this.showButton(document.getElementById('select-All-Container'), false);
- }
- else if(window.selectAll){
- this.showButton(document.getElementById('deselect-All-Container'), true);
- this.showButton(document.getElementById('select-All-Container'), false);
+
+ // Uncheck all checkboxes and clear selected pages
+ const allCheckboxes = document.querySelectorAll('.pdf-actions_checkbox');
+ allCheckboxes.forEach((checkbox) => {
+ checkbox.checked = false;
+ });
+ window.selectedPages = [];
+ this.updateSelectedPagesDisplay();
}
else{
- this.showButton(document.getElementById('deselect-All-Container'), false);
- this.showButton(document.getElementById('select-All-Container'), true);
+ const allCheckboxes = document.querySelectorAll('.pdf-actions_checkbox');
+ const allSelected = Array.from(allCheckboxes).every((checkbox) => checkbox.checked);
+ if (!allSelected) {
+ this.showButton(document.getElementById('select-All-Container'), true);
+ }
+
+ if (window.selectedPages.length > 0) {
+ this.showButton(document.getElementById('deselect-All-Container'), true);
+ }
}
const exportSelected = document.getElementById('export-selected-button');
diff --git a/src/main/resources/templates/multi-tool.html b/src/main/resources/templates/multi-tool.html
index 3c6c60fba..173b92838 100644
--- a/src/main/resources/templates/multi-tool.html
+++ b/src/main/resources/templates/multi-tool.html
@@ -94,11 +94,11 @@