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"),