@@ -47,9 +47,9 @@ function setupEventListeners(node) {
4747 this . draggingMoved = false ;
4848 const mousePos = this . mousePositionOfEvent ( ( event . touches ) ? event . touches [ 0 ] : event ) ;
4949 if ( event . shiftKey )
50- this . setSelected ( [ node ] , 'toggle' ) ;
50+ this . setNodeSelected ( node , 'toggle' ) ;
5151 else {
52- this . setSelected ( [ node ] , true ) ;
52+ this . setNodeSelected ( node , true ) ;
5353 switch ( node . type ) {
5454 case 'panel' :
5555 this . dragging = new Map ( ) ;
@@ -170,7 +170,7 @@ export default class WiredPanels {
170170 this . undo ( ) ;
171171 break ;
172172 case 65 : // Meta + A
173- this . setSelected ( this . panels , true ) ;
173+ this . setNodesSelected ( this . panels , true ) ;
174174 break ;
175175 default : {
176176 const eventListener = this . eventListeners [ 'meta' + String . fromCharCode ( event . keyCode ) ] ;
@@ -268,12 +268,12 @@ export default class WiredPanels {
268268 for ( const wire of this . wires )
269269 if ( isSocketInBoxSelection ( wire . srcSocket ) && isSocketInBoxSelection ( wire . dstSocket ) )
270270 nodes . add ( wire ) ;
271- this . setSelected ( nodes , ( event . shiftKey ) ? 'toggle' : true ) ;
271+ this . setNodesSelected ( nodes , ( event . shiftKey ) ? 'toggle' : true ) ;
272272 }
273273 } else if ( this . dragging instanceof Map )
274- this . setSelected ( this . dragging . keys ( ) , false ) ;
274+ this . setNodesSelected ( this . dragging . keys ( ) , false ) ;
275275 else {
276- this . setSelected ( [ this . dragging . srcSocket ] , false ) ;
276+ this . setNodeSelected ( this . dragging . srcSocket , false ) ;
277277 if ( this . dragging . type === 'wire' )
278278 animateRemoval . call ( this , [ this . dragging ] ) ;
279279 }
@@ -286,7 +286,7 @@ export default class WiredPanels {
286286 if ( event . button > 0 )
287287 return ;
288288 if ( ! event . shiftKey && ( ! this . dragging || this . dragging === this . boxSelection ) )
289- this . setSelected ( this . selection , false ) ;
289+ this . setNodesSelected ( this . selection , false ) ;
290290 mouseleave ( event ) ;
291291 } . bind ( this ) ;
292292
@@ -355,30 +355,33 @@ export default class WiredPanels {
355355 this . eventListeners = eventListeners ;
356356 }
357357
358- setSelected ( nodes , selectionMode ) {
359- for ( const node of nodes ) {
360- const wasSelected = this . selection . has ( node ) ;
361- if ( selectionMode === wasSelected )
362- continue ;
363- if ( selectionMode === 'toggle' )
364- selectionMode = ! wasSelected ;
365- if ( selectionMode ) {
366- this . selection . add ( node ) ;
367- node . primaryElement . classList . add ( 'selected' ) ;
368- } else {
369- this . selection . delete ( node ) ;
370- node . primaryElement . classList . remove ( 'selected' ) ;
371- }
358+ setNodeSelected ( node , selectionMode ) {
359+ const wasSelected = this . selection . has ( node ) ;
360+ if ( selectionMode === wasSelected )
361+ return ;
362+ if ( selectionMode === 'toggle' )
363+ selectionMode = ! wasSelected ;
364+ if ( selectionMode ) {
365+ this . selection . add ( node ) ;
366+ node . primaryElement . classList . add ( 'selected' ) ;
367+ } else {
368+ this . selection . delete ( node ) ;
369+ node . primaryElement . classList . remove ( 'selected' ) ;
372370 }
373371 }
374372
373+ setNodesSelected ( nodes , selectionMode ) {
374+ for ( const node of nodes )
375+ this . setNodeSelected ( node , selectionMode ) ;
376+ }
377+
375378 deleteSelected ( ) {
376379 if ( this . selection . size === 0 )
377380 return ;
378381 let callback ;
379382 if ( this . eventListeners . remove )
380383 callback = this . eventListeners . remove ( ) ;
381- if ( this . selection . size > 0 )
384+ if ( this . selection . size > 0 || callback )
382385 this . changeGraphUndoable ( [ ] , new Set ( this . selection ) , callback ) ;
383386 }
384387
@@ -673,8 +676,6 @@ export default class WiredPanels {
673676 changeGraph ( nodesToAdd , nodesToRemove ) {
674677 const panelsToUpdate = new Set ( ) ;
675678 for ( const node of nodesToAdd ) {
676- if ( node . primaryElement . classList . contains ( 'selected' ) )
677- this . selection . add ( node ) ;
678679 switch ( node . type ) {
679680 case 'socket' :
680681 panelsToUpdate . add ( node . panel ) ;
@@ -726,23 +727,27 @@ export default class WiredPanels {
726727 this . panels . add ( node ) ;
727728 this . panelsGroup . appendChild ( node . group ) ;
728729 animateVisibility ( node . group , true ) ;
730+ for ( const socket of node . sockets )
731+ socket . primaryElement . classList . remove ( 'selected' ) ;
729732 break ;
730733 }
734+ node . primaryElement . classList . remove ( 'selected' ) ;
731735 }
732- const deleteSocket = function ( socket ) {
736+ for ( const node of nodesToRemove )
737+ switch ( node . type ) {
738+ case 'socket' :
739+ node . index = node . panel . sockets . indexOf ( node ) ;
740+ break ;
741+ case 'panel' :
742+ for ( const socket of node . sockets )
743+ this . selection . delete ( socket ) ;
744+ break ;
745+ }
746+ function deleteSocket ( socket ) {
733747 for ( const [ panel , wires ] of socket . wiresPerPanel )
734748 for ( const wire of wires )
735749 nodesToRemove . add ( wire ) ;
736- } . bind ( this ) ;
737- for ( const node of nodesToRemove )
738- if ( node . type === 'socket' ) {
739- if ( nodesToRemove . has ( node . panel ) ) {
740- nodesToRemove . delete ( node ) ;
741- node . primaryElement . classList . remove ( 'selected' ) ;
742- continue ;
743- }
744- node . index = node . panel . sockets . indexOf ( node ) ;
745- }
750+ }
746751 for ( const node of nodesToRemove ) {
747752 this . selection . delete ( node ) ;
748753 switch ( node . type ) {
0 commit comments