@@ -214,24 +214,23 @@ function getInterval(b, height, y) {
214
214
}
215
215
}
216
216
}
217
- // fixme consider refactoring this otherwise quite simple nested ternary
218
- var closestInterval = isNaN ( hoveredInterval )
219
- ? ( // if we're South of the 1st interval, there's no previous interval
220
- isNaN ( previousInterval )
221
- ? nextInterval
222
- : ( // if we're North of the last interval, there's no next interval
223
- isNaN ( nextInterval )
224
- ? previousInterval
225
- : ( // if we have both previous and subsequent intervals, which one is closer?
226
- y - pixIntervals [ previousInterval ] [ 1 ] < pixIntervals [ nextInterval ] [ 0 ] - y
227
- ? previousInterval
228
- : nextInterval ) ) )
229
- : hoveredInterval ; // if we're hovering over an interval, that's trivially the closest interval
217
+
218
+ var closestInterval = hoveredInterval ;
219
+ if ( isNaN ( closestInterval ) ) {
220
+ if ( isNaN ( previousInterval ) || isNaN ( nextInterval ) ) {
221
+ closestInterval = isNaN ( previousInterval ) ? nextInterval : previousInterval ;
222
+ }
223
+ else {
224
+ closestInterval = ( y - pixIntervals [ previousInterval ] [ 1 ] < pixIntervals [ nextInterval ] [ 0 ] - y ) ?
225
+ previousInterval : nextInterval ;
226
+ }
227
+ }
228
+
230
229
var fPix = pixIntervals [ closestInterval ] ;
231
230
232
231
return {
233
232
interval : isNaN ( closestInterval ) ? null : intervals [ closestInterval ] , // activated interval in domain terms
234
- intervalPix : isNaN ( closestInterval ) ? null : pixIntervals [ closestInterval ] , // activated interval in pixel terms
233
+ intervalPix : isNaN ( closestInterval ) ? null : fPix , // activated interval in pixel terms
235
234
n : north ( fPix , y ) , // do we hover over the northern resize hotspot
236
235
s : south ( fPix , y ) , // do we hover over the northern resize hotspot
237
236
m : middle ( fPix , y ) // or over the bar section itself?
@@ -278,17 +277,13 @@ function attachDragBehavior(selection) {
278
277
s . barLength = pixelRange [ 1 ] - pixelRange [ 0 ] ;
279
278
s . grabbingBar = active && intData . m && unitRange ;
280
279
s . stayingIntervals = ! d . multiselect ? [ ] :
281
- barInteraction
282
- ? b . filter . get ( ) . filter ( differentInterval ( unitRange ) )
283
- : b . filter . get ( ) ; // keep all preexisting bars if interaction wasn't a barInteraction
280
+ barInteraction ?
281
+ b . filter . get ( ) . filter ( differentInterval ( unitRange ) ) :
282
+ b . filter . get ( ) ; // keep all preexisting bars if interaction wasn't a barInteraction
284
283
var grabbingBarNorth = intData . n ;
285
284
var grabbingBarSouth = intData . s ;
286
285
var newBrushing = ! s . grabbingBar && ! grabbingBarNorth && ! grabbingBarSouth ;
287
- s . startExtent = newBrushing
288
- ? d . unitScaleInOrder . invert ( y )
289
- : grabbingBarSouth
290
- ? unitRange [ 1 ]
291
- : unitRange [ 0 ] ;
286
+ s . startExtent = newBrushing ? unitLocation : unitRange [ grabbingBarSouth ? 1 : 0 ] ;
292
287
d . parent . inBrushDrag = true ;
293
288
s . brushStartCallback ( ) ;
294
289
} )
0 commit comments