mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-09-16 21:55:37 -05:00
Merge branch 'dev' into feature-schedule-wf-trigger
This commit is contained in:
@@ -36,9 +36,7 @@
|
||||
<ng-container i18n>Loading...</ng-container>
|
||||
</div>
|
||||
}
|
||||
@for (log of logs; track log) {
|
||||
<p
|
||||
class="m-0 p-0 log-entry-{{getLogLevel(log)}}"
|
||||
>{{log}}</p>
|
||||
@for (log of logs; track $index) {
|
||||
<p class="m-0 p-0 log-entry-{{getLogLevel(log)}}">{{log}}</p>
|
||||
}
|
||||
</div>
|
||||
|
@@ -118,17 +118,6 @@
|
||||
</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="col-md-3 col-form-label pt-0">
|
||||
<span i18n>Sidebar</span>
|
||||
@@ -168,26 +157,42 @@
|
||||
<h4 class="mt-4" id="update-checking" i18n>Update checking</h4>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="offset-md-3 col">
|
||||
<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>
|
||||
<div class="offset-md-3 col d-flex flex-row align-items-start">
|
||||
<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>
|
||||
|
||||
<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="offset-md-3 col">
|
||||
<pngx-input-check i18n-title title="Automatically remove inbox tag(s) on save" formControlName="documentEditingRemoveInboxTags"></pngx-input-check>
|
||||
</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>
|
||||
|
||||
<div class="row mb-3">
|
||||
|
@@ -315,7 +315,7 @@ describe('SettingsComponent', () => {
|
||||
expect(toastErrorSpy).toHaveBeenCalled()
|
||||
expect(storeSpy).toHaveBeenCalled()
|
||||
expect(appearanceSettingsSpy).not.toHaveBeenCalled()
|
||||
expect(setSpy).toHaveBeenCalledTimes(27)
|
||||
expect(setSpy).toHaveBeenCalledTimes(28)
|
||||
|
||||
// succeed
|
||||
storeSpy.mockReturnValueOnce(of(true))
|
||||
|
@@ -88,7 +88,6 @@ export class SettingsComponent
|
||||
darkModeEnabled: new FormControl(null),
|
||||
darkModeInvertThumbs: new FormControl(null),
|
||||
themeColor: new FormControl(null),
|
||||
useNativePdfViewer: new FormControl(null),
|
||||
displayLanguage: new FormControl(null),
|
||||
dateLocale: new FormControl(null),
|
||||
dateFormat: new FormControl(null),
|
||||
@@ -99,7 +98,9 @@ export class SettingsComponent
|
||||
defaultPermsViewGroups: new FormControl(null),
|
||||
defaultPermsEditUsers: new FormControl(null),
|
||||
defaultPermsEditGroups: new FormControl(null),
|
||||
useNativePdfViewer: new FormControl(null),
|
||||
documentEditingRemoveInboxTags: new FormControl(null),
|
||||
documentEditingOverlayThumbnail: new FormControl(null),
|
||||
searchDbOnly: new FormControl(null),
|
||||
searchLink: new FormControl(null),
|
||||
|
||||
@@ -308,6 +309,9 @@ export class SettingsComponent
|
||||
documentEditingRemoveInboxTags: this.settings.get(
|
||||
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),
|
||||
searchLink: this.settings.get(SETTINGS_KEYS.SEARCH_FULL_TYPE),
|
||||
savedViews: {},
|
||||
@@ -539,6 +543,10 @@ export class SettingsComponent
|
||||
SETTINGS_KEYS.DOCUMENT_EDITING_REMOVE_INBOX_TAGS,
|
||||
this.settingsForm.value.documentEditingRemoveInboxTags
|
||||
)
|
||||
this.settings.set(
|
||||
SETTINGS_KEYS.DOCUMENT_EDITING_OVERLAY_THUMBNAIL,
|
||||
this.settingsForm.value.documentEditingOverlayThumbnail
|
||||
)
|
||||
this.settings.set(
|
||||
SETTINGS_KEYS.SEARCH_DB_ONLY,
|
||||
this.settingsForm.value.searchDbOnly
|
||||
|
@@ -43,7 +43,7 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<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();">
|
||||
<td>
|
||||
<div class="form-check">
|
||||
|
@@ -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"
|
||||
data-target="#sidebarMenu" aria-controls="sidebarMenu" aria-expanded="false" aria-label="Toggle navigation"
|
||||
(click)="isMenuCollapsed = !isMenuCollapsed">
|
||||
|
@@ -48,6 +48,13 @@
|
||||
|
||||
main {
|
||||
transition: all .2s ease;
|
||||
padding-top: 110px;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
main {
|
||||
padding-top: 56px;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-slim-toggler {
|
||||
|
@@ -5,26 +5,26 @@
|
||||
}
|
||||
}
|
||||
|
||||
::ng-deep .ng-select-container {
|
||||
:host ::ng-deep .ng-select-container {
|
||||
border-top-right-radius: 0 !important;
|
||||
border-bottom-right-radius: 0 !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-bottom-right-radius: var(--bs-border-radius) !important;
|
||||
border-top-left-radius: 0 !important;
|
||||
border-bottom-left-radius: 0 !important;
|
||||
}
|
||||
|
||||
::ng-deep .ng-select {
|
||||
:host ::ng-deep .ng-select {
|
||||
max-width: 100px;
|
||||
min-width: 35%;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
::ng-deep .doc-link-select {
|
||||
:host ::ng-deep .doc-link-select {
|
||||
padding-top: 0 !important;
|
||||
border-top-right-radius: var(--bs-border-radius) !important;
|
||||
border-bottom-right-radius: var(--bs-border-radius) !important;
|
||||
|
@@ -27,6 +27,9 @@
|
||||
</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) {
|
||||
<div class="my-3">
|
||||
|
@@ -38,7 +38,7 @@
|
||||
@for (item of selectionModel.itemsSorted | filter: filterText:'name'; track item; let i = $index) {
|
||||
@if (allowSelectNone || item.id) {
|
||||
<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>
|
||||
}
|
||||
}
|
||||
|
@@ -58,7 +58,7 @@ describe('ToggleableDropdownButtonComponent', () => {
|
||||
let toggleResult
|
||||
component.state = ToggleableItemState.Selected
|
||||
component.exclude.subscribe(() => (excludeResult = true))
|
||||
component.toggle.subscribe(() => (toggleResult = true))
|
||||
component.toggled.subscribe(() => (toggleResult = true))
|
||||
const button = fixture.nativeElement.querySelector('button')
|
||||
button.dispatchEvent(new MouseEvent('click'))
|
||||
expect(excludeResult).toBeTruthy()
|
||||
@@ -70,7 +70,7 @@ describe('ToggleableDropdownButtonComponent', () => {
|
||||
let toggleResult
|
||||
component.state = ToggleableItemState.Excluded
|
||||
component.exclude.subscribe(() => (excludeResult = true))
|
||||
component.toggle.subscribe(() => (toggleResult = true))
|
||||
component.toggled.subscribe(() => (toggleResult = true))
|
||||
const button = fixture.nativeElement.querySelector('button')
|
||||
button.dispatchEvent(new MouseEvent('click'))
|
||||
expect(excludeResult).toBeFalsy()
|
||||
|
@@ -30,7 +30,7 @@ export class ToggleableDropdownButtonComponent {
|
||||
hideCount: boolean = false
|
||||
|
||||
@Output()
|
||||
toggle = new EventEmitter()
|
||||
toggled = new EventEmitter()
|
||||
|
||||
@Output()
|
||||
exclude = new EventEmitter()
|
||||
@@ -43,7 +43,7 @@ export class ToggleableDropdownButtonComponent {
|
||||
if (this.state == ToggleableItemState.Selected) {
|
||||
this.exclude.emit()
|
||||
} else {
|
||||
this.toggle.emit()
|
||||
this.toggled.emit()
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -5,7 +5,11 @@
|
||||
</div>
|
||||
} @else {
|
||||
@if (renderAsObject) {
|
||||
<object [data]="previewURL | safeUrl" width="100%" class="bg-light" [class.p-2]="!isPdf"></object>
|
||||
@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>
|
||||
}
|
||||
} @else {
|
||||
@if (requiresPassword) {
|
||||
<div class="w-100 h-100 position-relative">
|
||||
|
@@ -7,32 +7,3 @@
|
||||
::ng-deep .popover.popover-preview {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -9,13 +9,20 @@ import { provideHttpClientTesting } from '@angular/common/http/testing'
|
||||
import { DocumentService } from 'src/app/services/rest/document.service'
|
||||
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
|
||||
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 = {
|
||||
id: 10,
|
||||
title: 'Document 10',
|
||||
content: 'Cupcake ipsum dolor sit amet ice cream.',
|
||||
original_file_name: 'sample.pdf',
|
||||
archived_file_name: 'sample.pdf',
|
||||
mime_type: 'application/pdf',
|
||||
}
|
||||
|
||||
describe('PreviewPopupComponent', () => {
|
||||
@@ -23,6 +30,7 @@ describe('PreviewPopupComponent', () => {
|
||||
let fixture: ComponentFixture<PreviewPopupComponent>
|
||||
let settingsService: SettingsService
|
||||
let documentService: DocumentService
|
||||
let http: HttpClient
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -35,23 +43,22 @@ describe('PreviewPopupComponent', () => {
|
||||
})
|
||||
settingsService = TestBed.inject(SettingsService)
|
||||
documentService = TestBed.inject(DocumentService)
|
||||
http = TestBed.inject(HttpClient)
|
||||
jest
|
||||
.spyOn(documentService, 'getPreviewUrl')
|
||||
.mockImplementation((id) => doc.original_file_name)
|
||||
fixture = TestBed.createComponent(PreviewPopupComponent)
|
||||
component = fixture.componentInstance
|
||||
component.document = doc
|
||||
component.document = { ...doc }
|
||||
fixture.detectChanges()
|
||||
})
|
||||
|
||||
it('should guess if file is pdf by file name', () => {
|
||||
expect(component.isPdf).toBeTruthy()
|
||||
component.document.archived_file_name = 'sample.pdf'
|
||||
it('should correctly report if document is pdf', () => {
|
||||
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.original_file_name = 'sample.txt'
|
||||
expect(component.isPdf).toBeFalsy()
|
||||
component.document.original_file_name = 'sample.pdf'
|
||||
})
|
||||
|
||||
it('should return settings for native PDF viewer', () => {
|
||||
@@ -84,6 +91,8 @@ describe('PreviewPopupComponent', () => {
|
||||
|
||||
it('should fall back to object for non-pdf', () => {
|
||||
component.document.original_file_name = 'sample.png'
|
||||
component.document.mime_type = 'image/png'
|
||||
component.document.archived_file_name = undefined
|
||||
fixture.detectChanges()
|
||||
expect(fixture.debugElement.query(By.css('object'))).not.toBeNull()
|
||||
})
|
||||
@@ -95,4 +104,22 @@ describe('PreviewPopupComponent', () => {
|
||||
'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')
|
||||
})
|
||||
})
|
||||
|
@@ -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 { SETTINGS_KEYS } from 'src/app/data/ui-settings'
|
||||
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',
|
||||
styleUrls: ['./preview-popup.component.scss'],
|
||||
})
|
||||
export class PreviewPopupComponent {
|
||||
export class PreviewPopupComponent implements OnDestroy {
|
||||
private _document: Document
|
||||
@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
|
||||
|
||||
requiresPassword: boolean = false
|
||||
|
||||
previewText: string
|
||||
|
||||
get renderAsObject(): boolean {
|
||||
return (this.isPdf && this.useNativePdfViewer) || !this.isPdf
|
||||
}
|
||||
@@ -30,18 +44,38 @@ export class PreviewPopupComponent {
|
||||
}
|
||||
|
||||
get isPdf(): boolean {
|
||||
// We dont have time to retrieve metadata, make a best guess by file name
|
||||
return (
|
||||
this.document?.original_file_name?.endsWith('.pdf') ||
|
||||
this.document?.archived_file_name?.endsWith('.pdf')
|
||||
this.document?.archived_file_name?.length > 0 ||
|
||||
this.document?.mime_type?.includes('pdf')
|
||||
)
|
||||
}
|
||||
|
||||
constructor(
|
||||
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) {
|
||||
if (event.name == 'PasswordException') {
|
||||
this.requiresPassword = true
|
||||
|
@@ -350,14 +350,16 @@
|
||||
</ng-template>
|
||||
|
||||
<ng-template #previewContent>
|
||||
@if (!metadata) {
|
||||
<div class="w-100 h-100 d-flex align-items-center justify-content-center">
|
||||
<div class="thumb-preview position-absolute pe-none" [class.fade]="previewLoaded">
|
||||
<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 class="spinner-border spinner-border-sm me-2" role="status"></div>
|
||||
<ng-container i18n>Loading...</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
} @else {
|
||||
</div>
|
||||
@if (document) {
|
||||
@switch (archiveContentRenderType) {
|
||||
@case (ContentRenderType.PDF) {
|
||||
@if (!useNativePdfViewer) {
|
||||
|
@@ -63,6 +63,27 @@ textarea.rtl {
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.whitespace-preserve {
|
||||
white-space: preserve;
|
||||
.thumb-preview {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@@ -774,6 +774,15 @@ describe('DocumentDetailComponent', () => {
|
||||
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', () => {
|
||||
initNormally()
|
||||
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', () => {
|
||||
initNormally()
|
||||
component.metadata = { has_archive_version: true }
|
||||
component.document.archived_file_name = 'file.pdf'
|
||||
jest.spyOn(settingsService, 'get').mockReturnValue(false)
|
||||
expect(component.useNativePdfViewer).toBeFalsy()
|
||||
fixture.detectChanges()
|
||||
@@ -930,7 +939,7 @@ describe('DocumentDetailComponent', () => {
|
||||
|
||||
it('should display native pdf viewer if enabled', () => {
|
||||
initNormally()
|
||||
component.metadata = { has_archive_version: true }
|
||||
component.document.archived_file_name = 'file.pdf'
|
||||
jest.spyOn(settingsService, 'get').mockReturnValue(true)
|
||||
expect(component.useNativePdfViewer).toBeTruthy()
|
||||
fixture.detectChanges()
|
||||
@@ -1072,8 +1081,8 @@ describe('DocumentDetailComponent', () => {
|
||||
})
|
||||
|
||||
it('should change preview element by render type', () => {
|
||||
component.metadata = { has_archive_version: true }
|
||||
initNormally()
|
||||
component.document.archived_file_name = 'file.pdf'
|
||||
fixture.detectChanges()
|
||||
expect(component.archiveContentRenderType).toEqual(
|
||||
component.ContentRenderType.PDF
|
||||
@@ -1082,10 +1091,8 @@ describe('DocumentDetailComponent', () => {
|
||||
fixture.debugElement.query(By.css('pdf-viewer-container'))
|
||||
).not.toBeUndefined()
|
||||
|
||||
component.metadata = {
|
||||
has_archive_version: false,
|
||||
original_mime_type: 'text/plain',
|
||||
}
|
||||
component.document.archived_file_name = undefined
|
||||
component.document.mime_type = 'text/plain'
|
||||
fixture.detectChanges()
|
||||
expect(component.archiveContentRenderType).toEqual(
|
||||
component.ContentRenderType.Text
|
||||
@@ -1094,10 +1101,7 @@ describe('DocumentDetailComponent', () => {
|
||||
fixture.debugElement.query(By.css('div.preview-sticky'))
|
||||
).not.toBeUndefined()
|
||||
|
||||
component.metadata = {
|
||||
has_archive_version: false,
|
||||
original_mime_type: 'image/jpg',
|
||||
}
|
||||
component.document.mime_type = 'image/jpeg'
|
||||
fixture.detectChanges()
|
||||
expect(component.archiveContentRenderType).toEqual(
|
||||
component.ContentRenderType.Image
|
||||
@@ -1105,13 +1109,9 @@ describe('DocumentDetailComponent', () => {
|
||||
expect(
|
||||
fixture.debugElement.query(By.css('.preview-sticky img'))
|
||||
).not.toBeUndefined()
|
||||
|
||||
component.metadata = {
|
||||
has_archive_version: false,
|
||||
original_mime_type:
|
||||
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||
}
|
||||
fixture.detectChanges()
|
||||
;(component.document.mime_type =
|
||||
'application/vnd.openxmlformats-officedocument.wordprocessingml.document'),
|
||||
fixture.detectChanges()
|
||||
expect(component.archiveContentRenderType).toEqual(
|
||||
component.ContentRenderType.Other
|
||||
)
|
||||
@@ -1221,6 +1221,14 @@ describe('DocumentDetailComponent', () => {
|
||||
)
|
||||
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')
|
||||
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'escape' }))
|
||||
expect(closeSpy).toHaveBeenCalled()
|
||||
|
@@ -131,9 +131,11 @@ export class DocumentDetailComponent
|
||||
title: string
|
||||
titleSubject: Subject<string> = new Subject()
|
||||
previewUrl: string
|
||||
thumbUrl: string
|
||||
previewText: string
|
||||
downloadUrl: string
|
||||
downloadOriginalUrl: string
|
||||
previewLoaded: boolean = false
|
||||
|
||||
correspondents: Correspondent[]
|
||||
documentTypes: DocumentType[]
|
||||
@@ -221,15 +223,17 @@ export class DocumentDetailComponent
|
||||
}
|
||||
|
||||
get archiveContentRenderType(): ContentRenderType {
|
||||
return this.getRenderType(
|
||||
this.metadata?.has_archive_version
|
||||
? 'application/pdf'
|
||||
: this.metadata?.original_mime_type
|
||||
)
|
||||
return this.document?.archived_file_name
|
||||
? this.getRenderType('application/pdf')
|
||||
: this.getRenderType(this.document?.mime_type)
|
||||
}
|
||||
|
||||
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 {
|
||||
@@ -339,6 +343,7 @@ export class DocumentDetailComponent
|
||||
}`
|
||||
},
|
||||
})
|
||||
this.thumbUrl = this.documentsService.getThumbUrl(documentId)
|
||||
return this.documentsService.get(documentId)
|
||||
})
|
||||
)
|
||||
@@ -504,6 +509,16 @@ export class DocumentDetailComponent
|
||||
.subscribe(() => {
|
||||
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 {
|
||||
@@ -537,6 +552,9 @@ export class DocumentDetailComponent
|
||||
.subscribe({
|
||||
next: (result) => {
|
||||
this.metadata = result
|
||||
if (this.archiveContentRenderType !== ContentRenderType.PDF) {
|
||||
this.previewLoaded = true
|
||||
}
|
||||
},
|
||||
error: (error) => {
|
||||
this.metadata = {} // allow display to fallback to <object> tag
|
||||
@@ -710,7 +728,10 @@ export class DocumentDetailComponent
|
||||
next: (docValues) => {
|
||||
// in case data changed while saving eg removing inbox_tags
|
||||
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.save()
|
||||
this.toastService.showInfo($localize`Document saved successfully.`)
|
||||
@@ -900,11 +921,15 @@ export class DocumentDetailComponent
|
||||
pdfPreviewLoaded(pdf: PDFDocumentProxy) {
|
||||
this.previewNumPages = pdf.numPages
|
||||
if (this.password) this.requiresPassword = false
|
||||
setTimeout(() => {
|
||||
this.previewLoaded = true
|
||||
}, 300)
|
||||
}
|
||||
|
||||
onError(event) {
|
||||
if (event.name == 'PasswordException') {
|
||||
this.requiresPassword = true
|
||||
this.previewLoaded = true
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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="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()">
|
||||
|
||||
<div class="border-end border-bottom bg-light document-card-check">
|
||||
|
@@ -2,7 +2,7 @@
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.doc-img-background {
|
||||
.doc-img-container {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
object-position: top left;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
mix-blend-mode: multiply;
|
||||
}
|
||||
|
||||
.card-title {
|
||||
@@ -49,18 +48,6 @@
|
||||
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 {
|
||||
line-height: 1;
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<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="border-bottom doc-img-container" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)" (dblclick)="dblClickDocument.emit(this)">
|
||||
<img class="card-img doc-img rounded-top" [class.inverted]="getIsThumbInverted()" [src]="getThumbUrl()">
|
||||
<div class="border-bottom doc-img-container rounded-top" (click)="this.toggleSelected.emit($event)" (dblclick)="dblClickDocument.emit(this)">
|
||||
<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="form-check">
|
||||
|
@@ -6,7 +6,6 @@
|
||||
object-fit: cover;
|
||||
object-position: top left;
|
||||
height: 180px;
|
||||
mix-blend-mode: multiply;
|
||||
}
|
||||
|
||||
.document-card-check {
|
||||
@@ -40,18 +39,6 @@
|
||||
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 {
|
||||
line-height: 1;
|
||||
|
||||
|
@@ -1204,7 +1204,7 @@ describe('FilterEditorComponent', () => {
|
||||
const tagButton = tagsFilterableDropdown.queryAll(
|
||||
By.directive(ToggleableDropdownButtonComponent)
|
||||
)[0]
|
||||
tagButton.triggerEventHandler('toggle')
|
||||
tagButton.triggerEventHandler('toggled')
|
||||
fixture.detectChanges()
|
||||
expect(component.filterRules).toEqual([
|
||||
{
|
||||
@@ -1222,8 +1222,8 @@ describe('FilterEditorComponent', () => {
|
||||
const tagButtons = tagsFilterableDropdown.queryAll(
|
||||
By.directive(ToggleableDropdownButtonComponent)
|
||||
)
|
||||
tagButtons[1].triggerEventHandler('toggle')
|
||||
tagButtons[2].triggerEventHandler('toggle')
|
||||
tagButtons[1].triggerEventHandler('toggled')
|
||||
tagButtons[2].triggerEventHandler('toggled')
|
||||
fixture.detectChanges()
|
||||
expect(component.filterRules).toEqual([
|
||||
{
|
||||
@@ -1273,8 +1273,8 @@ describe('FilterEditorComponent', () => {
|
||||
const correspondentButtons = correspondentsFilterableDropdown.queryAll(
|
||||
By.directive(ToggleableDropdownButtonComponent)
|
||||
)
|
||||
correspondentButtons[1].triggerEventHandler('toggle')
|
||||
correspondentButtons[2].triggerEventHandler('toggle')
|
||||
correspondentButtons[1].triggerEventHandler('toggled')
|
||||
correspondentButtons[2].triggerEventHandler('toggled')
|
||||
fixture.detectChanges()
|
||||
expect(component.filterRules).toEqual([
|
||||
{
|
||||
@@ -1312,7 +1312,7 @@ describe('FilterEditorComponent', () => {
|
||||
const notAssignedButton = correspondentsFilterableDropdown.queryAll(
|
||||
By.directive(ToggleableDropdownButtonComponent)
|
||||
)[0]
|
||||
notAssignedButton.triggerEventHandler('toggle')
|
||||
notAssignedButton.triggerEventHandler('toggled')
|
||||
fixture.detectChanges()
|
||||
expect(component.filterRules).toEqual([
|
||||
{
|
||||
@@ -1330,8 +1330,8 @@ describe('FilterEditorComponent', () => {
|
||||
const documentTypeButtons = documentTypesFilterableDropdown.queryAll(
|
||||
By.directive(ToggleableDropdownButtonComponent)
|
||||
)
|
||||
documentTypeButtons[1].triggerEventHandler('toggle')
|
||||
documentTypeButtons[2].triggerEventHandler('toggle')
|
||||
documentTypeButtons[1].triggerEventHandler('toggled')
|
||||
documentTypeButtons[2].triggerEventHandler('toggled')
|
||||
fixture.detectChanges()
|
||||
expect(component.filterRules).toEqual([
|
||||
{
|
||||
@@ -1369,7 +1369,7 @@ describe('FilterEditorComponent', () => {
|
||||
const notAssignedButton = docTypesFilterableDropdown.queryAll(
|
||||
By.directive(ToggleableDropdownButtonComponent)
|
||||
)[0]
|
||||
notAssignedButton.triggerEventHandler('toggle')
|
||||
notAssignedButton.triggerEventHandler('toggled')
|
||||
fixture.detectChanges()
|
||||
expect(component.filterRules).toEqual([
|
||||
{
|
||||
@@ -1387,8 +1387,8 @@ describe('FilterEditorComponent', () => {
|
||||
const storagePathButtons = storagePathFilterableDropdown.queryAll(
|
||||
By.directive(ToggleableDropdownButtonComponent)
|
||||
)
|
||||
storagePathButtons[1].triggerEventHandler('toggle')
|
||||
storagePathButtons[2].triggerEventHandler('toggle')
|
||||
storagePathButtons[1].triggerEventHandler('toggled')
|
||||
storagePathButtons[2].triggerEventHandler('toggled')
|
||||
fixture.detectChanges()
|
||||
expect(component.filterRules).toEqual([
|
||||
{
|
||||
@@ -1426,7 +1426,7 @@ describe('FilterEditorComponent', () => {
|
||||
const notAssignedButton = storagePathsFilterableDropdown.queryAll(
|
||||
By.directive(ToggleableDropdownButtonComponent)
|
||||
)[0]
|
||||
notAssignedButton.triggerEventHandler('toggle')
|
||||
notAssignedButton.triggerEventHandler('toggled')
|
||||
fixture.detectChanges()
|
||||
expect(component.filterRules).toEqual([
|
||||
{
|
||||
|
@@ -150,6 +150,8 @@ export interface Document extends ObjectWithPermissions {
|
||||
|
||||
added?: Date
|
||||
|
||||
mime_type?: string
|
||||
|
||||
deleted_at?: Date
|
||||
|
||||
original_file_name?: string
|
||||
|
@@ -61,6 +61,8 @@ export const SETTINGS_KEYS = {
|
||||
DEFAULT_PERMS_EDIT_GROUPS: 'general-settings:permissions:default-edit-groups',
|
||||
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_FULL_TYPE: 'general-settings:search:more-link',
|
||||
EMPTY_TRASH_DELAY: 'trash_delay',
|
||||
@@ -229,6 +231,11 @@ export const SETTINGS: UiSetting[] = [
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
},
|
||||
{
|
||||
key: SETTINGS_KEYS.DOCUMENT_EDITING_OVERLAY_THUMBNAIL,
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
},
|
||||
{
|
||||
key: SETTINGS_KEYS.SEARCH_DB_ONLY,
|
||||
type: 'boolean',
|
||||
|
@@ -599,14 +599,17 @@ describe('DocumentListViewService', () => {
|
||||
it('should not filter out custom fields if settings not initialized', () => {
|
||||
const customFields = ['custom_field_1', 'custom_field_2']
|
||||
documentListViewService.displayFields = customFields as any
|
||||
settingsService.displayFieldsInitialized = false
|
||||
expect(documentListViewService.displayFields).toEqual(customFields)
|
||||
jest.spyOn(settingsService, 'allDisplayFields', 'get').mockReturnValue([
|
||||
{ id: DisplayField.ADDED, name: 'Added' },
|
||||
{ id: DisplayField.TITLE, name: 'Title' },
|
||||
{ id: 'custom_field_1', name: 'Custom Field 1' },
|
||||
] 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'])
|
||||
})
|
||||
})
|
||||
|
@@ -20,6 +20,10 @@ import { paramsFromViewState, paramsToViewState } from '../utils/query-params'
|
||||
import { DocumentService, SelectionData } from './rest/document.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.
|
||||
*/
|
||||
@@ -102,6 +106,8 @@ export class DocumentListViewService {
|
||||
|
||||
private _activeSavedViewId: number = null
|
||||
|
||||
private displayFieldsInitialized: boolean = false
|
||||
|
||||
get activeSavedViewId() {
|
||||
return this._activeSavedViewId
|
||||
}
|
||||
@@ -134,6 +140,19 @@ export class DocumentListViewService {
|
||||
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 {
|
||||
@@ -415,23 +434,17 @@ export class DocumentListViewService {
|
||||
}
|
||||
|
||||
get displayFields(): DisplayField[] {
|
||||
let 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(
|
||||
return this.activeListViewState.displayFields ?? LIST_DEFAULT_DISPLAY_FIELDS
|
||||
}
|
||||
|
||||
set displayFields(fields: DisplayField[]) {
|
||||
this.activeListViewState.displayFields = this.displayFieldsInitialized
|
||||
? fields?.filter(
|
||||
(field) =>
|
||||
this.settings.allDisplayFields.find((f) => f.id === field) !==
|
||||
undefined
|
||||
)
|
||||
: fields
|
||||
}
|
||||
|
||||
set displayFields(fields: DisplayField[]) {
|
||||
this.activeListViewState.displayFields = fields
|
||||
this.saveDocumentListView()
|
||||
}
|
||||
|
||||
|
@@ -274,7 +274,7 @@ export class SettingsService {
|
||||
public get allDisplayFields(): Array<{ id: DisplayField; name: string }> {
|
||||
return this._allDisplayFields
|
||||
}
|
||||
public displayFieldsInitialized: boolean = false
|
||||
public displayFieldsInit: EventEmitter<boolean> = new EventEmitter()
|
||||
|
||||
constructor(
|
||||
rendererFactory: RendererFactory2,
|
||||
@@ -382,10 +382,10 @@ export class SettingsService {
|
||||
}
|
||||
})
|
||||
)
|
||||
this.displayFieldsInitialized = true
|
||||
this.displayFieldsInit.emit(true)
|
||||
})
|
||||
} else {
|
||||
this.displayFieldsInitialized = true
|
||||
this.displayFieldsInit.emit(true)
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -5,7 +5,7 @@ export const environment = {
|
||||
apiBaseUrl: document.baseURI + 'api/',
|
||||
apiVersion: '5',
|
||||
appTitle: 'Paperless-ngx',
|
||||
version: '2.13.0',
|
||||
version: '2.13.5',
|
||||
webSocketHost: window.location.host,
|
||||
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
|
||||
webSocketBaseUrl: base_url.pathname + 'ws/',
|
||||
|
@@ -5348,7 +5348,7 @@
|
||||
<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>
|
||||
<target state="translated">No trobat</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5676637575587497817" datatype="html">
|
||||
<source>Search for documents</source>
|
||||
|
@@ -3605,7 +3605,7 @@
|
||||
</context-group>
|
||||
<target state="final">Fehler beim Speichern des Feldes.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="4465085913683915434" datatype="html">
|
||||
<trans-unit id="4465085913683915434" datatype="html" approved="yes">
|
||||
<source>True</source>
|
||||
<context-group purpose="location">
|
||||
<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="linenumber">79</context>
|
||||
</context-group>
|
||||
<target state="translated">Wahr</target>
|
||||
<target state="final">Wahr</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3800326155195149498" datatype="html">
|
||||
<trans-unit id="3800326155195149498" datatype="html" approved="yes">
|
||||
<source>False</source>
|
||||
<context-group purpose="location">
|
||||
<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="linenumber">80</context>
|
||||
</context-group>
|
||||
<target state="translated">Falsch</target>
|
||||
<target state="final">Falsch</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7551700625201096185" datatype="html">
|
||||
<trans-unit id="7551700625201096185" datatype="html" approved="yes">
|
||||
<source>Search docs...</source>
|
||||
<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="linenumber">96</context>
|
||||
</context-group>
|
||||
<target state="translated">Suche Dokumente...</target>
|
||||
<target state="final">Suche Dokumente...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3184700926171002527" datatype="html" approved="yes">
|
||||
<source>Any</source>
|
||||
@@ -3685,29 +3685,29 @@
|
||||
</context-group>
|
||||
<target state="final">Alle</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1496549861742963591" datatype="html">
|
||||
<trans-unit id="1496549861742963591" datatype="html" approved="yes">
|
||||
<source>Not</source>
|
||||
<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="linenumber">131</context>
|
||||
</context-group>
|
||||
<target state="translated">Nicht</target>
|
||||
<target state="final">Nicht</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6548676277933116532" datatype="html">
|
||||
<trans-unit id="6548676277933116532" datatype="html" approved="yes">
|
||||
<source>Add query</source>
|
||||
<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="linenumber">150</context>
|
||||
</context-group>
|
||||
<target state="translated">Abfrage hinzufügen</target>
|
||||
<target state="final">Abfrage hinzufügen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5599577087865387184" datatype="html">
|
||||
<trans-unit id="5599577087865387184" datatype="html" approved="yes">
|
||||
<source>Add expression</source>
|
||||
<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="linenumber">153</context>
|
||||
</context-group>
|
||||
<target state="translated">Ausdruck hinzufügen</target>
|
||||
<target state="final">Ausdruck hinzufügen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6052766076365105714" datatype="html" approved="yes">
|
||||
<source>now</source>
|
||||
@@ -4513,13 +4513,13 @@
|
||||
</context-group>
|
||||
<target state="final">Pfad</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2816147949408898105" datatype="html">
|
||||
<trans-unit id="2816147949408898105" datatype="html" approved="yes">
|
||||
<source>See <a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'>the documentation</a>.</source>
|
||||
<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="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="translated">Siehe <a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'>Dokumentation</a>.</target>
|
||||
<target state="final">Siehe <a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'>Dokumentation</a>.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1295614462098694869" datatype="html" approved="yes">
|
||||
<source>Preview</source>
|
||||
@@ -4533,29 +4533,29 @@
|
||||
</context-group>
|
||||
<target state="final">Vorschau</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="8057014866157903311" datatype="html">
|
||||
<trans-unit id="8057014866157903311" datatype="html" approved="yes">
|
||||
<source>Path test failed</source>
|
||||
<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="linenumber">30</context>
|
||||
</context-group>
|
||||
<target state="translated">Pfadüberprüfung fehlgeschlagen</target>
|
||||
<target state="final">Pfadüberprüfung fehlgeschlagen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="9116034231465034307" datatype="html">
|
||||
<trans-unit id="9116034231465034307" datatype="html" approved="yes">
|
||||
<source>No document selected</source>
|
||||
<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="linenumber">32</context>
|
||||
</context-group>
|
||||
<target state="translated">Kein Dokument ausgewählt</target>
|
||||
<target state="final">Kein Dokument ausgewählt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2083498114116917092" datatype="html">
|
||||
<trans-unit id="2083498114116917092" datatype="html" approved="yes">
|
||||
<source>Search for a document</source>
|
||||
<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="linenumber">38</context>
|
||||
</context-group>
|
||||
<target state="translated">Ein Dokument suchen</target>
|
||||
<target state="final">Ein Dokument suchen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6423278459497515329" datatype="html" approved="yes">
|
||||
<source>No documents found</source>
|
||||
@@ -5342,21 +5342,21 @@
|
||||
</context-group>
|
||||
<target state="final">Link öffnen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6595008830732269870" 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="needs-translation">Not found</target>
|
||||
<target state="final">Nicht gefunden</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5676637575587497817" datatype="html">
|
||||
<trans-unit id="5676637575587497817" datatype="html" approved="yes">
|
||||
<source>Search for documents</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.ts</context>
|
||||
<context context-type="linenumber">53</context>
|
||||
</context-group>
|
||||
<target state="translated">Nach Dokumenten suchen</target>
|
||||
<target state="final">Nach Dokumenten suchen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="8627133593113147800" datatype="html" approved="yes">
|
||||
<source>Selected items</source>
|
||||
@@ -8100,13 +8100,13 @@
|
||||
</context-group>
|
||||
<target state="final">Ohne Tag</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="8644099678903817943" datatype="html">
|
||||
<trans-unit id="8644099678903817943" datatype="html" approved="yes">
|
||||
<source>Custom fields query</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
</context-group>
|
||||
<target state="translated">Benutzerdefinierte Feldabfrage</target>
|
||||
<target state="final">Benutzerdefinierte Feldabfrage</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6523384805359286307" datatype="html" approved="yes">
|
||||
<source>Title: <x id="PH" equiv-text="rule.value"/></source>
|
||||
@@ -8296,7 +8296,7 @@
|
||||
</context-group>
|
||||
<target state="final">Datentyp</target>
|
||||
</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>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/manage/custom-fields/custom-fields.component.html</context>
|
||||
@@ -8318,7 +8318,7 @@
|
||||
<context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
</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 id="651372623796033489" datatype="html" approved="yes">
|
||||
<source>No fields defined.</source>
|
||||
@@ -8408,21 +8408,21 @@
|
||||
</context-group>
|
||||
<target state="final">Konto hinzufügen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5088684330574277786" datatype="html">
|
||||
<trans-unit id="5088684330574277786" datatype="html" approved="yes">
|
||||
<source>Connect Gmail Account</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/manage/mail/mail.component.html</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
</context-group>
|
||||
<target state="translated">Gmail-Konto verbinden</target>
|
||||
<target state="final">Gmail-Konto verbinden</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6630732552154686829" datatype="html">
|
||||
<trans-unit id="6630732552154686829" datatype="html" approved="yes">
|
||||
<source>Connect Outlook Account</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/manage/mail/mail.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<target state="translated">Outlook-Konto verbinden</target>
|
||||
<target state="final">Outlook-Konto verbinden</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2188854519574316630" datatype="html" approved="yes">
|
||||
<source>Server</source>
|
||||
@@ -8500,21 +8500,21 @@
|
||||
</context-group>
|
||||
<target state="final">Fehler beim Abrufen der E-Mail-Regeln</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="763945516325093575" datatype="html">
|
||||
<trans-unit id="763945516325093575" datatype="html" approved="yes">
|
||||
<source>OAuth2 authentication success</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/manage/mail/mail.component.ts</context>
|
||||
<context context-type="linenumber">101</context>
|
||||
</context-group>
|
||||
<target state="translated">OAuth2-Authentifizierung erfolgreich</target>
|
||||
<target state="final">OAuth2-Authentifizierung erfolgreich</target>
|
||||
</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>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/manage/mail/mail.component.ts</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
</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 id="6327501535846658797" datatype="html" approved="yes">
|
||||
<source>Saved account "<x id="PH" equiv-text="newMailAccount.name"/>".</source>
|
||||
@@ -9000,93 +9000,93 @@
|
||||
</context-group>
|
||||
<target state="final">Zur Startseite</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7088714514100361567" datatype="html">
|
||||
<trans-unit id="7088714514100361567" datatype="html" approved="yes">
|
||||
<source>Equal to</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
</context-group>
|
||||
<target state="translated">Ist gleich</target>
|
||||
<target state="final">Ist gleich</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2841739558138901231" datatype="html">
|
||||
<trans-unit id="2841739558138901231" datatype="html" approved="yes">
|
||||
<source>In</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<target state="translated">In</target>
|
||||
<target state="final">In</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6504828068656625171" datatype="html">
|
||||
<trans-unit id="6504828068656625171" datatype="html" approved="yes">
|
||||
<source>Is null</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<target state="translated">Ist null</target>
|
||||
<target state="final">Ist null</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="4112599358351148632" datatype="html">
|
||||
<trans-unit id="4112599358351148632" datatype="html" approved="yes">
|
||||
<source>Exists</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
<target state="translated">Existiert</target>
|
||||
<target state="final">Existiert</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6238291467288576076" datatype="html">
|
||||
<trans-unit id="6238291467288576076" datatype="html" approved="yes">
|
||||
<source>Contains</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<target state="translated">Enthält</target>
|
||||
<target state="final">Enthält</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="870133374397538941" datatype="html">
|
||||
<trans-unit id="870133374397538941" datatype="html" approved="yes">
|
||||
<source>Contains (case-insensitive)</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
</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 id="7732309408488818531" datatype="html">
|
||||
<trans-unit id="7732309408488818531" datatype="html" approved="yes">
|
||||
<source>Greater than</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
<target state="translated">Größer als</target>
|
||||
<target state="final">Größer als</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="9087788064443057357" datatype="html">
|
||||
<trans-unit id="9087788064443057357" datatype="html" approved="yes">
|
||||
<source>Greater than or equal to</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
</context-group>
|
||||
<target state="translated">Größer oder gleich</target>
|
||||
<target state="final">Größer oder gleich</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5995604223909447366" datatype="html">
|
||||
<trans-unit id="5995604223909447366" datatype="html" approved="yes">
|
||||
<source>Less than</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
<target state="translated">Kleiner als</target>
|
||||
<target state="final">Kleiner als</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6989379963430864867" datatype="html">
|
||||
<trans-unit id="6989379963430864867" datatype="html" approved="yes">
|
||||
<source>Less than or equal to</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
</context-group>
|
||||
<target state="translated">Kleiner oder gleich</target>
|
||||
<target state="final">Kleiner oder gleich</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2348971518300945764" datatype="html">
|
||||
<trans-unit id="2348971518300945764" datatype="html" approved="yes">
|
||||
<source>Range</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/data/custom-field-query.ts</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
<target state="translated">Bereich</target>
|
||||
<target state="final">Bereich</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="969459137986754249" datatype="html" approved="yes">
|
||||
<source>Boolean</source>
|
||||
|
@@ -5348,7 +5348,7 @@
|
||||
<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>
|
||||
<target state="translated">Non trouvé</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5676637575587497817" datatype="html">
|
||||
<source>Search for documents</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="linenumber">79</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">True</target>
|
||||
<target state="translated">Vero</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3800326155195149498" datatype="html">
|
||||
<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="linenumber">80</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">False</target>
|
||||
<target state="translated">Falso</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7551700625201096185" datatype="html">
|
||||
<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="linenumber">96</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Search docs...</target>
|
||||
<target state="translated">Ricerca di documenti...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3184700926171002527" datatype="html">
|
||||
<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="linenumber">131</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Not</target>
|
||||
<target state="translated">Non</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6548676277933116532" datatype="html">
|
||||
<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="linenumber">150</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Add query</target>
|
||||
<target state="translated">Aggiungi query</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5599577087865387184" datatype="html">
|
||||
<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="linenumber">153</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Add expression</target>
|
||||
<target state="translated">Aggiungi espressione</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6052766076365105714" datatype="html">
|
||||
<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="linenumber">19</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Order</target>
|
||||
<target state="translated">Priorità</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="4816216590591222133" datatype="html">
|
||||
<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="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">See <a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'>the documentation</a>.</target>
|
||||
<target state="translated">Vedi <a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'>la documentazione</a>.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1295614462098694869" datatype="html">
|
||||
<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="linenumber">30</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Path test failed</target>
|
||||
<target state="translated">Test percorso non riuscito</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="9116034231465034307" datatype="html">
|
||||
<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="linenumber">32</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">No document selected</target>
|
||||
<target state="translated">Nessun documento selezionato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2083498114116917092" datatype="html">
|
||||
<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="linenumber">38</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Search for a document</target>
|
||||
<target state="translated">Ricerca di un documento</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6423278459497515329" datatype="html">
|
||||
<source>No documents found</source>
|
||||
@@ -5348,7 +5348,7 @@
|
||||
<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>
|
||||
<target state="translated">Non trovato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5676637575587497817" datatype="html">
|
||||
<source>Search for documents</source>
|
||||
|
@@ -1743,7 +1743,7 @@
|
||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">385</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Table</target>
|
||||
<target state="translated">Tabell</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="4236040382842528005" datatype="html">
|
||||
<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="linenumber">17</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Show</target>
|
||||
<target state="translated">Visa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5607669932062416162" datatype="html">
|
||||
<source>Default</source>
|
||||
@@ -2303,7 +2303,7 @@
|
||||
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Trash</target>
|
||||
<target state="translated">Papperskorg</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3818027200170621545" datatype="html">
|
||||
<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="linenumber">131</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Users</target>
|
||||
<target state="translated">Användare</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="searchResults.groups" datatype="html">
|
||||
<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="linenumber">138</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Groups</target>
|
||||
<target state="translated">Grupper</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="searchResults.customFields" datatype="html">
|
||||
<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="linenumber">7,8</context>
|
||||
</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 id="6903610408081711391" datatype="html">
|
||||
<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="linenumber">9</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Documents:</target>
|
||||
<target state="translated">Dokument:</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7508164375697837821" datatype="html">
|
||||
<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="linenumber">21</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Create new field</target>
|
||||
<target state="translated">Skapa nytt fält</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6973528734330066202" datatype="html">
|
||||
<source>Saved field "<x id="PH" equiv-text="newField.name"/>".</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="linenumber">84</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Edit custom field</target>
|
||||
<target state="translated">Redigera anpassat fält</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6672809941092516947" datatype="html" approved="yes">
|
||||
<source>Create new document type</source>
|
||||
@@ -5356,7 +5356,7 @@
|
||||
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.ts</context>
|
||||
<context context-type="linenumber">53</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Search for documents</target>
|
||||
<target state="translated">Sök efter dokument</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="8627133593113147800" datatype="html">
|
||||
<source>Selected items</source>
|
||||
@@ -5653,7 +5653,7 @@
|
||||
<context context-type="sourcefile">src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Confirm Password</target>
|
||||
<target state="translated">Bekräfta lösenord</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7554924397178347823" datatype="html">
|
||||
<source>API Auth Token</source>
|
||||
@@ -5905,7 +5905,7 @@
|
||||
<context context-type="sourcefile">src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">1 day</target>
|
||||
<target state="translated">1 dag</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="8542568275115626925" datatype="html">
|
||||
<source>7 days</source>
|
||||
@@ -5945,7 +5945,7 @@
|
||||
<context context-type="sourcefile">src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</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 id="2897042887615940599" datatype="html">
|
||||
<source>Error deleting link</source>
|
||||
@@ -6025,7 +6025,7 @@
|
||||
<context context-type="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Database</target>
|
||||
<target state="translated">Databas</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5611592591303869712" datatype="html">
|
||||
<source>Status</source>
|
||||
@@ -6045,7 +6045,7 @@
|
||||
<context context-type="sourcefile">src/app/components/manage/workflows/workflows.component.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Status</target>
|
||||
<target state="translated">Status</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2256165083739630668" datatype="html">
|
||||
<source>Migration Status</source>
|
||||
@@ -6085,7 +6085,7 @@
|
||||
<context context-type="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Tasks</target>
|
||||
<target state="translated">Uppgifter</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6911698235105017958" datatype="html">
|
||||
<source>Redis Status</source>
|
||||
@@ -6157,7 +6157,7 @@
|
||||
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</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 id="1325877348738783391" datatype="html">
|
||||
<source>Dashboard updated</source>
|
||||
@@ -6892,7 +6892,7 @@
|
||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||
<context context-type="linenumber">502</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Save document</target>
|
||||
<target state="translated">Spara dokument</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5758784066858623886" datatype="html">
|
||||
<source>Error retrieving metadata</source>
|
||||
@@ -9142,7 +9142,7 @@
|
||||
<context context-type="sourcefile">src/app/data/custom-field.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Url</target>
|
||||
<target state="translated">URL</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3650316326183661476" datatype="html">
|
||||
<source>Document Link</source>
|
||||
@@ -9295,7 +9295,7 @@
|
||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Language</target>
|
||||
<target state="translated">Språk</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1713271461473302108" datatype="html">
|
||||
<source>Mode</source>
|
||||
@@ -9487,7 +9487,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">%s year ago</target>
|
||||
<target state="translated">%s år sedan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3393387677918927062" datatype="html">
|
||||
<source>%s years ago</source>
|
||||
@@ -9495,7 +9495,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">%s years ago</target>
|
||||
<target state="translated">%s år sedan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3053246523831285824" datatype="html">
|
||||
<source>%s month ago</source>
|
||||
@@ -9503,7 +9503,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">%s month ago</target>
|
||||
<target state="translated">%s månad sedan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1158628882375251480" datatype="html">
|
||||
<source>%s months ago</source>
|
||||
@@ -9511,7 +9511,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">%s months ago</target>
|
||||
<target state="translated">%s månader sedan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7039133412826927309" datatype="html">
|
||||
<source>%s week ago</source>
|
||||
@@ -9519,7 +9519,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">%s week ago</target>
|
||||
<target state="translated">%s vecka sedan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2896962543647781653" datatype="html">
|
||||
<source>%s weeks ago</source>
|
||||
@@ -9527,7 +9527,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">%s weeks ago</target>
|
||||
<target state="translated">%s veckor sedan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="91416192007234700" datatype="html">
|
||||
<source>%s day ago</source>
|
||||
@@ -9535,7 +9535,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">%s day ago</target>
|
||||
<target state="translated">%s dag sedan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5601594741748068208" datatype="html">
|
||||
<source>%s days ago</source>
|
||||
@@ -9543,7 +9543,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">%s days ago</target>
|
||||
<target state="translated">%s dagar sedan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="8387405724402999437" datatype="html">
|
||||
<source>%s hour ago</source>
|
||||
@@ -9551,7 +9551,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">%s hour ago</target>
|
||||
<target state="translated">%s timme sedan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2008395012733474465" datatype="html">
|
||||
<source>%s hours ago</source>
|
||||
@@ -9559,7 +9559,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">%s hours ago</target>
|
||||
<target state="translated">%s timmar sedan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5782387980670840884" datatype="html">
|
||||
<source>%s minute ago</source>
|
||||
@@ -9567,7 +9567,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">%s minute ago</target>
|
||||
<target state="translated">%s minut sedan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7573942914011074807" datatype="html">
|
||||
<source>%s minutes ago</source>
|
||||
@@ -9575,7 +9575,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">%s minutes ago</target>
|
||||
<target state="translated">%s minuter sedan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="4272436583644511364" datatype="html">
|
||||
<source>Just now</source>
|
||||
@@ -9583,7 +9583,7 @@
|
||||
<context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Just now</target>
|
||||
<target state="translated">Just nu</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7536524521722799066" datatype="html" approved="yes">
|
||||
<source>(no title)</source>
|
||||
@@ -9923,7 +9923,7 @@
|
||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
||||
<context context-type="linenumber">166</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Norwegian</target>
|
||||
<target state="translated">Norska</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="792060551707690640" datatype="html" approved="yes">
|
||||
<source>Polish</source>
|
||||
|
@@ -1743,7 +1743,7 @@
|
||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">385</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Table</target>
|
||||
<target state="translated">表格</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="4236040382842528005" datatype="html">
|
||||
<source>Small Cards</source>
|
||||
@@ -2371,7 +2371,7 @@
|
||||
<context context-type="sourcefile">src/app/components/admin/trash/trash.component.html</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</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 id="9021887951960049161" datatype="html">
|
||||
<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="linenumber">79</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">True</target>
|
||||
<target state="translated">真</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3800326155195149498" datatype="html">
|
||||
<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="linenumber">80</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">False</target>
|
||||
<target state="translated">假</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7551700625201096185" datatype="html">
|
||||
<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="linenumber">96</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Search docs...</target>
|
||||
<target state="translated">搜索文档...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3184700926171002527" datatype="html">
|
||||
<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="linenumber">131</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Not</target>
|
||||
<target state="translated">否</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6548676277933116532" datatype="html">
|
||||
<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="linenumber">150</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Add query</target>
|
||||
<target state="translated">添加查询</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5599577087865387184" datatype="html">
|
||||
<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="linenumber">153</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Add expression</target>
|
||||
<target state="translated">添加表达式</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6052766076365105714" datatype="html">
|
||||
<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="linenumber">19</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Order</target>
|
||||
<target state="translated">顺序</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="4816216590591222133" datatype="html">
|
||||
<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="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">See <a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'>the documentation</a>.</target>
|
||||
<target state="translated">请参阅 <a target='_blank' href='https://docs.paperless-ngx.com/advanced_usage/#file-name-handling'>文档</a>。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1295614462098694869" datatype="html">
|
||||
<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="linenumber">30</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Path test failed</target>
|
||||
<target state="translated">路径测试失败</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="9116034231465034307" datatype="html">
|
||||
<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="linenumber">32</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">No document selected</target>
|
||||
<target state="translated">没有选择文档</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2083498114116917092" datatype="html">
|
||||
<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="linenumber">38</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Search for a document</target>
|
||||
<target state="translated">搜索文档</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6423278459497515329" datatype="html">
|
||||
<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="linenumber">33</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Add Trigger</target>
|
||||
<target state="translated">添加触发器</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6882912390704300247" datatype="html">
|
||||
<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="linenumber">73</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Apply Actions:</target>
|
||||
<target state="translated">应用操作:</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="51883444329775670" datatype="html">
|
||||
<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="linenumber">75</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Add Action</target>
|
||||
<target state="translated">添加动作</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3288318211116868972" datatype="html">
|
||||
<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="linenumber">121</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Trigger type</target>
|
||||
<target state="translated">触发类型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="8727727835543352574" datatype="html">
|
||||
<source>Trigger for documents that match <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>all<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/> 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="linenumber">122</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Trigger for documents that match <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>all<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/> filters specified below.</target>
|
||||
<target state="translated">触发匹配下面指定的 <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>所有<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/> 过滤器的文档。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7467799586957602479" datatype="html">
|
||||
<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="linenumber">128</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Apply to documents that match this path. Wildcards specified as * are allowed. Case-normalized.</a></target>
|
||||
<target state="translated">应用于匹配此路径的文档。允许指定为*的通配符。不区分大小写。</a></target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7468453896129193641" datatype="html">
|
||||
<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="linenumber">129</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Apply to documents consumed via this mail rule.</target>
|
||||
<target state="translated">应用于通过此邮件规则消费的文档。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6840369584127435743" datatype="html">
|
||||
<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="linenumber">132</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Content matching algorithm</target>
|
||||
<target state="translated">内容匹配算法</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="510635115034690805" datatype="html">
|
||||
<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="linenumber">134</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Content matching pattern</target>
|
||||
<target state="translated">内容匹配模式</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3484236514968690689" datatype="html">
|
||||
<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="linenumber">143</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Has any of tags</target>
|
||||
<target state="translated">有任何标签</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5281365940563983618" datatype="html">
|
||||
<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="linenumber">144</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Has correspondent</target>
|
||||
<target state="translated">已有联系人</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="4806713133917046341" datatype="html">
|
||||
<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="linenumber">145</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Has document type</target>
|
||||
<target state="translated">有文档类型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6417103744331194518" datatype="html">
|
||||
<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="linenumber">155</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Action type</target>
|
||||
<target state="translated">操作类型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6019822389883736115" datatype="html">
|
||||
<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="linenumber">160</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Can include some placeholders, see <a target='_blank' href='https://docs.paperless-ngx.com/usage/#workflows'>documentation</a>.</target>
|
||||
<target state="translated">可以包含一些占位符,请参阅 <a target='_blank' href='https://docs.paperless-ngx.com/usage/#workflows'>文档</a>。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6528897010417701530" datatype="html">
|
||||
<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="linenumber">216</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Remove tags</target>
|
||||
<target state="translated">移除标签</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7890599006071681081" datatype="html">
|
||||
<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="linenumber">254</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Remove all</target>
|
||||
<target state="translated">移除全部</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="8636414563726517994" datatype="html">
|
||||
<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="linenumber">222</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Remove correspondents</target>
|
||||
<target state="translated">移除所有通讯员</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5305293055593064952" datatype="html">
|
||||
<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="linenumber">228</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Remove document types</target>
|
||||
<target state="translated">移除所有文档类型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2400388879708187" datatype="html">
|
||||
<source>Remove storage paths</source>
|
||||
@@ -5473,7 +5473,7 @@
|
||||
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Filter documents with these Tags</target>
|
||||
<target state="translated">按标签过滤</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5752465522295465624" datatype="html">
|
||||
<source>What's this?</source>
|
||||
@@ -5537,7 +5537,7 @@
|
||||
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.ts</context>
|
||||
<context context-type="linenumber">75</context>
|
||||
</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 id="5947558132119506443" datatype="html">
|
||||
<source>My documents</source>
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Close</target>
|
||||
<target state="translated">關閉</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.timepicker.HH" datatype="html">
|
||||
<source>HH</source>
|
||||
@@ -16,7 +16,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">HH</target>
|
||||
<target state="translated">HH</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.toast.close-aria" datatype="html">
|
||||
<source>Close</source>
|
||||
@@ -24,7 +24,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Close</target>
|
||||
<target state="translated">關閉</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.datepicker.select-month" datatype="html">
|
||||
<source>Select month</source>
|
||||
@@ -36,7 +36,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Select month</target>
|
||||
<target state="translated">選取月份</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.pagination.first" datatype="html">
|
||||
<source>««</source>
|
||||
@@ -56,7 +56,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Previous month</target>
|
||||
<target state="translated">上個月</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.progressbar.value" datatype="html">
|
||||
<source>
|
||||
@@ -82,7 +82,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Hours</target>
|
||||
<target state="translated">小時</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.pagination.previous" datatype="html">
|
||||
<source>«</source>
|
||||
@@ -98,7 +98,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Previous</target>
|
||||
<target state="translated">上一個</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.timepicker.MM" datatype="html">
|
||||
<source>MM</source>
|
||||
@@ -106,7 +106,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">MM</target>
|
||||
<target state="translated">MM</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.pagination.next" datatype="html">
|
||||
<source>»</source>
|
||||
@@ -126,7 +126,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Select year</target>
|
||||
<target state="translated">選擇年份</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.datepicker.next-month" datatype="html">
|
||||
<source>Next month</source>
|
||||
@@ -138,7 +138,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Next month</target>
|
||||
<target state="translated">下一個月</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.carousel.next" datatype="html">
|
||||
<source>Next</source>
|
||||
@@ -146,7 +146,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Next</target>
|
||||
<target state="translated">下一個</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.timepicker.minutes" datatype="html">
|
||||
<source>Minutes</source>
|
||||
@@ -154,7 +154,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Minutes</target>
|
||||
<target state="translated">分鐘</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.pagination.last" datatype="html">
|
||||
<source>»»</source>
|
||||
@@ -170,7 +170,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">First</target>
|
||||
<target state="translated">第一頁</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.timepicker.increment-hours" datatype="html">
|
||||
<source>Increment hours</source>
|
||||
@@ -186,7 +186,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Previous</target>
|
||||
<target state="translated">上一頁</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.timepicker.decrement-hours" datatype="html">
|
||||
<source>Decrement hours</source>
|
||||
@@ -202,7 +202,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Next</target>
|
||||
<target state="translated">下一頁</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.timepicker.increment-minutes" datatype="html">
|
||||
<source>Increment minutes</source>
|
||||
@@ -218,7 +218,7 @@
|
||||
<context context-type="sourcefile">node_modules/src/ngb-config.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target state="needs-translation">Last</target>
|
||||
<target state="translated">最後一頁</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ngb.timepicker.decrement-minutes" datatype="html">
|
||||
<source>Decrement minutes</source>
|
||||
|
@@ -490,9 +490,23 @@ ul.pagination {
|
||||
|
||||
.doc-img-container {
|
||||
border: none !important;
|
||||
border-top-left-radius: .25rem;
|
||||
border-top-right-radius: .25rem;
|
||||
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 {
|
||||
@@ -666,6 +680,10 @@ code {
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
.whitespace-preserve {
|
||||
white-space: preserve;
|
||||
}
|
||||
|
||||
/* Animate items as they're being sorted. */
|
||||
.cdk-drop-list-dragging .cdk-drag {
|
||||
transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
|
||||
@@ -705,6 +723,8 @@ i-bs svg {
|
||||
vertical-align: text-bottom;
|
||||
}
|
||||
|
||||
.document-card .card-footer i-bs svg {
|
||||
vertical-align: middle;
|
||||
.document-card {
|
||||
.card-footer i-bs svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
@@ -183,7 +183,7 @@ $form-check-radio-checked-bg-image-dark: url("data:image/svg+xml,<svg xmlns='htt
|
||||
}
|
||||
|
||||
.doc-img {
|
||||
mix-blend-mode: normal !important;
|
||||
mix-blend-mode: normal;
|
||||
border-radius: 0;
|
||||
border-color: var(--bs-border-color);
|
||||
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;
|
||||
}
|
||||
|
||||
@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-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked {
|
||||
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 {
|
||||
td, a {
|
||||
td, a:not(.badge) {
|
||||
color: var(--pngx-primary-text-contrast) !important;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user