mirror of https://github.com/logseq/logseq
enhance: delete move-node
parent
bcabb49cc8
commit
29a96a7f3e
|
@ -2118,18 +2118,15 @@
|
|||
data-refs-self (build-refs-data-value refs)
|
||||
edit-input-id (str "edit-block-" blocks-container-id "-" uuid)
|
||||
edit? (state/sub [:editor/editing? edit-input-id])]
|
||||
[:div.ls-block.flex.flex-col.rounded-sm
|
||||
[:div.ls-block
|
||||
(cond->
|
||||
{:id block-id
|
||||
:data-refs data-refs
|
||||
:data-refs-self data-refs-self
|
||||
:style {:position "relative"}
|
||||
:class (str uuid
|
||||
(when (and collapsed? has-child?) " collapsed")
|
||||
(when pre-block? " pre-block"))
|
||||
:blockid (str uuid)
|
||||
:repo repo
|
||||
:haschild (str has-child?)}
|
||||
:blockid (str uuid)}
|
||||
|
||||
level
|
||||
(assoc :level level)
|
||||
|
|
|
@ -243,6 +243,8 @@
|
|||
}
|
||||
|
||||
.ls-block {
|
||||
@apply: .flex.flex-col.rounded-sm;
|
||||
position: relative;
|
||||
min-height: 24px;
|
||||
padding: 2px 0;
|
||||
border-bottom: 1px solid transparent;
|
||||
|
|
|
@ -954,7 +954,14 @@
|
|||
(if (<= (count blocks) 1)
|
||||
blocks
|
||||
(let [[f s & _others] blocks]
|
||||
(if (= (:block/left s) {:db/id (:db/id f)})
|
||||
(if (or (= (:block/left s) {:db/id (:db/id f)})
|
||||
(and
|
||||
(let [parents (db/get-block-parents (state/get-current-repo)
|
||||
(:block/uuid f)
|
||||
100)]
|
||||
(some #(= (:block/left s) {:db/id (:db/id %)})
|
||||
parents))
|
||||
(not= (:block/left f) {:db/id (:db/id s)})))
|
||||
blocks
|
||||
(reverse blocks)))))
|
||||
|
||||
|
@ -1815,6 +1822,20 @@
|
|||
blocks (db/pull-many repo '[*] lookup-refs)]
|
||||
(reorder-blocks blocks)))
|
||||
|
||||
(defn- rehighlight-selected-nodes
|
||||
([]
|
||||
(rehighlight-selected-nodes (state/get-selection-blocks)))
|
||||
([blocks]
|
||||
(let [blocks (doall
|
||||
(map
|
||||
(fn [block]
|
||||
(when-let [id (gobj/get block "id")]
|
||||
(when-let [block (gdom/getElement id)]
|
||||
(dom/add-class! block "selected noselect")
|
||||
block)))
|
||||
blocks))]
|
||||
(state/set-selection-blocks! blocks))))
|
||||
|
||||
(defn move-up-down
|
||||
[up?]
|
||||
(fn [event]
|
||||
|
@ -1827,6 +1848,7 @@
|
|||
:data blocks}]
|
||||
(outliner-core/move-nodes nodes up?)
|
||||
(db/refresh! repo opts)
|
||||
(rehighlight-selected-nodes)
|
||||
(let [block-node (util/get-first-block-by-id (:block/uuid (first blocks)))]
|
||||
(.scrollIntoView block-node #js {:behavior "smooth" :block "nearest"}))))]
|
||||
(if edit-block-id
|
||||
|
@ -1858,15 +1880,7 @@
|
|||
(let [opts {:key :block/change
|
||||
:data blocks}]
|
||||
(db/refresh! repo opts)
|
||||
(let [blocks (doall
|
||||
(map
|
||||
(fn [block]
|
||||
(when-let [id (gobj/get block "id")]
|
||||
(when-let [block (gdom/getElement id)]
|
||||
(dom/add-class! block "selected noselect")
|
||||
block)))
|
||||
blocks-dom-nodes))]
|
||||
(state/set-selection-blocks! blocks))))))))
|
||||
(rehighlight-selected-nodes)))))))
|
||||
|
||||
(defn- get-link [format link label]
|
||||
(let [link (or link "")
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
(defn block
|
||||
[m]
|
||||
(assert (map? m) (util/format "block data must be map,got: %s %s" (type m) m))
|
||||
(assert (map? m) (util/format "block data must be map, got: %s %s" (type m) m))
|
||||
(->Block m))
|
||||
|
||||
(defn get-data
|
||||
|
@ -280,7 +280,6 @@
|
|||
[target-node sibling?] (if (seq children)
|
||||
[(last children) true]
|
||||
[target-node false])]
|
||||
(prn {:target-node target-node})
|
||||
(insert-node-aux node target-node sibling? txs-state)))
|
||||
|
||||
(defn insert-node
|
||||
|
@ -369,49 +368,6 @@
|
|||
(and sibling? (some? down-node)) ;; unchanged
|
||||
nil)))))
|
||||
|
||||
(defn move-node
|
||||
[node up?]
|
||||
{:pre [(tree/satisfied-inode? node)]}
|
||||
(ds/auto-transact!
|
||||
[txs-state (ds/new-outliner-txs-state)] {:outliner-op :move-node}
|
||||
(let [left (tree/-get-left node)
|
||||
move-to-another-parent? (if up?
|
||||
(= left (tree/-get-parent node))
|
||||
(and (tree/-get-parent node)
|
||||
(nil? (tree/-get-right node))))
|
||||
[up-node down-node] (if up?
|
||||
[left node]
|
||||
(let [down-node (if move-to-another-parent?
|
||||
(tree/-get-right (tree/-get-parent node))
|
||||
(tree/-get-right node))]
|
||||
[node down-node]))]
|
||||
(when (and up-node down-node)
|
||||
(let [up-node-left (tree/-get-left-id up-node)]
|
||||
(cond
|
||||
(and move-to-another-parent? up?)
|
||||
(when-let [target-node (tree/-get-left up-node)]
|
||||
(when (and (not (:block/name (:data target-node))) ; page root block
|
||||
(not (= target-node
|
||||
(when-let [parent (tree/-get-parent node)]
|
||||
(tree/-get-parent parent)))))
|
||||
(insert-node-as-last-child txs-state down-node target-node)
|
||||
(when-let [down-node-right (tree/-get-right down-node)]
|
||||
(let [down-node-right (tree/-set-left-id down-node-right (tree/-get-id (tree/-get-parent node)))]
|
||||
(tree/-save down-node-right txs-state)))))
|
||||
|
||||
(and move-to-another-parent? (not up?))
|
||||
(insert-node-as-first-child txs-state node down-node)
|
||||
|
||||
:else
|
||||
;; swap up-node and down-node
|
||||
(let [down-node (tree/-set-left-id down-node up-node-left)
|
||||
up-node (tree/-set-left-id up-node (tree/-get-id down-node))]
|
||||
(tree/-save down-node txs-state)
|
||||
(tree/-save up-node txs-state)
|
||||
(when-let [down-node-right (tree/-get-right down-node)]
|
||||
(let [down-node-right (tree/-set-left-id down-node-right (tree/-get-id up-node))]
|
||||
(tree/-save down-node-right txs-state))))))))))
|
||||
|
||||
(defn move-nodes
|
||||
"Move nodes up/down."
|
||||
[nodes up?]
|
||||
|
|
Loading…
Reference in New Issue