Merge branch 'main' into 2946-feature-request-integrate-file-selector-with-google-drive-and-onedrive

This commit is contained in:
ConnorYoh 2025-04-02 17:58:21 +01:00 committed by GitHub
commit 87b6a73001
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
71 changed files with 334 additions and 168 deletions

View File

@ -37,7 +37,7 @@ jobs:
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -82,7 +82,7 @@ jobs:
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit

View File

@ -21,7 +21,7 @@ jobs:
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit

View File

@ -13,7 +13,7 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit

View File

@ -24,7 +24,7 @@ jobs:
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -62,7 +62,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -106,7 +106,7 @@ jobs:
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -128,7 +128,7 @@ jobs:
sudo chmod +x /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
- name: Set up Python - name: Set up Python
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
with: with:
python-version: "3.12" python-version: "3.12"
cache: 'pip' # caching pip dependencies cache: 'pip' # caching pip dependencies

View File

@ -18,7 +18,7 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -26,7 +26,7 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Set up Python - name: Set up Python
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
with: with:
python-version: "3.12" python-version: "3.12"

View File

@ -17,11 +17,11 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
- name: "Checkout Repository" - name: "Checkout Repository"
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: "Dependency Review" - name: "Dependency Review"
uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0 uses: actions/dependency-review-action@ce3cf9537a52e8119d91fd484ab5b8a807627bf8 # v4.6.0

View File

@ -18,13 +18,13 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
- name: Generate GitHub App Token - name: Generate GitHub App Token
id: generate-token id: generate-token
uses: actions/create-github-app-token@af35edadc00be37caa72ed9f3e6d5f7801bfdf09 # v1.11.7 uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1.12.0
with: with:
app-id: ${{ secrets.GH_APP_ID }} app-id: ${{ secrets.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }} private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
@ -38,7 +38,7 @@ jobs:
java-version: "17" java-version: "17"
distribution: "adopt" distribution: "adopt"
- uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 - uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
- name: check the licenses for compatibility - name: check the licenses for compatibility
run: ./gradlew clean checkLicense run: ./gradlew clean checkLicense

View File

@ -15,7 +15,7 @@ jobs:
issues: write issues: write
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -23,7 +23,7 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Run Labeler - name: Run Labeler
uses: crazy-max/ghaction-github-labeler@31674a3852a9074f2086abcf1c53839d466a47e7 # v5.2.0 uses: crazy-max/ghaction-github-labeler@24d110aa46a59976b8a7f35518cb7f14f434c916 # v5.3.0
with: with:
github-token: ${{ secrets.GITHUB_TOKEN }} github-token: ${{ secrets.GITHUB_TOKEN }}
yaml-file: .github/labels.yml yaml-file: .github/labels.yml

View File

@ -16,7 +16,7 @@ jobs:
versionMac: ${{ steps.versionNumberMac.outputs.versionNumberMac }} versionMac: ${{ steps.versionNumberMac.outputs.versionNumberMac }}
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -51,7 +51,7 @@ jobs:
file_suffix: "" file_suffix: ""
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -63,7 +63,7 @@ jobs:
java-version: "21" java-version: "21"
distribution: "temurin" distribution: "temurin"
- uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 - uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
with: with:
gradle-version: 8.12 gradle-version: 8.12
@ -101,7 +101,7 @@ jobs:
file_suffix: "" file_suffix: ""
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -139,7 +139,7 @@ jobs:
contents: write contents: write
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -151,7 +151,7 @@ jobs:
java-version: "21" java-version: "21"
distribution: "temurin" distribution: "temurin"
- uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 - uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
with: with:
gradle-version: 8.12 gradle-version: 8.12
@ -180,6 +180,7 @@ jobs:
mv "./build/jpackage/Stirling-PDF-${{ needs.read_versions.outputs.version }}.exe" "./binaries/Stirling-PDF-win-installer.exe" mv "./build/jpackage/Stirling-PDF-${{ needs.read_versions.outputs.version }}.exe" "./binaries/Stirling-PDF-win-installer.exe"
elif [ "${{ matrix.os }}" = "macos-latest" ]; then elif [ "${{ matrix.os }}" = "macos-latest" ]; then
mv "./build/jpackage/Stirling-PDF-${{ needs.read_versions.outputs.versionMac }}.dmg" "./binaries/Stirling-PDF-mac-installer.dmg" mv "./build/jpackage/Stirling-PDF-${{ needs.read_versions.outputs.versionMac }}.dmg" "./binaries/Stirling-PDF-mac-installer.dmg"
mv "./build/jpackage/Stirling-PDF-x86_64-${{ needs.read_versions.outputs.versionMac }}.dmg" "./binaries/Stirling-PDF-mac-x86_64-installer.dmg"
else else
mv "./build/jpackage/stirling-pdf_${{ needs.read_versions.outputs.version }}-1_amd64.deb" "./binaries/Stirling-PDF-linux-installer.deb" mv "./build/jpackage/stirling-pdf_${{ needs.read_versions.outputs.version }}-1_amd64.deb" "./binaries/Stirling-PDF-linux-installer.deb"
fi fi
@ -210,7 +211,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -271,7 +272,7 @@ jobs:
contents: write contents: write
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit

View File

@ -16,13 +16,13 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
- name: Generate GitHub App Token - name: Generate GitHub App Token
id: generate-token id: generate-token
uses: actions/create-github-app-token@af35edadc00be37caa72ed9f3e6d5f7801bfdf09 # v1.11.7 uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1.12.0
with: with:
app-id: ${{ secrets.GH_APP_ID }} app-id: ${{ secrets.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }} private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
@ -42,7 +42,7 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Set up Python - name: Set up Python
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
with: with:
python-version: 3.12 python-version: 3.12
cache: 'pip' # caching pip dependencies cache: 'pip' # caching pip dependencies

View File

@ -18,7 +18,7 @@ jobs:
id-token: write id-token: write
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -30,7 +30,7 @@ jobs:
java-version: "17" java-version: "17"
distribution: "temurin" distribution: "temurin"
- uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 - uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
with: with:
gradle-version: 8.12 gradle-version: 8.12

View File

@ -23,7 +23,7 @@ jobs:
version: ${{ steps.versionNumber.outputs.versionNumber }} version: ${{ steps.versionNumber.outputs.versionNumber }}
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -35,7 +35,7 @@ jobs:
java-version: "17" java-version: "17"
distribution: "temurin" distribution: "temurin"
- uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 - uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
with: with:
gradle-version: 8.12 gradle-version: 8.12
@ -83,7 +83,7 @@ jobs:
file_suffix: "" file_suffix: ""
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -161,7 +161,7 @@ jobs:
file_suffix: "" file_suffix: ""
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit

View File

@ -34,7 +34,7 @@ jobs:
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit

View File

@ -18,7 +18,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -27,7 +27,7 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Setup Gradle - name: Setup Gradle
uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
- name: Build and analyze with Gradle - name: Build and analyze with Gradle
env: env:

View File

@ -16,7 +16,7 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit

View File

@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -26,7 +26,7 @@ jobs:
java-version: "17" java-version: "17"
distribution: "temurin" distribution: "temurin"
- uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 - uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
- name: Generate Swagger documentation - name: Generate Swagger documentation
run: ./gradlew generateOpenApiDocs run: ./gradlew generateOpenApiDocs

View File

@ -24,13 +24,13 @@ jobs:
committer: ${{ steps.committer.outputs.committer }} committer: ${{ steps.committer.outputs.committer }}
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
- name: Generate GitHub App Token - name: Generate GitHub App Token
id: generate-token id: generate-token
uses: actions/create-github-app-token@af35edadc00be37caa72ed9f3e6d5f7801bfdf09 # v1.11.7 uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1.12.0
with: with:
app-id: ${{ secrets.GH_APP_ID }} app-id: ${{ secrets.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }} private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
@ -57,13 +57,13 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
- name: Generate GitHub App Token - name: Generate GitHub App Token
id: generate-token id: generate-token
uses: actions/create-github-app-token@af35edadc00be37caa72ed9f3e6d5f7801bfdf09 # v1.11.7 uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1.12.0
with: with:
app-id: ${{ vars.GH_APP_ID }} app-id: ${{ vars.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }} private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
@ -71,7 +71,7 @@ jobs:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Set up Python - name: Set up Python
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
with: with:
python-version: "3.12" python-version: "3.12"
cache: 'pip' # caching pip dependencies cache: 'pip' # caching pip dependencies

View File

@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -105,7 +105,7 @@ jobs:
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit
@ -134,7 +134,7 @@ jobs:
steps: steps:
- name: Harden Runner - name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with: with:
egress-policy: audit egress-policy: audit

View File

@ -128,22 +128,22 @@ Stirling-PDF currently supports 39 languages!
| English (English) (en_GB) | ![100%](https://geps.dev/progress/100) | | English (English) (en_GB) | ![100%](https://geps.dev/progress/100) |
| English (US) (en_US) | ![100%](https://geps.dev/progress/100) | | English (US) (en_US) | ![100%](https://geps.dev/progress/100) |
| French (Français) (fr_FR) | ![94%](https://geps.dev/progress/94) | | French (Français) (fr_FR) | ![94%](https://geps.dev/progress/94) |
| German (Deutsch) (de_DE) | ![97%](https://geps.dev/progress/97) | | German (Deutsch) (de_DE) | ![96%](https://geps.dev/progress/96) |
| Greek (Ελληνικά) (el_GR) | ![94%](https://geps.dev/progress/94) | | Greek (Ελληνικά) (el_GR) | ![93%](https://geps.dev/progress/93) |
| Hindi (हिंदी) (hi_IN) | ![94%](https://geps.dev/progress/94) | | Hindi (हिंदी) (hi_IN) | ![94%](https://geps.dev/progress/94) |
| Hungarian (Magyar) (hu_HU) | ![91%](https://geps.dev/progress/91) | | Hungarian (Magyar) (hu_HU) | ![91%](https://geps.dev/progress/91) |
| Indonesian (Bahasa Indonesia) (id_ID) | ![83%](https://geps.dev/progress/83) | | Indonesian (Bahasa Indonesia) (id_ID) | ![83%](https://geps.dev/progress/83) |
| Irish (Gaeilge) (ga_IE) | ![94%](https://geps.dev/progress/94) | | Irish (Gaeilge) (ga_IE) | ![94%](https://geps.dev/progress/94) |
| Italian (Italiano) (it_IT) | ![98%](https://geps.dev/progress/98) | | Italian (Italiano) (it_IT) | ![98%](https://geps.dev/progress/98) |
| Japanese (日本語) (ja_JP) | ![91%](https://geps.dev/progress/91) | | Japanese (日本語) (ja_JP) | ![91%](https://geps.dev/progress/91) |
| Korean (한국어) (ko_KR) | ![95%](https://geps.dev/progress/95) | | Korean (한국어) (ko_KR) | ![94%](https://geps.dev/progress/94) |
| Norwegian (Norsk) (no_NB) | ![89%](https://geps.dev/progress/89) | | Norwegian (Norsk) (no_NB) | ![88%](https://geps.dev/progress/88) |
| Persian (فارسی) (fa_IR) | ![90%](https://geps.dev/progress/90) | | Persian (فارسی) (fa_IR) | ![90%](https://geps.dev/progress/90) |
| Polish (Polski) (pl_PL) | ![82%](https://geps.dev/progress/82) | | Polish (Polski) (pl_PL) | ![98%](https://geps.dev/progress/98) |
| Portuguese (Português) (pt_PT) | ![93%](https://geps.dev/progress/93) | | Portuguese (Português) (pt_PT) | ![93%](https://geps.dev/progress/93) |
| Portuguese Brazilian (Português) (pt_BR) | ![96%](https://geps.dev/progress/96) | | Portuguese Brazilian (Português) (pt_BR) | ![96%](https://geps.dev/progress/96) |
| Romanian (Română) (ro_RO) | ![77%](https://geps.dev/progress/77) | | Romanian (Română) (ro_RO) | ![77%](https://geps.dev/progress/77) |
| Russian (Русский) (ru_RU) | ![94%](https://geps.dev/progress/94) | | Russian (Русский) (ru_RU) | ![96%](https://geps.dev/progress/96) |
| Serbian Latin alphabet (Srpski) (sr_LATN_RS) | ![62%](https://geps.dev/progress/62) | | Serbian Latin alphabet (Srpski) (sr_LATN_RS) | ![62%](https://geps.dev/progress/62) |
| Simplified Chinese (简体中文) (zh_CN) | ![95%](https://geps.dev/progress/95) | | Simplified Chinese (简体中文) (zh_CN) | ![95%](https://geps.dev/progress/95) |
| Slovakian (Slovensky) (sk_SK) | ![71%](https://geps.dev/progress/71) | | Slovakian (Slovensky) (sk_SK) | ![71%](https://geps.dev/progress/71) |
@ -154,7 +154,7 @@ Stirling-PDF currently supports 39 languages!
| Tibetan (བོད་ཡིག་) (zh_BO) | ![91%](https://geps.dev/progress/91) | | Tibetan (བོད་ཡིག་) (zh_BO) | ![91%](https://geps.dev/progress/91) |
| Traditional Chinese (繁體中文) (zh_TW) | ![97%](https://geps.dev/progress/97) | | Traditional Chinese (繁體中文) (zh_TW) | ![97%](https://geps.dev/progress/97) |
| Turkish (Türkçe) (tr_TR) | ![79%](https://geps.dev/progress/79) | | Turkish (Türkçe) (tr_TR) | ![79%](https://geps.dev/progress/79) |
| Ukrainian (Українська) (uk_UA) | ![97%](https://geps.dev/progress/97) | | Ukrainian (Українська) (uk_UA) | ![99%](https://geps.dev/progress/99) |
| Vietnamese (Tiếng Việt) (vi_VN) | ![76%](https://geps.dev/progress/76) | | Vietnamese (Tiếng Việt) (vi_VN) | ![76%](https://geps.dev/progress/76) |

View File

@ -9,19 +9,23 @@ plugins {
id "com.github.jk1.dependency-license-report" version "2.9" id "com.github.jk1.dependency-license-report" version "2.9"
//id "nebula.lint" version "19.0.3" //id "nebula.lint" version "19.0.3"
id("org.panteleyev.jpackageplugin") version "1.6.1" id("org.panteleyev.jpackageplugin") version "1.6.1"
id "org.sonarqube" version "6.0.1.5171" id "org.sonarqube" version "6.1.0.5360"
} }
import com.github.jk1.license.render.* import com.github.jk1.license.render.*
import org.gradle.internal.os.OperatingSystem
import java.nio.file.Files
import java.time.Year
ext { ext {
springBootVersion = "3.4.4" springBootVersion = "3.4.4"
pdfboxVersion = "3.0.4" pdfboxVersion = "3.0.4"
imageioVersion = "3.12.0" imageioVersion = "3.12.0"
lombokVersion = "1.18.36" lombokVersion = "1.18.38"
bouncycastleVersion = "1.80" bouncycastleVersion = "1.80"
springSecuritySamlVersion = "6.4.4" springSecuritySamlVersion = "6.4.4"
openSamlVersion = "4.3.2" openSamlVersion = "4.3.2"
tempJrePath = null
} }
group = "stirling.software" group = "stirling.software"
@ -102,8 +106,8 @@ openApi {
} }
//0.11.5 to 2024.11.5 //0.11.5 to 2024.11.5
def getMacVersion(String version) { static def getMacVersion(String version) {
def currentYear = java.time.Year.now().getValue() def currentYear = Year.now().getValue()
def versionParts = version.split("\\.", 2) def versionParts = version.split("\\.", 2)
return "${currentYear}.${versionParts.length > 1 ? versionParts[1] : versionParts[0]}" return "${currentYear}.${versionParts.length > 1 ? versionParts[1] : versionParts[0]}"
} }
@ -114,6 +118,7 @@ jpackage {
mainJar = "Stirling-PDF-${project.version}.jar" mainJar = "Stirling-PDF-${project.version}.jar"
appName = "Stirling-PDF" appName = "Stirling-PDF"
appVersion = project.version appVersion = project.version
// appVersion = "2005.45.1"
vendor = "Stirling-Software" vendor = "Stirling-Software"
appDescription = "Stirling PDF - Your Local PDF Editor" appDescription = "Stirling PDF - Your Local PDF Editor"
icon = "src/main/resources/static/favicon.ico" icon = "src/main/resources/static/favicon.ico"
@ -160,22 +165,22 @@ jpackage {
icon = "src/main/resources/static/favicon.icns" icon = "src/main/resources/static/favicon.icns"
type = "dmg" type = "dmg"
macPackageIdentifier = "com.stirling.software.pdf" macPackageIdentifier = "com.stirling.software.pdf"
macPackageName = "Stirling-PDF" macPackageName = "Stirling-PDF_aarch64"
macAppCategory = "public.app-category.productivity" macAppCategory = "public.app-category.productivity"
macSign = false // Enable signing macSign = false // Enable signing
macAppStore = false // Not targeting App Store initially macAppStore = false // Not targeting App Store initially
//
//installDir = "Applications" // //installDir = "Applications"
//
// Add license and other documentation to DMG // // Add license and other documentation to DMG
/*macDmgContent = [ // /*macDmgContent = [
"README.md", // "README.md",
"LICENSE", // "LICENSE",
"CHANGELOG.md" // "CHANGELOG.md"
]*/ // ]*/
//
// Enable Mac-specific entitlements // // Enable Mac-specific entitlements
//macEntitlements = "entitlements.plist" // You'll need to create this file // //macEntitlements = "entitlements.plist" // You'll need to create this file
} }
// Linux-specific configuration // Linux-specific configuration
@ -221,6 +226,107 @@ jpackage {
licenseFile = "LICENSE" licenseFile = "LICENSE"
} }
tasks.register('jpackageMacX64') {
group = 'distribution'
description = 'Packages app for MacOS x86_64'
if (OperatingSystem.current().isMacOsX()) {
println "MacOS detected. Downloading temp JRE."
dependsOn("downloadTempJre")
} else {
return
}
doLast {
def jrePath = project.ext.tempJrePath
if (!jrePath) {
throw new GradleException("JRE path not found.")
}
def outputStream = new ByteArrayOutputStream()
def errorStream = new ByteArrayOutputStream()
def result = exec {
commandLine 'jpackage',
'--type', 'dmg',
'--name', 'Stirling-PDF-x86_64',
'--input', 'build/libs',
'--main-jar', "Stirling-PDF-${project.version}.jar",
'--main-class', 'stirling.software.SPDF.SPDFApplication',
'--runtime-image', file(jrePath + "/zulu-17.jre/Contents/Home"),
'--dest', 'build/jpackage',
'--icon', 'src/main/resources/static/favicon.icns',
'--app-version', getMacVersion(project.version.toString()),
'--mac-package-name', 'Stirling-PDF',
'--mac-package-identifier', 'com.stirling.software.pdf',
'--mac-app-category', 'public.app-category.productivity'
standardOutput = outputStream
errorOutput = errorStream
ignoreExitValue = true
}
def stdout = outputStream.toString("UTF-8")
def stderr = errorStream.toString("UTF-8")
if (!stdout.isBlank()) {
println "📝 jpackage stdout:\n$stdout"
}
if (result.exitValue != 0) {
throw new GradleException("❌ jpackage failed with exit code ${result.exitValue}.\n\n$stderr")
}
}
}
jpackage.finalizedBy(jpackageMacX64)
tasks.register('downloadTempJre') {
group = 'distribution'
description = 'Downloads and extracts a temporary JRE'
doLast {
try {
def jreUrl = 'https://cdn.azul.com/zulu/bin/zulu17.56.15-ca-jre17.0.14-macosx_x64.tar.gz'
def tmpDir = Files.createTempDirectory('zulu-jre').toFile()
def jreArchive = new File(tmpDir, 'jre.tar.gz')
def jreDir = new File(tmpDir, 'jre')
println "🔽 Downloading JRE to $jreArchive..."
jreArchive.withOutputStream { out ->
new URI(jreUrl).toURL().withInputStream { from -> out << from }
}
println "📦 Extracting JRE to $jreDir..."
jreDir.mkdirs()
providers.exec {
commandLine 'tar', '-xzf', jreArchive.absolutePath, '-C', jreDir.absolutePath, '--strip-components=1'
}.result.get()
println "✅ JRE ready at: $jreDir"
ext.tempJrePath = jreDir.absolutePath
project.ext.tempJrePath = jreDir.absolutePath
} catch (Exception e) {
println "Failed to download JRE. ${e.getLocalizedMessage()}"
cleanTempJre
}
}
}
tasks.register('cleanTempJre') {
dependsOn('jpackageMacX64')
group = 'distribution'
description = 'Deletes the temporary JRE'
doLast {
def path = project.ext.tempJrePath
if (path && new File("$path").exists()) {
println "🧹 Cleaning up temporary JRE: $path"
new File("$path").parentFile.deleteDir()
}
}
}
launch4j { launch4j {
icon = "${projectDir}/src/main/resources/static/favicon.ico" icon = "${projectDir}/src/main/resources/static/favicon.ico"
@ -459,12 +565,12 @@ jar {
attributes "Implementation-Title": "Stirling-PDF", attributes "Implementation-Title": "Stirling-PDF",
"Implementation-Version": project.version "Implementation-Version": project.version
} }
} }
tasks.named("test") { tasks.named("test") {
useJUnitPlatform() useJUnitPlatform()
} }
task printVersion { task printVersion {
doLast { doLast {
println project.version println project.version

View File

@ -205,6 +205,7 @@ public class UserService implements UserServiceInterface {
user.setPassword(passwordEncoder.encode(password)); user.setPassword(passwordEncoder.encode(password));
user.setEnabled(true); user.setEnabled(true);
user.setAuthenticationType(AuthenticationType.WEB); user.setAuthenticationType(AuthenticationType.WEB);
user.addAuthority(new Authority(Role.USER.getRoleId(), user));
userRepository.save(user); userRepository.save(user);
databaseService.exportDatabase(); databaseService.exportDatabase();
} }
@ -230,6 +231,22 @@ public class UserService implements UserServiceInterface {
saveUser(username, password, role, false); saveUser(username, password, role, false);
} }
public void saveUser(String username, String password, boolean firstLogin, boolean enabled)
throws IllegalArgumentException, SQLException, UnsupportedProviderException {
if (!isUsernameValid(username)) {
throw new IllegalArgumentException(getInvalidUsernameMessage());
}
User user = new User();
user.setUsername(username);
user.setPassword(passwordEncoder.encode(password));
user.addAuthority(new Authority(Role.USER.getRoleId(), user));
user.setEnabled(enabled);
user.setAuthenticationType(AuthenticationType.WEB);
user.setFirstLogin(firstLogin);
userRepository.save(user);
databaseService.exportDatabase();
}
public void deleteUser(String username) { public void deleteUser(String username) {
Optional<User> userOpt = findByUsernameIgnoreCase(username); Optional<User> userOpt = findByUsernameIgnoreCase(username);
if (userOpt.isPresent()) { if (userOpt.isPresent()) {
@ -352,6 +369,7 @@ public class UserService implements UserServiceInterface {
List<String> notAllowedUserList = new ArrayList<>(); List<String> notAllowedUserList = new ArrayList<>();
notAllowedUserList.add("ALL_USERS".toLowerCase()); notAllowedUserList.add("ALL_USERS".toLowerCase());
notAllowedUserList.add("anonymoususer");
boolean notAllowedUser = notAllowedUserList.contains(username.toLowerCase()); boolean notAllowedUser = notAllowedUserList.contains(username.toLowerCase());
return (isValidSimpleUsername || isValidEmail) && !notAllowedUser; return (isValidSimpleUsername || isValidEmail) && !notAllowedUser;
} }

View File

@ -186,7 +186,6 @@ public class OAuth2Configuration {
oauth.getClientSecret(), oauth.getClientSecret(),
oauth.getScopes(), oauth.getScopes(),
UsernameAttribute.valueOf(oauth.getUseAsUsername().toUpperCase()), UsernameAttribute.valueOf(oauth.getUseAsUsername().toUpperCase()),
oauth.getLogoutUrl(),
null, null,
null, null,
null); null);

View File

@ -122,7 +122,8 @@ public class OtherWebController {
return Arrays.stream(files) return Arrays.stream(files)
.filter(file -> file.getName().endsWith(".traineddata")) .filter(file -> file.getName().endsWith(".traineddata"))
.map(file -> file.getName().replace(".traineddata", "")) .map(file -> file.getName().replace(".traineddata", ""))
.filter(lang -> !lang.equalsIgnoreCase("osd")).sorted() .filter(lang -> !lang.equalsIgnoreCase("osd"))
.sorted()
.toList(); .toList();
} }

View File

@ -230,7 +230,6 @@ public class ApplicationProperties {
private Collection<String> scopes = new ArrayList<>(); private Collection<String> scopes = new ArrayList<>();
private String provider; private String provider;
private Client client = new Client(); private Client client = new Client();
private String logoutUrl;
public void setScopes(String scopes) { public void setScopes(String scopes) {
List<String> scopesList = List<String> scopesList =

View File

@ -29,7 +29,6 @@ public class GitHubProvider extends Provider {
clientSecret, clientSecret,
scopes, scopes,
useAsUsername != null ? useAsUsername : UsernameAttribute.LOGIN, useAsUsername != null ? useAsUsername : UsernameAttribute.LOGIN,
null,
AUTHORIZATION_URI, AUTHORIZATION_URI,
TOKEN_URI, TOKEN_URI,
USER_INFO_URI); USER_INFO_URI);

View File

@ -30,7 +30,6 @@ public class GoogleProvider extends Provider {
clientSecret, clientSecret,
scopes, scopes,
useAsUsername, useAsUsername,
null,
AUTHORIZATION_URI, AUTHORIZATION_URI,
TOKEN_URI, TOKEN_URI,
USER_INFO_URI); USER_INFO_URI);

View File

@ -29,7 +29,6 @@ public class KeycloakProvider extends Provider {
useAsUsername, useAsUsername,
null, null,
null, null,
null,
null); null);
} }

View File

@ -25,7 +25,6 @@ public class Provider {
private String clientSecret; private String clientSecret;
private Collection<String> scopes; private Collection<String> scopes;
private UsernameAttribute useAsUsername; private UsernameAttribute useAsUsername;
private String logoutUrl;
private String authorizationUri; private String authorizationUri;
private String tokenUri; private String tokenUri;
private String userInfoUri; private String userInfoUri;
@ -38,7 +37,6 @@ public class Provider {
String clientSecret, String clientSecret,
Collection<String> scopes, Collection<String> scopes,
UsernameAttribute useAsUsername, UsernameAttribute useAsUsername,
String logoutUrl,
String authorizationUri, String authorizationUri,
String tokenUri, String tokenUri,
String userInfoUri) { String userInfoUri) {
@ -50,7 +48,6 @@ public class Provider {
this.scopes = scopes == null ? new ArrayList<>() : scopes; this.scopes = scopes == null ? new ArrayList<>() : scopes;
this.useAsUsername = this.useAsUsername =
useAsUsername != null ? validateUsernameAttribute(useAsUsername) : EMAIL; useAsUsername != null ? validateUsernameAttribute(useAsUsername) : EMAIL;
this.logoutUrl = logoutUrl;
this.authorizationUri = authorizationUri; this.authorizationUri = authorizationUri;
this.tokenUri = tokenUri; this.tokenUri = tokenUri;
this.userInfoUri = userInfoUri; this.userInfoUri = userInfoUri;

View File

@ -83,6 +83,7 @@ loading=جارٍ التحميل...
addToDoc=إضافة إلى المستند addToDoc=إضافة إلى المستند
reset=إعداة ضبط reset=إعداة ضبط
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=سياسة الخصوصية legal.privacy=سياسة الخصوصية
legal.terms=شروط الاستخدام legal.terms=شروط الاستخدام

View File

@ -83,6 +83,7 @@ loading=Yüklənir...
addToDoc=Sənədə Əlavə Et addToDoc=Sənədə Əlavə Et
reset=Sıfırla reset=Sıfırla
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Məxfilik Siyasəti legal.privacy=Məxfilik Siyasəti
legal.terms=Qaydalar və Şərtlər legal.terms=Qaydalar və Şərtlər

View File

@ -83,6 +83,7 @@ loading=Зареждане на...
addToDoc=Добавяне към документ addToDoc=Добавяне към документ
reset=Нулиране reset=Нулиране
apply=Приложи apply=Приложи
noFileSelected=No file selected. Please upload one.
legal.privacy=Политика за поверителност legal.privacy=Политика за поверителност
legal.terms=Правила и условия legal.terms=Правила и условия

View File

@ -83,6 +83,7 @@ loading=Carregant...
addToDoc=Afegeix al document addToDoc=Afegeix al document
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Política de Privacitat legal.privacy=Política de Privacitat
legal.terms=Termes i condicions legal.terms=Termes i condicions

View File

@ -83,6 +83,7 @@ loading=Načítání...
addToDoc=Přidat do dokumentu addToDoc=Přidat do dokumentu
reset=Obnovit reset=Obnovit
apply=Použít apply=Použít
noFileSelected=No file selected. Please upload one.
legal.privacy=Zásady ochrany osobních údajů legal.privacy=Zásady ochrany osobních údajů
legal.terms=Podmínky použití legal.terms=Podmínky použití

View File

@ -83,6 +83,7 @@ loading=Laster...
addToDoc=Tilføj til Dokument addToDoc=Tilføj til Dokument
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Privacy Policy legal.privacy=Privacy Policy
legal.terms=Vilkår og betingelser legal.terms=Vilkår og betingelser

View File

@ -83,6 +83,7 @@ loading=Laden...
addToDoc=In Dokument hinzufügen addToDoc=In Dokument hinzufügen
reset=Zurücksetzen reset=Zurücksetzen
apply=Anwenden apply=Anwenden
noFileSelected=No file selected. Please upload one.
legal.privacy=Datenschutz legal.privacy=Datenschutz
legal.terms=AGB legal.terms=AGB

View File

@ -83,6 +83,7 @@ loading=Φόρτωση...
addToDoc=Προσθήκη στο έγγραφο addToDoc=Προσθήκη στο έγγραφο
reset=Επαναφορά reset=Επαναφορά
apply=Εφαρμογή apply=Εφαρμογή
noFileSelected=No file selected. Please upload one.
legal.privacy=Πολιτική απορρήτου legal.privacy=Πολιτική απορρήτου
legal.terms=Όροι και προϋποθέσεις legal.terms=Όροι και προϋποθέσεις

View File

@ -83,6 +83,7 @@ loading=Loading...
addToDoc=Add to Document addToDoc=Add to Document
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Privacy Policy legal.privacy=Privacy Policy
legal.terms=Terms and Conditions legal.terms=Terms and Conditions

View File

@ -83,6 +83,7 @@ loading=Loading...
addToDoc=Add to Document addToDoc=Add to Document
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Privacy Policy legal.privacy=Privacy Policy
legal.terms=Terms and Conditions legal.terms=Terms and Conditions

View File

@ -83,6 +83,7 @@ loading=Cargando...
addToDoc=Agregar al Documento addToDoc=Agregar al Documento
reset=Restablecer reset=Restablecer
apply=Aplicar apply=Aplicar
noFileSelected=No file selected. Please upload one.
legal.privacy=Política de Privacidad legal.privacy=Política de Privacidad
legal.terms=Términos y Condiciones legal.terms=Términos y Condiciones

View File

@ -83,6 +83,7 @@ loading=Loading...
addToDoc=Add to Document addToDoc=Add to Document
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Privacy Policy legal.privacy=Privacy Policy
legal.terms=Terms and Conditions legal.terms=Terms and Conditions

View File

@ -83,6 +83,7 @@ loading=در حال بارگذاری...
addToDoc=اضافه کردن به سند addToDoc=اضافه کردن به سند
reset=تنظیم مجدد reset=تنظیم مجدد
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=سیاست حفظ حریم خصوصی legal.privacy=سیاست حفظ حریم خصوصی
legal.terms=شرایط و ضوابط legal.terms=شرایط و ضوابط

View File

@ -83,6 +83,7 @@ loading=Chargement...
addToDoc=Ajouter au Document addToDoc=Ajouter au Document
reset=Réinitialiser reset=Réinitialiser
apply=Appliquer apply=Appliquer
noFileSelected=No file selected. Please upload one.
legal.privacy=Politique de Confidentialité legal.privacy=Politique de Confidentialité
legal.terms=Conditions Générales legal.terms=Conditions Générales

View File

@ -83,6 +83,7 @@ loading=Á lódáil...
addToDoc=Cuir le Doiciméad addToDoc=Cuir le Doiciméad
reset=Athshocraigh reset=Athshocraigh
apply=Cuir i bhFeidhm apply=Cuir i bhFeidhm
noFileSelected=No file selected. Please upload one.
legal.privacy=Polasaí Príobháideachta legal.privacy=Polasaí Príobháideachta
legal.terms=Téarmaí agus Coinníollacha legal.terms=Téarmaí agus Coinníollacha

View File

@ -83,6 +83,7 @@ loading=लोड हो रहा है...
addToDoc=दस्तावेज़ में जोड़ें addToDoc=दस्तावेज़ में जोड़ें
reset=रीसेट reset=रीसेट
apply=लागू करें apply=लागू करें
noFileSelected=No file selected. Please upload one.
legal.privacy=गोपनीयता नीति legal.privacy=गोपनीयता नीति
legal.terms=नियम और शर्तें legal.terms=नियम और शर्तें

View File

@ -83,6 +83,7 @@ loading=Učitavanje...
addToDoc=Dodaj u dokument addToDoc=Dodaj u dokument
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Politika privatnosti legal.privacy=Politika privatnosti
legal.terms=Uspe sodržine legal.terms=Uspe sodržine

View File

@ -83,6 +83,7 @@ loading=Betöltés...
addToDoc=Hozzáadás a dokumentumhoz addToDoc=Hozzáadás a dokumentumhoz
reset=Visszaállítás reset=Visszaállítás
apply=Alkalmaz apply=Alkalmaz
noFileSelected=No file selected. Please upload one.
legal.privacy=Adatvédelmi irányelvek legal.privacy=Adatvédelmi irányelvek
legal.terms=Felhasználási feltételek legal.terms=Felhasználási feltételek

View File

@ -83,6 +83,7 @@ loading=Mengambil data...
addToDoc=Tambahkan ke Dokumen addToDoc=Tambahkan ke Dokumen
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Kebijakan Privasi legal.privacy=Kebijakan Privasi
legal.terms=Syarat dan Ketentuan legal.terms=Syarat dan Ketentuan

View File

@ -83,6 +83,7 @@ loading=Caricamento...
addToDoc=Aggiungi al documento addToDoc=Aggiungi al documento
reset=Resetta reset=Resetta
apply=Applica apply=Applica
noFileSelected=Nessun file selezionato. Caricane uno.
legal.privacy=Informativa sulla privacy legal.privacy=Informativa sulla privacy
legal.terms=Termini e Condizioni legal.terms=Termini e Condizioni
@ -733,10 +734,10 @@ sanitizePDF.title=Pulire PDF
sanitizePDF.header=Pulisci un file PDF sanitizePDF.header=Pulisci un file PDF
sanitizePDF.selectText.1=Rimuovi le azioni JavaScript sanitizePDF.selectText.1=Rimuovi le azioni JavaScript
sanitizePDF.selectText.2=Rimuovi i file incorporati sanitizePDF.selectText.2=Rimuovi i file incorporati
sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.3=Rimuovi i metadati XMP
sanitizePDF.selectText.4=Rimuovi collegamenti sanitizePDF.selectText.4=Rimuovi collegamenti
sanitizePDF.selectText.5=Rimuovi i font sanitizePDF.selectText.5=Rimuovi i font
sanitizePDF.selectText.6=Remove Document Info Metadata sanitizePDF.selectText.6=Rimuovi metadati delle informazioni del documento
sanitizePDF.submit=Pulisci PDF sanitizePDF.submit=Pulisci PDF

View File

@ -83,6 +83,7 @@ loading=読込中...
addToDoc=ドキュメントに追加 addToDoc=ドキュメントに追加
reset=リセット reset=リセット
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=プライバシーポリシー legal.privacy=プライバシーポリシー
legal.terms=利用規約 legal.terms=利用規約

View File

@ -83,6 +83,7 @@ loading=로딩 중...
addToDoc=문서에 추가 addToDoc=문서에 추가
reset=초기화 reset=초기화
apply=적용 apply=적용
noFileSelected=No file selected. Please upload one.
legal.privacy=개인정보 처리방침 legal.privacy=개인정보 처리방침
legal.terms=이용약관 legal.terms=이용약관

View File

@ -83,6 +83,7 @@ loading=Laden...
addToDoc=Toevoegen aan document addToDoc=Toevoegen aan document
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Privacybeleid legal.privacy=Privacybeleid
legal.terms=Voorwaarden van gebruik legal.terms=Voorwaarden van gebruik

View File

@ -83,6 +83,7 @@ loading=Laster...
addToDoc=Legg til i dokument addToDoc=Legg til i dokument
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Personvernerklæring legal.privacy=Personvernerklæring
legal.terms=Vilkår og betingelser legal.terms=Vilkår og betingelser

View File

@ -83,6 +83,7 @@ loading=Ładowanie...
addToDoc=Dodaj do dokumentu addToDoc=Dodaj do dokumentu
reset=Resetuj reset=Resetuj
apply=Zastosuj apply=Zastosuj
noFileSelected=No file selected. Please upload one.
legal.privacy=Polityka Prywatności legal.privacy=Polityka Prywatności
legal.terms=Zasady i Postanowienia legal.terms=Zasady i Postanowienia

View File

@ -83,6 +83,7 @@ loading=Carregando...
addToDoc=Adicionar ao Documento addToDoc=Adicionar ao Documento
reset=Reiniciar reset=Reiniciar
apply=Aplicar apply=Aplicar
noFileSelected=No file selected. Please upload one.
legal.privacy=Política de Privacidade legal.privacy=Política de Privacidade
legal.terms=Termos e Condições legal.terms=Termos e Condições

View File

@ -83,6 +83,7 @@ loading=A carregar...
addToDoc=Adicionar ao Documento addToDoc=Adicionar ao Documento
reset=Repor reset=Repor
apply=Aplicar apply=Aplicar
noFileSelected=No file selected. Please upload one.
legal.privacy=Política de Privacidade legal.privacy=Política de Privacidade
legal.terms=Termos e Condições legal.terms=Termos e Condições

View File

@ -83,6 +83,7 @@ loading=Loading...
addToDoc=Add to Document addToDoc=Add to Document
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Privacy Policy legal.privacy=Privacy Policy
legal.terms=Terms and Conditions legal.terms=Terms and Conditions

View File

@ -83,6 +83,7 @@ loading=Загрузка...
addToDoc=Добавить в документ addToDoc=Добавить в документ
reset=Сбросить reset=Сбросить
apply=Применить apply=Применить
noFileSelected=No file selected. Please upload one.
legal.privacy=Политика конфиденциальности legal.privacy=Политика конфиденциальности
legal.terms=Условия использования legal.terms=Условия использования
@ -138,7 +139,7 @@ analytics.settings=Вы можете изменить настройки ана
# NAVBAR # # NAVBAR #
############# #############
navbar.favorite=Избранное navbar.favorite=Избранное
navbar.recent=New and recently updated navbar.recent=Новое и недавно обновленное
navbar.darkmode=Темный режим navbar.darkmode=Темный режим
navbar.language=Языки navbar.language=Языки
navbar.settings=Настройки navbar.settings=Настройки
@ -233,29 +234,29 @@ adminUserSettings.totalUsers=Всего пользователей:
adminUserSettings.lastRequest=Последний запрос adminUserSettings.lastRequest=Последний запрос
adminUserSettings.usage=View Usage adminUserSettings.usage=View Usage
endpointStatistics.title=Endpoint Statistics endpointStatistics.title=Статистика конечных точек
endpointStatistics.header=Endpoint Statistics endpointStatistics.header=Статистика конечных точек
endpointStatistics.top10=Top 10 endpointStatistics.top10=Топ 10
endpointStatistics.top20=Top 20 endpointStatistics.top20=Топ 20
endpointStatistics.all=All endpointStatistics.all=Все
endpointStatistics.refresh=Refresh endpointStatistics.refresh=Обновить
endpointStatistics.includeHomepage=Include Homepage ('/') endpointStatistics.includeHomepage=Включить главную страницу ('/')
endpointStatistics.includeLoginPage=Include Login Page ('/login') endpointStatistics.includeLoginPage=Включить страницу входа ('/login')
endpointStatistics.totalEndpoints=Total Endpoints endpointStatistics.totalEndpoints=Всего конечных точек
endpointStatistics.totalVisits=Total Visits endpointStatistics.totalVisits=Всего посещений
endpointStatistics.showing=Showing endpointStatistics.showing=Показано
endpointStatistics.selectedVisits=Selected Visits endpointStatistics.selectedVisits=Выбранные посещения
endpointStatistics.endpoint=Endpoint endpointStatistics.endpoint=Конечная точка
endpointStatistics.visits=Visits endpointStatistics.visits=Посещения
endpointStatistics.percentage=Percentage endpointStatistics.percentage=Процент
endpointStatistics.loading=Loading... endpointStatistics.loading=Загрузка...
endpointStatistics.failedToLoad=Failed to load endpoint data. Please try refreshing. endpointStatistics.failedToLoad=Не удалось загрузить данные конечной точки. Пожалуйста, попробуйте обновить.
endpointStatistics.home=Home endpointStatistics.home=Главная
endpointStatistics.login=Login endpointStatistics.login=Вход
endpointStatistics.top=Top endpointStatistics.top=Топ
endpointStatistics.numberOfVisits=Number of Visits endpointStatistics.numberOfVisits=Количество посещений
endpointStatistics.visitsTooltip=Visits: {0} ({1}% of total) endpointStatistics.visitsTooltip=Посещения: {0} ({1}% от общего числа)
endpointStatistics.retry=Retry endpointStatistics.retry=Повторить
database.title=Импорт/экспорт базы данных database.title=Импорт/экспорт базы данных
database.header=Импорт/экспорт базы данных database.header=Импорт/экспорт базы данных

View File

@ -83,6 +83,7 @@ loading=Loading...
addToDoc=Add to Document addToDoc=Add to Document
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Privacy Policy legal.privacy=Privacy Policy
legal.terms=Terms and Conditions legal.terms=Terms and Conditions

View File

@ -83,6 +83,7 @@ loading=Nalaganje...
addToDoc=Dodaj v dokument addToDoc=Dodaj v dokument
reset=Ponastavi reset=Ponastavi
apply=Uporabi apply=Uporabi
noFileSelected=No file selected. Please upload one.
legal.privacy=Politika zasebnosti legal.privacy=Politika zasebnosti
legal.terms=Določila in pogoji legal.terms=Določila in pogoji

View File

@ -83,6 +83,7 @@ loading=Loading...
addToDoc=Add to Document addToDoc=Add to Document
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Privacy Policy legal.privacy=Privacy Policy
legal.terms=Terms and Conditions legal.terms=Terms and Conditions

View File

@ -83,6 +83,7 @@ loading=Laddar...
addToDoc=Lägg till i dokument addToDoc=Lägg till i dokument
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Dataprotektionspolicy legal.privacy=Dataprotektionspolicy
legal.terms=Villkor och betingelser legal.terms=Villkor och betingelser

View File

@ -83,6 +83,7 @@ loading=กำลังโหลด...
addToDoc=เพิ่มเข้าสู่เอกสาร addToDoc=เพิ่มเข้าสู่เอกสาร
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=นโยบายความเป็นส่วนตัว legal.privacy=นโยบายความเป็นส่วนตัว
legal.terms=ข้อกำหนดการใช้งาน legal.terms=ข้อกำหนดการใช้งาน

View File

@ -83,6 +83,7 @@ loading=Loading...
addToDoc=Add to Document addToDoc=Add to Document
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Gizlilik Politikası legal.privacy=Gizlilik Politikası
legal.terms=Şartlar ve koşullar legal.terms=Şartlar ve koşullar

View File

@ -83,6 +83,7 @@ loading=Завантаження...
addToDoc=Додати до документу addToDoc=Додати до документу
reset=Скинути reset=Скинути
apply=Застосувати apply=Застосувати
noFileSelected=No file selected. Please upload one.
legal.privacy=Політика конфіденційності legal.privacy=Політика конфіденційності
legal.terms=Правила та умови legal.terms=Правила та умови
@ -233,29 +234,29 @@ adminUserSettings.totalUsers=Всього користувачів:
adminUserSettings.lastRequest=Останній запит adminUserSettings.lastRequest=Останній запит
adminUserSettings.usage=View Usage adminUserSettings.usage=View Usage
endpointStatistics.title=Endpoint Statistics endpointStatistics.title=Статистика кінцевих точок
endpointStatistics.header=Endpoint Statistics endpointStatistics.header=Статистика кінцевих точок
endpointStatistics.top10=Top 10 endpointStatistics.top10=Топ 10
endpointStatistics.top20=Top 20 endpointStatistics.top20=Топ 20
endpointStatistics.all=All endpointStatistics.all=Всі
endpointStatistics.refresh=Refresh endpointStatistics.refresh=Оновити
endpointStatistics.includeHomepage=Include Homepage ('/') endpointStatistics.includeHomepage=Включити головну сторінку ('/')
endpointStatistics.includeLoginPage=Include Login Page ('/login') endpointStatistics.includeLoginPage=Включити сторінку входу ('/login')
endpointStatistics.totalEndpoints=Total Endpoints endpointStatistics.totalEndpoints=Всього кінцевих точок
endpointStatistics.totalVisits=Total Visits endpointStatistics.totalVisits=Всього відвідувань
endpointStatistics.showing=Showing endpointStatistics.showing=Показано
endpointStatistics.selectedVisits=Selected Visits endpointStatistics.selectedVisits=Вибрані відвідування
endpointStatistics.endpoint=Endpoint endpointStatistics.endpoint=Кінцева точка
endpointStatistics.visits=Visits endpointStatistics.visits=Відвідування
endpointStatistics.percentage=Percentage endpointStatistics.percentage=Відсоток
endpointStatistics.loading=Loading... endpointStatistics.loading=Завантаження...
endpointStatistics.failedToLoad=Failed to load endpoint data. Please try refreshing. endpointStatistics.failedToLoad=Не вдалося завантажити дані кінцевих точок. Спробуйте оновити.
endpointStatistics.home=Home endpointStatistics.home=Головна
endpointStatistics.login=Login endpointStatistics.login=Вхід
endpointStatistics.top=Top endpointStatistics.top=Топ
endpointStatistics.numberOfVisits=Number of Visits endpointStatistics.numberOfVisits=Кількість відвідувань
endpointStatistics.visitsTooltip=Visits: {0} ({1}% of total) endpointStatistics.visitsTooltip=Відвідування: {0} ({1}% від загальної кількості)
endpointStatistics.retry=Retry endpointStatistics.retry=Повторити
database.title=Імпорт/експорт бази даних database.title=Імпорт/експорт бази даних
database.header=Імпорт/експорт бази даних database.header=Імпорт/експорт бази даних
@ -282,7 +283,7 @@ session.refreshPage=Оновити сторінку
############# #############
# HOME-PAGE # # HOME-PAGE #
############# #############
home.desc=Ваш локальний універсальний магазин для всіх ваших потреб у PDF. home.desc=Ваше локальне рішення для всіх потреб, пов'язаних із PDF.
home.searchBar=Пошук функцій... home.searchBar=Пошук функцій...

View File

@ -83,6 +83,7 @@ loading=Loading...
addToDoc=Add to Document addToDoc=Add to Document
reset=Reset reset=Reset
apply=Apply apply=Apply
noFileSelected=No file selected. Please upload one.
legal.privacy=Privacy Policy legal.privacy=Privacy Policy
legal.terms=Terms and Conditions legal.terms=Terms and Conditions

View File

@ -83,6 +83,7 @@ loading=འཇུག་བཞིན་པ...
addToDoc=ཡིག་ཆར་སྣོན། addToDoc=ཡིག་ཆར་སྣོན།
reset=བསྐྱར་སྒྲིག reset=བསྐྱར་སྒྲིག
apply=ཉེར་སྤྱོད། apply=ཉེར་སྤྱོད།
noFileSelected=No file selected. Please upload one.
legal.privacy=གསང་དོན་སྲིད་བྱུས། legal.privacy=གསང་དོན་སྲིད་བྱུས།
legal.terms=བེད་སྤྱོད་ཆ་རྐྱེན། legal.terms=བེད་སྤྱོད་ཆ་རྐྱེན།

View File

@ -83,6 +83,7 @@ loading=加载中...
addToDoc=添加至文件 addToDoc=添加至文件
reset=重置 reset=重置
apply=应用 apply=应用
noFileSelected=No file selected. Please upload one.
legal.privacy=隐私政策 legal.privacy=隐私政策
legal.terms=服务条款 legal.terms=服务条款

View File

@ -83,6 +83,7 @@ loading=載入中...
addToDoc=新增至文件 addToDoc=新增至文件
reset=重設 reset=重設
apply=套用 apply=套用
noFileSelected=No file selected. Please upload one.
legal.privacy=隱私權政策 legal.privacy=隱私權政策
legal.terms=使用條款 legal.terms=使用條款

View File

@ -36,6 +36,7 @@ function setupFileInput(chooser) {
const inputContainerId = chooser.getAttribute('data-bs-element-container-id'); const inputContainerId = chooser.getAttribute('data-bs-element-container-id');
const showUploads = chooser.getAttribute('data-bs-show-uploads') === "true"; const showUploads = chooser.getAttribute('data-bs-show-uploads') === "true";
const name = chooser.getAttribute('data-bs-unique-id') const name = chooser.getAttribute('data-bs-unique-id')
const noFileSelectedPrompt = chooser.getAttribute('data-bs-no-file-selected');
let inputContainer = document.getElementById(inputContainerId); let inputContainer = document.getElementById(inputContainerId);
const input = document.getElementById(elementId); const input = document.getElementById(elementId);
@ -59,6 +60,12 @@ function setupFileInput(chooser) {
inputBtn.click(); inputBtn.click();
}); });
// Handle form validation if the input is left empty
input.addEventListener("invalid", (e) => {
e.preventDefault();
alert(noFileSelectedPrompt);
});
const dragenterListener = function () { const dragenterListener = function () {
dragCounter++; dragCounter++;
if (!overlay) { if (!overlay) {

View File

@ -228,7 +228,8 @@
loading: '[[#{loading}]]' loading: '[[#{loading}]]'
};</script> };</script>
<div class="custom-file-chooser mb-3" <div class="custom-file-chooser mb-3"
th:attr="data-bs-unique-id=${name}, data-bs-element-id=${name+'-input'}, data-bs-element-container-id=${name+'-input-container'}, data-bs-show-uploads=${showUploads}, data-bs-files-selected=#{filesSelected}, data-bs-pdf-prompt=#{pdfPrompt}">
th:attr="data-bs-unique-id=${name}, data-bs-element-id=${name+'-input'}, data-bs-element-container-id=${name+'-input-container'}, data-bs-show-uploads=${showUploads}, data-bs-files-selected=#{filesSelected}, data-bs-pdf-prompt=#{pdfPrompt}, data-bs-no-file-selected=#{noFileSelected}">
<div class="mb-3 d-flex flex-column justify-content-center align-items-center flex-wrap input-container" <div class="mb-3 d-flex flex-column justify-content-center align-items-center flex-wrap input-container"
th:name="${name}+'-input'" th:id="${name}+'-input-container'" th:data-text="#{fileChooser.hoveredDragAndDrop}"> th:name="${name}+'-input'" th:id="${name}+'-input-container'" th:data-text="#{fileChooser.hoveredDragAndDrop}">
<label class="file-input-btn d-none"> <label class="file-input-btn d-none">