Browse Source

enhance(dev): upgrade pdfjs (#11914)

* enhance(dev): upgrade pdfjs

* chore: upgrade shadow-cljs
Charlie 4 months ago
parent
commit
1328da6ee3

+ 3 - 3
gulpfile.js

@@ -67,9 +67,9 @@ const common = {
         'packages/amplify/dist/amplify.js'
       ]).pipe(gulp.dest(path.join(outputPath, 'js'))),
       () => gulp.src([
-        'node_modules/pdfjs-dist/build/pdf.js',
-        'node_modules/pdfjs-dist/build/pdf.worker.js',
-        'node_modules/pdfjs-dist/web/pdf_viewer.js'
+        'node_modules/pdfjs-dist/legacy/build/pdf.mjs',
+        'node_modules/pdfjs-dist/legacy/build/pdf.worker.mjs',
+        'node_modules/pdfjs-dist/legacy/web/pdf_viewer.mjs',
       ]).pipe(gulp.dest(path.join(outputPath, 'js', 'pdfjs'))),
       () => gulp.src([
         'node_modules/pdfjs-dist/cmaps/*.*',

+ 1 - 1
package.json

@@ -130,7 +130,7 @@
         "mldoc": "1.5.7",
         "path": "0.12.7",
         "path-complete-extname": "1.0.0",
-        "pdfjs-dist": "^3.9.179",
+        "pdfjs-dist": "4.2.67",
         "photoswipe": "^5.3.7",
         "pixi-graph-fork": "0.2.0",
         "pixi.js": "6.2.0",

+ 3 - 0
resources/index.html

@@ -50,6 +50,9 @@ const portal = new MagicPortal(worker);
 <script defer src="./js/highlight.min.js"></script>
 <script defer src="./js/interact.min.js"></script>
 <script defer src="./js/marked.min.js"></script>
+<script defer type="module" src="./js/pdfjs/pdf.mjs"></script>
+<script defer type="module" src="./js/pdf_viewer3.mjs"></script>
+<script defer src="./js/eventemitter3.umd.min.js"></script>
 <script defer src="./js/html2canvas.min.js"></script>
 <script defer src="./js/lsplugin.core.js"></script>
 <script defer src="./js/react.production.min.js"></script>

File diff suppressed because it is too large
+ 6020 - 0
resources/js/pdf_viewer3.mjs


+ 83 - 92
src/main/frontend/extensions/pdf/core.cljs

@@ -33,7 +33,7 @@
 
 (rum/defcs pdf-highlight-finder
   < rum/static rum/reactive
-    (rum/local false ::mounted?)
+  (rum/local false ::mounted?)
   [state ^js viewer]
   (let [*mounted? (::mounted? state)]
     (when viewer
@@ -70,11 +70,11 @@
   [^js viewer]
   (let [el-ref   (rum/use-ref nil)
         adjust-main-size!
-                 (util/debounce
-                  200 (fn [width]
-                        (let [root-el js/document.documentElement]
-                          (.setProperty (.-style root-el) "--ph-view-container-width" width)
-                          (pdf-utils/adjust-viewer-size! viewer))))
+        (util/debounce
+         200 (fn [width]
+               (let [root-el js/document.documentElement]
+                 (.setProperty (.-style root-el) "--ph-view-container-width" width)
+                 (pdf-utils/adjust-viewer-size! viewer))))
         group-id (.-$groupIdentity viewer)]
 
     ;; draggable handler
@@ -145,8 +145,8 @@
                            "copy"
                            (do
                              (util/copy-to-clipboard!
-                               (or (:text content) (pdf-utils/fix-selection-text-breakline (.toString selection)))
-                               :owner-window (pdf-windows/resolve-own-window viewer))
+                              (or (:text content) (pdf-utils/fix-selection-text-breakline (.toString selection)))
+                              :owner-window (pdf-windows/resolve-own-window viewer))
                              (pdf-utils/clear-all-selection))
 
                            "link"
@@ -205,7 +205,6 @@
       (for [it ["yellow", "red", "green", "blue", "purple"]]
         [:a {:key it :data-color it :data-action it} it])]
 
-
      (and id [:li.item {:data-action "ref"} (t :pdf/copy-ref)])
 
      (and (not area?) [:li.item {:data-action "copy"} (t :pdf/copy-text)])
@@ -225,8 +224,7 @@
 
                                     (when (true? (:clearSelection extras))
                                       (pdf-utils/clear-all-selection)))}
-          label]))
-     ]))
+          label]))]))
 
 (rum/defc pdf-highlights-text-region
   [^js viewer vw-hl hl {:keys [show-ctx-menu!]}]
@@ -286,9 +284,9 @@
         update-hl!        (fn [hl] (some-> (rum/deref *ops-ref) (:upd-hl!) (apply [hl])))]
 
     (rum/use-effect!
-      (fn []
-        (rum/set-ref! *ops-ref ops))
-      [ops])
+     (fn []
+       (rum/set-ref! *ops-ref ops))
+     [ops])
 
     ;; resizable
     (rum/use-effect!
@@ -336,7 +334,6 @@
 
                                                                 (update-hl! hl')) 200))))
 
-
                                                   (js/setTimeout #(rum/set-ref! *dirty false))))
 
                                        :move  (fn [^js/MouseEvent e]
@@ -358,12 +355,10 @@
 
                                                     ;; cache pos
                                                     (.setAttribute target "data-x" ax)
-                                                    (.setAttribute target "data-y" ay))
-                                                  ))}
+                                                    (.setAttribute target "data-y" ay))))}
                            :modifiers [(js/interact.modifiers.restrict
-                                         (bean/->js {:restriction (.closest el ".page")}))]
-                           :inertia   true})
-                         ))]
+                                        (bean/->js {:restriction (.closest el ".page")}))]
+                           :inertia   true})))]
          ;; destroy
          #(.unset it)))
      [hl])
@@ -391,8 +386,7 @@
          (if (get-in hl [:content :image])
            (pdf-highlight-area-region viewer vw-hl hl ops)
            (pdf-highlights-text-region viewer vw-hl hl ops))
-         (:id hl))
-       ))])
+         (:id hl))))])
 
 (rum/defc ^:large-vars/cleanup-todo pdf-highlight-area-selection
   [^js viewer {:keys [show-ctx-menu!]}]
@@ -461,73 +455,73 @@
         disable-text-selection! #(js-invoke viewer-clt (if % "add" "remove") "disabled-text-selection")
 
         fn-move                 (rum/use-callback
-                                  (fn [^js/MouseEvent e]
-                                    (set-end! (calc-coords! (.-pageX e) (.-pageY e))))
-                                  [])]
+                                 (fn [^js/MouseEvent e]
+                                   (set-end! (calc-coords! (.-pageX e) (.-pageY e))))
+                                 [])]
 
     (rum/use-effect!
-      (fn []
-        (when-let [^js/HTMLElement root cnt-el]
-          (let [fn-start (fn [^js/MouseEvent e]
-                           (if (should-start e)
-                             (let [target (.-target e)
-                                   page-el (.closest target ".page")
-                                   [x y] [(.-pageX e) (.-pageY e)]]
-                               (rum/set-ref! *start-el target)
-                               (rum/set-ref! *start-xy [x y])
-                               (rum/set-ref! *page-el page-el)
-                               (rum/set-ref! *page-rect (some-> page-el (.getBoundingClientRect) (.toJSON) (bean/->clj)))
-                               (set-start! (calc-coords! x y))
-                               (disable-text-selection! true)
-
-                               (.addEventListener root "mousemove" fn-move))
+     (fn []
+       (when-let [^js/HTMLElement root cnt-el]
+         (let [fn-start (fn [^js/MouseEvent e]
+                          (if (should-start e)
+                            (let [target (.-target e)
+                                  page-el (.closest target ".page")
+                                  [x y] [(.-pageX e) (.-pageY e)]]
+                              (rum/set-ref! *start-el target)
+                              (rum/set-ref! *start-xy [x y])
+                              (rum/set-ref! *page-el page-el)
+                              (rum/set-ref! *page-rect (some-> page-el (.getBoundingClientRect) (.toJSON) (bean/->clj)))
+                              (set-start! (calc-coords! x y))
+                              (disable-text-selection! true)
+
+                              (.addEventListener root "mousemove" fn-move))
 
                              ;; reset
-                             (do (reset-coords!)
-                                 (disable-text-selection! false))))
-
-                fn-end   (fn [^js/MouseEvent e]
-                           (when-let [start-el (rum/deref *start-el)]
-                             (let [end  (calc-coords! (.-pageX e) (.-pageY e))
-                                   rect (calc-rect start end)]
-
-                               (if (and (> (:width rect) 10)
-                                        (> (:height rect) 10))
-
-                                 (when-let [^js page-el (.closest start-el ".page")]
-                                   (let [page-number (int (.-pageNumber (.-dataset page-el)))
-                                         page-pos    (merge rect {:top  (- (:top rect) (.-offsetTop page-el))
-                                                                  :left (- (:left rect) (.-offsetLeft page-el))})
-                                         vw-pos      {:bounding page-pos :rects [] :page page-number}
-                                         sc-pos      (pdf-utils/vw-to-scaled-pos viewer vw-pos)
-
-                                         point       {:x (.-clientX e) :y (.-clientY e)}
-                                         hl          {:id         nil
-                                                      :page       page-number
-                                                      :position   sc-pos
-                                                      :content    {:text "[:span]" :image (js/Date.now)}
-                                                      :properties {}}]
+                            (do (reset-coords!)
+                                (disable-text-selection! false))))
+
+               fn-end   (fn [^js/MouseEvent e]
+                          (when-let [start-el (rum/deref *start-el)]
+                            (let [end  (calc-coords! (.-pageX e) (.-pageY e))
+                                  rect (calc-rect start end)]
+
+                              (if (and (> (:width rect) 10)
+                                       (> (:height rect) 10))
+
+                                (when-let [^js page-el (.closest start-el ".page")]
+                                  (let [page-number (int (.-pageNumber (.-dataset page-el)))
+                                        page-pos    (merge rect {:top  (- (:top rect) (.-offsetTop page-el))
+                                                                 :left (- (:left rect) (.-offsetLeft page-el))})
+                                        vw-pos      {:bounding page-pos :rects [] :page page-number}
+                                        sc-pos      (pdf-utils/vw-to-scaled-pos viewer vw-pos)
+
+                                        point       {:x (.-clientX e) :y (.-clientY e)}
+                                        hl          {:id         nil
+                                                     :page       page-number
+                                                     :position   sc-pos
+                                                     :content    {:text "[:span]" :image (js/Date.now)}
+                                                     :properties {}}]
 
                                      ;; ctx tips for area
-                                     (show-ctx-menu! viewer hl point {:reset-fn #(reset-coords!)}))
+                                    (show-ctx-menu! viewer hl point {:reset-fn #(reset-coords!)}))
 
-                                   (set-area-mode! false))
+                                  (set-area-mode! false))
 
                                  ;; reset
-                                 (reset-coords!)))
+                                (reset-coords!)))
 
-                             (disable-text-selection! false)
-                             (.removeEventListener root "mousemove" fn-move)))]
+                            (disable-text-selection! false)
+                            (.removeEventListener root "mousemove" fn-move)))]
 
-            (doto root
-              (.addEventListener "mousedown" fn-start)
-              (.addEventListener "mouseup" fn-end #js {:once true}))
+           (doto root
+             (.addEventListener "mousedown" fn-start)
+             (.addEventListener "mouseup" fn-end #js {:once true}))
 
             ;; destroy
-            #(doto root
-               (.removeEventListener "mousedown" fn-start)
-               (.removeEventListener "mouseup" fn-end)))))
-      [start])
+           #(doto root
+              (.removeEventListener "mousedown" fn-start)
+              (.removeEventListener "mouseup" fn-end)))))
+     [start])
 
     [:div.extensions__pdf-area-selection
      {:ref *el}
@@ -716,8 +710,7 @@
       viewer
       {:clear-ctx-menu! clear-ctx-menu!
        :show-ctx-menu!  show-ctx-menu!
-       :add-hl!         add-hl!
-       })]))
+       :add-hl!         add-hl!})]))
 
 (rum/defc ^:large-vars/data-var pdf-viewer
   [_url ^js pdf-document {:keys [identity filename initial-hls initial-page initial-error]} ops]
@@ -819,10 +812,10 @@
 
         (when (and page-ready? viewer (not initial-error))
           [(rum/with-key
-            (pdf-highlights
-             (:el state) viewer
-             initial-hls (:loaded-pages ano-state)
-             ops) "pdf-highlights")])]
+             (pdf-highlights
+              (:el state) viewer
+              initial-hls (:loaded-pages ano-state)
+              ops) "pdf-highlights")])]
 
        (when (and page-ready? viewer)
          [(when-not in-system-window?
@@ -847,10 +840,10 @@
 
      [:div.mt-5.sm:mt-4.flex
       (ui/button
-        "Submit"
-        {:on-click (fn []
-                     (let [password @password]
-                       (confirm-fn password)))})]]))
+       "Submit"
+       {:on-click (fn []
+                    (let [password @password]
+                      (confirm-fn password)))})]]))
 
 (rum/defc ^:large-vars/data-var pdf-loader
   [{:keys [url hls-file identity filename] :as pdf-current}]
@@ -1015,9 +1008,7 @@
     ;; load assets
     (rum/use-effect!
      (fn []
-       (p/then
-        (pdf-utils/load-base-assets$)
-        (fn [] (set-prepared! true))))
+       (set-prepared! true))
      [])
 
     ;; refresh loader
@@ -1058,9 +1049,9 @@
 
      (when (and (not system-win?) pdf-current)
        (js/ReactDOM.createPortal
-         (pdf-container-outer
-           (pdf-container pdf-current))
-         (js/document.querySelector "#app-single-container")))]))
+        (pdf-container-outer
+         (pdf-container pdf-current))
+        (js/document.querySelector "#app-single-container")))]))
 
 (rum/defcs system-embed-playground
   < rum/reactive

+ 16 - 21
src/main/frontend/extensions/pdf/utils.cljs

@@ -96,16 +96,16 @@
   [^js viewer]
   (when-let [^js doc (and viewer (.-pdfDocument viewer))]
     (p/create
-      (fn [resolve]
-        (p/catch
-          (p/then (.getMetadata doc)
-                  (fn [^js r]
-                    (js/console.debug "[metadata] " r)
-                    (when-let [^js info (and r (.-info r))]
-                      (resolve (bean/->clj info)))))
-          (fn [e]
-            (resolve nil)
-            (js/console.error e)))))))
+     (fn [resolve]
+       (p/catch
+        (p/then (.getMetadata doc)
+                (fn [^js r]
+                  (js/console.debug "[metadata] " r)
+                  (when-let [^js info (and r (.-info r))]
+                    (resolve (bean/->clj info)))))
+        (fn [e]
+          (resolve nil)
+          (js/console.error e)))))))
 
 (defn clear-all-selection
   []
@@ -113,7 +113,7 @@
 
 (def adjust-viewer-size!
   (util/debounce
-    200 (fn [^js viewer] (set! (. viewer -currentScaleValue) "auto"))))
+   200 (fn [^js viewer] (set! (. viewer -currentScaleValue) "auto"))))
 
 (defn fix-nested-js
   [its]
@@ -123,11 +123,6 @@
 (defn gen-uuid []
   (d/squuid))
 
-(defn load-base-assets$
-  []
-  (p/let [_ (util/js-load$ (str util/JS_ROOT "/pdfjs/pdf.js"))
-          _ (util/js-load$ (str util/JS_ROOT "/pdfjs/pdf_viewer.js"))]))
-
 (defn get-page-from-el
   [^js/HTMLElement el]
   (when-let [^js page-el (and el (.closest el ".page"))]
@@ -200,8 +195,8 @@
     (catch js/Error _e nil)))
 
 (comment
- (fix-selection-text-breakline "this is a\ntest paragraph")
- (fix-selection-text-breakline "he is 1\n8 years old")
- (fix-selection-text-breakline "这是一个\n\n段落")
- (fix-selection-text-breakline "これ\n\nは、段落")
- (fix-selection-text-breakline "this is a te-\nst paragraph"))
+  (fix-selection-text-breakline "this is a\ntest paragraph")
+  (fix-selection-text-breakline "he is 1\n8 years old")
+  (fix-selection-text-breakline "这是一个\n\n段落")
+  (fix-selection-text-breakline "これ\n\nは、段落")
+  (fix-selection-text-breakline "this is a te-\nst paragraph"))

+ 9 - 16
yarn.lock

@@ -5835,17 +5835,10 @@ path-type@^4.0.0:
   resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
   integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
 
-path2d-polyfill@^2.0.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/path2d-polyfill/-/path2d-polyfill-2.1.1.tgz#6098b7bf2fc24c306c6377bcd558b17ba437ea27"
-  integrity sha512-4Rka5lN+rY/p0CdD8+E+BFv51lFaFvJOrlOhyQ+zjzyQrzyh3ozmxd1vVGGDdIbUFSBtIZLSnspxTgPT0iJhvA==
-  dependencies:
-    path2d "0.1.1"
-
[email protected]:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/path2d/-/path2d-0.1.1.tgz#d3c3886cd2252fb2a7830c27ea7bb9a862d937ea"
-  integrity sha512-/+S03c8AGsDYKKBtRDqieTJv2GlkMb0bWjnqOgtF6MkjdUQ9a8ARAtxWf9NgKLGm2+WQr6+/tqJdU8HNGsIDoA==
+path2d@^0.2.0:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/path2d/-/path2d-0.2.2.tgz#cc85d61ed7827e7863a2ee36713d4b5315a3d85d"
+  integrity sha512-+vnG6S4dYcYxZd+CZxzXCNKdELYZSKfohrk98yajCo1PtRoDgCTrrwOvK1GT0UoAdVszagDVllQc0U1vaX4NUQ==
 
 [email protected]:
   version "0.12.7"
@@ -5866,13 +5859,13 @@ pbkdf2@^3.1.2:
     safe-buffer "^5.0.1"
     sha.js "^2.4.8"
 
-pdfjs-dist@^3.9.179:
-  version "3.11.174"
-  resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-3.11.174.tgz#5ff47b80f2d58c8dd0d74f615e7c6a7e7e704c4b"
-  integrity sha512-TdTZPf1trZ8/UFu5Cx/GXB7GZM30LT+wWUNfsi6Bq8ePLnb+woNKtDymI2mxZYBpMbonNFqKmiz684DIfnd8dA==
+pdfjs-dist@4.2.67:
+  version "4.2.67"
+  resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-4.2.67.tgz#dd2a65a4b00d95cd4bc2c1f6a27c5e9eb31d512a"
+  integrity sha512-rJmuBDFpD7cqC8WIkQUEClyB4UAH05K4AsyewToMTp2gSy3Rrx8c1ydAVqlJlGv3yZSOrhEERQU/4ScQQFlLHA==
   optionalDependencies:
     canvas "^2.11.2"
-    path2d-polyfill "^2.0.1"
+    path2d "^0.2.0"
 
 pend@~1.2.0:
   version "1.2.0"

Some files were not shown because too many files changed in this diff