X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=dygraph-layout.js;h=552911e3a0f892e43e5fa118a7c715e22a2fa5b5;hb=5605628cc2f2ca8d4f3b297a3d15dbded2c07f1e;hp=3e8a7614dc37b4e1611f0cdc4c4201dea959f15c;hpb=fa460473ef9397759466361ff32de56a4f8fa956;p=dygraphs.git diff --git a/dygraph-layout.js b/dygraph-layout.js index 3e8a761..552911e 100644 --- a/dygraph-layout.js +++ b/dygraph-layout.js @@ -130,7 +130,7 @@ DygraphLayout.prototype.setAnnotations = function(ann) { var parse = this.attr_('xValueParser') || function(x) { return x; }; for (var i = 0; i < ann.length; i++) { var a = {}; - if (!ann[i].xval && !ann[i].x) { + if (!ann[i].xval && ann[i].x === undefined) { this.dygraph_.error("Annotations must have an 'x' property"); return; } @@ -211,6 +211,10 @@ DygraphLayout.prototype._evaluateLineCharts = function() { // on chrome+linux, they are 6 times more expensive than iterating through the // points and drawing the lines. The brunt of the cost comes from allocating // the |point| structures. + var boundaryIdStart = 0; + if (this.dygraph_.boundaryIds_.length > 0) { + boundaryIdStart = this.dygraph_.boundaryIds_[this.dygraph_.boundaryIds_.length-1][0] + } for (var setIdx = 0; setIdx < this.datasets.length; setIdx++) { var dataset = this.datasets[setIdx]; var setName = this.setNames[setIdx]; @@ -242,7 +246,8 @@ DygraphLayout.prototype._evaluateLineCharts = function() { y: yNormal, xval: xValue, yval: yValue, - name: setName // TODO(danvk): is this really necessary? + name: setName, // TODO(danvk): is this really necessary? + idx: j + boundaryIdStart }; } @@ -381,7 +386,7 @@ DygraphLayout.prototype.removeAllDatasets = function() { DygraphLayout.prototype.unstackPointAtIndex = function(setIdx, row) { var point = this.points[setIdx][row]; // If the point is missing, no unstacking is necessary - if (!point.yval) { + if (!Dygraph.isValidPoint(point)) { return point; } @@ -397,15 +402,15 @@ DygraphLayout.prototype.unstackPointAtIndex = function(setIdx, row) { // The unstacked yval is equal to the current yval minus the yval of the // next point at the same xval. - if (setIdx == this.points.length - 1) { - // We're the last series, so no unstacking is necessary. - return unstackedPoint; - } - - var points = this.points[setIdx + 1]; - if (points[row].xval == point.xval && // should always be true? - points[row].yval) { - unstackedPoint.yval -= points[row].yval; + // We need to iterate over setIdx just in case some series have invalid values + // at current row + for(setIdx++; setIdx < this.points.length; setIdx++) { + var nextPoint = this.points[setIdx][row]; + if (nextPoint.xval == point.xval && // should always be true? + Dygraph.isValidPoint(nextPoint)) { + unstackedPoint.yval -= nextPoint.yval; + break; // stop at first valid point + } } return unstackedPoint;