mirror of https://github.com/logseq/logseq
support mod+shift+left-click
parent
cba1150e1a
commit
aaf856e803
|
@ -2156,24 +2156,28 @@
|
|||
shift? (gobj/get e "shiftKey")
|
||||
meta? (util/meta-key? e)
|
||||
forbidden-edit? (target-forbidden-edit? target)]
|
||||
(when-not forbidden-edit? (.stopPropagation e))
|
||||
(if (and meta?
|
||||
(not (state/get-edit-input-id))
|
||||
(not (dom/has-class? target "page-ref"))
|
||||
(not= "A" (gobj/get target "tagName")))
|
||||
(when (and (not forbidden-edit?) (contains? #{1 0} button))
|
||||
(util/stop-propagation e)
|
||||
(let [selection-blocks (state/get-selection-blocks)
|
||||
starting-block (state/get-selection-start-block-or-first)]
|
||||
(cond
|
||||
(and meta? shift?)
|
||||
(when-not (empty? selection-blocks)
|
||||
(util/stop e)
|
||||
(editor-handler/highlight-selection-area! block-id true))
|
||||
|
||||
meta?
|
||||
(do
|
||||
(util/stop e)
|
||||
(let [block-dom-element (gdom/getElement block-id)]
|
||||
(if (some #(= block-dom-element %) (state/get-selection-blocks))
|
||||
(if (some #(= block-dom-element %) selection-blocks)
|
||||
(state/drop-selection-block! block-dom-element)
|
||||
(state/conj-selection-block! block-dom-element :down)))
|
||||
(if (empty? (state/get-selection-blocks))
|
||||
(state/clear-selection!)
|
||||
(state/set-selection-start-block! block-id)))
|
||||
(when (contains? #{1 0} button)
|
||||
(when-not forbidden-edit?
|
||||
(cond
|
||||
(and shift? (state/get-selection-start-block-or-first))
|
||||
|
||||
(and shift? starting-block)
|
||||
(do
|
||||
(util/stop e)
|
||||
(util/clear-selection!)
|
||||
|
@ -2211,7 +2215,7 @@
|
|||
(f)
|
||||
(js/setTimeout f 5))
|
||||
|
||||
(when block-id (state/set-selection-start-block! block-id)))))))))))
|
||||
(state/set-selection-start-block! block-id)))))))))
|
||||
|
||||
(rum/defc dnd-separator-wrapper < rum/reactive
|
||||
[block block-id slide? top? block-content?]
|
||||
|
|
|
@ -1226,14 +1226,19 @@
|
|||
(delete-block-aux! block true))))
|
||||
|
||||
(defn highlight-selection-area!
|
||||
[end-block]
|
||||
([end-block]
|
||||
(highlight-selection-area! end-block false))
|
||||
([end-block append?]
|
||||
(when-let [start-block (state/get-selection-start-block-or-first)]
|
||||
(let [blocks (util/get-nodes-between-two-nodes start-block end-block "ls-block")
|
||||
direction (util/get-direction-between-two-nodes start-block end-block "ls-block")
|
||||
blocks (if (= :up direction)
|
||||
(reverse blocks)
|
||||
blocks)]
|
||||
(state/exit-editing-and-set-selected-blocks! blocks direction))))
|
||||
(if append?
|
||||
(do (state/clear-edit!)
|
||||
(state/conj-selection-block! blocks direction))
|
||||
(state/exit-editing-and-set-selected-blocks! blocks direction))))))
|
||||
|
||||
(defn- select-block-up-down
|
||||
[direction]
|
||||
|
|
|
@ -1042,19 +1042,24 @@ Similar to re-frame subscriptions"
|
|||
(and (in-selection-mode?) (seq (get-selection-blocks))))
|
||||
|
||||
(defn conj-selection-block!
|
||||
[block direction]
|
||||
[block-or-blocks direction]
|
||||
(let [selection-blocks (get-selection-blocks)
|
||||
blocks (-> (if (sequential? block-or-blocks)
|
||||
(apply conj selection-blocks block-or-blocks)
|
||||
(conj selection-blocks block-or-blocks))
|
||||
distinct
|
||||
util/sort-by-height
|
||||
vec)]
|
||||
(swap! state assoc
|
||||
:selection/mode true
|
||||
:selection/blocks (-> (conj (vec (:selection/blocks @state)) block)
|
||||
util/sort-by-height
|
||||
vec)
|
||||
:selection/direction direction))
|
||||
:selection/blocks blocks
|
||||
:selection/direction direction)))
|
||||
|
||||
(defn drop-selection-block!
|
||||
[block]
|
||||
(swap! state assoc
|
||||
:selection/mode true
|
||||
:selection/blocks (-> (filter #(not= block %) (get-selection-blocks))
|
||||
:selection/blocks (-> (remove #(= block %) (get-selection-blocks))
|
||||
util/sort-by-height
|
||||
vec)))
|
||||
|
||||
|
|
Loading…
Reference in New Issue