refactor: move-up-down

pull/1656/head
Tienson Qin 2021-04-06 19:00:43 +08:00
parent 6f80796c57
commit 3320081880
2 changed files with 28 additions and 59 deletions

View File

@ -1511,65 +1511,13 @@
(defn move-up-down
[e up?]
;; (when-let [block-id (:block/uuid (state/get-edit-block))]
;; (let [block-parent-id (state/get-editing-block-dom-id)
;; block (db/entity [:block/uuid block-id])
;; meta (:block/meta block)
;; page (:block/page block)
;; block-dom-node (gdom/getElement block-parent-id)
;; prev-block (get-prev-block-non-collapsed block-dom-node)
;; next-block (get-next-block-non-collapsed block-dom-node)
;; repo (state/get-current-repo)
;; move-upwards-to-parent? (and up? prev-block (< (d/attr prev-block "level") (:block/level block)))
;; move-down-to-higher-level? (and (not up?) next-block (< (d/attr next-block "level") (:block/level block)))]
;; (when-let [sibling-block (cond
;; move-upwards-to-parent?
;; prev-block
;; move-down-to-higher-level?
;; next-block
;; :else
;; (let [f (if up? util/get-prev-block-with-same-level util/get-next-block-with-same-level)]
;; (f block-dom-node)))]
;; (when-let [sibling-block-id (d/attr sibling-block "blockid")]
;; (when-let [sibling-block (db/pull-block (medley/uuid sibling-block-id))]
;; (let [sibling-meta (:block/meta sibling-block)
;; hc1 (db/get-block-and-children-no-cache repo (:block/uuid block))
;; hc2 (if (or move-upwards-to-parent? move-down-to-higher-level?)
;; [sibling-block]
;; (db/get-block-and-children-no-cache repo (:block/uuid sibling-block)))]
;; ;; Same page and next to the other
;; (when (and
;; (= (:db/id (:block/page block))
;; (:db/id (:block/page sibling-block)))
;; (or
;; (and up? (= (:end-pos (:block/meta (last hc2))) (:start-pos (:block/meta (first hc1)))))
;; (and (not up?) (= (:end-pos (:block/meta (last hc1))) (:start-pos (:block/meta (first hc2)))))))
;; (let [hc1-content (block-and-children-content hc1)
;; hc2-content (block-and-children-content hc2)
;; file (db/get-block-file (:block/uuid block))
;; file-path (:file/path file)
;; old-file-content (db/get-file file-path)
;; [start-pos end-pos new-content blocks] (if up?
;; [(:start-pos sibling-meta)
;; (get-in (last hc1) [:block/meta :end-pos])
;; (str hc1-content hc2-content)
;; (concat hc1 hc2)]
;; [(:start-pos meta)
;; (get-in (last hc2) [:block/meta :end-pos])
;; (str hc2-content hc1-content)
;; (concat hc2 hc1)])]
;; (when (and start-pos end-pos)
;; (let [new-file-content (utf8/insert! old-file-content start-pos end-pos new-content)
;; blocks-meta (rebuild-blocks-meta start-pos blocks)]
;; (profile
;; (str "Move block " (if up? "up: " "down: "))
;; (repo-handler/transact-react-and-alter-file!
;; repo
;; blocks-meta
;; {:key :block/change
;; :data (map (fn [block] (assoc block :block/page page)) blocks)}
;; [[file-path new-file-content]]))))))))))))
)
(when-let [block-id (:block/uuid (state/get-edit-block))]
(when-let [block (db/pull [:block/uuid block-id])]
(outliner-core/move-node (outliner-core/block block) up?)
(when-let [repo (state/get-current-repo)]
(let [opts {:key :block/change
:data [block]}]
(db/refresh repo opts))))))
(defn expand!
[]

View File

@ -183,6 +183,27 @@
;; Pipeline after outliner operation
(outliner-file/sync-to-file saved-node)))
(defn move-node
[node up?]
{:pre [(tree/satisfied-inode? node)]}
(let [[up-node down-node] (if up?
(let [left (tree/-get-left node)
parent? (= left (tree/-get-parent node))]
[(when-not parent? left) node])
[node (tree/-get-right node)])]
(when (and up-node down-node)
(let [down-node-right (tree/-get-right down-node)
up-node-left (tree/-get-left-id up-node)
;; swap up-node and down-node
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)
(tree/-save up-node)
(when down-node-right
(let [down-node-right (tree/-set-left-id down-node-right (tree/-get-id up-node))]
(tree/-save down-node-right)))
(outliner-file/sync-to-file node)))))
(defn delete-node*
"Delete node from the tree."
[node]