From 54f4c379dcad2be2e6b2922b9e25e46352ee604d Mon Sep 17 00:00:00 2001 From: Dan Vanderkam Date: Wed, 10 Dec 2014 14:26:46 -0500 Subject: [PATCH 1/1] pass through (row, col) to valueFormatter --- auto_tests/tests/axis_labels.js | 14 +++++++++++--- dygraph.js | 1 + plugins/legend.js | 24 +++++++++++++----------- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/auto_tests/tests/axis_labels.js b/auto_tests/tests/axis_labels.js index a90da4b..a7e6b78 100644 --- a/auto_tests/tests/axis_labels.js +++ b/auto_tests/tests/axis_labels.js @@ -501,9 +501,17 @@ AxisLabelsTestCase.prototype.testValueFormatterParameters = function() { g.setSelection(0); assertEquals([ // num or millis, opts, series, dygraph, row, col - [ 'x', 0, 'fn', 'x', g], - [ 'y', 1, 'fn', 'y1', g], - ['y2', 2, 'fn', 'y2', g] + [ 'x', 0, 'fn', 'x', g, 0, 0], + [ 'y', 1, 'fn', 'y1', g, 0, 1], + ['y2', 2, 'fn', 'y2', g, 0, 2] + ], calls); + + calls = []; + g.setSelection(1); + assertEquals([ + [ 'x', 1, 'fn', 'x', g, 1, 0], + [ 'y', 3, 'fn', 'y1', g, 1, 1], + ['y2', 4, 'fn', 'y2', g, 1, 2] ], calls); }; diff --git a/dygraph.js b/dygraph.js index 2966316..6ae12c3 100644 --- a/dygraph.js +++ b/dygraph.js @@ -2042,6 +2042,7 @@ Dygraph.prototype.animateSelection_ = function(direction) { Dygraph.prototype.updateSelection_ = function(opt_animFraction) { /*var defaultPrevented = */ this.cascadeEvents_('select', { + selectedRow: this.lastRow_, selectedX: this.lastx_, selectedPoints: this.selPoints_ }); diff --git a/plugins/legend.js b/plugins/legend.js index 71dd7f1..5c46aee 100644 --- a/plugins/legend.js +++ b/plugins/legend.js @@ -124,6 +124,7 @@ var escapeHTML = function(str) { legend.prototype.select = function(e) { var xValue = e.selectedX; var points = e.selectedPoints; + var row = e.selectedRow; var legendMode = e.dygraph.getOption('legend'); if (legendMode === 'never') { @@ -154,7 +155,7 @@ legend.prototype.select = function(e) { this.legend_div_.style.top = topLegend + "px"; } - var html = legend.generateLegendHTML(e.dygraph, xValue, points, this.one_em_width_); + var html = legend.generateLegendHTML(e.dygraph, xValue, points, this.one_em_width_, row); this.legend_div_.innerHTML = html; this.legend_div_.style.display = ''; }; @@ -169,7 +170,7 @@ legend.prototype.deselect = function(e) { var oneEmWidth = calculateEmWidthInDiv(this.legend_div_); this.one_em_width_ = oneEmWidth; - var html = legend.generateLegendHTML(e.dygraph, undefined, undefined, oneEmWidth); + var html = legend.generateLegendHTML(e.dygraph, undefined, undefined, oneEmWidth, null); this.legend_div_.innerHTML = html; }; @@ -212,14 +213,15 @@ legend.prototype.destroy = function() { * Generates HTML for the legend which is displayed when hovering over the * chart. If no selected points are specified, a default legend is returned * (this may just be the empty string). - * @param { Number } [x] The x-value of the selected points. - * @param { [Object] } [sel_points] List of selected points for the given - * x-value. Should have properties like 'name', 'yval' and 'canvasy'. - * @param { Number } [oneEmWidth] The pixel width for 1em in the legend. Only - * relevant when displaying a legend with no selection (i.e. {legend: - * 'always'}) and with dashed lines. + * @param {number} x The x-value of the selected points. + * @param {Object} sel_points List of selected points for the given + * x-value. Should have properties like 'name', 'yval' and 'canvasy'. + * @param {number} oneEmWidth The pixel width for 1em in the legend. Only + * relevant when displaying a legend with no selection (i.e. {legend: + * 'always'}) and with dashed lines. + * @param {number} row The selected row index. */ -legend.generateLegendHTML = function(g, x, sel_points, oneEmWidth) { +legend.generateLegendHTML = function(g, x, sel_points, oneEmWidth, row) { // TODO(danvk): deprecate this option in place of {legend: 'never'} if (g.getOption('showLabelsOnHighlight') !== true) return ''; @@ -252,7 +254,7 @@ legend.generateLegendHTML = function(g, x, sel_points, oneEmWidth) { // TODO(danvk): remove this use of a private API var xOptView = g.optionsViewForAxis_('x'); var xvf = xOptView('valueFormatter'); - html = xvf(x, xOptView, labels[0], g); + html = xvf(x, xOptView, labels[0], g, row, 0); if (html !== '') { html += ':'; } @@ -275,7 +277,7 @@ legend.generateLegendHTML = function(g, x, sel_points, oneEmWidth) { var series = g.getPropertiesForSeries(pt.name); var yOptView = yOptViews[series.axis - 1]; var fmtFunc = yOptView('valueFormatter'); - var yval = fmtFunc(pt.yval, yOptView, pt.name, g); + var yval = fmtFunc(pt.yval, yOptView, pt.name, g, row, labels.indexOf(pt.name)); var cls = (pt.name == highlightSeries) ? " class='highlight'" : ""; -- 2.7.4