@@ -483,12 +483,19 @@ config:
483483 }
484484 }
485485
486- onEdgeClick ( src , dst ) {
487- const selectedId = this . _selectedNode ?. id ;
488- if ( selectedId == src ) {
489- this . selectNode ( dst , false , true ) ;
490- } else if ( selectedId == dst ) {
486+ onEdgeClick ( src , dest , event , shouldScroll ) {
487+ const forceSrc = event . altKey
488+ const forceDest = event . shiftKey
489+
490+ const srcElement = this . #getDomElementFromId( src )
491+ const destElement = this . #getDomElementFromId( dest )
492+ if ( forceSrc || ( ! forceDest && this . #getDistance( event , srcElement ) < this . #getDistance( event , destElement ) ) ) {
491493 this . selectNode ( src , false , true ) ;
494+ } else {
495+ this . selectNode ( dest , false , true ) ;
496+ }
497+ if ( shouldScroll ) {
498+ this . resetScrollingToSelected ( ) ;
492499 }
493500 }
494501
@@ -721,7 +728,11 @@ config:
721728 const dst = parseInt (
722729 classes . filter ( ( it ) => it . startsWith ( "LE-N" ) ) [ 0 ] . substring ( 4 )
723730 ) ;
724- _this . onEdgeRightClick ( src , dst ) ;
731+ if ( event . ctrlKey ) {
732+ _this . onEdgeClick ( src , dst , event , true ) ;
733+ } else {
734+ _this . onEdgeRightClick ( src , dst ) ;
735+ }
725736 event . preventDefault ( ) ;
726737 event . stopPropagation ( ) ;
727738 } ) ;
@@ -733,7 +744,7 @@ config:
733744 const dst = parseInt (
734745 classes . filter ( ( it ) => it . startsWith ( "LE-N" ) ) [ 0 ] . substring ( 4 )
735746 ) ;
736- _this . onEdgeClick ( src , dst ) ;
747+ _this . onEdgeClick ( src , dst , event , event . ctrlKey ) ;
737748 event . preventDefault ( ) ;
738749 event . stopPropagation ( ) ;
739750 } ) ;
@@ -756,6 +767,16 @@ config:
756767 } ) ;
757768 }
758769
770+ #getDistance( event , element ) {
771+ const rect = element . getBoundingClientRect ( ) ;
772+ const elemCenterX = rect . left + rect . width / 2 ;
773+ const elemCenterY = rect . top + rect . height / 2 ;
774+
775+ const dx = event . clientX - elemCenterX ;
776+ const dy = event . clientY - elemCenterY ;
777+ return Math . sqrt ( dx * dx + dy * dy ) ;
778+ }
779+
759780 reset ( shouldSupportUndo = false ) {
760781 if ( shouldSupportUndo ) {
761782 // Add all node and edges to undo
0 commit comments