From 2fbbdd68cc234d513b2718d63cb59f057abfa9a9 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald <jonas.jenwald@gmail.com> Date: Sun, 16 Apr 2023 09:07:22 +0200 Subject: [PATCH] Create the "hiddenCopyElement" in the `PDFViewer` constructor (PR 16286 follow-up) To make this functionality work out-of-the-box in custom implementations, see e.g. the "viewer components" examples, it'd be slightly easier if we dynamically create/insert the "hiddenCopyElement" in the `PDFViewer` constructor. Given that the "copy all text" feature still appears to work just as before with this patch, hopefully I'm not overlooking any reason why doing this would be a bad idea. --- web/app.js | 1 - web/pdf_viewer.js | 8 +++++--- web/viewer-geckoview.html | 1 - web/viewer-geckoview.js | 1 - web/viewer.html | 1 - web/viewer.js | 1 - 6 files changed, 5 insertions(+), 8 deletions(-) diff --git a/web/app.js b/web/app.js index 5ea15795d..847915af9 100644 --- a/web/app.js +++ b/web/app.js @@ -504,7 +504,6 @@ const PDFViewerApplication = { this.pdfViewer = new PDFViewer({ container, viewer, - hiddenCopyElement: appConfig.hiddenCopyElement, eventBus, renderingQueue: pdfRenderingQueue, linkService: pdfLinkService, diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index 705d0446b..a0523c843 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -82,8 +82,6 @@ function isValidAnnotationEditorMode(mode) { * @typedef {Object} PDFViewerOptions * @property {HTMLDivElement} container - The container for the viewer element. * @property {HTMLDivElement} [viewer] - The viewer element. - * @property {HTMLDivElement} [hiddenCopyElement] - The hidden element used to - * check if all is selected. * @property {EventBus} eventBus - The application event bus. * @property {IPDFLinkService} linkService - The navigation/linking service. * @property {IDownloadManager} [downloadManager] - The download manager @@ -240,7 +238,6 @@ class PDFViewer { } this.container = options.container; this.viewer = options.viewer || options.container.firstElementChild; - this.#hiddenCopyElement = options.hiddenCopyElement; if ( typeof PDFJSDev === "undefined" || @@ -257,6 +254,11 @@ class PDFViewer { throw new Error("The `container` must be absolutely positioned."); } } + const hiddenCopyElement = (this.#hiddenCopyElement = + document.createElement("div")); + hiddenCopyElement.id = "hiddenCopyElement"; + this.viewer.before(hiddenCopyElement); + this.#resizeObserver.observe(this.container); this.eventBus = options.eventBus; diff --git a/web/viewer-geckoview.html b/web/viewer-geckoview.html index dffd5d0a2..a13ba8195 100644 --- a/web/viewer-geckoview.html +++ b/web/viewer-geckoview.html @@ -82,7 +82,6 @@ See https://github.com/adobe-type-tools/cmap-resources <div id="mainContainer"> <div id="viewerContainer" tabindex="0"> - <div id="hiddenCopyElement"></div> <div id="viewer" class="pdfViewer"></div> </div> </div> <!-- mainContainer --> diff --git a/web/viewer-geckoview.js b/web/viewer-geckoview.js index 8921de3bf..15a2d2d04 100644 --- a/web/viewer-geckoview.js +++ b/web/viewer-geckoview.js @@ -41,7 +41,6 @@ function getViewerConfiguration() { appContainer: document.body, mainContainer, viewerContainer: document.getElementById("viewer"), - hiddenCopyElement: document.getElementById("hiddenCopyElement"), toolbar: { mainContainer, container: document.getElementById("floatingToolbar"), diff --git a/web/viewer.html b/web/viewer.html index bb0d20400..4c0583c67 100644 --- a/web/viewer.html +++ b/web/viewer.html @@ -385,7 +385,6 @@ See https://github.com/adobe-type-tools/cmap-resources </div> <div id="viewerContainer" tabindex="0"> - <div id="hiddenCopyElement"></div> <div id="viewer" class="pdfViewer"></div> </div> </div> <!-- mainContainer --> diff --git a/web/viewer.js b/web/viewer.js index cbe1a3776..7a8dabf53 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -41,7 +41,6 @@ function getViewerConfiguration() { appContainer: document.body, mainContainer: document.getElementById("viewerContainer"), viewerContainer: document.getElementById("viewer"), - hiddenCopyElement: document.getElementById("hiddenCopyElement"), toolbar: { container: document.getElementById("toolbarViewer"), numPages: document.getElementById("numPages"),