From bec4827c3f32c448158bdc6510c742dca9cff773 Mon Sep 17 00:00:00 2001 From: ilkin-overleaf <100852799+ilkin-overleaf@users.noreply.github.com> Date: Thu, 4 Aug 2022 12:39:31 +0300 Subject: [PATCH] Merge pull request #9085 from overleaf/ii-pdf-click-position-fix [web] PDF preview click position error fix GitOrigin-RevId: f2ac73f2a4050b707402c373193ae7a0ecd8ac53 --- .../pdf-preview/components/pdf-js-viewer.js | 16 ++++++++++++---- .../features/pdf-preview/util/pdf-js-wrapper.js | 8 +++++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/services/web/frontend/js/features/pdf-preview/components/pdf-js-viewer.js b/services/web/frontend/js/features/pdf-preview/components/pdf-js-viewer.js index f72333c756..43c6fcf38d 100644 --- a/services/web/frontend/js/features/pdf-preview/components/pdf-js-viewer.js +++ b/services/web/frontend/js/features/pdf-preview/components/pdf-js-viewer.js @@ -193,11 +193,19 @@ function PdfJsViewer({ url, pdfFile }) { const pageElement = textLayer.source.textLayerDiv.closest('.page') const doubleClickListener = event => { - window.dispatchEvent( - new CustomEvent('synctex:sync-to-position', { - detail: pdfJsWrapper.clickPosition(event, pageElement, textLayer), - }) + const clickPosition = pdfJsWrapper.clickPosition( + event, + pageElement, + textLayer ) + + if (clickPosition) { + window.dispatchEvent( + new CustomEvent('synctex:sync-to-position', { + detail: clickPosition, + }) + ) + } } pageElement.addEventListener('dblclick', doubleClickListener) diff --git a/services/web/frontend/js/features/pdf-preview/util/pdf-js-wrapper.js b/services/web/frontend/js/features/pdf-preview/util/pdf-js-wrapper.js index 2648a8fbcb..91673269e5 100644 --- a/services/web/frontend/js/features/pdf-preview/util/pdf-js-wrapper.js +++ b/services/web/frontend/js/features/pdf-preview/util/pdf-js-wrapper.js @@ -152,7 +152,13 @@ export default class PDFJSWrapper { clickPosition(event, pageElement, textLayer) { const { viewport } = this.viewer.getPageView(textLayer.pageNumber - 1) - const pageRect = pageElement.querySelector('canvas').getBoundingClientRect() + const pageCanvas = pageElement.querySelector('canvas') + + if (!pageCanvas) { + return + } + + const pageRect = pageCanvas.getBoundingClientRect() const dx = event.clientX - pageRect.left const dy = event.clientY - pageRect.top