dygraphs
Version:
dygraphs is a fast, flexible open source JavaScript charting library.
109 lines (92 loc) • 3.46 kB
JavaScript
/**
* @license
* Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com)
* MIT-licenced: https://opensource.org/licenses/MIT
*/
/**
* @fileoverview DataHandler base implementation for the "bar"
* data formats. This implementation must be extended and the
* extractSeries and rollingAverage must be implemented.
* @author David Eberlein (david.eberlein@ch.sauter-bc.com)
*/
/*global Dygraph:false */
/*global DygraphLayout:false */
;
import DygraphDataHandler from './datahandler';
import DygraphLayout from '../dygraph-layout';
/**
* @constructor
* @extends {Dygraph.DataHandler}
*/
var BarsHandler = function() {
DygraphDataHandler.call(this);
};
BarsHandler.prototype = new DygraphDataHandler();
// TODO(danvk): figure out why the jsdoc has to be copy/pasted from superclass.
// (I get closure compiler errors if this isn't here.)
/**
* @override
* @param {!Array.<Array>} rawData The raw data passed into dygraphs where
* rawData[i] = [x,ySeries1,...,ySeriesN].
* @param {!number} seriesIndex Index of the series to extract. All other
* series should be ignored.
* @param {!DygraphOptions} options Dygraph options.
* @return {Array.<[!number,?number,?]>} The series in the unified data format
* where series[i] = [x,y,{extras}].
*/
BarsHandler.prototype.extractSeries = function(rawData, seriesIndex, options) {
// Not implemented here must be extended
};
/**
* @override
* @param {!Array.<[!number,?number,?]>} series The series in the unified
* data format where series[i] = [x,y,{extras}].
* @param {!number} rollPeriod The number of points over which to average the data
* @param {!DygraphOptions} options The dygraph options.
* @param {!number} seriesIndex Index of the series this was extracted from.
* TODO(danvk): be more specific than "Array" here.
* @return {!Array.<[!number,?number,?]>} the rolled series.
*/
BarsHandler.prototype.rollingAverage =
function(series, rollPeriod, options, seriesIndex) {
// Not implemented here, must be extended.
};
/** @inheritDoc */
BarsHandler.prototype.onPointsCreated_ = function(series, points) {
for (var i = 0; i < series.length; ++i) {
var item = series[i];
var point = points[i];
point.y_top = NaN;
point.y_bottom = NaN;
point.yval_minus = DygraphDataHandler.parseFloat(item[2][0]);
point.yval_plus = DygraphDataHandler.parseFloat(item[2][1]);
}
};
/** @inheritDoc */
BarsHandler.prototype.getExtremeYValues = function(series, dateWindow, stepPlot) {
var minY = null, maxY = null, y;
var firstIdx = 0;
var lastIdx = series.length - 1;
for ( var j = firstIdx; j <= lastIdx; j++) {
y = series[j][1];
if (y === null || isNaN(y)) continue;
var low = series[j][2][0];
var high = series[j][2][1];
if (low > y) low = y; // this can happen with custom bars,
if (high < y) high = y; // e.g. in tests/custom-bars.html
if (maxY === null || high > maxY) maxY = high;
if (minY === null || low < minY) minY = low;
}
return [ minY, maxY ];
};
/** @inheritDoc */
BarsHandler.prototype.onLineEvaluated = function(points, axis, logscale) {
var point;
for (var j = 0; j < points.length; j++) {
// Copy over the error terms
point = points[j];
point.y_top = DygraphLayout.calcYNormal_(axis, point.yval_minus, logscale);
point.y_bottom = DygraphLayout.calcYNormal_(axis, point.yval_plus, logscale);
}
};
export default BarsHandler;