Anatomy of a range selector
[dygraphs.git] / gallery / synchronize.js
... / ...
CommitLineData
1/*global Gallery,Dygraph,data */
2/*jshint loopfunc:true */
3/*global NoisyData */
4Gallery.register(
5 'synchronize',
6 {
7 name: 'Synchronization',
8 title: 'Multiple graphs in sync',
9 setup: function(parent) {
10 parent.innerHTML = [
11 '<style>',
12 ' .chart { width: 500px; height: 300px; }',
13 ' .chart-container { overflow: hidden; }',
14 ' #div1 { float: left; }',
15 ' #div2 { float: left; }',
16 ' #div3 { float: left; clear: left; }',
17 ' #div4 { float: left; }',
18 '</style>',
19 '<p>Zooming and panning on any of the charts will zoom and pan all the',
20 'others. Selecting points on one will select points on the others.</p>',
21 '<p>To use this, source <a href="https://github.com/danvk/dygraphs/blob/master/extras/synchronizer.js"><code>extras/synchronizer.js</code></a> on your page.',
22 'See the comments in that file for usage.</p>',
23 '<div class="chart-container">',
24 ' <div id="div1" class="chart"></div>',
25 ' <div id="div2" class="chart"></div>',
26 ' <div id="div3" class="chart"></div>',
27 ' <div id="div4" class="chart"></div>',
28 '</div>',
29 '<p>',
30 ' Synchronize what?',
31 ' <input type=checkbox id="chk-zoom" checked><label for="chk-zoom"> Zoom</label>',
32 ' <input type=checkbox id="chk-selection" checked><label for="chk-selection"> Selection</label>',
33 '</p>'
34 ].join("\n");
35 },
36 run: function() {
37 var gs = [];
38 var blockRedraw = false;
39 for (var i = 1; i <= 4; i++) {
40 gs.push(
41 new Dygraph(
42 document.getElementById("div" + i),
43 NoisyData, {
44 rollPeriod: 7,
45 errorBars: true,
46 }
47 )
48 );
49 }
50 var sync = Dygraph.synchronize(gs);
51
52 function update() {
53 var zoom = document.getElementById('chk-zoom').checked;
54 var selection = document.getElementById('chk-selection').checked;
55 sync.detach();
56 sync = Dygraph.synchronize(gs, {
57 zoom: zoom,
58 selection: selection
59 });
60 }
61 $('#chk-zoom, #chk-selection').change(update);
62 }
63 });