Merge branch 'dev' into feature-tiff-display

This commit is contained in:
shamoon 2024-11-14 20:46:50 -08:00
commit 5651aa85f9
123 changed files with 5204 additions and 5502 deletions

View File

@ -98,7 +98,7 @@ body:
label: Browser label: Browser
description: Which browser you are using, if relevant. description: Which browser you are using, if relevant.
placeholder: e.g. Chrome, Safari placeholder: e.g. Chrome, Safari
- type: input - type: textarea
id: config-changes id: config-changes
attributes: attributes:
label: Configuration changes label: Configuration changes

View File

@ -16,7 +16,7 @@ on:
env: env:
# This is the version of pipenv all the steps will use # This is the version of pipenv all the steps will use
# If changing this, change Dockerfile # If changing this, change Dockerfile
DEFAULT_PIP_ENV_VERSION: "2024.0.3" DEFAULT_PIP_ENV_VERSION: "2024.4.0"
# This is the default version of Python to use in most steps which aren't specific # This is the default version of Python to use in most steps which aren't specific
DEFAULT_PYTHON_VERSION: "3.11" DEFAULT_PYTHON_VERSION: "3.11"
@ -30,7 +30,7 @@ jobs:
github.repository github.repository
name: Linting Checks name: Linting Checks
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
steps: steps:
- -
name: Checkout repository name: Checkout repository
@ -46,7 +46,7 @@ jobs:
documentation: documentation:
name: "Build & Deploy Documentation" name: "Build & Deploy Documentation"
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
needs: needs:
- pre-commit - pre-commit
steps: steps:
@ -95,7 +95,7 @@ jobs:
tests-backend: tests-backend:
name: "Backend Tests (Python ${{ matrix.python-version }})" name: "Backend Tests (Python ${{ matrix.python-version }})"
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
needs: needs:
- pre-commit - pre-commit
strategy: strategy:
@ -170,7 +170,7 @@ jobs:
install-frontend-depedendencies: install-frontend-depedendencies:
name: "Install Frontend Dependencies" name: "Install Frontend Dependencies"
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
needs: needs:
- pre-commit - pre-commit
steps: steps:
@ -201,7 +201,7 @@ jobs:
tests-frontend: tests-frontend:
name: "Frontend Tests (Node ${{ matrix.node-version }} - ${{ matrix.shard-index }}/${{ matrix.shard-count }})" name: "Frontend Tests (Node ${{ matrix.node-version }} - ${{ matrix.shard-index }}/${{ matrix.shard-count }})"
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
needs: needs:
- install-frontend-depedendencies - install-frontend-depedendencies
strategy: strategy:
@ -261,7 +261,7 @@ jobs:
tests-coverage-upload: tests-coverage-upload:
name: "Upload to Codecov" name: "Upload to Codecov"
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
needs: needs:
- tests-backend - tests-backend
- tests-frontend - tests-frontend
@ -333,7 +333,7 @@ jobs:
build-docker-image: build-docker-image:
name: Build Docker image for ${{ github.ref_name }} name: Build Docker image for ${{ github.ref_name }}
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || startsWith(github.ref, 'refs/heads/fix-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || contains(github.ref, 'beta.rc') || startsWith(github.ref, 'refs/tags/v')) if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || startsWith(github.ref, 'refs/heads/fix-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || contains(github.ref, 'beta.rc') || startsWith(github.ref, 'refs/tags/v'))
concurrency: concurrency:
group: ${{ github.workflow }}-build-docker-image-${{ github.ref_name }} group: ${{ github.workflow }}-build-docker-image-${{ github.ref_name }}
@ -461,7 +461,7 @@ jobs:
needs: needs:
- build-docker-image - build-docker-image
- documentation - documentation
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
steps: steps:
- -
name: Checkout name: Checkout
@ -569,7 +569,7 @@ jobs:
publish-release: publish-release:
name: "Publish Release" name: "Publish Release"
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
outputs: outputs:
prerelease: ${{ steps.get_version.outputs.prerelease }} prerelease: ${{ steps.get_version.outputs.prerelease }}
changelog: ${{ steps.create-release.outputs.body }} changelog: ${{ steps.create-release.outputs.body }}
@ -619,7 +619,7 @@ jobs:
append-changelog: append-changelog:
name: "Append Changelog" name: "Append Changelog"
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
needs: needs:
- publish-release - publish-release
if: needs.publish-release.outputs.prerelease == 'false' if: needs.publish-release.outputs.prerelease == 'false'

View File

@ -21,7 +21,7 @@ jobs:
cleanup-images: cleanup-images:
name: Cleanup Image Tags for ${{ matrix.primary-name }} name: Cleanup Image Tags for ${{ matrix.primary-name }}
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@ -33,7 +33,7 @@ jobs:
- -
name: Clean temporary images name: Clean temporary images
if: "${{ env.TOKEN != '' }}" if: "${{ env.TOKEN != '' }}"
uses: stumpylog/image-cleaner-action/ephemeral@v0.8.0 uses: stumpylog/image-cleaner-action/ephemeral@v0.9.0
with: with:
token: "${{ env.TOKEN }}" token: "${{ env.TOKEN }}"
owner: "${{ github.repository_owner }}" owner: "${{ github.repository_owner }}"
@ -47,7 +47,7 @@ jobs:
cleanup-untagged-images: cleanup-untagged-images:
name: Cleanup Untagged Images Tags for ${{ matrix.primary-name }} name: Cleanup Untagged Images Tags for ${{ matrix.primary-name }}
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
needs: needs:
- cleanup-images - cleanup-images
strategy: strategy:
@ -61,7 +61,7 @@ jobs:
- -
name: Clean untagged images name: Clean untagged images
if: "${{ env.TOKEN != '' }}" if: "${{ env.TOKEN != '' }}"
uses: stumpylog/image-cleaner-action/untagged@v0.8.0 uses: stumpylog/image-cleaner-action/untagged@v0.9.0
with: with:
token: "${{ env.TOKEN }}" token: "${{ env.TOKEN }}"
owner: "${{ github.repository_owner }}" owner: "${{ github.repository_owner }}"

View File

@ -23,7 +23,7 @@ on:
jobs: jobs:
analyze: analyze:
name: Analyze name: Analyze
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
permissions: permissions:
actions: read actions: read
contents: read contents: read

View File

@ -16,7 +16,7 @@ jobs:
synchronize-with-crowdin: synchronize-with-crowdin:
name: Crowdin Sync name: Crowdin Sync
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
- name: Checkout - name: Checkout

View File

@ -15,7 +15,7 @@ permissions:
jobs: jobs:
pr_opened_or_reopened: pr_opened_or_reopened:
name: pr_opened_or_reopened name: pr_opened_or_reopened
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
permissions: permissions:
# write permission is required for autolabeler # write permission is required for autolabeler
pull-requests: write pull-requests: write

View File

@ -17,7 +17,7 @@ jobs:
stale: stale:
name: 'Stale' name: 'Stale'
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
- uses: actions/stale@v9 - uses: actions/stale@v9
with: with:
@ -33,7 +33,7 @@ jobs:
lock-threads: lock-threads:
name: 'Lock Old Threads' name: 'Lock Old Threads'
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
- uses: dessant/lock-threads@v5 - uses: dessant/lock-threads@v5
with: with:
@ -59,7 +59,7 @@ jobs:
close-answered-discussions: close-answered-discussions:
name: 'Close Answered Discussions' name: 'Close Answered Discussions'
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
- uses: actions/github-script@v7 - uses: actions/github-script@v7
with: with:
@ -116,7 +116,7 @@ jobs:
close-outdated-discussions: close-outdated-discussions:
name: 'Close Outdated Discussions' name: 'Close Outdated Discussions'
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
- uses: actions/github-script@v7 - uses: actions/github-script@v7
with: with:
@ -208,7 +208,7 @@ jobs:
close-unsupported-feature-requests: close-unsupported-feature-requests:
name: 'Close Unsupported Feature Requests' name: 'Close Unsupported Feature Requests'
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
- uses: actions/github-script@v7 - uses: actions/github-script@v7
with: with:

View File

@ -5,7 +5,7 @@
repos: repos:
# General hooks # General hooks
- repo: https://github.com/pre-commit/pre-commit-hooks - repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0 rev: v5.0.0
hooks: hooks:
- id: check-docstring-first - id: check-docstring-first
- id: check-json - id: check-json
@ -48,7 +48,7 @@ repos:
exclude: "(^Pipfile\\.lock$)" exclude: "(^Pipfile\\.lock$)"
# Python hooks # Python hooks
- repo: https://github.com/astral-sh/ruff-pre-commit - repo: https://github.com/astral-sh/ruff-pre-commit
rev: 'v0.6.8' rev: 'v0.7.3'
hooks: hooks:
- id: ruff - id: ruff
- id: ruff-format - id: ruff-format

View File

@ -31,17 +31,61 @@ extend-select = [
"PLE", # https://docs.astral.sh/ruff/rules/#pylint-pl "PLE", # https://docs.astral.sh/ruff/rules/#pylint-pl
"RUF", # https://docs.astral.sh/ruff/rules/#ruff-specific-rules-ruf "RUF", # https://docs.astral.sh/ruff/rules/#ruff-specific-rules-ruf
"FLY", # https://docs.astral.sh/ruff/rules/#flynt-fly "FLY", # https://docs.astral.sh/ruff/rules/#flynt-fly
"PTH", # https://docs.astral.sh/ruff/rules/#flake8-use-pathlib-pth
] ]
# TODO PTH https://docs.astral.sh/ruff/rules/#flake8-use-pathlib-pth
ignore = ["DJ001", "SIM105", "RUF012"] ignore = ["DJ001", "SIM105", "RUF012"]
[lint.per-file-ignores] [lint.per-file-ignores]
".github/scripts/*.py" = ["E501", "INP001", "SIM117"] ".github/scripts/*.py" = ["E501", "INP001", "SIM117"]
"docker/wait-for-redis.py" = ["INP001", "T201"] "docker/wait-for-redis.py" = ["INP001", "T201"]
"src/documents/barcodes.py" = ["PTH"] # TODO Enable & remove
"src/documents/classifier.py" = ["PTH"] # TODO Enable & remove
"src/documents/consumer.py" = ["PTH"] # TODO Enable & remove
"src/documents/file_handling.py" = ["PTH"] # TODO Enable & remove
"src/documents/index.py" = ["PTH"] # TODO Enable & remove
"src/documents/management/commands/decrypt_documents.py" = ["PTH"] # TODO Enable & remove
"src/documents/management/commands/document_consumer.py" = ["PTH"] # TODO Enable & remove
"src/documents/management/commands/document_exporter.py" = ["PTH"] # TODO Enable & remove
"src/documents/management/commands/document_importer.py" = ["PTH"] # TODO Enable & remove
"src/documents/migrations/0012_auto_20160305_0040.py" = ["PTH"] # TODO Enable & remove
"src/documents/migrations/0014_document_checksum.py" = ["PTH"] # TODO Enable & remove
"src/documents/migrations/1003_mime_types.py" = ["PTH"] # TODO Enable & remove
"src/documents/migrations/1012_fix_archive_files.py" = ["PTH"] # TODO Enable & remove
"src/documents/migrations/1037_webp_encrypted_thumbnail_conversion.py" = ["PTH"] # TODO Enable & remove
"src/documents/models.py" = ["SIM115", "PTH"] # TODO PTH Enable & remove
"src/documents/parsers.py" = ["PTH"] # TODO Enable & remove
"src/documents/signals/handlers.py" = ["PTH"] # TODO Enable & remove
"src/documents/tasks.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_api_app_config.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_api_bulk_download.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_api_documents.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_classifier.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_consumer.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_file_handling.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_management.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_management_consumer.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_management_exporter.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_management_thumbnails.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_migration_archive_files.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_migration_document_pages_count.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_migration_mime_type.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_sanity_check.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_tasks.py" = ["PTH"] # TODO Enable & remove
"src/documents/tests/test_views.py" = ["PTH"] # TODO Enable & remove
"src/documents/views.py" = ["PTH"] # TODO Enable & remove
"src/paperless/checks.py" = ["PTH"] # TODO Enable & remove
"src/paperless/settings.py" = ["PTH"] # TODO Enable & remove
"src/paperless/tests/test_checks.py" = ["PTH"] # TODO Enable & remove
"src/paperless/urls.py" = ["PTH"] # TODO Enable & remove
"src/paperless/views.py" = ["PTH"] # TODO Enable & remove
"src/paperless_mail/mail.py" = ["PTH"] # TODO Enable & remove
"src/paperless_mail/preprocessor.py" = ["PTH"] # TODO Enable & remove
"src/paperless_tesseract/parsers.py" = ["PTH"] # TODO Enable & remove
"src/paperless_tesseract/tests/test_parser.py" = ["RUF001", "PTH"] # TODO PTH Enable & remove
"src/paperless_tika/tests/test_live_tika.py" = ["PTH"] # TODO Enable & remove
"src/paperless_tika/tests/test_tika_parser.py" = ["PTH"] # TODO Enable & remove
"*/tests/*.py" = ["E501", "SIM117"] "*/tests/*.py" = ["E501", "SIM117"]
"*/migrations/*.py" = ["E501", "SIM", "T201"] "*/migrations/*.py" = ["E501", "SIM", "T201"]
"src/paperless_tesseract/tests/test_parser.py" = ["RUF001"]
"src/documents/models.py" = ["SIM115"]
[lint.isort] [lint.isort]
force-single-line = true force-single-line = true

View File

@ -39,7 +39,7 @@ COPY Pipfile* ./
RUN set -eux \ RUN set -eux \
&& echo "Installing pipenv" \ && echo "Installing pipenv" \
&& python3 -m pip install --no-cache-dir --upgrade pipenv==2024.0.3 \ && python3 -m pip install --no-cache-dir --upgrade pipenv==2024.4.0 \
&& echo "Generating requirement.txt" \ && echo "Generating requirement.txt" \
&& pipenv requirements > requirements.txt && pipenv requirements > requirements.txt
@ -233,11 +233,11 @@ RUN --mount=type=cache,target=/root/.cache/pip/,id=pip-cache \
&& python3 -m pip install --no-cache-dir --upgrade wheel \ && python3 -m pip install --no-cache-dir --upgrade wheel \
&& echo "Installing Python requirements" \ && echo "Installing Python requirements" \
&& curl --fail --silent --show-error --location \ && curl --fail --silent --show-error --location \
--output psycopg_c-3.2.2-cp312-cp312-linux_x86_64.whl \ --output psycopg_c-3.2.3-cp312-cp312-linux_x86_64.whl \
https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.2/psycopg_c-3.2.2-cp312-cp312-linux_x86_64.whl \ https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.3/psycopg_c-3.2.3-cp312-cp312-linux_x86_64.whl \
&& curl --fail --silent --show-error --location \ && curl --fail --silent --show-error --location \
--output psycopg_c-3.2.2-cp312-cp312-linux_aarch64.whl \ --output psycopg_c-3.2.3-cp312-cp312-linux_aarch64.whl \
https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.2/psycopg_c-3.2.2-cp312-cp312-linux_aarch64.whl \ https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.3/psycopg_c-3.2.3-cp312-cp312-linux_aarch64.whl \
&& python3 -m pip install --default-timeout=1000 --find-links . --requirement requirements.txt \ && python3 -m pip install --default-timeout=1000 --find-links . --requirement requirements.txt \
&& echo "Installing NLTK data" \ && echo "Installing NLTK data" \
&& python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/share/nltk_data" snowball_data \ && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/share/nltk_data" snowball_data \

View File

@ -7,7 +7,7 @@ name = "pypi"
dateparser = "~=1.2" dateparser = "~=1.2"
# WARNING: django does not use semver. # WARNING: django does not use semver.
# Only patch versions are guaranteed to not introduce breaking changes. # Only patch versions are guaranteed to not introduce breaking changes.
django = "~=5.1.1" django = "~=5.1.3"
django-allauth = {extras = ["socialaccount"], version = "*"} django-allauth = {extras = ["socialaccount"], version = "*"}
django-auditlog = "*" django-auditlog = "*"
django-celery-results = "*" django-celery-results = "*"
@ -18,7 +18,7 @@ django-filter = "~=24.3"
django-guardian = "*" django-guardian = "*"
django-multiselectfield = "*" django-multiselectfield = "*"
django-soft-delete = "*" django-soft-delete = "*"
djangorestframework = "==3.15.2" djangorestframework = "~=3.15.2"
djangorestframework-guardian = "*" djangorestframework-guardian = "*"
drf-writable-nested = "*" drf-writable-nested = "*"
bleach = "*" bleach = "*"
@ -37,7 +37,7 @@ jinja2 = "~=3.1"
langdetect = "*" langdetect = "*"
mysqlclient = "*" mysqlclient = "*"
nltk = "*" nltk = "*"
ocrmypdf = "~=16.5" ocrmypdf = "~=16.6"
pathvalidate = "*" pathvalidate = "*"
pdf2image = "*" pdf2image = "*"
psycopg = {version = "*", extras = ["c"]} psycopg = {version = "*", extras = ["c"]}
@ -55,7 +55,7 @@ tika-client = "*"
tqdm = "*" tqdm = "*"
# See https://github.com/paperless-ngx/paperless-ngx/issues/5494 # See https://github.com/paperless-ngx/paperless-ngx/issues/5494
uvicorn = {extras = ["standard"], version = "==0.25.0"} uvicorn = {extras = ["standard"], version = "==0.25.0"}
watchdog = "~=4.0" watchdog = "~=5.0"
whitenoise = "~=6.8" whitenoise = "~=6.8"
whoosh = "~=2.7" whoosh = "~=2.7"
zxing-cpp = {version = "*", platform_machine = "== 'x86_64'"} zxing-cpp = {version = "*", platform_machine = "== 'x86_64'"}

3343
Pipfile.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -19,6 +19,8 @@ Options available to any installation of paperless:
export. Therefore, incremental backups with `rsync` are entirely export. Therefore, incremental backups with `rsync` are entirely
possible. possible.
The exporter does not include API tokens and they will need to be re-generated after importing.
!!! caution !!! caution
You cannot import the export generated with one version of paperless in You cannot import the export generated with one version of paperless in

View File

@ -1,5 +1,277 @@
# Changelog # Changelog
## paperless-ngx 2.13.5
### Bug Fixes
- Fix: handle page count exception for pw-protected files [@shamoon](https://github.com/shamoon) ([#8240](https://github.com/paperless-ngx/paperless-ngx/pull/8240))
- Fix: correctly track task id in list for change detection [@shamoon](https://github.com/shamoon) ([#8230](https://github.com/paperless-ngx/paperless-ngx/pull/8230))
- Fix: Admin pages should show trashed documents [@stumpylog](https://github.com/stumpylog) ([#8068](https://github.com/paperless-ngx/paperless-ngx/pull/8068))
- Fix: tag colors shouldn't change when selected in list [@shamoon](https://github.com/shamoon) ([#8225](https://github.com/paperless-ngx/paperless-ngx/pull/8225))
- Fix: fix re-activation of save button when changing array items [@shamoon](https://github.com/shamoon) ([#8208](https://github.com/paperless-ngx/paperless-ngx/pull/8208))
- Fix: fix thumbnail clipping, select inverted color in safari dark mode not system [@shamoon](https://github.com/shamoon) ([#8193](https://github.com/paperless-ngx/paperless-ngx/pull/8193))
- Fix: select checkbox should remain visible [@shamoon](https://github.com/shamoon) ([#8185](https://github.com/paperless-ngx/paperless-ngx/pull/8185))
- Fix: warn with proper error on ASN exists in trash [@shamoon](https://github.com/shamoon) ([#8176](https://github.com/paperless-ngx/paperless-ngx/pull/8176))
### Maintenance
- Chore: Updates all runner images to use Ubuntu Noble [@stumpylog](https://github.com/stumpylog) ([#8213](https://github.com/paperless-ngx/paperless-ngx/pull/8213))
- Chore(deps): Bump stumpylog/image-cleaner-action from 0.8.0 to 0.9.0 in the actions group [@dependabot](https://github.com/dependabot) ([#8142](https://github.com/paperless-ngx/paperless-ngx/pull/8142))
### Dependencies
- Chore(deps): Bump stumpylog/image-cleaner-action from 0.8.0 to 0.9.0 in the actions group [@dependabot](https://github.com/dependabot) ([#8142](https://github.com/paperless-ngx/paperless-ngx/pull/8142))
### All App Changes
<details>
<summary>7 changes</summary>
- Fix: handle page count exception for pw-protected files [@shamoon](https://github.com/shamoon) ([#8240](https://github.com/paperless-ngx/paperless-ngx/pull/8240))
- Fix: correctly track task id in list for change detection [@shamoon](https://github.com/shamoon) ([#8230](https://github.com/paperless-ngx/paperless-ngx/pull/8230))
- Fix: Admin pages should show trashed documents [@stumpylog](https://github.com/stumpylog) ([#8068](https://github.com/paperless-ngx/paperless-ngx/pull/8068))
- Fix: tag colors shouldn't change when selected in list [@shamoon](https://github.com/shamoon) ([#8225](https://github.com/paperless-ngx/paperless-ngx/pull/8225))
- Fix: fix re-activation of save button when changing array items [@shamoon](https://github.com/shamoon) ([#8208](https://github.com/paperless-ngx/paperless-ngx/pull/8208))
- Fix: fix thumbnail clipping, select inverted color in safari dark mode not system [@shamoon](https://github.com/shamoon) ([#8193](https://github.com/paperless-ngx/paperless-ngx/pull/8193))
- Fix: select checkbox should remain visible [@shamoon](https://github.com/shamoon) ([#8185](https://github.com/paperless-ngx/paperless-ngx/pull/8185))
- Fix: warn with proper error on ASN exists in trash [@shamoon](https://github.com/shamoon) ([#8176](https://github.com/paperless-ngx/paperless-ngx/pull/8176))
</details>
## paperless-ngx 2.13.4
### Bug Fixes
- Fix: fix dark mode icon blend mode in 2.13.3 [@shamoon](https://github.com/shamoon) ([#8166](https://github.com/paperless-ngx/paperless-ngx/pull/8166))
- Fix: fix clipped popup preview in 2.13.3 [@shamoon](https://github.com/shamoon) ([#8165](https://github.com/paperless-ngx/paperless-ngx/pull/8165))
### All App Changes
<details>
<summary>2 changes</summary>
- Fix: fix dark mode icon blend mode in 2.13.3 [@shamoon](https://github.com/shamoon) ([#8166](https://github.com/paperless-ngx/paperless-ngx/pull/8166))
- Fix: fix clipped popup preview in 2.13.3 [@shamoon](https://github.com/shamoon) ([#8165](https://github.com/paperless-ngx/paperless-ngx/pull/8165))
</details>
## paperless-ngx 2.13.3
### Bug Fixes
- Fix: fix auto-clean PDFs, create parent dir for storing unmodified original [@shamoon](https://github.com/shamoon) ([#8157](https://github.com/paperless-ngx/paperless-ngx/pull/8157))
- Fix: correctly handle exists, false in custom field query filter @yichi-yang ([#8158](https://github.com/paperless-ngx/paperless-ngx/pull/8158))
- Fix: dont use filters for inverted thumbnails in Safari [@shamoon](https://github.com/shamoon) ([#8121](https://github.com/paperless-ngx/paperless-ngx/pull/8121))
- Fix: use static object for activedisplayfields to prevent changes [@shamoon](https://github.com/shamoon) ([#8120](https://github.com/paperless-ngx/paperless-ngx/pull/8120))
- Fix: dont invert pdf colors in FF [@shamoon](https://github.com/shamoon) ([#8110](https://github.com/paperless-ngx/paperless-ngx/pull/8110))
- Fix: make mail account password and refresh token text fields [@shamoon](https://github.com/shamoon) ([#8107](https://github.com/paperless-ngx/paperless-ngx/pull/8107))
### Dependencies
<details>
<summary>8 changes</summary>
- Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#8145](https://github.com/paperless-ngx/paperless-ngx/pull/8145))
- Chore(deps-dev): Bump @types/node from 22.7.4 to 22.8.6 in /src-ui [@dependabot](https://github.com/dependabot) ([#8148](https://github.com/paperless-ngx/paperless-ngx/pull/8148))
- Chore(deps-dev): Bump @playwright/test from 1.47.2 to 1.48.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#8147](https://github.com/paperless-ngx/paperless-ngx/pull/8147))
- Chore(deps): Bump uuid from 10.0.0 to 11.0.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#8146](https://github.com/paperless-ngx/paperless-ngx/pull/8146))
- Chore(deps): Bump tslib from 2.7.0 to 2.8.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#8149](https://github.com/paperless-ngx/paperless-ngx/pull/8149))
- Chore(deps-dev): Bump @codecov/webpack-plugin from 1.2.0 to 1.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#8150](https://github.com/paperless-ngx/paperless-ngx/pull/8150))
- Chore(deps-dev): Bump @types/jest from 29.5.13 to 29.5.14 in /src-ui in the frontend-jest-dependencies group [@dependabot](https://github.com/dependabot) ([#8144](https://github.com/paperless-ngx/paperless-ngx/pull/8144))
- Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates [@dependabot](https://github.com/dependabot) ([#8143](https://github.com/paperless-ngx/paperless-ngx/pull/8143))
</details>
### All App Changes
<details>
<summary>14 changes</summary>
- Fix: fix auto-clean PDFs, create parent dir for storing unmodified original [@shamoon](https://github.com/shamoon) ([#8157](https://github.com/paperless-ngx/paperless-ngx/pull/8157))
- Fix: correctly handle exists, false in custom field query filter @yichi-yang ([#8158](https://github.com/paperless-ngx/paperless-ngx/pull/8158))
- Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#8145](https://github.com/paperless-ngx/paperless-ngx/pull/8145))
- Chore(deps-dev): Bump @types/node from 22.7.4 to 22.8.6 in /src-ui [@dependabot](https://github.com/dependabot) ([#8148](https://github.com/paperless-ngx/paperless-ngx/pull/8148))
- Chore(deps-dev): Bump @playwright/test from 1.47.2 to 1.48.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#8147](https://github.com/paperless-ngx/paperless-ngx/pull/8147))
- Chore(deps): Bump uuid from 10.0.0 to 11.0.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#8146](https://github.com/paperless-ngx/paperless-ngx/pull/8146))
- Chore(deps): Bump tslib from 2.7.0 to 2.8.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#8149](https://github.com/paperless-ngx/paperless-ngx/pull/8149))
- Chore(deps-dev): Bump @codecov/webpack-plugin from 1.2.0 to 1.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#8150](https://github.com/paperless-ngx/paperless-ngx/pull/8150))
- Chore(deps-dev): Bump @types/jest from 29.5.13 to 29.5.14 in /src-ui in the frontend-jest-dependencies group [@dependabot](https://github.com/dependabot) ([#8144](https://github.com/paperless-ngx/paperless-ngx/pull/8144))
- Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates [@dependabot](https://github.com/dependabot) ([#8143](https://github.com/paperless-ngx/paperless-ngx/pull/8143))
- Fix: dont use filters for inverted thumbnails in Safari [@shamoon](https://github.com/shamoon) ([#8121](https://github.com/paperless-ngx/paperless-ngx/pull/8121))
- Fix: use static object for activedisplayfields to prevent changes [@shamoon](https://github.com/shamoon) ([#8120](https://github.com/paperless-ngx/paperless-ngx/pull/8120))
- Fix: dont invert pdf colors in FF [@shamoon](https://github.com/shamoon) ([#8110](https://github.com/paperless-ngx/paperless-ngx/pull/8110))
- Fix: make mail account password and refresh token text fields [@shamoon](https://github.com/shamoon) ([#8107](https://github.com/paperless-ngx/paperless-ngx/pull/8107))
</details>
## paperless-ngx 2.13.2
### Bug Fixes
- Fix: remove auth tokens from export [@shamoon](https://github.com/shamoon) ([#8100](https://github.com/paperless-ngx/paperless-ngx/pull/8100))
- Fix: cf query dropdown styling affecting other components [@shamoon](https://github.com/shamoon) ([#8095](https://github.com/paperless-ngx/paperless-ngx/pull/8095))
### All App Changes
<details>
<summary>2 changes</summary>
- Fix: remove auth tokens from export [@shamoon](https://github.com/shamoon) ([#8100](https://github.com/paperless-ngx/paperless-ngx/pull/8100))
- Fix: cf query dropdown styling affecting other components [@shamoon](https://github.com/shamoon) ([#8095](https://github.com/paperless-ngx/paperless-ngx/pull/8095))
</details>
## paperless-ngx 2.13.1
### Bug Fixes
- Fix: allow removing dead document links from UI, validate via API [@shamoon](https://github.com/shamoon) ([#8081](https://github.com/paperless-ngx/paperless-ngx/pull/8081))
- Fix: Removes whitenoise patches and upgrades it to 6.8.1 [@stumpylog](https://github.com/stumpylog) ([#8079](https://github.com/paperless-ngx/paperless-ngx/pull/8079))
- Fix: Make all document related objects soft delete, fix filepath when deleted [@shamoon](https://github.com/shamoon) ([#8067](https://github.com/paperless-ngx/paperless-ngx/pull/8067))
- Fix: handle uuid fields created under mariadb and Django 4 [@shamoon](https://github.com/shamoon) ([#8034](https://github.com/paperless-ngx/paperless-ngx/pull/8034))
- Fix: Update filename correctly if the document is in the trash [@stumpylog](https://github.com/stumpylog) ([#8066](https://github.com/paperless-ngx/paperless-ngx/pull/8066))
- Fix: Handle a special case where removing none marker could result in an absolute path [@stumpylog](https://github.com/stumpylog) ([#8060](https://github.com/paperless-ngx/paperless-ngx/pull/8060))
- Fix: disable custom field signals during import in 2.13.0 [@shamoon](https://github.com/shamoon) ([#8065](https://github.com/paperless-ngx/paperless-ngx/pull/8065))
- Fix: doc link documents search should exclude null [@shamoon](https://github.com/shamoon) ([#8064](https://github.com/paperless-ngx/paperless-ngx/pull/8064))
- Fix: fix custom field query empty element removal [@shamoon](https://github.com/shamoon) ([#8056](https://github.com/paperless-ngx/paperless-ngx/pull/8056))
- Fix / Enhancement: auto-rename document files when select type custom fields are changed [@shamoon](https://github.com/shamoon) ([#8045](https://github.com/paperless-ngx/paperless-ngx/pull/8045))
- Fix: dont try to load PAPERLESS_MODEL_FILE as env from file [@shamoon](https://github.com/shamoon) ([#8040](https://github.com/paperless-ngx/paperless-ngx/pull/8040))
- Fix: dont include all allauth urls [@shamoon](https://github.com/shamoon) ([#8010](https://github.com/paperless-ngx/paperless-ngx/pull/8010))
- Fix: oauth settings without base url [@shamoon](https://github.com/shamoon) ([#8020](https://github.com/paperless-ngx/paperless-ngx/pull/8020))
- Fix / Enhancement: include social accounts and api tokens in export [@shamoon](https://github.com/shamoon) ([#8016](https://github.com/paperless-ngx/paperless-ngx/pull/8016))
### Maintenance
- Fix: Removes whitenoise patches and upgrades it to 6.8.1 [@stumpylog](https://github.com/stumpylog) ([#8079](https://github.com/paperless-ngx/paperless-ngx/pull/8079))
### All App Changes
<details>
<summary>12 changes</summary>
- Fix: allow removing dead document links from UI, validate via API [@shamoon](https://github.com/shamoon) ([#8081](https://github.com/paperless-ngx/paperless-ngx/pull/8081))
- Fix: Make all document related objects soft delete, fix filepath when deleted [@shamoon](https://github.com/shamoon) ([#8067](https://github.com/paperless-ngx/paperless-ngx/pull/8067))
- Fix: handle uuid fields created under mariadb and Django 4 [@shamoon](https://github.com/shamoon) ([#8034](https://github.com/paperless-ngx/paperless-ngx/pull/8034))
- Fix: Update filename correctly if the document is in the trash [@stumpylog](https://github.com/stumpylog) ([#8066](https://github.com/paperless-ngx/paperless-ngx/pull/8066))
- Fix: Handle a special case where removing none marker could result in an absolute path [@stumpylog](https://github.com/stumpylog) ([#8060](https://github.com/paperless-ngx/paperless-ngx/pull/8060))
- Fix: disable custom field signals during import in 2.13.0 [@shamoon](https://github.com/shamoon) ([#8065](https://github.com/paperless-ngx/paperless-ngx/pull/8065))
- Fix: doc link documents search should exclude null [@shamoon](https://github.com/shamoon) ([#8064](https://github.com/paperless-ngx/paperless-ngx/pull/8064))
- Enhancement: auto-rename document files when select type custom fields are changed [@shamoon](https://github.com/shamoon) ([#8045](https://github.com/paperless-ngx/paperless-ngx/pull/8045))
- Fix: fix custom field query empty element removal [@shamoon](https://github.com/shamoon) ([#8056](https://github.com/paperless-ngx/paperless-ngx/pull/8056))
- Fix: dont include all allauth urls [@shamoon](https://github.com/shamoon) ([#8010](https://github.com/paperless-ngx/paperless-ngx/pull/8010))
- Enhancement / fix: include social accounts and api tokens in export [@shamoon](https://github.com/shamoon) ([#8016](https://github.com/paperless-ngx/paperless-ngx/pull/8016))
- Fix: oauth settings without base url [@shamoon](https://github.com/shamoon) ([#8020](https://github.com/paperless-ngx/paperless-ngx/pull/8020))
</details>
## paperless-ngx 2.13.0
### Notable Changes
- Feature: OAuth2 Gmail and Outlook email support [@shamoon](https://github.com/shamoon) ([#7866](https://github.com/paperless-ngx/paperless-ngx/pull/7866))
- Feature: Enhanced templating for filename format [@stumpylog](https://github.com/stumpylog) ([#7836](https://github.com/paperless-ngx/paperless-ngx/pull/7836))
- Feature: custom fields queries [@shamoon](https://github.com/shamoon) ([#7761](https://github.com/paperless-ngx/paperless-ngx/pull/7761))
- Chore: Drop Python 3.9 support [@stumpylog](https://github.com/stumpylog) ([#7774](https://github.com/paperless-ngx/paperless-ngx/pull/7774))
### Features
- Enhancement: QoL, auto-focus default select field in custom field dropdown [@shamoon](https://github.com/shamoon) ([#7961](https://github.com/paperless-ngx/paperless-ngx/pull/7961))
- Change: open not edit [@shamoon](https://github.com/shamoon) ([#7942](https://github.com/paperless-ngx/paperless-ngx/pull/7942))
- Enhancement: support retain barcode split pages [@shamoon](https://github.com/shamoon) ([#7912](https://github.com/paperless-ngx/paperless-ngx/pull/7912))
- Enhancement: don't wait for doc API to load preview [@shamoon](https://github.com/shamoon) ([#7894](https://github.com/paperless-ngx/paperless-ngx/pull/7894))
- Feature: OAuth2 Gmail and Outlook email support [@shamoon](https://github.com/shamoon) ([#7866](https://github.com/paperless-ngx/paperless-ngx/pull/7866))
- Enhancement: live preview of storage path [@shamoon](https://github.com/shamoon) ([#7870](https://github.com/paperless-ngx/paperless-ngx/pull/7870))
- Enhancement: management list button improvements [@shamoon](https://github.com/shamoon) ([#7848](https://github.com/paperless-ngx/paperless-ngx/pull/7848))
- Enhancement: check for mail destination directory, log post-consume errors [@mrichtarsky](https://github.com/mrichtarsky) ([#7808](https://github.com/paperless-ngx/paperless-ngx/pull/7808))
- Enhancement: workflow overview toggle enable button [@shamoon](https://github.com/shamoon) ([#7818](https://github.com/paperless-ngx/paperless-ngx/pull/7818))
- Enhancement: disable-able mail rules, add toggle to overview [@shamoon](https://github.com/shamoon) ([#7810](https://github.com/paperless-ngx/paperless-ngx/pull/7810))
- Feature: auto-clean some invalid pdfs [@shamoon](https://github.com/shamoon) ([#7651](https://github.com/paperless-ngx/paperless-ngx/pull/7651))
- Feature: page count [@s0llvan](https://github.com/s0llvan) ([#7750](https://github.com/paperless-ngx/paperless-ngx/pull/7750))
- Enhancement: use apt only when needed docker-entrypoint.sh [@gawa971](https://github.com/gawa971) ([#7756](https://github.com/paperless-ngx/paperless-ngx/pull/7756))
- Enhancement: set Django SESSION_EXPIRE_AT_BROWSER_CLOSE from PAPERLESS_ACCOUNT_SESSION_REMEMBER [@shamoon](https://github.com/shamoon) ([#7748](https://github.com/paperless-ngx/paperless-ngx/pull/7748))
- Enhancement: allow setting session cookie age [@shamoon](https://github.com/shamoon) ([#7743](https://github.com/paperless-ngx/paperless-ngx/pull/7743))
- Feature: copy workflows and mail rules, improve layout [@shamoon](https://github.com/shamoon) ([#7727](https://github.com/paperless-ngx/paperless-ngx/pull/7727))
### Bug Fixes
- Fix: remove space before my profile button in dropdown [@tooomm](https://github.com/tooomm) ([#7963](https://github.com/paperless-ngx/paperless-ngx/pull/7963))
- Fix: v2.13.0 RC1 - Handling of Nones when using custom fields in filepath templating [@stumpylog](https://github.com/stumpylog) ([#7933](https://github.com/paperless-ngx/paperless-ngx/pull/7933))
- Fix: v2.13.0 RC1 - trigger move and rename after CustomFieldInstance saved [@shamoon](https://github.com/shamoon) ([#7927](https://github.com/paperless-ngx/paperless-ngx/pull/7927))
- Fix: v2.13.0 RC1 - increase field max lengths to accommodate larger tokens [@shamoon](https://github.com/shamoon) ([#7916](https://github.com/paperless-ngx/paperless-ngx/pull/7916))
- Fix: preserve text linebreaks in doc edit [@shamoon](https://github.com/shamoon) ([#7908](https://github.com/paperless-ngx/paperless-ngx/pull/7908))
- Fix: only show colon on cards if correspondent and title shown [@shamoon](https://github.com/shamoon) ([#7893](https://github.com/paperless-ngx/paperless-ngx/pull/7893))
- Fix: Allow ASN values of 0 from barcodes [@stumpylog](https://github.com/stumpylog) ([#7878](https://github.com/paperless-ngx/paperless-ngx/pull/7878))
- Fix: fix auto-dismiss completed tasks on open document [@shamoon](https://github.com/shamoon) ([#7869](https://github.com/paperless-ngx/paperless-ngx/pull/7869))
- Fix: trigger change warning for saved views with default fields if changed [@shamoon](https://github.com/shamoon) ([#7865](https://github.com/paperless-ngx/paperless-ngx/pull/7865))
- Fix: hidden canvas element causes scroll bug [@shamoon](https://github.com/shamoon) ([#7770](https://github.com/paperless-ngx/paperless-ngx/pull/7770))
- Fix: handle overflowing dropdowns on mobile [@shamoon](https://github.com/shamoon) ([#7758](https://github.com/paperless-ngx/paperless-ngx/pull/7758))
- Fix: chrome scrolling in >= 129 [@shamoon](https://github.com/shamoon) ([#7738](https://github.com/paperless-ngx/paperless-ngx/pull/7738))
### Maintenance
- Enhancement: use apt only when needed docker-entrypoint.sh [@gawa971](https://github.com/gawa971) ([#7756](https://github.com/paperless-ngx/paperless-ngx/pull/7756))
### Dependencies
<details>
<summary>10 changes</summary>
- Chore(deps-dev): Bump @codecov/webpack-plugin from 1.0.1 to 1.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#7830](https://github.com/paperless-ngx/paperless-ngx/pull/7830))
- Chore(deps-dev): Bump @types/node from 22.5.2 to 22.7.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#7829](https://github.com/paperless-ngx/paperless-ngx/pull/7829))
- Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#7827](https://github.com/paperless-ngx/paperless-ngx/pull/7827))
- Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#7826](https://github.com/paperless-ngx/paperless-ngx/pull/7826))
- Chore(deps-dev): Bump @playwright/test from 1.46.1 to 1.47.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#7828](https://github.com/paperless-ngx/paperless-ngx/pull/7828))
- Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates [@dependabot](https://github.com/dependabot) ([#7825](https://github.com/paperless-ngx/paperless-ngx/pull/7825))
- Chore: Upgrades OCRMyPDF to v16 [@stumpylog](https://github.com/stumpylog) ([#7815](https://github.com/paperless-ngx/paperless-ngx/pull/7815))
- Chore: Upgrades the Docker image to use Python 3.12 [@stumpylog](https://github.com/stumpylog) ([#7796](https://github.com/paperless-ngx/paperless-ngx/pull/7796))
- Chore: Upgrade Django to 5.1 [@stumpylog](https://github.com/stumpylog) ([#7795](https://github.com/paperless-ngx/paperless-ngx/pull/7795))
- Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7723](https://github.com/paperless-ngx/paperless-ngx/pull/7723))
</details>
### All App Changes
<details>
<summary>43 changes</summary>
- Change: Use a TextField for the storage path field [@stumpylog](https://github.com/stumpylog) ([#7967](https://github.com/paperless-ngx/paperless-ngx/pull/7967))
- Fix: remove space before my profile button in dropdown [@tooomm](https://github.com/tooomm) ([#7963](https://github.com/paperless-ngx/paperless-ngx/pull/7963))
- Enhancement: QoL, auto-focus default select field in custom field dropdown [@shamoon](https://github.com/shamoon) ([#7961](https://github.com/paperless-ngx/paperless-ngx/pull/7961))
- Change: open not edit [@shamoon](https://github.com/shamoon) ([#7942](https://github.com/paperless-ngx/paperless-ngx/pull/7942))
- Fix: v2.13.0 RC1 - Handling of Nones when using custom fields in filepath templating [@stumpylog](https://github.com/stumpylog) ([#7933](https://github.com/paperless-ngx/paperless-ngx/pull/7933))
- Fix: v2.13.0 RC1 - trigger move and rename after CustomFieldInstance saved [@shamoon](https://github.com/shamoon) ([#7927](https://github.com/paperless-ngx/paperless-ngx/pull/7927))
- Fix: v2.13.0 RC1 - increase field max lengths to accommodate larger tokens [@shamoon](https://github.com/shamoon) ([#7916](https://github.com/paperless-ngx/paperless-ngx/pull/7916))
- Enhancement: support retain barcode split pages [@shamoon](https://github.com/shamoon) ([#7912](https://github.com/paperless-ngx/paperless-ngx/pull/7912))
- Fix: preserve text linebreaks in doc edit [@shamoon](https://github.com/shamoon) ([#7908](https://github.com/paperless-ngx/paperless-ngx/pull/7908))
- Enhancement: don't wait for doc API to load preview [@shamoon](https://github.com/shamoon) ([#7894](https://github.com/paperless-ngx/paperless-ngx/pull/7894))
- Fix: only show colon on cards if correspondent and title shown [@shamoon](https://github.com/shamoon) ([#7893](https://github.com/paperless-ngx/paperless-ngx/pull/7893))
- Feature: OAuth2 Gmail and Outlook email support [@shamoon](https://github.com/shamoon) ([#7866](https://github.com/paperless-ngx/paperless-ngx/pull/7866))
- Chore: Consolidate workflow logic [@shamoon](https://github.com/shamoon) ([#7880](https://github.com/paperless-ngx/paperless-ngx/pull/7880))
- Enhancement: live preview of storage path [@shamoon](https://github.com/shamoon) ([#7870](https://github.com/paperless-ngx/paperless-ngx/pull/7870))
- Fix: Allow ASN values of 0 from barcodes [@stumpylog](https://github.com/stumpylog) ([#7878](https://github.com/paperless-ngx/paperless-ngx/pull/7878))
- Fix: fix auto-dismiss completed tasks on open document [@shamoon](https://github.com/shamoon) ([#7869](https://github.com/paperless-ngx/paperless-ngx/pull/7869))
- Fix: trigger change warning for saved views with default fields if changed [@shamoon](https://github.com/shamoon) ([#7865](https://github.com/paperless-ngx/paperless-ngx/pull/7865))
- Feature: Enhanced templating for filename format [@stumpylog](https://github.com/stumpylog) ([#7836](https://github.com/paperless-ngx/paperless-ngx/pull/7836))
- Enhancement: management list button improvements [@shamoon](https://github.com/shamoon) ([#7848](https://github.com/paperless-ngx/paperless-ngx/pull/7848))
- Enhancement: check for mail destination directory, log post-consume errors [@mrichtarsky](https://github.com/mrichtarsky) ([#7808](https://github.com/paperless-ngx/paperless-ngx/pull/7808))
- Feature: custom fields queries [@shamoon](https://github.com/shamoon) ([#7761](https://github.com/paperless-ngx/paperless-ngx/pull/7761))
- Chore(deps-dev): Bump @codecov/webpack-plugin from 1.0.1 to 1.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#7830](https://github.com/paperless-ngx/paperless-ngx/pull/7830))
- Chore(deps-dev): Bump @types/node from 22.5.2 to 22.7.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#7829](https://github.com/paperless-ngx/paperless-ngx/pull/7829))
- Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#7827](https://github.com/paperless-ngx/paperless-ngx/pull/7827))
- Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#7826](https://github.com/paperless-ngx/paperless-ngx/pull/7826))
- Chore(deps-dev): Bump @playwright/test from 1.46.1 to 1.47.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#7828](https://github.com/paperless-ngx/paperless-ngx/pull/7828))
- Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates [@dependabot](https://github.com/dependabot) ([#7825](https://github.com/paperless-ngx/paperless-ngx/pull/7825))
- Chore: Upgrades OCRMyPDF to v16 [@stumpylog](https://github.com/stumpylog) ([#7815](https://github.com/paperless-ngx/paperless-ngx/pull/7815))
- Enhancement: workflow overview toggle enable button [@shamoon](https://github.com/shamoon) ([#7818](https://github.com/paperless-ngx/paperless-ngx/pull/7818))
- Enhancement: disable-able mail rules, add toggle to overview [@shamoon](https://github.com/shamoon) ([#7810](https://github.com/paperless-ngx/paperless-ngx/pull/7810))
- Chore: Upgrades the Docker image to use Python 3.12 [@stumpylog](https://github.com/stumpylog) ([#7796](https://github.com/paperless-ngx/paperless-ngx/pull/7796))
- Chore: Upgrade Django to 5.1 [@stumpylog](https://github.com/stumpylog) ([#7795](https://github.com/paperless-ngx/paperless-ngx/pull/7795))
- Chore: Drop Python 3.9 support [@stumpylog](https://github.com/stumpylog) ([#7774](https://github.com/paperless-ngx/paperless-ngx/pull/7774))
- Feature: auto-clean some invalid pdfs [@shamoon](https://github.com/shamoon) ([#7651](https://github.com/paperless-ngx/paperless-ngx/pull/7651))
- Feature: page count [@s0llvan](https://github.com/s0llvan) ([#7750](https://github.com/paperless-ngx/paperless-ngx/pull/7750))
- Fix: hidden canvas element causes scroll bug [@shamoon](https://github.com/shamoon) ([#7770](https://github.com/paperless-ngx/paperless-ngx/pull/7770))
- Enhancement: compactify dates dropdown [@shamoon](https://github.com/shamoon) ([#7759](https://github.com/paperless-ngx/paperless-ngx/pull/7759))
- Fix: handle overflowing dropdowns on mobile [@shamoon](https://github.com/shamoon) ([#7758](https://github.com/paperless-ngx/paperless-ngx/pull/7758))
- Enhancement: set Django SESSION_EXPIRE_AT_BROWSER_CLOSE from PAPERLESS_ACCOUNT_SESSION_REMEMBER [@shamoon](https://github.com/shamoon) ([#7748](https://github.com/paperless-ngx/paperless-ngx/pull/7748))
- Enhancement: allow setting session cookie age [@shamoon](https://github.com/shamoon) ([#7743](https://github.com/paperless-ngx/paperless-ngx/pull/7743))
- Fix: chrome scrolling in >= 129 [@shamoon](https://github.com/shamoon) ([#7738](https://github.com/paperless-ngx/paperless-ngx/pull/7738))
- Feature: copy workflows and mail rules, improve layout [@shamoon](https://github.com/shamoon) ([#7727](https://github.com/paperless-ngx/paperless-ngx/pull/7727))
- Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7723](https://github.com/paperless-ngx/paperless-ngx/pull/7723))
</details>
## paperless-ngx 2.12.1 ## paperless-ngx 2.12.1
### Bug Fixes ### Bug Fixes

File diff suppressed because it is too large Load Diff

4081
src-ui/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -11,55 +11,55 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular/cdk": "^18.2.6", "@angular/cdk": "^18.2.11",
"@angular/common": "~18.2.6", "@angular/common": "~18.2.10",
"@angular/compiler": "~18.2.6", "@angular/compiler": "~18.2.10",
"@angular/core": "~18.2.6", "@angular/core": "~18.2.10",
"@angular/forms": "~18.2.6", "@angular/forms": "~18.2.10",
"@angular/localize": "~18.2.6", "@angular/localize": "~18.2.10",
"@angular/platform-browser": "~18.2.6", "@angular/platform-browser": "~18.2.10",
"@angular/platform-browser-dynamic": "~18.2.6", "@angular/platform-browser-dynamic": "~18.2.10",
"@angular/router": "~18.2.6", "@angular/router": "~18.2.10",
"@ng-bootstrap/ng-bootstrap": "^17.0.1", "@ng-bootstrap/ng-bootstrap": "^17.0.1",
"@ng-select/ng-select": "^13.9.0", "@ng-select/ng-select": "^13.9.1",
"@ngneat/dirty-check-forms": "^3.0.3", "@ngneat/dirty-check-forms": "^3.0.3",
"@popperjs/core": "^2.11.8", "@popperjs/core": "^2.11.8",
"bootstrap": "^5.3.3", "bootstrap": "^5.3.3",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"mime-names": "^1.0.0", "mime-names": "^1.0.0",
"ng2-pdf-viewer": "^10.3.1", "ng2-pdf-viewer": "^10.3.4",
"ngx-bootstrap-icons": "^1.9.3", "ngx-bootstrap-icons": "^1.9.3",
"ngx-color": "^9.0.0", "ngx-color": "^9.0.0",
"ngx-cookie-service": "^18.0.0", "ngx-cookie-service": "^18.0.0",
"ngx-file-drop": "^16.0.0", "ngx-file-drop": "^16.0.0",
"ngx-ui-tour-ng-bootstrap": "^15.0.0", "ngx-ui-tour-ng-bootstrap": "^15.0.0",
"rxjs": "^7.8.1", "rxjs": "^7.8.1",
"tslib": "^2.7.0", "tslib": "^2.8.1",
"utif": "^3.1.0", "utif": "^3.1.0",
"uuid": "^10.0.0", "uuid": "^11.0.2",
"zone.js": "^0.14.8" "zone.js": "^0.14.8"
}, },
"devDependencies": { "devDependencies": {
"@angular-builders/custom-webpack": "^18.0.0", "@angular-builders/custom-webpack": "^18.0.0",
"@angular-builders/jest": "^18.0.0", "@angular-builders/jest": "^18.0.0",
"@angular-devkit/build-angular": "^18.2.2", "@angular-devkit/build-angular": "^18.2.2",
"@angular-devkit/core": "^18.2.6", "@angular-devkit/core": "^18.2.11",
"@angular-devkit/schematics": "^18.2.6", "@angular-devkit/schematics": "^18.2.11",
"@angular-eslint/builder": "18.3.1", "@angular-eslint/builder": "18.4.0",
"@angular-eslint/eslint-plugin": "18.3.1", "@angular-eslint/eslint-plugin": "18.4.0",
"@angular-eslint/eslint-plugin-template": "18.3.1", "@angular-eslint/eslint-plugin-template": "18.4.0",
"@angular-eslint/schematics": "18.3.1", "@angular-eslint/schematics": "18.4.0",
"@angular-eslint/template-parser": "18.3.1", "@angular-eslint/template-parser": "18.4.0",
"@angular/cli": "~18.2.6", "@angular/cli": "~18.2.11",
"@angular/compiler-cli": "~18.2.2", "@angular/compiler-cli": "~18.2.2",
"@codecov/webpack-plugin": "^1.2.0", "@codecov/webpack-plugin": "^1.2.1",
"@playwright/test": "^1.47.2", "@playwright/test": "^1.48.2",
"@types/jest": "^29.5.13", "@types/jest": "^29.5.14",
"@types/node": "^22.7.4", "@types/node": "^22.8.6",
"@typescript-eslint/eslint-plugin": "^8.8.0", "@typescript-eslint/eslint-plugin": "^8.12.2",
"@typescript-eslint/parser": "^8.8.0", "@typescript-eslint/parser": "^8.12.2",
"@typescript-eslint/utils": "^8.0.0", "@typescript-eslint/utils": "^8.0.0",
"eslint": "^9.11.1", "eslint": "^9.14.0",
"jest": "29.7.0", "jest": "29.7.0",
"jest-environment-jsdom": "^29.7.0", "jest-environment-jsdom": "^29.7.0",
"jest-preset-angular": "^14.2.4", "jest-preset-angular": "^14.2.4",

View File

@ -36,9 +36,7 @@
<ng-container i18n>Loading...</ng-container> <ng-container i18n>Loading...</ng-container>
</div> </div>
} }
@for (log of logs; track log) { @for (log of logs; track $index) {
<p <p class="m-0 p-0 log-entry-{{getLogLevel(log)}}">{{log}}</p>
class="m-0 p-0 log-entry-{{getLogLevel(log)}}"
>{{log}}</p>
} }
</div> </div>

View File

@ -118,17 +118,6 @@
</div> </div>
</div> </div>
<div class="row mb-3">
<div class="col-md-3 col-form-label pt-0">
<span i18n>Document editor</span>
</div>
<div class="col">
<pngx-input-check i18n-title title="Use PDF viewer provided by the browser" i18n-hint hint="This is usually faster for displaying large PDF documents, but it might not work on some browsers." formControlName="useNativePdfViewer"></pngx-input-check>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-3 col-form-label pt-0"> <div class="col-md-3 col-form-label pt-0">
<span i18n>Sidebar</span> <span i18n>Sidebar</span>
@ -168,26 +157,42 @@
<h4 class="mt-4" id="update-checking" i18n>Update checking</h4> <h4 class="mt-4" id="update-checking" i18n>Update checking</h4>
<div class="row mb-3"> <div class="row mb-3">
<div class="offset-md-3 col"> <div class="offset-md-3 col d-flex flex-row align-items-start">
<p i18n>
Update checking works by pinging the public <a href="https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest" target="_blank" rel="noopener noreferrer">GitHub API</a> for the latest release to determine whether a new version is available.<br/>
Actual updating of the app must still be performed manually.
</p>
<p i18n>
<em>No tracking data is collected by the app in any way.</em>
</p>
<pngx-input-check i18n-title title="Enable update checking" formControlName="updateCheckingEnabled"></pngx-input-check> <pngx-input-check i18n-title title="Enable update checking" formControlName="updateCheckingEnabled"></pngx-input-check>
<button class="btn btn-sm btn-link text-muted me-auto p-0 ms-2" title="What's this?" i18n-title type="button" triggers="mouseenter:mouseleave" [ngbPopover]="updatesPopover" [autoClose]="true">
<i-bs name="question-circle"></i-bs>
</button>
<ng-template #updatesPopover>
<p i18n>
Update checking works by pinging the public GitHub API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually.
</p>
<p>
<em i18n>No tracking data is collected by the app in any way.</em>
</p>
</ng-template>
</div> </div>
</div> </div>
<h4 class="mt-4" i18n>Document editing</h4> <h4 class="mt-4" i18n>Document editing</h4>
<div class="row mb-3">
<div class="offset-md-3 col">
<pngx-input-check i18n-title title="Use PDF viewer provided by the browser" i18n-hint hint="This is usually faster for displaying large PDF documents, but it might not work on some browsers." formControlName="useNativePdfViewer"></pngx-input-check>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="offset-md-3 col"> <div class="offset-md-3 col">
<pngx-input-check i18n-title title="Automatically remove inbox tag(s) on save" formControlName="documentEditingRemoveInboxTags"></pngx-input-check> <pngx-input-check i18n-title title="Automatically remove inbox tag(s) on save" formControlName="documentEditingRemoveInboxTags"></pngx-input-check>
</div> </div>
</div> </div>
<div class="row mb-3">
<div class="offset-md-3 col">
<pngx-input-check i18n-title title="Show document thumbnail during loading" formControlName="documentEditingOverlayThumbnail"></pngx-input-check>
</div>
</div>
<h4 class="mt-4" i18n>Bulk editing</h4> <h4 class="mt-4" i18n>Bulk editing</h4>
<div class="row mb-3"> <div class="row mb-3">

View File

@ -315,7 +315,7 @@ describe('SettingsComponent', () => {
expect(toastErrorSpy).toHaveBeenCalled() expect(toastErrorSpy).toHaveBeenCalled()
expect(storeSpy).toHaveBeenCalled() expect(storeSpy).toHaveBeenCalled()
expect(appearanceSettingsSpy).not.toHaveBeenCalled() expect(appearanceSettingsSpy).not.toHaveBeenCalled()
expect(setSpy).toHaveBeenCalledTimes(27) expect(setSpy).toHaveBeenCalledTimes(28)
// succeed // succeed
storeSpy.mockReturnValueOnce(of(true)) storeSpy.mockReturnValueOnce(of(true))

View File

@ -88,7 +88,6 @@ export class SettingsComponent
darkModeEnabled: new FormControl(null), darkModeEnabled: new FormControl(null),
darkModeInvertThumbs: new FormControl(null), darkModeInvertThumbs: new FormControl(null),
themeColor: new FormControl(null), themeColor: new FormControl(null),
useNativePdfViewer: new FormControl(null),
displayLanguage: new FormControl(null), displayLanguage: new FormControl(null),
dateLocale: new FormControl(null), dateLocale: new FormControl(null),
dateFormat: new FormControl(null), dateFormat: new FormControl(null),
@ -99,7 +98,9 @@ export class SettingsComponent
defaultPermsViewGroups: new FormControl(null), defaultPermsViewGroups: new FormControl(null),
defaultPermsEditUsers: new FormControl(null), defaultPermsEditUsers: new FormControl(null),
defaultPermsEditGroups: new FormControl(null), defaultPermsEditGroups: new FormControl(null),
useNativePdfViewer: new FormControl(null),
documentEditingRemoveInboxTags: new FormControl(null), documentEditingRemoveInboxTags: new FormControl(null),
documentEditingOverlayThumbnail: new FormControl(null),
searchDbOnly: new FormControl(null), searchDbOnly: new FormControl(null),
searchLink: new FormControl(null), searchLink: new FormControl(null),
@ -308,6 +309,9 @@ export class SettingsComponent
documentEditingRemoveInboxTags: this.settings.get( documentEditingRemoveInboxTags: this.settings.get(
SETTINGS_KEYS.DOCUMENT_EDITING_REMOVE_INBOX_TAGS SETTINGS_KEYS.DOCUMENT_EDITING_REMOVE_INBOX_TAGS
), ),
documentEditingOverlayThumbnail: this.settings.get(
SETTINGS_KEYS.DOCUMENT_EDITING_OVERLAY_THUMBNAIL
),
searchDbOnly: this.settings.get(SETTINGS_KEYS.SEARCH_DB_ONLY), searchDbOnly: this.settings.get(SETTINGS_KEYS.SEARCH_DB_ONLY),
searchLink: this.settings.get(SETTINGS_KEYS.SEARCH_FULL_TYPE), searchLink: this.settings.get(SETTINGS_KEYS.SEARCH_FULL_TYPE),
savedViews: {}, savedViews: {},
@ -539,6 +543,10 @@ export class SettingsComponent
SETTINGS_KEYS.DOCUMENT_EDITING_REMOVE_INBOX_TAGS, SETTINGS_KEYS.DOCUMENT_EDITING_REMOVE_INBOX_TAGS,
this.settingsForm.value.documentEditingRemoveInboxTags this.settingsForm.value.documentEditingRemoveInboxTags
) )
this.settings.set(
SETTINGS_KEYS.DOCUMENT_EDITING_OVERLAY_THUMBNAIL,
this.settingsForm.value.documentEditingOverlayThumbnail
)
this.settings.set( this.settings.set(
SETTINGS_KEYS.SEARCH_DB_ONLY, SETTINGS_KEYS.SEARCH_DB_ONLY,
this.settingsForm.value.searchDbOnly this.settingsForm.value.searchDbOnly

View File

@ -43,7 +43,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@for (task of tasks | slice: (page-1) * pageSize : page * pageSize; track task) { @for (task of tasks | slice: (page-1) * pageSize : page * pageSize; track task.id) {
<tr (click)="toggleSelected(task, $event); $event.stopPropagation();"> <tr (click)="toggleSelected(task, $event); $event.stopPropagation();">
<td> <td>
<div class="form-check"> <div class="form-check">

View File

@ -1,4 +1,4 @@
<nav class="navbar navbar-dark sticky-top bg-primary flex-md-nowrap p-0 shadow-sm"> <nav class="navbar navbar-dark fixed-top bg-primary flex-md-nowrap p-0 shadow-sm">
<button class="navbar-toggler d-md-none collapsed border-0" type="button" data-toggle="collapse" <button class="navbar-toggler d-md-none collapsed border-0" type="button" data-toggle="collapse"
data-target="#sidebarMenu" aria-controls="sidebarMenu" aria-expanded="false" aria-label="Toggle navigation" data-target="#sidebarMenu" aria-controls="sidebarMenu" aria-expanded="false" aria-label="Toggle navigation"
(click)="isMenuCollapsed = !isMenuCollapsed"> (click)="isMenuCollapsed = !isMenuCollapsed">

View File

@ -48,6 +48,13 @@
main { main {
transition: all .2s ease; transition: all .2s ease;
padding-top: 110px;
}
@media (min-width: 768px) {
main {
padding-top: 56px;
}
} }
.sidebar-slim-toggler { .sidebar-slim-toggler {

View File

@ -5,26 +5,26 @@
} }
} }
::ng-deep .ng-select-container { :host ::ng-deep .ng-select-container {
border-top-right-radius: 0 !important; border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important; border-bottom-right-radius: 0 !important;
height: 100% !important; height: 100% !important;
} }
::ng-deep .rounded-end .ng-select-container { :host ::ng-deep .rounded-end .ng-select-container {
border-top-right-radius: var(--bs-border-radius) !important; border-top-right-radius: var(--bs-border-radius) !important;
border-bottom-right-radius: var(--bs-border-radius) !important; border-bottom-right-radius: var(--bs-border-radius) !important;
border-top-left-radius: 0 !important; border-top-left-radius: 0 !important;
border-bottom-left-radius: 0 !important; border-bottom-left-radius: 0 !important;
} }
::ng-deep .ng-select { :host ::ng-deep .ng-select {
max-width: 100px; max-width: 100px;
min-width: 35%; min-width: 35%;
font-size: 14px; font-size: 14px;
} }
::ng-deep .doc-link-select { :host ::ng-deep .doc-link-select {
padding-top: 0 !important; padding-top: 0 !important;
border-top-right-radius: var(--bs-border-radius) !important; border-top-right-radius: var(--bs-border-radius) !important;
border-bottom-right-radius: var(--bs-border-radius) !important; border-bottom-right-radius: var(--bs-border-radius) !important;

View File

@ -27,6 +27,9 @@
</div> </div>
} }
</div> </div>
@if (object?.id) {
<small class="d-block mt-2" i18n>Warning: existing instances of this field will retain their current value index (e.g. option #1, #2, #3) after editing the options here</small>
}
} }
@case (CustomFieldDataType.Monetary) { @case (CustomFieldDataType.Monetary) {
<div class="my-3"> <div class="my-3">

View File

@ -38,7 +38,7 @@
@for (item of selectionModel.itemsSorted | filter: filterText:'name'; track item; let i = $index) { @for (item of selectionModel.itemsSorted | filter: filterText:'name'; track item; let i = $index) {
@if (allowSelectNone || item.id) { @if (allowSelectNone || item.id) {
<pngx-toggleable-dropdown-button <pngx-toggleable-dropdown-button
[item]="item" [hideCount]="hideCount(item)" [state]="selectionModel.get(item.id)" [count]="getUpdatedDocumentCount(item.id)" (toggle)="selectionModel.toggle(item.id)" (exclude)="excludeClicked(item.id)" (click)="setButtonItemIndex(i - 1)" [disabled]="disabled"> [item]="item" [hideCount]="hideCount(item)" [state]="selectionModel.get(item.id)" [count]="getUpdatedDocumentCount(item.id)" (toggled)="selectionModel.toggle(item.id)" (exclude)="excludeClicked(item.id)" (click)="setButtonItemIndex(i - 1)" [disabled]="disabled">
</pngx-toggleable-dropdown-button> </pngx-toggleable-dropdown-button>
} }
} }

View File

@ -58,7 +58,7 @@ describe('ToggleableDropdownButtonComponent', () => {
let toggleResult let toggleResult
component.state = ToggleableItemState.Selected component.state = ToggleableItemState.Selected
component.exclude.subscribe(() => (excludeResult = true)) component.exclude.subscribe(() => (excludeResult = true))
component.toggle.subscribe(() => (toggleResult = true)) component.toggled.subscribe(() => (toggleResult = true))
const button = fixture.nativeElement.querySelector('button') const button = fixture.nativeElement.querySelector('button')
button.dispatchEvent(new MouseEvent('click')) button.dispatchEvent(new MouseEvent('click'))
expect(excludeResult).toBeTruthy() expect(excludeResult).toBeTruthy()
@ -70,7 +70,7 @@ describe('ToggleableDropdownButtonComponent', () => {
let toggleResult let toggleResult
component.state = ToggleableItemState.Excluded component.state = ToggleableItemState.Excluded
component.exclude.subscribe(() => (excludeResult = true)) component.exclude.subscribe(() => (excludeResult = true))
component.toggle.subscribe(() => (toggleResult = true)) component.toggled.subscribe(() => (toggleResult = true))
const button = fixture.nativeElement.querySelector('button') const button = fixture.nativeElement.querySelector('button')
button.dispatchEvent(new MouseEvent('click')) button.dispatchEvent(new MouseEvent('click'))
expect(excludeResult).toBeFalsy() expect(excludeResult).toBeFalsy()

View File

@ -30,7 +30,7 @@ export class ToggleableDropdownButtonComponent {
hideCount: boolean = false hideCount: boolean = false
@Output() @Output()
toggle = new EventEmitter() toggled = new EventEmitter()
@Output() @Output()
exclude = new EventEmitter() exclude = new EventEmitter()
@ -43,7 +43,7 @@ export class ToggleableDropdownButtonComponent {
if (this.state == ToggleableItemState.Selected) { if (this.state == ToggleableItemState.Selected) {
this.exclude.emit() this.exclude.emit()
} else { } else {
this.toggle.emit() this.toggled.emit()
} }
} }

View File

@ -41,9 +41,15 @@
<ng-template ng-label-tmp let-document="item"> <ng-template ng-label-tmp let-document="item">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<button class="btn p-0 lh-1" *ngIf="!disabled" (click)="unselect(document)" title="Remove link" i18n-title><i-bs name="x"></i-bs></button> <button class="btn p-0 lh-1" *ngIf="!disabled" (click)="unselect(document)" title="Remove link" i18n-title><i-bs name="x"></i-bs></button>
@if (document.title) {
<a routerLink="/documents/{{document.id}}" class="badge bg-light text-primary" (mousedown)="$event.stopImmediatePropagation();" title="Open link" i18n-title> <a routerLink="/documents/{{document.id}}" class="badge bg-light text-primary" (mousedown)="$event.stopImmediatePropagation();" title="Open link" i18n-title>
<i-bs width="0.9em" height="0.9em" name="file-text"></i-bs>&nbsp;<span>{{document.title}}</span> <i-bs width="0.9em" height="0.9em" name="file-text"></i-bs>&nbsp;<span>{{document.title}}</span>
</a> </a>
} @else {
<span class="badge bg-light text-muted" (click)="unselect(document)" title="Remove link" i18n-title>
<i-bs width="0.9em" height="0.9em" name="exclamation-triangle-fill"></i-bs>&nbsp;<span i18n>Not found</span>
</span>
}
</div> </div>
</ng-template> </ng-template>
<ng-template ng-loadingspinner-tmp> <ng-template ng-loadingspinner-tmp>

View File

@ -71,9 +71,9 @@ export class DocumentLinkComponent
.pipe(takeUntil(this.unsubscribeNotifier)) .pipe(takeUntil(this.unsubscribeNotifier))
.subscribe((documentResults) => { .subscribe((documentResults) => {
this.loading = false this.loading = false
this.selectedDocuments = documentIDs this.selectedDocuments = documentIDs.map((id) =>
.map((id) => documentResults.results.find((d) => d.id === id)) documentResults.results.find((d) => d.id === id)
.filter((d) => d) )
super.writeValue(documentIDs) super.writeValue(documentIDs)
}) })
} }
@ -114,7 +114,7 @@ export class DocumentLinkComponent
unselect(document: Document): void { unselect(document: Document): void {
this.selectedDocuments = this.selectedDocuments.filter( this.selectedDocuments = this.selectedDocuments.filter(
(d) => d.id !== document.id (d) => d && d.id !== document.id
) )
this.onChange(this.selectedDocuments.map((d) => d.id)) this.onChange(this.selectedDocuments.map((d) => d.id))
} }

View File

@ -5,7 +5,11 @@
</div> </div>
} @else { } @else {
@if (renderAsObject) { @if (renderAsObject) {
@if (previewText) {
<div class="bg-light p-3 overflow-auto whitespace-preserve" width="100%">{{previewText}}</div>
} @else {
<object [data]="previewURL | safeUrl" width="100%" class="bg-light" [class.p-2]="!isPdf"></object> <object [data]="previewURL | safeUrl" width="100%" class="bg-light" [class.p-2]="!isPdf"></object>
}
} @else { } @else {
@if (requiresPassword) { @if (requiresPassword) {
<div class="w-100 h-100 position-relative"> <div class="w-100 h-100 position-relative">

View File

@ -7,32 +7,3 @@
::ng-deep .popover.popover-preview { ::ng-deep .popover.popover-preview {
max-width: 32rem; max-width: 32rem;
} }
// https://github.com/paperless-ngx/paperless-ngx/issues/7920
// TODO: remove me
@mixin ff_txt {
.preview-popup-container {
width: 30rem !important;
height: 22rem !important;
background-color: #e7e7e7;
}
object {
mix-blend-mode: difference;
&.p-2 {
padding: 0 !important;
}
}
}
@-moz-document url-prefix() {
html[data-bs-theme='dark'] {
@include ff_txt;
}
html[data-bs-theme='auto'] {
@media screen and (prefers-color-scheme: dark) {
@include ff_txt;
}
}
}

View File

@ -9,13 +9,20 @@ import { provideHttpClientTesting } from '@angular/common/http/testing'
import { DocumentService } from 'src/app/services/rest/document.service' import { DocumentService } from 'src/app/services/rest/document.service'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { PdfViewerModule } from 'ng2-pdf-viewer' import { PdfViewerModule } from 'ng2-pdf-viewer'
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import {
HttpClient,
provideHttpClient,
withInterceptorsFromDi,
} from '@angular/common/http'
import { of, throwError } from 'rxjs'
const doc = { const doc = {
id: 10, id: 10,
title: 'Document 10', title: 'Document 10',
content: 'Cupcake ipsum dolor sit amet ice cream.', content: 'Cupcake ipsum dolor sit amet ice cream.',
original_file_name: 'sample.pdf', original_file_name: 'sample.pdf',
archived_file_name: 'sample.pdf',
mime_type: 'application/pdf',
} }
describe('PreviewPopupComponent', () => { describe('PreviewPopupComponent', () => {
@ -23,6 +30,7 @@ describe('PreviewPopupComponent', () => {
let fixture: ComponentFixture<PreviewPopupComponent> let fixture: ComponentFixture<PreviewPopupComponent>
let settingsService: SettingsService let settingsService: SettingsService
let documentService: DocumentService let documentService: DocumentService
let http: HttpClient
beforeEach(() => { beforeEach(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
@ -35,23 +43,22 @@ describe('PreviewPopupComponent', () => {
}) })
settingsService = TestBed.inject(SettingsService) settingsService = TestBed.inject(SettingsService)
documentService = TestBed.inject(DocumentService) documentService = TestBed.inject(DocumentService)
http = TestBed.inject(HttpClient)
jest jest
.spyOn(documentService, 'getPreviewUrl') .spyOn(documentService, 'getPreviewUrl')
.mockImplementation((id) => doc.original_file_name) .mockImplementation((id) => doc.original_file_name)
fixture = TestBed.createComponent(PreviewPopupComponent) fixture = TestBed.createComponent(PreviewPopupComponent)
component = fixture.componentInstance component = fixture.componentInstance
component.document = doc component.document = { ...doc }
fixture.detectChanges() fixture.detectChanges()
}) })
it('should guess if file is pdf by file name', () => { it('should correctly report if document is pdf', () => {
expect(component.isPdf).toBeTruthy()
component.document.archived_file_name = 'sample.pdf'
expect(component.isPdf).toBeTruthy() expect(component.isPdf).toBeTruthy()
component.document.mime_type = 'application/msword'
expect(component.isPdf).toBeTruthy() // still has archive file
component.document.archived_file_name = undefined component.document.archived_file_name = undefined
component.document.original_file_name = 'sample.txt'
expect(component.isPdf).toBeFalsy() expect(component.isPdf).toBeFalsy()
component.document.original_file_name = 'sample.pdf'
}) })
it('should return settings for native PDF viewer', () => { it('should return settings for native PDF viewer', () => {
@ -84,6 +91,8 @@ describe('PreviewPopupComponent', () => {
it('should fall back to object for non-pdf', () => { it('should fall back to object for non-pdf', () => {
component.document.original_file_name = 'sample.png' component.document.original_file_name = 'sample.png'
component.document.mime_type = 'image/png'
component.document.archived_file_name = undefined
fixture.detectChanges() fixture.detectChanges()
expect(fixture.debugElement.query(By.css('object'))).not.toBeNull() expect(fixture.debugElement.query(By.css('object'))).not.toBeNull()
}) })
@ -95,4 +104,22 @@ describe('PreviewPopupComponent', () => {
'Error loading preview' 'Error loading preview'
) )
}) })
it('should get text content from http if appropriate', () => {
component.document = {
...doc,
original_file_name: 'sample.txt',
mime_type: 'text/plain',
}
const httpSpy = jest.spyOn(http, 'get')
httpSpy.mockReturnValueOnce(
throwError(() => new Error('Error getting preview'))
)
component.init()
expect(httpSpy).toHaveBeenCalled()
expect(component.error).toBeTruthy()
httpSpy.mockReturnValueOnce(of('Preview text'))
component.init()
expect(component.previewText).toEqual('Preview text')
})
}) })

View File

@ -1,4 +1,6 @@
import { Component, Input } from '@angular/core' import { HttpClient } from '@angular/common/http'
import { Component, Input, OnDestroy } from '@angular/core'
import { first, Subject, takeUntil } from 'rxjs'
import { Document } from 'src/app/data/document' import { Document } from 'src/app/data/document'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings' import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { DocumentService } from 'src/app/services/rest/document.service' import { DocumentService } from 'src/app/services/rest/document.service'
@ -9,14 +11,26 @@ import { SettingsService } from 'src/app/services/settings.service'
templateUrl: './preview-popup.component.html', templateUrl: './preview-popup.component.html',
styleUrls: ['./preview-popup.component.scss'], styleUrls: ['./preview-popup.component.scss'],
}) })
export class PreviewPopupComponent { export class PreviewPopupComponent implements OnDestroy {
private _document: Document
@Input() @Input()
document: Document set document(document: Document) {
this._document = document
this.init()
}
get document(): Document {
return this._document
}
unsubscribeNotifier: Subject<any> = new Subject()
error = false error = false
requiresPassword: boolean = false requiresPassword: boolean = false
previewText: string
get renderAsObject(): boolean { get renderAsObject(): boolean {
return (this.isPdf && this.useNativePdfViewer) || !this.isPdf return (this.isPdf && this.useNativePdfViewer) || !this.isPdf
} }
@ -30,18 +44,38 @@ export class PreviewPopupComponent {
} }
get isPdf(): boolean { get isPdf(): boolean {
// We dont have time to retrieve metadata, make a best guess by file name
return ( return (
this.document?.original_file_name?.endsWith('.pdf') || this.document?.archived_file_name?.length > 0 ||
this.document?.archived_file_name?.endsWith('.pdf') this.document?.mime_type?.includes('pdf')
) )
} }
constructor( constructor(
private settingsService: SettingsService, private settingsService: SettingsService,
private documentService: DocumentService private documentService: DocumentService,
private http: HttpClient
) {} ) {}
ngOnDestroy(): void {
this.unsubscribeNotifier.next(this)
}
init() {
if (this.document.mime_type?.includes('text')) {
this.http
.get(this.previewURL, { responseType: 'text' })
.pipe(first(), takeUntil(this.unsubscribeNotifier))
.subscribe({
next: (res) => {
this.previewText = res.toString()
},
error: (err) => {
this.error = err
},
})
}
}
onError(event: any) { onError(event: any) {
if (event.name == 'PasswordException') { if (event.name == 'PasswordException') {
this.requiresPassword = true this.requiresPassword = true

View File

@ -350,14 +350,16 @@
</ng-template> </ng-template>
<ng-template #previewContent> <ng-template #previewContent>
@if (!metadata) { <div class="thumb-preview position-absolute pe-none" [class.fade]="previewLoaded">
<div class="w-100 h-100 d-flex align-items-center justify-content-center"> <img *ngIf="showThumbnailOverlay" [src]="thumbUrl | safeUrl" class="" width="100%" height="auto" alt="Document loading..." i18n-alt />
<div class="position-absolute top-0 start-0 m-2 p-2 d-flex align-items-center justify-content-center">
<div> <div>
<div class="spinner-border spinner-border-sm me-2" role="status"></div> <div class="spinner-border spinner-border-sm me-2" role="status"></div>
<ng-container i18n>Loading...</ng-container> <ng-container i18n>Loading...</ng-container>
</div> </div>
</div> </div>
} @else { </div>
@if (document) {
@switch (archiveContentRenderType) { @switch (archiveContentRenderType) {
@case (ContentRenderType.PDF) { @case (ContentRenderType.PDF) {
@if (!useNativePdfViewer) { @if (!useNativePdfViewer) {

View File

@ -64,6 +64,27 @@ textarea.rtl {
object-position: top; object-position: top;
} }
.whitespace-preserve { .thumb-preview {
white-space: preserve; top: 0;
left: 0;
width: 100%;
height: calc(100vh - 160px);
@media screen and (min-width: 768px) {
left: calc(.5 * var(--bs-gutter-x));
width: calc(100% - var(--bs-gutter-x));
}
overflow: hidden;
background-color: gray;
padding: 10px 8px; // border
z-index: 1000;
> div {
mix-blend-mode: difference;
}
> img {
filter: blur(1px);
}
} }

View File

@ -774,6 +774,15 @@ describe('DocumentDetailComponent', () => {
expect(component.previewNumPages).toEqual(1000) expect(component.previewNumPages).toEqual(1000)
}) })
it('should include delay of 300ms after previewloaded before showing pdf', fakeAsync(() => {
initNormally()
expect(component.previewLoaded).toBeFalsy()
component.pdfPreviewLoaded({ numPages: 1000 } as any)
expect(component.previewNumPages).toEqual(1000)
tick(300)
expect(component.previewLoaded).toBeTruthy()
}))
it('should support zoom controls', () => { it('should support zoom controls', () => {
initNormally() initNormally()
component.onZoomSelect({ target: { value: '1' } } as any) // from select component.onZoomSelect({ target: { value: '1' } } as any) // from select
@ -921,7 +930,7 @@ describe('DocumentDetailComponent', () => {
it('should display built-in pdf viewer if not disabled', () => { it('should display built-in pdf viewer if not disabled', () => {
initNormally() initNormally()
component.metadata = { has_archive_version: true } component.document.archived_file_name = 'file.pdf'
jest.spyOn(settingsService, 'get').mockReturnValue(false) jest.spyOn(settingsService, 'get').mockReturnValue(false)
expect(component.useNativePdfViewer).toBeFalsy() expect(component.useNativePdfViewer).toBeFalsy()
fixture.detectChanges() fixture.detectChanges()
@ -930,7 +939,7 @@ describe('DocumentDetailComponent', () => {
it('should display native pdf viewer if enabled', () => { it('should display native pdf viewer if enabled', () => {
initNormally() initNormally()
component.metadata = { has_archive_version: true } component.document.archived_file_name = 'file.pdf'
jest.spyOn(settingsService, 'get').mockReturnValue(true) jest.spyOn(settingsService, 'get').mockReturnValue(true)
expect(component.useNativePdfViewer).toBeTruthy() expect(component.useNativePdfViewer).toBeTruthy()
fixture.detectChanges() fixture.detectChanges()
@ -1072,8 +1081,8 @@ describe('DocumentDetailComponent', () => {
}) })
it('should change preview element by render type', () => { it('should change preview element by render type', () => {
component.metadata = { has_archive_version: true }
initNormally() initNormally()
component.document.archived_file_name = 'file.pdf'
fixture.detectChanges() fixture.detectChanges()
expect(component.archiveContentRenderType).toEqual( expect(component.archiveContentRenderType).toEqual(
component.ContentRenderType.PDF component.ContentRenderType.PDF
@ -1082,10 +1091,8 @@ describe('DocumentDetailComponent', () => {
fixture.debugElement.query(By.css('pdf-viewer-container')) fixture.debugElement.query(By.css('pdf-viewer-container'))
).not.toBeUndefined() ).not.toBeUndefined()
component.metadata = { component.document.archived_file_name = undefined
has_archive_version: false, component.document.mime_type = 'text/plain'
original_mime_type: 'text/plain',
}
fixture.detectChanges() fixture.detectChanges()
expect(component.archiveContentRenderType).toEqual( expect(component.archiveContentRenderType).toEqual(
component.ContentRenderType.Text component.ContentRenderType.Text
@ -1094,10 +1101,7 @@ describe('DocumentDetailComponent', () => {
fixture.debugElement.query(By.css('div.preview-sticky')) fixture.debugElement.query(By.css('div.preview-sticky'))
).not.toBeUndefined() ).not.toBeUndefined()
component.metadata = { component.document.mime_type = 'image/jpeg'
has_archive_version: false,
original_mime_type: 'image/jpg',
}
fixture.detectChanges() fixture.detectChanges()
expect(component.archiveContentRenderType).toEqual( expect(component.archiveContentRenderType).toEqual(
component.ContentRenderType.Image component.ContentRenderType.Image
@ -1105,12 +1109,8 @@ describe('DocumentDetailComponent', () => {
expect( expect(
fixture.debugElement.query(By.css('.preview-sticky img')) fixture.debugElement.query(By.css('.preview-sticky img'))
).not.toBeUndefined() ).not.toBeUndefined()
;(component.document.mime_type =
component.metadata = { 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'),
has_archive_version: false,
original_mime_type:
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
}
fixture.detectChanges() fixture.detectChanges()
expect(component.archiveContentRenderType).toEqual( expect(component.archiveContentRenderType).toEqual(
component.ContentRenderType.Other component.ContentRenderType.Other
@ -1221,6 +1221,14 @@ describe('DocumentDetailComponent', () => {
) )
expect(saveSpy).toHaveBeenCalled() expect(saveSpy).toHaveBeenCalled()
jest.spyOn(openDocumentsService, 'isDirty').mockReturnValue(true)
jest.spyOn(component, 'hasNext').mockReturnValue(true)
const saveNextSpy = jest.spyOn(component, 'saveEditNext')
document.dispatchEvent(
new KeyboardEvent('keydown', { key: 's', ctrlKey: true, shiftKey: true })
)
expect(saveNextSpy).toHaveBeenCalled()
const closeSpy = jest.spyOn(component, 'close') const closeSpy = jest.spyOn(component, 'close')
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'escape' })) document.dispatchEvent(new KeyboardEvent('keydown', { key: 'escape' }))
expect(closeSpy).toHaveBeenCalled() expect(closeSpy).toHaveBeenCalled()

View File

@ -133,9 +133,11 @@ export class DocumentDetailComponent
title: string title: string
titleSubject: Subject<string> = new Subject() titleSubject: Subject<string> = new Subject()
previewUrl: string previewUrl: string
thumbUrl: string
previewText: string previewText: string
downloadUrl: string downloadUrl: string
downloadOriginalUrl: string downloadOriginalUrl: string
previewLoaded: boolean = false
tiffURL: string tiffURL: string
tiffError: string tiffError: string
@ -225,15 +227,17 @@ export class DocumentDetailComponent
} }
get archiveContentRenderType(): ContentRenderType { get archiveContentRenderType(): ContentRenderType {
return this.getRenderType( return this.document?.archived_file_name
this.metadata?.has_archive_version ? this.getRenderType('application/pdf')
? 'application/pdf' : this.getRenderType(this.document?.mime_type)
: this.metadata?.original_mime_type
)
} }
get originalContentRenderType(): ContentRenderType { get originalContentRenderType(): ContentRenderType {
return this.getRenderType(this.metadata?.original_mime_type) return this.getRenderType(this.document?.mime_type)
}
get showThumbnailOverlay(): boolean {
return this.settings.get(SETTINGS_KEYS.DOCUMENT_EDITING_OVERLAY_THUMBNAIL)
} }
private getRenderType(mimeType: string): ContentRenderType { private getRenderType(mimeType: string): ContentRenderType {
@ -345,6 +349,7 @@ export class DocumentDetailComponent
}` }`
}, },
}) })
this.thumbUrl = this.documentsService.getThumbUrl(documentId)
return this.documentsService.get(documentId) return this.documentsService.get(documentId)
}) })
) )
@ -510,6 +515,16 @@ export class DocumentDetailComponent
.subscribe(() => { .subscribe(() => {
if (this.openDocumentService.isDirty(this.document)) this.save() if (this.openDocumentService.isDirty(this.document)) this.save()
}) })
this.hotKeyService
.addShortcut({
keys: 'control.shift.s',
description: $localize`Save and close / next`,
})
.pipe(takeUntil(this.unsubscribeNotifier))
.subscribe(() => {
if (this.openDocumentService.isDirty(this.document)) this.saveEditNext()
})
} }
ngOnDestroy(): void { ngOnDestroy(): void {
@ -543,6 +558,9 @@ export class DocumentDetailComponent
.subscribe({ .subscribe({
next: (result) => { next: (result) => {
this.metadata = result this.metadata = result
if (this.archiveContentRenderType !== ContentRenderType.PDF) {
this.previewLoaded = true
}
if (this.archiveContentRenderType === ContentRenderType.TIFF) { if (this.archiveContentRenderType === ContentRenderType.TIFF) {
this.tryRenderTiff() this.tryRenderTiff()
} }
@ -719,7 +737,10 @@ export class DocumentDetailComponent
next: (docValues) => { next: (docValues) => {
// in case data changed while saving eg removing inbox_tags // in case data changed while saving eg removing inbox_tags
this.documentForm.patchValue(docValues) this.documentForm.patchValue(docValues)
this.store.next(this.documentForm.value) const newValues = Object.assign({}, this.documentForm.value)
newValues.tags = [...docValues.tags]
newValues.custom_fields = [...docValues.custom_fields]
this.store.next(newValues)
this.openDocumentService.setDirty(this.document, false) this.openDocumentService.setDirty(this.document, false)
this.openDocumentService.save() this.openDocumentService.save()
this.toastService.showInfo($localize`Document saved successfully.`) this.toastService.showInfo($localize`Document saved successfully.`)
@ -909,11 +930,15 @@ export class DocumentDetailComponent
pdfPreviewLoaded(pdf: PDFDocumentProxy) { pdfPreviewLoaded(pdf: PDFDocumentProxy) {
this.previewNumPages = pdf.numPages this.previewNumPages = pdf.numPages
if (this.password) this.requiresPassword = false if (this.password) this.requiresPassword = false
setTimeout(() => {
this.previewLoaded = true
}, 300)
} }
onError(event) { onError(event) {
if (event.name == 'PasswordException') { if (event.name == 'PasswordException') {
this.requiresPassword = true this.requiresPassword = true
this.previewLoaded = true
} }
} }

View File

@ -1,6 +1,6 @@
<div class="card mb-3 shadow-sm bg-light" [class.card-selected]="selected" [class.document-card]="selectable" [class.popover-hidden]="popoverHidden" (mouseleave)="mouseLeaveCard()"> <div class="card mb-3 shadow-sm bg-light" [class.card-selected]="selected" [class.document-card]="selectable" [class.popover-hidden]="popoverHidden" (mouseleave)="mouseLeaveCard()">
<div class="row g-0"> <div class="row g-0">
<div class="col-md-2 doc-img-background rounded-start" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)" (dblclick)="dblClickDocument.emit()"> <div class="col-md-2 doc-img-container rounded-start" (click)="this.toggleSelected.emit($event)" (dblclick)="dblClickDocument.emit()">
<img [src]="getThumbUrl()" class="card-img doc-img border-end rounded-start" [class.inverted]="getIsThumbInverted()"> <img [src]="getThumbUrl()" class="card-img doc-img border-end rounded-start" [class.inverted]="getIsThumbInverted()">
<div class="border-end border-bottom bg-light document-card-check"> <div class="border-end border-bottom bg-light document-card-check">

View File

@ -2,7 +2,7 @@
overflow-wrap: anywhere; overflow-wrap: anywhere;
} }
.doc-img-background { .doc-img-container {
position: relative; position: relative;
} }
@ -11,7 +11,6 @@
object-position: top left; object-position: top left;
height: 100%; height: 100%;
position: absolute; position: absolute;
mix-blend-mode: multiply;
} }
.card-title { .card-title {
@ -49,18 +48,6 @@
display: block; display: block;
} }
.card-selected {
border-color: var(--bs-primary);
.document-card-check {
display: block;
}
}
.doc-img-background-selected {
background-color: var(--pngx-primary-faded);
}
.card-info { .card-info {
line-height: 1; line-height: 1;

View File

@ -1,7 +1,7 @@
<div class="col p-2 h-100"> <div class="col p-2 h-100">
<div class="card h-100 shadow-sm document-card" [class.card-selected]="selected" [class.popover-hidden]="popoverHidden" (mouseleave)="mouseLeaveCard()"> <div class="card h-100 shadow-sm document-card" [class.card-selected]="selected" [class.popover-hidden]="popoverHidden" (mouseleave)="mouseLeaveCard()">
<div class="border-bottom doc-img-container" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)" (dblclick)="dblClickDocument.emit(this)"> <div class="border-bottom doc-img-container rounded-top" (click)="this.toggleSelected.emit($event)" (dblclick)="dblClickDocument.emit(this)">
<img class="card-img doc-img rounded-top" [class.inverted]="getIsThumbInverted()" [src]="getThumbUrl()"> <img class="card-img doc-img" [class.inverted]="getIsThumbInverted()" [src]="getThumbUrl()">
<div class="border-end border-bottom bg-light py-1 px-2 document-card-check"> <div class="border-end border-bottom bg-light py-1 px-2 document-card-check">
<div class="form-check"> <div class="form-check">

View File

@ -6,7 +6,6 @@
object-fit: cover; object-fit: cover;
object-position: top left; object-position: top left;
height: 180px; height: 180px;
mix-blend-mode: multiply;
} }
.document-card-check { .document-card-check {
@ -40,18 +39,6 @@
top: 142px; top: 142px;
} }
.card-selected {
border-color:var(--bs-primary);
.document-card-check {
display: block;
}
}
.doc-img-background-selected {
background-color: var(--pngx-primary-faded);
}
.card-info { .card-info {
line-height: 1; line-height: 1;

View File

@ -1204,7 +1204,7 @@ describe('FilterEditorComponent', () => {
const tagButton = tagsFilterableDropdown.queryAll( const tagButton = tagsFilterableDropdown.queryAll(
By.directive(ToggleableDropdownButtonComponent) By.directive(ToggleableDropdownButtonComponent)
)[0] )[0]
tagButton.triggerEventHandler('toggle') tagButton.triggerEventHandler('toggled')
fixture.detectChanges() fixture.detectChanges()
expect(component.filterRules).toEqual([ expect(component.filterRules).toEqual([
{ {
@ -1222,8 +1222,8 @@ describe('FilterEditorComponent', () => {
const tagButtons = tagsFilterableDropdown.queryAll( const tagButtons = tagsFilterableDropdown.queryAll(
By.directive(ToggleableDropdownButtonComponent) By.directive(ToggleableDropdownButtonComponent)
) )
tagButtons[1].triggerEventHandler('toggle') tagButtons[1].triggerEventHandler('toggled')
tagButtons[2].triggerEventHandler('toggle') tagButtons[2].triggerEventHandler('toggled')
fixture.detectChanges() fixture.detectChanges()
expect(component.filterRules).toEqual([ expect(component.filterRules).toEqual([
{ {
@ -1273,8 +1273,8 @@ describe('FilterEditorComponent', () => {
const correspondentButtons = correspondentsFilterableDropdown.queryAll( const correspondentButtons = correspondentsFilterableDropdown.queryAll(
By.directive(ToggleableDropdownButtonComponent) By.directive(ToggleableDropdownButtonComponent)
) )
correspondentButtons[1].triggerEventHandler('toggle') correspondentButtons[1].triggerEventHandler('toggled')
correspondentButtons[2].triggerEventHandler('toggle') correspondentButtons[2].triggerEventHandler('toggled')
fixture.detectChanges() fixture.detectChanges()
expect(component.filterRules).toEqual([ expect(component.filterRules).toEqual([
{ {
@ -1312,7 +1312,7 @@ describe('FilterEditorComponent', () => {
const notAssignedButton = correspondentsFilterableDropdown.queryAll( const notAssignedButton = correspondentsFilterableDropdown.queryAll(
By.directive(ToggleableDropdownButtonComponent) By.directive(ToggleableDropdownButtonComponent)
)[0] )[0]
notAssignedButton.triggerEventHandler('toggle') notAssignedButton.triggerEventHandler('toggled')
fixture.detectChanges() fixture.detectChanges()
expect(component.filterRules).toEqual([ expect(component.filterRules).toEqual([
{ {
@ -1330,8 +1330,8 @@ describe('FilterEditorComponent', () => {
const documentTypeButtons = documentTypesFilterableDropdown.queryAll( const documentTypeButtons = documentTypesFilterableDropdown.queryAll(
By.directive(ToggleableDropdownButtonComponent) By.directive(ToggleableDropdownButtonComponent)
) )
documentTypeButtons[1].triggerEventHandler('toggle') documentTypeButtons[1].triggerEventHandler('toggled')
documentTypeButtons[2].triggerEventHandler('toggle') documentTypeButtons[2].triggerEventHandler('toggled')
fixture.detectChanges() fixture.detectChanges()
expect(component.filterRules).toEqual([ expect(component.filterRules).toEqual([
{ {
@ -1369,7 +1369,7 @@ describe('FilterEditorComponent', () => {
const notAssignedButton = docTypesFilterableDropdown.queryAll( const notAssignedButton = docTypesFilterableDropdown.queryAll(
By.directive(ToggleableDropdownButtonComponent) By.directive(ToggleableDropdownButtonComponent)
)[0] )[0]
notAssignedButton.triggerEventHandler('toggle') notAssignedButton.triggerEventHandler('toggled')
fixture.detectChanges() fixture.detectChanges()
expect(component.filterRules).toEqual([ expect(component.filterRules).toEqual([
{ {
@ -1387,8 +1387,8 @@ describe('FilterEditorComponent', () => {
const storagePathButtons = storagePathFilterableDropdown.queryAll( const storagePathButtons = storagePathFilterableDropdown.queryAll(
By.directive(ToggleableDropdownButtonComponent) By.directive(ToggleableDropdownButtonComponent)
) )
storagePathButtons[1].triggerEventHandler('toggle') storagePathButtons[1].triggerEventHandler('toggled')
storagePathButtons[2].triggerEventHandler('toggle') storagePathButtons[2].triggerEventHandler('toggled')
fixture.detectChanges() fixture.detectChanges()
expect(component.filterRules).toEqual([ expect(component.filterRules).toEqual([
{ {
@ -1426,7 +1426,7 @@ describe('FilterEditorComponent', () => {
const notAssignedButton = storagePathsFilterableDropdown.queryAll( const notAssignedButton = storagePathsFilterableDropdown.queryAll(
By.directive(ToggleableDropdownButtonComponent) By.directive(ToggleableDropdownButtonComponent)
)[0] )[0]
notAssignedButton.triggerEventHandler('toggle') notAssignedButton.triggerEventHandler('toggled')
fixture.detectChanges() fixture.detectChanges()
expect(component.filterRules).toEqual([ expect(component.filterRules).toEqual([
{ {

View File

@ -150,6 +150,8 @@ export interface Document extends ObjectWithPermissions {
added?: Date added?: Date
mime_type?: string
deleted_at?: Date deleted_at?: Date
original_file_name?: string original_file_name?: string

View File

@ -61,6 +61,8 @@ export const SETTINGS_KEYS = {
DEFAULT_PERMS_EDIT_GROUPS: 'general-settings:permissions:default-edit-groups', DEFAULT_PERMS_EDIT_GROUPS: 'general-settings:permissions:default-edit-groups',
DOCUMENT_EDITING_REMOVE_INBOX_TAGS: DOCUMENT_EDITING_REMOVE_INBOX_TAGS:
'general-settings:document-editing:remove-inbox-tags', 'general-settings:document-editing:remove-inbox-tags',
DOCUMENT_EDITING_OVERLAY_THUMBNAIL:
'general-settings:document-editing:overlay-thumbnail',
SEARCH_DB_ONLY: 'general-settings:search:db-only', SEARCH_DB_ONLY: 'general-settings:search:db-only',
SEARCH_FULL_TYPE: 'general-settings:search:more-link', SEARCH_FULL_TYPE: 'general-settings:search:more-link',
EMPTY_TRASH_DELAY: 'trash_delay', EMPTY_TRASH_DELAY: 'trash_delay',
@ -229,6 +231,11 @@ export const SETTINGS: UiSetting[] = [
type: 'boolean', type: 'boolean',
default: false, default: false,
}, },
{
key: SETTINGS_KEYS.DOCUMENT_EDITING_OVERLAY_THUMBNAIL,
type: 'boolean',
default: true,
},
{ {
key: SETTINGS_KEYS.SEARCH_DB_ONLY, key: SETTINGS_KEYS.SEARCH_DB_ONLY,
type: 'boolean', type: 'boolean',

View File

@ -599,14 +599,17 @@ describe('DocumentListViewService', () => {
it('should not filter out custom fields if settings not initialized', () => { it('should not filter out custom fields if settings not initialized', () => {
const customFields = ['custom_field_1', 'custom_field_2'] const customFields = ['custom_field_1', 'custom_field_2']
documentListViewService.displayFields = customFields as any documentListViewService.displayFields = customFields as any
settingsService.displayFieldsInitialized = false
expect(documentListViewService.displayFields).toEqual(customFields) expect(documentListViewService.displayFields).toEqual(customFields)
jest.spyOn(settingsService, 'allDisplayFields', 'get').mockReturnValue([ jest.spyOn(settingsService, 'allDisplayFields', 'get').mockReturnValue([
{ id: DisplayField.ADDED, name: 'Added' }, { id: DisplayField.ADDED, name: 'Added' },
{ id: DisplayField.TITLE, name: 'Title' }, { id: DisplayField.TITLE, name: 'Title' },
{ id: 'custom_field_1', name: 'Custom Field 1' }, { id: 'custom_field_1', name: 'Custom Field 1' },
] as any) ] as any)
settingsService.displayFieldsInitialized = true settingsService.displayFieldsInit.emit(true)
expect(documentListViewService.displayFields).toEqual(['custom_field_1'])
// will now filter on set
documentListViewService.displayFields = customFields as any
expect(documentListViewService.displayFields).toEqual(['custom_field_1']) expect(documentListViewService.displayFields).toEqual(['custom_field_1'])
}) })
}) })

View File

@ -20,6 +20,10 @@ import { paramsFromViewState, paramsToViewState } from '../utils/query-params'
import { DocumentService, SelectionData } from './rest/document.service' import { DocumentService, SelectionData } from './rest/document.service'
import { SettingsService } from './settings.service' import { SettingsService } from './settings.service'
const LIST_DEFAULT_DISPLAY_FIELDS: DisplayField[] = DEFAULT_DISPLAY_FIELDS.map(
(f) => f.id
).filter((f) => f !== DisplayField.ADDED)
/** /**
* Captures the current state of the list view. * Captures the current state of the list view.
*/ */
@ -102,6 +106,8 @@ export class DocumentListViewService {
private _activeSavedViewId: number = null private _activeSavedViewId: number = null
private displayFieldsInitialized: boolean = false
get activeSavedViewId() { get activeSavedViewId() {
return this._activeSavedViewId return this._activeSavedViewId
} }
@ -134,6 +140,19 @@ export class DocumentListViewService {
localStorage.removeItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG) localStorage.removeItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG)
} }
} }
this.settings.displayFieldsInit.subscribe(() => {
this.displayFieldsInitialized = true
if (this.activeListViewState.displayFields) {
this.activeListViewState.displayFields =
this.activeListViewState.displayFields.filter(
(field) =>
this.settings.allDisplayFields.find((f) => f.id === field) !==
undefined
)
this.saveDocumentListView()
}
})
} }
private defaultListViewState(): ListViewState { private defaultListViewState(): ListViewState {
@ -415,23 +434,17 @@ export class DocumentListViewService {
} }
get displayFields(): DisplayField[] { get displayFields(): DisplayField[] {
let fields = return this.activeListViewState.displayFields ?? LIST_DEFAULT_DISPLAY_FIELDS
this.activeListViewState.displayFields ??
DEFAULT_DISPLAY_FIELDS.map((f) => f.id)
if (!this.activeListViewState.displayFields) {
fields = fields.filter((f) => f !== DisplayField.ADDED)
} }
return this.settings.displayFieldsInitialized
? fields.filter( set displayFields(fields: DisplayField[]) {
this.activeListViewState.displayFields = this.displayFieldsInitialized
? fields?.filter(
(field) => (field) =>
this.settings.allDisplayFields.find((f) => f.id === field) !== this.settings.allDisplayFields.find((f) => f.id === field) !==
undefined undefined
) )
: fields : fields
}
set displayFields(fields: DisplayField[]) {
this.activeListViewState.displayFields = fields
this.saveDocumentListView() this.saveDocumentListView()
} }

View File

@ -274,7 +274,7 @@ export class SettingsService {
public get allDisplayFields(): Array<{ id: DisplayField; name: string }> { public get allDisplayFields(): Array<{ id: DisplayField; name: string }> {
return this._allDisplayFields return this._allDisplayFields
} }
public displayFieldsInitialized: boolean = false public displayFieldsInit: EventEmitter<boolean> = new EventEmitter()
constructor( constructor(
rendererFactory: RendererFactory2, rendererFactory: RendererFactory2,
@ -382,10 +382,10 @@ export class SettingsService {
} }
}) })
) )
this.displayFieldsInitialized = true this.displayFieldsInit.emit(true)
}) })
} else { } else {
this.displayFieldsInitialized = true this.displayFieldsInit.emit(true)
} }
} }

View File

@ -5,7 +5,7 @@ export const environment = {
apiBaseUrl: document.baseURI + 'api/', apiBaseUrl: document.baseURI + 'api/',
apiVersion: '5', apiVersion: '5',
appTitle: 'Paperless-ngx', appTitle: 'Paperless-ngx',
version: '2.13.0', version: '2.13.5',
webSocketHost: window.location.host, webSocketHost: window.location.host,
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:', webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
webSocketBaseUrl: base_url.pathname + 'ws/', webSocketBaseUrl: base_url.pathname + 'ws/',

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">إزالة الرابط</target> <target state="translated">إزالة الرابط</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">فتح الرابط</target> <target state="translated">فتح الرابط</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Отваряне на връзка</target> <target state="translated">Отваряне на връзка</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">Eliminar enllaç</target> <target state="translated">Eliminar enllaç</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Obre enllaç</target> <target state="translated">Obre enllaç</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="translated">No trobat</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -3605,7 +3605,7 @@
</context-group> </context-group>
<target state="final">Fehler beim Speichern des Feldes.</target> <target state="final">Fehler beim Speichern des Feldes.</target>
</trans-unit> </trans-unit>
<trans-unit id="4465085913683915434" datatype="html"> <trans-unit id="4465085913683915434" datatype="html" approved="yes">
<source>True</source> <source>True</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
@ -3619,9 +3619,9 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">79</context> <context context-type="linenumber">79</context>
</context-group> </context-group>
<target state="translated">Wahr</target> <target state="final">Wahr</target>
</trans-unit> </trans-unit>
<trans-unit id="3800326155195149498" datatype="html"> <trans-unit id="3800326155195149498" datatype="html" approved="yes">
<source>False</source> <source>False</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
@ -3635,15 +3635,15 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">80</context> <context context-type="linenumber">80</context>
</context-group> </context-group>
<target state="translated">Falsch</target> <target state="final">Falsch</target>
</trans-unit> </trans-unit>
<trans-unit id="7551700625201096185" datatype="html"> <trans-unit id="7551700625201096185" datatype="html" approved="yes">
<source>Search docs...</source> <source>Search docs...</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
<target state="translated">Suche Dokumente...</target> <target state="final">Suche Dokumente...</target>
</trans-unit> </trans-unit>
<trans-unit id="3184700926171002527" datatype="html" approved="yes"> <trans-unit id="3184700926171002527" datatype="html" approved="yes">
<source>Any</source> <source>Any</source>
@ -3685,29 +3685,29 @@
</context-group> </context-group>
<target state="final">Alle</target> <target state="final">Alle</target>
</trans-unit> </trans-unit>
<trans-unit id="1496549861742963591" datatype="html"> <trans-unit id="1496549861742963591" datatype="html" approved="yes">
<source>Not</source> <source>Not</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">131</context> <context context-type="linenumber">131</context>
</context-group> </context-group>
<target state="translated">Nicht</target> <target state="final">Nicht</target>
</trans-unit> </trans-unit>
<trans-unit id="6548676277933116532" datatype="html"> <trans-unit id="6548676277933116532" datatype="html" approved="yes">
<source>Add query</source> <source>Add query</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">150</context> <context context-type="linenumber">150</context>
</context-group> </context-group>
<target state="translated">Abfrage hinzufügen</target> <target state="final">Abfrage hinzufügen</target>
</trans-unit> </trans-unit>
<trans-unit id="5599577087865387184" datatype="html"> <trans-unit id="5599577087865387184" datatype="html" approved="yes">
<source>Add expression</source> <source>Add expression</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">153</context>
</context-group> </context-group>
<target state="translated">Ausdruck hinzufügen</target> <target state="final">Ausdruck hinzufügen</target>
</trans-unit> </trans-unit>
<trans-unit id="6052766076365105714" datatype="html" approved="yes"> <trans-unit id="6052766076365105714" datatype="html" approved="yes">
<source>now</source> <source>now</source>
@ -4513,13 +4513,13 @@
</context-group> </context-group>
<target state="final">Pfad</target> <target state="final">Pfad</target>
</trans-unit> </trans-unit>
<trans-unit id="2816147949408898105" datatype="html"> <trans-unit id="2816147949408898105" datatype="html" approved="yes">
<source>See &lt;a target=&apos;_blank&apos; href=&apos;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&apos;&gt;the documentation&lt;/a&gt;.</source> <source>See &lt;a target=&apos;_blank&apos; href=&apos;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&apos;&gt;the documentation&lt;/a&gt;.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="translated">Siehe &lt;a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'&gt;Dokumentation&lt;/a&gt;.</target> <target state="final">Siehe &lt;a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'&gt;Dokumentation&lt;/a&gt;.</target>
</trans-unit> </trans-unit>
<trans-unit id="1295614462098694869" datatype="html" approved="yes"> <trans-unit id="1295614462098694869" datatype="html" approved="yes">
<source>Preview</source> <source>Preview</source>
@ -4533,29 +4533,29 @@
</context-group> </context-group>
<target state="final">Vorschau</target> <target state="final">Vorschau</target>
</trans-unit> </trans-unit>
<trans-unit id="8057014866157903311" datatype="html"> <trans-unit id="8057014866157903311" datatype="html" approved="yes">
<source>Path test failed</source> <source>Path test failed</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">30</context> <context context-type="linenumber">30</context>
</context-group> </context-group>
<target state="translated">Pfadüberprüfung fehlgeschlagen</target> <target state="final">Pfadüberprüfung fehlgeschlagen</target>
</trans-unit> </trans-unit>
<trans-unit id="9116034231465034307" datatype="html"> <trans-unit id="9116034231465034307" datatype="html" approved="yes">
<source>No document selected</source> <source>No document selected</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">32</context> <context context-type="linenumber">32</context>
</context-group> </context-group>
<target state="translated">Kein Dokument ausgewählt</target> <target state="final">Kein Dokument ausgewählt</target>
</trans-unit> </trans-unit>
<trans-unit id="2083498114116917092" datatype="html"> <trans-unit id="2083498114116917092" datatype="html" approved="yes">
<source>Search for a document</source> <source>Search for a document</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">38</context> <context context-type="linenumber">38</context>
</context-group> </context-group>
<target state="translated">Ein Dokument suchen</target> <target state="final">Ein Dokument suchen</target>
</trans-unit> </trans-unit>
<trans-unit id="6423278459497515329" datatype="html" approved="yes"> <trans-unit id="6423278459497515329" datatype="html" approved="yes">
<source>No documents found</source> <source>No documents found</source>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="final">Verknüpfung entfernen</target> <target state="final">Verknüpfung entfernen</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html" approved="yes"> <trans-unit id="1388712764439031120" datatype="html" approved="yes">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,13 +5342,21 @@
</context-group> </context-group>
<target state="final">Link öffnen</target> <target state="final">Link öffnen</target>
</trans-unit> </trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="6595008830732269870" datatype="html" approved="yes">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="final">Nicht gefunden</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html" approved="yes">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.ts</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
<target state="translated">Nach Dokumenten suchen</target> <target state="final">Nach Dokumenten suchen</target>
</trans-unit> </trans-unit>
<trans-unit id="8627133593113147800" datatype="html" approved="yes"> <trans-unit id="8627133593113147800" datatype="html" approved="yes">
<source>Selected items</source> <source>Selected items</source>
@ -8088,13 +8100,13 @@
</context-group> </context-group>
<target state="final">Ohne Tag</target> <target state="final">Ohne Tag</target>
</trans-unit> </trans-unit>
<trans-unit id="8644099678903817943" datatype="html"> <trans-unit id="8644099678903817943" datatype="html" approved="yes">
<source>Custom fields query</source> <source>Custom fields query</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
<context context-type="linenumber">238</context> <context context-type="linenumber">238</context>
</context-group> </context-group>
<target state="translated">Benutzerdefinierte Feldabfrage</target> <target state="final">Benutzerdefinierte Feldabfrage</target>
</trans-unit> </trans-unit>
<trans-unit id="6523384805359286307" datatype="html" approved="yes"> <trans-unit id="6523384805359286307" datatype="html" approved="yes">
<source>Title: <x id="PH" equiv-text="rule.value"/></source> <source>Title: <x id="PH" equiv-text="rule.value"/></source>
@ -8284,7 +8296,7 @@
</context-group> </context-group>
<target state="final">Datentyp</target> <target state="final">Datentyp</target>
</trans-unit> </trans-unit>
<trans-unit id="6209318295562170730" datatype="html"> <trans-unit id="6209318295562170730" datatype="html" approved="yes">
<source>Filter Documents (<x id="INTERPOLATION" equiv-text="{{ field.document_count }}"/>)</source> <source>Filter Documents (<x id="INTERPOLATION" equiv-text="{{ field.document_count }}"/>)</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/custom-fields/custom-fields.component.html</context> <context context-type="sourcefile">src/app/components/manage/custom-fields/custom-fields.component.html</context>
@ -8306,7 +8318,7 @@
<context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context> <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
<context context-type="linenumber">85</context> <context context-type="linenumber">85</context>
</context-group> </context-group>
<target state="translated">Dokumente filtern (<x id="INTERPOLATION" equiv-text="{{ field.document_count }}"/>)</target> <target state="final">Dokumente filtern (<x id="INTERPOLATION" equiv-text="{{ field.document_count }}"/>)</target>
</trans-unit> </trans-unit>
<trans-unit id="651372623796033489" datatype="html" approved="yes"> <trans-unit id="651372623796033489" datatype="html" approved="yes">
<source>No fields defined.</source> <source>No fields defined.</source>
@ -8396,21 +8408,21 @@
</context-group> </context-group>
<target state="final">Konto hinzufügen</target> <target state="final">Konto hinzufügen</target>
</trans-unit> </trans-unit>
<trans-unit id="5088684330574277786" datatype="html"> <trans-unit id="5088684330574277786" datatype="html" approved="yes">
<source>Connect Gmail Account</source> <source>Connect Gmail Account</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/mail/mail.component.html</context> <context context-type="sourcefile">src/app/components/manage/mail/mail.component.html</context>
<context context-type="linenumber">18</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<target state="translated">Gmail-Konto verbinden</target> <target state="final">Gmail-Konto verbinden</target>
</trans-unit> </trans-unit>
<trans-unit id="6630732552154686829" datatype="html"> <trans-unit id="6630732552154686829" datatype="html" approved="yes">
<source>Connect Outlook Account</source> <source>Connect Outlook Account</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/mail/mail.component.html</context> <context context-type="sourcefile">src/app/components/manage/mail/mail.component.html</context>
<context context-type="linenumber">23</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
<target state="translated">Outlook-Konto verbinden</target> <target state="final">Outlook-Konto verbinden</target>
</trans-unit> </trans-unit>
<trans-unit id="2188854519574316630" datatype="html" approved="yes"> <trans-unit id="2188854519574316630" datatype="html" approved="yes">
<source>Server</source> <source>Server</source>
@ -8488,21 +8500,21 @@
</context-group> </context-group>
<target state="final">Fehler beim Abrufen der E-Mail-Regeln</target> <target state="final">Fehler beim Abrufen der E-Mail-Regeln</target>
</trans-unit> </trans-unit>
<trans-unit id="763945516325093575" datatype="html"> <trans-unit id="763945516325093575" datatype="html" approved="yes">
<source>OAuth2 authentication success</source> <source>OAuth2 authentication success</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/mail/mail.component.ts</context> <context context-type="sourcefile">src/app/components/manage/mail/mail.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
<target state="translated">OAuth2-Authentifizierung erfolgreich</target> <target state="final">OAuth2-Authentifizierung erfolgreich</target>
</trans-unit> </trans-unit>
<trans-unit id="9022978370268070156" datatype="html"> <trans-unit id="9022978370268070156" datatype="html" approved="yes">
<source>OAuth2 authentication failed, see logs for details</source> <source>OAuth2 authentication failed, see logs for details</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/mail/mail.component.ts</context> <context context-type="sourcefile">src/app/components/manage/mail/mail.component.ts</context>
<context context-type="linenumber">112</context> <context context-type="linenumber">112</context>
</context-group> </context-group>
<target state="translated">OAuth2-Authentifizierung fehlgeschlagen, siehe Protokolle für Details</target> <target state="final">OAuth2-Authentifizierung fehlgeschlagen, siehe Protokolle für Details</target>
</trans-unit> </trans-unit>
<trans-unit id="6327501535846658797" datatype="html" approved="yes"> <trans-unit id="6327501535846658797" datatype="html" approved="yes">
<source>Saved account &quot;<x id="PH" equiv-text="newMailAccount.name"/>&quot;.</source> <source>Saved account &quot;<x id="PH" equiv-text="newMailAccount.name"/>&quot;.</source>
@ -8988,93 +9000,93 @@
</context-group> </context-group>
<target state="final">Zur Startseite</target> <target state="final">Zur Startseite</target>
</trans-unit> </trans-unit>
<trans-unit id="7088714514100361567" datatype="html"> <trans-unit id="7088714514100361567" datatype="html" approved="yes">
<source>Equal to</source> <source>Equal to</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context> <context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
<context context-type="linenumber">24</context> <context context-type="linenumber">24</context>
</context-group> </context-group>
<target state="translated">Ist gleich</target> <target state="final">Ist gleich</target>
</trans-unit> </trans-unit>
<trans-unit id="2841739558138901231" datatype="html"> <trans-unit id="2841739558138901231" datatype="html" approved="yes">
<source>In</source> <source>In</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context> <context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
<context context-type="linenumber">25</context> <context context-type="linenumber">25</context>
</context-group> </context-group>
<target state="translated">In</target> <target state="final">In</target>
</trans-unit> </trans-unit>
<trans-unit id="6504828068656625171" datatype="html"> <trans-unit id="6504828068656625171" datatype="html" approved="yes">
<source>Is null</source> <source>Is null</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context> <context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
<target state="translated">Ist null</target> <target state="final">Ist null</target>
</trans-unit> </trans-unit>
<trans-unit id="4112599358351148632" datatype="html"> <trans-unit id="4112599358351148632" datatype="html" approved="yes">
<source>Exists</source> <source>Exists</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context> <context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
<context context-type="linenumber">27</context> <context context-type="linenumber">27</context>
</context-group> </context-group>
<target state="translated">Existiert</target> <target state="final">Existiert</target>
</trans-unit> </trans-unit>
<trans-unit id="6238291467288576076" datatype="html"> <trans-unit id="6238291467288576076" datatype="html" approved="yes">
<source>Contains</source> <source>Contains</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context> <context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
<context context-type="linenumber">28</context> <context context-type="linenumber">28</context>
</context-group> </context-group>
<target state="translated">Enthält</target> <target state="final">Enthält</target>
</trans-unit> </trans-unit>
<trans-unit id="870133374397538941" datatype="html"> <trans-unit id="870133374397538941" datatype="html" approved="yes">
<source>Contains (case-insensitive)</source> <source>Contains (case-insensitive)</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context> <context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
<context context-type="linenumber">29</context> <context context-type="linenumber">29</context>
</context-group> </context-group>
<target state="translated">Enthält (beachte Groß- und Kleinschreibung)</target> <target state="final">Enthält (beachte Groß- und Kleinschreibung)</target>
</trans-unit> </trans-unit>
<trans-unit id="7732309408488818531" datatype="html"> <trans-unit id="7732309408488818531" datatype="html" approved="yes">
<source>Greater than</source> <source>Greater than</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context> <context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
<context context-type="linenumber">30</context> <context context-type="linenumber">30</context>
</context-group> </context-group>
<target state="translated">Größer als</target> <target state="final">Größer als</target>
</trans-unit> </trans-unit>
<trans-unit id="9087788064443057357" datatype="html"> <trans-unit id="9087788064443057357" datatype="html" approved="yes">
<source>Greater than or equal to</source> <source>Greater than or equal to</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context> <context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
<context context-type="linenumber">31</context> <context context-type="linenumber">31</context>
</context-group> </context-group>
<target state="translated">Größer oder gleich</target> <target state="final">Größer oder gleich</target>
</trans-unit> </trans-unit>
<trans-unit id="5995604223909447366" datatype="html"> <trans-unit id="5995604223909447366" datatype="html" approved="yes">
<source>Less than</source> <source>Less than</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context> <context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
<context context-type="linenumber">32</context> <context context-type="linenumber">32</context>
</context-group> </context-group>
<target state="translated">Kleiner als</target> <target state="final">Kleiner als</target>
</trans-unit> </trans-unit>
<trans-unit id="6989379963430864867" datatype="html"> <trans-unit id="6989379963430864867" datatype="html" approved="yes">
<source>Less than or equal to</source> <source>Less than or equal to</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context> <context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
<target state="translated">Kleiner oder gleich</target> <target state="final">Kleiner oder gleich</target>
</trans-unit> </trans-unit>
<trans-unit id="2348971518300945764" datatype="html"> <trans-unit id="2348971518300945764" datatype="html" approved="yes">
<source>Range</source> <source>Range</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context> <context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
<context context-type="linenumber">34</context> <context context-type="linenumber">34</context>
</context-group> </context-group>
<target state="translated">Bereich</target> <target state="final">Bereich</target>
</trans-unit> </trans-unit>
<trans-unit id="969459137986754249" datatype="html" approved="yes"> <trans-unit id="969459137986754249" datatype="html" approved="yes">
<source>Boolean</source> <source>Boolean</source>

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Abrir enlace</target> <target state="translated">Abrir enlace</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">Poista linkki</target> <target state="translated">Poista linkki</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Avaa linkki</target> <target state="translated">Avaa linkki</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">Supprimer le lien</target> <target state="translated">Supprimer le lien</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html" approved="yes"> <trans-unit id="1388712764439031120" datatype="html" approved="yes">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="final">Ouvrir le lien</target> <target state="final">Ouvrir le lien</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="translated">Non trouvé</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">פתח קישור</target> <target state="translated">פתח קישור</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Link megnyitása</target> <target state="translated">Link megnyitása</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">Hapus tautan</target> <target state="translated">Hapus tautan</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Buka tautan</target> <target state="translated">Buka tautan</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -3619,7 +3619,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">79</context> <context context-type="linenumber">79</context>
</context-group> </context-group>
<target state="needs-translation">True</target> <target state="translated">Vero</target>
</trans-unit> </trans-unit>
<trans-unit id="3800326155195149498" datatype="html"> <trans-unit id="3800326155195149498" datatype="html">
<source>False</source> <source>False</source>
@ -3635,7 +3635,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">80</context> <context context-type="linenumber">80</context>
</context-group> </context-group>
<target state="needs-translation">False</target> <target state="translated">Falso</target>
</trans-unit> </trans-unit>
<trans-unit id="7551700625201096185" datatype="html"> <trans-unit id="7551700625201096185" datatype="html">
<source>Search docs...</source> <source>Search docs...</source>
@ -3643,7 +3643,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
<target state="needs-translation">Search docs...</target> <target state="translated">Ricerca di documenti...</target>
</trans-unit> </trans-unit>
<trans-unit id="3184700926171002527" datatype="html"> <trans-unit id="3184700926171002527" datatype="html">
<source>Any</source> <source>Any</source>
@ -3691,7 +3691,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">131</context> <context context-type="linenumber">131</context>
</context-group> </context-group>
<target state="needs-translation">Not</target> <target state="translated">Non</target>
</trans-unit> </trans-unit>
<trans-unit id="6548676277933116532" datatype="html"> <trans-unit id="6548676277933116532" datatype="html">
<source>Add query</source> <source>Add query</source>
@ -3699,7 +3699,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">150</context> <context context-type="linenumber">150</context>
</context-group> </context-group>
<target state="needs-translation">Add query</target> <target state="translated">Aggiungi query</target>
</trans-unit> </trans-unit>
<trans-unit id="5599577087865387184" datatype="html"> <trans-unit id="5599577087865387184" datatype="html">
<source>Add expression</source> <source>Add expression</source>
@ -3707,7 +3707,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">153</context>
</context-group> </context-group>
<target state="needs-translation">Add expression</target> <target state="translated">Aggiungi espressione</target>
</trans-unit> </trans-unit>
<trans-unit id="6052766076365105714" datatype="html"> <trans-unit id="6052766076365105714" datatype="html">
<source>now</source> <source>now</source>
@ -4135,7 +4135,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<target state="needs-translation">Order</target> <target state="translated">Priorità</target>
</trans-unit> </trans-unit>
<trans-unit id="4816216590591222133" datatype="html"> <trans-unit id="4816216590591222133" datatype="html">
<source>Enabled</source> <source>Enabled</source>
@ -4519,7 +4519,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">See &lt;a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'&gt;the documentation&lt;/a&gt;.</target> <target state="translated">Vedi &lt;a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'&gt;la documentazione&lt;/a&gt;.</target>
</trans-unit> </trans-unit>
<trans-unit id="1295614462098694869" datatype="html"> <trans-unit id="1295614462098694869" datatype="html">
<source>Preview</source> <source>Preview</source>
@ -4539,7 +4539,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">30</context> <context context-type="linenumber">30</context>
</context-group> </context-group>
<target state="needs-translation">Path test failed</target> <target state="translated">Test percorso non riuscito</target>
</trans-unit> </trans-unit>
<trans-unit id="9116034231465034307" datatype="html"> <trans-unit id="9116034231465034307" datatype="html">
<source>No document selected</source> <source>No document selected</source>
@ -4547,7 +4547,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">32</context> <context context-type="linenumber">32</context>
</context-group> </context-group>
<target state="needs-translation">No document selected</target> <target state="translated">Nessun documento selezionato</target>
</trans-unit> </trans-unit>
<trans-unit id="2083498114116917092" datatype="html"> <trans-unit id="2083498114116917092" datatype="html">
<source>Search for a document</source> <source>Search for a document</source>
@ -4555,7 +4555,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">38</context> <context context-type="linenumber">38</context>
</context-group> </context-group>
<target state="needs-translation">Search for a document</target> <target state="translated">Ricerca di un documento</target>
</trans-unit> </trans-unit>
<trans-unit id="6423278459497515329" datatype="html"> <trans-unit id="6423278459497515329" datatype="html">
<source>No documents found</source> <source>No documents found</source>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">Rimuovi link</target> <target state="translated">Rimuovi link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Apri link</target> <target state="translated">Apri link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="translated">Non trovato</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">リンクを削除</target> <target state="translated">リンクを削除</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">リンクを開く</target> <target state="translated">リンクを開く</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">링크 삭제</target> <target state="translated">링크 삭제</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">링크 열기</target> <target state="translated">링크 열기</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Atvērt saiti</target> <target state="translated">Atvērt saiti</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">Link verwijderen</target> <target state="translated">Link verwijderen</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Link openen</target> <target state="translated">Link openen</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">Usuń link</target> <target state="translated">Usuń link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Otwórz link</target> <target state="translated">Otwórz link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">Remover link</target> <target state="translated">Remover link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Abrir link</target> <target state="translated">Abrir link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Открыть ссылку</target> <target state="translated">Открыть ссылку</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">Odstrani povezavo</target> <target state="translated">Odstrani povezavo</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Odpri povezavo</target> <target state="translated">Odpri povezavo</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Otvori vezu</target> <target state="translated">Otvori vezu</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -1743,7 +1743,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">385</context> <context context-type="linenumber">385</context>
</context-group> </context-group>
<target state="needs-translation">Table</target> <target state="translated">Tabell</target>
</trans-unit> </trans-unit>
<trans-unit id="4236040382842528005" datatype="html"> <trans-unit id="4236040382842528005" datatype="html">
<source>Small Cards</source> <source>Small Cards</source>
@ -1771,7 +1771,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">17</context>
</context-group> </context-group>
<target state="needs-translation">Show</target> <target state="translated">Visa</target>
</trans-unit> </trans-unit>
<trans-unit id="5607669932062416162" datatype="html"> <trans-unit id="5607669932062416162" datatype="html">
<source>Default</source> <source>Default</source>
@ -2303,7 +2303,7 @@
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
<context context-type="linenumber">223</context> <context context-type="linenumber">223</context>
</context-group> </context-group>
<target state="needs-translation">Trash</target> <target state="translated">Papperskorg</target>
</trans-unit> </trans-unit>
<trans-unit id="3818027200170621545" datatype="html"> <trans-unit id="3818027200170621545" datatype="html">
<source>Manage trashed documents that are pending deletion.</source> <source>Manage trashed documents that are pending deletion.</source>
@ -3307,7 +3307,7 @@
<context context-type="sourcefile">src/app/components/app-frame/global-search/global-search.component.html</context> <context context-type="sourcefile">src/app/components/app-frame/global-search/global-search.component.html</context>
<context context-type="linenumber">131</context> <context context-type="linenumber">131</context>
</context-group> </context-group>
<target state="needs-translation">Users</target> <target state="translated">Användare</target>
</trans-unit> </trans-unit>
<trans-unit id="searchResults.groups" datatype="html"> <trans-unit id="searchResults.groups" datatype="html">
<source>Groups</source> <source>Groups</source>
@ -3315,7 +3315,7 @@
<context context-type="sourcefile">src/app/components/app-frame/global-search/global-search.component.html</context> <context context-type="sourcefile">src/app/components/app-frame/global-search/global-search.component.html</context>
<context context-type="linenumber">138</context> <context context-type="linenumber">138</context>
</context-group> </context-group>
<target state="needs-translation">Groups</target> <target state="translated">Grupper</target>
</trans-unit> </trans-unit>
<trans-unit id="searchResults.customFields" datatype="html"> <trans-unit id="searchResults.customFields" datatype="html">
<source>Custom fields</source> <source>Custom fields</source>
@ -3471,7 +3471,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">7,8</context> <context context-type="linenumber">7,8</context>
</context-group> </context-group>
<target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{totalPages}}"/></target> <target state="translated">av <x id="INTERPOLATION" equiv-text="{{totalPages}}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="6903610408081711391" datatype="html"> <trans-unit id="6903610408081711391" datatype="html">
<source>Pages to remove</source> <source>Pages to remove</source>
@ -3487,7 +3487,7 @@
<context context-type="sourcefile">src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html</context>
<context context-type="linenumber">9</context> <context context-type="linenumber">9</context>
</context-group> </context-group>
<target state="needs-translation">Documents:</target> <target state="translated">Dokument:</target>
</trans-unit> </trans-unit>
<trans-unit id="7508164375697837821" datatype="html"> <trans-unit id="7508164375697837821" datatype="html">
<source>Use metadata from:</source> <source>Use metadata from:</source>
@ -3579,7 +3579,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.html</context>
<context context-type="linenumber">21</context> <context context-type="linenumber">21</context>
</context-group> </context-group>
<target state="needs-translation">Create new field</target> <target state="translated">Skapa nytt fält</target>
</trans-unit> </trans-unit>
<trans-unit id="6973528734330066202" datatype="html"> <trans-unit id="6973528734330066202" datatype="html">
<source>Saved field &quot;<x id="PH" equiv-text="newField.name"/>&quot;.</source> <source>Saved field &quot;<x id="PH" equiv-text="newField.name"/>&quot;.</source>
@ -3939,7 +3939,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component.ts</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component.ts</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
</context-group> </context-group>
<target state="needs-translation">Edit custom field</target> <target state="translated">Redigera anpassat fält</target>
</trans-unit> </trans-unit>
<trans-unit id="6672809941092516947" datatype="html" approved="yes"> <trans-unit id="6672809941092516947" datatype="html" approved="yes">
<source>Create new document type</source> <source>Create new document type</source>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">Ta bort länk</target> <target state="translated">Ta bort länk</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,13 +5342,21 @@
</context-group> </context-group>
<target state="translated">Öppna länk</target> <target state="translated">Öppna länk</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.ts</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
<target state="needs-translation">Search for documents</target> <target state="translated">Sök efter dokument</target>
</trans-unit> </trans-unit>
<trans-unit id="8627133593113147800" datatype="html"> <trans-unit id="8627133593113147800" datatype="html">
<source>Selected items</source> <source>Selected items</source>
@ -5641,7 +5653,7 @@
<context context-type="sourcefile">src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html</context>
<context context-type="linenumber">23</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
<target state="needs-translation">Confirm Password</target> <target state="translated">Bekräfta lösenord</target>
</trans-unit> </trans-unit>
<trans-unit id="7554924397178347823" datatype="html"> <trans-unit id="7554924397178347823" datatype="html">
<source>API Auth Token</source> <source>API Auth Token</source>
@ -5893,7 +5905,7 @@
<context context-type="sourcefile">src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts</context> <context context-type="sourcefile">src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
<target state="needs-translation">1 day</target> <target state="translated">1 dag</target>
</trans-unit> </trans-unit>
<trans-unit id="8542568275115626925" datatype="html"> <trans-unit id="8542568275115626925" datatype="html">
<source>7 days</source> <source>7 days</source>
@ -5933,7 +5945,7 @@
<context context-type="sourcefile">src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts</context> <context context-type="sourcefile">src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
<target state="needs-translation"><x id="PH" equiv-text="days"/> days</target> <target state="translated"><x id="PH" equiv-text="days"/> dagar</target>
</trans-unit> </trans-unit>
<trans-unit id="2897042887615940599" datatype="html"> <trans-unit id="2897042887615940599" datatype="html">
<source>Error deleting link</source> <source>Error deleting link</source>
@ -6013,7 +6025,7 @@
<context context-type="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
<context context-type="linenumber">41</context> <context context-type="linenumber">41</context>
</context-group> </context-group>
<target state="needs-translation">Database</target> <target state="translated">Databas</target>
</trans-unit> </trans-unit>
<trans-unit id="5611592591303869712" datatype="html"> <trans-unit id="5611592591303869712" datatype="html">
<source>Status</source> <source>Status</source>
@ -6033,7 +6045,7 @@
<context context-type="sourcefile">src/app/components/manage/workflows/workflows.component.html</context> <context context-type="sourcefile">src/app/components/manage/workflows/workflows.component.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<target state="needs-translation">Status</target> <target state="translated">Status</target>
</trans-unit> </trans-unit>
<trans-unit id="2256165083739630668" datatype="html"> <trans-unit id="2256165083739630668" datatype="html">
<source>Migration Status</source> <source>Migration Status</source>
@ -6073,7 +6085,7 @@
<context context-type="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
<target state="needs-translation">Tasks</target> <target state="translated">Uppgifter</target>
</trans-unit> </trans-unit>
<trans-unit id="6911698235105017958" datatype="html"> <trans-unit id="6911698235105017958" datatype="html">
<source>Redis Status</source> <source>Redis Status</source>
@ -6145,7 +6157,7 @@
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context>
<context context-type="linenumber">40</context> <context context-type="linenumber">40</context>
</context-group> </context-group>
<target state="needs-translation">Welcome to <x id="PH" equiv-text="environment.appTitle"/></target> <target state="translated">Välkommen till <x id="PH" equiv-text="environment.appTitle"/></target>
</trans-unit> </trans-unit>
<trans-unit id="1325877348738783391" datatype="html"> <trans-unit id="1325877348738783391" datatype="html">
<source>Dashboard updated</source> <source>Dashboard updated</source>
@ -6880,7 +6892,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">502</context> <context context-type="linenumber">502</context>
</context-group> </context-group>
<target state="needs-translation">Save document</target> <target state="translated">Spara dokument</target>
</trans-unit> </trans-unit>
<trans-unit id="5758784066858623886" datatype="html"> <trans-unit id="5758784066858623886" datatype="html">
<source>Error retrieving metadata</source> <source>Error retrieving metadata</source>
@ -9130,7 +9142,7 @@
<context context-type="sourcefile">src/app/data/custom-field.ts</context> <context context-type="sourcefile">src/app/data/custom-field.ts</context>
<context context-type="linenumber">42</context> <context context-type="linenumber">42</context>
</context-group> </context-group>
<target state="needs-translation">Url</target> <target state="translated">URL</target>
</trans-unit> </trans-unit>
<trans-unit id="3650316326183661476" datatype="html"> <trans-unit id="3650316326183661476" datatype="html">
<source>Document Link</source> <source>Document Link</source>
@ -9283,7 +9295,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context> <context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
<target state="needs-translation">Language</target> <target state="translated">Språk</target>
</trans-unit> </trans-unit>
<trans-unit id="1713271461473302108" datatype="html"> <trans-unit id="1713271461473302108" datatype="html">
<source>Mode</source> <source>Mode</source>
@ -9475,7 +9487,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">14</context> <context context-type="linenumber">14</context>
</context-group> </context-group>
<target state="needs-translation">%s year ago</target> <target state="translated">%s år sedan</target>
</trans-unit> </trans-unit>
<trans-unit id="3393387677918927062" datatype="html"> <trans-unit id="3393387677918927062" datatype="html">
<source>%s years ago</source> <source>%s years ago</source>
@ -9483,7 +9495,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<target state="needs-translation">%s years ago</target> <target state="translated">%s år sedan</target>
</trans-unit> </trans-unit>
<trans-unit id="3053246523831285824" datatype="html"> <trans-unit id="3053246523831285824" datatype="html">
<source>%s month ago</source> <source>%s month ago</source>
@ -9491,7 +9503,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<target state="needs-translation">%s month ago</target> <target state="translated">%s månad sedan</target>
</trans-unit> </trans-unit>
<trans-unit id="1158628882375251480" datatype="html"> <trans-unit id="1158628882375251480" datatype="html">
<source>%s months ago</source> <source>%s months ago</source>
@ -9499,7 +9511,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">20</context> <context context-type="linenumber">20</context>
</context-group> </context-group>
<target state="needs-translation">%s months ago</target> <target state="translated">%s månader sedan</target>
</trans-unit> </trans-unit>
<trans-unit id="7039133412826927309" datatype="html"> <trans-unit id="7039133412826927309" datatype="html">
<source>%s week ago</source> <source>%s week ago</source>
@ -9507,7 +9519,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">24</context> <context context-type="linenumber">24</context>
</context-group> </context-group>
<target state="needs-translation">%s week ago</target> <target state="translated">%s vecka sedan</target>
</trans-unit> </trans-unit>
<trans-unit id="2896962543647781653" datatype="html"> <trans-unit id="2896962543647781653" datatype="html">
<source>%s weeks ago</source> <source>%s weeks ago</source>
@ -9515,7 +9527,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">25</context> <context context-type="linenumber">25</context>
</context-group> </context-group>
<target state="needs-translation">%s weeks ago</target> <target state="translated">%s veckor sedan</target>
</trans-unit> </trans-unit>
<trans-unit id="91416192007234700" datatype="html"> <trans-unit id="91416192007234700" datatype="html">
<source>%s day ago</source> <source>%s day ago</source>
@ -9523,7 +9535,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">29</context> <context context-type="linenumber">29</context>
</context-group> </context-group>
<target state="needs-translation">%s day ago</target> <target state="translated">%s dag sedan</target>
</trans-unit> </trans-unit>
<trans-unit id="5601594741748068208" datatype="html"> <trans-unit id="5601594741748068208" datatype="html">
<source>%s days ago</source> <source>%s days ago</source>
@ -9531,7 +9543,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">30</context> <context context-type="linenumber">30</context>
</context-group> </context-group>
<target state="needs-translation">%s days ago</target> <target state="translated">%s dagar sedan</target>
</trans-unit> </trans-unit>
<trans-unit id="8387405724402999437" datatype="html"> <trans-unit id="8387405724402999437" datatype="html">
<source>%s hour ago</source> <source>%s hour ago</source>
@ -9539,7 +9551,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">34</context> <context context-type="linenumber">34</context>
</context-group> </context-group>
<target state="needs-translation">%s hour ago</target> <target state="translated">%s timme sedan</target>
</trans-unit> </trans-unit>
<trans-unit id="2008395012733474465" datatype="html"> <trans-unit id="2008395012733474465" datatype="html">
<source>%s hours ago</source> <source>%s hours ago</source>
@ -9547,7 +9559,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">35</context> <context context-type="linenumber">35</context>
</context-group> </context-group>
<target state="needs-translation">%s hours ago</target> <target state="translated">%s timmar sedan</target>
</trans-unit> </trans-unit>
<trans-unit id="5782387980670840884" datatype="html"> <trans-unit id="5782387980670840884" datatype="html">
<source>%s minute ago</source> <source>%s minute ago</source>
@ -9555,7 +9567,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">39</context> <context context-type="linenumber">39</context>
</context-group> </context-group>
<target state="needs-translation">%s minute ago</target> <target state="translated">%s minut sedan</target>
</trans-unit> </trans-unit>
<trans-unit id="7573942914011074807" datatype="html"> <trans-unit id="7573942914011074807" datatype="html">
<source>%s minutes ago</source> <source>%s minutes ago</source>
@ -9563,7 +9575,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">40</context> <context context-type="linenumber">40</context>
</context-group> </context-group>
<target state="needs-translation">%s minutes ago</target> <target state="translated">%s minuter sedan</target>
</trans-unit> </trans-unit>
<trans-unit id="4272436583644511364" datatype="html"> <trans-unit id="4272436583644511364" datatype="html">
<source>Just now</source> <source>Just now</source>
@ -9571,7 +9583,7 @@
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
<context context-type="linenumber">72</context> <context context-type="linenumber">72</context>
</context-group> </context-group>
<target state="needs-translation">Just now</target> <target state="translated">Just nu</target>
</trans-unit> </trans-unit>
<trans-unit id="7536524521722799066" datatype="html" approved="yes"> <trans-unit id="7536524521722799066" datatype="html" approved="yes">
<source>(no title)</source> <source>(no title)</source>
@ -9911,7 +9923,7 @@
<context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">166</context> <context context-type="linenumber">166</context>
</context-group> </context-group>
<target state="needs-translation">Norwegian</target> <target state="translated">Norska</target>
</trans-unit> </trans-unit>
<trans-unit id="792060551707690640" datatype="html" approved="yes"> <trans-unit id="792060551707690640" datatype="html" approved="yes">
<source>Polish</source> <source>Polish</source>

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">Видалити посилання</target> <target state="translated">Видалити посилання</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">Відкрити посилання</target> <target state="translated">Відкрити посилання</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -1743,7 +1743,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">385</context> <context context-type="linenumber">385</context>
</context-group> </context-group>
<target state="needs-translation">Table</target> <target state="translated">表格</target>
</trans-unit> </trans-unit>
<trans-unit id="4236040382842528005" datatype="html"> <trans-unit id="4236040382842528005" datatype="html">
<source>Small Cards</source> <source>Small Cards</source>
@ -2371,7 +2371,7 @@
<context context-type="sourcefile">src/app/components/admin/trash/trash.component.html</context> <context context-type="sourcefile">src/app/components/admin/trash/trash.component.html</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">89</context>
</context-group> </context-group>
<target state="needs-translation">{VAR_PLURAL, plural, =1 {One document in trash} other {<x id="INTERPOLATION"/> total documents in trash}}</target> <target state="translated">{VAR_PLURAL, plural, =1 {垃圾桶中有一份文件} other {垃圾桶中共有 <x id="INTERPOLATION"/> 份文件}}</target>
</trans-unit> </trans-unit>
<trans-unit id="9021887951960049161" datatype="html"> <trans-unit id="9021887951960049161" datatype="html">
<source>Confirm delete</source> <source>Confirm delete</source>
@ -3619,7 +3619,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">79</context> <context context-type="linenumber">79</context>
</context-group> </context-group>
<target state="needs-translation">True</target> <target state="translated">真</target>
</trans-unit> </trans-unit>
<trans-unit id="3800326155195149498" datatype="html"> <trans-unit id="3800326155195149498" datatype="html">
<source>False</source> <source>False</source>
@ -3635,7 +3635,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">80</context> <context context-type="linenumber">80</context>
</context-group> </context-group>
<target state="needs-translation">False</target> <target state="translated">假</target>
</trans-unit> </trans-unit>
<trans-unit id="7551700625201096185" datatype="html"> <trans-unit id="7551700625201096185" datatype="html">
<source>Search docs...</source> <source>Search docs...</source>
@ -3643,7 +3643,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
<target state="needs-translation">Search docs...</target> <target state="translated">搜索文档...</target>
</trans-unit> </trans-unit>
<trans-unit id="3184700926171002527" datatype="html"> <trans-unit id="3184700926171002527" datatype="html">
<source>Any</source> <source>Any</source>
@ -3691,7 +3691,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">131</context> <context context-type="linenumber">131</context>
</context-group> </context-group>
<target state="needs-translation">Not</target> <target state="translated">否</target>
</trans-unit> </trans-unit>
<trans-unit id="6548676277933116532" datatype="html"> <trans-unit id="6548676277933116532" datatype="html">
<source>Add query</source> <source>Add query</source>
@ -3699,7 +3699,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">150</context> <context context-type="linenumber">150</context>
</context-group> </context-group>
<target state="needs-translation">Add query</target> <target state="translated">添加查询</target>
</trans-unit> </trans-unit>
<trans-unit id="5599577087865387184" datatype="html"> <trans-unit id="5599577087865387184" datatype="html">
<source>Add expression</source> <source>Add expression</source>
@ -3707,7 +3707,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">153</context>
</context-group> </context-group>
<target state="needs-translation">Add expression</target> <target state="translated">添加表达式</target>
</trans-unit> </trans-unit>
<trans-unit id="6052766076365105714" datatype="html"> <trans-unit id="6052766076365105714" datatype="html">
<source>now</source> <source>now</source>
@ -4135,7 +4135,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<target state="needs-translation">Order</target> <target state="translated">顺序</target>
</trans-unit> </trans-unit>
<trans-unit id="4816216590591222133" datatype="html"> <trans-unit id="4816216590591222133" datatype="html">
<source>Enabled</source> <source>Enabled</source>
@ -4519,7 +4519,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">See &lt;a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'&gt;the documentation&lt;/a&gt;.</target> <target state="translated">请参阅 &lt;a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'&gt;文档&lt;/a&gt;。</target>
</trans-unit> </trans-unit>
<trans-unit id="1295614462098694869" datatype="html"> <trans-unit id="1295614462098694869" datatype="html">
<source>Preview</source> <source>Preview</source>
@ -4539,7 +4539,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">30</context> <context context-type="linenumber">30</context>
</context-group> </context-group>
<target state="needs-translation">Path test failed</target> <target state="translated">路径测试失败</target>
</trans-unit> </trans-unit>
<trans-unit id="9116034231465034307" datatype="html"> <trans-unit id="9116034231465034307" datatype="html">
<source>No document selected</source> <source>No document selected</source>
@ -4547,7 +4547,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">32</context> <context context-type="linenumber">32</context>
</context-group> </context-group>
<target state="needs-translation">No document selected</target> <target state="translated">没有选择文档</target>
</trans-unit> </trans-unit>
<trans-unit id="2083498114116917092" datatype="html"> <trans-unit id="2083498114116917092" datatype="html">
<source>Search for a document</source> <source>Search for a document</source>
@ -4555,7 +4555,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">38</context> <context context-type="linenumber">38</context>
</context-group> </context-group>
<target state="needs-translation">Search for a document</target> <target state="translated">搜索文档</target>
</trans-unit> </trans-unit>
<trans-unit id="6423278459497515329" datatype="html"> <trans-unit id="6423278459497515329" datatype="html">
<source>No documents found</source> <source>No documents found</source>
@ -4759,7 +4759,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
<target state="needs-translation">Add Trigger</target> <target state="translated">添加触发器</target>
</trans-unit> </trans-unit>
<trans-unit id="6882912390704300247" datatype="html"> <trans-unit id="6882912390704300247" datatype="html">
<source>Apply Actions:</source> <source>Apply Actions:</source>
@ -4767,7 +4767,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">73</context> <context context-type="linenumber">73</context>
</context-group> </context-group>
<target state="needs-translation">Apply Actions:</target> <target state="translated">应用操作:</target>
</trans-unit> </trans-unit>
<trans-unit id="51883444329775670" datatype="html"> <trans-unit id="51883444329775670" datatype="html">
<source>Add Action</source> <source>Add Action</source>
@ -4775,7 +4775,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">75</context> <context context-type="linenumber">75</context>
</context-group> </context-group>
<target state="needs-translation">Add Action</target> <target state="translated">添加动作</target>
</trans-unit> </trans-unit>
<trans-unit id="3288318211116868972" datatype="html"> <trans-unit id="3288318211116868972" datatype="html">
<source>Trigger type</source> <source>Trigger type</source>
@ -4783,7 +4783,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
<target state="needs-translation">Trigger type</target> <target state="translated">触发类型</target>
</trans-unit> </trans-unit>
<trans-unit id="8727727835543352574" datatype="html"> <trans-unit id="8727727835543352574" datatype="html">
<source>Trigger for documents that match <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>all<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/> filters specified below.</source> <source>Trigger for documents that match <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>all<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/> filters specified below.</source>
@ -4791,7 +4791,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">122</context>
</context-group> </context-group>
<target state="needs-translation">Trigger for documents that match <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>all<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/> filters specified below.</target> <target state="translated">触发匹配下面指定的 <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>所有<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/> 过滤器的文档。</target>
</trans-unit> </trans-unit>
<trans-unit id="7467799586957602479" datatype="html"> <trans-unit id="7467799586957602479" datatype="html">
<source>Filter filename</source> <source>Filter filename</source>
@ -4831,7 +4831,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
<target state="needs-translation">Apply to documents that match this path. Wildcards specified as * are allowed. Case-normalized.&lt;/a&gt;</target> <target state="translated">应用于匹配此路径的文档。允许指定为*的通配符。不区分大小写。&lt;/a&gt;</target>
</trans-unit> </trans-unit>
<trans-unit id="7468453896129193641" datatype="html"> <trans-unit id="7468453896129193641" datatype="html">
<source>Filter mail rule</source> <source>Filter mail rule</source>
@ -4847,7 +4847,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">129</context> <context context-type="linenumber">129</context>
</context-group> </context-group>
<target state="needs-translation">Apply to documents consumed via this mail rule.</target> <target state="translated">应用于通过此邮件规则消费的文档。</target>
</trans-unit> </trans-unit>
<trans-unit id="6840369584127435743" datatype="html"> <trans-unit id="6840369584127435743" datatype="html">
<source>Content matching algorithm</source> <source>Content matching algorithm</source>
@ -4855,7 +4855,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">132</context> <context context-type="linenumber">132</context>
</context-group> </context-group>
<target state="needs-translation">Content matching algorithm</target> <target state="translated">内容匹配算法</target>
</trans-unit> </trans-unit>
<trans-unit id="510635115034690805" datatype="html"> <trans-unit id="510635115034690805" datatype="html">
<source>Content matching pattern</source> <source>Content matching pattern</source>
@ -4863,7 +4863,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<target state="needs-translation">Content matching pattern</target> <target state="translated">内容匹配模式</target>
</trans-unit> </trans-unit>
<trans-unit id="3484236514968690689" datatype="html"> <trans-unit id="3484236514968690689" datatype="html">
<source>Has any of tags</source> <source>Has any of tags</source>
@ -4871,7 +4871,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">143</context> <context context-type="linenumber">143</context>
</context-group> </context-group>
<target state="needs-translation">Has any of tags</target> <target state="translated">有任何标签</target>
</trans-unit> </trans-unit>
<trans-unit id="5281365940563983618" datatype="html"> <trans-unit id="5281365940563983618" datatype="html">
<source>Has correspondent</source> <source>Has correspondent</source>
@ -4879,7 +4879,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">144</context> <context context-type="linenumber">144</context>
</context-group> </context-group>
<target state="needs-translation">Has correspondent</target> <target state="translated">已有联系人</target>
</trans-unit> </trans-unit>
<trans-unit id="4806713133917046341" datatype="html"> <trans-unit id="4806713133917046341" datatype="html">
<source>Has document type</source> <source>Has document type</source>
@ -4887,7 +4887,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">145</context> <context context-type="linenumber">145</context>
</context-group> </context-group>
<target state="needs-translation">Has document type</target> <target state="translated">有文档类型</target>
</trans-unit> </trans-unit>
<trans-unit id="6417103744331194518" datatype="html"> <trans-unit id="6417103744331194518" datatype="html">
<source>Action type</source> <source>Action type</source>
@ -4895,7 +4895,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">155</context> <context context-type="linenumber">155</context>
</context-group> </context-group>
<target state="needs-translation">Action type</target> <target state="translated">操作类型</target>
</trans-unit> </trans-unit>
<trans-unit id="6019822389883736115" datatype="html"> <trans-unit id="6019822389883736115" datatype="html">
<source>Assign title</source> <source>Assign title</source>
@ -4911,7 +4911,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">160</context> <context context-type="linenumber">160</context>
</context-group> </context-group>
<target state="needs-translation">Can include some placeholders, see &lt;a target='_blank' href='https://docs.paperless-ngx.com/usage/#workflows'&gt;documentation&lt;/a&gt;.</target> <target state="translated">可以包含一些占位符,请参阅 &lt;a target='_blank' href='https://docs.paperless-ngx.com/usage/#workflows'&gt;文档&lt;/a&gt;。</target>
</trans-unit> </trans-unit>
<trans-unit id="6528897010417701530" datatype="html"> <trans-unit id="6528897010417701530" datatype="html">
<source>Assign tags</source> <source>Assign tags</source>
@ -4967,7 +4967,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">216</context>
</context-group> </context-group>
<target state="needs-translation">Remove tags</target> <target state="translated">移除标签</target>
</trans-unit> </trans-unit>
<trans-unit id="7890599006071681081" datatype="html"> <trans-unit id="7890599006071681081" datatype="html">
<source>Remove all</source> <source>Remove all</source>
@ -4999,7 +4999,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">254</context> <context context-type="linenumber">254</context>
</context-group> </context-group>
<target state="needs-translation">Remove all</target> <target state="translated">移除全部</target>
</trans-unit> </trans-unit>
<trans-unit id="8636414563726517994" datatype="html"> <trans-unit id="8636414563726517994" datatype="html">
<source>Remove correspondents</source> <source>Remove correspondents</source>
@ -5007,7 +5007,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">222</context> <context context-type="linenumber">222</context>
</context-group> </context-group>
<target state="needs-translation">Remove correspondents</target> <target state="translated">移除所有通讯员</target>
</trans-unit> </trans-unit>
<trans-unit id="5305293055593064952" datatype="html"> <trans-unit id="5305293055593064952" datatype="html">
<source>Remove document types</source> <source>Remove document types</source>
@ -5015,7 +5015,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">228</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<target state="needs-translation">Remove document types</target> <target state="translated">移除所有文档类型</target>
</trans-unit> </trans-unit>
<trans-unit id="2400388879708187" datatype="html"> <trans-unit id="2400388879708187" datatype="html">
<source>Remove storage paths</source> <source>Remove storage paths</source>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="translated">删除链接</target> <target state="translated">删除链接</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="translated">打开链接</target> <target state="translated">打开链接</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">
@ -5461,7 +5473,7 @@
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context> <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
<context context-type="linenumber">41</context> <context context-type="linenumber">41</context>
</context-group> </context-group>
<target state="needs-translation">Filter documents with these Tags</target> <target state="translated">按标签过滤</target>
</trans-unit> </trans-unit>
<trans-unit id="5752465522295465624" datatype="html"> <trans-unit id="5752465522295465624" datatype="html">
<source>What&apos;s this?</source> <source>What&apos;s this?</source>
@ -5525,7 +5537,7 @@
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.ts</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.ts</context>
<context context-type="linenumber">75</context> <context context-type="linenumber">75</context>
</context-group> </context-group>
<target state="needs-translation">Any and all existing owner, user and group permissions will be replaced.</target> <target state="translated"/>
</trans-unit> </trans-unit>
<trans-unit id="5947558132119506443" datatype="html"> <trans-unit id="5947558132119506443" datatype="html">
<source>My documents</source> <source>My documents</source>

View File

@ -8,7 +8,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Close</target> <target state="translated">關閉</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html"> <trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source> <source>HH</source>
@ -16,7 +16,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">HH</target> <target state="translated">HH</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html"> <trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source> <source>Close</source>
@ -24,7 +24,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Close</target> <target state="translated">關閉</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.datepicker.select-month" datatype="html"> <trans-unit id="ngb.datepicker.select-month" datatype="html">
<source>Select month</source> <source>Select month</source>
@ -36,7 +36,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Select month</target> <target state="translated">選取月份</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.pagination.first" datatype="html"> <trans-unit id="ngb.pagination.first" datatype="html">
<source>««</source> <source>««</source>
@ -56,7 +56,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Previous month</target> <target state="translated">上個月</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html"> <trans-unit id="ngb.progressbar.value" datatype="html">
<source> <source>
@ -82,7 +82,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Hours</target> <target state="translated">小時</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.pagination.previous" datatype="html"> <trans-unit id="ngb.pagination.previous" datatype="html">
<source>«</source> <source>«</source>
@ -98,7 +98,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Previous</target> <target state="translated">上一個</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.timepicker.MM" datatype="html"> <trans-unit id="ngb.timepicker.MM" datatype="html">
<source>MM</source> <source>MM</source>
@ -106,7 +106,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">MM</target> <target state="translated">MM</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.pagination.next" datatype="html"> <trans-unit id="ngb.pagination.next" datatype="html">
<source>»</source> <source>»</source>
@ -126,7 +126,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Select year</target> <target state="translated">選擇年份</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.datepicker.next-month" datatype="html"> <trans-unit id="ngb.datepicker.next-month" datatype="html">
<source>Next month</source> <source>Next month</source>
@ -138,7 +138,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Next month</target> <target state="translated">下一個月</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.carousel.next" datatype="html"> <trans-unit id="ngb.carousel.next" datatype="html">
<source>Next</source> <source>Next</source>
@ -146,7 +146,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Next</target> <target state="translated">下一個</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.timepicker.minutes" datatype="html"> <trans-unit id="ngb.timepicker.minutes" datatype="html">
<source>Minutes</source> <source>Minutes</source>
@ -154,7 +154,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Minutes</target> <target state="translated">分鐘</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.pagination.last" datatype="html"> <trans-unit id="ngb.pagination.last" datatype="html">
<source>»»</source> <source>»»</source>
@ -170,7 +170,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">First</target> <target state="translated">第一頁</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.timepicker.increment-hours" datatype="html"> <trans-unit id="ngb.timepicker.increment-hours" datatype="html">
<source>Increment hours</source> <source>Increment hours</source>
@ -186,7 +186,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Previous</target> <target state="translated">上一頁</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.timepicker.decrement-hours" datatype="html"> <trans-unit id="ngb.timepicker.decrement-hours" datatype="html">
<source>Decrement hours</source> <source>Decrement hours</source>
@ -202,7 +202,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Next</target> <target state="translated">下一頁</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.timepicker.increment-minutes" datatype="html"> <trans-unit id="ngb.timepicker.increment-minutes" datatype="html">
<source>Increment minutes</source> <source>Increment minutes</source>
@ -218,7 +218,7 @@
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context> <context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
</context-group> </context-group>
<target state="needs-translation">Last</target> <target state="translated">最後一頁</target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.timepicker.decrement-minutes" datatype="html"> <trans-unit id="ngb.timepicker.decrement-minutes" datatype="html">
<source>Decrement minutes</source> <source>Decrement minutes</source>
@ -777,7 +777,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">51</context> <context context-type="linenumber">57</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context>
@ -5324,13 +5324,17 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Remove link</target> <target state="needs-translation">Remove link</target>
</trans-unit> </trans-unit>
<trans-unit id="1388712764439031120" datatype="html"> <trans-unit id="1388712764439031120" datatype="html">
<source>Open link</source> <source>Open link</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">45</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context>
@ -5338,6 +5342,14 @@
</context-group> </context-group>
<target state="needs-translation">Open link</target> <target state="needs-translation">Open link</target>
</trans-unit> </trans-unit>
<trans-unit id="6595008830732269870" datatype="html">
<source>Not found</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Not found</target>
</trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
<context-group purpose="location"> <context-group purpose="location">

View File

@ -490,9 +490,23 @@ ul.pagination {
.doc-img-container { .doc-img-container {
border: none !important; border: none !important;
border-top-left-radius: .25rem;
border-top-right-radius: .25rem;
overflow: hidden; overflow: hidden;
.doc-img {
overflow: visible;
}
}
.card-selected {
border-color:var(--bs-primary);
.document-card-check {
display: block !important;
}
.doc-img-container {
background-color: var(--pngx-primary-faded);
}
} }
table.table { table.table {
@ -666,6 +680,10 @@ code {
opacity: .5; opacity: .5;
} }
.whitespace-preserve {
white-space: preserve;
}
/* Animate items as they're being sorted. */ /* Animate items as they're being sorted. */
.cdk-drop-list-dragging .cdk-drag { .cdk-drop-list-dragging .cdk-drag {
transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
@ -705,6 +723,8 @@ i-bs svg {
vertical-align: text-bottom; vertical-align: text-bottom;
} }
.document-card .card-footer i-bs svg { .document-card {
.card-footer i-bs svg {
vertical-align: middle; vertical-align: middle;
} }
}

View File

@ -183,7 +183,7 @@ $form-check-radio-checked-bg-image-dark: url("data:image/svg+xml,<svg xmlns='htt
} }
.doc-img { .doc-img {
mix-blend-mode: normal !important; mix-blend-mode: normal;
border-radius: 0; border-radius: 0;
border-color: var(--bs-border-color); border-color: var(--bs-border-color);
filter: invert(10%); filter: invert(10%);
@ -201,6 +201,24 @@ $form-check-radio-checked-bg-image-dark: url("data:image/svg+xml,<svg xmlns='htt
mix-blend-mode: luminosity; mix-blend-mode: luminosity;
} }
@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {
// Safari does not like the filters on the image, see https://github.com/paperless-ngx/paperless-ngx/pull/8121
.doc-img-container {
background-color: #ffffff !important;
}
.doc-img {
filter: none !important;
box-shadow: inset 0px 0px 0px 10px rgba(0,0,0,1);
}
.doc-img.inverted {
filter: none !important;
mix-blend-mode: difference;
opacity: 0.95;
}
}
.paperless-input-select .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option:not(.ng-option-selected):hover, .paperless-input-select .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option:not(.ng-option-selected):hover,
.paperless-input-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked { .paperless-input-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked {
background-color: var(--bs-light) !important; background-color: var(--bs-light) !important;
@ -234,7 +252,7 @@ $form-check-radio-checked-bg-image-dark: url("data:image/svg+xml,<svg xmlns='htt
} }
.table-row-selected { .table-row-selected {
td, a { td, a:not(.badge) {
color: var(--pngx-primary-text-contrast) !important; color: var(--pngx-primary-text-contrast) !important;
} }
} }

View File

@ -51,6 +51,7 @@ class DocumentAdmin(GuardedModelAdmin):
"archive_filename", "archive_filename",
"archive_checksum", "archive_checksum",
"original_filename", "original_filename",
"deleted_at",
) )
list_display_links = ("title",) list_display_links = ("title",)
@ -77,6 +78,12 @@ class DocumentAdmin(GuardedModelAdmin):
created_.short_description = "Created" created_.short_description = "Created"
def get_queryset(self, request): # pragma: no cover
"""
Include trashed documents
"""
return Document.global_objects.all()
def delete_queryset(self, request, queryset): def delete_queryset(self, request, queryset):
from documents import index from documents import index

View File

@ -1,14 +1,21 @@
import os from pathlib import Path
from typing import TYPE_CHECKING
from typing import NoReturn
from zipfile import ZipFile from zipfile import ZipFile
from documents.models import Document from documents.models import Document
if TYPE_CHECKING:
from collections.abc import Callable
class BulkArchiveStrategy: class BulkArchiveStrategy:
def __init__(self, zipf: ZipFile, follow_formatting: bool = False): def __init__(self, zipf: ZipFile, follow_formatting: bool = False) -> None:
self.zipf = zipf self.zipf: ZipFile = zipf
if follow_formatting: if follow_formatting:
self.make_unique_filename = self._formatted_filepath self.make_unique_filename: Callable[..., Path | str] = (
self._formatted_filepath
)
else: else:
self.make_unique_filename = self._filename_only self.make_unique_filename = self._filename_only
@ -17,7 +24,7 @@ class BulkArchiveStrategy:
doc: Document, doc: Document,
archive: bool = False, archive: bool = False,
folder: str = "", folder: str = "",
): ) -> str:
""" """
Constructs a unique name for the given document to be used inside the Constructs a unique name for the given document to be used inside the
zip file. zip file.
@ -26,7 +33,7 @@ class BulkArchiveStrategy:
""" """
counter = 0 counter = 0
while True: while True:
filename = folder + doc.get_public_filename(archive, counter) filename: str = folder + doc.get_public_filename(archive, counter)
if filename in self.zipf.namelist(): if filename in self.zipf.namelist():
counter += 1 counter += 1
else: else:
@ -37,7 +44,7 @@ class BulkArchiveStrategy:
doc: Document, doc: Document,
archive: bool = False, archive: bool = False,
folder: str = "", folder: str = "",
): ) -> Path:
""" """
Constructs a full file path for the given document to be used inside Constructs a full file path for the given document to be used inside
the zipfile. the zipfile.
@ -45,24 +52,30 @@ class BulkArchiveStrategy:
The path is already unique, as handled when a document is consumed or updated The path is already unique, as handled when a document is consumed or updated
""" """
if archive and doc.has_archive_version: if archive and doc.has_archive_version:
in_archive_path = os.path.join(folder, doc.archive_filename) if TYPE_CHECKING:
assert doc.archive_filename is not None
in_archive_path: Path = Path(folder) / doc.archive_filename
else: else:
in_archive_path = os.path.join(folder, doc.filename) if TYPE_CHECKING:
assert doc.filename is not None
in_archive_path = Path(folder) / doc.filename
return in_archive_path return in_archive_path
def add_document(self, doc: Document): def add_document(self, doc: Document) -> NoReturn:
raise NotImplementedError # pragma: no cover raise NotImplementedError # pragma: no cover
class OriginalsOnlyStrategy(BulkArchiveStrategy): class OriginalsOnlyStrategy(BulkArchiveStrategy):
def add_document(self, doc: Document): def add_document(self, doc: Document) -> None:
self.zipf.write(doc.source_path, self.make_unique_filename(doc)) self.zipf.write(doc.source_path, self.make_unique_filename(doc))
class ArchiveOnlyStrategy(BulkArchiveStrategy): class ArchiveOnlyStrategy(BulkArchiveStrategy):
def add_document(self, doc: Document): def add_document(self, doc: Document) -> None:
if doc.has_archive_version: if doc.has_archive_version:
if TYPE_CHECKING:
assert doc.archive_path is not None
self.zipf.write( self.zipf.write(
doc.archive_path, doc.archive_path,
self.make_unique_filename(doc, archive=True), self.make_unique_filename(doc, archive=True),
@ -72,8 +85,10 @@ class ArchiveOnlyStrategy(BulkArchiveStrategy):
class OriginalAndArchiveStrategy(BulkArchiveStrategy): class OriginalAndArchiveStrategy(BulkArchiveStrategy):
def add_document(self, doc: Document): def add_document(self, doc: Document) -> None:
if doc.has_archive_version: if doc.has_archive_version:
if TYPE_CHECKING:
assert doc.archive_path is not None
self.zipf.write( self.zipf.write(
doc.archive_path, doc.archive_path,
self.make_unique_filename(doc, archive=True, folder="archive/"), self.make_unique_filename(doc, archive=True, folder="archive/"),

View File

@ -1,8 +1,9 @@
import hashlib import hashlib
import itertools import itertools
import logging import logging
import os
import tempfile import tempfile
from pathlib import Path
from typing import Literal
from celery import chain from celery import chain
from celery import chord from celery import chord
@ -25,10 +26,13 @@ from documents.tasks import bulk_update_documents
from documents.tasks import consume_file from documents.tasks import consume_file
from documents.tasks import update_document_archive_file from documents.tasks import update_document_archive_file
logger = logging.getLogger("paperless.bulk_edit") logger: logging.Logger = logging.getLogger("paperless.bulk_edit")
def set_correspondent(doc_ids: list[int], correspondent): def set_correspondent(
doc_ids: list[int],
correspondent: Correspondent,
) -> Literal["OK"]:
if correspondent: if correspondent:
correspondent = Correspondent.objects.only("pk").get(id=correspondent) correspondent = Correspondent.objects.only("pk").get(id=correspondent)
@ -45,7 +49,7 @@ def set_correspondent(doc_ids: list[int], correspondent):
return "OK" return "OK"
def set_storage_path(doc_ids: list[int], storage_path): def set_storage_path(doc_ids: list[int], storage_path: StoragePath) -> Literal["OK"]:
if storage_path: if storage_path:
storage_path = StoragePath.objects.only("pk").get(id=storage_path) storage_path = StoragePath.objects.only("pk").get(id=storage_path)
@ -66,7 +70,7 @@ def set_storage_path(doc_ids: list[int], storage_path):
return "OK" return "OK"
def set_document_type(doc_ids: list[int], document_type): def set_document_type(doc_ids: list[int], document_type: DocumentType) -> Literal["OK"]:
if document_type: if document_type:
document_type = DocumentType.objects.only("pk").get(id=document_type) document_type = DocumentType.objects.only("pk").get(id=document_type)
@ -83,7 +87,7 @@ def set_document_type(doc_ids: list[int], document_type):
return "OK" return "OK"
def add_tag(doc_ids: list[int], tag: int): def add_tag(doc_ids: list[int], tag: int) -> Literal["OK"]:
qs = Document.objects.filter(Q(id__in=doc_ids) & ~Q(tags__id=tag)).only("pk") qs = Document.objects.filter(Q(id__in=doc_ids) & ~Q(tags__id=tag)).only("pk")
affected_docs = list(qs.values_list("pk", flat=True)) affected_docs = list(qs.values_list("pk", flat=True))
@ -98,7 +102,7 @@ def add_tag(doc_ids: list[int], tag: int):
return "OK" return "OK"
def remove_tag(doc_ids: list[int], tag: int): def remove_tag(doc_ids: list[int], tag: int) -> Literal["OK"]:
qs = Document.objects.filter(Q(id__in=doc_ids) & Q(tags__id=tag)).only("pk") qs = Document.objects.filter(Q(id__in=doc_ids) & Q(tags__id=tag)).only("pk")
affected_docs = list(qs.values_list("pk", flat=True)) affected_docs = list(qs.values_list("pk", flat=True))
@ -113,7 +117,11 @@ def remove_tag(doc_ids: list[int], tag: int):
return "OK" return "OK"
def modify_tags(doc_ids: list[int], add_tags: list[int], remove_tags: list[int]): def modify_tags(
doc_ids: list[int],
add_tags: list[int],
remove_tags: list[int],
) -> Literal["OK"]:
qs = Document.objects.filter(id__in=doc_ids).only("pk") qs = Document.objects.filter(id__in=doc_ids).only("pk")
affected_docs = list(qs.values_list("pk", flat=True)) affected_docs = list(qs.values_list("pk", flat=True))
@ -137,7 +145,11 @@ def modify_tags(doc_ids: list[int], add_tags: list[int], remove_tags: list[int])
return "OK" return "OK"
def modify_custom_fields(doc_ids: list[int], add_custom_fields, remove_custom_fields): def modify_custom_fields(
doc_ids: list[int],
add_custom_fields,
remove_custom_fields,
) -> Literal["OK"]:
qs = Document.objects.filter(id__in=doc_ids).only("pk") qs = Document.objects.filter(id__in=doc_ids).only("pk")
affected_docs = list(qs.values_list("pk", flat=True)) affected_docs = list(qs.values_list("pk", flat=True))
@ -158,7 +170,7 @@ def modify_custom_fields(doc_ids: list[int], add_custom_fields, remove_custom_fi
@shared_task @shared_task
def delete(doc_ids: list[int]): def delete(doc_ids: list[int]) -> Literal["OK"]:
try: try:
Document.objects.filter(id__in=doc_ids).delete() Document.objects.filter(id__in=doc_ids).delete()
@ -177,7 +189,7 @@ def delete(doc_ids: list[int]):
return "OK" return "OK"
def reprocess(doc_ids: list[int]): def reprocess(doc_ids: list[int]) -> Literal["OK"]:
for document_id in doc_ids: for document_id in doc_ids:
update_document_archive_file.delay( update_document_archive_file.delay(
document_id=document_id, document_id=document_id,
@ -186,7 +198,12 @@ def reprocess(doc_ids: list[int]):
return "OK" return "OK"
def set_permissions(doc_ids: list[int], set_permissions, owner=None, merge=False): def set_permissions(
doc_ids: list[int],
set_permissions,
owner=None,
merge=False,
) -> Literal["OK"]:
qs = Document.objects.filter(id__in=doc_ids).select_related("owner") qs = Document.objects.filter(id__in=doc_ids).select_related("owner")
if merge: if merge:
@ -205,12 +222,12 @@ def set_permissions(doc_ids: list[int], set_permissions, owner=None, merge=False
return "OK" return "OK"
def rotate(doc_ids: list[int], degrees: int): def rotate(doc_ids: list[int], degrees: int) -> Literal["OK"]:
logger.info( logger.info(
f"Attempting to rotate {len(doc_ids)} documents by {degrees} degrees.", f"Attempting to rotate {len(doc_ids)} documents by {degrees} degrees.",
) )
qs = Document.objects.filter(id__in=doc_ids) qs = Document.objects.filter(id__in=doc_ids)
affected_docs = [] affected_docs: list[int] = []
import pikepdf import pikepdf
rotate_tasks = [] rotate_tasks = []
@ -250,17 +267,17 @@ def merge(
doc_ids: list[int], doc_ids: list[int],
metadata_document_id: int | None = None, metadata_document_id: int | None = None,
delete_originals: bool = False, delete_originals: bool = False,
user: User = None, user: User | None = None,
): ) -> Literal["OK"]:
logger.info( logger.info(
f"Attempting to merge {len(doc_ids)} documents into a single document.", f"Attempting to merge {len(doc_ids)} documents into a single document.",
) )
qs = Document.objects.filter(id__in=doc_ids) qs = Document.objects.filter(id__in=doc_ids)
affected_docs = [] affected_docs: list[int] = []
import pikepdf import pikepdf
merged_pdf = pikepdf.new() merged_pdf = pikepdf.new()
version = merged_pdf.pdf_version version: str = merged_pdf.pdf_version
# use doc_ids to preserve order # use doc_ids to preserve order
for doc_id in doc_ids: for doc_id in doc_ids:
doc = qs.get(id=doc_id) doc = qs.get(id=doc_id)
@ -277,9 +294,11 @@ def merge(
logger.warning("No documents were merged") logger.warning("No documents were merged")
return "OK" return "OK"
filepath = os.path.join( filepath = (
Path(
tempfile.mkdtemp(dir=settings.SCRATCH_DIR), tempfile.mkdtemp(dir=settings.SCRATCH_DIR),
f"{'_'.join([str(doc_id) for doc_id in doc_ids])[:100]}_merged.pdf", )
/ f"{'_'.join([str(doc_id) for doc_id in doc_ids])[:100]}_merged.pdf"
) )
merged_pdf.remove_unreferenced_resources() merged_pdf.remove_unreferenced_resources()
merged_pdf.save(filepath, min_version=version) merged_pdf.save(filepath, min_version=version)
@ -288,10 +307,14 @@ def merge(
if metadata_document_id: if metadata_document_id:
metadata_document = qs.get(id=metadata_document_id) metadata_document = qs.get(id=metadata_document_id)
if metadata_document is not None: if metadata_document is not None:
overrides = DocumentMetadataOverrides.from_document(metadata_document) overrides: DocumentMetadataOverrides = (
DocumentMetadataOverrides.from_document(metadata_document)
)
overrides.title = metadata_document.title + " (merged)" overrides.title = metadata_document.title + " (merged)"
else: else:
overrides = DocumentMetadataOverrides() overrides = DocumentMetadataOverrides()
else:
overrides = DocumentMetadataOverrides()
if user is not None: if user is not None:
overrides.owner_id = user.id overrides.owner_id = user.id
@ -321,8 +344,8 @@ def split(
doc_ids: list[int], doc_ids: list[int],
pages: list[list[int]], pages: list[list[int]],
delete_originals: bool = False, delete_originals: bool = False,
user: User = None, user: User | None = None,
): ) -> Literal["OK"]:
logger.info( logger.info(
f"Attempting to split document {doc_ids[0]} into {len(pages)} documents", f"Attempting to split document {doc_ids[0]} into {len(pages)} documents",
) )
@ -334,18 +357,22 @@ def split(
try: try:
with pikepdf.open(doc.source_path) as pdf: with pikepdf.open(doc.source_path) as pdf:
for idx, split_doc in enumerate(pages): for idx, split_doc in enumerate(pages):
dst = pikepdf.new() dst: pikepdf.Pdf = pikepdf.new()
for page in split_doc: for page in split_doc:
dst.pages.append(pdf.pages[page - 1]) dst.pages.append(pdf.pages[page - 1])
filepath = os.path.join( filepath: Path = (
Path(
tempfile.mkdtemp(dir=settings.SCRATCH_DIR), tempfile.mkdtemp(dir=settings.SCRATCH_DIR),
f"{doc.id}_{split_doc[0]}-{split_doc[-1]}.pdf", )
/ f"{doc.id}_{split_doc[0]}-{split_doc[-1]}.pdf"
) )
dst.remove_unreferenced_resources() dst.remove_unreferenced_resources()
dst.save(filepath) dst.save(filepath)
dst.close() dst.close()
overrides = DocumentMetadataOverrides().from_document(doc) overrides: DocumentMetadataOverrides = (
DocumentMetadataOverrides().from_document(doc)
)
overrides.title = f"{doc.title} (split {idx + 1})" overrides.title = f"{doc.title} (split {idx + 1})"
if user is not None: if user is not None:
overrides.owner_id = user.id overrides.owner_id = user.id
@ -376,7 +403,7 @@ def split(
return "OK" return "OK"
def delete_pages(doc_ids: list[int], pages: list[int]): def delete_pages(doc_ids: list[int], pages: list[int]) -> Literal["OK"]:
logger.info( logger.info(
f"Attempting to delete pages {pages} from {len(doc_ids)} documents", f"Attempting to delete pages {pages} from {len(doc_ids)} documents",
) )

View File

@ -411,6 +411,7 @@ class ConsumerPlugin(
self.unmodified_original = ( self.unmodified_original = (
Path(tempdir.name) / Path("uo") / Path(self.filename) Path(tempdir.name) / Path("uo") / Path(self.filename)
) )
self.unmodified_original.parent.mkdir(exist_ok=True)
copy_file_with_basic_stats( copy_file_with_basic_stats(
self.input_doc.original_file, self.input_doc.original_file,
self.unmodified_original, self.unmodified_original,

View File

@ -424,20 +424,28 @@ class CustomFieldQueryParser:
value_field_name = "value_monetary_amount" value_field_name = "value_monetary_amount"
has_field = Q(custom_fields__field=custom_field) has_field = Q(custom_fields__field=custom_field)
# Our special exists operator.
if op == "exists":
field_filter = has_field if value else ~has_field
else:
field_filter = has_field & Q(
**{f"custom_fields__{value_field_name}__{op}": value},
)
# We need to use an annotation here because different atoms # We need to use an annotation here because different atoms
# might be referring to different instances of custom fields. # might be referring to different instances of custom fields.
annotation_name = f"_custom_field_filter_{len(self._annotations)}" annotation_name = f"_custom_field_filter_{len(self._annotations)}"
self._annotations[annotation_name] = Count("custom_fields", filter=field_filter)
return Q(**{f"{annotation_name}__gt": 0}) # Our special exists operator.
if op == "exists":
annotation = Count("custom_fields", filter=has_field)
# A Document should have > 0 match if it has this field, or 0 if doesn't.
query_op = "gt" if value else "exact"
query = Q(**{f"{annotation_name}__{query_op}": 0})
else:
# Check if 1) custom field name matches, and 2) value satisfies condition
field_filter = has_field & Q(
**{f"custom_fields__{value_field_name}__{op}": value},
)
# Annotate how many matching custom fields each document has
annotation = Count("custom_fields", filter=field_filter)
# Filter document by count
query = Q(**{f"{annotation_name}__gt": 0})
self._annotations[annotation_name] = annotation
return query
@handle_validation_prefix @handle_validation_prefix
def _get_custom_field(self, id_or_name): def _get_custom_field(self, id_or_name):

View File

@ -24,7 +24,6 @@ from django.utils import timezone
from filelock import FileLock from filelock import FileLock
from guardian.models import GroupObjectPermission from guardian.models import GroupObjectPermission
from guardian.models import UserObjectPermission from guardian.models import UserObjectPermission
from rest_framework.authtoken.models import Token
if TYPE_CHECKING: if TYPE_CHECKING:
from django.db.models import QuerySet from django.db.models import QuerySet
@ -271,7 +270,6 @@ class Command(CryptMixin, BaseCommand):
"social_accounts": SocialAccount.objects.all(), "social_accounts": SocialAccount.objects.all(),
"social_apps": SocialApp.objects.all(), "social_apps": SocialApp.objects.all(),
"social_tokens": SocialToken.objects.all(), "social_tokens": SocialToken.objects.all(),
"auth_tokens": Token.objects.all(),
} }
if settings.AUDIT_LOG_ENABLED: if settings.AUDIT_LOG_ENABLED:
@ -570,11 +568,7 @@ class Command(CryptMixin, BaseCommand):
value=manifest_record["fields"][field], value=manifest_record["fields"][field],
) )
elif ( elif MailAccount.objects.count() > 0 or SocialToken.objects.count() > 0:
MailAccount.objects.count() > 0
or SocialToken.objects.count() > 0
or Token.objects.count() > 0
):
self.stdout.write( self.stdout.write(
self.style.NOTICE( self.style.NOTICE(
"No passphrase was given, sensitive fields will be in plaintext", "No passphrase was given, sensitive fields will be in plaintext",

View File

@ -108,13 +108,6 @@ class CryptMixin:
"token_secret", "token_secret",
], ],
}, },
{
"exporter_key": "auth_tokens",
"model_name": "authtoken.token",
"fields": [
"key",
],
},
] ]
def get_crypt_params(self) -> dict[str, dict[str, str | int]]: def get_crypt_params(self) -> dict[str, dict[str, str | int]]:

View File

@ -651,6 +651,14 @@ class CustomFieldInstanceSerializer(serializers.ModelSerializer):
raise serializers.ValidationError( raise serializers.ValidationError(
f"Value must be index of an element in {select_options}", f"Value must be index of an element in {select_options}",
) )
elif field.data_type == CustomField.FieldDataType.DOCUMENTLINK:
doc_ids = data["value"]
if Document.objects.filter(id__in=doc_ids).count() != len(
data["value"],
):
raise serializers.ValidationError(
"Some documents in value don't exist or were specified twice.",
)
return data return data
@ -797,6 +805,24 @@ class DocumentSerializer(
doc["content"] = doc.get("content")[0:550] doc["content"] = doc.get("content")[0:550]
return doc return doc
def validate(self, attrs):
if (
"archive_serial_number" in attrs
and attrs["archive_serial_number"] is not None
and len(str(attrs["archive_serial_number"])) > 0
and Document.deleted_objects.filter(
archive_serial_number=attrs["archive_serial_number"],
).exists()
):
raise serializers.ValidationError(
{
"archive_serial_number": [
"Document with this Archive Serial Number already exists in the trash.",
],
},
)
return super().validate(attrs)
def update(self, instance: Document, validated_data): def update(self, instance: Document, validated_data):
if "created_date" in validated_data and "created" not in validated_data: if "created_date" in validated_data and "created" not in validated_data:
new_datetime = datetime.datetime.combine( new_datetime = datetime.datetime.combine(
@ -900,6 +926,7 @@ class DocumentSerializer(
"custom_fields", "custom_fields",
"remove_inbox_tags", "remove_inbox_tags",
"page_count", "page_count",
"mime_type",
) )
list_serializer_class = OwnedObjectListSerializer list_serializer_class = OwnedObjectListSerializer

Some files were not shown because too many files have changed in this diff Show More