mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
108 lines
7.8 KiB
HTML
108 lines
7.8 KiB
HTML
<div class="card mb-3 shadow-sm" [class.card-selected]="selected" [class.document-card]="selectable" [class.popover-hidden]="popoverHidden" (mouseleave)="mouseLeaveCard()">
|
|
<div class="row g-0">
|
|
<div class="col-md-2 doc-img-background rounded-start" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)">
|
|
<img [src]="getThumbUrl()" class="card-img doc-img border-end rounded-start" [class.inverted]="getIsThumbInverted()">
|
|
|
|
<div class="border-end border-bottom bg-light document-card-check">
|
|
<div class="form-check">
|
|
<input type="checkbox" class="form-check-input" id="smallCardCheck{{document.id}}" [checked]="selected" (click)="this.toggleSelected.emit($event)">
|
|
<label class="form-check-label" for="smallCardCheck{{document.id}}"></label>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="col">
|
|
<div class="card-body bg-light">
|
|
|
|
<div class="d-flex justify-content-between align-items-center">
|
|
<h5 class="card-title">
|
|
<ng-container *ngIf="document.correspondent">
|
|
<a *ngIf="clickCorrespondent.observers.length ; else nolink" title="Filter by correspondent" i18n-title (click)="clickCorrespondent.emit(document.correspondent);$event.stopPropagation()" class="fw-bold btn-link">{{(document.correspondent$ | async)?.name}}</a>
|
|
<ng-template #nolink>{{(document.correspondent$ | async)?.name}}</ng-template>:
|
|
</ng-container>
|
|
{{document.title | documentTitle}}
|
|
<app-tag [tag]="t" linkTitle="Filter by tag" i18n-linkTitle *ngFor="let t of document.tags$ | async" class="ms-1" (click)="clickTag.emit(t.id);$event.stopPropagation()" [clickable]="clickTag.observers.length"></app-tag>
|
|
</h5>
|
|
</div>
|
|
<p class="card-text">
|
|
<span *ngIf="document.__search_hit__" [innerHtml]="document.__search_hit__.highlights"></span>
|
|
<span *ngIf="!document.__search_hit__" class="result-content">{{contentTrimmed}}</span>
|
|
</p>
|
|
|
|
|
|
<div class="d-flex flex-column flex-md-row align-items-md-center">
|
|
<div class="btn-group">
|
|
<a class="btn btn-sm btn-outline-secondary" (click)="clickMoreLike.emit()">
|
|
<svg class="sidebaricon" fill="currentColor" class="sidebaricon">
|
|
<use xlink:href="assets/bootstrap-icons.svg#diagram-3"/>
|
|
</svg> <span class="d-none d-md-inline" i18n>More like this</span>
|
|
</a>
|
|
<a routerLink="/documents/{{document.id}}" class="btn btn-sm btn-outline-secondary">
|
|
<svg class="sidebaricon" fill="currentColor" class="sidebaricon">
|
|
<use xlink:href="assets/bootstrap-icons.svg#pencil"/>
|
|
</svg> <span class="d-none d-md-inline" i18n>Edit</span>
|
|
</a>
|
|
<a class="btn btn-sm btn-outline-secondary" target="_blank" [href]="previewUrl"
|
|
[ngbPopover]="previewContent" [popoverTitle]="document.title | documentTitle"
|
|
autoClose="true" popoverClass="shadow" (mouseenter)="mouseEnterPreview()" (mouseleave)="mouseLeavePreview()" #popover="ngbPopover">
|
|
<svg class="sidebaricon" fill="currentColor" class="sidebaricon">
|
|
<use xlink:href="assets/bootstrap-icons.svg#eye"/>
|
|
</svg> <span class="d-none d-md-inline" i18n>View</span>
|
|
</a>
|
|
<ng-template #previewContent>
|
|
<object [data]="previewUrl | safeUrl" class="preview" width="100%"></object>
|
|
</ng-template>
|
|
<a class="btn btn-sm btn-outline-secondary" [href]="getDownloadUrl()">
|
|
<svg class="sidebaricon" fill="currentColor" class="sidebaricon">
|
|
<use xlink:href="assets/bootstrap-icons.svg#download"/>
|
|
</svg> <span class="d-none d-md-inline" i18n>Download</span>
|
|
</a>
|
|
</div>
|
|
|
|
<div class="list-group list-group-horizontal border-0 card-info ms-md-auto mt-2 mt-md-0">
|
|
<button *ngIf="document.document_type" type="button" class="list-group-item btn btn-sm bg-light text-dark p-1 border-0 me-2" title="Filter by document type" i18n-title
|
|
(click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()">
|
|
<svg class="metadata-icon me-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor">
|
|
<path d="M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z"/>
|
|
</svg>
|
|
<small>{{(document.document_type$ | async)?.name}}</small>
|
|
</button>
|
|
<button *ngIf="document.storage_path" type="button" class="list-group-item btn btn-sm bg-light text-dark p-1 border-0 me-2" title="Filter by storage path" i18n-title
|
|
(click)="clickStoragePath.emit(document.storage_path);$event.stopPropagation()">
|
|
<svg class="metadata-icon me-2 text-muted bi bi-folder" viewBox="0 0 16 16" fill="currentColor">
|
|
<path d="M0 2a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1v7.5a2.5 2.5 0 0 1-2.5 2.5h-9A2.5 2.5 0 0 1 1 12.5V5a1 1 0 0 1-1-1V2zm2 3v7.5A1.5 1.5 0 0 0 3.5 14h9a1.5 1.5 0 0 0 1.5-1.5V5H2zm13-3H1v2h14V2zM5 7.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5z"/>
|
|
</svg>
|
|
<small>{{(document.storage_path$ | async)?.name}}</small>
|
|
</button>
|
|
<div *ngIf="document.archive_serial_number" class="list-group-item me-2 bg-light text-dark p-1 border-0">
|
|
<svg class="metadata-icon me-2 text-muted bi bi-upc-scan" viewBox="0 0 16 16" fill="currentColor">
|
|
<path d="M1.5 1a.5.5 0 0 0-.5.5v3a.5.5 0 0 1-1 0v-3A1.5 1.5 0 0 1 1.5 0h3a.5.5 0 0 1 0 1h-3zM11 .5a.5.5 0 0 1 .5-.5h3A1.5 1.5 0 0 1 16 1.5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1-.5-.5zM.5 11a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 1 0 1h-3A1.5 1.5 0 0 1 0 14.5v-3a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v3a1.5 1.5 0 0 1-1.5 1.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 1 .5-.5zM3 4.5a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-7zm3 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7z"/>
|
|
</svg>
|
|
<small>#{{document.archive_serial_number}}</small>
|
|
</div>
|
|
<ng-template #dateTooltip>
|
|
<div class="d-flex flex-column">
|
|
<span i18n>Created: {{ document.created | customDate }}</span>
|
|
<span i18n>Added: {{ document.added | customDate }}</span>
|
|
<span i18n>Modified: {{ document.modified | customDate }}</span>
|
|
</div>
|
|
</ng-template>
|
|
<div class="list-group-item bg-light text-dark p-1 border-0" [ngbTooltip]="dateTooltip">
|
|
<svg class="metadata-icon me-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor">
|
|
<path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/>
|
|
<path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/>
|
|
</svg>
|
|
<small>{{document.created_date | customDate:'mediumDate'}}</small>
|
|
</div>
|
|
<div *ngIf="document.__search_hit__?.score" class="list-group-item bg-light text-dark border-0 d-flex p-0 ps-4 search-score">
|
|
<small class="text-muted" i18n>Score:</small>
|
|
<ngb-progressbar [type]="searchScoreClass" [value]="document.__search_hit__.score" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|