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

fix(editor): properties not working well when enter at the start

Related to #1017
Tienson Qin 5 лет назад
Родитель
Сommit
4f67387d85
3 измененных файлов с 37 добавлено и 15 удалено
  1. 34 12
      src/main/frontend/handler/editor.cljs
  2. 2 2
      src/main/frontend/text.cljs
  3. 1 1
      src/main/frontend/version.cljs

+ 34 - 12
src/main/frontend/handler/editor.cljs

@@ -614,7 +614,7 @@
        nil))))
 
 (defn insert-new-block-aux!
-  [{:block/keys [uuid content meta file dummy? level repo page format properties collapsed?] :as block}
+  [{:block/keys [uuid content meta file dummy? level repo page format properties collapsed? pre-block?] :as block}
    value
    {:keys [create-new-block? ok-handler with-level? new-level current-page blocks-container-id]}]
   (let [value (or value "")
@@ -654,10 +654,18 @@
                        (let [value (if create-new-block?
                                      (str fst-block-text "\n" snd-block-text)
                                      value)
-                             text-properties (text/extract-properties fst-block-text)
-                             value (if (zero? pos)
-                                     value
-                                     (block-text-with-time block format value text-properties))
+                             snd-block-text (text/remove-id-property snd-block-text)
+                             text-properties (if (zero? pos)
+                                               {}
+                                               (text/extract-properties fst-block-text))
+                             old-hidden-properties (select-keys (:block/properties block) text/hidden-properties)
+                             properties (merge old-hidden-properties
+                                               text-properties)
+                             value (if create-new-block?
+                                     (str
+                                      (block-text-with-time block format fst-block-text properties)
+                                      snd-block-text)
+                                     (block-text-with-time block format value properties))
                              value (rebuild-block-content value format)
                              [new-content value] (new-file-content block file-content value)
                              parse-result (block/parse-block (assoc block :block/content value) format)
@@ -672,10 +680,22 @@
                                parse-result)
                              after-blocks (rebuild-after-blocks repo file (:end-pos meta) end-pos)
                              files [[file-path new-content]]
+                             block-retracted-attrs (when-not pre-block?
+                                                     ;; TODO: should we retract the whole block instead?
+                                                     (when-let [id (:db/id block)]
+                                                       [[:db/retract id :block/properties]
+                                                        [:db/retract id :block/priority]
+                                                        [:db/retract id :block/deadline]
+                                                        [:db/retract id :block/deadline-ast]
+                                                        [:db/retract id :block/scheduled]
+                                                        [:db/retract id :block/scheduled-ast]
+                                                        [:db/retract id :block/marker]
+                                                        [:db/retract id :block/repeated?]]))
                              transact-fn (fn []
                                            (repo-handler/transact-react-and-alter-file!
                                             repo
                                             (concat
+                                             block-retracted-attrs
                                              pages
                                              (mapv (fn [b] {:block/uuid (:block/uuid b)}) blocks)
                                              blocks
@@ -812,13 +832,15 @@
 (defn- with-timetracking-properties
   [block value]
   (let [new-marker (first (re-find format/bare-marker-pattern (or value "")))
-        new-marker (if new-marker (string/lower-case (string/trim new-marker)))]
-    (if (and
-         new-marker
-         (not= new-marker (string/lower-case (or (:block/marker block) "")))
-         (state/enable-timetracking?))
-      {new-marker (util/time-ms)}
-      {})))
+        new-marker (if new-marker (string/lower-case (string/trim new-marker)))
+        time-properties (if (and
+                             new-marker
+                             (not= new-marker (string/lower-case (or (:block/marker block) "")))
+                             (state/enable-timetracking?))
+                          {new-marker (util/time-ms)}
+                          {})]
+    (merge (:block/properties block)
+           time-properties)))
 
 (defn insert-new-block!
   [state]

+ 2 - 2
src/main/frontend/text.cljs

@@ -50,7 +50,7 @@
   [text format]
   (if-not (string/blank? text)
     (let [pattern (util/format
-                   "^[%s]+\\s+"
+                   "^[%s]+\\s?"
                    (config/get-block-pattern format))]
       (re-find (re-pattern pattern) text))
     ""))
@@ -199,7 +199,7 @@
   (let [format (keyword format)
         level-spaces (extract-level-spaces content format)
         result (-> content
-                   (remove-level-spaces format true)
+                   (remove-level-spaces format)
                    (remove-properties!)
                    (rejoin-properties properties {:block-with-title? block-with-title?}))]
     (str (when level-spaces (string/trim-newline level-spaces))

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

@@ -1,3 +1,3 @@
 (ns frontend.version)
 
-(defonce version "0.0.4.9-14")
+(defonce version "0.0.4.9-15")