mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-09-12 17:52:13 +02:00
Merge branch 'removeReadOnlyFromForms' of github.com:PedroPF1233/Stirling-PDF into removeReadOnlyFromForms
This commit is contained in:
commit
eac977676a
4
.github/workflows/multiOSReleases.yml
vendored
4
.github/workflows/multiOSReleases.yml
vendored
@ -70,7 +70,7 @@ jobs:
|
|||||||
|
|
||||||
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
||||||
with:
|
with:
|
||||||
gradle-version: 8.12
|
gradle-version: 8.14
|
||||||
|
|
||||||
- name: Generate jar (With Security=${{ matrix.enable_security }})
|
- name: Generate jar (With Security=${{ matrix.enable_security }})
|
||||||
run: ./gradlew clean createExe
|
run: ./gradlew clean createExe
|
||||||
@ -158,7 +158,7 @@ jobs:
|
|||||||
|
|
||||||
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
||||||
with:
|
with:
|
||||||
gradle-version: 8.12
|
gradle-version: 8.14
|
||||||
|
|
||||||
# Install Windows dependencies
|
# Install Windows dependencies
|
||||||
- name: Install WiX Toolset
|
- name: Install WiX Toolset
|
||||||
|
2
.github/workflows/push-docker.yml
vendored
2
.github/workflows/push-docker.yml
vendored
@ -32,7 +32,7 @@ jobs:
|
|||||||
|
|
||||||
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
||||||
with:
|
with:
|
||||||
gradle-version: 8.12
|
gradle-version: 8.14
|
||||||
|
|
||||||
- name: Run Gradle Command
|
- name: Run Gradle Command
|
||||||
run: ./gradlew clean build
|
run: ./gradlew clean build
|
||||||
|
2
.github/workflows/releaseArtifacts.yml
vendored
2
.github/workflows/releaseArtifacts.yml
vendored
@ -37,7 +37,7 @@ jobs:
|
|||||||
|
|
||||||
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
||||||
with:
|
with:
|
||||||
gradle-version: 8.12
|
gradle-version: 8.14
|
||||||
|
|
||||||
- name: Generate jar (With Security=${{ matrix.enable_security }})
|
- name: Generate jar (With Security=${{ matrix.enable_security }})
|
||||||
run: ./gradlew clean createExe
|
run: ./gradlew clean createExe
|
||||||
|
@ -128,14 +128,14 @@ Stirling-PDF currently supports 39 languages!
|
|||||||
| English (English) (en_GB) |  |
|
| English (English) (en_GB) |  |
|
||||||
| English (US) (en_US) |  |
|
| English (US) (en_US) |  |
|
||||||
| French (Français) (fr_FR) |  |
|
| French (Français) (fr_FR) |  |
|
||||||
| German (Deutsch) (de_DE) |  |
|
| German (Deutsch) (de_DE) |  |
|
||||||
| Greek (Ελληνικά) (el_GR) |  |
|
| Greek (Ελληνικά) (el_GR) |  |
|
||||||
| Hindi (हिंदी) (hi_IN) |  |
|
| Hindi (हिंदी) (hi_IN) |  |
|
||||||
| Hungarian (Magyar) (hu_HU) |  |
|
| Hungarian (Magyar) (hu_HU) |  |
|
||||||
| Indonesian (Bahasa Indonesia) (id_ID) |  |
|
| Indonesian (Bahasa Indonesia) (id_ID) |  |
|
||||||
| Irish (Gaeilge) (ga_IE) |  |
|
| Irish (Gaeilge) (ga_IE) |  |
|
||||||
| Italian (Italiano) (it_IT) |  |
|
| Italian (Italiano) (it_IT) |  |
|
||||||
| Japanese (日本語) (ja_JP) |  |
|
| Japanese (日本語) (ja_JP) |  |
|
||||||
| Korean (한국어) (ko_KR) |  |
|
| Korean (한국어) (ko_KR) |  |
|
||||||
| Norwegian (Norsk) (no_NB) |  |
|
| Norwegian (Norsk) (no_NB) |  |
|
||||||
| Persian (فارسی) (fa_IR) |  |
|
| Persian (فارسی) (fa_IR) |  |
|
||||||
|
@ -404,7 +404,7 @@ sonar {
|
|||||||
// rules=['unused-dependency']
|
// rules=['unused-dependency']
|
||||||
// }
|
// }
|
||||||
tasks.wrapper {
|
tasks.wrapper {
|
||||||
gradleVersion = "8.12"
|
gradleVersion = "8.14"
|
||||||
distributionType = Wrapper.DistributionType.ALL
|
distributionType = Wrapper.DistributionType.ALL
|
||||||
}
|
}
|
||||||
//tasks.withType(JavaCompile) {
|
//tasks.withType(JavaCompile) {
|
||||||
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
6
gradlew
vendored
6
gradlew
vendored
@ -114,7 +114,7 @@ case "$( uname )" in #(
|
|||||||
NONSTOP* ) nonstop=true ;;
|
NONSTOP* ) nonstop=true ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
CLASSPATH="\\\"\\\""
|
||||||
|
|
||||||
|
|
||||||
# Determine the Java command to use to start the JVM.
|
# Determine the Java command to use to start the JVM.
|
||||||
@ -205,7 +205,7 @@ fi
|
|||||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
|
|
||||||
# Collect all arguments for the java command:
|
# Collect all arguments for the java command:
|
||||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||||
# and any embedded shellness will be escaped.
|
# and any embedded shellness will be escaped.
|
||||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||||
# treated as '${Hostname}' itself on the command line.
|
# treated as '${Hostname}' itself on the command line.
|
||||||
@ -213,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
|||||||
set -- \
|
set -- \
|
||||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||||
-classpath "$CLASSPATH" \
|
-classpath "$CLASSPATH" \
|
||||||
org.gradle.wrapper.GradleWrapperMain \
|
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
|
||||||
"$@"
|
"$@"
|
||||||
|
|
||||||
# Stop when "xargs" is not available.
|
# Stop when "xargs" is not available.
|
||||||
|
4
gradlew.bat
vendored
4
gradlew.bat
vendored
@ -70,11 +70,11 @@ goto fail
|
|||||||
:execute
|
:execute
|
||||||
@rem Setup the command line
|
@rem Setup the command line
|
||||||
|
|
||||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
set CLASSPATH=
|
||||||
|
|
||||||
|
|
||||||
@rem Execute Gradle
|
@rem Execute Gradle
|
||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
|
||||||
|
|
||||||
:end
|
:end
|
||||||
@rem End local scope for the variables with windows NT shell
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
@ -1 +1,5 @@
|
|||||||
|
plugins {
|
||||||
|
// Apply the foojay-resolver plugin to allow automatic download of JDKs
|
||||||
|
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.10.0'
|
||||||
|
}
|
||||||
rootProject.name = 'Stirling-PDF'
|
rootProject.name = 'Stirling-PDF'
|
||||||
|
@ -121,7 +121,7 @@ public class UserBasedRateLimitingFilter extends OncePerRequestFilter {
|
|||||||
if (probe.isConsumed()) {
|
if (probe.isConsumed()) {
|
||||||
response.setHeader(
|
response.setHeader(
|
||||||
"X-Rate-Limit-Remaining",
|
"X-Rate-Limit-Remaining",
|
||||||
Newlines.stripAll(Long.toString(probe.getRemainingTokens())));
|
stripNewlines(Newlines.stripAll(Long.toString(probe.getRemainingTokens()))));
|
||||||
filterChain.doFilter(request, response);
|
filterChain.doFilter(request, response);
|
||||||
} else {
|
} else {
|
||||||
long waitForRefill = probe.getNanosToWaitForRefill() / 1_000_000_000;
|
long waitForRefill = probe.getNanosToWaitForRefill() / 1_000_000_000;
|
||||||
@ -141,4 +141,8 @@ public class UserBasedRateLimitingFilter extends OncePerRequestFilter {
|
|||||||
.build();
|
.build();
|
||||||
return Bucket.builder().addLimit(limit).build();
|
return Bucket.builder().addLimit(limit).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String stripNewlines(final String s) {
|
||||||
|
return s.replaceAll("[\n\r]", "");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,8 @@ class PdfContainer {
|
|||||||
this.splitPDF = this.splitPDF.bind(this);
|
this.splitPDF = this.splitPDF.bind(this);
|
||||||
this.splitAll = this.splitAll.bind(this);
|
this.splitAll = this.splitAll.bind(this);
|
||||||
this.deleteSelected = this.deleteSelected.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.updateSelectedPagesDisplay = this.updateSelectedPagesDisplay.bind(this);
|
||||||
this.toggleSelectPageVisibility = this.toggleSelectPageVisibility.bind(this);
|
this.toggleSelectPageVisibility = this.toggleSelectPageVisibility.bind(this);
|
||||||
this.updatePagesFromCSV = this.updatePagesFromCSV.bind(this);
|
this.updatePagesFromCSV = this.updatePagesFromCSV.bind(this);
|
||||||
@ -63,7 +64,8 @@ class PdfContainer {
|
|||||||
window.rotateAll = this.rotateAll;
|
window.rotateAll = this.rotateAll;
|
||||||
window.splitAll = this.splitAll;
|
window.splitAll = this.splitAll;
|
||||||
window.deleteSelected = this.deleteSelected;
|
window.deleteSelected = this.deleteSelected;
|
||||||
window.toggleSelectAll = this.toggleSelectAll;
|
window.selectAll = this.selectAll;
|
||||||
|
window.deselectAll = this.deselectAll;
|
||||||
window.updateSelectedPagesDisplay = this.updateSelectedPagesDisplay;
|
window.updateSelectedPagesDisplay = this.updateSelectedPagesDisplay;
|
||||||
window.toggleSelectPageVisibility = this.toggleSelectPageVisibility;
|
window.toggleSelectPageVisibility = this.toggleSelectPageVisibility;
|
||||||
window.updatePagesFromCSV = this.updatePagesFromCSV;
|
window.updatePagesFromCSV = this.updatePagesFromCSV;
|
||||||
@ -72,7 +74,6 @@ class PdfContainer {
|
|||||||
window.addFilesBlankAll = this.addFilesBlankAll;
|
window.addFilesBlankAll = this.addFilesBlankAll;
|
||||||
window.removeAllElements = this.removeAllElements;
|
window.removeAllElements = this.removeAllElements;
|
||||||
window.resetPages = this.resetPages;
|
window.resetPages = this.resetPages;
|
||||||
window.selectAll = false;
|
|
||||||
|
|
||||||
let undoBtn = document.getElementById('undo-btn');
|
let undoBtn = document.getElementById('undo-btn');
|
||||||
let redoBtn = document.getElementById('redo-btn');
|
let redoBtn = document.getElementById('redo-btn');
|
||||||
@ -433,33 +434,43 @@ class PdfContainer {
|
|||||||
this.undoManager.pushUndoClearRedo(removeSelectedCommand);
|
this.undoManager.pushUndoClearRedo(removeSelectedCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleSelectAll() {
|
selectAll() {
|
||||||
const checkboxes = document.querySelectorAll('.pdf-actions_checkbox');
|
const checkboxes = document.querySelectorAll('.pdf-actions_checkbox');
|
||||||
window.selectAll = !window.selectAll;
|
|
||||||
const selectIcon = document.getElementById('select-All-Container');
|
const selectIcon = document.getElementById('select-All-Container');
|
||||||
const deselectIcon = document.getElementById('deselect-All-Container');
|
const deselectIcon = document.getElementById('deselect-All-Container');
|
||||||
|
|
||||||
if (!window.selectAll) {
|
this.showButton(selectIcon, false);
|
||||||
this.showButton(selectIcon, true);
|
this.showButton(deselectIcon, true);
|
||||||
this.showButton(deselectIcon, false);
|
|
||||||
} else {
|
|
||||||
this.showButton(selectIcon, false);
|
|
||||||
this.showButton(deselectIcon, true);
|
|
||||||
}
|
|
||||||
checkboxes.forEach((checkbox) => {
|
checkboxes.forEach((checkbox) => {
|
||||||
checkbox.checked = window.selectAll;
|
checkbox.checked = true;
|
||||||
|
|
||||||
const pageNumber = Array.from(checkbox.parentNode.parentNode.children).indexOf(checkbox.parentNode) + 1;
|
const pageNumber = Array.from(checkbox.parentNode.parentNode.children).indexOf(checkbox.parentNode) + 1;
|
||||||
|
|
||||||
if (checkbox.checked) {
|
if (!window.selectedPages.includes(pageNumber)) {
|
||||||
if (!window.selectedPages.includes(pageNumber)) {
|
window.selectedPages.push(pageNumber);
|
||||||
window.selectedPages.push(pageNumber);
|
}
|
||||||
}
|
});
|
||||||
} else {
|
|
||||||
const index = window.selectedPages.indexOf(pageNumber);
|
this.updateSelectedPagesDisplay();
|
||||||
if (index !== -1) {
|
}
|
||||||
window.selectedPages.splice(index, 1);
|
|
||||||
}
|
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
|
// Update the input field with the formatted page list
|
||||||
selectedPagesInput.value = this.formatSelectedPages(window.selectedPages);
|
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) {
|
parsePageRanges(ranges) {
|
||||||
@ -793,13 +832,9 @@ class PdfContainer {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const checkboxes = document.querySelectorAll('.pdf-actions_checkbox');
|
const checkboxes = document.querySelectorAll('.pdf-actions_checkbox');
|
||||||
window.selectAll = false;
|
|
||||||
const selectIcon = document.getElementById('select-All-Container');
|
const selectIcon = document.getElementById('select-All-Container');
|
||||||
const deselectIcon = document.getElementById('deselect-All-Container');
|
const deselectIcon = document.getElementById('deselect-All-Container');
|
||||||
|
|
||||||
selectIcon.style.display = 'inline';
|
|
||||||
deselectIcon.style.display = 'none';
|
|
||||||
|
|
||||||
checkboxes.forEach((checkbox) => {
|
checkboxes.forEach((checkbox) => {
|
||||||
const pageNumber = Array.from(checkbox.parentNode.parentNode.children).indexOf(checkbox.parentNode) + 1;
|
const pageNumber = Array.from(checkbox.parentNode.parentNode.children).indexOf(checkbox.parentNode) + 1;
|
||||||
|
|
||||||
@ -852,18 +887,30 @@ class PdfContainer {
|
|||||||
deleteButton.classList.toggle('hidden', !window.selectPage);
|
deleteButton.classList.toggle('hidden', !window.selectPage);
|
||||||
const selectedPages = document.getElementById('selected-pages-display');
|
const selectedPages = document.getElementById('selected-pages-display');
|
||||||
selectedPages.classList.toggle('hidden', !window.selectPage);
|
selectedPages.classList.toggle('hidden', !window.selectPage);
|
||||||
|
|
||||||
if(!window.selectPage)
|
if(!window.selectPage)
|
||||||
{
|
{
|
||||||
this.showButton(document.getElementById('deselect-All-Container'), false);
|
this.showButton(document.getElementById('deselect-All-Container'), false);
|
||||||
this.showButton(document.getElementById('select-All-Container'), false);
|
this.showButton(document.getElementById('select-All-Container'), false);
|
||||||
}
|
|
||||||
else if(window.selectAll){
|
// Uncheck all checkboxes and clear selected pages
|
||||||
this.showButton(document.getElementById('deselect-All-Container'), true);
|
const allCheckboxes = document.querySelectorAll('.pdf-actions_checkbox');
|
||||||
this.showButton(document.getElementById('select-All-Container'), false);
|
allCheckboxes.forEach((checkbox) => {
|
||||||
|
checkbox.checked = false;
|
||||||
|
});
|
||||||
|
window.selectedPages = [];
|
||||||
|
this.updateSelectedPagesDisplay();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
this.showButton(document.getElementById('deselect-All-Container'), false);
|
const allCheckboxes = document.querySelectorAll('.pdf-actions_checkbox');
|
||||||
this.showButton(document.getElementById('select-All-Container'), true);
|
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');
|
const exportSelected = document.getElementById('export-selected-button');
|
||||||
|
@ -94,11 +94,11 @@
|
|||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<button id="deselect-All-Container" th:title="#{multiTool.deselectAll}"
|
<button id="deselect-All-Container" th:title="#{multiTool.deselectAll}"
|
||||||
class="btn btn-secondary enable-on-file hidden" onclick="toggleSelectAll()" disabled>
|
class="btn btn-secondary enable-on-file hidden" onclick="deselectAll()" disabled>
|
||||||
<span class="material-symbols-rounded" id="deselect-icon">deselect</span>
|
<span class="material-symbols-rounded" id="deselect-icon">deselect</span>
|
||||||
</button>
|
</button>
|
||||||
<button id="select-All-Container" th:title="#{multiTool.selectAll}"
|
<button id="select-All-Container" th:title="#{multiTool.selectAll}"
|
||||||
class="btn btn-secondary enable-on-file hidden" onclick="toggleSelectAll()" disabled>
|
class="btn btn-secondary enable-on-file hidden" onclick="selectAll()" disabled>
|
||||||
<span class="material-symbols-rounded" id="select-icon">select_all</span>
|
<span class="material-symbols-rounded" id="select-icon">select_all</span>
|
||||||
</button>
|
</button>
|
||||||
<button id="delete-button" th:title="#{multiTool.deleteSelected}"
|
<button id="delete-button" th:title="#{multiTool.deleteSelected}"
|
||||||
|
@ -26,7 +26,7 @@ check_webpage() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Check if response contains HTML
|
# Check if response contains HTML
|
||||||
if ! printf '%s' "$BODY" | grep -q "<!DOCTYPE html>\|<html"; then
|
if ! grep -q "<!DOCTYPE html>\|<html" <<< "$BODY"; then
|
||||||
echo "FAILED - Response is not HTML - $full_url" >> "$result_file"
|
echo "FAILED - Response is not HTML - $full_url" >> "$result_file"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@ -75,13 +75,13 @@ test_all_urls() {
|
|||||||
|
|
||||||
((total_count++))
|
((total_count++))
|
||||||
((url_index++))
|
((url_index++))
|
||||||
|
|
||||||
# Run the check in background
|
# Run the check in background
|
||||||
test_url "$url" "$base_url" "$tmp_dir" "$url_index" &
|
test_url "$url" "$base_url" "$tmp_dir" "$url_index" &
|
||||||
|
|
||||||
# Track the job
|
# Track the job
|
||||||
((active_jobs++))
|
((active_jobs++))
|
||||||
|
|
||||||
# If we've reached max_parallel, wait for a job to finish
|
# If we've reached max_parallel, wait for a job to finish
|
||||||
if [ $active_jobs -ge $max_parallel ]; then
|
if [ $active_jobs -ge $max_parallel ]; then
|
||||||
wait -n # Wait for any child process to exit
|
wait -n # Wait for any child process to exit
|
||||||
@ -97,7 +97,7 @@ test_all_urls() {
|
|||||||
if [ -f "${tmp_dir}/result_${i}.txt" ]; then
|
if [ -f "${tmp_dir}/result_${i}.txt" ]; then
|
||||||
cat "${tmp_dir}/result_${i}.txt"
|
cat "${tmp_dir}/result_${i}.txt"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f "${tmp_dir}/failed_${i}" ]; then
|
if [ -f "${tmp_dir}/failed_${i}" ]; then
|
||||||
failed_count=$((failed_count + $(cat "${tmp_dir}/failed_${i}")))
|
failed_count=$((failed_count + $(cat "${tmp_dir}/failed_${i}")))
|
||||||
fi
|
fi
|
||||||
@ -171,4 +171,4 @@ main() {
|
|||||||
# Run main if script is executed directly
|
# Run main if script is executed directly
|
||||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||||
main "$@"
|
main "$@"
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user