X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=src%2Fextras%2Fsynchronizer.js;h=6f369f3a0e886c0308fc71cd3da4d8255b9e7fff;hb=f0e472002843b5e61aa9467f97f755280c91a46b;hp=78efbcba29508ba0bfcc7d956f735f7748f2eff0;hpb=48651beba22d456c1226b62392072684298aca12;p=dygraphs.git diff --git a/src/extras/synchronizer.js b/src/extras/synchronizer.js old mode 100644 new mode 100755 index 78efbcb..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.'; } @@ -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++) { @@ -166,11 +183,18 @@ function attachZoomHandlers(gs, syncOpts, prevCallbacks) { } 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 */); } } @@ -213,8 +237,10 @@ function attachSelectionHandlers(gs, prevCallbacks) { } block = false; } - }); + }, true /* no need to redraw */); } } +Dygraph.synchronize = synchronize; + })();