feat(web): zoom du lecteur — contrôles +/−/reset (50–300 %) sur PDF et CBZ

This commit is contained in:
Git Agent
2026-08-24 14:28:53 +02:00
parent b3bd678291
commit fcf1760031
7 changed files with 158 additions and 29 deletions

View File

@ -1,7 +1,19 @@
import { describe, expect, it } from "vitest";
import { epubFileName } from "./EpubReader";
import { pdfDocumentOptions } from "./pdfDocumentOptions";
import { clampReaderPage, containPageSize, nextReaderPage, orientedContainPageSize, previousReaderPage, readableViewportSize, readerPositionLabel } from "./readerLayout";
import {
clampReaderPage,
clampReaderZoom,
containPageSize,
nextReaderPage,
orientedContainPageSize,
previousReaderPage,
readableViewportSize,
readerPositionLabel,
readerZoomFactor,
readerZoomLabel,
zoomReaderSize
} from "./readerLayout";
import { classifyPdfCanvas, pdfCanvasHasVisibleContent, pdfCanvasVisible, pdfRenderScale } from "./pdfRender";
import { configurePdfWorker, pdfWorkerSrc } from "./pdfWorker";
import { readerErrorMessage } from "./ReaderError";
@ -118,6 +130,20 @@ describe("reader runtime helpers", () => {
expect(orientedContainPageSize({ width: 500, height: 900 }, { width: 1200, height: 900 })).toEqual({ width: 500, height: 375 });
});
it("clamps reader zoom to 25 percent steps between 50 and 300", () => {
expect(clampReaderZoom(20)).toBe(50);
expect(clampReaderZoom(63)).toBe(75);
expect(clampReaderZoom(186)).toBe(175);
expect(clampReaderZoom(340)).toBe(300);
expect(readerZoomLabel(125)).toBe("125 %");
expect(readerZoomFactor(175)).toBe(1.75);
});
it("applies reader zoom above the contained media size", () => {
expect(zoomReaderSize({ width: 800, height: 600 }, 50)).toEqual({ width: 400, height: 300 });
expect(zoomReaderSize({ width: 800, height: 600 }, 200)).toEqual({ width: 1600, height: 1200 });
});
it("ignores unusable reader viewport measurements", () => {
expect(readableViewportSize({ width: 0, height: 833 })).toBeNull();
expect(readableViewportSize({ width: 1, height: 1 })).toBeNull();