X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=src%2Fextras%2Fsynchronizer.js;h=6f369f3a0e886c0308fc71cd3da4d8255b9e7fff;hb=6611837c5490f2f4b6d61967aa1ad658ed5f11d4;hp=dd4329cf25b0942b5f61b82e81c4ece6087d56c4;hpb=846e9b3e9bf886703925eef47bc75b359882dcd8;p=dygraphs.git diff --git a/src/extras/synchronizer.js b/src/extras/synchronizer.js old mode 100644 new mode 100755 index dd4329c..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,6 +183,13 @@ 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; @@ -217,4 +241,6 @@ function attachSelectionHandlers(gs, prevCallbacks) { } } +Dygraph.synchronize = synchronize; + })();