enhance: delete move-node

pull/3068/head
Tienson Qin 2021-11-04 14:25:55 +08:00
parent bcabb49cc8
commit 29a96a7f3e
4 changed files with 29 additions and 60 deletions

View File

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

View File

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

View File

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

View File

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