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:
Tienson Qin
2021-05-19 14:55:19 +08:00
parent 57d0436a60
commit dbc643b85a
8 changed files with 103 additions and 22 deletions

View File

@@ -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

View File

@@ -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?

View File

@@ -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"

View File

@@ -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?))))

View File

@@ -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]

View File

@@ -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

View File

@@ -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))