mirror of
https://github.com/logseq/logseq.git
synced 2026-05-27 22:24:09 +00:00
feat: add old outdent behavior back
Related thread: https://discuss.logseq.com/t/whats-your-preferred-outdent-behavior-the-direct-one-or-the-logical-one/978
This commit is contained in:
@@ -537,7 +537,10 @@
|
||||
(->elem
|
||||
:span.block-ref
|
||||
(map-inline config title))))]
|
||||
(ui/tippy {:html (block-container config block)
|
||||
(ui/tippy {:html [:div.tippy-wrapper
|
||||
{:style {:width 780
|
||||
:text-align "left"}}
|
||||
(block-container config block)]
|
||||
:interactive true}
|
||||
(if label
|
||||
(->elem
|
||||
|
||||
@@ -134,6 +134,20 @@
|
||||
:on-click close-fn}
|
||||
"Cancel"]]]]))
|
||||
|
||||
(rum/defc outdenting-hint
|
||||
[]
|
||||
[:div
|
||||
[:blockquote
|
||||
[:ol
|
||||
[:li "Left (the default way to direct outdenting, unindent in place): it keeps the vertical position but can lead to mixed up categories (c becomes a sub-bullet of b)
|
||||
"]
|
||||
[:li "right (logical outdenting, unindent puts items at the bottom) : bullet vertical order is lost but categories are preserved, maybe better in terms of logic, but with longer lists, that also involves a lot of scrolling"]]]
|
||||
[:p "- Contributed by "
|
||||
[:a {:href "https://discuss.logseq.com/t/whats-your-preferred-outdent-behavior-the-direct-one-or-the-logical-one/978/7"}
|
||||
"@cannibalox"]]
|
||||
[:p "See more details at " [:a "https://discuss.logseq.com/t/whats-your-preferred-outdent-behavior-the-direct-one-or-the-logical-one/978"] "."]
|
||||
[:image {:src "https://discuss.logseq.com/uploads/default/original/1X/e8ea82f63a5e01f6d21b5da827927f538f3277b9.gif"}]])
|
||||
|
||||
(rum/defcs settings < rum/reactive
|
||||
[]
|
||||
(let [preferred-format (state/get-preferred-format)
|
||||
@@ -145,6 +159,7 @@
|
||||
enable-journals? (state/enable-journals? current-repo)
|
||||
enable-encryption? (state/enable-encryption? current-repo)
|
||||
sentry-disabled? (state/sub :sentry/disabled?)
|
||||
logical-outdenting? (state/logical-outdenting?)
|
||||
enable-git-auto-push? (state/enable-git-auto-push? current-repo)
|
||||
enable-block-time? (state/enable-block-time?)
|
||||
show-brackets? (state/show-brackets?)
|
||||
@@ -272,6 +287,15 @@
|
||||
"NOW/LATER"
|
||||
"TODO/DOING")])]]]]
|
||||
|
||||
(toggle "preffered_outdenting"
|
||||
(ui/tippy {:html (outdenting-hint)
|
||||
:interactive true
|
||||
:theme "customized"}
|
||||
(t :settings-page/preferred-outdenting))
|
||||
logical-outdenting?
|
||||
(fn []
|
||||
(config-handler/toggle-logical-outdenting!)))
|
||||
|
||||
(toggle "enable_timetracking"
|
||||
(t :settings-page/enable-timetracking)
|
||||
enable-timetracking?
|
||||
|
||||
@@ -203,6 +203,7 @@
|
||||
:settings-page/edit-config-edn "Edit config.edn (for current repo)"
|
||||
:settings-page/show-brackets "Show brackets"
|
||||
:settings-page/disable-sentry "Disable Sentry.io (for error tracking)"
|
||||
:settings-page/preferred-outdenting "Enable logical outdenting"
|
||||
:settings-page/custom-date-format "Preferred journal format"
|
||||
:settings-page/preferred-file-format "Preferred file format"
|
||||
:settings-page/preferred-workflow "Preferred workflow"
|
||||
|
||||
@@ -12,3 +12,7 @@
|
||||
(defn toggle-ui-show-brackets! []
|
||||
(let [show-brackets? (state/show-brackets?)]
|
||||
(set-config! :ui/show-brackets? (not show-brackets?))))
|
||||
|
||||
(defn toggle-logical-outdenting! []
|
||||
(let [logical-outdenting? (state/logical-outdenting?)]
|
||||
(set-config! :editor/logical-outdenting? (not logical-outdenting?))))
|
||||
|
||||
@@ -478,10 +478,32 @@
|
||||
[node]
|
||||
(nil? (tree/-get-parent (tree/-get-parent node))))
|
||||
|
||||
(defn get-right-siblings
|
||||
[node]
|
||||
{:pre [(tree/satisfied-inode? node)]}
|
||||
(when-let [parent (tree/-get-parent node)]
|
||||
(let [children (tree/-get-children parent)]
|
||||
(->> (split-with #(not= (tree/-get-id node) (tree/-get-id %)) children)
|
||||
last
|
||||
rest))))
|
||||
|
||||
(defn- logical-outdenting
|
||||
[txs-state parent nodes first-node last-node last-node-right parent-parent-id parent-right]
|
||||
(some-> last-node-right
|
||||
(tree/-set-left-id (tree/-get-left-id first-node))
|
||||
(tree/-save txs-state))
|
||||
(let [first-node (tree/-set-left-id first-node (tree/-get-id parent))]
|
||||
(doseq [node (cons first-node (rest nodes))]
|
||||
(-> (tree/-set-parent-id node parent-parent-id)
|
||||
(tree/-save txs-state))))
|
||||
(some-> parent-right
|
||||
(tree/-set-left-id (tree/-get-id last-node))
|
||||
(tree/-save txs-state)))
|
||||
|
||||
(defn indent-outdent-nodes
|
||||
[nodes indent?]
|
||||
(ds/auto-transact!
|
||||
[txs-state (ds/new-outliner-txs-state)] {:outliner-op :indent-outdent-nodes}
|
||||
[txs-state (ds/new-outliner-txs-state)] {:outliner-op :indent-outdent-nodes}
|
||||
(let [first-node (first nodes)
|
||||
last-node (last nodes)]
|
||||
(if indent?
|
||||
@@ -489,33 +511,41 @@
|
||||
(let [first-node-left-id (tree/-get-left-id first-node)
|
||||
last-node-right (tree/-get-right last-node)
|
||||
parent-or-last-child-id (or (-> (db/get-block-immediate-children (state/get-current-repo)
|
||||
first-node-left-id)
|
||||
last
|
||||
:block/uuid)
|
||||
first-node-left-id)
|
||||
first-node-left-id)
|
||||
last
|
||||
:block/uuid)
|
||||
first-node-left-id)
|
||||
first-node (tree/-set-left-id first-node parent-or-last-child-id)]
|
||||
(doseq [node (cons first-node (rest nodes))]
|
||||
(-> (tree/-set-parent-id node first-node-left-id)
|
||||
(tree/-save txs-state)))
|
||||
(tree/-save txs-state)))
|
||||
(some-> last-node-right
|
||||
(tree/-set-left-id first-node-left-id)
|
||||
(tree/-save txs-state))))
|
||||
(tree/-set-left-id first-node-left-id)
|
||||
(tree/-save txs-state))))
|
||||
(when-not (first-level? first-node)
|
||||
(let [parent (tree/-get-parent first-node)
|
||||
parent-parent-id (tree/-get-parent-id parent)
|
||||
parent-right (tree/-get-right parent)
|
||||
last-node-right (tree/-get-right last-node)]
|
||||
(some-> last-node-right
|
||||
(tree/-set-left-id (tree/-get-left-id first-node))
|
||||
(tree/-save txs-state))
|
||||
(let [first-node (tree/-set-left-id first-node (tree/-get-id parent))]
|
||||
(doseq [node (cons first-node (rest nodes))]
|
||||
(-> (tree/-set-parent-id node parent-parent-id)
|
||||
(tree/-save txs-state))))
|
||||
(some-> parent-right
|
||||
(tree/-set-left-id (tree/-get-id last-node))
|
||||
(tree/-save txs-state))))))))
|
||||
|
||||
last-node-right (tree/-get-right last-node)
|
||||
last-node-id (tree/-get-id last-node)]
|
||||
(logical-outdenting txs-state parent nodes first-node last-node last-node-right parent-parent-id parent-right)
|
||||
(when-not (state/logical-outdenting?)
|
||||
;; direct outdenting (the old behavior)
|
||||
(let [right-siblings (get-right-siblings last-node)
|
||||
right-siblings (doall
|
||||
(map (fn [sibling right-siblings]
|
||||
(some->
|
||||
(tree/-set-parent-id sibling last-node-id)
|
||||
(tree/-save txs-state)))
|
||||
right-siblings))]
|
||||
(when-let [last-node-right (first right-siblings)]
|
||||
(let [last-node-children (tree/-get-children last-node)
|
||||
left-id (if (seq last-node-children)
|
||||
(tree/-get-id (last last-node-children))
|
||||
last-node-id)]
|
||||
(when left-id
|
||||
(some-> (tree/-set-left-id last-node-right left-id)
|
||||
(tree/-save txs-state)))))))))))))
|
||||
|
||||
(defn- set-nodes-page&file-aux
|
||||
[node page file txs-state]
|
||||
|
||||
@@ -235,6 +235,10 @@
|
||||
{:desc "Toggle whether to display brackets"
|
||||
:binding "mod+c mod+b"
|
||||
:fn config-handler/toggle-ui-show-brackets!}
|
||||
:editor/toggle-outdenting
|
||||
{:desc "Toggle outdenting behavior"
|
||||
:binding "mod+c mod+o"
|
||||
:fn config-handler/toggle-logical-outdenting!}
|
||||
:go/search-in-page
|
||||
{:desc "Search in the current page"
|
||||
:binding "mod+shift+u"
|
||||
@@ -387,6 +391,7 @@
|
||||
[:ui/toggle-help
|
||||
:ui/toggle-new-block
|
||||
:ui/toggle-wide-mode
|
||||
:editor/toggle-outdenting
|
||||
:ui/toggle-document-mode
|
||||
:ui/toggle-brackets
|
||||
:ui/toggle-theme
|
||||
|
||||
@@ -86,6 +86,7 @@
|
||||
:editor/last-input-time nil
|
||||
:editor/new-block-toggle? false
|
||||
:editor/args nil
|
||||
:editor/logical-outdenting? false
|
||||
:db/last-transact-time {}
|
||||
:db/last-persist-transact-ids {}
|
||||
;; whether database is persisted
|
||||
@@ -1227,6 +1228,11 @@
|
||||
(when value
|
||||
(.close js/window.Sentry)))
|
||||
|
||||
(defn logical-outdenting?
|
||||
[]
|
||||
(:editor/logical-outdenting?
|
||||
(get (sub-config) (get-current-repo))))
|
||||
|
||||
(defn get-editor-args
|
||||
[]
|
||||
(:editor/args @state))
|
||||
|
||||
Reference in New Issue
Block a user