Merge branch 'master' into VM/RED-8692
This commit is contained in:
commit
5c096eb876
@ -66,6 +66,7 @@ export class AnnotationWrapper implements IListable {
|
||||
isRemovedLocally = false;
|
||||
hiddenInWorkload = false;
|
||||
lastManualChange: ManualRedactionType;
|
||||
entry: IEntityLogEntry;
|
||||
|
||||
get isRuleBased() {
|
||||
return this.engines.includes(LogEntryEngines.RULE);
|
||||
@ -214,7 +215,6 @@ export class AnnotationWrapper implements IListable {
|
||||
|
||||
static fromData(
|
||||
logEntry: IEntityLogEntry,
|
||||
allLogEntries: IEntityLogEntry[],
|
||||
dictionary: Dictionary,
|
||||
changeLogType: ChangeType,
|
||||
legalBasisList: ILegalBasis[],
|
||||
@ -275,10 +275,6 @@ export class AnnotationWrapper implements IListable {
|
||||
|
||||
const lastRelevantManualChange = logEntry.manualChanges?.at(-1);
|
||||
annotationWrapper.lastManualChange = lastRelevantManualChange?.manualRedactionType;
|
||||
if (annotationWrapper.pending) {
|
||||
const removedEntry = allLogEntries.find((e: IEntityLogEntry) => e.id === annotationWrapper.id);
|
||||
logEntry.oldState = removedEntry?.state;
|
||||
}
|
||||
annotationWrapper.superType = SuperTypeMapper[logEntry.entryType][logEntry.state](logEntry);
|
||||
annotationWrapper.superTypeLabel = annotationTypesTranslations[annotationWrapper.superType];
|
||||
|
||||
@ -295,7 +291,7 @@ export class AnnotationWrapper implements IListable {
|
||||
annotationWrapper.color = dictionary ? (dictionary[colorKey] as string) : (defaultColors[defaultColor] as string);
|
||||
}
|
||||
|
||||
annotationWrapper['entry'] = logEntry;
|
||||
annotationWrapper.entry = logEntry;
|
||||
|
||||
return annotationWrapper;
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<ng-container *ngIf="configService.listingMode$ | async as mode">
|
||||
<div
|
||||
(click)="editFileAttribute($event)"
|
||||
(click)="handleFieldClick($event)"
|
||||
(mousedown)="handleClick($event)"
|
||||
[ngClass]="{ 'workflow-attribute': mode === 'workflow', 'file-name-column': fileNameColumn }"
|
||||
class="file-attribute"
|
||||
@ -37,7 +37,11 @@
|
||||
*ngIf="!isInEditMode; else input"
|
||||
[attr.help-mode-key]="'edit_file_attributes'"
|
||||
[class.help-mode-button]="helpModeService.isHelpModeActive$ | async"
|
||||
[ngClass]="{ 'workflow-edit-button': mode === 'workflow', 'action-buttons edit-button': !fileNameColumn }"
|
||||
[ngClass]="{
|
||||
'workflow-edit-button': mode === 'workflow',
|
||||
'action-buttons edit-button': !fileNameColumn,
|
||||
'filename-edit-button': fileNameColumn
|
||||
}"
|
||||
>
|
||||
<div [ngClass]="{ 'workflow-edit-icon': mode === 'workflow', 'edit-icon': !fileNameColumn }">
|
||||
<mat-icon [svgIcon]="'iqser:edit'"></mat-icon>
|
||||
|
||||
@ -170,6 +170,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
.filename-edit-button:hover {
|
||||
background-color: var(--iqser-grey-6);
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.file-attribute:hover {
|
||||
&.workflow-attribute {
|
||||
background-color: var(--iqser-grey-6);
|
||||
|
||||
@ -150,7 +150,13 @@ export class FileAttributeComponent extends BaseFormComponent implements OnDestr
|
||||
this.#subscriptions.unsubscribe();
|
||||
}
|
||||
|
||||
async editFileAttribute($event: MouseEvent): Promise<void> {
|
||||
handleFieldClick($event: MouseEvent) {
|
||||
if (!this.fileNameColumn) {
|
||||
this.editFileAttribute($event);
|
||||
}
|
||||
}
|
||||
|
||||
editFileAttribute($event: MouseEvent) {
|
||||
if (
|
||||
!this.file.isInitialProcessing &&
|
||||
this.permissionsService.canEditFileAttributes(this.file, this.dossier) &&
|
||||
|
||||
@ -31,9 +31,10 @@
|
||||
|
||||
.file-name-cell:hover {
|
||||
::ng-deep.file-name-column {
|
||||
background: var(--iqser-grey-6);
|
||||
.filename-edit-button {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
|
||||
div {
|
||||
mat-icon {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
@ -40,6 +40,16 @@ export class RedactTextDialogComponent
|
||||
readonly #manualRedactionTypeExists = inject(DictionaryService).hasManualType(this.#dossier.dossierTemplateId);
|
||||
#applyToAllDossiers = this.data.applyToAllDossiers ?? true;
|
||||
|
||||
get defaultOption() {
|
||||
const inDossierOption = this.options.find(option => option.value === RedactOrHintOptions.IN_DOSSIER);
|
||||
this.dictionaryRequest = !!inDossierOption && !inDossierOption.disabled;
|
||||
if (this.dictionaryRequest) {
|
||||
this.#setDictionaries();
|
||||
return inDossierOption;
|
||||
}
|
||||
return this.options[0];
|
||||
}
|
||||
|
||||
constructor(
|
||||
private readonly _justificationsService: JustificationsService,
|
||||
private readonly _dictionaryService: DictionaryService,
|
||||
@ -49,6 +59,7 @@ export class RedactTextDialogComponent
|
||||
|
||||
this.options = getRedactOrHintOptions(this.#dossier, this.#applyToAllDossiers, this.data.isApprover, this.data.isPageExcluded);
|
||||
this.form = this.#getForm();
|
||||
this.#setupValidators(this.dictionaryRequest ? RedactOrHintOptions.IN_DOSSIER : RedactOrHintOptions.ONLY_HERE);
|
||||
|
||||
this.form.controls.option.valueChanges
|
||||
.pipe(
|
||||
@ -152,10 +163,10 @@ export class RedactTextDialogComponent
|
||||
#getForm(): FormGroup {
|
||||
return this._formBuilder.group({
|
||||
selectedText: this.data?.manualRedactionEntryWrapper?.manualRedactionEntry?.value,
|
||||
reason: [null as LegalBasisOption, Validators.required],
|
||||
reason: [null as LegalBasisOption],
|
||||
comment: [null],
|
||||
dictionary: [this.#manualRedactionTypeExists ? SuperTypes.ManualRedaction : null],
|
||||
option: this.options[0],
|
||||
option: this.defaultOption,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -1,35 +1,28 @@
|
||||
<section class="dialog">
|
||||
<form (submit)="save()" [formGroup]="form">
|
||||
<div
|
||||
*ngIf="data.redactions.length === 1"
|
||||
[innerHTML]="
|
||||
'remove-redaction.dialog.title' | translate: { type: hint ? 'hint' : recommendation ? 'recommendation' : 'redaction' }
|
||||
"
|
||||
class="dialog-header heading-l"
|
||||
></div>
|
||||
<div
|
||||
*ngIf="data.redactions.length > 1"
|
||||
[innerHTML]="
|
||||
'remove-redaction.dialog.title-bulk' | translate: { type: hint ? 'hint' : recommendation ? 'recommendation' : 'redaction' }
|
||||
"
|
||||
[innerHTML]="(isBulk ? 'remove-redaction.dialog.title-bulk' : 'remove-redaction.dialog.title') | translate: typeTranslationArg"
|
||||
class="dialog-header heading-l"
|
||||
></div>
|
||||
|
||||
<div class="dialog-content redaction">
|
||||
<div *ngIf="data.redactions.length > 1">
|
||||
<div *ngIf="!isImage" class="iqser-input-group">
|
||||
<label
|
||||
[translateParams]="{ type: hint ? 'hints' : recommendation ? 'recommendations' : 'redactions' }"
|
||||
[translate]="'remove-redaction.dialog.content.redacted-text'"
|
||||
[translateParams]="typeTranslationArg"
|
||||
[translate]="
|
||||
isBulk ? 'remove-redaction.dialog.content.redacted-text-bulk' : 'remove-redaction.dialog.content.redacted-text'
|
||||
"
|
||||
class="selected-text"
|
||||
></label>
|
||||
|
||||
<cdk-virtual-scroll-viewport
|
||||
*ngIf="data.redactions.length > 1; else singleSelected"
|
||||
[itemSize]="16"
|
||||
[ngStyle]="{ height: redactedTexts.length <= 5 ? 16 * redactedTexts.length + 'px' : 80 + 'px' }"
|
||||
>
|
||||
<ul *cdkVirtualFor="let text of redactedTexts; let idx = index">
|
||||
<li>
|
||||
{{
|
||||
<li
|
||||
[innerHTML]="
|
||||
(isFalsePositive
|
||||
? 'remove-redaction.dialog.content.list-item-false-positive'
|
||||
: 'remove-redaction.dialog.content.list-item'
|
||||
@ -37,15 +30,36 @@
|
||||
| translate
|
||||
: {
|
||||
text: text,
|
||||
type: data.redactions[idx].typeLabel,
|
||||
context: data.falsePositiveContext[idx]
|
||||
}
|
||||
| replaceNbsp
|
||||
}}
|
||||
</li>
|
||||
"
|
||||
></li>
|
||||
</ul>
|
||||
</cdk-virtual-scroll-viewport>
|
||||
</div>
|
||||
|
||||
<ng-template #singleSelected>
|
||||
<span
|
||||
[innerHTML]="
|
||||
(recommendation
|
||||
? 'remove-redaction.dialog.content.list-item-false-recommendation'
|
||||
: isFalsePositive
|
||||
? 'remove-redaction.dialog.content.list-item-false-positive'
|
||||
: 'remove-redaction.dialog.content.list-item'
|
||||
)
|
||||
| translate
|
||||
: {
|
||||
text: redactedTexts[0],
|
||||
type: data.redactions[0].typeLabel,
|
||||
context: data.falsePositiveContext[0]
|
||||
}
|
||||
| replaceNbsp
|
||||
"
|
||||
></span>
|
||||
</ng-template>
|
||||
|
||||
<iqser-details-radio [options]="options" formControlName="option"></iqser-details-radio>
|
||||
|
||||
<div class="iqser-input-group w-450">
|
||||
|
||||
@ -1,11 +1,10 @@
|
||||
@use 'common-mixins';
|
||||
|
||||
.dialog-content {
|
||||
height: 408px;
|
||||
height: 470px;
|
||||
}
|
||||
|
||||
cdk-virtual-scroll-viewport {
|
||||
margin-top: 8px;
|
||||
@include common-mixins.scroll-bar;
|
||||
}
|
||||
|
||||
|
||||
@ -1,9 +1,12 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
import { FormBuilder, UntypedFormGroup } from '@angular/forms';
|
||||
import { DetailsRadioOption, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui';
|
||||
import { tap } from 'rxjs/operators';
|
||||
import { getRemoveRedactionOptions, RemoveAnnotationOptions, RemoveRedactionOption } from '../../utils/dialog-options';
|
||||
import {
|
||||
getRemoveRedactionOptions,
|
||||
RemoveAnnotationOptions,
|
||||
RemoveRedactionOption,
|
||||
RemoveRedactionOptions,
|
||||
} from '../../utils/dialog-options';
|
||||
import { RemoveRedactionData, RemoveRedactionResult } from '../../utils/dialog-types';
|
||||
import { Roles } from '@users/roles';
|
||||
import { DialogHelpModeKeys } from '../../utils/constants';
|
||||
@ -17,58 +20,52 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent<
|
||||
RemoveRedactionData,
|
||||
RemoveRedactionResult
|
||||
> {
|
||||
#applyToAllDossiers: boolean;
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
readonly options: DetailsRadioOption<RemoveRedactionOption>[];
|
||||
readonly recommendation: boolean;
|
||||
readonly hint: boolean;
|
||||
readonly skipped: boolean;
|
||||
readonly redactedTexts: string[];
|
||||
readonly options: DetailsRadioOption<RemoveRedactionOption>[] = getRemoveRedactionOptions(this.data);
|
||||
readonly recommendation = this.data.redactions.every(redaction => redaction.isRecommendation);
|
||||
readonly hint = this.data.redactions[0].HINT;
|
||||
readonly skipped = this.data.redactions.some(annotation => annotation.isSkipped);
|
||||
readonly redactedTexts = this.data.redactions.map(annotation => annotation.value);
|
||||
readonly isImage = this.data.redactions.every(redaction => redaction.isImage);
|
||||
protected readonly roles = Roles;
|
||||
form!: UntypedFormGroup;
|
||||
|
||||
constructor(private readonly _formBuilder: FormBuilder) {
|
||||
super();
|
||||
this.recommendation = this.data.redactions[0].isRecommendation;
|
||||
this.hint = this.data.redactions[0].HINT;
|
||||
this.skipped = this.data.redactions.some(annotation => annotation.isSkipped);
|
||||
this.options = getRemoveRedactionOptions(this.data);
|
||||
this.redactedTexts = this.data.redactions.map(annotation => annotation.value);
|
||||
this.form = this.#getForm();
|
||||
this.#applyToAllDossiers = this.data.applyToAllDossiers ?? true;
|
||||
|
||||
this.form
|
||||
.get('option')
|
||||
.valueChanges.pipe(
|
||||
tap(() => {
|
||||
for (const option of this.options) {
|
||||
if (option.extraOption) {
|
||||
option.extraOption.checked = this.#applyToAllDossiers;
|
||||
}
|
||||
}
|
||||
}),
|
||||
takeUntilDestroyed(),
|
||||
)
|
||||
.subscribe();
|
||||
}
|
||||
|
||||
get isFalsePositive(): boolean {
|
||||
return this.form.get('option').value.value === RemoveAnnotationOptions['FALSE' + '_POSITIVE'];
|
||||
return this.form.get('option').value.value === RemoveAnnotationOptions.FALSE_POSITIVE;
|
||||
}
|
||||
|
||||
get helpButtonKey() {
|
||||
if (this.hint) {
|
||||
return DialogHelpModeKeys.HINT_REMOVE
|
||||
return DialogHelpModeKeys.HINT_REMOVE;
|
||||
}
|
||||
if (this.recommendation) {
|
||||
return DialogHelpModeKeys.RECOMMENDATION_REMOVE
|
||||
return DialogHelpModeKeys.RECOMMENDATION_REMOVE;
|
||||
}
|
||||
if (this.skipped) {
|
||||
return DialogHelpModeKeys.SKIPPED_REMOVE
|
||||
return DialogHelpModeKeys.SKIPPED_REMOVE;
|
||||
}
|
||||
return DialogHelpModeKeys.REDACTION_REMOVE;
|
||||
}
|
||||
|
||||
get defaultOption() {
|
||||
const removeHereOption = this.options.find(option => option.value === RemoveRedactionOptions.ONLY_HERE);
|
||||
if (!!removeHereOption && !removeHereOption.disabled) return removeHereOption;
|
||||
return this.options[0];
|
||||
}
|
||||
|
||||
get typeTranslationArg() {
|
||||
return { type: this.hint ? 'hint' : this.recommendation ? 'recommendation' : 'redaction' };
|
||||
}
|
||||
|
||||
get isBulk() {
|
||||
return this.data.redactions.length > 1;
|
||||
}
|
||||
|
||||
save(): void {
|
||||
this.close(this.form.getRawValue());
|
||||
}
|
||||
@ -76,7 +73,7 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent<
|
||||
#getForm() {
|
||||
return this._formBuilder.group({
|
||||
comment: [null],
|
||||
option: [this.options[0]],
|
||||
option: [this.defaultOption],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -228,9 +228,16 @@ export class FileDataService extends EntitiesService<AnnotationWrapper, Annotati
|
||||
|
||||
const changeType = this.#getChangeLogType(entry, file);
|
||||
|
||||
if (entry.state === EntryStates.PENDING) {
|
||||
const originalAnnotation = this.#findOriginalAnnotation(annotations, entry);
|
||||
if (originalAnnotation) {
|
||||
entry.oldState = originalAnnotation.entry.state;
|
||||
originalAnnotation.pending = true;
|
||||
}
|
||||
}
|
||||
|
||||
const annotation = AnnotationWrapper.fromData(
|
||||
entry,
|
||||
entityLog.entityLogEntry,
|
||||
dictionary,
|
||||
changeType,
|
||||
entityLog.legalBasis ?? [],
|
||||
@ -303,4 +310,16 @@ export class FileDataService extends EntitiesService<AnnotationWrapper, Annotati
|
||||
annotations.push(pendingAnnotation);
|
||||
}
|
||||
}
|
||||
|
||||
#findOriginalAnnotation(annotations: AnnotationWrapper[], pendingEntry: IEntityLogEntry) {
|
||||
for (let i = annotations.length - 1; i >= 0; i--) {
|
||||
const annotation = annotations[i];
|
||||
if (annotation.positions[0].page !== pendingEntry.positions[0].pageNumber) {
|
||||
return;
|
||||
}
|
||||
if (annotation.id === pendingEntry.id) {
|
||||
return annotation;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -177,14 +177,14 @@ export const getRemoveRedactionOptions = (
|
||||
extraOption: !isDocumine
|
||||
? {
|
||||
label: translations.IN_DOSSIER.extraOptionLabel,
|
||||
checked: applyToAllDossiers ?? true,
|
||||
checked: redactions[0].isRecommendation && applyToAllDossiers,
|
||||
hidden: !isApprover,
|
||||
}
|
||||
: null,
|
||||
});
|
||||
}
|
||||
if (permissions.canMarkAsFalsePositive) {
|
||||
if (data.redactions[0].isRecommendation) {
|
||||
if (redactions[0].isRecommendation) {
|
||||
options.push({
|
||||
label: translations.DO_NOT_RECOMMEND.label,
|
||||
description: isBulk ? translations.DO_NOT_RECOMMEND.descriptionBulk : translations.DO_NOT_RECOMMEND.description,
|
||||
@ -198,7 +198,7 @@ export const getRemoveRedactionOptions = (
|
||||
extraOption: !isDocumine
|
||||
? {
|
||||
label: translations.DO_NOT_RECOMMEND.extraOptionLabel,
|
||||
checked: applyToAllDossiers ?? true,
|
||||
checked: applyToAllDossiers,
|
||||
hidden: !isApprover,
|
||||
}
|
||||
: null,
|
||||
@ -217,8 +217,9 @@ export const getRemoveRedactionOptions = (
|
||||
extraOption: !isDocumine
|
||||
? {
|
||||
label: translations.FALSE_POSITIVE.extraOptionLabel,
|
||||
checked: applyToAllDossiers ?? true,
|
||||
checked: false,
|
||||
hidden: !isApprover,
|
||||
description: translations.FALSE_POSITIVE.extraOptionDescription,
|
||||
}
|
||||
: null,
|
||||
});
|
||||
|
||||
@ -132,7 +132,7 @@ export class AnnotationDrawService {
|
||||
return;
|
||||
}
|
||||
|
||||
if (annotationWrapper.pending) {
|
||||
if (annotationWrapper.pending && annotationWrapper.id.includes('pending')) {
|
||||
const polylineAnnot = this._pdf.polyline();
|
||||
polylineAnnot.ReadOnly = true;
|
||||
polylineAnnot.StrokeColor = this.convertColor(annotationWrapper.color);
|
||||
@ -140,8 +140,6 @@ export class AnnotationDrawService {
|
||||
polylineAnnot.Id = annotationWrapper.id;
|
||||
polylineAnnot.PageNumber = pageNumber;
|
||||
polylineAnnot.Opacity = polylineAnnot.Id.endsWith('pending') ? 0 : 0.5;
|
||||
console.log(polylineAnnot.Id);
|
||||
console.log(polylineAnnot.Id.split('-'));
|
||||
|
||||
const points = this.#computePolylinePoints(annotationWrapper.positions, annotationWrapper.pageNumber);
|
||||
for (let i = 0; i < points.length; i++) {
|
||||
@ -190,7 +188,7 @@ export class AnnotationDrawService {
|
||||
annotation.setCustomData('skipped', String(annotationWrapper.isSkipped));
|
||||
annotation.setCustomData('changeLog', String(annotationWrapper.isChangeLogEntry));
|
||||
annotation.setCustomData('changeLogRemoved', String(annotationWrapper.isRemoved));
|
||||
annotation.setCustomData('opacity', String(!annotationWrapper.pending ? annotation.Opacity : annotation.Opacity / 2));
|
||||
annotation.setCustomData('opacity', String(annotation.Opacity));
|
||||
|
||||
const redactionColor = this._defaultColorsService.getColor(dossierTemplateId, 'previewColor');
|
||||
annotation.setCustomData('redactionColor', String(redactionColor));
|
||||
|
||||
@ -48,6 +48,7 @@
|
||||
[disabled]="disabled"
|
||||
[label]="'edit-dossier-dialog.attributes.upload-image' | translate"
|
||||
[type]="iconButtonTypes.dark"
|
||||
[buttonId]="'upload-image-attribute-' + (attr.label | snakeCase)"
|
||||
class="upload-button"
|
||||
icon="iqser:upload"
|
||||
></iqser-icon-button>
|
||||
|
||||
@ -29,6 +29,7 @@ import { DossiersListingActionsComponent } from './components/dossiers-listing-a
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { SideNavComponent, SmallChipComponent, StatusBarComponent } from '@iqser/common-ui/lib/shared';
|
||||
import { SelectComponent } from '@shared/components/select/select.component';
|
||||
import { SnakeCasePipe } from '@common-ui/pipes/snake-case.pipe';
|
||||
|
||||
const components = [
|
||||
FileActionsComponent,
|
||||
@ -67,6 +68,7 @@ const dialogs = [EditDossierDialogComponent, AssignReviewerApproverDialogCompone
|
||||
IqserAllowDirective,
|
||||
IqserDenyDirective,
|
||||
SelectComponent,
|
||||
SnakeCasePipe,
|
||||
],
|
||||
})
|
||||
export class SharedDossiersModule {}
|
||||
|
||||
@ -6,6 +6,7 @@ export interface DialogOption {
|
||||
description: string;
|
||||
descriptionBulk?: string;
|
||||
extraOptionLabel?: string;
|
||||
extraOptionDescription?: string;
|
||||
}
|
||||
|
||||
export const redactTextTranslations: Record<'onlyHere' | 'inDossier', DialogOption> = {
|
||||
|
||||
@ -20,6 +20,7 @@ export const removeRedactionTranslations: { [key in RemoveRedactionOption]: Dial
|
||||
description: _('remove-redaction.dialog.content.options.false-positive.description'),
|
||||
descriptionBulk: _('remove-redaction.dialog.content.options.false-positive.description-bulk'),
|
||||
extraOptionLabel: _('remove-redaction.dialog.content.options.false-positive.extraOptionLabel'),
|
||||
extraOptionDescription: _('remove-redaction.dialog.content.options.false-positive.extraOptionDescription'),
|
||||
},
|
||||
DO_NOT_RECOMMEND: {
|
||||
label: _('remove-redaction.dialog.content.options.do-not-recommend.label'),
|
||||
|
||||
@ -2017,19 +2017,19 @@
|
||||
"list-item-false-positive": "",
|
||||
"options": {
|
||||
"false-positive": {
|
||||
"description": "''{value}'' is not a ''{type}'' in this context: ''{context}''.",
|
||||
"description": "Mark this redaction as a false-positive. The term will not be redacted in this dossier if it occurs in the same context.",
|
||||
"description-bulk": "",
|
||||
"label": "False positive"
|
||||
"label": "Remove from dossier in this context"
|
||||
},
|
||||
"in-dossier": {
|
||||
"description": "Do not annotate ''{value}'' as ''{type}'' in any dossier.",
|
||||
"description": "Do not annotate the term in this dossier.",
|
||||
"description-bulk": "",
|
||||
"label": "No longer annotate as ''{type}''",
|
||||
"label": "Do not annotate as <i>{type}</i>",
|
||||
"label-bulk": ""
|
||||
},
|
||||
"only-here": {
|
||||
"description": "Do not annotate ''{value}'' at this position in the current document.",
|
||||
"description-bulk": "Do not annotate the selected terms at this position in the current document.",
|
||||
"description": "Do not annotate the term at this position in the current document.",
|
||||
"description-bulk": "Do not auto-annotate the selected terms at this position in the current document.",
|
||||
"label": "Remove here"
|
||||
}
|
||||
},
|
||||
@ -2048,29 +2048,29 @@
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Add remarks or mentions...",
|
||||
"list-item": "{text}",
|
||||
"list-item-false-positive": "''{text}'' in the context: ''{context}''",
|
||||
"list-item-false-positive": "<b>{text}</b> as <i>{type}</i> in the context: <b>{context}</b>",
|
||||
"options": {
|
||||
"do-not-recommend": {
|
||||
"description": "Do not recommend ''{value}''as {type} in any document of the current dossier.",
|
||||
"description-bulk": "Do not recommend the selected terms in any document of the current dossier.",
|
||||
"description": "Do not recommend the selected term in any document of this dossier.",
|
||||
"description-bulk": "Do not recommend the selected terms in any document of this dossier.",
|
||||
"extraOptionLabel": "Apply to all active and future dossiers",
|
||||
"label": "Remove from dossier"
|
||||
},
|
||||
"false-positive": {
|
||||
"description": "''{value}'' is not a ''{type}'' in this context: ''{context}''.",
|
||||
"description-bulk": "Do not redact the selected terms in their respective context.",
|
||||
"description": "Mark this redaction as a false-positive. The term will not be redacted in this dossier if it occurs in the same context.",
|
||||
"description-bulk": "Mark these redactions as false-positives. The terms will not be redacted in this dossier if they occur in the same context.",
|
||||
"extraOptionLabel": "Apply to all active and future dossiers",
|
||||
"label": "False positive"
|
||||
"label": "Remove from dossier in this context"
|
||||
},
|
||||
"in-dossier": {
|
||||
"description": "Do not {type, select, hint{annotate} other{redact}} ''{value}'' in any document of the current dossier.",
|
||||
"description-bulk": "Do not redact the selected terms as their respective types in any dossier.",
|
||||
"description": "Do not {type, select, hint{annotate} other{redact}} the selected term in any document of this dossier.",
|
||||
"description-bulk": "Do not auto-redact the selected term in this dossier.",
|
||||
"extraOptionLabel": "Apply to all active and future dossiers",
|
||||
"label": "Remove from dossier",
|
||||
"label-bulk": "No longer redact in any dossier"
|
||||
"label-bulk": "Remove from dossier"
|
||||
},
|
||||
"only-here": {
|
||||
"description": "Do not {type, select, hint{annotate} other{redact}} ''{value}'' at this position in the current document.",
|
||||
"description": "Do not {type, select, hint{annotate} other{redact}} the term at this position in the current document.",
|
||||
"description-bulk": "Do not redact the selected terms at this position in the current document.",
|
||||
"label": "Remove here"
|
||||
}
|
||||
|
||||
@ -2017,19 +2017,19 @@
|
||||
"list-item-false-positive": "",
|
||||
"options": {
|
||||
"false-positive": {
|
||||
"description": "''{value}'' is not a ''{type}'' in this context: ''{context}''.",
|
||||
"description": "Mark this redaction as a false-positive. The term will not be redacted in this dossier if it occurs in the same context.",
|
||||
"description-bulk": "",
|
||||
"label": "False positive"
|
||||
"label": "Remove from dossier in this context"
|
||||
},
|
||||
"in-dossier": {
|
||||
"description": "Do not annotate ''{value}'' as ''{type}'' in any dossier.",
|
||||
"description": "Do not annotate the term in this dossier.",
|
||||
"description-bulk": "",
|
||||
"label": "No longer annotate as ''{type}''",
|
||||
"label": "Do not annotate as <i>{type}</i>",
|
||||
"label-bulk": ""
|
||||
},
|
||||
"only-here": {
|
||||
"description": "Do not annotate ''{value}'' at this position in the current document.",
|
||||
"description-bulk": "Do not annotate the selected terms at this position in the current document.",
|
||||
"description": "Do not annotate the term at this position in the current document.",
|
||||
"description-bulk": "Do not auto-annotate the selected terms at this position in the current document.",
|
||||
"label": "Remove here"
|
||||
}
|
||||
},
|
||||
@ -2048,34 +2048,37 @@
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Add remarks or mentions...",
|
||||
"list-item": "{text}",
|
||||
"list-item-false-positive": "''{text}'' in the context: ''{context}''",
|
||||
"list-item-false-positive": "<b>{text}</b> as <i>{type}</i> in the context: <b>{context}</b>",
|
||||
"list-item-false-recommendation": "<b>{text}</b> as <i>{type}</i>",
|
||||
"options": {
|
||||
"do-not-recommend": {
|
||||
"description": "Do not recommend ''{value}''as {type} in any document of the current dossier.",
|
||||
"description-bulk": "Do not recommend the selected terms in any document of the current dossier.",
|
||||
"description": "Do not recommend the selected term in any document of this dossier.",
|
||||
"description-bulk": "Do not recommend the selected terms in any document of this dossier.",
|
||||
"extraOptionLabel": "Apply to all active and future dossiers",
|
||||
"label": "Remove from dossier"
|
||||
},
|
||||
"false-positive": {
|
||||
"description": "''{value}'' is not a ''{type}'' in this context: ''{context}''.",
|
||||
"description-bulk": "Do not redact the selected terms in their respective context.",
|
||||
"description": "Mark this redaction as a false-positive. The term will not be redacted in this dossier if it occurs in the same context.",
|
||||
"description-bulk": "Mark these redactions as false-positives. The terms will not be redacted in this dossier if they occur in the same context.",
|
||||
"extraOptionDescription": "<i>Dossier template access is required to reverse this action. As a regular user you can only reverse it for the current dossier.</i>",
|
||||
"extraOptionLabel": "Apply to all active and future dossiers",
|
||||
"label": "False positive"
|
||||
"label": "Remove from dossier in this context"
|
||||
},
|
||||
"in-dossier": {
|
||||
"description": "Do not {type, select, hint{annotate} other{redact}} ''{value}'' in any document of the current dossier.",
|
||||
"description-bulk": "Do not redact the selected terms as their respective types in any dossier.",
|
||||
"description": "Do not {type, select, hint{annotate} other{redact}} the selected term in any document of this dossier.",
|
||||
"description-bulk": "Do not auto-redact the selected term in this dossier.",
|
||||
"extraOptionLabel": "Apply to all active and future dossiers",
|
||||
"label": "Remove from dossier",
|
||||
"label-bulk": "No longer redact in any dossier"
|
||||
"label-bulk": "Remove from dossier"
|
||||
},
|
||||
"only-here": {
|
||||
"description": "Do not {type, select, hint{annotate} other{redact}} ''{value}'' at this position in the current document.",
|
||||
"description": "Do not {type, select, hint{annotate} other{redact}} the term at this position in the current document.",
|
||||
"description-bulk": "Do not redact the selected terms at this position in the current document.",
|
||||
"label": "Remove here"
|
||||
}
|
||||
},
|
||||
"redacted-text": "Selected {type}"
|
||||
"redacted-text": "Selected {type}",
|
||||
"redacted-text-bulk": "Selected {type, select, redaction{redactions} recommendation{recommendations} other{hints}}"
|
||||
},
|
||||
"title": "Remove {type, select, redaction{redaction} recommendation{recommendation} other{hint}}",
|
||||
"title-bulk": "Remove {type, select, redaction{redactions} recommendation{recommendations} other{hints}}"
|
||||
|
||||
@ -2049,6 +2049,7 @@
|
||||
"comment-placeholder": "Add remarks or mentions...",
|
||||
"list-item": "",
|
||||
"list-item-false-positive": "",
|
||||
"list-item-false-recommendation": "",
|
||||
"options": {
|
||||
"do-not-recommend": {
|
||||
"description": "Do not recommend ''{value}'' as {type} in any document of the current dossier.",
|
||||
@ -2059,6 +2060,7 @@
|
||||
"false-positive": {
|
||||
"description": "''{value}'' is not a {type} in this context: ''{context}''.",
|
||||
"description-bulk": "",
|
||||
"extraOptionDescription": "",
|
||||
"extraOptionLabel": "Apply to all dossiers",
|
||||
"label": "False positive"
|
||||
},
|
||||
@ -2075,7 +2077,8 @@
|
||||
"label": "Remove here"
|
||||
}
|
||||
},
|
||||
"redacted-text": ""
|
||||
"redacted-text": "",
|
||||
"redacted-text-bulk": ""
|
||||
},
|
||||
"title": "Remove {type}",
|
||||
"title-bulk": ""
|
||||
|
||||
@ -1 +1 @@
|
||||
Subproject commit 292573f3b3766a2e2ffef4be6d6b702d779b259e
|
||||
Subproject commit 48a5160d6fccfe72de2e024e4359a97cbc52c942
|
||||
Loading…
x
Reference in New Issue
Block a user