mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-10-06 00:00:32 +00:00
* Feature: store barcode contents, list and search them New setting PAPERLESS_CONSUMER_STORE_BARCODE_VALUES (off by default) stores all barcodes found during consumption with the document: page, type and content. They are listed on the metadata tab with a copy button, returned by the documents API and searchable with barcodes: in the advanced search. Versions keep their own barcodes, reprocessing reads them again. Refs #9898 * Tests: cover the remaining barcode branches Covers unchanged and failing barcode reads on reprocessing, unsupported files and DocumentBarcode.__str__, and uses toHaveLength in the barcode list spec as suggested by SonarCloud. * Address review: keep barcodes when they can't be read, format choices - Reprocessing and new versions keep the stored barcodes when the file can't be scanned or the scan fails, and replace them atomically. - Format is a TextChoices of the zxing-cpp formats, with a test. - Shared scan code, latest_version helper, TypedDict, serializer reuse. - Barcodes in the split manifest, export/import tests, pytest-style tests. * Barcode tests: TIFF reprocess, format check both ways, fixtures - Reprocessing a TIFF with TIFF support off keeps the stored barcodes. - The format test also fails when zxing-cpp drops a format. - Fixtures in place of the sample dir mixin, plugin-level disabled test. - Format labels aren't translated, OpenAPI enum named BarcodeFormatEnum. * Review: module-level zxing reader, shorter barcode docs - read_barcodes_zxing is a module-level function used by scan_pdf. - Drop the trivial __str__ test, mark it no cover. - Shorten the barcode docs and remove the duplicate in configuration.md. * Fix header * Use utility class * Return barcodes from the metadata endpoint only Drop the barcodes field and its prefetches from the document serializer, as agreed in the review. Also remove the now empty component stylesheet. --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
47 lines
1.2 KiB
HTML
47 lines
1.2 KiB
HTML
<table class="table table-borderless align-baseline">
|
|
<thead>
|
|
<tr>
|
|
<th i18n>Page</th>
|
|
<th i18n>Type</th>
|
|
<th i18n>Content</th>
|
|
<th></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@for (barcode of barcodes(); track $index) {
|
|
<tr>
|
|
<td>{{ barcode.page }}</td>
|
|
<td class="text-nowrap">{{ barcode.format }}</td>
|
|
<td class="text-break">
|
|
@if (isLink(barcode.value)) {
|
|
<a
|
|
[href]="barcode.value"
|
|
target="_blank"
|
|
rel="noopener noreferrer nofollow"
|
|
>{{ barcode.value }}</a
|
|
>
|
|
} @else {
|
|
{{ barcode.value }}
|
|
}
|
|
</td>
|
|
<td class="text-end">
|
|
<button
|
|
type="button"
|
|
class="btn btn-sm btn-outline-primary"
|
|
(click)="copy($index)"
|
|
title="Copy content"
|
|
i18n-title
|
|
>
|
|
@if (copiedIndex() === $index) {
|
|
<i-bs name="clipboard-check"></i-bs>
|
|
} @else {
|
|
<i-bs name="clipboard"></i-bs>
|
|
}
|
|
<span class="visually-hidden" i18n>Copy content</span>
|
|
</button>
|
|
</td>
|
|
</tr>
|
|
}
|
|
</tbody>
|
|
</table>
|