From f0811a4a3c49e2b75c142576d739ff361f3756c2 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sun, 30 Oct 2022 16:11:31 +0100 Subject: [PATCH] Prevent mouse interaction with form elements in PresentationMode (issue 12232) --- src/display/annotation_layer.js | 16 ++++++++++------ web/pdf_presentation_mode.js | 31 +++++++++++++++++-------------- web/viewer.css | 4 ++-- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index 495071dff..c8a156fc1 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -645,6 +645,10 @@ class LinkAnnotationElement extends AnnotationElement { return this.container; } + #setInternalLink() { + this.container.setAttribute("data-internal-link", ""); + } + /** * Bind internal links to the link element. * @@ -662,7 +666,7 @@ class LinkAnnotationElement extends AnnotationElement { return false; }; if (destination || destination === /* isTooltipOnly = */ "") { - link.className = "internalLink"; + this.#setInternalLink(); } } @@ -680,7 +684,7 @@ class LinkAnnotationElement extends AnnotationElement { this.linkService.executeNamedAction(action); return false; }; - link.className = "internalLink"; + this.#setInternalLink(); } /** @@ -698,7 +702,7 @@ class LinkAnnotationElement extends AnnotationElement { ); return false; }; - link.className = "internalLink"; + this.#setInternalLink(); } /** @@ -712,7 +716,7 @@ class LinkAnnotationElement extends AnnotationElement { this.linkService.executeSetOCGState(action); return false; }; - link.className = "internalLink"; + this.#setInternalLink(); } /** @@ -750,7 +754,7 @@ class LinkAnnotationElement extends AnnotationElement { if (!link.onclick) { link.onclick = () => false; } - link.className = "internalLink"; + this.#setInternalLink(); } _bindResetFormAction(link, resetForm) { @@ -758,7 +762,7 @@ class LinkAnnotationElement extends AnnotationElement { if (!otherClickAction) { link.href = this.linkService.getAnchorUrl(""); } - link.className = "internalLink"; + this.#setInternalLink(); if (!this._fieldObjects) { warn( diff --git a/web/pdf_presentation_mode.js b/web/pdf_presentation_mode.js index 07ff6125e..a3658f101 100644 --- a/web/pdf_presentation_mode.js +++ b/web/pdf_presentation_mode.js @@ -224,21 +224,24 @@ class PDFPresentationMode { evt.preventDefault(); return; } - if (evt.button === 0) { - // Enable clicking of links in presentation mode. Note: only links - // pointing to destinations in the current PDF document work. - const isInternalLink = - evt.target.href && evt.target.classList.contains("internalLink"); - if (!isInternalLink) { - // Unless an internal link was clicked, advance one page. - evt.preventDefault(); + if (evt.button !== 0) { + return; + } + // Enable clicking of links in presentation mode. Note: only links + // pointing to destinations in the current PDF document work. + if ( + evt.target.href && + evt.target.parentNode?.hasAttribute("data-internal-link") + ) { + return; + } + // Unless an internal link was clicked, advance one page. + evt.preventDefault(); - if (evt.shiftKey) { - this.pdfViewer.previousPage(); - } else { - this.pdfViewer.nextPage(); - } - } + if (evt.shiftKey) { + this.pdfViewer.previousPage(); + } else { + this.pdfViewer.nextPage(); } } diff --git a/web/viewer.css b/web/viewer.css index 064e1a872..7770b6883 100644 --- a/web/viewer.css +++ b/web/viewer.css @@ -222,8 +222,8 @@ body { user-select: none; } -.pdfPresentationMode:fullscreen a:not(.internalLink) { - display: none; +.pdfPresentationMode:fullscreen section:not([data-internal-link]) { + pointer-events: none; } .pdfPresentationMode:fullscreen .textLayer span {