diff --git a/test/integration/thumbnail_view_spec.mjs b/test/integration/thumbnail_view_spec.mjs index 39185e176..fbb15ff69 100644 --- a/test/integration/thumbnail_view_spec.mjs +++ b/test/integration/thumbnail_view_spec.mjs @@ -210,6 +210,30 @@ describe("PDF Thumbnail View", () => { }) ); }); + + it("must navigate when a synthetic click is dispatched on the thumbnail image (bug 2034568)", async () => { + await Promise.all( + pages.map(async ([browserName, page]) => { + await showViewsManager(page); + await waitForThumbnailVisible(page, 3); + + // Simulate a screen reader (e.g. NVDA) firing a synthetic click on + // the child rather than the thumbnailImageContainer button. + await page.evaluate(() => { + const img = document.querySelector( + `.thumbnail[page-number="3"] .thumbnailImageContainer img` + ); + img.dispatchEvent(new MouseEvent("click", { bubbles: true })); + }); + + const currentPage = await page.$eval( + "#pageNumber", + el => el.valueAsNumber + ); + expect(currentPage).withContext(`In ${browserName}`).toBe(3); + }) + ); + }); }); describe("The manage dropdown menu", () => { diff --git a/web/pdf_thumbnail_viewer.js b/web/pdf_thumbnail_viewer.js index 1c005d69d..6b10b6865 100644 --- a/web/pdf_thumbnail_viewer.js +++ b/web/pdf_thumbnail_viewer.js @@ -1547,12 +1547,9 @@ class PDFThumbnailViewer { } #goToPage(e) { - const { target } = e; - if (target.classList.contains("thumbnailImageContainer")) { - const pageNumber = parseInt( - target.parentElement.getAttribute("page-number"), - 10 - ); + const container = e.target.closest(".thumbnailImageContainer"); + if (container) { + const pageNumber = parseInt(container.getAttribute("page-number"), 10); this.linkService.goToPage(pageNumber); stopEvent(e); }