Fix problems with multiple null values in a row for stepped graphs.
[dygraphs.git] / dygraph-canvas.js
index 09ce16b..d5c812e 100644 (file)
@@ -513,26 +513,26 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() {
           // TODO(danvk): here
           if (stepPlot) {
             var newYs = [ prevY - point.errorPlus * yscale,
-                        prevY + point.errorMinus * yscale ];
+                          prevY + point.errorMinus * yscale ];
             prevY = point.y;
           } else {
             var newYs = [ point.y - point.errorPlus * yscale,
-                        point.y + point.errorMinus * yscale ];
+                          point.y + point.errorMinus * yscale ];
           }
           newYs[0] = this.area.h * newYs[0] + this.area.y;
           newYs[1] = this.area.h * newYs[1] + this.area.y;
           if (!isNaN(prevX)) {
             if (stepPlot) {
-                ctx.moveTo(prevX, newYs[0]);
+              ctx.moveTo(prevX, newYs[0]);
             } else {
-                ctx.moveTo(prevX, prevYs[0]);
+              ctx.moveTo(prevX, prevYs[0]);
             }
             ctx.lineTo(point.canvasx, newYs[0]);
             ctx.lineTo(point.canvasx, newYs[1]);
             if (stepPlot) {
-                ctx.lineTo(prevX, newYs[1]);
+              ctx.lineTo(prevX, newYs[1]);
             } else {
-                ctx.lineTo(prevX, prevYs[1]);
+              ctx.lineTo(prevX, prevYs[1]);
             }
             ctx.closePath();
           }
@@ -585,9 +585,9 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() {
           if (!isNaN(prevX)) {
             ctx.moveTo(prevX, prevYs[0]);
             if (stepPlot) {
-                ctx.lineTo(point.canvasx, prevYs[0]);
+              ctx.lineTo(point.canvasx, prevYs[0]);
             } else {
-                ctx.lineTo(point.canvasx, newYs[0]);
+              ctx.lineTo(point.canvasx, newYs[0]);
             }
             ctx.lineTo(point.canvasx, newYs[1]);
             ctx.lineTo(prevX, prevYs[1]);
@@ -616,6 +616,15 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() {
       var point = points[j];
       if (point.name == setName) {
         if (!isOK(point.canvasy)) {
+          if (stepPlot && prevX != null) {
+            // Draw a horizontal line to the start of the missing data
+            ctx.beginPath();
+            ctx.strokeStyle = color;
+            ctx.lineWidth = this.options.strokeWidth;
+            ctx.moveTo(prevX, prevY);
+            ctx.lineTo(point.canvasx, prevY);
+            ctx.stroke();
+          }
           // this will make us move to the next point, not draw a line to it.
           prevX = prevY = null;
         } else {
@@ -633,7 +642,7 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() {
             ctx.lineWidth = this.options.strokeWidth;
             ctx.moveTo(prevX, prevY);
             if (stepPlot) {
-                ctx.lineTo(point.canvasx, prevY);
+              ctx.lineTo(point.canvasx, prevY);
             }
             prevX = point.canvasx;
             prevY = point.canvasy;