fix(editor): auto-save should ignore time properties

pull/1018/head
Tienson Qin 2020-12-29 17:59:26 +08:00
parent 88a894ad93
commit 03439f0ab5
2 changed files with 17 additions and 9 deletions

View File

@ -405,10 +405,11 @@
(save-block-if-changed! block value nil)) (save-block-if-changed! block value nil))
([{:block/keys [uuid content meta file page dummy? format repo pre-block? content ref-pages ref-blocks] :as block} ([{:block/keys [uuid content meta file page dummy? format repo pre-block? content ref-pages ref-blocks] :as block}
value value
{:keys [indent-left? custom-properties remove-properties rebuild-content?] {:keys [indent-left? custom-properties remove-properties rebuild-content? auto-save?]
:or {rebuild-content? true :or {rebuild-content? true
custom-properties nil custom-properties nil
remove-properties nil}}] remove-properties nil
auto-save? false}}]
(let [value value (let [value value
repo (or repo (state/get-current-repo)) repo (or repo (state/get-current-repo))
e (db/entity repo [:block/uuid uuid]) e (db/entity repo [:block/uuid uuid])
@ -444,9 +445,13 @@
properties (if (and (seq properties) (seq remove-properties)) properties (if (and (seq properties) (seq remove-properties))
(medley/remove-keys (fn [k] (contains? (set remove-properties) k)) properties) (medley/remove-keys (fn [k] (contains? (set remove-properties) k)) properties)
properties) properties)
value (text/re-construct-block-properties value properties)] value (text/re-construct-block-properties value properties)
content-changed? (if auto-save?
(not= (text/remove-properties! (string/trim content))
(text/remove-properties! (string/trim value)))
(not= (string/trim content) (string/trim value)))]
(cond (cond
(not= (string/trim content) (string/trim value)) ; block content changed content-changed?
(let [file (db/entity repo (:db/id file))] (let [file (db/entity repo (:db/id file))]
(cond (cond
;; Page was referenced but no related file ;; Page was referenced but no related file
@ -1361,20 +1366,22 @@
(state/conj-selection-block! element up?)))))))) (state/conj-selection-block! element up?))))))))
(defn save-block-aux! (defn save-block-aux!
[block value format] [block value format opts]
(let [value (text/remove-level-spaces value format true) (let [value (text/remove-level-spaces value format true)
new-value (block/with-levels value format block) new-value (block/with-levels value format block)
properties (with-timetracking-properties block value)] properties (with-timetracking-properties block value)]
;; FIXME: somehow frontend.components.editor's will-unmount event will loop forever ;; FIXME: somehow frontend.components.editor's will-unmount event will loop forever
;; maybe we shouldn't save the block/file in "will-unmount" event? ;; maybe we shouldn't save the block/file in "will-unmount" event?
(save-block-if-changed! block new-value (save-block-if-changed! block new-value
{:custom-properties properties}))) (merge
{:custom-properties properties}
opts))))
(defn save-block! (defn save-block!
[{:keys [format block id repo dummy?] :as state} value] [{:keys [format block id repo dummy?] :as state} value]
(when (or (:db/id (db/entity repo [:block/uuid (:block/uuid block)])) (when (or (:db/id (db/entity repo [:block/uuid (:block/uuid block)]))
dummy?) dummy?)
(save-block-aux! block value format))) (save-block-aux! block value format {})))
(defn save-current-block-when-idle! (defn save-current-block-when-idle!
[] []
@ -1399,7 +1406,8 @@
(not= (string/trim db-content-without-heading) (not= (string/trim db-content-without-heading)
(string/trim value)))) (string/trim value))))
(let [cur-pos (util/get-input-pos elem)] (let [cur-pos (util/get-input-pos elem)]
(save-block-aux! db-block value (:block/format db-block)) (save-block-aux! db-block value (:block/format db-block)
{:auto-save? true})
;; Restore the cursor after saving the block ;; Restore the cursor after saving the block
(when (and elem cur-pos) (when (and elem cur-pos)
(util/set-caret-pos! elem cur-pos))))) (util/set-caret-pos! elem cur-pos)))))