]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
lint frontend
authorMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Fri, 16 Dec 2022 06:48:16 +0000 (22:48 -0800)
committerMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Fri, 16 Dec 2022 07:36:01 +0000 (23:36 -0800)
23 files changed:
src-ui/src/app/app.module.ts
src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts
src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts
src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html
src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts
src-ui/src/app/components/common/select-dialog/select-dialog.component.ts
src-ui/src/app/components/common/tag/tag.component.ts
src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html
src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts
src-ui/src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.ts
src-ui/src/app/components/dashboard/widgets/widget-frame/widget-frame.component.ts
src-ui/src/app/components/document-detail/document-detail.component.html
src-ui/src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts
src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts
src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts
src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts
src-ui/src/app/components/document-list/document-list.component.html
src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html
src-ui/src/app/components/manage/management-list/management-list.component.html
src-ui/src/app/components/manage/settings/settings.component.html
src-ui/src/app/components/manage/tasks/tasks.component.html
src-ui/src/app/components/not-found/not-found.component.ts
src-ui/src/app/directives/sortable.directive.ts

index ea366b968cacb11f68b7cd024b1cee5e08574bde..70939b9280aee27e55a5e005f263ca0fdce372ed 100644 (file)
@@ -24,7 +24,7 @@ import { CorrespondentEditDialogComponent } from './components/common/edit-dialo
 import { TagEditDialogComponent } from './components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
 import { DocumentTypeEditDialogComponent } from './components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
 import { TagComponent } from './components/common/tag/tag.component'
-import { ClearableBadge } from './components/common/clearable-badge/clearable-badge.component'
+import { ClearableBadgeComponent } from './components/common/clearable-badge/clearable-badge.component'
 import { PageHeaderComponent } from './components/common/page-header/page-header.component'
 import { AppFrameComponent } from './components/app-frame/app-frame.component'
 import { ToastsComponent } from './components/common/toasts/toasts.component'
@@ -146,7 +146,7 @@ function initializeApp(settings: SettingsService) {
     DocumentTypeEditDialogComponent,
     StoragePathEditDialogComponent,
     TagComponent,
-    ClearableBadge,
+    ClearableBadgeComponent,
     PageHeaderComponent,
     AppFrameComponent,
     ToastsComponent,
index 93f63d4d8a3793202da2de626427acc4bd2f3e46..0f0b7d64f197c914ab2ed0f6a1f2352eb2d16ce3 100644 (file)
@@ -5,7 +5,7 @@ import { Component, Input, Output, EventEmitter } from '@angular/core'
   templateUrl: './clearable-badge.component.html',
   styleUrls: ['./clearable-badge.component.scss'],
 })
-export class ClearableBadge {
+export class ClearableBadgeComponent {
   constructor() {}
 
   @Input()
index 9bf141e782c51e13aeb39d0d82e89860606bf774..07c3dfbd8f9c0ce69b25c312d8dff2a673fdef7f 100644 (file)
@@ -22,7 +22,7 @@ export abstract class EditDialogComponent<T extends ObjectWithId>
   object: T
 
   @Output()
-  success = new EventEmitter()
+  succeeded = new EventEmitter()
 
   networkActive = false
 
@@ -95,7 +95,7 @@ export abstract class EditDialogComponent<T extends ObjectWithId>
     serverResponse.subscribe({
       next: (result) => {
         this.activeModal.close()
-        this.success.emit(result)
+        this.succeeded.emit(result)
       },
       error: (error) => {
         this.error = error.error
index 280c101a6824e9faaad25bf10f0ed96e44687eff..c5cfe36471a4bdbacf85594faa65fdf9c7801c34 100644 (file)
@@ -6,7 +6,7 @@
   </div>
   <div class="modal-body">
 
-    <p *ngIf="this.dialogMode == 'edit'" i18n>
+    <p *ngIf="this.dialogMode === 'edit'" i18n>
       <em>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">documentation</a>.</em>
     </p>
 
index 373f0aa5dc0cb1c9b2a80c4b25d015bff3000cb7..165fc7779a466696f901f796f0def956227cba7a 100644 (file)
@@ -321,7 +321,7 @@ export class FilterableDropdownComponent {
   apply = new EventEmitter<ChangedItems>()
 
   @Output()
-  open = new EventEmitter()
+  opened = new EventEmitter()
 
   get operatorToggleEnabled(): boolean {
     return (
@@ -356,7 +356,7 @@ export class FilterableDropdownComponent {
       if (this.editing) {
         this.selectionModel.reset()
       }
-      this.open.next(this)
+      this.opened.next(this)
     } else {
       this.filterText = ''
       if (this.applyOnClose && this.selectionModel.isDirty()) {
index dc0375cafcacd0e8549b5aa4164c040460a6d33f..c341ac96b7278f5c81e5e1510551ed431b5c315f 100644 (file)
@@ -1,4 +1,4 @@
-import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'
+import { Component, EventEmitter, Input, Output } from '@angular/core'
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
 import { ObjectWithId } from 'src/app/data/object-with-id'
 
@@ -7,7 +7,7 @@ import { ObjectWithId } from 'src/app/data/object-with-id'
   templateUrl: './select-dialog.component.html',
   styleUrls: ['./select-dialog.component.scss'],
 })
-export class SelectDialogComponent implements OnInit {
+export class SelectDialogComponent {
   constructor(public activeModal: NgbActiveModal) {}
 
   @Output()
@@ -24,8 +24,6 @@ export class SelectDialogComponent implements OnInit {
 
   selected: number
 
-  ngOnInit(): void {}
-
   cancelClicked() {
     this.activeModal.close()
   }
index af266353695cfdfa51b06408733945efb15fa939..d7d929594b4e5be31caf0d183def94390a347e46 100644 (file)
@@ -1,4 +1,4 @@
-import { Component, Input, OnInit } from '@angular/core'
+import { Component, Input } from '@angular/core'
 import { PaperlessTag } from 'src/app/data/paperless-tag'
 
 @Component({
@@ -6,7 +6,7 @@ import { PaperlessTag } from 'src/app/data/paperless-tag'
   templateUrl: './tag.component.html',
   styleUrls: ['./tag.component.scss'],
 })
-export class TagComponent implements OnInit {
+export class TagComponent {
   constructor() {}
 
   @Input()
@@ -17,6 +17,4 @@ export class TagComponent implements OnInit {
 
   @Input()
   clickable: boolean = false
-
-  ngOnInit(): void {}
 }
index 106d306105979ba238a9a8eb02355602142cd543..5bba41a4dccb787d98ae95c5bc3c3a9fd3659e28 100644 (file)
@@ -1,6 +1,6 @@
 <app-widget-frame title="Statistics" [loading]="loading" i18n-title>
   <ng-container content>
-    <p class="card-text" i18n *ngIf="statistics?.documents_inbox != null">Documents in inbox: {{statistics?.documents_inbox}}</p>
+    <p class="card-text" i18n *ngIf="statistics?.documents_inbox !== null">Documents in inbox: {{statistics?.documents_inbox}}</p>
     <p class="card-text" i18n>Total documents: {{statistics?.documents_total}}</p>
   </ng-container>
 </app-widget-frame>
index e2f59a0a41f29ca77cdff597edc605842c1d0cd6..f59be5da94eb650a10045e6a0373f030dc0221c1 100644 (file)
@@ -1,6 +1,5 @@
-import { HttpEventType } from '@angular/common/http'
-import { Component, OnInit } from '@angular/core'
-import { FileSystemFileEntry, NgxFileDropEntry } from 'ngx-file-drop'
+import { Component } from '@angular/core'
+import { NgxFileDropEntry } from 'ngx-file-drop'
 import {
   ConsumerStatusService,
   FileStatus,
@@ -15,7 +14,7 @@ const MAX_ALERTS = 5
   templateUrl: './upload-file-widget.component.html',
   styleUrls: ['./upload-file-widget.component.scss'],
 })
-export class UploadFileWidgetComponent implements OnInit {
+export class UploadFileWidgetComponent {
   alertsExpanded = false
 
   constructor(
@@ -109,8 +108,6 @@ export class UploadFileWidgetComponent implements OnInit {
     this.consumerStatusService.dismissCompleted()
   }
 
-  ngOnInit(): void {}
-
   public fileOver(event) {}
 
   public fileLeave(event) {}
index 718f3291c4078465c946efa657d5f8d302d7f27d..7a83780c3673fac85d92296ee6c6cac90dfb85f4 100644 (file)
@@ -1,4 +1,4 @@
-import { Component, OnInit } from '@angular/core'
+import { Component } from '@angular/core'
 import { TourService } from 'ngx-ui-tour-ng-bootstrap'
 
 @Component({
@@ -6,8 +6,6 @@ import { TourService } from 'ngx-ui-tour-ng-bootstrap'
   templateUrl: './welcome-widget.component.html',
   styleUrls: ['./welcome-widget.component.scss'],
 })
-export class WelcomeWidgetComponent implements OnInit {
+export class WelcomeWidgetComponent {
   constructor(public readonly tourService: TourService) {}
-
-  ngOnInit(): void {}
 }
index b1e926eefa28260e2283a22ce1bfa0ed0d56cd7f..64f5c682bb2e7f9835cd6a0ca19d560d07201793 100644 (file)
@@ -1,11 +1,11 @@
-import { Component, Input, OnInit } from '@angular/core'
+import { Component, Input } from '@angular/core'
 
 @Component({
   selector: 'app-widget-frame',
   templateUrl: './widget-frame.component.html',
   styleUrls: ['./widget-frame.component.scss'],
 })
-export class WidgetFrameComponent implements OnInit {
+export class WidgetFrameComponent {
   constructor() {}
 
   @Input()
@@ -13,6 +13,4 @@ export class WidgetFrameComponent implements OnInit {
 
   @Input()
   loading: boolean = false
-
-  ngOnInit(): void {}
 }
index 6934801a49237139c3ed2a22bdc0531c2044bd1e..0384de3713ca0babc4954cc872122a8ff62d5cc1 100644 (file)
@@ -1,5 +1,5 @@
 <app-page-header [(title)]="title">
-    <div class="input-group input-group-sm me-5 d-none d-md-flex" *ngIf="getContentType() == 'application/pdf' && !useNativePdfViewer">
+    <div class="input-group input-group-sm me-5 d-none d-md-flex" *ngIf="getContentType() === 'application/pdf' && !useNativePdfViewer">
       <div class="input-group-text" i18n>Page</div>
       <input class="form-control flex-grow-0 w-auto" type="number" min="1" [max]="previewNumPages" [(ngModel)]="previewCurrentPage" />
       <div class="input-group-text" i18n>of {{previewNumPages}}</div>
 
                 <li [ngbNavItem]="4" class="d-md-none">
                     <a ngbNavLink>Preview</a>
-                    <ng-template ngbNavContent *ngIf="pdfPreview.offsetParent == undefined">
+                    <ng-template ngbNavContent *ngIf="pdfPreview.offsetParent === undefined">
                         <div class="position-relative">
-                            <ng-container *ngIf="getContentType() == 'application/pdf'">
+                            <ng-container *ngIf="getContentType() === 'application/pdf'">
                                 <div class="preview-sticky pdf-viewer-container" *ngIf="!useNativePdfViewer ; else nativePdfViewer">
                                     <pdf-viewer [src]="{ url: previewUrl, password: password }" [original-size]="false" [show-borders]="true" [show-all]="true" [(page)]="previewCurrentPage" [render-text-mode]="2" (error)="onError($event)" (after-load-complete)="pdfPreviewLoaded($event)"></pdf-viewer>
                                 </div>
                                     <object [data]="previewUrl | safeUrl" class="preview-sticky" width="100%"></object>
                                 </ng-template>
                             </ng-container>
-                            <ng-container *ngIf="getContentType() == 'text/plain'">
+                            <ng-container *ngIf="getContentType() === 'text/plain'">
                                 <object [data]="previewUrl | safeUrl" type="text/plain" class="preview-sticky bg-white" width="100%"></object>
                             </ng-container>
                             <div *ngIf="requiresPassword" class="password-prompt">
 
             <div [ngbNavOutlet]="nav" class="mt-2"></div>
 
-            <button type="button" class="btn btn-outline-secondary" (click)="discard()" i18n [disabled]="networkActive || !(isDirty$ | async)">Discard</button>&nbsp;
-            <button type="button" class="btn btn-outline-primary" (click)="saveEditNext()" *ngIf="hasNext()" i18n [disabled]="networkActive || !(isDirty$ | async) || error">Save & next</button>&nbsp;
-            <button type="submit" class="btn btn-primary" i18n [disabled]="networkActive || !(isDirty$ | async) || error">Save</button>&nbsp;
+            <button type="button" class="btn btn-outline-secondary" (click)="discard()" i18n [disabled]="networkActive || (isDirty$ | async) === false">Discard</button>&nbsp;
+            <button type="button" class="btn btn-outline-primary" (click)="saveEditNext()" *ngIf="hasNext()" i18n [disabled]="networkActive || (isDirty$ | async) === false || error">Save & next</button>&nbsp;
+            <button type="submit" class="btn btn-primary" i18n [disabled]="networkActive || (isDirty$ | async) === false || error">Save</button>&nbsp;
         </form>
     </div>
 
     <div class="col-md-6 col-xl-8 mb-3 d-none d-md-block position-relative" #pdfPreview>
-        <ng-container *ngIf="getContentType() == 'application/pdf'">
+        <ng-container *ngIf="getContentType() === 'application/pdf'">
             <div class="preview-sticky pdf-viewer-container" *ngIf="!useNativePdfViewer ; else nativePdfViewer">
                 <pdf-viewer [src]="{ url: previewUrl, password: password }" [original-size]="false" [show-borders]="true" [show-all]="true" [(page)]="previewCurrentPage" [render-text-mode]="2" (error)="onError($event)" (after-load-complete)="pdfPreviewLoaded($event)"></pdf-viewer>
             </div>
                 <object [data]="previewUrl | safeUrl" class="preview-sticky" width="100%"></object>
             </ng-template>
         </ng-container>
-        <ng-container *ngIf="getContentType() == 'text/plain'">
+        <ng-container *ngIf="getContentType() === 'text/plain'">
             <object [data]="previewUrl | safeUrl" type="text/plain" class="preview-sticky bg-white" width="100%"></object>
         </ng-container>
         <div *ngIf="requiresPassword" class="password-prompt">
index efef478b64ea94ce6417f26969ba85d265ab66dd..ab117be81c66b47c65b5a1ed161551b58fd655d5 100644 (file)
@@ -1,11 +1,11 @@
-import { Component, Input, OnInit } from '@angular/core'
+import { Component, Input } from '@angular/core'
 
 @Component({
   selector: 'app-metadata-collapse',
   templateUrl: './metadata-collapse.component.html',
   styleUrls: ['./metadata-collapse.component.scss'],
 })
-export class MetadataCollapseComponent implements OnInit {
+export class MetadataCollapseComponent {
   constructor() {}
 
   expand = false
@@ -15,6 +15,4 @@ export class MetadataCollapseComponent implements OnInit {
 
   @Input()
   title = $localize`Metadata`
-
-  ngOnInit(): void {}
 }
index dbfb9d2f06c1c91f8e8605c40f5791ee8566af3f..bea961a3e746d6bf67a44a327777cdc48816083c 100644 (file)
@@ -1,4 +1,4 @@
-import { Component } from '@angular/core'
+import { Component, OnDestroy, OnInit } from '@angular/core'
 import { PaperlessTag } from 'src/app/data/paperless-tag'
 import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent'
 import { PaperlessDocumentType } from 'src/app/data/paperless-document-type'
@@ -33,7 +33,7 @@ import { first, Subject, takeUntil } from 'rxjs'
   templateUrl: './bulk-editor.component.html',
   styleUrls: ['./bulk-editor.component.scss'],
 })
-export class BulkEditorComponent {
+export class BulkEditorComponent implements OnInit, OnDestroy {
   tags: PaperlessTag[]
   correspondents: PaperlessCorrespondent[]
   documentTypes: PaperlessDocumentType[]
index 512cb51aeebc99fbdfa1aa495df3b254594461d7..b431878798fd1cdd8ace6a951243697a43a3c795 100644 (file)
@@ -2,7 +2,6 @@ import {
   Component,
   EventEmitter,
   Input,
-  OnInit,
   Output,
   ViewChild,
 } from '@angular/core'
@@ -20,7 +19,7 @@ import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings'
     '../popover-preview/popover-preview.scss',
   ],
 })
-export class DocumentCardLargeComponent implements OnInit {
+export class DocumentCardLargeComponent {
   constructor(
     private documentService: DocumentService,
     private settingsService: SettingsService
@@ -71,8 +70,6 @@ export class DocumentCardLargeComponent implements OnInit {
     }
   }
 
-  ngOnInit(): void {}
-
   getIsThumbInverted() {
     return this.settingsService.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED)
   }
index 8e6ae33a66284afeee4b3425796be31a379685c4..b7f53e42c9672bf80470fb37a333c97f127917fc 100644 (file)
@@ -2,7 +2,6 @@ import {
   Component,
   EventEmitter,
   Input,
-  OnInit,
   Output,
   ViewChild,
 } from '@angular/core'
@@ -21,7 +20,7 @@ import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings'
     '../popover-preview/popover-preview.scss',
   ],
 })
-export class DocumentCardSmallComponent implements OnInit {
+export class DocumentCardSmallComponent {
   constructor(
     private documentService: DocumentService,
     private settingsService: SettingsService
@@ -55,8 +54,6 @@ export class DocumentCardSmallComponent implements OnInit {
   mouseOnPreview = false
   popoverHidden = true
 
-  ngOnInit(): void {}
-
   getIsThumbInverted() {
     return this.settingsService.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED)
   }
index 892a0d3b24807202e2555e4bf1eff6eb15340942..7f85024831f0407e2d3b80e2bb54e713a89c80f1 100644 (file)
@@ -53,7 +53,7 @@
       </div>
       <div>
         <button *ngFor="let f of getSortFields()" ngbDropdownItem (click)="setSortField(f.field)"
-          [class.active]="list.sortField == f.field">{{f.name}}
+          [class.active]="list.sortField === f.field">{{f.name}}
         </button>
       </div>
     </div>
@@ -94,7 +94,7 @@
       </ng-container>
       <span i18n *ngIf="list.selected.size > 0">{list.collectionSize, plural, =1 {Selected {{list.selected.size}} of one document} other {Selected {{list.selected.size}} of {{list.collectionSize || 0}} documents}}</span>
       <ng-container *ngIf="!list.isReloading">
-        <span i18n *ngIf="list.selected.size == 0">{list.collectionSize, plural, =1 {One document} other {{{list.collectionSize || 0}} documents}}</span>&nbsp;<span i18n *ngIf="isFiltered">(filtered)</span>
+        <span i18n *ngIf="list.selected.size === 0">{list.collectionSize, plural, =1 {One document} other {{{list.collectionSize || 0}} documents}}</span>&nbsp;<span i18n *ngIf="isFiltered">(filtered)</span>
       </ng-container>
     </p>
     <ngb-pagination *ngIf="list.collectionSize" [pageSize]="list.currentPageSize" [collectionSize]="list.collectionSize" [(page)]="list.currentPage" [maxSize]="5"
 </ng-container>
 
 <ng-template #documentListNoError>
-  <div *ngIf="displayMode == 'largeCards'">
+  <div *ngIf="displayMode === 'largeCards'">
     <app-document-card-large [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" *ngFor="let d of list.documents; trackBy: trackByDocumentId" [document]="d" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)" (clickDocumentType)="clickDocumentType($event)" (clickStoragePath)="clickStoragePath($event)" (clickMoreLike)="clickMoreLike(d.id)">
     </app-document-card-large>
   </div>
 
-  <table class="table table-sm align-middle border shadow-sm" *ngIf="displayMode == 'details'">
+  <table class="table table-sm align-middle border shadow-sm" *ngIf="displayMode === 'details'">
     <thead>
       <th></th>
       <th class="d-none d-lg-table-cell"
-        sortable="archive_serial_number"
+        appSortable="archive_serial_number"
         [currentSortField]="list.sortField"
         [currentSortReverse]="list.sortReverse"
         (sort)="onSort($event)"
         i18n>ASN</th>
       <th class="d-none d-md-table-cell"
-        sortable="correspondent__name"
+        appSortable="correspondent__name"
         [currentSortField]="list.sortField"
         [currentSortReverse]="list.sortReverse"
         (sort)="onSort($event)"
         i18n>Correspondent</th>
       <th
-        sortable="title"
+        appSortable="title"
         [currentSortField]="list.sortField"
         [currentSortReverse]="list.sortReverse"
         (sort)="onSort($event)"
         i18n>Title</th>
       <th class="d-none d-xl-table-cell"
-        sortable="document_type__name"
+        appSortable="document_type__name"
         [currentSortField]="list.sortField"
         [currentSortReverse]="list.sortReverse"
         (sort)="onSort($event)"
         i18n>Document type</th>
       <th class="d-none d-xl-table-cell"
-        sortable="storage_path__name"
+        appSortable="storage_path__name"
         [currentSortField]="list.sortField"
         [currentSortReverse]="list.sortReverse"
         (sort)="onSort($event)"
         i18n>Storage path</th>
       <th
-        sortable="created"
+        appSortable="created"
         [currentSortField]="list.sortField"
         [currentSortReverse]="list.sortReverse"
         (sort)="onSort($event)"
         i18n>Created</th>
       <th class="d-none d-xl-table-cell"
-        sortable="added"
+        appSortable="added"
         [currentSortField]="list.sortField"
         [currentSortReverse]="list.sortReverse"
         (sort)="onSort($event)"
     </tbody>
   </table>
 
-  <div class="row row-cols-paperless-cards" *ngIf="displayMode == 'smallCards'">
+  <div class="row row-cols-paperless-cards" *ngIf="displayMode === 'smallCards'">
     <app-document-card-small class="p-0" [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)" (clickStoragePath)="clickStoragePath($event)" (clickDocumentType)="clickDocumentType($event)"></app-document-card-small>
   </div>
   <div *ngIf="list.documents?.length > 15" class="mt-3">
index 99004854c41fd0cdb56be03dedb2d067da653a13..0a6b95939767e6252699e2cd64f4d4e68b250f68 100644 (file)
@@ -5,10 +5,10 @@
            <div ngbDropdown>
             <button class="btn btn-sm btn-outline-primary" ngbDropdownToggle>{{textFilterTargetName}}</button>
             <div class="dropdown-menu shadow" ngbDropdownMenu>
-              <button *ngFor="let t of textFilterTargets" ngbDropdownItem [class.active]="textFilterTarget == t.id" (click)="changeTextFilterTarget(t.id)">{{t.name}}</button>
+              <button *ngFor="let t of textFilterTargets" ngbDropdownItem [class.active]="textFilterTarget === t.id" (click)="changeTextFilterTarget(t.id)">{{t.name}}</button>
             </div>
           </div>
-          <select *ngIf="textFilterTarget == 'asn'" class="form-select flex-grow-0 w-auto" [(ngModel)]="textFilterModifier" (change)="textFilterModifierChange()">
+          <select *ngIf="textFilterTarget === 'asn'" class="form-select flex-grow-0 w-auto" [(ngModel)]="textFilterModifier" (change)="textFilterModifierChange()">
             <option *ngFor="let m of textFilterModifiers" ngbDropdownItem [value]="m.id">{{m.label}}</option>
           </select>
           <button *ngIf="_textFilter" class="btn btn-link btn-sm px-0 position-absolute top-0 end-0 z-10" (click)="resetTextField()">
@@ -16,7 +16,7 @@
               <path fill-rule="evenodd" d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/>
             </svg>
           </button>
-          <input #textFilterInput class="form-control form-control-sm" type="text" [disabled]="textFilterModifierIsNull" [(ngModel)]="textFilter" (keyup)="textFilterKeyup($event)" [readonly]="textFilterTarget == 'fulltext-morelike'">
+          <input #textFilterInput class="form-control form-control-sm" type="text" [disabled]="textFilterModifierIsNull" [(ngModel)]="textFilter" (keyup)="textFilterKeyup($event)" [readonly]="textFilterTarget === 'fulltext-morelike'">
          </div>
      </div>
   </div>
index f153ac4c60e5a2f54eae00173f1ba74d1b7b324b..d35bc0853949ca26f19eca70d4049f433988454c 100644 (file)
 <table class="table table-striped align-middle border shadow-sm">
   <thead>
     <tr>
-      <th scope="col" sortable="name" [currentSortField]="sortField" [currentSortReverse]="sortReverse" (sort)="onSort($event)" i18n>Name</th>
-      <th scope="col" class="d-none d-sm-table-cell" sortable="matching_algorithm" [currentSortField]="sortField" [currentSortReverse]="sortReverse" (sort)="onSort($event)" i18n>Matching</th>
-      <th scope="col" sortable="document_count" [currentSortField]="sortField" [currentSortReverse]="sortReverse" (sort)="onSort($event)" i18n>Document count</th>
-      <th scope="col" *ngFor="let column of extraColumns" sortable="{{column.key}}" [currentSortField]="sortField" [currentSortReverse]="sortReverse" (sort)="onSort($event)">{{column.name}}</th>
+      <th scope="col" appSortable="name" [currentSortField]="sortField" [currentSortReverse]="sortReverse" (sort)="onSort($event)" i18n>Name</th>
+      <th scope="col" class="d-none d-sm-table-cell" appSortable="matching_algorithm" [currentSortField]="sortField" [currentSortReverse]="sortReverse" (sort)="onSort($event)" i18n>Matching</th>
+      <th scope="col" appSortable="document_count" [currentSortField]="sortField" [currentSortReverse]="sortReverse" (sort)="onSort($event)" i18n>Document count</th>
+      <th scope="col" *ngFor="let column of extraColumns" appSortable="{{column.key}}" [currentSortField]="sortField" [currentSortReverse]="sortReverse" (sort)="onSort($event)">{{column.name}}</th>
       <th scope="col" i18n>Actions</th>
     </tr>
   </thead>
index 0286e3561bb62b8dec96efe1b52068b47a4dcb2f..eb279f4b69e910d6a9870e3e58a9ef6b2a537ec8 100644 (file)
@@ -24,7 +24,7 @@
           <div class="col">
 
             <select class="form-select" formControlName="displayLanguage">
-              <option *ngFor="let lang of displayLanguageOptions" [ngValue]="lang.code">{{lang.name}}<span *ngIf="lang.code && currentLocale != 'en-US'"> - {{lang.englishName}}</span></option>
+              <option *ngFor="let lang of displayLanguageOptions" [ngValue]="lang.code">{{lang.name}}<span *ngIf="lang.code && currentLocale !== 'en-US'"> - {{lang.englishName}}</span></option>
             </select>
 
             <small *ngIf="displayLanguageIsDirty" class="form-text text-primary" i18n>You need to reload the page after applying a new language.</small>
               </div>
             </div>
 
-            <div *ngIf="savedViews && savedViews.length == 0" i18n>No saved views defined.</div>
+            <div *ngIf="savedViews && savedViews.length === 0" i18n>No saved views defined.</div>
 
             <div *ngIf="!savedViews">
               <div class="spinner-border spinner-border-sm fw-normal ms-2 me-auto" role="status"></div>
                 </div>
               </li>
 
-              <div *ngIf="mailAccounts.length == 0" i18n>No mail accounts defined.</div>
+              <div *ngIf="mailAccounts.length === 0" i18n>No mail accounts defined.</div>
           </ul>
 
           <h4 class="mt-4">
                 </div>
               </li>
 
-              <div *ngIf="mailRules.length == 0" i18n>No mail rules defined.</div>
+              <div *ngIf="mailRules.length === 0" i18n>No mail rules defined.</div>
           </ul>
         </ng-container>
 
 
   <div [ngbNavOutlet]="nav" class="border-start border-end border-bottom p-3 mb-3 shadow-sm"></div>
 
-  <button type="submit" class="btn btn-primary mb-2" [disabled]="!(isDirty$ | async)" i18n>Save</button>
+  <button type="submit" class="btn btn-primary mb-2" [disabled]="(isDirty$ | async) === false" i18n>Save</button>
 </form>
index 88c119c8d1a4ae1ae900cd254584f1068ba248a0..f6b09333d496cd25e6997737e243f5639fc88061 100644 (file)
@@ -1,11 +1,11 @@
 <app-page-header title="File Tasks" i18n-title>
   <div class="btn-toolbar col col-md-auto">
-    <button class="btn btn-sm btn-outline-secondary me-2" (click)="clearSelection()" [hidden]="selectedTasks.size == 0">
+    <button class="btn btn-sm btn-outline-secondary me-2" (click)="clearSelection()" [hidden]="selectedTasks.size === 0">
       <svg class="sidebaricon" fill="currentColor">
         <use xlink:href="assets/bootstrap-icons.svg#x"/>
       </svg>&nbsp;<ng-container i18n>Clear selection</ng-container>
     </button>
-    <button class="btn btn-sm btn-outline-primary me-4" (click)="dismissTasks()" [disabled]="tasksService.total == 0">
+    <button class="btn btn-sm btn-outline-primary me-4" (click)="dismissTasks()" [disabled]="tasksService.total === 0">
       <svg class="sidebaricon" fill="currentColor">
         <use xlink:href="assets/bootstrap-icons.svg#check2-all"/>
       </svg>&nbsp;<ng-container i18n>{{dismissButtonText}}</ng-container>
       <tr>
         <th scope="col">
           <div class="form-check">
-            <input type="checkbox" class="form-check-input" id="all-tasks" [disabled]="currentTasks.length == 0" (click)="toggleAll($event); $event.stopPropagation();">
+            <input type="checkbox" class="form-check-input" id="all-tasks" [disabled]="currentTasks.length === 0" (click)="toggleAll($event); $event.stopPropagation();">
             <label class="form-check-label" for="all-tasks"></label>
           </div>
         </th>
         <th scope="col" i18n>Name</th>
         <th scope="col" class="d-none d-lg-table-cell" i18n>Created</th>
-        <th scope="col" class="d-none d-lg-table-cell" *ngIf="activeTab != 'started' && activeTab != 'queued'" i18n>Results</th>
+        <th scope="col" class="d-none d-lg-table-cell" *ngIf="activeTab !== 'started' && activeTab !== 'queued'" i18n>Results</th>
         <th scope="col" class="d-table-cell d-lg-none" i18n>Info</th>
         <th scope="col" i18n>Actions</th>
       </tr>
@@ -55,7 +55,7 @@
         </th>
         <td class="overflow-auto">{{ task.task_file_name }}</td>
         <td class="d-none d-lg-table-cell">{{ task.date_created | customDate:'short' }}</td>
-        <td class="d-none d-lg-table-cell" *ngIf="activeTab != 'started' && activeTab != 'queued'">
+        <td class="d-none d-lg-table-cell" *ngIf="activeTab !== 'started' && activeTab !== 'queued'">
           <div *ngIf="task.result?.length > 50" class="result" (click)="expandTask(task); $event.stopPropagation();"
             [ngbPopover]="resultPopover" popoverClass="shadow small mobile" triggers="mouseenter:mouseleave" container="body">
             <span class="small d-none d-md-inline-block font-monospace text-muted">{{ task.result | slice:0:50 }}&hellip;</span>
@@ -89,7 +89,7 @@
         </td>
       </tr>
       <tr>
-        <td class="p-0" [class.border-0]="expandedTask != task.id" colspan="5">
+        <td class="p-0" [class.border-0]="expandedTask !== task.id" colspan="5">
           <pre #collapse="ngbCollapse" [ngbCollapse]="expandedTask !== task.id" class="small mb-0"><div class="small p-1 p-lg-3 ms-lg-3">{{ task.result }}</div></pre>
         </td>
       </tr>
index 7051da161b944f641be55079fdaa79987fc38b36..573f57f99ccefb9a09e07dfb5ff4ee0a57e358d5 100644 (file)
@@ -1,12 +1,10 @@
-import { Component, OnInit } from '@angular/core'
+import { Component } from '@angular/core'
 
 @Component({
   selector: 'app-not-found',
   templateUrl: './not-found.component.html',
   styleUrls: ['./not-found.component.scss'],
 })
-export class NotFoundComponent implements OnInit {
+export class NotFoundComponent {
   constructor() {}
-
-  ngOnInit(): void {}
 }
index 85d65e398240a39393f64400c599131da6d9e897..57253aa48d661bac3e3ad07733544998e29a37da 100644 (file)
@@ -1,4 +1,11 @@
-import { Directive, EventEmitter, Input, Output } from '@angular/core'
+import {
+  Directive,
+  EventEmitter,
+  HostBinding,
+  HostListener,
+  Input,
+  Output,
+} from '@angular/core'
 
 export interface SortEvent {
   column: string
@@ -6,18 +13,13 @@ export interface SortEvent {
 }
 
 @Directive({
-  selector: 'th[sortable]',
-  host: {
-    '[class.asc]': 'currentSortField == sortable && !currentSortReverse',
-    '[class.des]': 'currentSortField == sortable && currentSortReverse',
-    '(click)': 'rotate()',
-  },
+  selector: 'th[appSortable]',
 })
 export class SortableDirective {
   constructor() {}
 
   @Input()
-  sortable: string = ''
+  appSortable: string = ''
 
   @Input()
   currentSortReverse: boolean = false
@@ -27,11 +29,20 @@ export class SortableDirective {
 
   @Output() sort = new EventEmitter<SortEvent>()
 
-  rotate() {
-    if (this.currentSortField != this.sortable) {
-      this.sort.emit({ column: this.sortable, reverse: false })
+  @HostBinding('class.asc') get asc() {
+    return (
+      this.currentSortField === this.appSortable && !this.currentSortReverse
+    )
+  }
+  @HostBinding('class.des') get des() {
+    return this.currentSortField === this.appSortable && this.currentSortReverse
+  }
+
+  @HostListener('click') rotate() {
+    if (this.currentSortField != this.appSortable) {
+      this.sort.emit({ column: this.appSortable, reverse: false })
     } else if (
-      this.currentSortField == this.sortable &&
+      this.currentSortField == this.appSortable &&
       !this.currentSortReverse
     ) {
       this.sort.emit({ column: this.currentSortField, reverse: true })