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

fix: safe check dom id before rendering code blocks

Tienson Qin 5 лет назад
Родитель
Сommit
08c64ec165
1 измененных файлов с 26 добавлено и 24 удалено
  1. 26 24
      src/main/frontend/extensions/code.cljs

+ 26 - 24
src/main/frontend/extensions/code.cljs

@@ -91,30 +91,32 @@
         lisp? (or clojure?
                   (contains? #{"scheme" "racket" "lisp"} mode))
         textarea (gdom/getElement id)
-        editor (from-textarea textarea
-                              #js {:mode mode
-                                   :matchBrackets lisp?
-                                   :autoCloseBrackets true
-                                   :lineNumbers true
-                                   :extraKeys #js {"Esc" (fn [cm]
-                                                           (let [save! #(save-file-or-block-when-blur-or-esc! cm textarea config state)]
-                                                             (if-let [block-id (:block/uuid config)]
-                                                               (let [block (db/pull [:block/uuid block-id])
-                                                                     value (.getValue cm)
-                                                                     textarea-value (gobj/get textarea "value")
-                                                                     changed? (not= value textarea-value)]
-                                                                 (if changed?
-                                                                   (save!)
-                                                                   (editor-handler/edit-block! block :max (:block/format block) block-id)))
-                                                               (save!))))}})]
-    (let [element (.getWrapperElement editor)]
-      (.on editor "blur" (fn []
-                           (save-file-or-block-when-blur-or-esc! editor textarea config state)))
-      (.addEventListener element "click"
-                         (fn [e]
-                           (util/stop e)))
-      (.save editor)
-      (.refresh editor))
+        editor (when textarea
+                 (from-textarea textarea
+                                #js {:mode mode
+                                     :matchBrackets lisp?
+                                     :autoCloseBrackets true
+                                     :lineNumbers true
+                                     :extraKeys #js {"Esc" (fn [cm]
+                                                             (let [save! #(save-file-or-block-when-blur-or-esc! cm textarea config state)]
+                                                               (if-let [block-id (:block/uuid config)]
+                                                                 (let [block (db/pull [:block/uuid block-id])
+                                                                       value (.getValue cm)
+                                                                       textarea-value (gobj/get textarea "value")
+                                                                       changed? (not= value textarea-value)]
+                                                                   (if changed?
+                                                                     (save!)
+                                                                     (editor-handler/edit-block! block :max (:block/format block) block-id)))
+                                                                 (save!))))}}))]
+    (when editor
+      (let [element (.getWrapperElement editor)]
+        (.on editor "blur" (fn []
+                             (save-file-or-block-when-blur-or-esc! editor textarea config state)))
+        (.addEventListener element "click"
+                           (fn [e]
+                             (util/stop e)))
+        (.save editor)
+        (.refresh editor)))
     editor))
 
 (defn- load-and-render!