1
1
import { onModelUpdate , unfold } from "../model" ;
2
- import { updateSelection , setLastSelectedNode } from "../selection" ;
2
+ import { updateSelection , setLastSelectedNode , selectAll , deselectAll } from "../selection" ;
3
3
4
4
let shiftKey , ctrlKey ,
5
5
width = window . innerWidth ,
@@ -27,7 +27,7 @@ let svg = null,
27
27
. on ( "start.brush" , ( ) => {
28
28
if ( ! d3 . event . sourceEvent ) return ;
29
29
node . each ( ( d ) => {
30
- d . previouslySelected = ctrlKey && d . selected ;
30
+ d . wasSelected = ctrlKey && d . selected ;
31
31
} ) ;
32
32
} )
33
33
. on ( "brush.brush" , ( ) => {
@@ -39,7 +39,7 @@ let svg = null,
39
39
let selected = ( extent [ 0 ] [ 0 ] <= d . x && d . x < extent [ 1 ] [ 0 ]
40
40
&& extent [ 0 ] [ 1 ] <= d . y && d . y < extent [ 1 ] [ 1 ] ) ;
41
41
if ( selected ) setLastSelectedNode ( d ) ;
42
- return d . selected = d . previouslySelected ^ selected ;
42
+ return d . selected = d . wasSelected ^ selected ;
43
43
} ) ;
44
44
} )
45
45
. on ( "end.brush" , ( ) => {
@@ -132,7 +132,7 @@ export function init () {
132
132
. append ( "g" )
133
133
. attr ( "class" , "view" ) ;
134
134
brush = view . append ( "g" )
135
- . datum ( ( ) => { return { selected : false , previouslySelected : false } ; } )
135
+ . datum ( ( ) => { return { selected : false , wasSelected : false } ; } )
136
136
. attr ( "class" , "brush" ) ;
137
137
links = view . append ( "g" ) . attr ( "class" , "links" ) ;
138
138
nodes = view . append ( "g" ) . attr ( "class" , "nodes" ) ;
@@ -220,6 +220,7 @@ export function update (g = lastGraph, reset = false) {
220
220
let nodeEnter = node . enter ( ) . append ( "g" )
221
221
. each ( function ( d ) { this . _id = d . id ; } )
222
222
. attr ( "class" , d => `node${ d . id === 0 ? " root" : "" } ${ d . type || "unknown" } ` )
223
+ . classed ( "selected" , ( p ) => p . selected )
223
224
. call ( dragger )
224
225
. on ( "dblclick" , function ( d ) {
225
226
d3 . event . stopPropagation ( ) ;
@@ -230,10 +231,18 @@ export function update (g = lastGraph, reset = false) {
230
231
} )
231
232
. on ( "click" , function ( d ) {
232
233
if ( d3 . event . defaultPrevented ) return ;
233
- if ( ! ctrlKey ) {
234
- node . classed ( "selected" , ( p ) => p . selected = p . previouslySelected = false )
234
+ // if (!ctrlKey) {
235
+ // node.classed("selected", (p) => p.selected = p.wasSelected = false)
236
+ // }
237
+ if ( shiftKey ) {
238
+ if ( d . selected )
239
+ deselectAll ( d ) ;
240
+ else
241
+ selectAll ( d ) ;
242
+ node . classed ( "selected" , ( p ) => p . selected ) ;
243
+ } else {
244
+ d3 . select ( this ) . classed ( "selected" , d . selected = ! d . selected ) ; // (!prevSel)
235
245
}
236
- d3 . select ( this ) . classed ( "selected" , d . selected = ! d . selected ) ; // (!prevSel)
237
246
setLastSelectedNode ( d . selected ? d : null ) ;
238
247
updateSelection ( ) ;
239
248
} ) ;
0 commit comments