@@ -76,19 +76,22 @@ module.exports = function dragBox(gd, plotinfo, x, y, w, h, ns, ew) {
7676 dragClass = ns + ew + 'drag' ;
7777
7878 var dragger3 = plotinfo . draglayer . selectAll ( '.' + dragClass ) . data ( [ 0 ] ) ;
79+
7980 dragger3 . enter ( ) . append ( 'rect' )
8081 . classed ( 'drag' , true )
8182 . classed ( dragClass , true )
8283 . style ( { fill : 'transparent' , 'stroke-width' : 0 } )
8384 . attr ( 'data-subplot' , plotinfo . id ) ;
85+
8486 dragger3 . call ( Drawing . setRect , x , y , w , h )
8587 . call ( setCursor , cursor ) ;
88+
8689 var dragger = dragger3 . node ( ) ;
8790
8891 // still need to make the element if the axes are disabled
8992 // but nuke its events (except for maindrag which needs them for hover)
9093 // and stop there
91- if ( ! yActive && ! xActive ) {
94+ if ( ! yActive && ! xActive && ! isSelectOrLasso ( fullLayout . dragmode ) ) {
9295 dragger . onmousedown = null ;
9396 dragger . style . pointerEvents = isMainDrag ? 'all' : 'none' ;
9497 return dragger ;
@@ -133,7 +136,7 @@ module.exports = function dragBox(gd, plotinfo, x, y, w, h, ns, ew) {
133136 dragOptions . doneFn = dragDone ;
134137 clearSelect ( ) ;
135138 }
136- else if ( dragModeNow === 'select' || dragModeNow === 'lasso' ) {
139+ else if ( isSelectOrLasso ( dragModeNow ) ) {
137140 prepSelect ( e , startX , startY , dragOptions , dragModeNow ) ;
138141 }
139142 }
@@ -670,3 +673,9 @@ function removeZoombox(gd) {
670673 . selectAll ( '.zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners' )
671674 . remove ( ) ;
672675}
676+
677+ function isSelectOrLasso ( dragmode ) {
678+ var modes = [ 'lasso' , 'select' ] ;
679+
680+ return modes . indexOf ( dragmode ) !== - 1 ;
681+ }
0 commit comments