UNPKG

@qogni/dygraphs

Version:

dygraphs is a fast, flexible open source JavaScript charting library.

109 lines (100 loc) 13.2 kB
/** * @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 */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _datahandler = _interopRequireDefault(require("./datahandler")); var _dygraphLayout = _interopRequireDefault(require("../dygraph-layout")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } /** * @constructor * @extends {Dygraph.DataHandler} */ var BarsHandler = function BarsHandler() { _datahandler["default"].call(this); }; BarsHandler.prototype = new _datahandler["default"](); // 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 = _datahandler["default"].parseFloat(item[2][0]); point.yval_plus = _datahandler["default"].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["default"].calcYNormal_(axis, point.yval_minus, logscale); point.y_bottom = _dygraphLayout["default"].calcYNormal_(axis, point.yval_plus, logscale); } }; var _default = exports["default"] = BarsHandler; module.exports = exports.default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIl9kYXRhaGFuZGxlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2R5Z3JhcGhMYXlvdXQiLCJlIiwiX19lc01vZHVsZSIsIkJhcnNIYW5kbGVyIiwiRHlncmFwaERhdGFIYW5kbGVyIiwiY2FsbCIsInByb3RvdHlwZSIsImV4dHJhY3RTZXJpZXMiLCJyYXdEYXRhIiwic2VyaWVzSW5kZXgiLCJvcHRpb25zIiwicm9sbGluZ0F2ZXJhZ2UiLCJzZXJpZXMiLCJyb2xsUGVyaW9kIiwib25Qb2ludHNDcmVhdGVkXyIsInBvaW50cyIsImkiLCJsZW5ndGgiLCJpdGVtIiwicG9pbnQiLCJ5X3RvcCIsIk5hTiIsInlfYm90dG9tIiwieXZhbF9taW51cyIsInBhcnNlRmxvYXQiLCJ5dmFsX3BsdXMiLCJnZXRFeHRyZW1lWVZhbHVlcyIsImRhdGVXaW5kb3ciLCJzdGVwUGxvdCIsIm1pblkiLCJtYXhZIiwieSIsImZpcnN0SWR4IiwibGFzdElkeCIsImoiLCJpc05hTiIsImxvdyIsImhpZ2giLCJvbkxpbmVFdmFsdWF0ZWQiLCJheGlzIiwibG9nc2NhbGUiLCJEeWdyYXBoTGF5b3V0IiwiY2FsY1lOb3JtYWxfIiwiX2RlZmF1bHQiLCJtb2R1bGUiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFoYW5kbGVyL2JhcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTMgRGF2aWQgRWJlcmxlaW4gKGRhdmlkLmViZXJsZWluQGNoLnNhdXRlci1iYy5jb20pXG4gKiBNSVQtbGljZW5jZWQ6IGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKi9cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IERhdGFIYW5kbGVyIGJhc2UgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBcImJhclwiXG4gKiBkYXRhIGZvcm1hdHMuIFRoaXMgaW1wbGVtZW50YXRpb24gbXVzdCBiZSBleHRlbmRlZCBhbmQgdGhlXG4gKiBleHRyYWN0U2VyaWVzIGFuZCByb2xsaW5nQXZlcmFnZSBtdXN0IGJlIGltcGxlbWVudGVkLlxuICogQGF1dGhvciBEYXZpZCBFYmVybGVpbiAoZGF2aWQuZWJlcmxlaW5AY2guc2F1dGVyLWJjLmNvbSlcbiAqL1xuXG4vKmdsb2JhbCBEeWdyYXBoOmZhbHNlICovXG4vKmdsb2JhbCBEeWdyYXBoTGF5b3V0OmZhbHNlICovXG5cInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IER5Z3JhcGhEYXRhSGFuZGxlciBmcm9tICcuL2RhdGFoYW5kbGVyJztcbmltcG9ydCBEeWdyYXBoTGF5b3V0IGZyb20gJy4uL2R5Z3JhcGgtbGF5b3V0JztcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIHtEeWdyYXBoLkRhdGFIYW5kbGVyfVxuICovXG52YXIgQmFyc0hhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgRHlncmFwaERhdGFIYW5kbGVyLmNhbGwodGhpcyk7XG59O1xuQmFyc0hhbmRsZXIucHJvdG90eXBlID0gbmV3IER5Z3JhcGhEYXRhSGFuZGxlcigpO1xuXG4vLyBUT0RPKGRhbnZrKTogZmlndXJlIG91dCB3aHkgdGhlIGpzZG9jIGhhcyB0byBiZSBjb3B5L3Bhc3RlZCBmcm9tIHN1cGVyY2xhc3MuXG4vLyAgIChJIGdldCBjbG9zdXJlIGNvbXBpbGVyIGVycm9ycyBpZiB0aGlzIGlzbid0IGhlcmUuKVxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqIEBwYXJhbSB7IUFycmF5LjxBcnJheT59IHJhd0RhdGEgVGhlIHJhdyBkYXRhIHBhc3NlZCBpbnRvIGR5Z3JhcGhzIHdoZXJlXG4gKiAgICAgcmF3RGF0YVtpXSA9IFt4LHlTZXJpZXMxLC4uLix5U2VyaWVzTl0uXG4gKiBAcGFyYW0geyFudW1iZXJ9IHNlcmllc0luZGV4IEluZGV4IG9mIHRoZSBzZXJpZXMgdG8gZXh0cmFjdC4gQWxsIG90aGVyXG4gKiAgICAgc2VyaWVzIHNob3VsZCBiZSBpZ25vcmVkLlxuICogQHBhcmFtIHshRHlncmFwaE9wdGlvbnN9IG9wdGlvbnMgRHlncmFwaCBvcHRpb25zLlxuICogQHJldHVybiB7QXJyYXkuPFshbnVtYmVyLD9udW1iZXIsP10+fSBUaGUgc2VyaWVzIGluIHRoZSB1bmlmaWVkIGRhdGEgZm9ybWF0XG4gKiAgICAgd2hlcmUgc2VyaWVzW2ldID0gW3gseSx7ZXh0cmFzfV0uXG4gKi9cbkJhcnNIYW5kbGVyLnByb3RvdHlwZS5leHRyYWN0U2VyaWVzID0gZnVuY3Rpb24ocmF3RGF0YSwgc2VyaWVzSW5kZXgsIG9wdGlvbnMpIHtcbiAgLy8gTm90IGltcGxlbWVudGVkIGhlcmUgbXVzdCBiZSBleHRlbmRlZFxufTtcblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqIEBwYXJhbSB7IUFycmF5LjxbIW51bWJlciw/bnVtYmVyLD9dPn0gc2VyaWVzIFRoZSBzZXJpZXMgaW4gdGhlIHVuaWZpZWRcbiAqICAgICAgICAgIGRhdGEgZm9ybWF0IHdoZXJlIHNlcmllc1tpXSA9IFt4LHkse2V4dHJhc31dLlxuICogQHBhcmFtIHshbnVtYmVyfSByb2xsUGVyaW9kIFRoZSBudW1iZXIgb2YgcG9pbnRzIG92ZXIgd2hpY2ggdG8gYXZlcmFnZSB0aGUgZGF0YVxuICogQHBhcmFtIHshRHlncmFwaE9wdGlvbnN9IG9wdGlvbnMgVGhlIGR5Z3JhcGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7IW51bWJlcn0gc2VyaWVzSW5kZXggSW5kZXggb2YgdGhlIHNlcmllcyB0aGlzIHdhcyBleHRyYWN0ZWQgZnJvbS5cbiAqIFRPRE8oZGFudmspOiBiZSBtb3JlIHNwZWNpZmljIHRoYW4gXCJBcnJheVwiIGhlcmUuXG4gKiBAcmV0dXJuIHshQXJyYXkuPFshbnVtYmVyLD9udW1iZXIsP10+fSB0aGUgcm9sbGVkIHNlcmllcy5cbiAqL1xuQmFyc0hhbmRsZXIucHJvdG90eXBlLnJvbGxpbmdBdmVyYWdlID1cbiAgICBmdW5jdGlvbihzZXJpZXMsIHJvbGxQZXJpb2QsIG9wdGlvbnMsIHNlcmllc0luZGV4KSB7XG4gIC8vIE5vdCBpbXBsZW1lbnRlZCBoZXJlLCBtdXN0IGJlIGV4dGVuZGVkLlxufTtcblxuLyoqIEBpbmhlcml0RG9jICovXG5CYXJzSGFuZGxlci5wcm90b3R5cGUub25Qb2ludHNDcmVhdGVkXyA9IGZ1bmN0aW9uKHNlcmllcywgcG9pbnRzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWVzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGl0ZW0gPSBzZXJpZXNbaV07XG4gICAgdmFyIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgIHBvaW50LnlfdG9wID0gTmFOO1xuICAgIHBvaW50LnlfYm90dG9tID0gTmFOO1xuICAgIHBvaW50Lnl2YWxfbWludXMgPSBEeWdyYXBoRGF0YUhhbmRsZXIucGFyc2VGbG9hdChpdGVtWzJdWzBdKTtcbiAgICBwb2ludC55dmFsX3BsdXMgPSBEeWdyYXBoRGF0YUhhbmRsZXIucGFyc2VGbG9hdChpdGVtWzJdWzFdKTtcbiAgfVxufTtcblxuLyoqIEBpbmhlcml0RG9jICovXG5CYXJzSGFuZGxlci5wcm90b3R5cGUuZ2V0RXh0cmVtZVlWYWx1ZXMgPSBmdW5jdGlvbihzZXJpZXMsIGRhdGVXaW5kb3csIHN0ZXBQbG90KSB7XG4gIHZhciBtaW5ZID0gbnVsbCwgbWF4WSA9IG51bGwsIHk7XG5cbiAgdmFyIGZpcnN0SWR4ID0gMDtcbiAgdmFyIGxhc3RJZHggPSBzZXJpZXMubGVuZ3RoIC0gMTtcblxuICBmb3IgKCB2YXIgaiA9IGZpcnN0SWR4OyBqIDw9IGxhc3RJZHg7IGorKykge1xuICAgIHkgPSBzZXJpZXNbal1bMV07XG4gICAgaWYgKHkgPT09IG51bGwgfHwgaXNOYU4oeSkpIGNvbnRpbnVlO1xuXG4gICAgdmFyIGxvdyA9IHNlcmllc1tqXVsyXVswXTtcbiAgICB2YXIgaGlnaCA9IHNlcmllc1tqXVsyXVsxXTtcblxuICAgIGlmIChsb3cgPiB5KSBsb3cgPSB5OyAvLyB0aGlzIGNhbiBoYXBwZW4gd2l0aCBjdXN0b20gYmFycyxcbiAgICBpZiAoaGlnaCA8IHkpIGhpZ2ggPSB5OyAvLyBlLmcuIGluIHRlc3RzL2N1c3RvbS1iYXJzLmh0bWxcblxuICAgIGlmIChtYXhZID09PSBudWxsIHx8IGhpZ2ggPiBtYXhZKSBtYXhZID0gaGlnaDtcbiAgICBpZiAobWluWSA9PT0gbnVsbCB8fCBsb3cgPCBtaW5ZKSBtaW5ZID0gbG93O1xuICB9XG5cbiAgcmV0dXJuIFsgbWluWSwgbWF4WSBdO1xufTtcblxuLyoqIEBpbmhlcml0RG9jICovXG5CYXJzSGFuZGxlci5wcm90b3R5cGUub25MaW5lRXZhbHVhdGVkID0gZnVuY3Rpb24ocG9pbnRzLCBheGlzLCBsb2dzY2FsZSkge1xuICB2YXIgcG9pbnQ7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgLy8gQ29weSBvdmVyIHRoZSBlcnJvciB0ZXJtc1xuICAgIHBvaW50ID0gcG9pbnRzW2pdO1xuICAgIHBvaW50LnlfdG9wID0gRHlncmFwaExheW91dC5jYWxjWU5vcm1hbF8oYXhpcywgcG9pbnQueXZhbF9taW51cywgbG9nc2NhbGUpO1xuICAgIHBvaW50LnlfYm90dG9tID0gRHlncmFwaExheW91dC5jYWxjWU5vcm1hbF8oYXhpcywgcG9pbnQueXZhbF9wbHVzLCBsb2dzY2FsZSk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJhcnNIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTs7QUFBQ0EsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsS0FBQTtBQUFBO0FBQUFELE9BQUE7QUFFYixJQUFBRSxZQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFBOEMsU0FBQUQsdUJB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