Преглед изворни кода

rename external-src-to-external-url

also fixed the issue and external audio not rendered
Tienson Qin пре 2 недеља
родитељ
комит
57a012bcc1

+ 1 - 1
deps/db/src/logseq/db/frontend/property.cljs

@@ -487,7 +487,7 @@
                                            :hide? true
                                            :public? false}
                                   :queryable? true}
-     :logseq.property.asset/external-src {:title "External URL"
+     :logseq.property.asset/external-url {:title "External URL"
                                           :schema {:type :string
                                                    :hide? false
                                                    :public? true}

+ 1 - 1
deps/db/src/logseq/db/frontend/schema.cljs

@@ -37,7 +37,7 @@
          (map (juxt :major :minor)
               [(parse-schema-version x) (parse-schema-version y)])))
 
-(def version (parse-schema-version "65.13"))
+(def version (parse-schema-version "65.15"))
 
 (defn major-version
   "Return a number.

+ 13 - 16
src/main/frontend/components/assets.cljs

@@ -8,10 +8,10 @@
    [frontend.config :as config]
    [frontend.context.i18n :refer [t]]
    [frontend.handler.assets :as assets-handler]
-   [frontend.handler.notification :as notification]
+   [frontend.handler.db-based.property :as db-property-handler]
    [frontend.handler.editor :as editor-handler]
+   [frontend.handler.notification :as notification]
    [frontend.handler.route :as route-handler]
-   [frontend.handler.db-based.property :as db-property-handler]
    [frontend.state :as state]
    [frontend.ui :as ui]
    [frontend.util :as util]
@@ -226,7 +226,7 @@
         [:h2.font-bold.opacity-80 "Selected directories:"]
         (alias-directories)])]))
 
-(rum/defc edit-external-src-form
+(rum/defc edit-external-url-form
   [asset-block {:keys [url title on-saved]}]
   (let [[saving? set-saving?] (rum/use-state false)
         create? (nil? asset-block)]
@@ -256,15 +256,14 @@
                                          checksum (assets-handler/get-file-checksum src)]
                                    (db-property-handler/set-block-properties!
                                     (:db/id asset-block)
-                                    {:logseq.property.asset/external-src src
+                                    {:logseq.property.asset/external-url src
                                      :logseq.property.asset/checksum checksum}))]))
                            (p/then #(when on-saved (on-saved asset-block false)))
                            (p/catch err-handle)
-                           (p/finally #(set-saving? false)))
-                       )))}
+                           (p/finally #(set-saving? false))))))}
      [:label [:span.block.pb-2.text-sm.opacity-60 "Asset title:"]
       (shui/input {:small true :default-value title :name "title"})]
-     [:label [:span.block.pb-2.text-sm.opacity-60 "Asset src:"]
+     [:label [:span.block.pb-2.text-sm.opacity-60 "Asset external url:"]
       [:span.flex.items-center.gap-2
        (shui/input {:small true :default-value url :name "src"})
        (when (util/electron?)
@@ -278,13 +277,13 @@
                            (when (not (string/blank? file-path))
                              (let [^js input (-> (.-target e) (.closest "form") (.querySelector "input[name='src']"))]
                                (set! (.-value input) file-path))))))}
-          "Select from local"))]]
+          "Select from disk"))]]
      [:div.flex.justify-end.pt-3
       (ui/button (if create? "Create" "Save") {:disabled saving?})]]))
 
-(rum/defc edit-external-src-content
+(rum/defc edit-external-url-content
   [asset-block pdf-current]
-  [:div.edit-external-src-content
+  [:div.edit-external-url-content
    (let [on-saved! (fn [asset-block update?]
                      (when-let [uuid' (and pdf-current (:block/uuid asset-block))]
                        (when pdf-current (state/set-current-pdf! nil))
@@ -292,18 +291,16 @@
                      (shui/dialog-close!))]
      (if asset-block
        [:div.pb-2.-mt-2
-        (let [url (:logseq.property.asset/external-src asset-block)
+        (let [url (:logseq.property.asset/external-url asset-block)
               title (:block/title asset-block)]
-          (edit-external-src-form asset-block {:url url :title title :on-saved on-saved!}))]
+          (edit-external-url-form asset-block {:url url :title title :on-saved on-saved!}))]
 
        (when-let [url (:url pdf-current)]
          [:div.pb-2
           (shui/alert
            {:variant "warning"}
            (shui/alert-description
-            "⚠️ PDF annotations should be with internal asset(pdf) ref block to work properly."
-            ))
+            "⚠️ PDF annotations should be with internal asset(pdf) ref block to work properly."))
 
           (let [title (util/node-path.basename url)]
-            (edit-external-src-form asset-block {:url url :title title :on-saved on-saved!}))])
-       ))])
+            (edit-external-url-form asset-block {:url url :title title :on-saved on-saved!}))])))])

+ 17 - 54
src/main/frontend/components/block.cljs

@@ -156,42 +156,6 @@
         link
         (str protocol "://" link)))))
 
-(defn- get-file-absolute-path
-  [config path]
-  (let [path (string/replace path "file:" "")
-        block-id (:block/uuid config)
-        current-file (and block-id
-                          (:file/path (:block/file (:block/page (db/entity [:block/uuid block-id])))))]
-    (when current-file
-      (let [parts (string/split current-file #"/")
-            parts-2 (string/split path #"/")
-            current-dir (util/string-join-path (drop-last 1 parts))]
-        (cond
-          (if util/win32? (utils/win32 path) (util/starts-with? path "/"))
-          path
-
-          (and (not (util/starts-with? path ".."))
-               (not (util/starts-with? path ".")))
-          (str current-dir "/" path)
-
-          :else
-          (let [parts (loop [acc []
-                             parts (reverse parts)
-                             col (reverse parts-2)]
-                        (if (empty? col)
-                          acc
-                          (let [[part parts] (case (first col)
-                                               ".."
-                                               [(first parts) (rest parts)]
-                                               "."
-                                               ["" parts]
-                                               [(first col) (rest parts)])]
-                            (recur (conj acc part)
-                                   parts
-                                   (rest col)))))
-                parts (remove #(string/blank? %) parts)]
-            (util/string-join-path (reverse parts))))))))
-
 (rum/defcs file-based-asset-loader
   < rum/reactive
   (rum/local nil ::exist?)
@@ -470,16 +434,17 @@
   ([src] (audio-cp src nil))
   ([src ext]
    ;; Change protocol to allow media fragment uris to play
-   (let [src (string/replace-first src common-config/asset-protocol "file://")
-         opts {:controls true
-               :on-touch-start #(util/stop %)}]
-     (case ext
-       :m4a [:audio opts [:source {:src src :type "audio/mp4"}]]
-       [:audio (assoc opts :src src)]))))
+   (when src
+     (let [src (string/replace-first src common-config/asset-protocol "file://")
+           opts {:controls true
+                 :on-touch-start #(util/stop %)}]
+       (case ext
+         :m4a [:audio opts [:source {:src src :type "audio/mp4"}]]
+         [:audio (assoc opts :src src)])))))
 
 (defn- open-pdf-file
   [e block href]
-  (let [href (or (:logseq.property.asset/external-src block) href)]
+  (let [href (or (:logseq.property.asset/external-url block) href)]
     (when-let [s (or href (some-> (.-target e) (.-dataset) (.-href)))]
       (let [load$ (fn []
                     (p/let [href (or href
@@ -516,14 +481,13 @@
                (nil? js-url)
                (config/get-local-asset-absolute-path))
         db-based? (config/db-based-graph? repo)]
-
     (when (nil? @src)
       (-> (assets-handler/<make-asset-url href js-url)
           (p/then (fn [url]
                     (reset! src (common-util/safe-decode-uri-component url))))
           (p/catch #(js/console.log "Failed to load asset:" %))))
     (:image-placeholder config)
-    (if-not @src
+    (if (and (:image-placeholder config) (nil? @src))
       (:image-placeholder config)
       (let [ext (keyword (or (util/get-file-ext @src)
                              (util/get-file-ext href)))
@@ -539,7 +503,6 @@
                                rel-dir (string/replace rel-dir #"^/+" "")
                                asset-url (path/path-join repo-dir rel-dir basename)]
                            (mobile-intent/open-or-share-file asset-url))))]
-
         (cond
           (or (contains? config/audio-formats ext)
               (and (= ext :webm) (string/starts-with? title "Audio-")))
@@ -635,7 +598,7 @@
                     :else
                     (if (assets-handler/check-alias-path? href)
                       (assets-handler/normalize-asset-resource-url href)
-                      (get-file-absolute-path config href)))]
+                      href))]
          (resizable-image config title href metadata full_text false))))))
 
 (def timestamp-to-string export-common-handler/timestamp-to-string)
@@ -1075,9 +1038,9 @@
   {:will-mount (fn [state]
                  (let [block (last (:rum/args state))
                        asset-type (:logseq.property.asset/type block)
-                       external-src? (not (string/blank? (:logseq.property.asset/external-src block)))
+                       external-url? (not (string/blank? (:logseq.property.asset/external-url block)))
                        path (path/path-join common-config/local-assets-dir (str (:block/uuid block) "." asset-type))]
-                   (p/let [result (if (or external-src? config/publishing?)
+                   (p/let [result (if (or external-url? config/publishing?)
                                                         ;; publishing doesn't have window.pfs defined
                                     true
                                     (fs/file-exists? (config/get-repo-dir (state/get-current-repo)) path))]
@@ -1507,7 +1470,7 @@
                  :else
                  (if (assets-handler/check-alias-path? href)
                    (assets-handler/resolve-asset-real-path-url (state/get-current-repo) href)
-                   (get-file-absolute-path config href)))]
+                   href))]
       (audio-cp href))))
 
 (defn- media-link
@@ -2425,10 +2388,10 @@
          [(hl-ref)]
 
          (let [config' (cond-> config
-                               (and (:page-ref? config)
-                                    (= 1 (count block-ast-title))
-                                    (= "Link" (ffirst block-ast-title)))
-                               (assoc :node-ref-link-only? true))]
+                         (and (:page-ref? config)
+                              (= 1 (count block-ast-title))
+                              (= "Link" (ffirst block-ast-title)))
+                         (assoc :node-ref-link-only? true))]
            (conj
             (map-inline config' block-ast-title)
             (when (= block-type :whiteboard-shape) [:span.mr-1 (ui/icon "whiteboard-element" {:extension? true})])))

+ 0 - 6
src/main/frontend/components/content.cljs

@@ -284,12 +284,6 @@
          (when-not db?
            (block-template block-id))
 
-         (when (and db? (= "pdf" (:logseq.property.asset/type block)))
-           (shui/dropdown-menu-item
-            {:key      "Edit asset source url"
-             :on-click #(state/pub-event! [:asset/dialog-edit-external-src block])}
-            "Edit Asset source url"))
-
          (cond
            (srs/card-block? block)
            (shui/dropdown-menu-item

+ 14 - 1
src/main/frontend/components/property/value.cljs

@@ -41,6 +41,12 @@
             [promesa.core :as p]
             [rum.core :as rum]))
 
+;; TODO: support :string editing
+(defonce string-value-on-click
+  {:logseq.property.asset/external-url
+   (fn [block]
+     (state/pub-event! [:asset/dialog-edit-external-url block]))})
+
 (defn- entity-map?
   [m]
   (and (map? m) (:db/id m)))
@@ -1240,7 +1246,14 @@
        (property-block-value value block property page-cp opts)
 
        :else
-       (inline-text {} :markdown (macro-util/expand-value-if-macro (str value) (state/get-macros))))]))
+       (let [content (inline-text {} :markdown (macro-util/expand-value-if-macro (str value) (state/get-macros)))]
+         (if (contains? (set (keys string-value-on-click))
+                        (:db/ident property))
+           [:div.w-full {:on-click (fn []
+                                     (let [f (get string-value-on-click (:db/ident property))]
+                                       (f block)))}
+            content]
+           content)))]))
 
 (rum/defc single-number-input
   [block property value-block table-view?]

+ 3 - 3
src/main/frontend/extensions/pdf/assets.cljs

@@ -160,7 +160,7 @@
         (let [ref-asset-id (:image content)
               image? (not (nil? ref-asset-id))
               text (if image? (.toLocaleString (js/Date.))
-                              (:text content))
+                       (:text content))
               colors (:property/closed-values (db/entity :logseq.property.pdf/hl-color))
               color-id (some (fn [color] (when (= (:block/title color) (:color properties))
                                            (:db/id color))) colors)]
@@ -361,8 +361,8 @@
   [block]
   (let [hl-value (:logseq.property.pdf/hl-value block)
         asset (:logseq.property/asset block)
-        external-src (:logseq.property.asset/external-src asset)
-        file-path (or external-src (str "../assets/" (:block/uuid asset) ".pdf"))]
+        external-url (:logseq.property.asset/external-url asset)
+        file-path (or external-url (str "../assets/" (:block/uuid asset) ".pdf"))]
     (if asset
       (->
        (p/let [href (assets-handler/<make-asset-url file-path)]

+ 5 - 5
src/main/frontend/extensions/pdf/core.cljs

@@ -175,7 +175,7 @@
                            ;; colors
                            (let [pdf-current (state/get-current-pdf)]
                              (if (and (config/db-based-graph?) (not (:block pdf-current)))
-                               (state/pub-event! [:asset/dialog-edit-external-src nil pdf-current])
+                               (state/pub-event! [:asset/dialog-edit-external-url nil pdf-current])
                                (let [properties {:color action}]
                                  (if-not id
                                    ;; add highlight
@@ -401,10 +401,10 @@
    (for [hl page-hls]
      (let [vw-hl (update-in hl [:position] #(pdf-utils/scaled-to-vw-pos viewer %))]
        (rum/with-key
-        (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))))])
+         (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))))])
 
 (rum/defc ^:large-vars/cleanup-todo pdf-highlight-area-selection
   [^js viewer {:keys [show-ctx-menu!]}]

+ 1 - 1
src/main/frontend/extensions/pdf/toolbar.cljs

@@ -601,7 +601,7 @@
           :on-click (fn []
                       (if asset-block
                         (pdf-assets/goto-annotations-page! (:pdf/current @state/state))
-                        (state/pub-event! [:asset/dialog-edit-external-src nil pdf-current])))}
+                        (state/pub-event! [:asset/dialog-edit-external-url nil pdf-current])))}
          (svg/annotations 16)]
 
         ;; system window

+ 5 - 5
src/main/frontend/handler/editor.cljs

@@ -1534,16 +1534,16 @@
         (fs/write-plain-text-file! repo dir file-rpath content nil)))))
 
 (defn- new-asset-block
-  [repo ^js file {:keys [repo-dir asset-dir-rpath external-src]}]
+  [repo ^js file {:keys [repo-dir asset-dir-rpath external-url]}]
   ;; WARN file name maybe fully qualified path when paste file
   (p/let [[file title] (if (map? file) [(:src file) (:title file)] [file nil])
-          [file external-src] (if (string? file) [nil file] [file external-src])
-          file-name (node-path/basename (or (some-> file (.-name)) (str external-src)))
+          [file external-url] (if (string? file) [nil file] [file external-url])
+          file-name (node-path/basename (or (some-> file (.-name)) (str external-url)))
           file-name-without-ext* (db-asset/asset-name->title file-name)
           file-name-without-ext (if (= file-name-without-ext* "image")
                                   (date/get-date-time-string-2)
                                   file-name-without-ext*)
-          checksum (some-> (or file external-src) (assets-handler/get-file-checksum))
+          checksum (some-> (or file external-url) (assets-handler/get-file-checksum))
           size (or (some-> file (.-size)) 0)
           existing-asset (some->> checksum (db-async/<get-asset-with-checksum repo))]
     (if existing-asset
@@ -1574,7 +1574,7 @@
          {:block/title (or title file-name-without-ext)
           :block/uuid block-id
           :logseq.property.asset/type ext
-          :logseq.property.asset/external-src external-src
+          :logseq.property.asset/external-url external-url
           :logseq.property.asset/size size
           :logseq.property.asset/checksum checksum
           :block/tags #{(:db/id asset)}})))))

+ 4 - 4
src/main/frontend/handler/events/ui.cljs

@@ -2,6 +2,7 @@
   "UI events"
   (:require [clojure.core.async :as async]
             [clojure.core.async.interop :refer [p->c]]
+            [frontend.components.assets :as assets]
             [frontend.components.cmdk.core :as cmdk]
             [frontend.components.file-sync :as file-sync]
             [frontend.components.page :as component-page]
@@ -15,7 +16,6 @@
             [frontend.components.shell :as shell]
             [frontend.components.user.login :as login]
             [frontend.components.whiteboard :as whiteboard]
-            [frontend.components.assets :as assets]
             [frontend.config :as config]
             [frontend.context.i18n :refer [t]]
             [frontend.db :as db]
@@ -310,11 +310,11 @@
            :center?         true
            :close-backdrop? false} opts)))
 
-(defmethod events/handle :asset/dialog-edit-external-src [[_ asset-block pdf-current]]
+(defmethod events/handle :asset/dialog-edit-external-url [[_ asset-block pdf-current]]
   (shui/dialog-open!
-   (assets/edit-external-src-content asset-block pdf-current)
+   (assets/edit-external-url-content asset-block pdf-current)
    {:id :edit-external-asset-source-dialog
-    :title (str (if asset-block "Edit" "Create") " Asset ref block")
+    :title (str (if asset-block "Edit" "Create") " asset")
     :center? true}))
 
 (defn- enable-beta-features!

+ 9 - 1
src/main/frontend/worker/db/migrate.cljs

@@ -414,6 +414,13 @@
                  (when (:logseq.property/ui-position e)
                    [:db/retract (:e d) :logseq.property/ui-position]))))))
 
+(defn- rename-external-src-to-external-url
+  [db]
+  (let [f (rename-properties
+           {:logseq.property.asset/external-src :logseq.property.asset/external-url}
+           {})]
+    (f db)))
+
 (def schema-version->updates
   "A vec of tuples defining datascript migrations. Each tuple consists of the
    schema version integer and a migration map. A migration map can have keys of :properties, :classes
@@ -433,7 +440,8 @@
    ["65.12" {:fix remove-position-property-from-url-properties}]
    ["65.13" {:properties [:logseq.property.asset/width
                           :logseq.property.asset/height]}]
-   ["65.14" {:properties [:logseq.property.asset/external-src]}]])
+   ["65.14" {:properties [:logseq.property.asset/external-src]}]
+   ["65.15" {:fix rename-external-src-to-external-url}]])
 
 (let [[major minor] (last (sort (map (comp (juxt :major :minor) db-schema/parse-schema-version first)
                                      schema-version->updates)))]