nvd3-rails 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. data/.gitmodules +3 -0
  2. data/README.md +101 -0
  3. data/lib/nvd3-rails.rb +1 -0
  4. data/lib/nvd3/rails.rb +8 -0
  5. data/lib/nvd3/rails/engine.rb +6 -0
  6. data/lib/nvd3/rails/version.rb +5 -0
  7. data/nvd3-rails.gemspec +21 -0
  8. data/vendor/assets/javascripts/nvd3-rails.js +7 -0
  9. data/vendor/assets/javascripts/nvd3/.git.sample/HEAD +1 -0
  10. data/vendor/assets/javascripts/nvd3/.git.sample/config +13 -0
  11. data/vendor/assets/javascripts/nvd3/.git.sample/description +1 -0
  12. data/vendor/assets/javascripts/nvd3/.git.sample/hooks/applypatch-msg.sample +15 -0
  13. data/vendor/assets/javascripts/nvd3/.git.sample/hooks/commit-msg.sample +24 -0
  14. data/vendor/assets/javascripts/nvd3/.git.sample/hooks/post-update.sample +8 -0
  15. data/vendor/assets/javascripts/nvd3/.git.sample/hooks/pre-applypatch.sample +14 -0
  16. data/vendor/assets/javascripts/nvd3/.git.sample/hooks/pre-commit.sample +50 -0
  17. data/vendor/assets/javascripts/nvd3/.git.sample/hooks/pre-push.sample +53 -0
  18. data/vendor/assets/javascripts/nvd3/.git.sample/hooks/pre-rebase.sample +169 -0
  19. data/vendor/assets/javascripts/nvd3/.git.sample/hooks/prepare-commit-msg.sample +36 -0
  20. data/vendor/assets/javascripts/nvd3/.git.sample/hooks/update.sample +128 -0
  21. data/vendor/assets/javascripts/nvd3/.git.sample/index +0 -0
  22. data/vendor/assets/javascripts/nvd3/.git.sample/info/exclude +6 -0
  23. data/vendor/assets/javascripts/nvd3/.git.sample/logs/HEAD +1 -0
  24. data/vendor/assets/javascripts/nvd3/.git.sample/logs/refs/heads/master +1 -0
  25. data/vendor/assets/javascripts/nvd3/.git.sample/logs/refs/remotes/origin/HEAD +1 -0
  26. data/vendor/assets/javascripts/nvd3/.git.sample/objects/pack/pack-babbb312d58dd7f03870b530a1b9a84c80918be3.idx +0 -0
  27. data/vendor/assets/javascripts/nvd3/.git.sample/objects/pack/pack-babbb312d58dd7f03870b530a1b9a84c80918be3.pack +0 -0
  28. data/vendor/assets/javascripts/nvd3/.git.sample/packed-refs +5 -0
  29. data/vendor/assets/javascripts/nvd3/.git.sample/refs/heads/master +1 -0
  30. data/vendor/assets/javascripts/nvd3/.git.sample/refs/remotes/origin/HEAD +1 -0
  31. data/vendor/assets/javascripts/nvd3/.gitignore +24 -0
  32. data/vendor/assets/javascripts/nvd3/LICENSE.md +49 -0
  33. data/vendor/assets/javascripts/nvd3/Makefile +56 -0
  34. data/vendor/assets/javascripts/nvd3/README.md +43 -0
  35. data/vendor/assets/javascripts/nvd3/build.bat +6 -0
  36. data/vendor/assets/javascripts/nvd3/deprecated/bar.html +198 -0
  37. data/vendor/assets/javascripts/nvd3/deprecated/bar.js +250 -0
  38. data/vendor/assets/javascripts/nvd3/deprecated/charts/cumulativeLineChart.js +174 -0
  39. data/vendor/assets/javascripts/nvd3/deprecated/charts/discreteBarChart.js +157 -0
  40. data/vendor/assets/javascripts/nvd3/deprecated/charts/lineChart.js +159 -0
  41. data/vendor/assets/javascripts/nvd3/deprecated/charts/lineChartDaily.js +168 -0
  42. data/vendor/assets/javascripts/nvd3/deprecated/charts/stackedAreaChart.js +177 -0
  43. data/vendor/assets/javascripts/nvd3/deprecated/cumulativeLine.html +171 -0
  44. data/vendor/assets/javascripts/nvd3/deprecated/cumulativeLine.js +334 -0
  45. data/vendor/assets/javascripts/nvd3/deprecated/discreteBarChartWithEnabledTooltip.html +129 -0
  46. data/vendor/assets/javascripts/nvd3/deprecated/discreteBarChartWithEnabledTooltip.js +222 -0
  47. data/vendor/assets/javascripts/nvd3/deprecated/discreteBarWithAxes.html +172 -0
  48. data/vendor/assets/javascripts/nvd3/deprecated/discreteBarWithAxes.js +152 -0
  49. data/vendor/assets/javascripts/nvd3/deprecated/lineChart-old.html +83 -0
  50. data/vendor/assets/javascripts/nvd3/deprecated/lineChartDaily.html +109 -0
  51. data/vendor/assets/javascripts/nvd3/deprecated/linePlusBar.html +173 -0
  52. data/vendor/assets/javascripts/nvd3/deprecated/linePlusBar.js +250 -0
  53. data/vendor/assets/javascripts/nvd3/deprecated/lineWithFocus.html +137 -0
  54. data/vendor/assets/javascripts/nvd3/deprecated/lineWithFocus.js +354 -0
  55. data/vendor/assets/javascripts/nvd3/deprecated/lineWithFourAxes.html +144 -0
  56. data/vendor/assets/javascripts/nvd3/deprecated/lineWithFourAxes.js +218 -0
  57. data/vendor/assets/javascripts/nvd3/deprecated/lineWithLegend.html +142 -0
  58. data/vendor/assets/javascripts/nvd3/deprecated/lineWithLegend.js +176 -0
  59. data/vendor/assets/javascripts/nvd3/deprecated/monthendAxis.html +99 -0
  60. data/vendor/assets/javascripts/nvd3/deprecated/multiBarHorizontalWithLegend.html +258 -0
  61. data/vendor/assets/javascripts/nvd3/deprecated/multiBarHorizontalWithLegend.js +226 -0
  62. data/vendor/assets/javascripts/nvd3/deprecated/multiBarWithLegend.html +162 -0
  63. data/vendor/assets/javascripts/nvd3/deprecated/multiBarWithLegend.js +249 -0
  64. data/vendor/assets/javascripts/nvd3/deprecated/pie.js +263 -0
  65. data/vendor/assets/javascripts/nvd3/deprecated/scatterChart.html +110 -0
  66. data/vendor/assets/javascripts/nvd3/deprecated/scatterChart.js +294 -0
  67. data/vendor/assets/javascripts/nvd3/deprecated/scatterFisheyeChart.js +418 -0
  68. data/vendor/assets/javascripts/nvd3/deprecated/scatterWithLegend.html +167 -0
  69. data/vendor/assets/javascripts/nvd3/deprecated/scatterWithLegend.js +261 -0
  70. data/vendor/assets/javascripts/nvd3/deprecated/stackedArea.js +286 -0
  71. data/vendor/assets/javascripts/nvd3/deprecated/stackedAreaChart.html +183 -0
  72. data/vendor/assets/javascripts/nvd3/deprecated/stackedAreaChart_old.html +137 -0
  73. data/vendor/assets/javascripts/nvd3/deprecated/stackedAreaWithLegend.html +222 -0
  74. data/vendor/assets/javascripts/nvd3/deprecated/stackedAreaWithLegend.js +297 -0
  75. data/vendor/assets/javascripts/nvd3/examples/bullet.html +96 -0
  76. data/vendor/assets/javascripts/nvd3/examples/bulletChart.html +94 -0
  77. data/vendor/assets/javascripts/nvd3/examples/crossfilter.html +167 -0
  78. data/vendor/assets/javascripts/nvd3/examples/crossfilterWithDimentions.html +180 -0
  79. data/vendor/assets/javascripts/nvd3/examples/crossfilterWithTables.html +288 -0
  80. data/vendor/assets/javascripts/nvd3/examples/cumulativeLineChart.html +155 -0
  81. data/vendor/assets/javascripts/nvd3/examples/discreteBarChart.html +116 -0
  82. data/vendor/assets/javascripts/nvd3/examples/dynamicTimeSeries.html +148 -0
  83. data/vendor/assets/javascripts/nvd3/examples/historicalBar.html +157 -0
  84. data/vendor/assets/javascripts/nvd3/examples/horizon.html +163 -0
  85. data/vendor/assets/javascripts/nvd3/examples/images/grey-minus.png +0 -0
  86. data/vendor/assets/javascripts/nvd3/examples/images/grey-plus.png +0 -0
  87. data/vendor/assets/javascripts/nvd3/examples/indentedtree.html +126 -0
  88. data/vendor/assets/javascripts/nvd3/examples/legend.html +75 -0
  89. data/vendor/assets/javascripts/nvd3/examples/line.html +95 -0
  90. data/vendor/assets/javascripts/nvd3/examples/lineChart.html +112 -0
  91. data/vendor/assets/javascripts/nvd3/examples/lineChartSVGResize.html +151 -0
  92. data/vendor/assets/javascripts/nvd3/examples/linePlusBarChart.html +114 -0
  93. data/vendor/assets/javascripts/nvd3/examples/linePlusBarWithFocusChart.html +128 -0
  94. data/vendor/assets/javascripts/nvd3/examples/lineTimeSeries.html +142 -0
  95. data/vendor/assets/javascripts/nvd3/examples/lineWithFisheyeChart.html +101 -0
  96. data/vendor/assets/javascripts/nvd3/examples/lineWithFocusChart.html +87 -0
  97. data/vendor/assets/javascripts/nvd3/examples/multiBar.html +92 -0
  98. data/vendor/assets/javascripts/nvd3/examples/multiBarChart.html +93 -0
  99. data/vendor/assets/javascripts/nvd3/examples/multiBarHorizontalChart.html +388 -0
  100. data/vendor/assets/javascripts/nvd3/examples/multiChart.html +93 -0
  101. data/vendor/assets/javascripts/nvd3/examples/nations.json +1 -0
  102. data/vendor/assets/javascripts/nvd3/examples/pie.html +93 -0
  103. data/vendor/assets/javascripts/nvd3/examples/pieChart.html +114 -0
  104. data/vendor/assets/javascripts/nvd3/examples/scatter.html +95 -0
  105. data/vendor/assets/javascripts/nvd3/examples/scatterChart.html +115 -0
  106. data/vendor/assets/javascripts/nvd3/examples/scatterPlusLineChart.html +116 -0
  107. data/vendor/assets/javascripts/nvd3/examples/sparkline.html +62 -0
  108. data/vendor/assets/javascripts/nvd3/examples/sparklinePlus.html +67 -0
  109. data/vendor/assets/javascripts/nvd3/examples/stackedArea.html +155 -0
  110. data/vendor/assets/javascripts/nvd3/examples/stackedAreaChart.html +245 -0
  111. data/vendor/assets/javascripts/nvd3/examples/stream_layers.js +35 -0
  112. data/vendor/assets/javascripts/nvd3/lib/cie.js +155 -0
  113. data/vendor/assets/javascripts/nvd3/lib/crossfilter.js +1180 -0
  114. data/vendor/assets/javascripts/nvd3/lib/crossfilter.min.js +1 -0
  115. data/vendor/assets/javascripts/nvd3/lib/d3.v2.js +7033 -0
  116. data/vendor/assets/javascripts/nvd3/lib/d3.v2.min.js +4 -0
  117. data/vendor/assets/javascripts/nvd3/lib/fisheye.js +86 -0
  118. data/vendor/assets/javascripts/nvd3/lib/hive.js +80 -0
  119. data/vendor/assets/javascripts/nvd3/lib/horizon.js +192 -0
  120. data/vendor/assets/javascripts/nvd3/lib/sankey.js +292 -0
  121. data/vendor/assets/javascripts/nvd3/nv.d3.js +11762 -0
  122. data/vendor/assets/javascripts/nvd3/src/core.js +117 -0
  123. data/vendor/assets/javascripts/nvd3/src/models/axis.js +398 -0
  124. data/vendor/assets/javascripts/nvd3/src/models/backup/bullet.js +250 -0
  125. data/vendor/assets/javascripts/nvd3/src/models/backup/bulletChart.js +349 -0
  126. data/vendor/assets/javascripts/nvd3/src/models/bullet.js +377 -0
  127. data/vendor/assets/javascripts/nvd3/src/models/bulletChart.js +341 -0
  128. data/vendor/assets/javascripts/nvd3/src/models/cumulativeLineChart.js +609 -0
  129. data/vendor/assets/javascripts/nvd3/src/models/discreteBar.js +327 -0
  130. data/vendor/assets/javascripts/nvd3/src/models/discreteBarChart.js +290 -0
  131. data/vendor/assets/javascripts/nvd3/src/models/distribution.js +146 -0
  132. data/vendor/assets/javascripts/nvd3/src/models/historicalBar.js +289 -0
  133. data/vendor/assets/javascripts/nvd3/src/models/indentedTree.js +306 -0
  134. data/vendor/assets/javascripts/nvd3/src/models/legend.js +203 -0
  135. data/vendor/assets/javascripts/nvd3/src/models/line.js +286 -0
  136. data/vendor/assets/javascripts/nvd3/src/models/lineChart.js +359 -0
  137. data/vendor/assets/javascripts/nvd3/src/models/lineDynTimeSeriesChart.js +434 -0
  138. data/vendor/assets/javascripts/nvd3/src/models/linePlusBarChart.js +422 -0
  139. data/vendor/assets/javascripts/nvd3/src/models/linePlusBarWithFocusChart.js +657 -0
  140. data/vendor/assets/javascripts/nvd3/src/models/lineTimeSeriesChart.js +340 -0
  141. data/vendor/assets/javascripts/nvd3/src/models/lineWithFisheye.js +197 -0
  142. data/vendor/assets/javascripts/nvd3/src/models/lineWithFisheyeChart.js +324 -0
  143. data/vendor/assets/javascripts/nvd3/src/models/lineWithFocusChart.js +565 -0
  144. data/vendor/assets/javascripts/nvd3/src/models/multiAxisLineChart.js +312 -0
  145. data/vendor/assets/javascripts/nvd3/src/models/multiBar.js +416 -0
  146. data/vendor/assets/javascripts/nvd3/src/models/multiBarChart.js +445 -0
  147. data/vendor/assets/javascripts/nvd3/src/models/multiBarHorizontal.js +420 -0
  148. data/vendor/assets/javascripts/nvd3/src/models/multiBarHorizontalChart.js +415 -0
  149. data/vendor/assets/javascripts/nvd3/src/models/multiBarTimeSeries.js +371 -0
  150. data/vendor/assets/javascripts/nvd3/src/models/multiBarTimeSeriesChart.js +403 -0
  151. data/vendor/assets/javascripts/nvd3/src/models/multiChart.js +444 -0
  152. data/vendor/assets/javascripts/nvd3/src/models/ohlcBar.js +365 -0
  153. data/vendor/assets/javascripts/nvd3/src/models/pie.js +358 -0
  154. data/vendor/assets/javascripts/nvd3/src/models/pieChart.js +281 -0
  155. data/vendor/assets/javascripts/nvd3/src/models/scatter.js +622 -0
  156. data/vendor/assets/javascripts/nvd3/src/models/scatterChart.js +576 -0
  157. data/vendor/assets/javascripts/nvd3/src/models/scatterPlusLineChart.js +577 -0
  158. data/vendor/assets/javascripts/nvd3/src/models/sparkline.js +179 -0
  159. data/vendor/assets/javascripts/nvd3/src/models/sparklinePlus.js +291 -0
  160. data/vendor/assets/javascripts/nvd3/src/models/stackedArea.js +336 -0
  161. data/vendor/assets/javascripts/nvd3/src/models/stackedAreaChart.js +453 -0
  162. data/vendor/assets/javascripts/nvd3/src/nv.d3.css +671 -0
  163. data/vendor/assets/javascripts/nvd3/src/tooltip.js +129 -0
  164. data/vendor/assets/javascripts/nvd3/src/utils.js +105 -0
  165. data/vendor/assets/javascripts/set-nvd3-env.js.erb +5 -0
  166. data/vendor/assets/stylesheets/nvd3-rails.css +3 -0
  167. metadata +233 -0
@@ -0,0 +1,297 @@
1
+
2
+ nv.models.stackedAreaWithLegend = function() {
3
+ var margin = {top: 30, right: 20, bottom: 50, left: 60},
4
+ getWidth = function() { return 960 },
5
+ getHeight = function() { return 500 },
6
+ color = d3.scale.category20().range(),
7
+ showControls = true,
8
+ showLegend = true;
9
+
10
+ var x = d3.scale.linear(),
11
+ y = d3.scale.linear(),
12
+ getX = function(d) { return d.x },
13
+ getY = function(d) { return d.y },
14
+ xAxis = nv.models.axis().scale(x).orient('bottom'),
15
+ yAxis = nv.models.axis().scale(y).orient('left'),
16
+ legend = nv.models.legend().height(30),
17
+ controls = nv.models.legend().height(30),
18
+ stacked = nv.models.stackedArea(),
19
+ dispatch = d3.dispatch('tooltipShow', 'tooltipHide');
20
+
21
+ //TODO: let user select default
22
+ var controlsData = [
23
+ { key: 'Stacked' },
24
+ { key: 'Stream', disabled: true },
25
+ { key: 'Expanded', disabled: true }
26
+ ];
27
+
28
+
29
+ function chart(selection) {
30
+ selection.each(function(data) {
31
+ var width = getWidth(),
32
+ height = getHeight(),
33
+ availableWidth = width - margin.left - margin.right,
34
+ availableHeight = height - margin.top - margin.bottom;
35
+
36
+ var seriesData = data.filter(function(d) { return !d.disabled })
37
+ .reduce(function(prev, curr, index) { //sum up all the y's
38
+ curr.values.forEach(function(d,i) {
39
+ if (!index) prev[i] = {x: getX(d,i), y:0};
40
+ prev[i].y += getY(d,i);
41
+ });
42
+ return prev;
43
+ }, []);
44
+
45
+
46
+ x .domain(d3.extent(d3.merge(seriesData), function(d) { return d.x } ))
47
+ .range([0, availableWidth]);
48
+
49
+ y .domain(stacked.offset() == 'zero' ?
50
+ [0, d3.max(seriesData, function(d) { return d.y } )] :
51
+ [0, 1] // 0 - 100%
52
+ )
53
+ .range([availableHeight, 0]);
54
+
55
+ stacked
56
+ .width(availableWidth)
57
+ .height(availableHeight)
58
+ //.color(color)
59
+ .color(data.map(function(d,i) {
60
+ return d.color || color[i % 20];
61
+ }).filter(function(d,i) { return !data[i].disabled }))
62
+
63
+
64
+ var wrap = d3.select(this).selectAll('g.wrap.stackedAreaWithLegend').data([data]);
65
+ var gEnter = wrap.enter().append('g').attr('class', 'wrap nvd3 stackedAreaWithLegend').append('g');
66
+
67
+ gEnter.append('g').attr('class', 'x axis');
68
+ gEnter.append('g').attr('class', 'y axis');
69
+ gEnter.append('g').attr('class', 'stackedWrap');
70
+ gEnter.append('g').attr('class', 'legendWrap');
71
+ gEnter.append('g').attr('class', 'controlsWrap');
72
+
73
+
74
+ var g = wrap.select('g');
75
+
76
+
77
+ if (showLegend) {
78
+ //TODO: margins should be adjusted based on what components are used: axes, axis labels, legend
79
+ margin.top = legend.height();
80
+
81
+ legend
82
+ .width(width/2 - margin.right)
83
+ .color(color);
84
+
85
+ g.select('.legendWrap')
86
+ .datum(data)
87
+ .attr('transform', 'translate(' + (width/2 - margin.left) + ',' + (-margin.top) +')')
88
+ .call(legend);
89
+ }
90
+
91
+
92
+ if (showControls) {
93
+ controls.width(280).color(['#444', '#444', '#444']);
94
+ g.select('.controlsWrap')
95
+ .datum(controlsData)
96
+ .attr('transform', 'translate(0,' + (-margin.top) +')')
97
+ .call(controls);
98
+ }
99
+
100
+
101
+ g.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
102
+
103
+
104
+ var stackedWrap = g.select('.stackedWrap')
105
+ .datum(data);
106
+ d3.transition(stackedWrap).call(stacked);
107
+
108
+
109
+ xAxis
110
+ .domain(x.domain())
111
+ .range(x.range())
112
+ .ticks( width / 100 )
113
+ .tickSize(-availableHeight, 0);
114
+
115
+ g.select('.x.axis')
116
+ .attr('transform', 'translate(0,' + availableHeight + ')');
117
+ d3.transition(g.select('.x.axis'))
118
+ .call(xAxis);
119
+
120
+ yAxis
121
+ .domain(y.domain())
122
+ .range(y.range())
123
+ .ticks(stacked.offset() == 'wiggle' ? 0 : height / 36)
124
+ .tickSize(-availableWidth, 0)
125
+ .tickFormat(stacked.offset() == 'zero' ? d3.format(',.2f') : d3.format('%')); //TODO: stacked format should be set by caller
126
+
127
+ d3.transition(g.select('.y.axis'))
128
+ .call(yAxis);
129
+
130
+
131
+
132
+ //TODO: FIX Logic error, screws up when series are disabled by clicking legend, then series are desiabled by clicking the area
133
+ stacked.dispatch.on('areaClick.toggle', function(e) {
134
+ if (data.filter(function(d) { return !d.disabled }).length === 1)
135
+ data = data.map(function(d) {
136
+ if (d.disabled)
137
+ d.values.map(function(p) { p.y = p._y || p.y; return p }); // ....
138
+
139
+ d.disabled = false;
140
+
141
+ return d
142
+ });
143
+ else
144
+ data = data.map(function(d,i) {
145
+ if (!d.disabled && i !== e.seriesIndex)
146
+ d.values.map(function(p) { p._y = p.y; p.y = 0; return p }); //TODO: need to use value from getY, not always d.y
147
+
148
+ if (d.disabled && i === e.seriesIndex)
149
+ d.values.map(function(p) { p.y = p._y || p.y; return p }); // ....
150
+
151
+ d.disabled = (i != e.seriesIndex);
152
+
153
+ return d
154
+ });
155
+
156
+ selection.transition().call(chart);
157
+ });
158
+ legend.dispatch.on('legendClick', function(d,i) {
159
+ d.disabled = !d.disabled;
160
+
161
+ if (d.disabled)
162
+ d.values.map(function(p) { p._y = p.y; p.y = 0; return p }); //TODO: need to use value from getY, not always d.y
163
+ else
164
+ d.values.map(function(p) { p.y = p._y; return p }); // ....
165
+
166
+ if (!data.filter(function(d) { return !d.disabled }).length) {
167
+ data.map(function(d) {
168
+ d.disabled = false;
169
+ d.values.map(function(p) { p.y = p._y; return p }); // ....
170
+ return d;
171
+ });
172
+ }
173
+
174
+ selection.transition().call(chart);
175
+ });
176
+
177
+ controls.dispatch.on('legendClick', function(d,i) {
178
+ if (!d.disabled) return;
179
+
180
+ controlsData = controlsData.map(function(s) {
181
+ s.disabled = true;
182
+ return s;
183
+ });
184
+ d.disabled = false;
185
+
186
+ switch (d.key) {
187
+ case 'Stacked':
188
+ stacked.style('stack');
189
+ break;
190
+ case 'Stream':
191
+ stacked.style('stream');
192
+ break;
193
+ case 'Expanded':
194
+ stacked.style('expand');
195
+ break;
196
+ }
197
+
198
+ selection.transition().call(chart);
199
+ });
200
+
201
+
202
+ /*
203
+ legend.dispatch.on('legendMouseover', function(d, i) {
204
+ d.hover = true;
205
+ selection.transition().call(chart)
206
+ });
207
+
208
+ legend.dispatch.on('legendMouseout', function(d, i) {
209
+ d.hover = false;
210
+ selection.transition().call(chart)
211
+ });
212
+ */
213
+
214
+ stacked.dispatch.on('tooltipShow', function(e) {
215
+ //disable tooltips when value ~= 0
216
+ //// TODO: consider removing points from voronoi that have 0 value instead of this hack
217
+ if (!Math.round(getY(e.point) * 100)) { // 100 will not be good for very small numbers... will have to think about making this valu dynamic, based on data range
218
+ setTimeout(function() { d3.selectAll('.point.hover').classed('hover', false) }, 0);
219
+ return false;
220
+ }
221
+
222
+ e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top],
223
+ dispatch.tooltipShow(e);
224
+ });
225
+
226
+ stacked.dispatch.on('tooltipHide', function(e) {
227
+ dispatch.tooltipHide(e);
228
+ });
229
+ });
230
+
231
+
232
+
233
+ /*
234
+ // If the legend changed the margin's height, need to recalc positions... should think of a better way to prevent duplicate work
235
+ if (margin.top != legend.height())
236
+ chart(selection);
237
+ */
238
+
239
+
240
+ return chart;
241
+ }
242
+
243
+
244
+ chart.dispatch = dispatch;
245
+ chart.stacked = stacked;
246
+ chart.xAxis = xAxis;
247
+ chart.yAxis = yAxis;
248
+
249
+ d3.rebind(chart, stacked, 'interactive', 'offset', 'order', 'style', 'clipEdge', 'size', 'forceX', 'forceY', 'forceSize');
250
+
251
+ chart.x = function(_) {
252
+ if (!arguments.length) return getX;
253
+ getX = d3.functor(_); //not used locally, so could jsut be a rebind
254
+ stacked.x(getX);
255
+ return chart;
256
+ };
257
+
258
+ chart.y = function(_) {
259
+ if (!arguments.length) return getY;
260
+ getY = d3.functor(_);
261
+ stacked.y(getY);
262
+ return chart;
263
+ };
264
+
265
+ chart.margin = function(_) {
266
+ if (!arguments.length) return margin;
267
+ margin = _;
268
+ return chart;
269
+ };
270
+
271
+ chart.width = function(_) {
272
+ if (!arguments.length) return getWidth;
273
+ getWidth = d3.functor(_);
274
+ return chart;
275
+ };
276
+
277
+ chart.height = function(_) {
278
+ if (!arguments.length) return getHeight;
279
+ getHeight = d3.functor(_);
280
+ return chart;
281
+ };
282
+
283
+ chart.showControls = function(_) {
284
+ if (!arguments.length) return showControls;
285
+ showControls = _;
286
+ return chart;
287
+ };
288
+
289
+ chart.showLegend = function(_) {
290
+ if (!arguments.length) return showLegend;
291
+ showLegend = _;
292
+ return chart;
293
+ };
294
+
295
+
296
+ return chart;
297
+ }
@@ -0,0 +1,96 @@
1
+ <!DOCTYPE html>
2
+ <meta charset="utf-8">
3
+ <link href="../src/nv.d3.css" rel="stylesheet" type="text/css">
4
+ <style>
5
+
6
+ body {
7
+ overflow-y:scroll;
8
+ }
9
+
10
+ </style>
11
+ <body>
12
+
13
+ <br> <br> <br> <br> <br>
14
+
15
+ <div class="gallery" id="chart"></div>
16
+
17
+ <script src="../lib/d3.v2.js"></script>
18
+ <script src="../nv.d3.js"></script>
19
+ <script src="../src/models/bullet.js"></script>
20
+ <script>
21
+
22
+ var width = 960,
23
+ height = 55,
24
+ margin = {top: 5, right: 40, bottom: 20, left: 120};
25
+
26
+ var chart = nv.models.bullet()
27
+ .width(width - margin.right - margin.left)
28
+ .height(height - margin.top - margin.bottom);
29
+
30
+
31
+ data = [
32
+ {"title":"Revenue","subtitle":"US$, in thousands","ranges":[-150,-225,-300],"measures":[-220],"markers":[-250]}
33
+ /*
34
+ //TODO: fix the tooltip offset if multiple
35
+ ,
36
+ {"title":"Profit","subtitle":"%","ranges":[20,25,30],"measures":[21],"markers":[26]},
37
+ {"title":"Order Size","subtitle":"US$, average","ranges":[350,500,600],"measures":[100],"markers":[550]},
38
+ {"title":"New Customers","subtitle":"count","ranges":[1400,2000,2500],"measures":[1000],"markers":[1000]},
39
+ {"title":"Satisfaction","subtitle":"out of 5","ranges":[3.5,4.25,5],"measures":[3.2,4.7],"markers":[4.4]}
40
+ */
41
+ ];
42
+
43
+ //TODO: to be consistent with other models, should be appending a g to an already made svg, not creating the svg element
44
+ var vis = d3.select("#chart").selectAll("svg")
45
+ .data(data)
46
+ .enter().append("svg")
47
+ .attr("class", "bullet nvd3")
48
+ .attr("width", width)
49
+ .attr("height", height)
50
+ //.append("g")
51
+ //.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
52
+
53
+ vis
54
+ .transition()
55
+ .duration(1000)
56
+ .call(chart);
57
+
58
+
59
+ window.transition = function() {
60
+ vis.datum(randomize);
61
+
62
+ vis
63
+ .transition()
64
+ .duration(1000)
65
+ .call(chart);
66
+ };
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+ function randomize(d) {
76
+ if (!d.randomizer) d.randomizer = randomizer(d);
77
+ d.ranges = d.ranges.map(d.randomizer);
78
+ d.markers = d.markers.map(d.randomizer);
79
+ d.measures = d.measures.map(d.randomizer);
80
+ return d;
81
+ }
82
+
83
+ function randomizer(d) {
84
+ var k = d3.max(d.ranges) * .2;
85
+ return function(d) {
86
+ return Math.max(0, d + k * (Math.random() - .5));
87
+ };
88
+ }
89
+
90
+
91
+
92
+
93
+ d3.select('body').on('click', window.transition);
94
+
95
+
96
+ </script>
@@ -0,0 +1,94 @@
1
+ <!DOCTYPE html>
2
+ <meta charset="utf-8">
3
+ <link href="../src/nv.d3.css" rel="stylesheet" type="text/css">
4
+ <style>
5
+
6
+ body {
7
+ overflow-y:scroll;
8
+ }
9
+
10
+ </style>
11
+ <body>
12
+
13
+ <br> <br> <br> <br> <br>
14
+
15
+ <div class="gallery" id="chart"></div>
16
+
17
+ <script src="../lib/d3.v2.js"></script>
18
+ <script src="../nv.d3.js"></script>
19
+ <script src="../src/models/bullet.js"></script>
20
+ <script src="../src/models/bulletChart.js"></script>
21
+ <script>
22
+
23
+ var width = 960,
24
+ height = 80,
25
+ margin = {top: 5, right: 40, bottom: 20, left: 120};
26
+
27
+ var chart = nv.models.bulletChart()
28
+ .width(width - margin.right - margin.left)
29
+ .height(height - margin.top - margin.bottom);
30
+
31
+
32
+ data = [
33
+ {"title":"Revenue","subtitle":"US$, in thousands","ranges":[150,225,300],"measures":[220],"markers":[250]}
34
+ /*
35
+ //TODO: fix the tooltip offset if multiple
36
+ ,
37
+ {"title":"Profit","subtitle":"%","ranges":[20,25,30],"measures":[21],"markers":[26]},
38
+ {"title":"Order Size","subtitle":"US$, average","ranges":[350,500,600],"measures":[100],"markers":[550]},
39
+ {"title":"New Customers","subtitle":"count","ranges":[1400,2000,2500],"measures":[1000],"markers":[1000]},
40
+ {"title":"Satisfaction","subtitle":"out of 5","ranges":[3.5,4.25,5],"measures":[3.2,4.7],"markers":[4.4]}
41
+ */
42
+ ];
43
+
44
+ //TODO: to be consistent with other models, should be appending a g to an already made svg, not creating the svg element
45
+ var vis = d3.select("#chart").selectAll("svg")
46
+ .data(data)
47
+ .enter().append("svg")
48
+ .attr("class", "bullet nvd3")
49
+ .attr("width", width)
50
+ .attr("height", height)
51
+
52
+ vis
53
+ .transition()
54
+ .duration(1000)
55
+ .call(chart);
56
+
57
+
58
+
59
+ window.transition = function() {
60
+ vis.datum(randomize);
61
+
62
+ vis
63
+ .transition()
64
+ .duration(1000)
65
+ .call(chart);
66
+ };
67
+
68
+
69
+
70
+
71
+
72
+
73
+ function randomize(d) {
74
+ if (!d.randomizer) d.randomizer = randomizer(d);
75
+ d.ranges = d.ranges.map(d.randomizer);
76
+ d.markers = d.markers.map(d.randomizer);
77
+ d.measures = d.measures.map(d.randomizer);
78
+ return d;
79
+ }
80
+
81
+ function randomizer(d) {
82
+ var k = d3.max(d.ranges) * .2;
83
+ return function(d) {
84
+ return Math.max(0, d + k * (Math.random() - .5));
85
+ };
86
+ }
87
+
88
+
89
+
90
+
91
+ d3.select('body').on('click', window.transition);
92
+
93
+
94
+ </script>