Merge branch 'master' of git://github.com/flooey/dygraphs
authorDan Vanderkam <danvk@google.com>
Mon, 8 Mar 2010 23:17:34 +0000 (15:17 -0800)
committerDan Vanderkam <danvk@google.com>
Mon, 8 Mar 2010 23:17:34 +0000 (15:17 -0800)
dygraph.js
tests/dynamic-update.html [new file with mode: 0644]
tests/reverse-y-axis.html [new file with mode: 0644]

index 4b9b6f1..fb71149 100644 (file)
@@ -1359,7 +1359,7 @@ Dygraph.numericTicks = function(minV, maxV, self) {
       scale = base_scale * mults[j];
       low_val = Math.floor(minV / scale) * scale;
       high_val = Math.ceil(maxV / scale) * scale;
-      nTicks = (high_val - low_val) / scale;
+      nTicks = Math.abs(high_val - low_val) / scale;
       var spacing = self.height_ / nTicks;
       // wish I could break out of both loops at once...
       if (spacing > pixelsPerTick) break;
@@ -1381,6 +1381,9 @@ Dygraph.numericTicks = function(minV, maxV, self) {
     k_labels = [ "k", "M", "G", "T" ];
   }
 
+  // Allow reverse y-axis if it's explicitly requested.
+  if (low_val > high_val) scale *= -1;
+
   for (var i = 0; i < nTicks; i++) {
     var tickV = low_val + i * scale;
     var absTickV = Math.abs(tickV);
@@ -2149,7 +2152,7 @@ Dygraph.prototype.updateOptions = function(attrs) {
 
   // TODO(danvk): this doesn't match the constructor logic
   this.layout_.updateOptions({ 'errorBars': this.attr_("errorBars") });
-  if (attrs['file'] && attrs['file'] != this.file_) {
+  if (attrs['file']) {
     this.file_ = attrs['file'];
     this.start_();
   } else {
diff --git a/tests/dynamic-update.html b/tests/dynamic-update.html
new file mode 100644 (file)
index 0000000..2b26367
--- /dev/null
@@ -0,0 +1,44 @@
+<html>
+  <head>
+    <title>Live random data</title>
+    <!--[if IE]>
+    <script type="text/javascript" src="excanvas.js"></script>
+    <![endif]-->
+    <script type="text/javascript" src="../dygraph-combined.js"></script>
+    <script type="text/javascript" src="../dygraph-canvas.js"></script>
+    <script type="text/javascript" src="../dygraph.js"></script>
+  </head>
+  <body>
+    <h3 style="width:800px; text-align: center;">Live random data</h3>
+    <div id="div_g" style="width:800px; height:400px;"></div>
+
+    <script type="text/javascript">
+      var data = [];
+      var t = new Date();
+      for (var i = 10; i >= 0; i--) {
+        var x = new Date(t.getTime() - i * 1000);
+        data.push([x, Math.random()]);
+      }
+
+      var g = new Dygraph(document.getElementById("div_g"), data,
+                          {
+                            drawPoints: true,
+                            showRoller: true,
+                            valueRange: [0.0, 1.2],
+                            labels: ['Time', 'Random']
+                          });
+      setInterval(function() {
+        var x = new Date();  // current time
+        var y = Math.random();
+        data.push([x, y]);
+        g.updateOptions( { 'file': data } );
+      }, 1000);
+
+    </script>
+
+    <p>This test is modeled after a <a
+      href="http://www.highcharts.com/demo/?example=dynamic-update&theme=default">highcharts
+      test</a>. New points should appear once per second. Try zooming and
+    panning over to the right edge to watch them show up.</p>
+  </body>
+</html>
diff --git a/tests/reverse-y-axis.html b/tests/reverse-y-axis.html
new file mode 100644 (file)
index 0000000..7206b90
--- /dev/null
@@ -0,0 +1,55 @@
+<html>
+  <head>
+    <title>reverse y-axis</title>
+    <!--[if IE]>
+    <script type="text/javascript" src="excanvas.js"></script>
+    <![endif]-->
+    <script type="text/javascript" src="../dygraph-combined.js"></script>
+    <script type="text/javascript" src="../dygraph-canvas.js"></script>
+    <script type="text/javascript" src="../dygraph.js"></script>
+  </head>
+  <body>
+    <h2>Reverse y-axis</h2>
+    <font size=-1>This test uses the same data as the <a
+        href='demo.html'>demo</a> test, but reverses the y-axis.</font><br/>
+    <table><tr><td>
+    <div id="demodiv"></div>
+    </td><td valign=top>
+    <div id="status" style="width:200px; font-size:0.8em; padding-top:5px;"></div>
+    </td>
+    </tr></table>
+    <script type="text/javascript">
+      g = new DateGraph(
+              document.getElementById("demodiv"),
+              function() {
+                var zp = function(x) { if (x < 10) return "0"+x; else return x; };
+                var r = "date,parabola,line,another line,sine wave\n";
+                for (var i=1; i<=31; i++) {
+                r += "200610" + zp(i);
+                r += "," + 10*(i*(31-i));
+                r += "," + 10*(8*i);
+                r += "," + 10*(250 - 8*i);
+                r += "," + 10*(125 + 125 * Math.sin(0.3*i));
+                r += "\n";
+                }
+                return r;
+              },
+              null,
+              {
+                rollPeriod: 1,
+                labelsDiv: document.getElementById('status'),
+                labelsSeparateLines: true,
+                labelsKMB: true,
+                colors: ["rgb(51,204,204)",
+                         "rgb(255,100,100)",
+                         "#00DD55",
+                         "rgba(50,50,200,0.4)"],
+                padding: {left: 40, right: 30, top: 15, bottom: 15},
+                width: 480,
+                height: 320,
+                valueRange: [3000, 0]  // Reverse y-axis
+              }
+          );
+    </script>
+</body>
+</html>