X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=dygraph-options.js;h=d21ccc1ec628811c9c2547a22502b153726e8068;hb=daab85060912edf8b14c7315a40b3cbe9e923c07;hp=2fbf656f66e245aa07008cecdeadc2044376f795;hpb=8887663f6cb6a96cecc1c88d46720438cbab9db0;p=dygraphs.git diff --git a/dygraph-options.js b/dygraph-options.js index 2fbf656..d21ccc1 100644 --- a/dygraph-options.js +++ b/dygraph-options.js @@ -11,6 +11,7 @@ */ var DygraphOptions = (function() { +/*jshint strict:false */ // For "production" code, this gets set to false by uglifyjs. // Need to define it outside of "use strict", hence the nested IIFEs. @@ -18,6 +19,7 @@ if (typeof(DEBUG) === 'undefined') DEBUG=true; return (function() { +// TODO: remove this jshint directive & fix the warnings. /*jshint sub:true */ /*global Dygraph:false */ "use strict"; @@ -133,16 +135,7 @@ DygraphOptions.prototype.reparseSeries = function() { this.xAxis_ = { options : {} }; this.series_ = {}; - // Traditionally, per-series options were specified right up there with the options. For instance - // { - // labels: [ "X", "foo", "bar" ], - // pointSize: 3, - // foo : {}, // options for foo - // bar : {} // options for bar - // } - // - // Moving forward, series really should be specified in the series element, separating them. - // like so: + // Series are specified in the series element: // // { // labels: [ "X", "foo", "bar" ], @@ -153,67 +146,23 @@ DygraphOptions.prototype.reparseSeries = function() { // } // } // - // So, if series is found, it's expected to contain per-series data, otherwise we fall - // back. - var oldStyleSeries = !this.user_["series"]; - - if (oldStyleSeries) { - var axisId = 0; // 0-offset; there's always one. - // Go through once, add all the series, and for those with {} axis options, add a new axis. - for (var idx = 0; idx < this.labels_.length; idx++) { - var seriesName = this.labels_[idx]; - - var optionsForSeries = this.user_[seriesName] || {}; - - var yAxis = 0; - var axis = optionsForSeries["axis"]; - if (typeof(axis) == 'object') { - yAxis = ++axisId; - this.yAxes_[yAxis] = { series : [ seriesName ], options : axis }; - } - - // Associate series without axis options with axis 0. - if (!axis) { // undefined - this.yAxes_[0].series.push(seriesName); - } - - this.series_[seriesName] = { idx: idx, yAxis: yAxis, options : optionsForSeries }; - } - - // Go through one more time and assign series to an axis defined by another - // series, e.g. { 'Y1: { axis: {} }, 'Y2': { axis: 'Y1' } } - for (var idx = 0; idx < this.labels_.length; idx++) { - var seriesName = this.labels_[idx]; - var optionsForSeries = this.series_[seriesName]["options"]; - var axis = optionsForSeries["axis"]; - - if (typeof(axis) == 'string') { - if (!this.series_.hasOwnProperty(axis)) { - console.error("Series " + seriesName + " wants to share a y-axis with " + - "series " + axis + ", which does not define its own axis."); - return; - } - var yAxis = this.series_[axis].yAxis; - this.series_[seriesName].yAxis = yAxis; - this.yAxes_[yAxis].series.push(seriesName); - } - } - } else { - for (var idx = 0; idx < this.labels_.length; idx++) { - var seriesName = this.labels_[idx]; - var optionsForSeries = this.user_.series[seriesName] || {}; - var yAxis = DygraphOptions.axisToIndex_(optionsForSeries["axis"]); - - this.series_[seriesName] = { - idx: idx, - yAxis: yAxis, - options : optionsForSeries }; - - if (!this.yAxes_[yAxis]) { - this.yAxes_[yAxis] = { series : [ seriesName ], options : {} }; - } else { - this.yAxes_[yAxis].series.push(seriesName); - } + // So, if series is found, it's expected to contain per-series data, otherwise set a + // default. + var seriesDict = this.user_.series || {}; + for (var idx = 0; idx < this.labels_.length; idx++) { + var seriesName = this.labels_[idx]; + var optionsForSeries = seriesDict[seriesName] || {}; + var yAxis = DygraphOptions.axisToIndex_(optionsForSeries["axis"]); + + this.series_[seriesName] = { + idx: idx, + yAxis: yAxis, + options : optionsForSeries }; + + if (!this.yAxes_[yAxis]) { + this.yAxes_[yAxis] = { series : [ seriesName ], options : {} }; + } else { + this.yAxes_[yAxis].series.push(seriesName); } } @@ -405,6 +354,13 @@ DygraphOptions.prototype.validateOptions_ = function() { this.global_, this.user_, this.highlightSeries_]; + var names = this.seriesNames(); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + if (this.series_.hasOwnProperty(name)) { + optionsDicts.push(this.series_[name].options); + } + } for (var i = 0; i < optionsDicts.length; i++) { var dict = optionsDicts[i]; if (!dict) continue; @@ -425,17 +381,22 @@ var WARNINGS = {}; // Only show any particular warning once. */ DygraphOptions.prototype.warnInvalidOption_ = function(optionName) { if (!WARNINGS[optionName]) { + WARNINGS[optionName] = true; var isSeries = (this.labels_.indexOf(optionName) >= 0); if (isSeries) { console.warn('Use new-style per-series options (saw ' + optionName + ' as top-level options key). See http://bit.ly/1tceaJs'); } else { console.warn('Unknown option ' + optionName + ' (full list of options at dygraphs.com/options.html'); - // throw "invalid option " + optionName; + throw "invalid option " + optionName; } - WARNINGS[optionName] = true; } }; +// Reset list of previously-shown warnings. Used for testing. +DygraphOptions.resetWarnings_ = function() { + WARNINGS = {}; +}; + } return DygraphOptions;