From 31cb38694173a385e1fefc5953774a40389cc547 Mon Sep 17 00:00:00 2001 From: Alf Eaton Date: Mon, 10 Jan 2022 13:58:31 +0000 Subject: [PATCH] Only store/restore PDF scroll position when visible (#6218) GitOrigin-RevId: c2023b5173fe4668f52da3e096c3dfc0124a7248 --- .../js/features/pdf-preview/components/pdf-js-viewer.js | 9 ++++++++- .../js/features/pdf-preview/util/pdf-js-wrapper.js | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) 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 8ade85b673..5d84205f1c 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 @@ -82,13 +82,16 @@ function PdfJsViewer({ url }) { let storePositionTimer if (initialised && pdfJsWrapper) { + if (!pdfJsWrapper.isVisible()) { + return + } + // store the scroll position in localStorage, for the synctex button const storePosition = debounce(pdfViewer => { // set position for "sync to code" button try { setPosition(pdfViewer.currentPosition) } catch (error) { - // TODO: investigate handling missing offsetParent in jsdom // console.error(error) } }, 500) @@ -139,6 +142,10 @@ function PdfJsViewer({ url }) { // restore the saved scale and scroll position useEffect(() => { if (initialised && pdfJsWrapper) { + if (!pdfJsWrapper.isVisible()) { + return + } + setScale(scale => { setPosition(position => { if (position) { 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 70dbaeac03..a387d424f7 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 @@ -183,6 +183,10 @@ export default class PDFJSWrapper { }) } + isVisible() { + return this.viewer.container.offsetParent !== null + } + abortDocumentLoading() { this.loadDocumentTask = undefined }