Browse Source

enhance: open zotero pdf in logseq

Weihua Lu 4 năm trước cách đây
mục cha
commit
3f46857b4f

+ 7 - 0
src/main/frontend/components/block.cljs

@@ -25,6 +25,7 @@
             [frontend.extensions.latex :as latex]
             [frontend.extensions.sci :as sci]
             [frontend.extensions.pdf.assets :as pdf-assets]
+            [frontend.extensions.zotero :as zotero]
             [frontend.format.block :as block]
             [frontend.format.mldoc :as mldoc]
             [frontend.handler.block :as block-handler]
@@ -937,6 +938,12 @@
             (show-link? config metadata href full_text)
             (image-link config url href label metadata full_text)
 
+            (and
+             (util/electron?)
+             (= protocol "zotero")
+             (= (-> label get-label-text util/get-file-ext) "pdf"))
+            (zotero/zotero-pdf-link (get-label-text label) href)
+
             :else
             (->elem
              :a.external-link

+ 47 - 0
src/main/frontend/extensions/zotero.cljs

@@ -2,11 +2,13 @@
   (:require [cljs.core.async :refer [<! >! go chan go-loop] :as a]
             [clojure.string :as str]
             [frontend.components.svg :as svg]
+            [frontend.extensions.pdf.assets :as pdf-assets]
             [frontend.extensions.zotero.api :as api]
             [frontend.extensions.zotero.handler :as zotero-handler]
             [frontend.extensions.zotero.setting :as setting]
             [frontend.handler.notification :as notification]
             [frontend.handler.route :as route-handler]
+            [frontend.state :as state]
             [frontend.ui :as ui]
             [frontend.util :as util]
             [goog.dom :as gdom]
@@ -251,6 +253,23 @@
         :placeholder   "tag1,tag2,tag3"
         :on-blur       (fn [e] (setting/set-setting! :extra-tags (util/evalue e)))}]]]]
 
+   (when (util/electron?)
+     [:div.row
+      [:label.title
+       {:for "zotero_data_directory"}
+       "Zotero data directory"
+       [:a.ml-2
+        {:title "Set Zotero data directory to open pdf attachment in Logseq. Click to learn more."
+         :href "https://www.zotero.org/support/zotero_data"
+         :target "_blank"}
+        (svg/info)]]
+      [:div.mt-1.sm:mt-0.sm:col-span-2
+       [:div.max-w-lg.rounded-md
+        [:input.form-input.block
+         {:default-value (setting/setting :zotero-data-directory)
+          :placeholder   "/Users/<username>/Zotero"
+          :on-blur       (fn [e] (setting/set-setting! :zotero-data-directory (util/evalue e)))}]]]])
+
    [:div.row
     [:label.title
      {:for "zotero_import_all"}
@@ -281,3 +300,31 @@
      [:div.row
       [:div.bg-greenred-200.py-3.rounded-lg.col-span-full
        [:progress.w-full {:max (+ @(::total state) 30) :value @(::progress state)}] "Importing items from Zotero....Please wait..."]])])
+
+
+(rum/defc zotero-pdf-link
+  [label-text href]
+  [:div.zotero-pdf-link
+   [:a.external-link
+    {:href href
+     :target "_blank"}
+    label-text]
+   (ui/button
+    "annotate"
+    :small? true
+    :class "ml-1"
+    :on-click
+    (fn []
+      (if (str/blank? (setting/setting :zotero-data-directory))
+        (do
+          (route-handler/redirect! {:to :zotero-setting})
+          (notification/show! "Please setup Zotero data directory" :warn false))
+        (let [item-key (->> (str/split href #"/") last)
+              full-path
+              (util/node-path.join
+               (setting/setting :zotero-data-directory)
+               "storage"
+               item-key
+               label-text)
+              current (pdf-assets/inflate-asset full-path)]
+          (state/set-state! :pdf/current current)))))])

+ 4 - 0
src/main/frontend/extensions/zotero.css

@@ -10,6 +10,10 @@
   .form-select {
     @apply py-2;
   }
+
+  svg {
+    display: inline;
+  }
 }
 
 .zotero-search-item-loading-indicator {

+ 1 - 0
src/main/frontend/extensions/zotero/setting.cljs

@@ -11,6 +11,7 @@
    :attachments-block-text "[[Attachments]]"
    :include-notes?         true
    :notes-block-text       "[[Notes]]"
+   :zotero-data-directory  ""
    :extra-tags             ""
    :page-insert-prefix     "@"})