X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;ds=sidebyside;f=dygraph.js;h=6e9aac7fa12218f617c01d22138c351d3f41df2c;hb=refs%2Fheads%2Ftwo_axes;hp=a73a8e420cc90aff926a55a3bf71e486912b8a86;hpb=d58ae3075a93b64e894e3d99afe124e3c04fde07;p=dygraphs.git diff --git a/dygraph.js b/dygraph.js index a73a8e4..6e9aac7 100644 --- a/dygraph.js +++ b/dygraph.js @@ -318,7 +318,7 @@ Dygraph.prototype.xAxisRange = function() { * Returns a two-element array: [bottom, top]. */ Dygraph.prototype.yAxisRange = function(idx) { - if (typeof(idx) == "undefined") idx == 0; + if (typeof(idx) == "undefined") idx = 0; if (idx < 0 || idx >= this.axes_.length) return null; return [ this.axes_[idx].computedValueRange[0], this.axes_[idx].computedValueRange[1] ]; @@ -691,40 +691,40 @@ Dygraph.prototype.positionLabelsDiv_ = function() { var area = this.plotter_.area; var div = this.attr_("labelsDiv"); - div.style.left = area.x + area.w - this.attr_("labelsDivWidth") + "px"; + div.style.left = area.x + area.w - this.attr_("labelsDivWidth") - 1 + "px"; }; /** * Create the text box to adjust the averaging period - * @return {Object} The newly-created text box * @private */ Dygraph.prototype.createRollInterface_ = function() { - // Destroy any existing roller. - if (this.roller_) this.graphDiv.removeChild(this.roller_); + // Create a roller if one doesn't exist already. + if (!this.roller_) { + this.roller_ = document.createElement("input"); + this.roller_.type = "text"; + this.roller_.style.display = "none"; + this.graphDiv.appendChild(this.roller_); + } + + var display = this.attr_('showRoller') ? 'block' : 'none'; - var display = this.attr_('showRoller') ? "block" : "none"; var textAttr = { "position": "absolute", "zIndex": 10, "top": (this.plotter_.area.h - 25) + "px", "left": (this.plotter_.area.x + 1) + "px", "display": display }; - var roller = document.createElement("input"); - roller.type = "text"; - roller.size = "2"; - roller.value = this.rollPeriod_; + this.roller_.size = "2"; + this.roller_.value = this.rollPeriod_; for (var name in textAttr) { if (textAttr.hasOwnProperty(name)) { - roller.style[name] = textAttr[name]; + this.roller_.style[name] = textAttr[name]; } } - var pa = this.graphDiv; - pa.appendChild(roller); var dygraph = this; - roller.onchange = function() { dygraph.adjustRoll(roller.value); }; - return roller; + this.roller_.onchange = function() { dygraph.adjustRoll(dygraph.roller_.value); }; }; // These functions are taken from MochiKit.Signal @@ -897,8 +897,8 @@ Dygraph.prototype.createDragInterface_ = function() { draggingDate = null; dateRange = null; for (var i = 0; i < self.axes_.length; i++) { - delete this.axes_[i].draggingValue; - delete this.axes_[i].dragValueRange; + delete self.axes_[i].draggingValue; + delete self.axes_[i].dragValueRange; } } }); @@ -1799,7 +1799,7 @@ Dygraph.prototype.predraw_ = function() { // The roller sits in the bottom left corner of the chart. We don't know where // this will be until the options are available, so it's positioned here. - this.roller_ = this.createRollInterface_(); + this.createRollInterface_(); // Same thing applies for the labelsDiv. It's right edge should be flush with // the right edge of the charting area (which may not be the same as the right @@ -1888,11 +1888,6 @@ Dygraph.prototype.drawGraph_ = function() { } var seriesExtremes = this.extremeValues_(series); - extremes[seriesName] = seriesExtremes; - var thisMinY = seriesExtremes[0]; - var thisMaxY = seriesExtremes[1]; - if (minY === null || (thisMinY != null && thisMinY < minY)) minY = thisMinY; - if (maxY === null || (thisMaxY != null && thisMaxY > maxY)) maxY = thisMaxY; if (bars) { for (var j=0; j maxY) - maxY = cumulative_y[x]; + if (cumulative_y[x] > seriesExtremes[1]) { + seriesExtremes[1] = cumulative_y[x]; + } + if (cumulative_y[x] < seriesExtremes[0]) { + seriesExtremes[0] = cumulative_y[x]; + } } } + extremes[seriesName] = seriesExtremes; datasets[i] = series; } @@ -1966,7 +1967,7 @@ Dygraph.prototype.computeYAxes_ = function() { // Get a list of series names. var labels = this.attr_("labels"); - var series = []; + var series = {}; for (var i = 1; i < labels.length; i++) series[labels[i]] = (i - 1); // all options which could be applied per-axis: @@ -2022,6 +2023,17 @@ Dygraph.prototype.computeYAxes_ = function() { this.seriesToAxisMap_[seriesName] = idx; } } + + // Now we remove series from seriesToAxisMap_ which are not visible. We do + // this last so that hiding the first series doesn't destroy the axis + // properties of the primary axis. + var seriesToAxisFiltered = {}; + var vis = this.visibility(); + for (var i = 1; i < labels.length; i++) { + var s = labels[i]; + if (vis[i - 1]) seriesToAxisFiltered[s] = this.seriesToAxisMap_[s]; + } + this.seriesToAxisMap_ = seriesToAxisFiltered; }; /** @@ -2065,7 +2077,7 @@ Dygraph.prototype.computeYAxisRanges_ = function(extremes) { // This is a user-set value range for this axis. axis.computedValueRange = [axis.valueRange[0], axis.valueRange[1]]; } else { - // Calcuate the extremes of extremes. + // Calculate the extremes of extremes. var series = seriesForAxis[i]; var minY = Infinity; // extremes[series[0]][0]; var maxY = -Infinity; // extremes[series[0]][1];