Skip to content

Commit f1f0f63

Browse files
authored
Fix pan at limits of range (#211)
1 parent 9359d40 commit f1f0f63

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

src/plugin.js

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -218,16 +218,32 @@ function panCategoryScale(scale, delta, panOptions) {
218218

219219
function panNumericalScale(scale, delta, panOptions) {
220220
var tickOpts = scale.options.ticks;
221-
var start = scale.min;
222-
var end = scale.max;
223-
221+
var prevStart = scale.min;
222+
var prevEnd = scale.max;
223+
var newMin = scale.getValueForPixel(scale.getPixelForValue(prevStart) - delta);
224+
var newMax = scale.getValueForPixel(scale.getPixelForValue(prevEnd) - delta);
225+
var rangeMin, rangeMax, diff;
226+
227+
if (panOptions.scaleAxes && panOptions.rangeMin &&
228+
!helpers.isNullOrUndef(panOptions.rangeMin[panOptions.scaleAxes])) {
229+
rangeMin = panOptions.rangeMin[panOptions.scaleAxes];
230+
}
231+
if (panOptions.scaleAxes && panOptions.rangeMax &&
232+
!helpers.isNullOrUndef(panOptions.rangeMax[panOptions.scaleAxes])) {
233+
rangeMax = panOptions.rangeMax[panOptions.scaleAxes];
234+
}
224235

225-
if (tickOpts.reverse) {
226-
tickOpts.min = rangeMinLimiter(panOptions, scale.getValueForPixel(scale.getPixelForValue(end) - delta));
227-
tickOpts.max = rangeMaxLimiter(panOptions, scale.getValueForPixel(scale.getPixelForValue(start) - delta));
228-
} else {
229-
tickOpts.min = rangeMinLimiter(panOptions, scale.getValueForPixel(scale.getPixelForValue(start) - delta));
230-
tickOpts.max = rangeMaxLimiter(panOptions, scale.getValueForPixel(scale.getPixelForValue(end) - delta));
236+
if (newMin >= rangeMin && newMax <= rangeMax) {
237+
tickOpts.min = newMin;
238+
tickOpts.max = newMax;
239+
} else if (newMin < rangeMin) {
240+
diff = prevStart - rangeMin;
241+
tickOpts.min = rangeMin;
242+
tickOpts.max = prevEnd - diff;
243+
} else if (newMax > rangeMax) {
244+
diff = rangeMax - prevEnd;
245+
tickOpts.max = rangeMax;
246+
tickOpts.min = prevStart + diff;
231247
}
232248
}
233249

0 commit comments

Comments
 (0)