فهرست منبع

fix(plugin): extension hooks

charlie 1 سال پیش
والد
کامیت
136325af25

+ 2 - 2
src/main/frontend/components/lazy_editor.cljs

@@ -5,7 +5,7 @@
             [frontend.ui :as ui]
             [frontend.config :as config]
             [frontend.state :as state]
-            [frontend.handler.plugin :refer [hook-extensions-enhancer-by-key]]
+            [frontend.handler.plugin :refer [hook-extensions-enhancers-by-key]]
             [promesa.core :as p]))
 
 ;; TODO: Why does shadow fail when code is required
@@ -23,7 +23,7 @@
                   (if-not @loaded?
                     (p/finally
                      (p/all (when-let [enhancers (and config/lsp-enabled?
-                                                      (seq (hook-extensions-enhancer-by-key :codemirror)))]
+                                                      (seq (hook-extensions-enhancers-by-key :codemirror)))]
                               (for [{f :enhancer} enhancers]
                                 (when (fn? f) (f (. js/window -CodeMirror))))))
                      (fn []

+ 9 - 8
src/main/frontend/extensions/latex.cljs

@@ -4,7 +4,7 @@
             [frontend.ui :as ui]
             [frontend.config :as config]
             [frontend.util :as util]
-            [frontend.handler.plugin :refer [hook-extensions-enhancer-by-key] :as plugin-handler]
+            [frontend.handler.plugin :refer [hook-extensions-enhancers-by-key] :as plugin-handler]
             [promesa.core :as p]
             [goog.dom :as gdom]))
 
@@ -41,13 +41,14 @@
          (loader/load
           (config/asset-uri "/static/js/mhchem.min.js")
           (fn []
-            (p/finally
-              (p/all (when-let [enhancers (and config/lsp-enabled? (seq (hook-extensions-enhancer-by-key :katex)))]
-                       (for [{f :enhancer} enhancers]
-                         (when (fn? f) (f js/window.katex)))))
-              (fn []
-                (reset! *loading? false)
-                (render! state))))))
+            (some-> (when-let [enhancers (and config/lsp-enabled?
+                                           (seq (hook-extensions-enhancers-by-key :katex)))]
+                      (for [{f :enhancer} enhancers]
+                        (when (fn? f) (f js/window.katex))))
+              (p/all)
+              (p/finally (fn []
+                           (reset! *loading? false)
+                           (render! state)))))))
        state))))
 
 (defn- state-&-load-and-render!

+ 6 - 7
src/main/frontend/handler/plugin.cljs

@@ -402,12 +402,9 @@
   ([type *providers] (create-local-renderer-getter type *providers false))
   ([type *providers many?]
    (fn [key]
-     (when-let [key (or many? (and (seq @*providers) key (keyword key)))]
+     (when-let [key (and (seq @*providers) key (keyword key))]
        (when-let [rs (->> @*providers
-                       (map #(if many?
-                               (some-> (state/get-plugin-resources-with-type % type)
-                                 (vals))
-                               (state/get-plugin-resource % type key)))
+                       (map (fn [pid] (state/get-plugin-resource pid type key)))
                        (remove nil?)
                        (flatten)
                        (seq))]
@@ -425,11 +422,13 @@
 
 (def *extensions-enhancer-providers (atom #{}))
 (def register-extensions-enhancer
+  ;; a plugin can only register one enhancer for a type
   (create-local-renderer-register
     :extensions-enhancers *extensions-enhancer-providers))
-(def hook-extensions-enhancer-by-key
+(def hook-extensions-enhancers-by-key
+  ;; multiple plug-ins can obtain more than one enhancer
   (create-local-renderer-getter
-    :extensions-enhancers *extensions-enhancer-providers))
+    :extensions-enhancers *extensions-enhancer-providers true))
 
 (def *route-renderer-providers (atom #{}))
 (def register-route-renderer