X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=plugins%2Flegend.js;h=9a9b9febb6c3ac0dadcbab979dc02d8d32798f16;hb=refs%2Fheads%2Fjshint;hp=79f758d6eb6464833cf5b7d858a46bfe57fb4bbb;hpb=d33d1c0b44a06d5159a94838e4e24c745d7c6409;p=dygraphs.git diff --git a/plugins/legend.js b/plugins/legend.js index 79f758d..9a9b9fe 100644 --- a/plugins/legend.js +++ b/plugins/legend.js @@ -3,20 +3,18 @@ * Copyright 2012 Dan Vanderkam (danvdk@gmail.com) * MIT-licensed (http://opensource.org/licenses/MIT) */ +/*global Dygraph:false */ Dygraph.Plugins.Legend = (function() { /* - Current bits of jankiness: - Uses two private APIs: 1. Dygraph.optionsViewForAxis_ 2. dygraph.plotter_.area - Registers for a "predraw" event, which should be renamed. - I call calculateEmWidthInDiv more often than needed. - */ -/*jshint globalstrict: true */ /*global Dygraph:false */ "use strict"; @@ -37,7 +35,7 @@ legend.prototype.toString = function() { }; // (defined below) -var generateLegendHTML, generateLegendDashHTML; +var generateLegendDashHTML; /** * This is called during the dygraph constructor, after options have been set @@ -87,7 +85,7 @@ legend.prototype.activate = function(g) { try { div.style[name] = messagestyle[name]; } catch (e) { - this.warn("You are using unsupported css properties for your " + + console.warn("You are using unsupported css properties for your " + "browser in labelsDivStyles"); } } @@ -119,11 +117,15 @@ var calculateEmWidthInDiv = function(div) { return oneEmWidth; }; +var escapeHTML = function(str) { + return str.replace(/&/g, "&").replace(/"/g, """).replace(//g, ">"); +}; + legend.prototype.select = function(e) { var xValue = e.selectedX; var points = e.selectedPoints; - var html = generateLegendHTML(e.dygraph, xValue, points, this.one_em_width_); + var html = legend.generateLegendHTML(e.dygraph, xValue, points, this.one_em_width_); this.legend_div_.innerHTML = html; }; @@ -132,7 +134,7 @@ legend.prototype.deselect = function(e) { var oneEmWidth = calculateEmWidthInDiv(this.legend_div_); this.one_em_width_ = oneEmWidth; - var html = generateLegendHTML(e.dygraph, undefined, undefined, oneEmWidth); + var html = legend.generateLegendHTML(e.dygraph, undefined, undefined, oneEmWidth); this.legend_div_.innerHTML = html; }; @@ -182,14 +184,14 @@ legend.prototype.destroy = function() { * relevant when displaying a legend with no selection (i.e. {legend: * 'always'}) and with dashed lines. */ -generateLegendHTML = function(g, x, sel_points, oneEmWidth) { +legend.generateLegendHTML = function(g, x, sel_points, oneEmWidth) { // TODO(danvk): deprecate this option in place of {legend: 'never'} if (g.getOption('showLabelsOnHighlight') !== true) return ''; // If no points are selected, we display a default legend. Traditionally, // this has been blank. But a better default would be a conventional legend, // which provides essential information for a non-interactive chart. - var html, sepLines, i, c, dash, strokePattern; + var html, sepLines, i, dash, strokePattern; var labels = g.getLabels(); if (typeof(x) === 'undefined') { @@ -207,7 +209,7 @@ generateLegendHTML = function(g, x, sel_points, oneEmWidth) { strokePattern = g.getOption("strokePattern", labels[i]); dash = generateLegendDashHTML(strokePattern, series.color, oneEmWidth); html += "" + - dash + " " + labels[i] + ""; + dash + " " + escapeHTML(labels[i]) + ""; } return html; } @@ -244,7 +246,7 @@ generateLegendHTML = function(g, x, sel_points, oneEmWidth) { // TODO(danvk): use a template string here and make it an attribute. html += "" + " " + - pt.name + ":" + yval + ""; + escapeHTML(pt.name) + ": " + yval + ""; } return html; };