@@ -200,7 +200,18 @@ function prepSelect(e, startX, startY, dragOptions, mode) {
200200 dy = Math . abs ( y1 - y0 ) ;
201201
202202 if ( mode === 'select' ) {
203- if ( dy < Math . min ( dx * 0.6 , MINSELECT ) ) {
203+ var direction = fullLayout . selectdirection ;
204+
205+ if ( fullLayout . selectdirection === 'any' ) {
206+ if ( dy < Math . min ( dx * 0.6 , MINSELECT ) ) direction = 'h' ;
207+ else if ( dx < Math . min ( dy * 0.6 , MINSELECT ) ) direction = 'v' ;
208+ else direction = 'd' ;
209+ }
210+ else {
211+ direction = fullLayout . selectdirection ;
212+ }
213+
214+ if ( direction === 'h' ) {
204215 // horizontal motion: make a vertical box
205216 currentPolygon = [ [ x0 , 0 ] , [ x0 , ph ] , [ x1 , ph ] , [ x1 , 0 ] ] ;
206217 currentPolygon . xmin = Math . min ( x0 , x1 ) ;
@@ -214,7 +225,7 @@ function prepSelect(e, startX, startY, dragOptions, mode) {
214225 'h4v' + ( 2 * MINSELECT ) + 'h-4Z' ) ;
215226
216227 }
217- else if ( dx < Math . min ( dy * 0.6 , MINSELECT ) ) {
228+ else if ( direction === 'v' ) {
218229 // vertical motion: make a horizontal box
219230 currentPolygon = [ [ 0 , y0 ] , [ 0 , y1 ] , [ pw , y1 ] , [ pw , y0 ] ] ;
220231 currentPolygon . xmin = Math . min ( 0 , pw ) ;
@@ -226,7 +237,7 @@ function prepSelect(e, startX, startY, dragOptions, mode) {
226237 'M' + ( x0 - MINSELECT ) + ',' + ( currentPolygon . ymax - 1 ) +
227238 'v4h' + ( 2 * MINSELECT ) + 'v-4Z' ) ;
228239 }
229- else {
240+ else if ( direction === 'd' ) {
230241 // diagonal motion
231242 currentPolygon = [ [ x0 , y0 ] , [ x0 , y1 ] , [ x1 , y1 ] , [ x1 , y0 ] ] ;
232243 currentPolygon . xmin = Math . min ( x0 , x1 ) ;
0 commit comments