Skip to content

Commit 5a77423

Browse files
jannisgtbenmccann
authored andcommitted
Store original scale options to resetZoom properly (#201)
Store original scale options to resetZoom properly
1 parent d91e3b6 commit 5a77423

File tree

1 file changed

+42
-10
lines changed

1 file changed

+42
-10
lines changed

src/plugin.js

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,21 @@ var defaultOptions = zoomNS.defaults = {
2626
sensitivity: 3
2727
}
2828
};
29+
// Stores the original options of the scales
30+
var originalOptions = {};
31+
32+
function storeOriginalOptions(chart) {
33+
helpers.each(chart.scales, function(scale) {
34+
if (!originalOptions[scale.id]) {
35+
originalOptions[scale.id] = helpers.clone(scale.options);
36+
}
37+
});
38+
helpers.each(originalOptions, function(opt, key) {
39+
if (!chart.scales[key]) {
40+
delete originalOptions[key];
41+
}
42+
});
43+
}
2944

3045
function directionEnabled(mode, dir) {
3146
if (mode === undefined) {
@@ -172,6 +187,7 @@ function doZoom(chart, percentZoomX, percentZoomY, focalPoint, whichAxes) {
172187
var zoomOptions = chart.options.zoom;
173188

174189
if (zoomOptions && helpers.getValueOrDefault(zoomOptions.enabled, defaultOptions.zoom.enabled)) {
190+
storeOriginalOptions(chart);
175191
// Do the zoom here
176192
var zoomMode = helpers.getValueOrDefault(chart.options.zoom.mode, defaultOptions.zoom.mode);
177193
zoomOptions.sensitivity = helpers.getValueOrDefault(chart.options.zoom.sensitivity, defaultOptions.zoom.sensitivity);
@@ -260,6 +276,7 @@ function panScale(scale, delta, panOptions) {
260276
}
261277

262278
function doPan(chartInstance, deltaX, deltaY) {
279+
storeOriginalOptions(chartInstance);
263280
var panOptions = chartInstance.options.pan;
264281
if (panOptions && helpers.getValueOrDefault(panOptions.enabled, defaultOptions.pan.enabled)) {
265282
var panMode = helpers.getValueOrDefault(chartInstance.options.pan.mode, defaultOptions.pan.mode);
@@ -325,24 +342,39 @@ var zoomPlugin = {
325342
id: 'zoom',
326343

327344
afterInit: function(chartInstance) {
328-
helpers.each(chartInstance.scales, function(scale) {
329-
scale.originalOptions = helpers.clone(scale.options);
330-
});
331345

332346
chartInstance.resetZoom = function() {
347+
storeOriginalOptions(chartInstance);
333348
helpers.each(chartInstance.scales, function(scale) {
349+
334350
var timeOptions = scale.options.time;
335351
var tickOptions = scale.options.ticks;
336352

337-
if (timeOptions) {
338-
timeOptions.min = scale.originalOptions.time.min;
339-
timeOptions.max = scale.originalOptions.time.max;
340-
}
353+
if (originalOptions[scale.id]) {
354+
355+
if (timeOptions) {
356+
timeOptions.min = originalOptions[scale.id].time.min;
357+
timeOptions.max = originalOptions[scale.id].time.max;
358+
}
359+
360+
if (tickOptions) {
361+
tickOptions.min = originalOptions[scale.id].ticks.min;
362+
tickOptions.max = originalOptions[scale.id].ticks.max;
363+
}
364+
} else {
341365

342-
if (tickOptions) {
343-
tickOptions.min = scale.originalOptions.ticks.min;
344-
tickOptions.max = scale.originalOptions.ticks.max;
366+
if (timeOptions) {
367+
delete timeOptions.min;
368+
delete timeOptions.max;
369+
}
370+
371+
if (tickOptions) {
372+
delete tickOptions.min;
373+
delete tickOptions.max;
374+
}
345375
}
376+
377+
346378
});
347379

348380
chartInstance.update();

0 commit comments

Comments
 (0)