throw 'Invalid invocation of Dygraph.synchronize(). ' +
'Need two or more dygraphs to synchronize.';
}
+
+ var readycount = dygraphs.length;
+ for (var i = 0; i < dygraphs.length; i++) {
+ var g = dygraphs[i];
+ g.ready( function() {
+ if (--readycount == 0) {
+ // Listen for draw, highlight, unhighlight callbacks.
+ if (opts.zoom) {
+ attachZoomHandlers(dygraphs, opts, prevCallbacks);
+ }
- // Listen for draw, highlight, unhighlight callbacks.
- if (opts.zoom) {
- attachZoomHandlers(dygraphs, opts, prevCallbacks);
- }
-
- if (opts.selection) {
- attachSelectionHandlers(dygraphs, prevCallbacks);
+ if (opts.selection) {
+ attachSelectionHandlers(dygraphs, prevCallbacks);
+ }
+ }
+ });
}
-
+
return {
detach: function() {
for (var i = 0; i < dygraphs.length; i++) {
var me = this;
for (var i = 0; i < gs.length; i++) {
if (me == gs[i]) continue;
- var idx = dygraphsBinarySearch(gs[i], x);
+ var idx = gs[i].getRowForX(x);
if (idx !== null) {
gs[i].setSelection(idx, seriesName);
}
}
}
-// Returns the index corresponding to xVal, or null if there is none.
-function dygraphsBinarySearch(g, xVal) {
- var low = 0,
- high = g.numRows() - 1;
-
- while (low <= high) {
- var idx = (high + low) >> 1;
- var x = g.getValue(idx, 0);
- if (x < xVal) {
- low = idx + 1;
- } else if (x > xVal) {
- high = idx - 1;
- } else {
- return idx;
- }
- }
-
- // TODO: give an option to find the closest point, i.e. not demand an exact match.
- return null;
-}
-
})();