Sfoglia il codice sorgente

enhance(editor): better check list toggle handling

Andelf 1 anno fa
parent
commit
ce56e78133

+ 2 - 4
src/main/frontend/components/block.cljs

@@ -1855,10 +1855,8 @@
     :on-change (fn [event]
     :on-change (fn [event]
                  (let [target (.-target event)
                  (let [target (.-target event)
                        block (:block config)
                        block (:block config)
-                       item-content (.. target -nextSibling -data)
-                       item-full-content (str (if checked? "[X]" "[ ]") " " item-content)
-                       new-item-full-content (str (if checked? "[ ]" "[X]") " " item-content)]
-                   (editor-handler/toggle-list-checkbox block item-full-content new-item-full-content)))}))
+                       item-content (.. target -nextSibling -data)]
+                   (editor-handler/toggle-list-checkbox block item-content)))}))
 
 
 (defn marker-switch
 (defn marker-switch
   [{:block/keys [marker] :as block}]
   [{:block/keys [marker] :as block}]

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

@@ -47,6 +47,7 @@
             [goog.dom.classes :as gdom-classes]
             [goog.dom.classes :as gdom-classes]
             [goog.object :as gobj]
             [goog.object :as gobj]
             [goog.crypt.base64 :as base64]
             [goog.crypt.base64 :as base64]
+            [goog.string :as gstring]
             [lambdaisland.glogi :as log]
             [lambdaisland.glogi :as log]
             [logseq.db.schema :as db-schema]
             [logseq.db.schema :as db-schema]
             [logseq.graph-parser.block :as gp-block]
             [logseq.graph-parser.block :as gp-block]
@@ -2341,14 +2342,15 @@
             (insert "\n")))))))
             (insert "\n")))))))
 
 
 (defn toggle-list-checkbox
 (defn toggle-list-checkbox
-  [{:block/keys [content] :as block} old-item-content new-item-content]
-  (let [update-content #(string/replace-first content % new-item-content)
-        new-content (update-content old-item-content)]
-    (save-block-if-changed!
-      block
-      (if (= new-content content)
-        (update-content (string/replace-first old-item-content "[X]" "[x]"))
-        new-content))))
+  [{:block/keys [content] :as block} item-content]
+  (let [toggle-fn (fn [m x-mark]
+                    (case (string/lower-case x-mark)
+                      "[ ]" (str "[x] " item-content)
+                      "[x]" (str "[ ] " item-content)
+                      m))
+        pattern (re-pattern (str "(\\[[xX ]\\])\\s+?" (gstring/regExpEscape item-content)))
+        new-content (string/replace-first content pattern toggle-fn)]
+    (save-block-if-changed! block new-content)))
 
 
 (defn- dwim-in-list
 (defn- dwim-in-list
   []
   []