mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Compare commits
	
		
			13 Commits
		
	
	
		
			32a7f9cd5a
			...
			e9e209d290
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ![dependabot[bot]](/assets/img/avatar_default.png)  | e9e209d290 | ||
|   | 2e593a0022 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 3526a4cf23 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | f4791cac2d | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | fdafd4eefb | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 87a8847a8d | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 7c31c79bbc | ||
|   | bf2a9b02c6 | ||
|   | 348858780c | ||
|   | eb481ac1c0 | ||
|   | 9a2d7a64ac | ||
|   | 92431b2f4b | ||
|   | 97d59dce9c | 
| @@ -32,7 +32,7 @@ RUN set -eux \ | ||||
| # Purpose: Installs s6-overlay and rootfs | ||||
| # Comments: | ||||
| #  - Don't leave anything extra in here either | ||||
| FROM ghcr.io/astral-sh/uv:0.6.9-python3.12-bookworm-slim AS s6-overlay-base | ||||
| FROM ghcr.io/astral-sh/uv:0.6.11-python3.12-bookworm-slim AS s6-overlay-base | ||||
|  | ||||
| WORKDIR /usr/src/s6 | ||||
|  | ||||
|   | ||||
| @@ -404,7 +404,7 @@ set this value to /paperless. No trailing slash! | ||||
| #### [`PAPERLESS_STATIC_URL=<path>`](#PAPERLESS_STATIC_URL) {#PAPERLESS_STATIC_URL} | ||||
|  | ||||
| : Override the STATIC_URL here. Unless you're hosting Paperless off a | ||||
| subdomain like /paperless/, you probably don't need to change this. | ||||
| specific path like /paperless/, you probably don't need to change this. | ||||
| If you do change it, be sure to include the trailing slash. | ||||
|  | ||||
|     Defaults to "/static/". | ||||
|   | ||||
| @@ -715,7 +715,7 @@ | ||||
|         </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">59</context> | ||||
|           <context context-type="linenumber">58</context> | ||||
|         </context-group> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.html</context> | ||||
| @@ -2541,15 +2541,15 @@ | ||||
|         </context-group> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1325</context> | ||||
|           <context context-type="linenumber">1323</context> | ||||
|         </context-group> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1364</context> | ||||
|           <context context-type="linenumber">1362</context> | ||||
|         </context-group> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1405</context> | ||||
|           <context context-type="linenumber">1403</context> | ||||
|         </context-group> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> | ||||
| @@ -3406,7 +3406,7 @@ | ||||
|         </context-group> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1382</context> | ||||
|           <context context-type="linenumber">1380</context> | ||||
|         </context-group> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context> | ||||
| @@ -5352,18 +5352,18 @@ | ||||
|         <source>Remove link</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">44</context> | ||||
|           <context context-type="linenumber">43</context> | ||||
|         </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">51</context> | ||||
|           <context context-type="linenumber">50</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="1388712764439031120" datatype="html"> | ||||
|         <source>Open link</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">47</context> | ||||
|           <context context-type="linenumber">46</context> | ||||
|         </context-group> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/input/url/url.component.html</context> | ||||
| @@ -5374,7 +5374,7 @@ | ||||
|         <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">52</context> | ||||
|           <context context-type="linenumber">51</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="5676637575587497817" datatype="html"> | ||||
| @@ -7022,35 +7022,35 @@ | ||||
|         <source>Split confirm</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1323</context> | ||||
|           <context context-type="linenumber">1321</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="2805304563009985503" datatype="html"> | ||||
|         <source>This operation will split the selected document(s) into new documents.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1324</context> | ||||
|           <context context-type="linenumber">1322</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="7638681545012641321" datatype="html"> | ||||
|         <source>Split operation for "<x id="PH" equiv-text="this.document.title"/>" will begin in the background.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1340</context> | ||||
|           <context context-type="linenumber">1338</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="3235014591864339926" datatype="html"> | ||||
|         <source>Error executing split operation</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1349</context> | ||||
|           <context context-type="linenumber">1347</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="6555329262222566158" datatype="html"> | ||||
|         <source>Rotate confirm</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1362</context> | ||||
|           <context context-type="linenumber">1360</context> | ||||
|         </context-group> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> | ||||
| @@ -7061,60 +7061,60 @@ | ||||
|         <source>This operation will permanently rotate the original version of the current document.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1363</context> | ||||
|           <context context-type="linenumber">1361</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="3802852336439815451" datatype="html"> | ||||
|         <source>Rotation of "<x id="PH" equiv-text="this.document.title"/>" will begin in the background. Close and re-open the document after the operation has completed to see the changes.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1379</context> | ||||
|           <context context-type="linenumber">1377</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="2962674215361798818" datatype="html"> | ||||
|         <source>Error executing rotate operation</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1391</context> | ||||
|           <context context-type="linenumber">1389</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="3539261415918606512" datatype="html"> | ||||
|         <source>Delete pages confirm</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1403</context> | ||||
|           <context context-type="linenumber">1401</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="5854352498125813866" datatype="html"> | ||||
|         <source>This operation will permanently delete the selected pages from the original document.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1404</context> | ||||
|           <context context-type="linenumber">1402</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="1138505464360427037" datatype="html"> | ||||
|         <source>Delete pages operation for "<x id="PH" equiv-text="this.document.title"/>" will begin in the background. Close and re-open or reload this document after the operation has completed to see the changes.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1419</context> | ||||
|           <context context-type="linenumber">1417</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="1249139200486584973" datatype="html"> | ||||
|         <source>Error executing delete pages operation</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1428</context> | ||||
|           <context context-type="linenumber">1426</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="6085793215710522488" datatype="html"> | ||||
|         <source>An error occurred loading tiff: <x id="PH" equiv-text="err.toString()"/></source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1488</context> | ||||
|           <context context-type="linenumber">1486</context> | ||||
|         </context-group> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> | ||||
|           <context context-type="linenumber">1492</context> | ||||
|           <context context-type="linenumber">1490</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="4958946940233632319" datatype="html"> | ||||
|   | ||||
| @@ -12,17 +12,17 @@ | ||||
|   }, | ||||
|   "private": true, | ||||
|   "dependencies": { | ||||
|     "@angular/cdk": "^19.2.2", | ||||
|     "@angular/common": "~19.2.1", | ||||
|     "@angular/compiler": "~19.2.1", | ||||
|     "@angular/core": "~19.2.1", | ||||
|     "@angular/forms": "~19.2.1", | ||||
|     "@angular/localize": "~19.2.1", | ||||
|     "@angular/platform-browser": "~19.2.1", | ||||
|     "@angular/platform-browser-dynamic": "~19.2.1", | ||||
|     "@angular/router": "~19.2.1", | ||||
|     "@angular/cdk": "^19.2.7", | ||||
|     "@angular/common": "~19.2.4", | ||||
|     "@angular/compiler": "~19.2.4", | ||||
|     "@angular/core": "~19.2.4", | ||||
|     "@angular/forms": "~19.2.4", | ||||
|     "@angular/localize": "~19.2.4", | ||||
|     "@angular/platform-browser": "~19.2.4", | ||||
|     "@angular/platform-browser-dynamic": "~19.2.4", | ||||
|     "@angular/router": "~19.2.4", | ||||
|     "@ng-bootstrap/ng-bootstrap": "^18.0.0", | ||||
|     "@ng-select/ng-select": "^14.2.3", | ||||
|     "@ng-select/ng-select": "^14.2.6", | ||||
|     "@ngneat/dirty-check-forms": "^3.0.3", | ||||
|     "@popperjs/core": "^2.11.8", | ||||
|     "bootstrap": "^5.3.3", | ||||
| @@ -44,28 +44,28 @@ | ||||
|   "devDependencies": { | ||||
|     "@angular-builders/custom-webpack": "^19.0.0", | ||||
|     "@angular-builders/jest": "^19.0.0", | ||||
|     "@angular-devkit/build-angular": "^19.2.1", | ||||
|     "@angular-devkit/core": "^19.2.1", | ||||
|     "@angular-devkit/schematics": "^19.2.1", | ||||
|     "@angular-eslint/builder": "19.2.1", | ||||
|     "@angular-eslint/eslint-plugin": "19.2.1", | ||||
|     "@angular-eslint/eslint-plugin-template": "19.2.1", | ||||
|     "@angular-eslint/schematics": "19.2.1", | ||||
|     "@angular-eslint/template-parser": "19.2.1", | ||||
|     "@angular/cli": "~19.2.1", | ||||
|     "@angular/compiler-cli": "~19.2.1", | ||||
|     "@angular-devkit/build-angular": "^19.2.5", | ||||
|     "@angular-devkit/core": "^19.2.5", | ||||
|     "@angular-devkit/schematics": "^19.2.5", | ||||
|     "@angular-eslint/builder": "19.3.0", | ||||
|     "@angular-eslint/eslint-plugin": "19.3.0", | ||||
|     "@angular-eslint/eslint-plugin-template": "19.3.0", | ||||
|     "@angular-eslint/schematics": "19.3.0", | ||||
|     "@angular-eslint/template-parser": "19.3.0", | ||||
|     "@angular/cli": "~19.2.5", | ||||
|     "@angular/compiler-cli": "~19.2.4", | ||||
|     "@codecov/webpack-plugin": "^1.9.0", | ||||
|     "@playwright/test": "^1.50.1", | ||||
|     "@playwright/test": "^1.51.1", | ||||
|     "@types/jest": "^29.5.14", | ||||
|     "@types/node": "^22.13.9", | ||||
|     "@typescript-eslint/eslint-plugin": "^8.26.1", | ||||
|     "@typescript-eslint/parser": "^8.26.1", | ||||
|     "@typescript-eslint/utils": "^8.26.1", | ||||
|     "eslint": "^9.22.0", | ||||
|     "@types/node": "^22.13.17", | ||||
|     "@typescript-eslint/eslint-plugin": "^8.29.0", | ||||
|     "@typescript-eslint/parser": "^8.29.0", | ||||
|     "@typescript-eslint/utils": "^8.29.0", | ||||
|     "eslint": "^9.23.0", | ||||
|     "jest": "29.7.0", | ||||
|     "jest-environment-jsdom": "^29.7.0", | ||||
|     "jest-junit": "^16.0.0", | ||||
|     "jest-preset-angular": "^14.5.3", | ||||
|     "jest-preset-angular": "^14.5.4", | ||||
|     "jest-websocket-mock": "^2.5.0", | ||||
|     "patch-package": "^8.0.0", | ||||
|     "prettier-plugin-organize-imports": "^4.1.0", | ||||
|   | ||||
							
								
								
									
										2387
									
								
								src-ui/pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2387
									
								
								src-ui/pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -30,25 +30,24 @@ | ||||
|     [placeholder]="placeholder" | ||||
|     [notFoundText]="notFoundText" | ||||
|     [multiple]="true" | ||||
|     bindValue="id" | ||||
|     [compareWith]="compareDocuments" | ||||
|     [trackByFn]="trackByFn" | ||||
|     [minTermLength]="2" | ||||
|     [loading]="loading" | ||||
|     [typeahead]="documentsInput$" | ||||
|     (mousedown)="$event.stopImmediatePropagation()" | ||||
|     (change)="onChange(selectedDocuments)"> | ||||
|     (change)="onChange(selectedDocumentIDs)"> | ||||
|     <ng-template ng-label-tmp let-document="item"> | ||||
|       <div class="d-flex align-items-center"> | ||||
|         @if (!disabled) { | ||||
|           <button class="btn p-0 lh-1" (click)="unselect(document)" title="Remove link" i18n-title><i-bs name="x"></i-bs></button> | ||||
|           <button class="btn p-0 lh-1" (click)="unselect(document)" (mousedown)="$event.stopImmediatePropagation()" type="button" 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> | ||||
|             <i-bs width="0.9em" height="0.9em" name="file-text"></i-bs> <span>{{document.title}}</span> | ||||
|           </a> | ||||
|         } @else { | ||||
|           <span class="badge bg-light text-muted" (click)="unselect(document)" title="Remove link" i18n-title> | ||||
|           <span class="badge bg-light text-muted" (click)="unselect(document)" (mousedown)="$event.stopImmediatePropagation()" type="button" title="Remove link" i18n-title> | ||||
|             <i-bs width="0.9em" height="0.9em" name="exclamation-triangle-fill"></i-bs> <span i18n>Not found</span> | ||||
|           </span> | ||||
|         } | ||||
|   | ||||
| @@ -74,6 +74,11 @@ describe('DocumentLinkComponent', () => { | ||||
|     expect(component.selectedDocuments).toEqual([documents[1], documents[0]]) | ||||
|   }) | ||||
|  | ||||
|   it('should retrieve document IDs from selected documents', () => { | ||||
|     component.selectedDocuments = documents | ||||
|     expect(component.selectedDocumentIDs).toEqual([1, 12, 16, 23]) | ||||
|   }) | ||||
|  | ||||
|   it('should search API on select text input', () => { | ||||
|     const listSpy = jest.spyOn(documentService, 'listFiltered') | ||||
|     listSpy.mockImplementation( | ||||
|   | ||||
| @@ -71,6 +71,10 @@ export class DocumentLinkComponent | ||||
|   @Input() | ||||
|   placeholder: string = $localize`Search for documents` | ||||
|  | ||||
|   get selectedDocumentIDs(): number[] { | ||||
|     return this.selectedDocuments.map((d) => d.id) | ||||
|   } | ||||
|  | ||||
|   constructor(private documentsService: DocumentService) { | ||||
|     super() | ||||
|   } | ||||
|   | ||||
| @@ -17,7 +17,7 @@ | ||||
|           (change)="onChange(value)"> | ||||
|  | ||||
|           <ng-template ng-label-tmp let-item="item"> | ||||
|             <button class="tag-wrap btn p-0 d-flex align-items-center" (click)="removeTag($event, item.id)" title="Remove tag" i18n-title> | ||||
|             <button class="tag-wrap btn p-0 d-flex align-items-center" (click)="removeTag(item.id)" (mousedown)="$event.stopImmediatePropagation()" type="button" title="Remove tag" i18n-title> | ||||
|               <i-bs name="x" style="margin-inline-end: 1px;"></i-bs> | ||||
|               @if (item.id && tags) { | ||||
|                 <pngx-tag style="background-color: none;" [tag]="getTag(item.id)"></pngx-tag> | ||||
|   | ||||
| @@ -154,11 +154,11 @@ describe('TagsComponent', () => { | ||||
|   it('support remove tags', () => { | ||||
|     component.tags = tags | ||||
|     component.value = [1, 2] | ||||
|     component.removeTag(new PointerEvent('point'), 2) | ||||
|     component.removeTag(2) | ||||
|     expect(component.value).toEqual([1]) | ||||
|  | ||||
|     component.disabled = true | ||||
|     component.removeTag(new PointerEvent('point'), 1) | ||||
|     component.removeTag(1) | ||||
|     expect(component.value).toEqual([1]) | ||||
|   }) | ||||
|  | ||||
|   | ||||
| @@ -118,13 +118,10 @@ export class TagsComponent implements OnInit, ControlValueAccessor { | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   removeTag(event: PointerEvent, id: number) { | ||||
|   removeTag(tagID: number) { | ||||
|     if (this.disabled) return | ||||
|  | ||||
|     // prevent opening dropdown | ||||
|     event.stopImmediatePropagation() | ||||
|  | ||||
|     let index = this.value.indexOf(id) | ||||
|     let index = this.value.indexOf(tagID) | ||||
|     if (index > -1) { | ||||
|       let oldValue = this.value | ||||
|       oldValue.splice(index, 1) | ||||
|   | ||||
| @@ -1286,9 +1286,7 @@ export class DocumentDetailComponent | ||||
|     this.document.custom_fields?.forEach((fieldInstance) => { | ||||
|       this.customFieldFormFields.push( | ||||
|         new FormGroup({ | ||||
|           field: new FormControl( | ||||
|             this.getCustomFieldFromInstance(fieldInstance)?.id | ||||
|           ), | ||||
|           field: new FormControl(fieldInstance.field), | ||||
|           value: new FormControl(fieldInstance.value), | ||||
|         }), | ||||
|         { emitEvent } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user