@@ -468,6 +468,18 @@
outline-data)]
[:section.is-empty "No outlines"])]])))
+(rum/defc docinfo-display
+ [info]
+ [:div.extensions__pdf-doc-info
+ (for [[k v] info
+ :let [k (pr-str k)]]
+ [:p {:key k} [:strong k] " " [:i (pr-str v)]])])
+
+(defn make-docinfo-in-modal
+ (fn [close-fn]
+ (docinfo-display info)))
(rum/defc pdf-toolbar
[^js viewer]
(let [[outline-visible?, set-outline-visible!] (rum/use-state false)
@@ -508,12 +520,20 @@
{:on-click #(set-outline-visible! (not outline-visible?))}
(svg/view-list 16)]
+ ;; metadata
+ [:a.button.is-info
+ {:on-click #(do
+ (p/let [ret (pdf-utils/get-meta-data$ viewer)]
+ (state/set-modal! (make-docinfo-in-modal ret))))}
+ (svg/info)]
[:a.button
{:on-click #(state/set-state! :pdf/current nil)}
(t :close)]]]
;; contents outline
(pdf-outline viewer outline-visible? #(set-outline-visible! false))
;; settings
(and settings-visible? (pdf-settings
viewer
@@ -60,7 +60,7 @@
height: 42px;
z-index: 5;
background: linear-gradient(0deg, rgba(255, 255, 255, 0) 3%, rgba(255, 255, 255, 1) 100%);
- padding: 5px 20px;
+ padding: 8px 20px;
> .inner {
display: flex;
@@ -75,6 +75,10 @@
margin-left: 8px;
padding: 4px 6px;
color: var(--ls-icon-color);
+ &.is-info {
+ opacity: .3;
+ }
}
@@ -80,6 +80,21 @@
(set! (.-currentScale viewer) new-scale)))))
+(defn get-meta-data$
+ [^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)))))))
(defn clear-all-selection
[]
(.removeAllRanges (js/window.getSelection)))