Browse Source

Merge pull request #4382 from logseq/fix-wrong-logbook-creation

fix: wrong logbook creation
Gabriel Horner 3 years ago
parent
commit
174f3d40a8

+ 1 - 1
src/main/frontend/commands.cljs

@@ -554,7 +554,7 @@
                     (count (util/safe-re-find re-pattern prefix))))
             new-value (str (subs edit-content 0 pos)
                            (string/replace-first (subs edit-content pos)
-                                                 marker/marker-pattern
+                                                 (marker/marker-pattern format)
                                                  (str marker " ")))]
         (state/set-edit-content! input-id new-value)
         (let [new-pos (compute-pos-delta-when-change-marker

+ 11 - 4
src/main/frontend/handler/editor.cljs

@@ -339,8 +339,9 @@
   [block value]
   (if (and (state/enable-timetracking?)
            (not= (:block/content block) value))
-    (let [new-marker (first (util/safe-re-find marker/bare-marker-pattern (or value "")))
-          new-value (with-marker-time value block (:block/format block)
+    (let [format (:block/format block)
+          new-marker (last (util/safe-re-find (marker/marker-pattern format) (or value "")))
+          new-value (with-marker-time value block format
                       new-marker
                       (:block/marker block))]
       new-value)
@@ -789,8 +790,14 @@
       (save-block-if-changed! block new-content))))
 
 (defn set-marker
-  [{:block/keys [marker content] :as block} new-marker]
-  (let [new-content (->
+  [{:block/keys [marker content format] :as block} new-marker]
+  (let [old-header-marker (when (not= format :org)
+                            (re-find (marker/header-marker-pattern true marker) content))
+        new-header-marker (when old-header-marker
+                            (string/replace old-header-marker marker new-marker))
+        marker (or old-header-marker marker)
+        new-marker (or new-header-marker new-marker)
+        new-content (->
                      (if marker
                        (string/replace-first content (re-pattern (str "^" marker)) new-marker)
                        (str new-marker " " content))

+ 5 - 4
src/main/frontend/util/marker.cljs

@@ -2,13 +2,14 @@
   (:require [clojure.string :as string]
             [frontend.util :as util]))
 
-(def marker-pattern
-  #"^(NOW|LATER|TODO|DOING|DONE|WAITING|WAIT|CANCELED|CANCELLED|STARTED|IN-PROGRESS)?\s?")
+(defn marker-pattern [format]
+  (re-pattern
+   (str "^" (when-not (= format :org) "(#*\\s*)?")
+        "(NOW|LATER|TODO|DOING|DONE|WAITING|WAIT|CANCELED|CANCELLED|STARTED|IN-PROGRESS)?\\s?")))
 
 (def bare-marker-pattern
   #"(NOW|LATER|TODO|DOING|DONE|WAITING|WAIT|CANCELED|CANCELLED|STARTED|IN-PROGRESS){1}\s+")
 
-
 (defn add-or-update-marker
   [content format marker]
   (let [[re-pattern new-line-re-pattern]
@@ -23,7 +24,7 @@
         new-content
         (str (subs content 0 pos)
              (string/replace-first (subs content pos)
-                                   marker-pattern
+                                   (marker-pattern format)
                                    (str marker " ")))]
     new-content))
 

+ 29 - 1
src/test/frontend/util/marker_test.cljs

@@ -1,6 +1,7 @@
 (ns frontend.util.marker-test
   (:require [cljs.test :refer [are deftest]]
-            [frontend.util.marker :as marker]))
+            [frontend.util.marker :as marker]
+            [clojure.string :as string]))
 
 (deftest add-or-update-marker-markdown
   (are [content marker expect] (= expect (marker/add-or-update-marker content :markdown marker))
@@ -23,4 +24,31 @@
     "TODO xxx" "DONE" "DONE xxx"
     "TODO" "DONE" "DONE "))
 
+(defn set-marker
+  [marker content format new-marker]
+  (let [old-header-marker (when (not= format :org)
+                            (re-find (marker/header-marker-pattern true marker) content))
+        new-header-marker (when old-header-marker
+                            (string/replace old-header-marker marker new-marker))
+        marker (or old-header-marker marker)
+        new-marker (or new-header-marker new-marker)
+        new-content (->
+                     (if marker
+                       (string/replace-first content (re-pattern (str "^" marker)) new-marker)
+                       (str new-marker " " content))
+                     (string/triml))]
+    new-content))
+
+(deftest set-marker-org
+  (are [marker content new-marker expect] (= expect (set-marker marker content :org new-marker))
+    "TODO" "TODO content" "DOING" "DOING content"
+    "TODO" "## TODO content" "DOING" "## TODO content"
+    "DONE" "DONE content" "" "content"))
+
+(deftest set-marker-markdown
+  (are [marker content new-marker expect] (= expect (set-marker marker content :markdown new-marker))
+    "TODO" "TODO content" "DOING" "DOING content"
+    "TODO" "## TODO content" "DOING" "## DOING content"
+    "DONE" "DONE content" "" "content"))
+
 #_(cljs.test/run-tests)