Просмотр исходного кода

enhance(plugin): more args extensible for the exported editor component

charlie 1 год назад
Родитель
Сommit
85585a0815
3 измененных файлов с 38 добавлено и 14 удалено
  1. 15 9
      src/main/frontend/components/block.cljs
  2. 1 0
      src/main/logseq/api.cljs
  3. 22 5
      src/main/logseq/sdk/experiments.cljs

+ 15 - 9
src/main/frontend/components/block.cljs

@@ -1814,11 +1814,14 @@
                        (state/toggle-collapsed-block! uuid)
                        (state/toggle-collapsed-block! uuid)
                        (if collapsed?
                        (if collapsed?
                          (editor-handler/expand-block! uuid)
                          (editor-handler/expand-block! uuid)
-                         (editor-handler/collapse-block! uuid))))}
+                         (editor-handler/collapse-block! uuid)))
+                     ;; debug config context
+                     (when (and (state/developer-mode?) (.-metaKey event))
+                       (js/console.debug "[block config]==" config)))}
         [:span {:class (if (or (and control-show?
         [:span {:class (if (or (and control-show?
-                                    (or collapsed?
-                                        (editor-handler/collapsable? uuid {:semantic? true})))
-                               (and collapsed? (or order-list? config/publishing?)))
+                                 (or collapsed?
+                                   (editor-handler/collapsable? uuid {:semantic? true})))
+                             (and collapsed? (or order-list? config/publishing?)))
                          "control-show cursor-pointer"
                          "control-show cursor-pointer"
                          "control-hide")}
                          "control-hide")}
          (ui/rotating-arrow collapsed?)]])
          (ui/rotating-arrow collapsed?)]])
@@ -2545,9 +2548,12 @@
                                                    (p/do!
                                                    (p/do!
                                                     (state/set-editor-op! :escape)
                                                     (state/set-editor-op! :escape)
                                                     (editor-handler/save-block! (editor-handler/get-state) value)
                                                     (editor-handler/save-block! (editor-handler/get-state) value)
-                                                    (js/setTimeout #(editor-handler/escape-editing select?) 10))))}
-                                     edit-input-id
-                                     config))]
+                                                    (js/setTimeout (fn []
+                                                                     (editor-handler/escape-editing select?)
+                                                                     (some-> config :on-escape-editing
+                                                                       (apply []))) 10))))}
+                           edit-input-id
+                           config))]
           [:div.flex.flex-1.flex-row.gap-1.items-start
           [:div.flex.flex-1.flex-row.gap-1.items-start
            editor-cp
            editor-cp
            (when (and (seq (:block/tags block)) db-based?)
            (when (and (seq (:block/tags block)) db-based?)
@@ -2559,8 +2565,8 @@
           [:div.flex.flex-row
           [:div.flex.flex-row
            [:div.flex-1.w-full {:style {:display (if (:slide? config) "block" "flex")}}
            [:div.flex-1.w-full {:style {:display (if (:slide? config) "block" "flex")}}
             (ui/catch-error
             (ui/catch-error
-             (ui/block-error "Block Render Error:"
-                             {:content (:block/content block)
+              (ui/block-error "Block Render Error:"
+                {:content (:block/content block)
                               :section-attrs
                               :section-attrs
                               {:on-click #(let [content (or (:block/original-name block)
                               {:on-click #(let [content (or (:block/original-name block)
                                                             (:block/content block))]
                                                             (:block/content block))]

+ 1 - 0
src/main/logseq/api.cljs

@@ -86,6 +86,7 @@
                      (subs % 1)
                      (subs % 1)
                      (keyword %)))
                      (keyword %)))
              (get-in @state/state)
              (get-in @state/state)
+             (#(if (util/atom? %) @% %))
              (sdk-utils/normalize-keyword-for-json)
              (sdk-utils/normalize-keyword-for-json)
              (bean/->js))))
              (bean/->js))))
 
 

+ 22 - 5
src/main/logseq/sdk/experiments.cljs

@@ -1,14 +1,31 @@
 (ns logseq.sdk.experiments
 (ns logseq.sdk.experiments
-  (:require [frontend.state :as state]
+  (:require [cljs-bean.core :as bean]
+            [frontend.state :as state]
             [frontend.components.page :as page]
             [frontend.components.page :as page]
             [frontend.util :as util]
             [frontend.util :as util]
+            [camel-snake-kebab.core :as csk]
+            [goog.object :as gobj]
             [frontend.handler.plugin :as plugin-handler]))
             [frontend.handler.plugin :as plugin-handler]))
 
 
+(defn- jsx->clj
+  [^js obj]
+  (if (goog.isObject obj)
+    (-> (fn [result k]
+          (let [v (gobj/get obj k)
+                k (keyword (csk/->kebab-case k))]
+            (if (= "function" (goog/typeOf v))
+              (assoc result k v)
+              (assoc result k (jsx->clj v)))))
+      (reduce {} (gobj/getKeys obj)))
+    obj))
+
 (defn ^:export cp_page_editor
 (defn ^:export cp_page_editor
   [^js props]
   [^js props]
-  (let [p (some-> props (aget "page"))]
-    (when-let [e (page/get-page-entity p)]
-      (page/page-blocks-cp (state/get-current-repo) e {}))))
+  (let [props1 (jsx->clj props)
+        name (some-> props1 :page)
+        config (some-> props1 (dissoc :page))]
+    (when-let [entity (page/get-page-entity name)]
+      (page/page-blocks-cp (state/get-current-repo) entity config))))
 
 
 (defn ^:export register_fenced_code_renderer
 (defn ^:export register_fenced_code_renderer
   [pid type ^js opts]
   [pid type ^js opts]
@@ -34,7 +51,7 @@
   (when-let [^js _pl (plugin-handler/get-plugin-inst pid)]
   (when-let [^js _pl (plugin-handler/get-plugin-inst pid)]
     (plugin-handler/register-daemon-renderer
     (plugin-handler/register-daemon-renderer
       (keyword pid) key (reduce #(assoc %1 %2 (aget opts (name %2))) {}
       (keyword pid) key (reduce #(assoc %1 %2 (aget opts (name %2))) {}
-                           [:before :subs :render]))))
+                          [:before :subs :render]))))
 
 
 (defn ^:export register_extensions_enhancer
 (defn ^:export register_extensions_enhancer
   [pid type enhancer]
   [pid type enhancer]