mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-02-11 23:59:31 -06:00
Enhancement: pngx pdf viewer (#12043)
This commit is contained in:
24
src-ui/src/test/mocks/pdfjs-legacy-build-pdf.ts
Normal file
24
src-ui/src/test/mocks/pdfjs-legacy-build-pdf.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
export class PDFDocumentProxy {
|
||||
numPages = 1
|
||||
}
|
||||
|
||||
export class PDFDocumentLoadingTask {
|
||||
promise: Promise<PDFDocumentProxy>
|
||||
destroyed = false
|
||||
|
||||
constructor(promise: Promise<PDFDocumentProxy>) {
|
||||
this.promise = promise
|
||||
}
|
||||
|
||||
destroy(): void {
|
||||
this.destroyed = true
|
||||
}
|
||||
}
|
||||
|
||||
export const GlobalWorkerOptions = {
|
||||
workerSrc: '',
|
||||
}
|
||||
|
||||
export const getDocument = (_src: unknown): PDFDocumentLoadingTask => {
|
||||
return new PDFDocumentLoadingTask(Promise.resolve(new PDFDocumentProxy()))
|
||||
}
|
||||
79
src-ui/src/test/mocks/pdfjs-web-pdf_viewer.ts
Normal file
79
src-ui/src/test/mocks/pdfjs-web-pdf_viewer.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
type EventHandler = (event?: unknown) => void
|
||||
|
||||
export class EventBus {
|
||||
private readonly listeners = new Map<string, Set<EventHandler>>()
|
||||
|
||||
on(eventName: string, listener: EventHandler): void {
|
||||
let listeners = this.listeners.get(eventName)
|
||||
if (!listeners) {
|
||||
listeners = new Set()
|
||||
this.listeners.set(eventName, listeners)
|
||||
}
|
||||
listeners.add(listener)
|
||||
}
|
||||
|
||||
off(eventName: string, listener: EventHandler): void {
|
||||
this.listeners.get(eventName)?.delete(listener)
|
||||
}
|
||||
|
||||
dispatch(eventName: string, event?: unknown): void {
|
||||
this.listeners.get(eventName)?.forEach((listener) => listener(event))
|
||||
}
|
||||
}
|
||||
|
||||
export class PDFFindController {
|
||||
onIsPageVisible?: () => boolean
|
||||
}
|
||||
|
||||
export class PDFLinkService {
|
||||
private document?: unknown
|
||||
private viewer?: unknown
|
||||
|
||||
setDocument(document: unknown): void {
|
||||
this.document = document
|
||||
}
|
||||
|
||||
setViewer(viewer: unknown): void {
|
||||
this.viewer = viewer
|
||||
}
|
||||
}
|
||||
|
||||
class BaseViewer {
|
||||
pagesCount = 0
|
||||
currentScale = 1
|
||||
currentScaleValue: string | number = 1
|
||||
pagesRotation = 0
|
||||
readonly options: Record<string, unknown>
|
||||
|
||||
private readonly eventBus?: EventBus
|
||||
private _currentPageNumber = 1
|
||||
|
||||
constructor(options: { eventBus?: EventBus }) {
|
||||
this.options = options
|
||||
this.eventBus = options.eventBus
|
||||
}
|
||||
|
||||
setDocument(document: { numPages?: number } | null | undefined): void {
|
||||
this.pagesCount = document?.numPages ?? 1
|
||||
this.eventBus?.dispatch('pagesinit', {})
|
||||
this.eventBus?.dispatch('pagerendered', {
|
||||
pageNumber: this._currentPageNumber,
|
||||
})
|
||||
}
|
||||
|
||||
cleanup(): void {
|
||||
this.pagesCount = 0
|
||||
}
|
||||
|
||||
get currentPageNumber(): number {
|
||||
return this._currentPageNumber
|
||||
}
|
||||
|
||||
set currentPageNumber(value: number) {
|
||||
this._currentPageNumber = value
|
||||
this.eventBus?.dispatch('pagechanging', { pageNumber: value })
|
||||
}
|
||||
}
|
||||
|
||||
export class PDFViewer extends BaseViewer {}
|
||||
export class PDFSinglePageViewer extends BaseViewer {}
|
||||
Reference in New Issue
Block a user