From c5b5564e7993b0c6e708d2d0725d27a49755de3a Mon Sep 17 00:00:00 2001 From: mjanda Date: Mon, 2 Feb 2015 10:14:13 +0100 Subject: [PATCH] Store old callbacks and reattach them on detach() Conflicts: extras/synchronizer.js --- extras/synchronizer.js | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/extras/synchronizer.js b/extras/synchronizer.js index 922da41..e0459fc 100644 --- a/extras/synchronizer.js +++ b/extras/synchronizer.js @@ -44,6 +44,12 @@ Dygraph.synchronize = function(/* dygraphs..., opts */) { }; var dygraphs = []; + var prevCallbacks = { + draw: null, + highlight: null, + unhighlight: null + }; + var parseOpts = function(obj) { if (!(obj instanceof Object)) { throw 'Last argument must be either Dygraph or Object.'; @@ -93,11 +99,11 @@ Dygraph.synchronize = function(/* dygraphs..., opts */) { // Listen for draw, highlight, unhighlight callbacks. if (opts.zoom) { - attachZoomHandlers(dygraphs); + attachZoomHandlers(dygraphs, opts, prevCallbacks); } if (opts.selection) { - attachSelectionHandlers(dygraphs); + attachSelectionHandlers(dygraphs, prevCallbacks); } return { @@ -105,12 +111,12 @@ Dygraph.synchronize = function(/* dygraphs..., opts */) { for (var i = 0; i < dygraphs.length; i++) { var g = dygraphs[i]; if (opts.zoom) { - g.updateOptions({drawCallback: null}); + g.updateOptions({drawCallback: prevCallbacks.draw}); } if (opts.selection) { g.updateOptions({ - highlightCallback: null, - unhighlightCallback: null + highlightCallback: prevCallbacks.highlight, + unhighlightCallback: prevCallbacks.unhighlight }); } } @@ -121,15 +127,14 @@ Dygraph.synchronize = function(/* dygraphs..., opts */) { }; }; -// TODO: call any `drawCallback`s that were set before this. -function attachZoomHandlers(gs) { +function attachZoomHandlers(gs, syncOpts, prevCallbacks) { var block = false; for (var i = 0; i < gs.length; i++) { var g = gs[i]; - var oldDC = g.getFunctionOption('drawCallback'); + prevCallbacks.draw = g.getFunctionOption('drawCallback'); g.updateOptions({ drawCallback: function(me, initial) { - if (oldDC) oldDC(me, initial); + if (prevCallbacks.draw) prevCallbacks.draw(me, initial); if (block || initial) return; block = true; var range = me.xAxisRange(); @@ -147,15 +152,15 @@ function attachZoomHandlers(gs) { } } -function attachSelectionHandlers(gs) { +function attachSelectionHandlers(gs, prevCallbacks) { var block = false; for (var i = 0; i < gs.length; i++) { var g = gs[i]; - var oldHC = g.getFunctionOption('highlightCallback'); - var oldUHC = g.getFunctionOption('unhighlightCallback'); + prevCallbacks.highlight = g.getFunctionOption('highlightCallback'); + prevCallbacks.unhighlight = g.getFunctionOption('unhighlightCallback'); g.updateOptions({ highlightCallback: function(event, x, points, row, seriesName) { - if (oldHC) oldHC(event, x, points, row, seriesName); + if (prevCallbacks.highlight) prevCallbacks.highlight(event, x, points, row, seriesName); if (block) return; block = true; var me = this; @@ -169,7 +174,7 @@ function attachSelectionHandlers(gs) { block = false; }, unhighlightCallback: function(event) { - if (oldUHC) oldUHC(event); + if (prevCallbacks.unhighlight) prevCallbacks.unhighlight(event); if (block) return; block = true; var me = this; -- 2.7.4