support mod+shift+left-click

pull/10763/head
Mega Yu 2023-07-25 11:01:50 +08:00 committed by Tienson Qin
parent cba1150e1a
commit aaf856e803
3 changed files with 83 additions and 69 deletions

View File

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

View File

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

View File

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