Merge remote-tracking branch 'upstream/master' into rgbcolor_change
authorAdil <adilflorida@gmail.com>
Wed, 12 Dec 2012 18:24:30 +0000 (13:24 -0500)
committerAdil <adilflorida@gmail.com>
Wed, 12 Dec 2012 18:24:30 +0000 (13:24 -0500)
1  2 
dygraph.js

diff --combined dygraph.js
@@@ -91,8 -91,7 +91,8 @@@ Dygraph.DEFAULT_ROLL_PERIOD = 1
  Dygraph.DEFAULT_WIDTH = 480;
  Dygraph.DEFAULT_HEIGHT = 320;
  
 -Dygraph.ANIMATION_STEPS = 10;
 +// For max 60 Hz. animation:
 +Dygraph.ANIMATION_STEPS = 12;
  Dygraph.ANIMATION_DURATION = 200;
  
  // These are defined before DEFAULT_ATTRS so that it can refer to them.
@@@ -577,7 -576,6 +577,6 @@@ Dygraph.prototype.attr_ = function(name
      Dygraph.OPTIONS_REFERENCE[name] = true;
    }
  // </REMOVE_FOR_COMBINED>
    return seriesName ? this.attributes_.getForSeries(name, seriesName) : this.attributes_.get(name);
  };
  
@@@ -1141,7 -1139,7 +1140,7 @@@ Dygraph.prototype.getPropertiesForSerie
      column: idx,
      visible: this.visibility()[idx - 1],
      color: this.colorsMap_[series_name],
-     axis: 1 + this.seriesToAxisMap_[series_name]
+     axis: 1 + this.attributes_.axisForSeries(series_name)
    };
  };
  
@@@ -2424,9 -2422,8 +2423,8 @@@ Dygraph.prototype.renderGraph_ = functi
   * currently being displayed. This includes things like the number of axes and
   * the style of the axes. It does not include the range of each axis and its
   * tick marks.
-  * This fills in this.axes_ and this.seriesToAxisMap_.
+  * This fills in this.axes_.
   * axes_ = [ { options } ]
-  * seriesToAxisMap_ = { seriesName: 0, seriesName2: 1, ... }
   *   indices are into the axes_ array.
   */
  Dygraph.prototype.computeYAxes_ = function() {
      }
    }
  
-   this.axes_ = [{ yAxisId : 0, g : this }];  // always have at least one y-axis.
-   this.seriesToAxisMap_ = {};
-   // Get a list of series names.
-   var labels = this.attr_("labels");
-   var series = {};
-   for (i = 1; i < labels.length; i++) series[labels[i]] = (i - 1);
-   // all options which could be applied per-axis:
-   var axisOptions = [
-     'includeZero',
-     'valueRange',
-     'labelsKMB',
-     'labelsKMG2',
-     'pixelsPerYLabel',
-     'yAxisLabelWidth',
-     'axisLabelFontSize',
-     'axisTickSize',
-     'logscale'
-   ];
-   // Copy global axis options over to the first axis.
-   for (i = 0; i < axisOptions.length; i++) {
-     var k = axisOptions[i];
-     v = this.attr_(k);
-     if (v) this.axes_[0][k] = v;
-   }
+   // this.axes_ doesn't match this.attributes_.axes_.options. It's used for
+   // data computation as well as options storage.
    // Go through once and add all the axes.
-   for (seriesName in series) {
-     if (!series.hasOwnProperty(seriesName)) continue;
-     axis = this.attr_("axis", seriesName);
-     if (axis === null) {
-       this.seriesToAxisMap_[seriesName] = 0;
-       continue;
-     }
-     if (typeof(axis) == 'object') {
-       // Add a new axis, making a copy of its per-axis options.
-       opts = {};
-       Dygraph.update(opts, this.axes_[0]);
-       Dygraph.update(opts, { valueRange: null });  // shouldn't inherit this.
-       var yAxisId = this.axes_.length;
-       opts.yAxisId = yAxisId;
-       opts.g = this;
-       Dygraph.update(opts, axis);
-       this.axes_.push(opts);
-       this.seriesToAxisMap_[seriesName] = yAxisId;
-     }
-   }
-   // Go through one more time and assign series to an axis defined by another
-   // series, e.g. { 'Y1: { axis: {} }, 'Y2': { axis: 'Y1' } }
-   for (seriesName in series) {
-     if (!series.hasOwnProperty(seriesName)) continue;
-     axis = this.attr_("axis", seriesName);
-     if (typeof(axis) == 'string') {
-       if (!this.seriesToAxisMap_.hasOwnProperty(axis)) {
-         this.error("Series " + seriesName + " wants to share a y-axis with " +
-                    "series " + axis + ", which does not define its own axis.");
-         return null;
-       }
-       var idx = this.seriesToAxisMap_[axis];
-       this.seriesToAxisMap_[seriesName] = idx;
-     }
+   this.axes_ = [];
+   
+   for (axis = 0; axis < this.attributes_.numAxes(); axis++) {
+     // Add a new axis, making a copy of its per-axis options.
+     opts = { g : this };
+     Dygraph.update(opts, this.attributes_.axisOptions(axis));
+     this.axes_[axis] = opts;
    }
  
    if (valueWindows !== undefined) {
        }
      }
    }
  };
  
  /**
   * @return {Number} the number of axes.
   */
  Dygraph.prototype.numAxes = function() {
-   var last_axis = 0;
-   for (var series in this.seriesToAxisMap_) {
-     if (!this.seriesToAxisMap_.hasOwnProperty(series)) continue;
-     var idx = this.seriesToAxisMap_[series];
-     if (idx > last_axis) last_axis = idx;
-   }
-   return 1 + last_axis;
+   return this.attributes_.numAxes();
  };
  
  /**
   */
  Dygraph.prototype.axisPropertiesForSeries = function(series) {
    // TODO(danvk): handle errors.
-   return this.axes_[this.seriesToAxisMap_[series]];
+   return this.axes_[this.attributes_.axisForSeries(series)];
  };
  
  /**
   * This fills in the valueRange and ticks fields in each entry of this.axes_.
   */
  Dygraph.prototype.computeYAxisRanges_ = function(extremes) {
-   // Build a map from axis number -> [list of series names]
-   var seriesForAxis = [], series;
-   for (series in this.seriesToAxisMap_) {
-     if (!this.seriesToAxisMap_.hasOwnProperty(series)) continue;
-     var idx = this.seriesToAxisMap_[series];
-     while (seriesForAxis.length <= idx) seriesForAxis.push([]);
-     seriesForAxis[idx].push(series);
-   }
+   var series;
+   var numAxes = this.attributes_.numAxes();
  
    // Compute extreme values, a span and tick marks for each axis.
-   for (var i = 0; i < this.axes_.length; i++) {
+   for (var i = 0; i < numAxes; i++) {
      var axis = this.axes_[i];
  
-     if (!seriesForAxis[i]) {
+     series = this.attributes_.seriesForAxis(i);
+     if (series.length == 0) {
        // If no series are defined or visible then use a reasonable default
        axis.extremeRange = [0, 1];
      } else {
        // Calculate the extremes of extremes.
-       series = seriesForAxis[i];
        var minY = Infinity;  // extremes[series[0]][0];
        var maxY = -Infinity;  // extremes[series[0]][1];
        var extremeMinY, extremeMaxY;
@@@ -3096,7 -3027,7 +3028,7 @@@ Dygraph.prototype.parseArray_ = functio
      }
    }
  
 -  if (Dygraph.isDateLike(data[0][0])) {
 +  if (Dygraph.isDateLike(data[0][0]) {
      // Some intelligent defaults for a date x-axis.
      this.attrs_.axes.x.valueFormatter = Dygraph.dateString_;
      this.attrs_.axes.x.axisLabelFormatter = Dygraph.dateAxisFormatter;
@@@ -3364,6 -3295,8 +3296,8 @@@ Dygraph.prototype.updateOptions = funct
  
    Dygraph.updateDeep(this.user_attrs_, attrs);
  
+   this.attributes_.reparseSeries();
    if (file) {
      this.file_ = file;
      if (!block_redraw) this.start_();