Merge branch 'master' into VM/RED-8748

This commit is contained in:
Valentin Mihai 2024-05-28 14:03:52 +03:00
commit 26a3a2abb6
10 changed files with 147 additions and 100 deletions

View File

@ -124,7 +124,7 @@
<iqser-circle-button
(action)="hideAnnotation()"
*ngIf="isImage && isVisible()"
*ngIf="isImage && isVisible() && !hideSkipped"
[attr.help-mode-key]="helpModeKey('hide')"
[tooltipPosition]="tooltipPosition"
[tooltip]="'annotation-actions.hide' | translate"
@ -135,7 +135,7 @@
<iqser-circle-button
(action)="showAnnotation()"
*ngIf="isImage && !isVisible()"
*ngIf="isImage && !isVisible() && !hideSkipped"
[tooltipPosition]="tooltipPosition"
[tooltip]="'annotation-actions.show' | translate"
[type]="buttonType"

View File

@ -10,6 +10,7 @@ import { AnnotationReferencesService } from '../../services/annotation-reference
import { FilePreviewStateService } from '../../services/file-preview-state.service';
import { MultiSelectService } from '../../services/multi-select.service';
import { ViewModeService } from '../../services/view-mode.service';
import { SkippedService } from '../../services/skipped.service';
export const AnnotationButtonTypes = {
default: 'default',
@ -48,6 +49,7 @@ export class AnnotationActionsComponent implements OnChanges {
private readonly _permissionsService: PermissionsService,
private readonly _iqserPermissionsService: IqserPermissionsService,
private readonly _annotationManager: REDAnnotationManager,
readonly skippedService: SkippedService,
readonly annotationActionsService: AnnotationActionsService,
readonly annotationReferencesService: AnnotationReferencesService,
) {}
@ -113,6 +115,10 @@ export class AnnotationActionsComponent implements OnChanges {
return this._annotationManager.annotationHasBeenResized;
}
get hideSkipped() {
return this.skippedService.hideSkipped() && this.annotations.some(a => a.isSkipped);
}
get #sameType() {
const type = this.annotations[0].superType;
return this.annotations.every(a => a.superType === type);

View File

@ -40,6 +40,7 @@ import { PdfAnnotationActionsService } from './pdf-annotation-actions.service';
import { ViewModeService } from './view-mode.service';
import Annotation = Core.Annotations.Annotation;
import Quad = Core.Math.Quad;
import { SkippedService } from './skipped.service';
@Injectable()
export class PdfProxyService {
@ -92,6 +93,7 @@ export class PdfProxyService {
private readonly _listingService: AnnotationsListingService,
private readonly _dictionariesMapService: DictionariesMapService,
private readonly _iqserPermissionsService: IqserPermissionsService,
private readonly _skippedService: SkippedService,
) {
effect(
() => {
@ -373,7 +375,8 @@ export class PdfProxyService {
let actions = [];
// Add hide action as last item
const allAreImage = annotationWrappers.reduce((acc, next) => acc && next.isImage, true);
if (allAreImage && !this._annotationManager.resizingAnnotationId) {
const hideSkipped = this._skippedService.hideSkipped() && annotationWrappers.some(a => a.isSkipped);
if (allAreImage && !this._annotationManager.resizingAnnotationId && !hideSkipped) {
const allAreVisible = viewerAnnotations.reduce((acc, next) => next.isVisible() && acc, true);
const visibilityButton = {

View File

@ -1,13 +1,20 @@
import { effect, Injectable, Signal, signal } from '@angular/core';
import { bool } from '@iqser/common-ui/lib/utils';
import { REDAnnotationManager } from '../../pdf-viewer/services/annotation-manager.service';
import { FilePreviewStateService } from './file-preview-state.service';
import { getLocalStorageDataByFileId, setLocalStorageDataByFileId } from '@utils/local-storage';
export const HIDE_SKIPPED = 'hide-skipped';
@Injectable()
export class SkippedService {
readonly #hideSkipped = signal(false);
readonly hideSkipped: Signal<boolean>;
constructor(private readonly _annotationManager: REDAnnotationManager) {
constructor(
private readonly _annotationManager: REDAnnotationManager,
private readonly _state: FilePreviewStateService,
) {
this.hideSkipped = this.#hideSkipped.asReadonly();
effect(() => {
@ -17,7 +24,13 @@ export class SkippedService {
} else {
this._annotationManager.show(ignored);
}
setLocalStorageDataByFileId(this._state.fileId, HIDE_SKIPPED, this.#hideSkipped());
});
if (getLocalStorageDataByFileId(this._state.fileId, HIDE_SKIPPED)) {
this.toggleSkipped();
}
}
toggleSkipped(): void {

View File

@ -1,8 +1,8 @@
import { inject, Injectable, signal } from '@angular/core';
import type { List } from '@iqser/common-ui/lib/utils';
import { bool, List } from '@iqser/common-ui/lib/utils';
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
import { Core } from '@pdftron/webviewer';
import { getLast } from '@utils/functions';
import { getLast, urlFileId } from '@utils/functions';
import { NGXLogger } from 'ngx-logger';
import { Subject } from 'rxjs';
import { AnnotationToolNames } from '../utils/constants';
@ -10,6 +10,8 @@ import { asList, getId, isStringOrWrapper } from '../utils/functions';
import { AnnotationPredicate, DeleteAnnotationsOptions } from '../utils/types';
import AnnotationManager = Core.AnnotationManager;
import Annotation = Core.Annotations.Annotation;
import { getLocalStorageDataByFileId } from '@utils/local-storage';
import { HIDE_SKIPPED } from '../../file-preview/services/skipped.service';
const MODIFY_ACTION = 'modify';
const RESIZE_OPTION = 'resize';
@ -142,7 +144,7 @@ export class REDAnnotationManager {
}
#listenForAnnotationSelected() {
this.#manager.addEventListener('annotationSelected', (annotations: Annotation[], action: string) => {
this.#manager.addEventListener('annotationSelected', async (annotations: Annotation[], action: string) => {
this.#logger.info('[PDF] Annotation selected: ', annotations, action);
const annotation = annotations.length === 1 ? annotations[0] : undefined;
if (
@ -153,6 +155,8 @@ export class REDAnnotationManager {
) {
this.delete(annotation.Id);
}
await this.#toggleHiddenAnnotation(annotation, action === 'deselected');
this.#annotationSelected$.next([annotations, action]);
});
}
@ -181,6 +185,21 @@ export class REDAnnotationManager {
});
}
async #toggleHiddenAnnotation(annotation: Annotation, hide = false) {
if (bool(annotation.getCustomData('skipped'))) {
const fileId = urlFileId();
const hideSkipped = getLocalStorageDataByFileId(fileId, HIDE_SKIPPED);
if (hideSkipped || this.isHidden(annotation.Id)) {
if (hide) {
this.hide([annotation]);
return;
}
annotation['Opacity'] = 0;
this.show([annotation]);
}
}
}
#getByIds(annotations: List | List<AnnotationWrapper>) {
return annotations.map((item: string | AnnotationWrapper) => this.#getById(item)).filter(a => !!a);
}

View File

@ -1,4 +1,4 @@
import { AfterViewInit, Component, computed, Inject, Signal, signal, untracked, ViewChild, WritableSignal } from '@angular/core';
import { AfterViewInit, Component, computed, Inject, Signal, signal, untracked, viewChild, WritableSignal } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { Dossier } from '@red/domain';
import { EditDossierGeneralInfoComponent } from './general-info/edit-dossier-general-info.component';
@ -45,11 +45,11 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
readonly showHeading: Signal<boolean>;
readonly showActionButtons: Signal<boolean>;
@ViewChild(EditDossierGeneralInfoComponent) generalInfoComponent: EditDossierGeneralInfoComponent;
@ViewChild(EditDossierDownloadPackageComponent) downloadPackageComponent: EditDossierDownloadPackageComponent;
@ViewChild(EditDossierDictionaryComponent) dictionaryComponent: EditDossierDictionaryComponent;
@ViewChild(EditDossierTeamComponent) membersComponent: EditDossierTeamComponent;
@ViewChild(EditDossierAttributesComponent) attributesComponent: EditDossierAttributesComponent;
generalInfoComponent = viewChild(EditDossierGeneralInfoComponent);
downloadPackageComponent = viewChild(EditDossierDownloadPackageComponent);
dictionaryComponent = viewChild(EditDossierDictionaryComponent);
membersComponent = viewChild(EditDossierTeamComponent);
attributesComponent = viewChild(EditDossierAttributesComponent);
constructor(
private readonly _dossiersService: DossiersService,
@ -128,11 +128,11 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
private _getActiveComponent(section: Section): EditDossierSectionInterface {
return {
dossierInfo: this.generalInfoComponent,
downloadPackage: this.downloadPackageComponent,
dossierDictionary: this.dictionaryComponent,
members: this.membersComponent,
dossierAttributes: this.attributesComponent,
dossierInfo: this.generalInfoComponent(),
downloadPackage: this.downloadPackageComponent(),
dossierDictionary: this.dictionaryComponent(),
members: this.membersComponent(),
dossierAttributes: this.attributesComponent(),
}[section];
}

View File

@ -137,3 +137,9 @@ export function calcTextWidthInPixels(text: string): number {
export function stringToBoolean(str: string): boolean {
return str === 'true';
}
export function urlFileId() {
const splitUrl = window.location.href.split('/');
const fileId = splitUrl[splitUrl.length - 1];
return fileId.split('?')[0];
}

View File

@ -18,7 +18,7 @@
},
"content": {
"comment": "Comment",
"comment-placeholder": "Add remarks or mentions...",
"comment-placeholder": "Add remarks or notes...",
"selected-text": "Ausgewählter Text:",
"type": "Type",
"type-placeholder": "Select type..."
@ -27,9 +27,9 @@
}
},
"add-clone-dossier-template": {
"save": "",
"save-and-edit": "",
"title": ""
"save": "{type, select, clone{Clone} other{Save}}",
"save-and-edit": "{type, select, clone{Clone} other{Save}} and edit",
"title": "{type, select, clone{Clone {dossierTemplateName}} other{Create dossier template}}"
},
"add-dossier-dialog": {
"actions": {
@ -116,7 +116,7 @@
"rank": "Rank"
},
"save": "Save state",
"success": "Successfully {type, select, edit{updated} create{created} other{}} the dossier state!",
"success": "Dossier state {type, select, edit{has been updated} creation successful{created} other{}}.",
"title": "{type, select, edit{Edit {name}} create{Create} other{}} dossier state"
},
"add-edit-entity": {
@ -142,8 +142,8 @@
"template-and-dossier-dictionaries": "Template & dossier dictionaries"
},
"success": {
"create": "Entity added!",
"edit": "Entity updated. Please note that other users need to refresh the browser to see your changes."
"create": "Success: Entity created.",
"edit": "<strong>Entity updated.</strong><br><br>Please note that other users need to refresh their browsers to see your changes."
}
},
"add-edit-file-attribute": {
@ -210,7 +210,7 @@
},
"content": {
"comment": "Comment",
"comment-placeholder": "Add remarks or mentions...",
"comment-placeholder": "Add remarks or notes...",
"options": {
"in-dossier": {
"description": "Add hint in every document in {dossierName}.",
@ -529,20 +529,20 @@
"archive": "Archive dossier",
"cancel": "Cancel",
"checkbox": {
"documents": "All documents will be archived and cannot be put back to active"
"documents": "All documents will be archived and cannot be returned to active status."
},
"details": "Restoring an archived dossier is not possible anymore, once it got archived.",
"details": "Be aware that archiving is an irreversible action. Documents archived will no longer be available for active use.",
"title": "Archive {dossierName}",
"toast-error": "Please confirm that you understand the ramifications of your action!",
"toast-error": "Please confirm that you understand the consequences of this action.",
"warning": "Are you sure you want to archive the dossier?"
},
"confirm-delete-attribute": {
"cancel": "{count, plural, one{Attribut} other{Attribute}} behalten",
"delete": "{count, plural, one{Attribut} other{Attribute}} löschen",
"dossier-impacted-documents": "All dossiers based on this template will be affected",
"dossier-lost-details": "All values for this attribute will be lost",
"file-impacted-documents": "All documents {count, plural, one{it is} other{they are}} used on will be impacted",
"file-lost-details": "All inputted details on the documents will be lost",
"dossier-impacted-documents": "This action will affect all dossiers that use this template.",
"dossier-lost-details": "All attribute values entered by users on document level will be lost.",
"file-impacted-documents": "All documents that use {count, plural, one{his attribute} other{these attributes}} will be impacted.",
"file-lost-details": "All information entered by users on document level will be lost.",
"impacted-report": "{reportsCount}",
"title": "{count, plural, one{{name}} other{Datei-Attribute}} löschen",
"toast-error": "Bitte bestätigen Sie, dass Ihnen die Konsequenzen dieser Aktion bewusst sind!",
@ -554,9 +554,9 @@
"delete-replace": "Delete and replace",
"form": {
"state": "Replace state",
"state-placeholder": "Choose another state"
"state-placeholder": "Select another state"
},
"question": "Replace the {count, plural, one{dossier's} other{dossiers'}} state with another state",
"question": "Select another state to replace the current {count, plural, one{dossier} other{dossier}} state",
"success": "Successfully deleted state!",
"title": "Delete dossier state",
"warning": "The {name} state is assigned to {count} {count, plural, one{dossier} other{dossiers}}."
@ -594,7 +594,7 @@
"assign-file-to-me": {
"question": {
"multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?",
"single": "This document is currently assigned to someone else. Are you sure you want to replace the other user and assign it to yourself?"
"single": "This document is currently assigned to another user. Do you still want to assign the files to yourself?"
},
"title": "Neuen Reviewer zuweisen"
},
@ -629,9 +629,9 @@
},
"unsaved-changes": {
"confirmation-text": "Save and leave",
"details": "If you leave the tab without saving, all the unsaved changes will be lost.",
"details": "<strong>Warning: unsaved changes<strong><br><br>Please save your changes. If you leave now, any unsaved progress will be lost.",
"discard-changes-text": "DISCARD CHANGES",
"question": "Are you sure you want to leave the tab? You have unsaved changes.",
"question": "<strong>Warning: unsaved changes.</strong><br><br>Do you still want to leave the tab?",
"title": "You have unsaved changes"
},
"upload-report-template": {
@ -645,7 +645,7 @@
"content": "Begründung",
"dashboard": {
"empty-template": {
"description": "This template does not contain any dossiers. Start by creating a dossier to use it on.",
"description": "This template does not contain any dossiers. Create a dossier that applies this ruleset.",
"new-dossier": "New dossier"
},
"greeting": {
@ -1024,7 +1024,7 @@
"entities": "{count} {count, plural, one{entity} other{entities}}",
"entries": "{count} {count, plural, one{entry} other{entries}}",
"modified-on": "Modified on: {date}",
"title": "",
"title": "Edit dossier template",
"valid-from": "Valid from: {date}",
"valid-to": "Valid to: {date}"
},
@ -1223,7 +1223,7 @@
},
"content": {
"comment": "Comment",
"comment-placeholder": "Add remarks or mentions...",
"comment-placeholder": "Add remarks or notes...",
"custom-rectangle": "Custom Rectangle",
"imported": "Imported Redaction",
"legal-basis": "Legal basis",
@ -1660,7 +1660,7 @@
},
"convert": {
"confirmation": "The {count} selected {count, plural, one{earmark} other{earmarks}} will be converted",
"details": "All earmarks from the document will be converted to imported redactions, using the color set up in the 'Default colors' section of the app.",
"details": "All earmarks from the document will be converted to imported redactions, using the color defined by the application admin.",
"options": {
"all-pages": {
"description": "The earmarks in the selected HEX color will be converted on all pages of the document.",
@ -1899,7 +1899,7 @@
"confirmation-dialog": {
"cancel": "Cancel",
"question": "Manual changes could get lost if OCR makes changes at those positions. Are you sure you want to proceed?",
"title": "Warning: the file has manual adjustments!"
"title": "Warning: The file contains manual changes!"
}
},
"overwrite-files-dialog": {
@ -1975,14 +1975,14 @@
},
"form": {
"auto-expand-filters-on-action": "Auto-expand filters on my actions",
"help-mode-dialog": "Help Mode Dialog",
"help-mode-dialog": "Help mode activation dialog",
"load-all-annotations-warning": "Warning regarding loading all annotations at once in file preview",
"open-structured-view-by-default": "Display structured component management modal by default",
"table-extraction-type": "Table extraction type"
},
"label": "Preferences",
"title": "Edit preferences",
"warnings-description": "Selecting the 'Do not show this message again' checkbox will skip the warning dialog the next time you trigger it.",
"warnings-description": "Selecting the 'Do not show this message again' checkbox will skip the dialog the next time you trigger it.",
"warnings-label": "Prompts and dialogs",
"warnings-subtitle": "Do not show again options"
},
@ -2006,7 +2006,7 @@
},
"content": {
"comment": "Comment",
"comment-placeholder": "Add remarks or mentions...",
"comment-placeholder": "Add remarks or notes...",
"edit-text": "Edit text",
"legal-basis": "Legal basis",
"options": {
@ -2040,7 +2040,7 @@
},
"content": {
"comment": "Comment",
"comment-placeholder": "Add remarks or mentions...",
"comment-placeholder": "Add remarks or notes...",
"list-item": "",
"list-item-false-positive": "",
"options": {
@ -2074,7 +2074,7 @@
},
"content": {
"comment": "Comment",
"comment-placeholder": "Add remarks or mentions...",
"comment-placeholder": "Add remarks or notes...",
"options": {
"do-not-recommend": {
"description": "Do not recommend the selected term in any document of this dossier.",
@ -2272,7 +2272,7 @@
"title": "Authentifizierung aktivieren"
},
"table-header": {
"selected-count": ""
"selected-count": "{count} selected"
},
"tenant-resolve": {
"contact-administrator": "Cannot remember the workspace? <b>Please contact your administrator.</b>",

View File

@ -18,7 +18,7 @@
},
"content": {
"comment": "Comment",
"comment-placeholder": "Add remarks or mentions...",
"comment-placeholder": "Add remarks or notes...",
"selected-text": "Selected text:",
"type": "Type",
"type-placeholder": "Select type..."
@ -37,7 +37,7 @@
"save-and-add-members": "Save and edit team"
},
"errors": {
"dossier-already-exists": "Dossier with this name already exists! If it is in the trash, you need to permanently delete it first to re-use the name. If it is an active or archived dossier, please choose a different name.",
"dossier-already-exists": "<strong>Dossier name already exists.</strong>\n<ul><li>If the dossier is in trash, you can delete it permanently to reuse the name.</li>\n<li>If the dossier is active or archived, please use a different name.</li></ul>",
"generic": "Failed to save dossier."
},
"form": {
@ -60,7 +60,7 @@
},
"add-edit-clone-dossier-template": {
"error": {
"conflict": "Failed to create dossier template: a dossier template with the same name already exists."
"conflict": "<strong>Template name already exists.</strong><br><br>Please choose a different name."
},
"form": {
"apply-updates-default": {
@ -96,7 +96,7 @@
},
"add-edit-dossier-attribute": {
"error": {
"generic": "Failed to save attribute!"
"generic": "Failed to save attribute"
},
"form": {
"label": "Attribute name",
@ -116,7 +116,7 @@
"rank": "Rank"
},
"save": "Save state",
"success": "Successfully {type, select, edit{updated} create{created} other{}} the dossier state!",
"success": "Dossier state {type, select, edit{has been updated} creation successful{created} other{}}.",
"title": "{type, select, edit{Edit {name}} create{Create} other{}} dossier state"
},
"add-edit-entity": {
@ -142,8 +142,8 @@
"template-and-dossier-dictionaries": "Template & dossier dictionaries"
},
"success": {
"create": "Entity added!",
"edit": "Entity updated. Please note that other users need to refresh the browser to see your changes."
"create": "Success: Entity created.",
"edit": "<strong>Entity updated.</strong><br><br>Please note that other users need to refresh their browsers to see your changes."
}
},
"add-edit-file-attribute": {
@ -156,8 +156,8 @@
"filterable-disabled": "The maximum number of filterable attributes ({maxNumber}) has been reached.",
"name": "Attribute name",
"name-placeholder": "Enter name",
"primary": "Set as primary",
"read-only": "Make read-only",
"primary": "Primary attribute",
"read-only": "Read-only",
"type": "Type"
},
"save": "Save attribute",
@ -186,8 +186,8 @@
"save-changes": "Save changes"
},
"error": {
"email-already-used": "This e-mail address is already in use by a different user!",
"generic": "Failed to save user!"
"email-already-used": "This e-mail address is already associated with another user.",
"generic": "Failed to save user"
},
"form": {
"email": "E-mail",
@ -210,7 +210,7 @@
},
"content": {
"comment": "Comment",
"comment-placeholder": "Add remarks or mentions...",
"comment-placeholder": "Add remarks or notes...",
"options": {
"in-dossier": {
"description": "Add hint in every document in {dossierName}.",
@ -274,7 +274,7 @@
"message": {
"dictionary": {
"add": {
"conflict-error": "Cannot add ''{content}'' to the {dictionaryName} dictionary because it was recognized as a general term that appears too often in texts.",
"conflict-error": "<strong>Stop word term: ''{content}''</strong><br><br>''{content}'' is a frequently occurring term that cannot be stored for annotation across the entire dossier or all dossiers.",
"error": "Failed to add entry to dictionary: {error}",
"success": "Entry added to dictionary. Changes will be visible after reanalysis."
},
@ -530,24 +530,24 @@
"archive": "Archive dossier",
"cancel": "Cancel",
"checkbox": {
"documents": "All documents will be archived and cannot be put back to active"
"documents": "All documents will be archived and cannot be returned to active status."
},
"details": "Restoring an archived dossier is not possible anymore, once it got archived.",
"details": "Be aware that archiving is an irreversible action. Documents archived will no longer be available for active use.",
"title": "Archive {dossierName}",
"toast-error": "Please confirm that you understand the ramifications of your action!",
"toast-error": "Please confirm that you understand the consequences of this action.",
"warning": "Are you sure you want to archive the dossier?"
},
"confirm-delete-attribute": {
"cancel": "Keep {count, plural, one{attribute} other{attributes}}",
"delete": "Delete {count, plural, one{attribute} other{attributes}}",
"dossier-impacted-documents": "All dossiers based on this template will be affected",
"dossier-lost-details": "All values for this attribute will be lost",
"file-impacted-documents": "All documents {count, plural, one{it is} other{they are}} used on will be impacted",
"file-lost-details": "All inputted details on the documents will be lost",
"impacted-report": "{reportsCount} reports use the placeholder for this attribute and need to be adjusted",
"dossier-impacted-documents": "This action will affect all dossiers that use this template.",
"dossier-lost-details": "All attribute values entered by users on document level will be lost.",
"file-impacted-documents": "All documents that use {count, plural, one{his attribute} other{these attributes}} will be impacted.",
"file-lost-details": "All information entered by users on document level will be lost.",
"impacted-report": "<strong>{reportsCount} reports currently use the placeholder for this attribute.</strong> <br><br>Please update them accordingly.",
"title": "Delete {count, plural, one{{name}} other{file attributes}}",
"toast-error": "Please confirm that you understand the ramifications of your action!",
"warning": "Warning: this cannot be undone!"
"toast-error": "Please confirm that you understand the consequences of this action.",
"warning": "Warning: This action cannot be undone!"
},
"confirm-delete-dossier-state": {
"cancel": "Cancel",
@ -555,9 +555,9 @@
"delete-replace": "Delete and replace",
"form": {
"state": "Replace state",
"state-placeholder": "Choose another state"
"state-placeholder": "Select another state"
},
"question": "Replace the {count, plural, one{dossier's} other{dossiers'}} state with another state",
"question": "Select another state to replace the current {count, plural, one{dossier} other{dossier}} state",
"success": "Successfully deleted state!",
"title": "Delete dossier state",
"warning": "The {name} state is assigned to {count} {count, plural, one{dossier} other{dossiers}}."
@ -568,8 +568,8 @@
"impacted-documents": "All documents pending review from the {usersCount, plural, one{user} other{users}} will be impacted",
"impacted-dossiers": "{dossiersCount} {dossiersCount, plural, one{dossier} other{dossiers}} will be impacted",
"title": "Delete {usersCount, plural, one{user} other{users}} from workspace",
"toast-error": "Please confirm that you understand the ramifications of your action!",
"warning": "Warning: this cannot be undone!"
"toast-error": "Please confirm that you understand the consequences of this action.",
"warning": "Warning: This action cannot be undone!"
},
"confirmation-dialog": {
"approve-file-without-analysis": {
@ -579,7 +579,7 @@
"title": "Warning!"
},
"approve-file": {
"question": "This document has unseen changes, do you wish to approve it anyway?",
"question": "This document contains unseen changes that have been added during the reanalysis.<br><br>Do you still want to approve it?",
"title": "Warning!"
},
"approve-multiple-files-without-analysis": {
@ -589,18 +589,18 @@
"title": "Warning"
},
"approve-multiple-files": {
"question": "At least one of the files you selected has unseen changes, do you wish to approve them anyway?",
"question": "At least one of the selected files contains unseen changes that have been added during the reanalysis.<br><br>Do you still want to approve them?",
"title": "Warning!"
},
"assign-file-to-me": {
"question": {
"multiple": "At least one document is currently assigned to someone else. Are you sure you want to replace them and assign yourself to these documents?",
"single": "This document is currently assigned to someone else. Are you sure you want to replace the other user and assign it to yourself?"
"multiple": "At least one of the selected documents is currently assigned to another user.<br><br>Do you still want to reassign the files to yourself?",
"single": "This document is currently assigned to another user. Do you still want to assign the files to yourself?"
},
"title": "Re-assign user"
},
"compare-file": {
"question": "<strong>Warning!</strong> <br><br> Number of pages does not match, current document has <strong>{currentDocumentPageCount} page(s)</strong>. Uploaded document has <strong>{compareDocumentPageCount} page(s)</strong>. <br><br> Do you wish to proceed?",
"question": "<strong>Warning: page count mismatch</strong> <br><br> Current document: <strong>{currentDocumentPageCount} page(s)</strong>. Upload document: <strong>{compareDocumentPageCount} page(s)</strong>. <br><br>This appears to be a different document. Do you wish to proceed?",
"title": "Compare with file: {fileName}"
},
"delete-dossier": {
@ -630,23 +630,23 @@
},
"unsaved-changes": {
"confirmation-text": "Save and leave",
"details": "If you leave the tab without saving, all the unsaved changes will be lost.",
"details": "<strong>Warning: unsaved changes<strong><br><br>Please save your changes. If you leave now, any unsaved progress will be lost.",
"discard-changes-text": "DISCARD CHANGES",
"question": "Are you sure you want to leave the tab? You have unsaved changes.",
"question": "<strong>Warning: unsaved changes.</strong><br><br>Do you still want to leave the tab?",
"title": "You have unsaved changes"
},
"upload-report-template": {
"alternate-confirmation-text": "Upload as multi-file report",
"confirmation-text": "Upload as single-file report",
"deny-text": "Cancel upload",
"question": "Please choose if <b>{fileName}</b> is a single or multi-file report template",
"question": "Please indicate if <b>{fileName}</b> is a single or multi-file report template",
"title": "Report template upload"
}
},
"content": "Reason",
"dashboard": {
"empty-template": {
"description": "This template does not contain any dossiers. Start by creating a dossier to use it on.",
"description": "This template does not contain any dossiers. Create a dossier that applies this ruleset.",
"new-dossier": "New dossier"
},
"greeting": {
@ -1049,7 +1049,7 @@
},
"entities": "{length} {length, plural, one{entity} other{entities}}",
"error": {
"conflict": "Cannot delete this dossier template! At least one dossier uses this template!",
"conflict": "Cannot delete this dossier template. At least one dossier uses this template.",
"generic": "Cannot delete this dossier template!"
},
"no-data": {
@ -1144,7 +1144,7 @@
"color-placeholder": "Color"
},
"save": "Save",
"success": "Color saved successfully. Please note that the users need to refresh the browser to see the updated color."
"success": "<strong>Success: Color saved.</strong><br><br>Please note that other users need to refresh their browsers to see your changes."
},
"edit-dossier-dialog": {
"actions": {
@ -1224,7 +1224,7 @@
},
"content": {
"comment": "Comment",
"comment-placeholder": "Add remarks or mentions...",
"comment-placeholder": "Add remarks or notes...",
"custom-rectangle": "Custom Rectangle",
"imported": "Imported Redaction",
"legal-basis": "Legal basis",
@ -1661,7 +1661,7 @@
},
"convert": {
"confirmation": "The {count} selected {count, plural, one{earmark} other{earmarks}} will be converted",
"details": "All earmarks from the document will be converted to imported redactions, using the color set up in the 'Default colors' section of the app.",
"details": "All earmarks from the document will be converted to imported redactions, using the color defined by the application admin.",
"options": {
"all-pages": {
"description": "The earmarks in the selected HEX color will be converted on all pages of the document.",
@ -1900,7 +1900,7 @@
"confirmation-dialog": {
"cancel": "Cancel",
"question": "Manual changes could get lost if OCR makes changes at those positions. Are you sure you want to proceed?",
"title": "Warning: the file has manual adjustments!"
"title": "Warning: The file contains manual changes!"
}
},
"overwrite-files-dialog": {
@ -1976,14 +1976,14 @@
},
"form": {
"auto-expand-filters-on-action": "Auto-expand filters on my actions",
"help-mode-dialog": "Help Mode Dialog",
"help-mode-dialog": "Help mode activation dialog",
"load-all-annotations-warning": "Warning regarding loading all annotations at once in file preview",
"open-structured-view-by-default": "Display structured component management modal by default",
"table-extraction-type": "Table extraction type"
},
"label": "Preferences",
"title": "Edit preferences",
"warnings-description": "Selecting the 'Do not show this message again' checkbox will skip the warning dialog the next time you trigger it.",
"warnings-description": "Selecting the 'Do not show this message again' checkbox will skip the dialog the next time you trigger it.",
"warnings-label": "Prompts and dialogs",
"warnings-subtitle": "Do not show again options"
},
@ -2007,7 +2007,7 @@
},
"content": {
"comment": "Comment",
"comment-placeholder": "Add remarks or mentions...",
"comment-placeholder": "Add remarks or notes...",
"edit-text": "Edit text",
"legal-basis": "Legal basis",
"options": {
@ -2041,7 +2041,7 @@
},
"content": {
"comment": "Comment",
"comment-placeholder": "Add remarks or mentions...",
"comment-placeholder": "Add remarks or notes...",
"list-item": "",
"list-item-false-positive": "",
"options": {
@ -2075,7 +2075,7 @@
},
"content": {
"comment": "Comment",
"comment-placeholder": "Add remarks or mentions...",
"comment-placeholder": "Add remarks or notes...",
"options": {
"do-not-recommend": {
"description": "Do not recommend the selected term in any document of this dossier.",

View File

@ -27,9 +27,9 @@
}
},
"add-clone-dossier-template": {
"save": "",
"save-and-edit": "",
"title": ""
"save": "{type, select, clone{Clone} other{Save}}",
"save-and-edit": "{type, select, clone{Clone} other{Save}} and edit",
"title": "{type, select, clone{Clone {dossierTemplateName}} other{Create dossier template}}"
},
"add-dossier-dialog": {
"actions": {
@ -1024,7 +1024,7 @@
"entities": "{count} {count, plural, one{entity} other{entities}}",
"entries": "{count} {count, plural, one{entry} other{entries}}",
"modified-on": "Modified on: {date}",
"title": "",
"title": "Edit dossier template",
"valid-from": "Valid from: {date}",
"valid-to": "Valid to: {date}"
},
@ -2272,7 +2272,7 @@
"title": "Authentifizierung aktivieren"
},
"table-header": {
"selected-count": ""
"selected-count": "{count} selected"
},
"tenant-resolve": {
"contact-administrator": "Cannot remember the workspace? <b>Please contact your administrator.</b>",