diff --git a/src/main/frontend/commands.cljs b/src/main/frontend/commands.cljs
index 5fa06a34ad..20cab2e1d3 100644
--- a/src/main/frontend/commands.cljs
+++ b/src/main/frontend/commands.cljs
@@ -9,7 +9,6 @@
[frontend.handler.draw :as draw]
[frontend.handler.notification :as notification]
[frontend.handler.plugin :as plugin-handler]
- [frontend.handler.property :as property-handler]
[frontend.search :as search]
[frontend.state :as state]
[frontend.util :as util]
@@ -218,101 +217,104 @@
(defn commands-map
[get-page-ref-text]
- (->>
- (concat
+ (let [db? (config/db-based-graph? (state/get-current-repo))]
+ (->>
+ (concat
;; basic
- [["Page reference" [[:editor/input page-ref/left-and-right-brackets {:backward-pos 2}]
- [:editor/search-page]] "Create a backlink to a page"]
- ["Page embed" (embed-page) "Embed a page here"]
- ["Block reference" [[:editor/input block-ref/left-and-right-parens {:backward-pos 2}]
- [:editor/search-block :reference]] "Create a backlink to a block"]
- ["Block embed" (embed-block) "Embed a block here" "Embed a block here"]
- ["Link" (link-steps) "Create a HTTP link"]
- ["Image link" (image-link-steps) "Create a HTTP link to a image"]
- (when (state/markdown?)
- ["Underline" [[:editor/input ""
- {:last-pattern command-trigger
- :backward-pos 6}]] "Create a underline text decoration"])
- ["Template" [[:editor/input command-trigger nil]
- [:editor/search-template]] "Insert a created template here"]
- (cond
- (and (util/electron?) (config/local-file-based-graph? (state/get-current-repo)))
+ [["Page reference" [[:editor/input page-ref/left-and-right-brackets {:backward-pos 2}]
+ [:editor/search-page]] "Create a backlink to a page"]
+ ["Page embed" (embed-page) "Embed a page here"]
+ ["Block reference" [[:editor/input block-ref/left-and-right-parens {:backward-pos 2}]
+ [:editor/search-block :reference]] "Create a backlink to a block"]
+ ["Block embed" (embed-block) "Embed a block here" "Embed a block here"]
+ ["Link" (link-steps) "Create a HTTP link"]
+ ["Image link" (image-link-steps) "Create a HTTP link to a image"]
+ (when (state/markdown?)
+ ["Underline" [[:editor/input ""
+ {:last-pattern command-trigger
+ :backward-pos 6}]] "Create a underline text decoration"])
+ (when-not db?
+ ["Template" [[:editor/input command-trigger nil]
+ [:editor/search-template]] "Insert a created template here"])
+ (cond
+ (and (util/electron?) (config/local-file-based-graph? (state/get-current-repo)))
- ["Upload an asset" [[:editor/click-hidden-file-input :id]] "Upload file types like image, pdf, docx, etc.)"])]
+ ["Upload an asset" [[:editor/click-hidden-file-input :id]] "Upload file types like image, pdf, docx, etc.)"])]
;; ["Upload an image" [[:editor/click-hidden-file-input :id]]]
- (headings)
+ (headings)
;; time & date
- [["Tomorrow" #(get-page-ref-text (date/tomorrow)) "Insert the date of tomorrow"]
- ["Yesterday" #(get-page-ref-text (date/yesterday)) "Insert the date of yesterday"]
- ["Today" #(get-page-ref-text (date/today)) "Insert the date of today"]
- ["Current time" #(date/get-current-time) "Insert current time"]
- ["Date picker" [[:editor/show-date-picker]] "Pick a date and insert here"]]
+ [["Tomorrow" #(get-page-ref-text (date/tomorrow)) "Insert the date of tomorrow"]
+ ["Yesterday" #(get-page-ref-text (date/yesterday)) "Insert the date of yesterday"]
+ ["Today" #(get-page-ref-text (date/today)) "Insert the date of today"]
+ ["Current time" #(date/get-current-time) "Insert current time"]
+ ["Date picker" [[:editor/show-date-picker]] "Pick a date and insert here"]]
;; order list
- [["Number list" [[:editor/clear-current-slash]
- [:editor/toggle-own-number-list]] "Number list"]
- ["Number children" [[:editor/clear-current-slash]
- [:editor/toggle-children-number-list]] "Number children"]]
+ [["Number list" [[:editor/clear-current-slash]
+ [:editor/toggle-own-number-list]] "Number list"]
+ ["Number children" [[:editor/clear-current-slash]
+ [:editor/toggle-children-number-list]] "Number children"]]
;; task management
- (get-preferred-workflow)
- [["DONE" (->marker "DONE")]
- ["WAITING" (->marker "WAITING")]
- ["CANCELED" (->marker "CANCELED")]
- ["Deadline" [[:editor/clear-current-slash]
- [:editor/show-date-picker :deadline]]]
- ["Scheduled" [[:editor/clear-current-slash]
- [:editor/show-date-picker :scheduled]]]]
+ (get-preferred-workflow)
+ [["DONE" (->marker "DONE")]
+ ["WAITING" (->marker "WAITING")]
+ ["CANCELED" (->marker "CANCELED")]
+ ["Deadline" [[:editor/clear-current-slash]
+ [:editor/show-date-picker :deadline]]]
+ ["Scheduled" [[:editor/clear-current-slash]
+ [:editor/show-date-picker :scheduled]]]]
;; priority
- [["A" (->priority "A")]
- ["B" (->priority "B")]
- ["C" (->priority "C")]]
+ [["A" (->priority "A")]
+ ["B" (->priority "B")]
+ ["C" (->priority "C")]]
;; advanced
- [["Query" [[:editor/input "{{query }}" {:backward-pos 2}]
- [:editor/exit]] query-doc]
- ["Zotero" (zotero-steps) "Import Zotero journal article"]
- ["Query function" [[:editor/input "{{function }}" {:backward-pos 2}]] "Create a query function"]
- ["Calculator" [[:editor/input "```calc\n\n```" {:type "block"
- :backward-pos 4}]
- [:codemirror/focus]] "Insert a calculator"]
- ["Draw" (fn []
- (let [file (draw/file-name)
- path (str gp-config/default-draw-directory "/" file)
- text (page-ref/->page-ref path)]
- (p/let [_ (draw/create-draw-with-default-content path)]
- (println "draw file created, " path))
- text)) "Draw a graph with Excalidraw"]
- ["Embed HTML " (->inline "html")]
+ [["Query" [[:editor/input "{{query }}" {:backward-pos 2}]
+ [:editor/exit]] query-doc]
+ ["Zotero" (zotero-steps) "Import Zotero journal article"]
+ ["Query function" [[:editor/input "{{function }}" {:backward-pos 2}]] "Create a query function"]
+ ["Calculator" [[:editor/input "```calc\n\n```" {:type "block"
+ :backward-pos 4}]
+ [:codemirror/focus]] "Insert a calculator"]
+ ["Draw" (fn []
+ (let [file (draw/file-name)
+ path (str gp-config/default-draw-directory "/" file)
+ text (page-ref/->page-ref path)]
+ (p/let [_ (draw/create-draw-with-default-content path)]
+ (println "draw file created, " path))
+ text)) "Draw a graph with Excalidraw"]
+ ["Embed HTML " (->inline "html")]
- ["Embed Video URL" [[:editor/input "{{video }}" {:last-pattern command-trigger
- :backward-pos 2}]]]
+ ["Embed Video URL" [[:editor/input "{{video }}" {:last-pattern command-trigger
+ :backward-pos 2}]]]
- ["Embed Youtube timestamp" [[:youtube/insert-timestamp]]]
+ ["Embed Youtube timestamp" [[:youtube/insert-timestamp]]]
- ["Embed Twitter tweet" [[:editor/input "{{tweet }}" {:last-pattern command-trigger
- :backward-pos 2}]]]
- ["Add new property" [[:editor/clear-current-slash]
- [:editor/new-property]]]
+ ["Embed Twitter tweet" [[:editor/input "{{tweet }}" {:last-pattern command-trigger
+ :backward-pos 2}]]]
+ (when db?
+ ["Add new property" [[:editor/clear-current-slash]
+ [:editor/new-property]]])
- ["Code block" [[:editor/input "```\n```\n" {:type "block"
- :backward-pos 5
- :only-breakline? true}]
- [:editor/select-code-block-mode]] "Insert code block"]]
+ ["Code block" [[:editor/input "```\n```\n" {:type "block"
+ :backward-pos 5
+ :only-breakline? true}]
+ [:editor/select-code-block-mode]] "Insert code block"]]
- @*extend-slash-commands
+ @*extend-slash-commands
;; Allow user to modify or extend, should specify how to extend.
- (state/get-commands)
- (state/get-plugins-slash-commands))
- (remove nil?)
- (util/distinct-by-last-wins first)))
+ (state/get-commands)
+ (state/get-plugins-slash-commands))
+ (remove nil?)
+ (util/distinct-by-last-wins first))))
(defn init-commands!
[get-page-ref-text]
diff --git a/src/main/frontend/components/content.cljs b/src/main/frontend/components/content.cljs
index fbbc2581df..c413f0addd 100644
--- a/src/main/frontend/components/content.cljs
+++ b/src/main/frontend/components/content.cljs
@@ -174,11 +174,12 @@
(rum/defc ^:large-vars/cleanup-todo block-context-menu-content <
shortcut/disable-all-shortcuts
[_target block-id]
+ (let [repo (state/get-current-repo)
+ db? (config/db-based-graph? repo)]
(when-let [block (db/entity [:block/uuid block-id])]
(let [properties (:block/properties block)
heading (or (pu/lookup properties :heading)
- false)
- repo (state/get-current-repo)]
+ false)]
[:.menu-links-wrapper
(ui/menu-background-color #(property-handler/set-block-property! repo block-id :background-color %)
#(property-handler/remove-block-property! repo block-id :background-color))
@@ -243,7 +244,8 @@
[:hr.menu-separator]
- (block-template block-id)
+ (when-not db?
+ (block-template block-id))
(cond
(srs/card-block? block)
@@ -260,9 +262,9 @@
nil)
(ui/menu-link
- {:key "Toggle number list"
- :on-click #(state/pub-event! [:editor/toggle-own-number-list (state/get-selection-block-ids)])}
- (t :context-menu/toggle-number-list))
+ {:key "Toggle number list"
+ :on-click #(state/pub-event! [:editor/toggle-own-number-list (state/get-selection-block-ids)])}
+ (t :context-menu/toggle-number-list))
[:hr.menu-separator]
@@ -302,7 +304,7 @@
:on-click (fn []
(let [block (db/pull [:block/uuid block-id])]
(dev-common-handler/show-content-ast (:block/content block) (:block/format block))))}
- (t :dev/show-block-ast)))])))
+ (t :dev/show-block-ast)))]))))
(rum/defc block-ref-custom-context-menu-content
[block block-ref-id]
diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs
index a21e07adc4..1244356930 100644
--- a/src/main/frontend/handler/editor.cljs
+++ b/src/main/frontend/handler/editor.cljs
@@ -2053,67 +2053,69 @@
([element-id db-id]
(insert-template! element-id db-id {}))
([element-id db-id {:keys [target] :as opts}]
- (when-let [db-id (if (integer? db-id)
- db-id
- (:db/id (db-model/get-template-by-name (name db-id))))]
- (let [journal? (:block/journal? target)
- repo (state/get-current-repo)
- target (or target (state/get-edit-block))
- block (db/entity db-id)
- format (:block/format block)
- block-uuid (:block/uuid block)
- template-including-parent? (not (false? (:template-including-parent (:block/properties block))))
- blocks (db/get-block-and-children repo block-uuid)
- root-block (db/pull db-id)
- blocks-exclude-root (remove (fn [b] (= (:db/id b) db-id)) blocks)
- sorted-blocks (tree/sort-blocks blocks-exclude-root root-block)
- sorted-blocks (cons
- (-> (first sorted-blocks)
- (update :block/properties-text-values dissoc :template)
- (update :block/properties-order (fn [keys]
- (vec (remove #{:template} keys)))))
- (rest sorted-blocks))
- blocks (if template-including-parent?
- sorted-blocks
- (drop 1 sorted-blocks))]
- (when element-id
- (insert-command! element-id "" format {:end-pattern commands/command-trigger}))
- (let [exclude-properties [:id :template :template-including-parent]
- content-update-fn (fn [content]
- (->> content
- (file-property/remove-property-when-file-based repo format "template")
- (file-property/remove-property-when-file-based repo format "template-including-parent")
- template/resolve-dynamic-template!))
- page (if (:block/name block) block
- (when target (:block/page (db/entity (:db/id target)))))
- blocks' (map (fn [block]
- (paste-block-cleanup repo block page exclude-properties format content-update-fn false))
- blocks)
- sibling? (:sibling? opts)
- sibling?' (cond
- (some? sibling?)
- sibling?
+ (let [repo (state/get-current-repo)
+ db? (config/db-based-graph? repo)]
+ (when-not db?
+ (when-let [db-id (if (integer? db-id)
+ db-id
+ (:db/id (db-model/get-template-by-name (name db-id))))]
+ (let [journal? (:block/journal? target)
+ target (or target (state/get-edit-block))
+ block (db/entity db-id)
+ format (:block/format block)
+ block-uuid (:block/uuid block)
+ template-including-parent? (not (false? (:template-including-parent (:block/properties block))))
+ blocks (db/get-block-and-children repo block-uuid)
+ root-block (db/pull db-id)
+ blocks-exclude-root (remove (fn [b] (= (:db/id b) db-id)) blocks)
+ sorted-blocks (tree/sort-blocks blocks-exclude-root root-block)
+ sorted-blocks (cons
+ (-> (first sorted-blocks)
+ (update :block/properties-text-values dissoc :template)
+ (update :block/properties-order (fn [keys]
+ (vec (remove #{:template} keys)))))
+ (rest sorted-blocks))
+ blocks (if template-including-parent?
+ sorted-blocks
+ (drop 1 sorted-blocks))]
+ (when element-id
+ (insert-command! element-id "" format {:end-pattern commands/command-trigger}))
+ (let [exclude-properties [:id :template :template-including-parent]
+ content-update-fn (fn [content]
+ (->> content
+ (file-property/remove-property-when-file-based repo format "template")
+ (file-property/remove-property-when-file-based repo format "template-including-parent")
+ template/resolve-dynamic-template!))
+ page (if (:block/name block) block
+ (when target (:block/page (db/entity (:db/id target)))))
+ blocks' (map (fn [block]
+ (paste-block-cleanup repo block page exclude-properties format content-update-fn false))
+ blocks)
+ sibling? (:sibling? opts)
+ sibling?' (cond
+ (some? sibling?)
+ sibling?
- (db/has-children? (:block/uuid target))
- false
+ (db/has-children? (:block/uuid target))
+ false
- :else
- true)]
- (try
- (outliner-tx/transact!
- {:outliner-op :insert-blocks
- :created-from-journal-template? journal?}
- (save-current-block!)
- (let [result (outliner-core/insert-blocks! blocks'
- target
- (assoc opts
- :sibling? sibling?'))]
- (edit-last-block-after-inserted! result)))
- (catch :default ^js/Error e
- (notification/show!
- [:p.content
- (util/format "Template insert error: %s" (.-message e))]
- :error))))))))
+ :else
+ true)]
+ (try
+ (outliner-tx/transact!
+ {:outliner-op :insert-blocks
+ :created-from-journal-template? journal?}
+ (save-current-block!)
+ (let [result (outliner-core/insert-blocks! blocks'
+ target
+ (assoc opts
+ :sibling? sibling?'))]
+ (edit-last-block-after-inserted! result)))
+ (catch :default ^js/Error e
+ (notification/show!
+ [:p.content
+ (util/format "Template insert error: %s" (.-message e))]
+ :error))))))))))
(defn template-on-chosen-handler
[element-id]