Add per-series 'color' option.
[dygraphs.git] / datahandler / bars-custom.js
CommitLineData
a49c164a
DE
1/**
2 * @license
3 * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com)
4 * MIT-licensed (http://opensource.org/licenses/MIT)
5 */
6
7/**
8 * @fileoverview DataHandler implementation for the custom bars option.
9 * @author David Eberlein (david.eberlein@ch.sauter-bc.com)
10 */
11
12(function() {
a49c164a 13
3ea41d86
DV
14/*global Dygraph:false */
15"use strict";
16
17Dygraph.DataHandlers.CustomBarsHandler = Dygraph.DataHandler();
18var CustomBarsHandler = Dygraph.DataHandlers.CustomBarsHandler;
19CustomBarsHandler.prototype = new Dygraph.DataHandlers.BarsHandler();
20
21// customBars
22CustomBarsHandler.prototype.extractSeries = function(rawData, i, options) {
23 // TODO(danvk): pre-allocate series here.
24 var series = [];
25 var x, y, point;
26 var logScale = options.get('logscale');
27 for ( var j = 0; j < rawData.length; j++) {
28 x = rawData[j][0];
29 point = rawData[j][i];
30 if (logScale && point !== null) {
31 // On the log scale, points less than zero do not exist.
32 // This will create a gap in the chart.
33 if (point[0] <= 0 || point[1] <= 0 || point[2] <= 0) {
34 point = null;
a49c164a 35 }
3ea41d86
DV
36 }
37 // Extract to the unified data format.
38 if (point !== null) {
39 y = point[1];
40 if (y !== null && !isNaN(y)) {
41 series.push([ x, y, [ point[0], point[2] ] ]);
a49c164a 42 } else {
3ea41d86 43 series.push([ x, y, [ y, y ] ]);
a49c164a 44 }
3ea41d86
DV
45 } else {
46 series.push([ x, null, [ null, null ] ]);
a49c164a 47 }
3ea41d86
DV
48 }
49 return series;
50};
a49c164a 51
3ea41d86
DV
52CustomBarsHandler.prototype.rollingAverage = function(originalData, rollPeriod,
53 options) {
54 rollPeriod = Math.min(rollPeriod, originalData.length);
55 var rollingData = [];
56 var y, low, high, mid,count, i, extremes;
a49c164a 57
3ea41d86
DV
58 low = 0;
59 mid = 0;
60 high = 0;
61 count = 0;
62 for (i = 0; i < originalData.length; i++) {
63 y = originalData[i][1];
64 extremes = originalData[i][2];
65 rollingData[i] = originalData[i];
a49c164a 66
3ea41d86
DV
67 if (y !== null && !isNaN(y)) {
68 low += extremes[0];
69 mid += y;
70 high += extremes[1];
71 count += 1;
72 }
73 if (i - rollPeriod >= 0) {
74 var prev = originalData[i - rollPeriod];
75 if (prev[1] !== null && !isNaN(prev[1])) {
76 low -= prev[2][0];
77 mid -= prev[1];
78 high -= prev[2][1];
79 count -= 1;
a49c164a
DE
80 }
81 }
3ea41d86
DV
82 if (count) {
83 rollingData[i] = [
84 originalData[i][0],
85 1.0 * mid / count,
86 [ 1.0 * low / count,
87 1.0 * high / count ] ];
88 } else {
89 rollingData[i] = [ originalData[i][0], null, [ null, null ] ];
90 }
91 }
92
93 return rollingData;
94};
a49c164a 95
a49c164a 96})();