* Added devcontainer * Add feature storage pathes * Exclude tests and add versioning * Check escaping * Check escaping * Check quoting * Echo * Escape * Escape : * Double escape \ * Escaping * Remove if * Escape colon * Missing \ * Esacpe : * Escape all * test * Remove sed * Fix exclude * Remove SED command * Add LD_LIBRARY_PATH * Adjusted to v1.7 * Updated test-cases * Remove devcontainer * Removed internal build-file * Run pre-commit * Corrected flak8 error * Adjusted to v1.7 * Updated test-cases * Corrected flak8 error * Adjusted to new plural translations * Small adjustments due to code-review backend * Adjusted line-break * Removed PAPERLESS prefix from settings variables * Corrected style change due to search+replace * First documentation draft * Revert changes to Pipfile * Add sphinx-autobuild with keep-outdated * Revert merge error that results in wrong storage path is evaluated * Adjust styles of generated files ... * Adds additional testing to cover dynamic storage path functionality * Remove unnecessary condition * Add hint to edit storage path dialog * Correct spelling of pathes to paths * Minor documentation tweaks * Minor typo * improving wrapping of filter editor buttons with new storage path button * Update .gitignore * Fix select border radius in non input-groups * Better storage path edit hint * Add note to edit storage path dialog re document_renamer * Add note to bulk edit storage path re document_renamer * Rename FILTER_STORAGE_DIRECTORY to PATH * Fix broken filter rule parsing * Show default storage if unspecified * Remove note re storage path on bulk edit * Add basic validation of filename variables Co-authored-by: Markus Kling <markus@markus-kling.net> Co-authored-by: Trenton Holmes <holmes.trenton@gmail.com> Co-authored-by: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Co-authored-by: Quinn Casey <quinn@quinncasey.com>
125 lines
2.9 KiB
TypeScript
125 lines
2.9 KiB
TypeScript
import {
|
|
Component,
|
|
EventEmitter,
|
|
Input,
|
|
OnInit,
|
|
Output,
|
|
ViewChild,
|
|
} from '@angular/core'
|
|
import { PaperlessDocument } from 'src/app/data/paperless-document'
|
|
import { DocumentService } from 'src/app/services/rest/document.service'
|
|
import { SettingsService } from 'src/app/services/settings.service'
|
|
import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'
|
|
import { OpenDocumentsService } from 'src/app/services/open-documents.service'
|
|
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
|
|
import { FILTER_FULLTEXT_MORELIKE } from 'src/app/data/filter-rule-type'
|
|
import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings'
|
|
|
|
@Component({
|
|
selector: 'app-document-card-large',
|
|
templateUrl: './document-card-large.component.html',
|
|
styleUrls: [
|
|
'./document-card-large.component.scss',
|
|
'../popover-preview/popover-preview.scss',
|
|
],
|
|
})
|
|
export class DocumentCardLargeComponent implements OnInit {
|
|
constructor(
|
|
private documentService: DocumentService,
|
|
private settingsService: SettingsService,
|
|
public openDocumentsService: OpenDocumentsService
|
|
) {}
|
|
|
|
@Input()
|
|
selected = false
|
|
|
|
@Output()
|
|
toggleSelected = new EventEmitter()
|
|
|
|
get selectable() {
|
|
return this.toggleSelected.observers.length > 0
|
|
}
|
|
|
|
@Input()
|
|
document: PaperlessDocument
|
|
|
|
@Output()
|
|
clickTag = new EventEmitter<number>()
|
|
|
|
@Output()
|
|
clickCorrespondent = new EventEmitter<number>()
|
|
|
|
@Output()
|
|
clickDocumentType = new EventEmitter<number>()
|
|
|
|
@Output()
|
|
clickStoragePath = new EventEmitter<number>()
|
|
|
|
@Output()
|
|
clickMoreLike = new EventEmitter()
|
|
|
|
@ViewChild('popover') popover: NgbPopover
|
|
|
|
mouseOnPreview = false
|
|
popoverHidden = true
|
|
|
|
get searchScoreClass() {
|
|
if (this.document.__search_hit__) {
|
|
if (this.document.__search_hit__.score > 0.7) {
|
|
return 'success'
|
|
} else if (this.document.__search_hit__.score > 0.3) {
|
|
return 'warning'
|
|
} else {
|
|
return 'danger'
|
|
}
|
|
}
|
|
}
|
|
|
|
ngOnInit(): void {}
|
|
|
|
getIsThumbInverted() {
|
|
return this.settingsService.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED)
|
|
}
|
|
|
|
getThumbUrl() {
|
|
return this.documentService.getThumbUrl(this.document.id)
|
|
}
|
|
|
|
getDownloadUrl() {
|
|
return this.documentService.getDownloadUrl(this.document.id)
|
|
}
|
|
|
|
get previewUrl() {
|
|
return this.documentService.getPreviewUrl(this.document.id)
|
|
}
|
|
|
|
mouseEnterPreview() {
|
|
this.mouseOnPreview = true
|
|
if (!this.popover.isOpen()) {
|
|
// we're going to open but hide to pre-load content during hover delay
|
|
this.popover.open()
|
|
this.popoverHidden = true
|
|
setTimeout(() => {
|
|
if (this.mouseOnPreview) {
|
|
// show popover
|
|
this.popoverHidden = false
|
|
} else {
|
|
this.popover.close()
|
|
}
|
|
}, 600)
|
|
}
|
|
}
|
|
|
|
mouseLeavePreview() {
|
|
this.mouseOnPreview = false
|
|
}
|
|
|
|
mouseLeaveCard() {
|
|
this.popover.close()
|
|
}
|
|
|
|
get contentTrimmed() {
|
|
return this.document.content.substr(0, 500)
|
|
}
|
|
}
|