From df87d047dcafed33a256dc6efff5fb0fb980083d Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 3 May 2021 18:20:00 +0800 Subject: [PATCH] fix: page-remove-property! --- src/main/frontend/db.cljs | 2 +- src/main/frontend/db/model.cljs | 15 ++++----- src/main/frontend/handler/page.cljs | 33 +++++++++++++++++--- src/main/frontend/modules/outliner/file.cljs | 2 +- 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/main/frontend/db.cljs b/src/main/frontend/db.cljs index 35438a94c..45bf11e7b 100644 --- a/src/main/frontend/db.cljs +++ b/src/main/frontend/db.cljs @@ -34,7 +34,7 @@ entity pull pull-many transact! get-key-value] [frontend.db.model - add-properties! block-and-children-transform blocks-count blocks-count-cache clean-export! cloned? delete-blocks + add-properties! block-and-children-transform blocks-count blocks-count-cache clean-export! cloned? delete-blocks get-pre-block delete-file! delete-file-blocks! delete-file-pages! delete-file-tx delete-files delete-pages-by-files filter-only-public-pages-and-blocks get-all-block-contents get-all-tagged-pages get-all-templates get-block-and-children get-block-by-uuid get-block-children sort-by-left diff --git a/src/main/frontend/db/model.cljs b/src/main/frontend/db/model.cljs index c58d31148..e4ce0c018 100644 --- a/src/main/frontend/db/model.cljs +++ b/src/main/frontend/db/model.cljs @@ -1276,13 +1276,14 @@ (defn get-pre-block [repo page-id] - (d/q '[:find (pull ?b [*]) - :in $ ?page - :where - [?b :block/page ?page] - [?b :block/pre-block? true]] - (conn/get-conn repo) - page-id)) + (-> (d/q '[:find (pull ?b [*]) + :in $ ?page + :where + [?b :block/page ?page] + [?b :block/pre-block? true]] + (conn/get-conn repo) + page-id) + ffirst)) (comment (def page-names ["foo" "bar"]) diff --git a/src/main/frontend/handler/page.cljs b/src/main/frontend/handler/page.cljs index 4d9a061e0..b02f3cf5d 100644 --- a/src/main/frontend/handler/page.cljs +++ b/src/main/frontend/handler/page.cljs @@ -85,12 +85,37 @@ (p/let [_ (create! page-name)] (page-add-properties! page-name properties))))) +(defn- remove-property-from-frontmatter-or-directives! + [content format k] + (let [k (name k) + lines (string/split-lines content) + prefix (case format + :org (str "#+" (string/upper-case k) ": ") + :markdown (str (string/lower-case k) ": ") + "") + lines (remove #(util/starts-with? % prefix) lines)] + (string/join "\n" lines))) + (defn page-remove-property! [page-name k] - (when-let [page (db/entity [:page/name (string/lower-case page-name)])] - (let [tx [{:db/id (:db/id page) - :block/properties (dissoc (:block/properties page) k)}]]) - )) + (when-let [page (db/entity [:block/name (string/lower-case page-name)])] + (let [repo (state/get-current-repo) + k (keyword k) + pre-block (db/get-pre-block repo (:db/id page)) + pre-block-tx (when pre-block + (let [{:block/keys [properties format content]} pre-block] + [{:db/id (:db/id pre-block) + :block/properties (dissoc properties k) + :block/content (-> (text/remove-property! format k content) + (remove-property-from-frontmatter-or-directives! format k))}])) + page-block-tx [{:db/id (:db/id page) + :block/properties (dissoc (:block/properties page) k)}] + txs (->> (concat pre-block-tx page-block-tx) + (remove nil?))] + (db/transact! txs) + (outliner-file/sync-to-file {:db/id (:db/id page)}) + (db/refresh! repo {:key :block/change + :data [pre-block]})))) (defn get-plugins [blocks] diff --git a/src/main/frontend/modules/outliner/file.cljs b/src/main/frontend/modules/outliner/file.cljs index b028b2e0a..4ae9e414c 100644 --- a/src/main/frontend/modules/outliner/file.cljs +++ b/src/main/frontend/modules/outliner/file.cljs @@ -35,7 +35,7 @@ (log/error :file/write-file-error {:error e}))))) (defn sync-to-file - [{page-db-id :db/id :as page-block}] + [{page-db-id :db/id}] (async/put! write-chan page-db-id)) (util/batch write-chan