X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=src%2Fextras%2Fsynchronizer.js;h=6f369f3a0e886c0308fc71cd3da4d8255b9e7fff;hb=627e054d1d77a0a8b02ed684b4105c5beafbc52a;hp=bd7505065bafb3495d9a7a7658631b36e7ec1288;hpb=87cdddc79f32ca61d0843c23fa8847595a7e74d4;p=dygraphs.git diff --git a/src/extras/synchronizer.js b/src/extras/synchronizer.js old mode 100644 new mode 100755 index bd75050..6f369f3 --- a/src/extras/synchronizer.js +++ b/src/extras/synchronizer.js @@ -35,7 +35,14 @@ /* global Dygraph:false */ 'use strict'; -Dygraph.synchronize = function(/* dygraphs..., opts */) { +var Dygraph; +if (window.Dygraph) { + Dygraph = window.Dygraph; +} else if (typeof(module) !== 'undefined') { + Dygraph = require('../dygraph'); +} + +var synchronize = function(/* dygraphs..., opts */) { if (arguments.length === 0) { throw 'Invalid invocation of Dygraph.synchronize(). Need >= 1 argument.'; } @@ -107,7 +114,7 @@ Dygraph.synchronize = function(/* dygraphs..., opts */) { if (!prevCallbacks[j]) { prevCallbacks[j] = {}; } - for (var k in callBackTypes) { + for (var k = callBackTypes.length - 1; k >= 0; k--) { prevCallbacks[j][callBackTypes[k]] = dygraphs[j].getFunctionOption(callBackTypes[k]); } } @@ -146,6 +153,16 @@ Dygraph.synchronize = function(/* dygraphs..., opts */) { }; }; +function arraysAreEqual(a, b) { + if (!Array.isArray(a) || !Array.isArray(b)) return false; + var i = a.length; + if (i !== b.length) return false; + while (i--) { + if (a[i] !== b[i]) return false; + } + return true; +} + function attachZoomHandlers(gs, syncOpts, prevCallbacks) { var block = false; for (var i = 0; i < gs.length; i++) { @@ -162,15 +179,22 @@ function attachZoomHandlers(gs, syncOpts, prevCallbacks) { for (var j = 0; j < gs.length; j++) { if (gs[j] == me) { if (prevCallbacks[j] && prevCallbacks[j].drawCallback) { - prevCallbacks[j].drawCallback(me, initial); + prevCallbacks[j].drawCallback.apply(this, arguments); } continue; } + + // Only redraw if there are new options + if (arraysAreEqual(opts.dateWindow, gs[j].getOption('dateWindow')) && + arraysAreEqual(opts.valueRange, gs[j].getOption('valueRange'))) { + continue; + } + gs[j].updateOptions(opts); } block = false; } - }, false /* no need to redraw */); + }, true /* no need to redraw */); } } @@ -187,7 +211,7 @@ function attachSelectionHandlers(gs, prevCallbacks) { for (var i = 0; i < gs.length; i++) { if (me == gs[i]) { if (prevCallbacks[i] && prevCallbacks[i].highlightCallback) { - prevCallbacks[i].highlightCallback(event, x, points, row, seriesName); + prevCallbacks[i].highlightCallback.apply(this, arguments); } continue; } @@ -205,7 +229,7 @@ function attachSelectionHandlers(gs, prevCallbacks) { for (var i = 0; i < gs.length; i++) { if (me == gs[i]) { if (prevCallbacks[i] && prevCallbacks[i].unhighlightCallback) { - prevCallbacks[i].unhighlightCallback(event); + prevCallbacks[i].unhighlightCallback.apply(this, arguments); } continue; } @@ -213,8 +237,10 @@ function attachSelectionHandlers(gs, prevCallbacks) { } block = false; } - }); + }, true /* no need to redraw */); } } +Dygraph.synchronize = synchronize; + })();