Browse Source

fix: page ref not working as linked ref in property value

Also, fixed page ref lowercased in property value. eg: authors::
[[Jeff Howard]] -> jeff howard

Zotero tags will be parsed too.
Tienson Qin 4 years ago
parent
commit
6abca45828

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

@@ -1517,6 +1517,9 @@
                            (assoc properties :alias aliases))
                          properties))
                      properties)
+        properties-order (if pre-block?
+                           (remove #{:title :filters} properties-order)
+                           properties-order)
         properties (if (seq properties-order)
                      (map (fn [k] [k (get properties k)]) properties-order)
                      properties)]

+ 6 - 6
src/main/frontend/extensions/zotero/extractor.cljs

@@ -4,6 +4,7 @@
             [frontend.extensions.zotero.schema :as schema]
             [frontend.extensions.html-parser :as html-parser]
             [frontend.date :as date]
+            [clojure.string :as string]
             [clojure.set :refer [rename-keys]]
             [frontend.extensions.zotero.setting :as setting]
             [frontend.extensions.zotero.api :as api]))
@@ -49,17 +50,16 @@
               (comp
                (filter (fn [m] (= "author" (:creator-type m))))
                (map (fn [{:keys [first-name last-name name]}]
-                      (if name
-                        (util/format "[[%s]]" name)
-                        (util/format "[[%s %s]]" first-name last-name)))))
+                      (string/trim (if name name (str first-name " " last-name))))))
               creators)]
-    (str/join ", " authors)))
+    (distinct authors)))
 
 (defn tags [item]
   (let [tags
         (->> (-> item :data :tags)
-             (mapv (fn [{:keys [tag]}] (util/format "[[%s]]" tag))))]
-    (str/join ", " tags)))
+             (mapv (fn [{:keys [tag]}] (string/trim tag)))
+             (mapcat #(string/split % #",\s?")))]
+    (distinct tags)))
 
 (defn date->journal [item]
   (if-let [date (-> item :meta :parsed-date

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

@@ -51,7 +51,6 @@
           :as opt}]
    (go
      (let [{:keys [page-name properties]} (extractor/extract item)]
-
        (if (page-handler/page-exists? (str/lower-case page-name))
          (editor-handler/api-insert-new-block!
           ""

+ 17 - 1
src/main/frontend/format/block.cljs

@@ -199,7 +199,8 @@
           page-refs (->>
                      (map (fn [v]
                             (when (string? v)
-                              (let [result (text/split-page-refs-without-brackets v {:un-brackets? false})]
+                              (let [v (string/trim v)
+                                    result (text/split-page-refs-without-brackets v {:un-brackets? false})]
                                 (if (coll? result)
                                   (map text/page-ref-un-brackets! result)
                                   []))))
@@ -464,6 +465,19 @@
             (uuid custom-id))))
       (db/new-block-id)))
 
+(defn get-page-refs-from-properties
+  [properties]
+  (let [page-refs (mapcat (fn [v] (cond
+                                   (coll? v)
+                                   v
+
+                                   (text/page-ref? v)
+                                   [(text/page-ref-un-brackets! v)]
+
+                                   :else
+                                   nil)) (vals properties))]
+    (map (fn [page] (page-name->map page true)) page-refs)))
+
 (defn extract-blocks
   [blocks content with-id? format]
   (try
@@ -593,6 +607,8 @@
                                                (utf8/length encoded-content))}
                            :body @pre-block-body
                            :properties @pre-block-properties
+                           :properties-order (keys @pre-block-properties)
+                           :refs (get-page-refs-from-properties @pre-block-properties)
                            :pre-block? true
                            :unordered true}
                           (block-keywordize)))

+ 8 - 2
src/main/frontend/handler/editor.cljs

@@ -692,10 +692,13 @@
 
 (defn properties-block
   [properties format page]
-  (let [content (property/insert-properties format "" properties)]
+  (let [content (property/insert-properties format "" properties)
+        refs (block/get-page-refs-from-properties properties)]
     {:block/pre-block? true
      :block/uuid (db/new-block-id)
      :block/properties properties
+     :block/properties-order (keys properties)
+     :block/refs refs
      :block/left page
      :block/format format
      :block/content content
@@ -709,10 +712,13 @@
   ([title format page properties]
    (let [p (common-handler/get-page-default-properties title)
          ps (merge p properties)
-         content (property/insert-properties format "" ps)]
+         content (property/insert-properties format "" ps)
+         refs (block/get-page-refs-from-properties properties)]
      {:block/pre-block? true
       :block/uuid (db/new-block-id)
       :block/properties ps
+      :block/properties-order (keys ps)
+      :block/refs refs
       :block/left page
       :block/format format
       :block/content content

+ 1 - 1
src/main/frontend/ui.cljs

@@ -617,7 +617,7 @@
   (when error
     (js/console.error error)
     (log/error :ui/catch-error error))
-  (if (and (not config/dev?) (some? error))
+  (if (some? error)
     error-view
     view))
 

+ 1 - 1
src/main/frontend/util/property.cljs

@@ -360,7 +360,7 @@
         v (if (or (symbol? v) (keyword? v)) (name v) (str v))
         v (string/trim v)]
     (cond
-      (= k "filters")
+      (contains? #{"title" "filters"} k)
       v
 
       (= v "true")