Initial OpenECOMP policy/engine commit
[policy/engine.git] / ecomp-sdk-app / src / main / webapp / app / fusion / external / d3 / js / models / sparkline.js
1
2 nv.models.sparkline = function() {
3   "use strict";
4   //============================================================
5   // Public Variables with Default Settings
6   //------------------------------------------------------------
7
8   var margin = {top: 2, right: 0, bottom: 2, left: 0}
9     , width = 400
10     , height = 32
11     , animate = true
12     , x = d3.scale.linear()
13     , y = d3.scale.linear()
14     , getX = function(d) { return d.x }
15     , getY = function(d) { return d.y }
16     , color = nv.utils.getColor(['#000'])
17     , xDomain
18     , yDomain
19     , xRange
20     , yRange
21     ;
22
23   //============================================================
24
25
26   function chart(selection) {
27     selection.each(function(data) {
28       var availableWidth = width - margin.left - margin.right,
29           availableHeight = height - margin.top - margin.bottom,
30           container = d3.select(this);
31
32
33       //------------------------------------------------------------
34       // Setup Scales
35
36       x   .domain(xDomain || d3.extent(data, getX ))
37           .range(xRange || [0, availableWidth]);
38
39       y   .domain(yDomain || d3.extent(data, getY ))
40           .range(yRange || [availableHeight, 0]);
41
42       //------------------------------------------------------------
43
44
45       //------------------------------------------------------------
46       // Setup containers and skeleton of chart
47
48       var wrap = container.selectAll('g.nv-wrap.nv-sparkline').data([data]);
49       var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-sparkline');
50       var gEnter = wrapEnter.append('g');
51       var g = wrap.select('g');
52
53       wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
54
55       //------------------------------------------------------------
56
57
58       var paths = wrap.selectAll('path')
59           .data(function(d) { return [d] });
60       paths.enter().append('path');
61       paths.exit().remove();
62       paths
63           .style('stroke', function(d,i) { return d.color || color(d, i) })
64           .attr('d', d3.svg.line()
65             .x(function(d,i) { return x(getX(d,i)) })
66             .y(function(d,i) { return y(getY(d,i)) })
67           );
68
69
70       // TODO: Add CURRENT data point (Need Min, Mac, Current / Most recent)
71       var points = wrap.selectAll('circle.nv-point')
72           .data(function(data) {
73               var yValues = data.map(function(d, i) { return getY(d,i); });
74               function pointIndex(index) {
75                   if (index != -1) {
76                       var result = data[index];
77                       result.pointIndex = index;
78                       return result;
79                   } else {
80                       return null;
81                   }
82               }
83               var maxPoint = pointIndex(yValues.lastIndexOf(y.domain()[1])),
84                   minPoint = pointIndex(yValues.indexOf(y.domain()[0])),
85                   currentPoint = pointIndex(yValues.length - 1);
86               return [minPoint, maxPoint, currentPoint].filter(function (d) {return d != null;});
87           });
88       points.enter().append('circle');
89       points.exit().remove();
90       points
91           .attr('cx', function(d,i) { return x(getX(d,d.pointIndex)) })
92           .attr('cy', function(d,i) { return y(getY(d,d.pointIndex)) })
93           .attr('r', 2)
94           .attr('class', function(d,i) {
95             return getX(d, d.pointIndex) == x.domain()[1] ? 'nv-point nv-currentValue' :
96                    getY(d, d.pointIndex) == y.domain()[0] ? 'nv-point nv-minValue' : 'nv-point nv-maxValue'
97           });
98     });
99
100     return chart;
101   }
102
103
104   //============================================================
105   // Expose Public Variables
106   //------------------------------------------------------------
107   chart.options = nv.utils.optionsFunc.bind(chart);
108   
109   chart.margin = function(_) {
110     if (!arguments.length) return margin;
111     margin.top    = typeof _.top    != 'undefined' ? _.top    : margin.top;
112     margin.right  = typeof _.right  != 'undefined' ? _.right  : margin.right;
113     margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
114     margin.left   = typeof _.left   != 'undefined' ? _.left   : margin.left;
115     return chart;
116   };
117
118   chart.width = function(_) {
119     if (!arguments.length) return width;
120     width = _;
121     return chart;
122   };
123
124   chart.height = function(_) {
125     if (!arguments.length) return height;
126     height = _;
127     return chart;
128   };
129
130   chart.x = function(_) {
131     if (!arguments.length) return getX;
132     getX = d3.functor(_);
133     return chart;
134   };
135
136   chart.y = function(_) {
137     if (!arguments.length) return getY;
138     getY = d3.functor(_);
139     return chart;
140   };
141
142   chart.xScale = function(_) {
143     if (!arguments.length) return x;
144     x = _;
145     return chart;
146   };
147
148   chart.yScale = function(_) {
149     if (!arguments.length) return y;
150     y = _;
151     return chart;
152   };
153
154   chart.xDomain = function(_) {
155     if (!arguments.length) return xDomain;
156     xDomain = _;
157     return chart;
158   };
159
160   chart.yDomain = function(_) {
161     if (!arguments.length) return yDomain;
162     yDomain = _;
163     return chart;
164   };
165
166   chart.xRange = function(_) {
167     if (!arguments.length) return xRange;
168     xRange = _;
169     return chart;
170   };
171
172   chart.yRange = function(_) {
173     if (!arguments.length) return yRange;
174     yRange = _;
175     return chart;
176   };
177
178   chart.animate = function(_) {
179     if (!arguments.length) return animate;
180     animate = _;
181     return chart;
182   };
183
184   chart.color = function(_) {
185     if (!arguments.length) return color;
186     color = nv.utils.getColor(_);
187     return chart;
188   };
189
190   //============================================================
191
192
193   return chart;
194 }