Skip to content

Commit 2f0bf80

Browse files
authored
Merge pull request #4448 from jay-bis/fix-rangeslider-oob-bug
ensure newRng stays in bounds
2 parents 7d16f39 + 897a91d commit 2f0bf80

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

src/components/rangeslider/draw.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,18 +254,27 @@ function setupDragElement(rangeSlider, gd, axisOpts, opts) {
254254
switch(target) {
255255
case slideBox:
256256
cursor = 'ew-resize';
257+
if(minVal + delta > axisOpts._length || maxVal + delta < 0) {
258+
return;
259+
}
257260
pixelMin = minVal + delta;
258261
pixelMax = maxVal + delta;
259262
break;
260263

261264
case grabAreaMin:
262265
cursor = 'col-resize';
266+
if(minVal + delta > axisOpts._length) {
267+
return;
268+
}
263269
pixelMin = minVal + delta;
264270
pixelMax = maxVal;
265271
break;
266272

267273
case grabAreaMax:
268274
cursor = 'col-resize';
275+
if(maxVal + delta < 0) {
276+
return;
277+
}
269278
pixelMin = minVal;
270279
pixelMax = maxVal + delta;
271280
break;

test/jasmine/tests/range_slider_test.js

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,48 @@ describe('Visible rangesliders', function() {
185185
return slide(start, sliderY, end, sliderY);
186186
})
187187
.then(function() {
188-
var maskMax = getRangeSliderChild(3);
189-
var handleMax = getRangeSliderChild(6);
188+
var maskMin = getRangeSliderChild(3);
189+
var handleMin = getRangeSliderChild(6);
190190

191191
expect(gd.layout.xaxis.range).toBeCloseToArray([0, 45.04], -0.5);
192-
expect(+maskMax.getAttribute('width')).toBeCloseTo(-diff);
193-
testTranslate1D(handleMax, dataMaxStart + diff);
192+
expect(+maskMin.getAttribute('width')).toBeCloseTo(-diff);
193+
testTranslate1D(handleMin, dataMaxStart + diff);
194+
})
195+
.catch(failTest)
196+
.then(done);
197+
});
198+
199+
it('should not exceed slider bounds left to right', function(done) {
200+
var start = 940;
201+
var end = 990;
202+
203+
plotMock().then(function() {
204+
gd._fullLayout.xaxis.d2p(49);
205+
206+
expect(gd.layout.xaxis.range).toBeCloseToArray([0, 49]);
207+
208+
return slide(start, sliderY, end, sliderY);
209+
})
210+
.then(function() {
211+
expect(gd.layout.xaxis.range).toBeCloseToArray([0, 49], -0.5);
212+
})
213+
.catch(failTest)
214+
.then(done);
215+
});
216+
217+
it('should not exceed slider bounds right to left', function(done) {
218+
var start = 0;
219+
var end = -50;
220+
221+
plotMock().then(function() {
222+
gd._fullLayout.xaxis.d2p(-49);
223+
224+
expect(gd.layout.xaxis.range).toBeCloseToArray([0, 49]);
225+
226+
return slide(start, sliderY, end, sliderY);
227+
})
228+
.then(function() {
229+
expect(gd.layout.xaxis.range).toBeCloseToArray([0, 49], -0.5);
194230
})
195231
.then(done, done.fail);
196232
});

0 commit comments

Comments
 (0)