From 7ba00676888cb1c518efb668b01a51ce387a1185 Mon Sep 17 00:00:00 2001 From: ge64qev Date: Mon, 6 May 2024 11:18:59 +0200 Subject: [PATCH 01/47] Made it possible to add files via the selector "File by File". --- src/main/resources/static/js/fileInput.js | 24 +++++++++++++++++------ src/main/resources/static/js/merge.js | 2 +- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/resources/static/js/fileInput.js b/src/main/resources/static/js/fileInput.js index 001c8f24..d575dbaa 100644 --- a/src/main/resources/static/js/fileInput.js +++ b/src/main/resources/static/js/fileInput.js @@ -47,12 +47,11 @@ function setupFileInput(chooser) { const dt = e.dataTransfer; const files = dt.files; - for (let i = 0; i < files.length; i++) { - allFiles.push(files[i]); - } - + //Do not Update allFiles array here to prevent duplication, the change event listener will take care of that const dataTransfer = new DataTransfer(); - allFiles.forEach((file) => dataTransfer.items.add(file)); + for (let i = 0; i < files.length; i++) { + dataTransfer.items.add(files[i]); + } const fileInput = document.getElementById(elementId); fileInput.files = dataTransfer.files; @@ -81,8 +80,21 @@ function setupFileInput(chooser) { document.body.addEventListener("drop", dropListener); $("#" + elementId).on("change", function (e) { - allFiles = Array.from(e.target.files); + //Get newly Added Files + const newFiles = Array.from(e.target.files); + + //Add Files to existing Files + allFiles = allFiles.concat(newFiles); + + //Update the file inout`s files property + const dataTransfer = new DataTransfer(); + allFiles.forEach((file) => dataTransfer.items.add(file)); + e.target.files = dataTransfer.files; + handleFileInputChange(this); + + //Call the displayFiles function with the allFiles array + displayFiles(allFiles) }); function handleFileInputChange(inputElement) { diff --git a/src/main/resources/static/js/merge.js b/src/main/resources/static/js/merge.js index 55575727..9c63c7b7 100644 --- a/src/main/resources/static/js/merge.js +++ b/src/main/resources/static/js/merge.js @@ -9,7 +9,7 @@ document.getElementById("fileInput-input").addEventListener("change", function ( }); /** - * @param {FileList} files + * @param {File[]} files */ function displayFiles(files) { const list = document.getElementById("selectedFiles"); From c1fea7c92fd1e968538dc4eceef4acd6a8b3d1f3 Mon Sep 17 00:00:00 2001 From: ge64qev Date: Fri, 10 May 2024 10:53:27 +0200 Subject: [PATCH 02/47] A duplicate Warning is displayed if the same file is added twice to the merging process --- src/main/resources/static/css/fileSelect.css | 4 ++++ src/main/resources/static/js/merge.js | 18 ++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/resources/static/css/fileSelect.css b/src/main/resources/static/css/fileSelect.css index e8f12979..b133e643 100644 --- a/src/main/resources/static/css/fileSelect.css +++ b/src/main/resources/static/css/fileSelect.css @@ -8,3 +8,7 @@ overflow-y: auto; white-space: pre-wrap; } +.duplicate-warning { + color: red; + font-weight: bold; +} \ No newline at end of file diff --git a/src/main/resources/static/js/merge.js b/src/main/resources/static/js/merge.js index 9c63c7b7..7037405d 100644 --- a/src/main/resources/static/js/merge.js +++ b/src/main/resources/static/js/merge.js @@ -13,6 +13,7 @@ document.getElementById("fileInput-input").addEventListener("change", function ( */ function displayFiles(files) { const list = document.getElementById("selectedFiles"); + const processedFiles = []; while (list.firstChild) { list.removeChild(list.firstChild); @@ -21,9 +22,23 @@ function displayFiles(files) { for (let i = 0; i < files.length; i++) { const item = document.createElement("li"); item.className = "list-group-item"; + const fileNameDiv = document.createElement("div"); + fileNameDiv.className = "filename"; + fileNameDiv.textContent = files[i].name; + + // Check for duplicates + if (processedFiles.includes(files[i].name)) { + const warning = document.createElement("span"); + warning.className = "duplicate-warning"; + warning.textContent = "(Duplicate)"; + fileNameDiv.appendChild(warning); + } else { + processedFiles.push(files[i].name); + } + item.innerHTML = `
-
${files[i].name}
+ ${fileNameDiv.outerHTML}
@@ -33,7 +48,6 @@ function displayFiles(files) { `; list.appendChild(item); } - attachMoveButtons(); } From 0e262dc2bd53a63f7592a53350a1a8e8a0364cee Mon Sep 17 00:00:00 2001 From: ge64qev Date: Mon, 13 May 2024 22:27:25 +0200 Subject: [PATCH 03/47] Added a unique id for all files to be a able to delete duplicate files. --- src/main/resources/static/js/fileInput.js | 40 ++++++++++++----- src/main/resources/static/js/merge.js | 55 ++++++++++++++--------- 2 files changed, 63 insertions(+), 32 deletions(-) diff --git a/src/main/resources/static/js/fileInput.js b/src/main/resources/static/js/fileInput.js index d575dbaa..cf1b9896 100644 --- a/src/main/resources/static/js/fileInput.js +++ b/src/main/resources/static/js/fileInput.js @@ -79,22 +79,43 @@ function setupFileInput(chooser) { document.body.addEventListener("dragleave", dragleaveListener); document.body.addEventListener("drop", dropListener); + // When adding files $("#" + elementId).on("change", function (e) { - //Get newly Added Files - const newFiles = Array.from(e.target.files); + // Get newly Added Files + const newFiles = Array.from(e.target.files).map(file => { + return { + file: file, + uniqueId: file.name + Date.now()// Assign a unique identifier to each file + }; + }); - //Add Files to existing Files - allFiles = allFiles.concat(newFiles); + // Add new files to existing files + allFiles = [...allFiles, ...newFiles]; - //Update the file inout`s files property + // Update the file input's files property const dataTransfer = new DataTransfer(); - allFiles.forEach((file) => dataTransfer.items.add(file)); + allFiles.forEach((fileObj) => dataTransfer.items.add(fileObj.file)); e.target.files = dataTransfer.files; handleFileInputChange(this); - //Call the displayFiles function with the allFiles array + // Call the displayFiles function with the allFiles array displayFiles(allFiles) + // Dispatch a custom event with the allFiles array + var filesUpdated = new CustomEvent("filesUpdated", { detail: allFiles }); + document.dispatchEvent(filesUpdated); + }); + +// Listen for event of file being removed and then filter it out of the allFiles array + document.addEventListener("fileRemoved", function (e) { + const fileId = e.detail; + console.log('File to be removed:', fileId); // Log the uniqueId of the file to be removed + console.log('All files before removal:', allFiles); // Log all files before removal + allFiles = allFiles.filter(fileObj => fileObj.uniqueId !== fileId); // Remove the file from the allFiles array using the unique identifier + console.log('All files after removal:', allFiles); // Log all files after removal + // Dispatch a custom event with the allFiles array + var filesUpdated = new CustomEvent("filesUpdated", { detail: allFiles }); + document.dispatchEvent(filesUpdated); }); function handleFileInputChange(inputElement) { @@ -116,9 +137,4 @@ function setupFileInput(chooser) { $(inputElement).siblings(".custom-file-label").addClass("selected").html(pdfPrompt); } } - //Listen for event of file being removed and the filter it out of the allFiles array - document.addEventListener("fileRemoved", function (e) { - const fileName = e.detail; - allFiles = allFiles.filter(file => file.name !== fileName); - }); } diff --git a/src/main/resources/static/js/merge.js b/src/main/resources/static/js/merge.js index 7037405d..a60ba7f6 100644 --- a/src/main/resources/static/js/merge.js +++ b/src/main/resources/static/js/merge.js @@ -2,40 +2,53 @@ let currentSort = { field: null, descending: false, }; +let filesWithUniqueId = []; +let processedFiles = []; document.getElementById("fileInput-input").addEventListener("change", function () { - var files = this.files; + var files = Array.from(this.files).map(file => { + return { + file: file, + uniqueId: file.name + Date.now() + }; + }); + filesWithUniqueId = files; displayFiles(files); }); +document.addEventListener("filesUpdated", function (e) { + filesWithUniqueId = e.detail; + displayFiles(filesWithUniqueId); +}); + -/** - * @param {File[]} files - */ function displayFiles(files) { const list = document.getElementById("selectedFiles"); - const processedFiles = []; while (list.firstChild) { list.removeChild(list.firstChild); } + // Clear the processedFiles array + processedFiles = []; + for (let i = 0; i < files.length; i++) { const item = document.createElement("li"); item.className = "list-group-item"; + item.dataset.id = files[i].uniqueId; // Assign the uniqueId to the list item const fileNameDiv = document.createElement("div"); fileNameDiv.className = "filename"; - fileNameDiv.textContent = files[i].name; + fileNameDiv.textContent = files[i].file.name; // Check for duplicates - if (processedFiles.includes(files[i].name)) { + const duplicateFiles = files.filter(file => file.file.name === files[i].file.name); + if (duplicateFiles.length > 1) { const warning = document.createElement("span"); warning.className = "duplicate-warning"; warning.textContent = "(Duplicate)"; fileNameDiv.appendChild(warning); - } else { - processedFiles.push(files[i].name); } + item.innerHTML = `
${fileNameDiv.outerHTML} @@ -80,16 +93,18 @@ function attachMoveButtons() { var removeButtons = document.querySelectorAll(".remove-file"); for (var i = 0; i < removeButtons.length; i++) { + // When the delete button is clicked removeButtons[i].addEventListener("click", function (event) { event.preventDefault(); var parent = this.closest(".list-group-item"); - //Get name of removed file - var fileName = parent.querySelector(".filename").innerText; + var fileId = parent.dataset.id; // Get the unique identifier of the file to be deleted parent.remove(); + // Remove the file from the filesWithUniqueId array + filesWithUniqueId = filesWithUniqueId.filter(fileObj => fileObj.uniqueId !== fileId); updateFiles(); - //Dispatch a custom event with the name of the removed file - var event = new CustomEvent("fileRemoved", { detail: fileName }); - document.dispatchEvent(event); + // Dispatch a custom event with the unique identifier of the file to be deleted + var fileRemoved = new CustomEvent("fileRemoved", { detail: fileId }); + document.dispatchEvent(fileRemoved); }); } } @@ -129,18 +144,18 @@ function sortFiles(comparator) { document.getElementById("fileInput-input").files = dataTransfer.files; } + function updateFiles() { var dataTransfer = new DataTransfer(); var liElements = document.querySelectorAll("#selectedFiles li"); - const files = document.getElementById("fileInput-input").files; for (var i = 0; i < liElements.length; i++) { - var fileNameFromList = liElements[i].querySelector(".filename").innerText; + var fileIdFromList = liElements[i].dataset.id; // Get the unique identifier from the list item var fileFromFiles; - for (var j = 0; j < files.length; j++) { - var file = files[j]; - if (file.name === fileNameFromList) { - dataTransfer.items.add(file); + for (var j = 0; j < filesWithUniqueId.length; j++) { + var fileObj = filesWithUniqueId[j]; + if (fileObj.uniqueId === fileIdFromList) { + dataTransfer.items.add(fileObj.file); break; } } From 36192ba560d68c8855d3d984df3ba9e965f5bf92 Mon Sep 17 00:00:00 2001 From: ge64qev Date: Tue, 14 May 2024 08:49:27 +0200 Subject: [PATCH 04/47] Change the SortFiles Method, so it works with the filesWithUniqueID Array --- src/main/resources/static/js/merge.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/static/js/merge.js b/src/main/resources/static/js/merge.js index a60ba7f6..1b3599d6 100644 --- a/src/main/resources/static/js/merge.js +++ b/src/main/resources/static/js/merge.js @@ -132,15 +132,15 @@ document.getElementById("sortByDateBtn").addEventListener("click", function () { }); function sortFiles(comparator) { - // Convert FileList to array and sort - const sortedFilesArray = Array.from(document.getElementById("fileInput-input").files).sort(comparator); + // Sort the filesWithUniqueId array + const sortedFilesArray = filesWithUniqueId.sort((a, b) => comparator(a.file, b.file)); // Refresh displayed list displayFiles(sortedFilesArray); // Update the files property const dataTransfer = new DataTransfer(); - sortedFilesArray.forEach((file) => dataTransfer.items.add(file)); + sortedFilesArray.forEach((fileObj) => dataTransfer.items.add(fileObj.file)); document.getElementById("fileInput-input").files = dataTransfer.files; } From ce3e98e240f8c86478f8541ae2b82e5207d4c0f4 Mon Sep 17 00:00:00 2001 From: ge64qev Date: Tue, 14 May 2024 09:13:39 +0200 Subject: [PATCH 05/47] Deleted Console logs and adjusted some comments. --- src/main/resources/static/js/fileInput.js | 3 --- src/main/resources/static/js/merge.js | 5 +++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/resources/static/js/fileInput.js b/src/main/resources/static/js/fileInput.js index cf1b9896..f3ae7504 100644 --- a/src/main/resources/static/js/fileInput.js +++ b/src/main/resources/static/js/fileInput.js @@ -109,10 +109,7 @@ function setupFileInput(chooser) { // Listen for event of file being removed and then filter it out of the allFiles array document.addEventListener("fileRemoved", function (e) { const fileId = e.detail; - console.log('File to be removed:', fileId); // Log the uniqueId of the file to be removed - console.log('All files before removal:', allFiles); // Log all files before removal allFiles = allFiles.filter(fileObj => fileObj.uniqueId !== fileId); // Remove the file from the allFiles array using the unique identifier - console.log('All files after removal:', allFiles); // Log all files after removal // Dispatch a custom event with the allFiles array var filesUpdated = new CustomEvent("filesUpdated", { detail: allFiles }); document.dispatchEvent(filesUpdated); diff --git a/src/main/resources/static/js/merge.js b/src/main/resources/static/js/merge.js index 1b3599d6..a434e045 100644 --- a/src/main/resources/static/js/merge.js +++ b/src/main/resources/static/js/merge.js @@ -2,6 +2,7 @@ let currentSort = { field: null, descending: false, }; +//New Array to keep track of unique id let filesWithUniqueId = []; let processedFiles = []; @@ -15,6 +16,7 @@ document.getElementById("fileInput-input").addEventListener("change", function ( filesWithUniqueId = files; displayFiles(files); }); +//Get Files Updated Event from FileInput document.addEventListener("filesUpdated", function (e) { filesWithUniqueId = e.detail; displayFiles(filesWithUniqueId); @@ -39,7 +41,7 @@ function displayFiles(files) { fileNameDiv.className = "filename"; fileNameDiv.textContent = files[i].file.name; - // Check for duplicates + // Check for duplicates and add a warning if necessary const duplicateFiles = files.filter(file => file.file.name === files[i].file.name); if (duplicateFiles.length > 1) { const warning = document.createElement("span"); @@ -151,7 +153,6 @@ function updateFiles() { for (var i = 0; i < liElements.length; i++) { var fileIdFromList = liElements[i].dataset.id; // Get the unique identifier from the list item - var fileFromFiles; for (var j = 0; j < filesWithUniqueId.length; j++) { var fileObj = filesWithUniqueId[j]; if (fileObj.uniqueId === fileIdFromList) { From 7109dd790506f700fb000e2c79788f881442912e Mon Sep 17 00:00:00 2001 From: Ludy87 Date: Sun, 19 May 2024 10:52:11 +0200 Subject: [PATCH 06/47] Fix: Removes username validation check - Removes username validation check - Ignores API users in user counting --- .../SPDF/config/security/InitialSecuritySetup.java | 6 ++---- .../software/SPDF/config/security/UserService.java | 8 +++++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java b/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java index 9ec02e17..452de53e 100644 --- a/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java +++ b/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java @@ -54,10 +54,8 @@ public class InitialSecuritySetup { && !initialPassword.isEmpty() && !userService.findByUsernameIgnoreCase(initialUsername).isPresent()) { try { - if (userService.isUsernameValid(initialUsername)) { - userService.saveUser(initialUsername, initialPassword, Role.ADMIN.getRoleId()); - logger.info("Admin user created: " + initialUsername); - } + userService.saveUser(initialUsername, initialPassword, Role.ADMIN.getRoleId()); + logger.info("Admin user created: " + initialUsername); } catch (IllegalArgumentException e) { logger.error("Failed to initialize security setup", e); System.exit(1); diff --git a/src/main/java/stirling/software/SPDF/config/security/UserService.java b/src/main/java/stirling/software/SPDF/config/security/UserService.java index 1fcf63f8..0a6898f8 100644 --- a/src/main/java/stirling/software/SPDF/config/security/UserService.java +++ b/src/main/java/stirling/software/SPDF/config/security/UserService.java @@ -197,7 +197,13 @@ public class UserService implements UserServiceInterface { } public boolean hasUsers() { - return userRepository.count() > 0; + long userCount = userRepository.count(); + if (userRepository + .findByUsernameIgnoreCase(Role.INTERNAL_API_USER.getRoleId()) + .isPresent()) { + userCount -= 1; + } + return userCount > 0; } public void updateUserSettings(String username, Map updates) { From 3f252e29a1b11c2260c8429f90330a80b74ffa83 Mon Sep 17 00:00:00 2001 From: Ludy87 Date: Sun, 19 May 2024 11:35:46 +0200 Subject: [PATCH 07/47] adds all available settings to settings.yml --- README.md | 38 +++++++++++++++++++----- src/main/resources/settings.yml.template | 9 +++++- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7fba0db5..71ff91b6 100644 --- a/README.md +++ b/README.md @@ -222,27 +222,51 @@ The Current list of settings is ```yaml security: enableLogin: false # set to 'true' to enable login - csrfDisabled: true + csrfDisabled: true # Set to 'true' to disable CSRF protection (not recommended for production) + loginAttemptCount: 5 # lock user account after 5 tries + loginResetTimeMinutes : 120 # lock account for 2 hours after x attempts + # initialLogin: + # username: "admin" # Initial username for the first login + # password: "stirling" # Initial password for the first login + # oauth2: + # enabled: false # set to 'true' to enable login (Note: enableLogin must also be 'true' for this to work) + # issuer: "" # set to any provider that supports OpenID Connect Discovery (/.well-known/openid-configuration) end-point + # clientId: "" # Client ID from your provider + # clientSecret: "" # Client Secret from your provider + # autoCreateUser: false # set to 'true' to allow auto-creation of non-existing users + # useAsUsername: "email" # Default is 'email'; custom fields can be used as the username + # scopes: "openid, profile, email" # Specify the scopes for which the application will request permissions + # provider: "google" # Set this to your OAuth provider's name, e.g., 'google' or 'keycloak' system: defaultLocale: 'en-US' # Set the default language (e.g. 'de-DE', 'fr-FR', etc) googlevisibility: false # 'true' to allow Google visibility (via robots.txt), 'false' to disallow - customStaticFilePath: '/customFiles/static/' # Directory path for custom static files + rootURIPath: '/pdf-app' # ie set to /pdf-app to Set the application's root URI to localhost:8080/pdf-app + customStaticFilePath: '/customFiles/static/' # Customise static files (e.g., logo, images, CSS) by placing them in this directory. + maxFileSize: 10485760 # Maximum file size for uploads in bytes. + enableAlphaFunctionality: false # Set to enable functionality which might need more testing before it fully goes live (This feature might make no changes) showUpdate: true # see when a new update is available showUpdateOnlyAdmin: false # Only admins can see when a new update is available, depending on showUpdate it must be set to 'true' customHTMLFiles: false # enable to have files placed in /customFiles/templates override the existing template html files -#ui: -# appName: exampleAppName # Application's visible name -# homeDescription: I am a description # Short description or tagline shown on homepage. -# appNameNavbar: navbarName # Name displayed on the navigation bar +ui: + appName: null # Application's visible name + homeDescription: null # Short description or tagline shown on homepage. + appNameNavbar: null # Name displayed on the navigation bar endpoints: toRemove: [] # List endpoints to disable (e.g. ['img-to-pdf', 'remove-pages']) groupsToRemove: [] # List groups to disable (e.g. ['LibreOffice']) metrics: - enabled: true # 'true' to enable Info APIs endpoints (view http://localhost:8080/swagger-ui/index.html#/API to learn more), 'false' to disable + enabled: true # 'true' to enable Info APIs (`/api/*`) endpoints, 'false' to disable + +autoPipeline: + outputFolder: /output # Directory for auto-pipeline outputs. + +# Automatically Generated Settings (Do Not Edit Directly) +AutomaticallyGenerated: + key: example ``` There is an additional config file ``/configs/custom_settings.yml`` were users familiar with java and spring application.properties can input their own settings on-top of Stirling-PDFs existing ones diff --git a/src/main/resources/settings.yml.template b/src/main/resources/settings.yml.template index d7d1fcfa..d504e82e 100644 --- a/src/main/resources/settings.yml.template +++ b/src/main/resources/settings.yml.template @@ -4,9 +4,12 @@ security: enableLogin: false # set to 'true' to enable login - csrfDisabled: true + csrfDisabled: true # Set to 'true' to disable CSRF protection (not recommended for production) loginAttemptCount: 5 # lock user account after 5 tries loginResetTimeMinutes : 120 # lock account for 2 hours after x attempts + # initialLogin: + # username: "admin" # Initial username for the first login + # password: "stirling" # Initial password for the first login # oauth2: # enabled: false # set to 'true' to enable login (Note: enableLogin must also be 'true' for this to work) # issuer: "" # set to any provider that supports OpenID Connect Discovery (/.well-known/openid-configuration) end-point @@ -20,9 +23,13 @@ security: system: defaultLocale: 'en-US' # Set the default language (e.g. 'de-DE', 'fr-FR', etc) googlevisibility: false # 'true' to allow Google visibility (via robots.txt), 'false' to disallow + rootURIPath: '/pdf-app' # ie set to /pdf-app to Set the application's root URI to localhost:8080/pdf-app + customStaticFilePath: '/customFiles/static/' # Customise static files (e.g., logo, images, CSS) by placing them in this directory. + maxFileSize: 10485760 # Maximum file size for uploads in bytes. enableAlphaFunctionality: false # Set to enable functionality which might need more testing before it fully goes live (This feature might make no changes) showUpdate: true # see when a new update is available showUpdateOnlyAdmin: false # Only admins can see when a new update is available, depending on showUpdate it must be set to 'true' + customHTMLFiles: false # enable to have files placed in /customFiles/templates override the existing template html files ui: appName: null # Application's visible name From ffe221b93c08ce3d4a8466ecde968f0d8342e866 Mon Sep 17 00:00:00 2001 From: Ludy87 Date: Sun, 19 May 2024 11:36:50 +0200 Subject: [PATCH 08/47] Update README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 71ff91b6..50928630 100644 --- a/README.md +++ b/README.md @@ -263,10 +263,6 @@ metrics: autoPipeline: outputFolder: /output # Directory for auto-pipeline outputs. - -# Automatically Generated Settings (Do Not Edit Directly) -AutomaticallyGenerated: - key: example ``` There is an additional config file ``/configs/custom_settings.yml`` were users familiar with java and spring application.properties can input their own settings on-top of Stirling-PDFs existing ones From f2eb5dd7d3f5c67451663144322845db4fa1a644 Mon Sep 17 00:00:00 2001 From: Ludy87 Date: Sun, 19 May 2024 12:44:54 +0200 Subject: [PATCH 09/47] bg-card will be added to the class and password/username validation bg-card should not be an id, ids should be unique in their use. --- src/main/resources/static/css/multi-tool.css | 2 +- .../static/css/theme/componentes.css | 2 +- src/main/resources/templates/about.html | 2 +- src/main/resources/templates/account.html | 81 ++++++++++++++++++- src/main/resources/templates/addUsers.html | 2 +- .../resources/templates/auto-split-pdf.html | 2 +- .../resources/templates/change-creds.html | 2 +- .../templates/convert/file-to-pdf.html | 2 +- .../templates/convert/html-to-pdf.html | 2 +- .../templates/convert/img-to-pdf.html | 2 +- .../templates/convert/markdown-to-pdf.html | 2 +- .../templates/convert/pdf-to-csv.html | 2 +- .../templates/convert/pdf-to-html.html | 2 +- .../templates/convert/pdf-to-img.html | 2 +- .../templates/convert/pdf-to-pdfa.html | 2 +- .../convert/pdf-to-presentation.html | 2 +- .../templates/convert/pdf-to-text.html | 2 +- .../templates/convert/pdf-to-word.html | 2 +- .../templates/convert/pdf-to-xml.html | 2 +- .../templates/convert/url-to-pdf.html | 2 +- src/main/resources/templates/crop.html | 2 +- src/main/resources/templates/error.html | 2 +- .../resources/templates/extract-page.html | 2 +- src/main/resources/templates/licenses.html | 2 +- src/main/resources/templates/merge-pdfs.html | 2 +- .../resources/templates/misc/add-image.html | 2 +- .../templates/misc/add-page-numbers.html | 2 +- .../templates/misc/adjust-contrast.html | 2 +- .../resources/templates/misc/auto-crop.html | 2 +- .../resources/templates/misc/auto-rename.html | 2 +- .../templates/misc/change-metadata.html | 2 +- .../resources/templates/misc/compare.html | 2 +- .../templates/misc/compress-pdf.html | 2 +- .../templates/misc/extract-image-scans.html | 2 +- .../templates/misc/extract-images.html | 2 +- .../resources/templates/misc/flatten.html | 2 +- .../resources/templates/misc/ocr-pdf.html | 2 +- .../templates/misc/remove-annotations.html | 2 +- .../templates/misc/remove-blanks.html | 2 +- src/main/resources/templates/misc/repair.html | 2 +- .../templates/misc/show-javascript.html | 2 +- src/main/resources/templates/misc/stamp.html | 2 +- .../templates/multi-page-layout.html | 2 +- src/main/resources/templates/multi-tool.html | 2 +- src/main/resources/templates/overlay-pdf.html | 2 +- .../resources/templates/pdf-organizer.html | 2 +- .../templates/pdf-to-single-page.html | 2 +- src/main/resources/templates/pipeline.html | 2 +- .../resources/templates/remove-pages.html | 2 +- src/main/resources/templates/rotate-pdf.html | 2 +- src/main/resources/templates/scale-pages.html | 2 +- .../templates/security/add-password.html | 2 +- .../templates/security/add-watermark.html | 2 +- .../templates/security/auto-redact.html | 2 +- .../templates/security/cert-sign.html | 2 +- .../security/change-permissions.html | 2 +- .../templates/security/get-info-on-pdf.html | 2 +- .../templates/security/remove-password.html | 2 +- .../templates/security/remove-watermark.html | 2 +- .../templates/security/sanitize-pdf.html | 2 +- src/main/resources/templates/sign.html | 2 +- .../templates/split-by-size-or-count.html | 2 +- .../templates/split-pdf-by-sections.html | 2 +- src/main/resources/templates/split-pdfs.html | 2 +- 64 files changed, 140 insertions(+), 67 deletions(-) diff --git a/src/main/resources/static/css/multi-tool.css b/src/main/resources/static/css/multi-tool.css index f9c359dc..0e609652 100644 --- a/src/main/resources/static/css/multi-tool.css +++ b/src/main/resources/static/css/multi-tool.css @@ -65,7 +65,7 @@ label { margin-left: auto; } -#bg-card { +.bg-card { background-color: var(--md-sys-color-surface-5); border-radius: 3rem; padding: 25px 0 0; diff --git a/src/main/resources/static/css/theme/componentes.css b/src/main/resources/static/css/theme/componentes.css index d588d686..d767d59d 100644 --- a/src/main/resources/static/css/theme/componentes.css +++ b/src/main/resources/static/css/theme/componentes.css @@ -58,7 +58,7 @@ td { border-bottom: none; } -#bg-card { +.bg-card { background-color: var(--md-sys-color-surface-5); border-radius: 3rem; padding: 2.5rem; diff --git a/src/main/resources/templates/about.html b/src/main/resources/templates/about.html index c29d2ffa..c315ce74 100644 --- a/src/main/resources/templates/about.html +++ b/src/main/resources/templates/about.html @@ -11,7 +11,7 @@

-
+
diff --git a/src/main/resources/templates/account.html b/src/main/resources/templates/account.html index 727de224..e07050ff 100644 --- a/src/main/resources/templates/account.html +++ b/src/main/resources/templates/account.html @@ -21,6 +21,7 @@ Default message if not found
+

User!

@@ -28,13 +29,15 @@ Error Message
+

Change Username?

-
+
+
@@ -49,10 +52,10 @@

Change Password?

- +
- +
@@ -95,6 +98,76 @@
+

Sync browser settings with Account

-
+

Settings Comparison:

diff --git a/src/main/resources/templates/addUsers.html b/src/main/resources/templates/addUsers.html index e87726cf..4657ecd9 100644 --- a/src/main/resources/templates/addUsers.html +++ b/src/main/resources/templates/addUsers.html @@ -12,7 +12,7 @@

-
+

Admin User Control Settings

diff --git a/src/main/resources/templates/auto-split-pdf.html b/src/main/resources/templates/auto-split-pdf.html index fa6b1d16..3e93c565 100644 --- a/src/main/resources/templates/auto-split-pdf.html +++ b/src/main/resources/templates/auto-split-pdf.html @@ -15,7 +15,7 @@

-
+
cut diff --git a/src/main/resources/templates/change-creds.html b/src/main/resources/templates/change-creds.html index 30e06688..adef8b55 100644 --- a/src/main/resources/templates/change-creds.html +++ b/src/main/resources/templates/change-creds.html @@ -12,7 +12,7 @@

-
+

User Settings

diff --git a/src/main/resources/templates/convert/file-to-pdf.html b/src/main/resources/templates/convert/file-to-pdf.html index f822a593..1386a441 100644 --- a/src/main/resources/templates/convert/file-to-pdf.html +++ b/src/main/resources/templates/convert/file-to-pdf.html @@ -14,7 +14,7 @@

-
+
draft diff --git a/src/main/resources/templates/convert/html-to-pdf.html b/src/main/resources/templates/convert/html-to-pdf.html index 94b4f842..ff0bf143 100644 --- a/src/main/resources/templates/convert/html-to-pdf.html +++ b/src/main/resources/templates/convert/html-to-pdf.html @@ -12,7 +12,7 @@

-
+
html diff --git a/src/main/resources/templates/convert/img-to-pdf.html b/src/main/resources/templates/convert/img-to-pdf.html index ec49e1c4..09d0461b 100644 --- a/src/main/resources/templates/convert/img-to-pdf.html +++ b/src/main/resources/templates/convert/img-to-pdf.html @@ -12,7 +12,7 @@

-
+
image diff --git a/src/main/resources/templates/convert/markdown-to-pdf.html b/src/main/resources/templates/convert/markdown-to-pdf.html index 748c5c66..af93f23c 100644 --- a/src/main/resources/templates/convert/markdown-to-pdf.html +++ b/src/main/resources/templates/convert/markdown-to-pdf.html @@ -12,7 +12,7 @@

-
+
markdown diff --git a/src/main/resources/templates/convert/pdf-to-csv.html b/src/main/resources/templates/convert/pdf-to-csv.html index be78d1da..23f804b0 100644 --- a/src/main/resources/templates/convert/pdf-to-csv.html +++ b/src/main/resources/templates/convert/pdf-to-csv.html @@ -11,7 +11,7 @@

-
+
csv diff --git a/src/main/resources/templates/convert/pdf-to-html.html b/src/main/resources/templates/convert/pdf-to-html.html index 395f9829..5006ad1b 100644 --- a/src/main/resources/templates/convert/pdf-to-html.html +++ b/src/main/resources/templates/convert/pdf-to-html.html @@ -12,7 +12,7 @@

-
+
html diff --git a/src/main/resources/templates/convert/pdf-to-img.html b/src/main/resources/templates/convert/pdf-to-img.html index d6b5f871..a0402fc1 100644 --- a/src/main/resources/templates/convert/pdf-to-img.html +++ b/src/main/resources/templates/convert/pdf-to-img.html @@ -12,7 +12,7 @@

-
+
image diff --git a/src/main/resources/templates/convert/pdf-to-pdfa.html b/src/main/resources/templates/convert/pdf-to-pdfa.html index 7b51a86c..98f1565c 100644 --- a/src/main/resources/templates/convert/pdf-to-pdfa.html +++ b/src/main/resources/templates/convert/pdf-to-pdfa.html @@ -12,7 +12,7 @@

-
+
picture_as_pdf diff --git a/src/main/resources/templates/convert/pdf-to-presentation.html b/src/main/resources/templates/convert/pdf-to-presentation.html index 8d4a4284..fcef6e65 100644 --- a/src/main/resources/templates/convert/pdf-to-presentation.html +++ b/src/main/resources/templates/convert/pdf-to-presentation.html @@ -12,7 +12,7 @@

-
+
slideshow diff --git a/src/main/resources/templates/convert/pdf-to-text.html b/src/main/resources/templates/convert/pdf-to-text.html index 21bf1fae..e0fc5fbb 100644 --- a/src/main/resources/templates/convert/pdf-to-text.html +++ b/src/main/resources/templates/convert/pdf-to-text.html @@ -12,7 +12,7 @@

-
+
text_fields diff --git a/src/main/resources/templates/convert/pdf-to-word.html b/src/main/resources/templates/convert/pdf-to-word.html index cce75d76..c17c2675 100644 --- a/src/main/resources/templates/convert/pdf-to-word.html +++ b/src/main/resources/templates/convert/pdf-to-word.html @@ -12,7 +12,7 @@

-
+
description diff --git a/src/main/resources/templates/convert/pdf-to-xml.html b/src/main/resources/templates/convert/pdf-to-xml.html index 388ed80b..8ee1237e 100644 --- a/src/main/resources/templates/convert/pdf-to-xml.html +++ b/src/main/resources/templates/convert/pdf-to-xml.html @@ -12,7 +12,7 @@

-
+
code diff --git a/src/main/resources/templates/convert/url-to-pdf.html b/src/main/resources/templates/convert/url-to-pdf.html index 26c13ad1..03f26e9d 100644 --- a/src/main/resources/templates/convert/url-to-pdf.html +++ b/src/main/resources/templates/convert/url-to-pdf.html @@ -12,7 +12,7 @@

-
+
link diff --git a/src/main/resources/templates/crop.html b/src/main/resources/templates/crop.html index 0af2509c..fdb248fd 100644 --- a/src/main/resources/templates/crop.html +++ b/src/main/resources/templates/crop.html @@ -11,7 +11,7 @@

-
+
crop diff --git a/src/main/resources/templates/error.html b/src/main/resources/templates/error.html index 61c69c24..fd357afb 100644 --- a/src/main/resources/templates/error.html +++ b/src/main/resources/templates/error.html @@ -10,7 +10,7 @@
-
+

diff --git a/src/main/resources/templates/extract-page.html b/src/main/resources/templates/extract-page.html index 1f8feec2..05d171ce 100644 --- a/src/main/resources/templates/extract-page.html +++ b/src/main/resources/templates/extract-page.html @@ -11,7 +11,7 @@

-
+
upload diff --git a/src/main/resources/templates/licenses.html b/src/main/resources/templates/licenses.html index c91a4507..a2f81653 100644 --- a/src/main/resources/templates/licenses.html +++ b/src/main/resources/templates/licenses.html @@ -11,7 +11,7 @@

-
+

3rd Party licenses

diff --git a/src/main/resources/templates/merge-pdfs.html b/src/main/resources/templates/merge-pdfs.html index c8579fc0..d810fdc4 100644 --- a/src/main/resources/templates/merge-pdfs.html +++ b/src/main/resources/templates/merge-pdfs.html @@ -12,7 +12,7 @@

-
+
add_to_photos diff --git a/src/main/resources/templates/misc/add-image.html b/src/main/resources/templates/misc/add-image.html index 40146ed2..21ecfdc7 100644 --- a/src/main/resources/templates/misc/add-image.html +++ b/src/main/resources/templates/misc/add-image.html @@ -13,7 +13,7 @@

-
+
add_photo_alternate diff --git a/src/main/resources/templates/misc/add-page-numbers.html b/src/main/resources/templates/misc/add-page-numbers.html index a118a4c2..ea8281c8 100644 --- a/src/main/resources/templates/misc/add-page-numbers.html +++ b/src/main/resources/templates/misc/add-page-numbers.html @@ -55,7 +55,7 @@

-
+
123 diff --git a/src/main/resources/templates/misc/adjust-contrast.html b/src/main/resources/templates/misc/adjust-contrast.html index 1f381e03..b4811495 100644 --- a/src/main/resources/templates/misc/adjust-contrast.html +++ b/src/main/resources/templates/misc/adjust-contrast.html @@ -20,7 +20,7 @@

-
+