From 227b93cc36500fbab1edab16880f1aa696f8a408 Mon Sep 17 00:00:00 2001
From: Dan Vanderkam <danvdk@gmail.com>
Date: Wed, 29 Sep 2010 18:48:47 +0200
Subject: [PATCH] change to an implementation based on set names

---
 dygraph-canvas.js                      |  7 +++----
 dygraph.js                             | 22 +++++++++++-----------
 tests/linear-regression-addseries.html |  6 +++---
 tests/per-series.html                  |  6 +++---
 4 files changed, 20 insertions(+), 21 deletions(-)

diff --git a/dygraph-canvas.js b/dygraph-canvas.js
index 20e1f8b..3b2ffa7 100644
--- a/dygraph-canvas.js
+++ b/dygraph-canvas.js
@@ -754,16 +754,15 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() {
 
   for (var i = 0; i < setCount; i++) {
     var setName = setNames[i];
-    var setIdx = this.dygraph_.indexFromSetName(setName);
     var color = this.colors[setName];
-    var strokeWidth = this.dygraph_.attr_("strokeWidth", setIdx);
+    var strokeWidth = this.dygraph_.attr_("strokeWidth", setName);
 
     // setup graphics context
     context.save();
     var point = this.layout.points[0];
-    var pointSize = this.dygraph_.attr_("pointSize", setIdx);
+    var pointSize = this.dygraph_.attr_("pointSize", setName);
     var prevX = null, prevY = null;
-    var drawPoints = this.dygraph_.attr_("drawPoints", setIdx);
+    var drawPoints = this.dygraph_.attr_("drawPoints", setName);
     var points = this.layout.points;
     for (var j = 0; j < points.length; j++) {
       var point = points[j];
diff --git a/dygraph.js b/dygraph.js
index 929a9ea..2574d4b 100644
--- a/dygraph.js
+++ b/dygraph.js
@@ -240,12 +240,12 @@ Dygraph.prototype.__init__ = function(div, file, attrs) {
   this.start_();
 };
 
-Dygraph.prototype.attr_ = function(name, series) {
-  if (series &&
-      typeof(this.user_attrs_[series]) != 'undefined' &&
-      this.user_attrs_[series] != null &&
-      typeof(this.user_attrs_[series][name]) != 'undefined') {
-    return this.user_attrs_[series][name];
+Dygraph.prototype.attr_ = function(name, seriesName) {
+  if (seriesName &&
+      typeof(this.user_attrs_[seriesName]) != 'undefined' &&
+      this.user_attrs_[seriesName] != null &&
+      typeof(this.user_attrs_[seriesName][name]) != 'undefined') {
+    return this.user_attrs_[seriesName][name];
   } else if (typeof(this.user_attrs_[name]) != 'undefined') {
     return this.user_attrs_[name];
   } else if (typeof(this.attrs_[name]) != 'undefined') {
@@ -1026,9 +1026,9 @@ Dygraph.prototype.updateSelection_ = function() {
   if (this.previousVerticalX_ >= 0) {
     // Determine the maximum highlight circle size.
     var maxCircleSize = 0;
-    var num_series = this.attr_('labels').length;
-    for (var i = 1; i < num_series; i++) {
-      var r = this.attr_('highlightCircleSize', i);
+    var labels = this.attr_('labels');
+    for (var i = 1; i < labels.length; i++) {
+      var r = this.attr_('highlightCircleSize', labels[i]);
       if (r > maxCircleSize) maxCircleSize = r;
     }
     var px = this.previousVerticalX_;
@@ -1069,8 +1069,8 @@ Dygraph.prototype.updateSelection_ = function() {
     ctx.save();
     for (var i = 0; i < this.selPoints_.length; i++) {
       if (!isOK(this.selPoints_[i].canvasy)) continue;
-      var setIdx = this.indexFromSetName(this.selPoints_[i].name);
-      var circleSize = this.attr_('highlightCircleSize', setIdx);
+      var circleSize =
+        this.attr_('highlightCircleSize', this.selPoints_[i].name);
       ctx.beginPath();
       ctx.fillStyle = this.plotter_.colors[this.selPoints_[i].name];
       ctx.arc(canvasx, this.selPoints_[i].canvasy, circleSize,
diff --git a/tests/linear-regression-addseries.html b/tests/linear-regression-addseries.html
index 530cea3..4445f47 100644
--- a/tests/linear-regression-addseries.html
+++ b/tests/linear-regression-addseries.html
@@ -88,16 +88,16 @@
         for (var i = 0; i < labels.length; i++) {
           new_labels.push(labels[i]);
           if (i) new_colors.push(orig_colors[i - 1]);
-          new_opts[new_colors.length] = null;
           if (coeffs[i]) {
             // Darken the series by 50% to generate its regression.
-            new_labels.push(labels[i] + " Regression");
+            var label = labels[i] + " Regression";
+            new_labels.push(label);
             var c = new RGBColor(orig_colors[i - 1]);
             c.r = Math.floor(255 - 0.5 * (255 - c.r));
             c.g = Math.floor(255 - 0.5 * (255 - c.g));
             c.b = Math.floor(255 - 0.5 * (255 - c.b));
             new_colors.push(c.toHex());
-            new_opts[new_colors.length] = {
+            new_opts[label] = {
               drawPoints: false,
               strokeWidth: 1.0
             };
diff --git a/tests/per-series.html b/tests/per-series.html
index 8ac90df..7b98dea 100644
--- a/tests/per-series.html
+++ b/tests/per-series.html
@@ -33,18 +33,18 @@
               },
               {
                 strokeWidth: 2,
-                1: {
+                'parabola': {
                   strokeWidth: 0.0,
                   drawPoints: true,
                   pointSize: 4,
                   highlightCircleSize: 6
                 },
-                2: {
+                'line': {
                   strokeWidth: 1.0,
                   drawPoints: true,
                   pointSize: 1.5
                 },
-                3: {
+                'sine wave': {
                   strokeWidth: 3,
                   highlightCircleSize: 10
                 }
-- 
2.7.4