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,340 @@
1
+
2
+ nv.models.lineTimeSeriesChart = function() {
3
+
4
+ //============================================================
5
+ // Public Variables with Default Settings
6
+ //------------------------------------------------------------
7
+
8
+ var lines = nv.models.line()
9
+ , xAxis = nv.models.axis()
10
+ , yAxis = nv.models.axis()
11
+ , legend = nv.models.legend()
12
+ ;
13
+ // change the X scale to display time
14
+ lines.xScale(d3.time.scale());
15
+
16
+ var margin = {top: 15, right: 10, bottom: 20, left: 60}
17
+ , color = nv.utils.defaultColor()
18
+ , width = null
19
+ , height = null
20
+ , showLegend = true
21
+ , tooltips = true
22
+ , tooltip = function(key, x, y, e, graph) {
23
+ return '<h3>' + key + '</h3>' +
24
+ '<p>' + y + ' at ' + x + '</p>'
25
+ }
26
+ , x
27
+ , y
28
+ , noData = 'No Data Available.'
29
+ , dispatch = d3.dispatch('tooltipShow', 'tooltipHide')
30
+ ;
31
+
32
+ xAxis
33
+ .orient('bottom')
34
+ .tickPadding(7)
35
+ .highlightZero(false)
36
+ .showMaxMin(false)
37
+ ;
38
+ yAxis
39
+ .orient('left')
40
+ ;
41
+
42
+ //============================================================
43
+
44
+
45
+ //============================================================
46
+ // Private Variables
47
+ //------------------------------------------------------------
48
+
49
+ var showTooltip = function(e, offsetElement) {
50
+
51
+ // New addition to calculate position if SVG is scaled with viewBox, may move TODO: consider implementing everywhere else
52
+ if (offsetElement) {
53
+ var svg = d3.select(offsetElement).select('svg');
54
+ var viewBox = svg.attr('viewBox');
55
+ if (viewBox) {
56
+ viewBox = viewBox.split(' ');
57
+ var ratio = parseInt(svg.style('width')) / viewBox[2];
58
+ e.pos[0] = e.pos[0] * ratio;
59
+ e.pos[1] = e.pos[1] * ratio;
60
+ }
61
+ }
62
+
63
+ var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
64
+ top = e.pos[1] + ( offsetElement.offsetTop || 0),
65
+ x = d3.time.format("%Y/%m/%d %X")(new Date(lines.x()(e.point, e.pointIndex))),
66
+ y = yAxis.tickFormat()(lines.y()(e.point, e.pointIndex)),
67
+ content = tooltip(e.series.key, x, y, e, chart);
68
+
69
+ nv.tooltip.show([left, top], content, null, null, offsetElement);
70
+ };
71
+
72
+ //============================================================
73
+
74
+
75
+ function chart(selection) {
76
+ selection.each(function(data) {
77
+ var container = d3.select(this),
78
+ that = this;
79
+
80
+ var availableWidth = (width || parseInt(container.style('width')) || 960)
81
+ - margin.left - margin.right,
82
+ availableHeight = (height || parseInt(container.style('height')) || 400)
83
+ - margin.top - margin.bottom;
84
+
85
+
86
+ chart.update = function() { chart(selection) };
87
+ chart.container = this;
88
+
89
+
90
+ //------------------------------------------------------------
91
+ // Display noData message if there's nothing to show.
92
+
93
+ if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
94
+ var noDataText = container.selectAll('.nv-noData').data([noData]);
95
+
96
+ noDataText.enter().append('text')
97
+ .attr('class', 'nvd3 nv-noData')
98
+ .attr('dy', '-.7em')
99
+ .style('text-anchor', 'middle');
100
+
101
+ noDataText
102
+ .attr('x', margin.left + availableWidth / 2)
103
+ .attr('y', margin.top + availableHeight / 2)
104
+ .text(function(d) { return d });
105
+
106
+ return chart;
107
+ } else {
108
+ container.selectAll('.nv-noData').remove();
109
+ }
110
+
111
+ //------------------------------------------------------------
112
+
113
+
114
+ //------------------------------------------------------------
115
+ // Setup Scales
116
+
117
+ x = lines.xScale();
118
+ y = lines.yScale();
119
+
120
+ //------------------------------------------------------------
121
+
122
+
123
+ //------------------------------------------------------------
124
+ // Setup containers and skeleton of chart
125
+
126
+ var wrap = container.selectAll('g.nv-wrap.nv-lineTimeSeriesChart').data([data]);
127
+ var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-lineTimeSeriesChart').append('g');
128
+ var g = wrap.select('g');
129
+
130
+ gEnter.append('g').attr('class', 'nv-x nv-axis');
131
+ gEnter.append('g').attr('class', 'nv-y nv-axis');
132
+ gEnter.append('g').attr('class', 'nv-linesWrap');
133
+ gEnter.append('g').attr('class', 'nv-legendWrap');
134
+
135
+ //------------------------------------------------------------
136
+
137
+
138
+ //------------------------------------------------------------
139
+ // Legend
140
+
141
+ if (showLegend) {
142
+ legend.width(availableWidth);
143
+
144
+ g.select('.nv-legendWrap')
145
+ .datum(data)
146
+ .call(legend);
147
+
148
+ if ( margin.top != legend.height()) {
149
+ margin.top = legend.height();
150
+ availableHeight = (height || parseInt(container.style('height')) || 400)
151
+ - margin.top - margin.bottom;
152
+ }
153
+
154
+ wrap.select('.nv-legendWrap')
155
+ .attr('transform', 'translate(0,' + (-margin.top) +')')
156
+ }
157
+
158
+ //------------------------------------------------------------
159
+
160
+ wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
161
+
162
+
163
+ //------------------------------------------------------------
164
+ // Main Chart Component(s)
165
+
166
+ lines
167
+ .width(availableWidth)
168
+ .height(availableHeight)
169
+ .color(data.map(function(d,i) {
170
+ return d.color || color(d, i);
171
+ }).filter(function(d,i) { return !data[i].disabled }));
172
+
173
+
174
+ var linesWrap = g.select('.nv-linesWrap')
175
+ .datum(data.filter(function(d) { return !d.disabled }))
176
+
177
+ d3.transition(linesWrap).call(lines);
178
+
179
+ //------------------------------------------------------------
180
+
181
+
182
+ //------------------------------------------------------------
183
+ // Setup Axes
184
+
185
+ xAxis
186
+ .scale(x)
187
+ .ticks( availableWidth / 100 )
188
+ .tickSize(-availableHeight, 0);
189
+ // nv-axis sets a stupid tick formatter, need to revert that:
190
+ xAxis.axis.tickFormat(xAxis.axis.scale.tickFormat);
191
+
192
+ g.select('.nv-x.nv-axis')
193
+ .attr('transform', 'translate(0,' + y.range()[0] + ')');
194
+ d3.transition(g.select('.nv-x.nv-axis'))
195
+ .call(xAxis);
196
+
197
+
198
+ yAxis
199
+ .scale(y)
200
+ .ticks( availableHeight / 36 )
201
+ .tickSize( -availableWidth, 0);
202
+
203
+ d3.transition(g.select('.nv-y.nv-axis'))
204
+ .call(yAxis);
205
+
206
+ //------------------------------------------------------------
207
+
208
+
209
+ //============================================================
210
+ // Event Handling/Dispatching (in chart's scope)
211
+ //------------------------------------------------------------
212
+
213
+ legend.dispatch.on('legendClick', function(d,i) {
214
+ d.disabled = !d.disabled;
215
+
216
+ if (!data.filter(function(d) { return !d.disabled }).length) {
217
+ data.map(function(d) {
218
+ d.disabled = false;
219
+ wrap.selectAll('.nv-series').classed('disabled', false);
220
+ return d;
221
+ });
222
+ }
223
+
224
+ selection.transition().call(chart);
225
+ });
226
+
227
+ /*
228
+ legend.dispatch.on('legendMouseover', function(d, i) {
229
+ d.hover = true;
230
+ selection.transition().call(chart)
231
+ });
232
+
233
+ legend.dispatch.on('legendMouseout', function(d, i) {
234
+ d.hover = false;
235
+ selection.transition().call(chart)
236
+ });
237
+ */
238
+
239
+ dispatch.on('tooltipShow', function(e) {
240
+ if (tooltips) showTooltip(e, that.parentNode);
241
+ });
242
+
243
+ //============================================================
244
+
245
+ });
246
+
247
+ return chart;
248
+ }
249
+
250
+
251
+ //============================================================
252
+ // Event Handling/Dispatching (out of chart's scope)
253
+ //------------------------------------------------------------
254
+
255
+ lines.dispatch.on('elementMouseover.tooltip', function(e) {
256
+ e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
257
+ dispatch.tooltipShow(e);
258
+ });
259
+
260
+ lines.dispatch.on('elementMouseout.tooltip', function(e) {
261
+ dispatch.tooltipHide(e);
262
+ });
263
+
264
+ dispatch.on('tooltipHide', function() {
265
+ if (tooltips) nv.tooltip.cleanup();
266
+ });
267
+
268
+ //============================================================
269
+
270
+
271
+ //============================================================
272
+ // Expose Public Variables
273
+ //------------------------------------------------------------
274
+
275
+ // expose chart's sub-components
276
+ chart.dispatch = dispatch;
277
+ chart.lines = lines;
278
+ chart.legend = legend;
279
+ chart.xAxis = xAxis;
280
+ chart.yAxis = yAxis;
281
+
282
+ d3.rebind(chart, lines, 'defined', 'isArea', 'x', 'y', 'size', 'xScale', 'yScale', 'xDomain', 'yDomain', 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi', 'id', 'interpolate');
283
+
284
+ chart.margin = function(_) {
285
+ if (!arguments.length) return margin;
286
+ margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
287
+ margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
288
+ margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
289
+ margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
290
+ return chart;
291
+ };
292
+
293
+ chart.width = function(_) {
294
+ if (!arguments.length) return width;
295
+ width = _;
296
+ return chart;
297
+ };
298
+
299
+ chart.height = function(_) {
300
+ if (!arguments.length) return height;
301
+ height = _;
302
+ return chart;
303
+ };
304
+
305
+ chart.color = function(_) {
306
+ if (!arguments.length) return color;
307
+ color = nv.utils.getColor(_);
308
+ legend.color(color);
309
+ return chart;
310
+ };
311
+
312
+ chart.showLegend = function(_) {
313
+ if (!arguments.length) return showLegend;
314
+ showLegend = _;
315
+ return chart;
316
+ };
317
+
318
+ chart.tooltips = function(_) {
319
+ if (!arguments.length) return tooltips;
320
+ tooltips = _;
321
+ return chart;
322
+ };
323
+
324
+ chart.tooltipContent = function(_) {
325
+ if (!arguments.length) return tooltip;
326
+ tooltip = _;
327
+ return chart;
328
+ };
329
+
330
+ chart.noData = function(_) {
331
+ if (!arguments.length) return noData;
332
+ noData = _;
333
+ return chart;
334
+ };
335
+
336
+ //============================================================
337
+
338
+
339
+ return chart;
340
+ }
@@ -0,0 +1,197 @@
1
+
2
+ nv.models.lineWithFisheye = function() {
3
+ //Default Settings
4
+ var margin = {top: 0, right: 0, bottom: 0, left: 0},
5
+ width = 960,
6
+ height = 500,
7
+ color = nv.utils.defaultColor(), // function that returns colors
8
+ id = Math.floor(Math.random() * 10000), //Create semi-unique ID incase user doesn't select one
9
+ getX = function(d) { return d.x }, // accessor to get the x value from a data point
10
+ getY = function(d) { return d.y }, // accessor to get the y value from a data point
11
+ clipEdge = false, // if true, masks lines within x and y scale
12
+ interpolate = "linear"; // controls the line interpolation
13
+
14
+
15
+ var scatter = nv.models.scatter()
16
+ .id(id)
17
+ .size(16) // default size
18
+ .sizeDomain([16,256]), //set to speed up calculation, needs to be unset if there is a custom size accessor
19
+ //x = scatter.xScale(),
20
+ //y = scatter.yScale(),
21
+ x, y,
22
+ x0, y0, timeoutID;
23
+
24
+
25
+ function chart(selection) {
26
+ selection.each(function(data) {
27
+ var availableWidth = width - margin.left - margin.right,
28
+ availableHeight = height - margin.top - margin.bottom;
29
+
30
+ //get the scales inscase scatter scale was set manually
31
+ x = x || scatter.xScale();
32
+ y = y || scatter.yScale();
33
+
34
+ //store old scales if they exist
35
+ x0 = x0 || x;
36
+ y0 = y0 || y;
37
+
38
+
39
+ var wrap = d3.select(this).selectAll('g.nv-wrap.nv-line').data([data]);
40
+ var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-line');
41
+ var defsEnter = wrapEnter.append('defs');
42
+ var gEnter = wrapEnter.append('g');
43
+ var g = wrap.select('g')
44
+
45
+ wrapEnter.append('g').attr('class', 'nv-scatterWrap');
46
+ var scatterWrap = wrap.select('.nv-scatterWrap').datum(data);
47
+
48
+ gEnter.append('g').attr('class', 'nv-groups');
49
+
50
+
51
+ scatter
52
+ .width(availableWidth)
53
+ .height(availableHeight)
54
+
55
+ d3.transition(scatterWrap).call(scatter);
56
+
57
+
58
+ wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
59
+
60
+
61
+ defsEnter.append('clipPath')
62
+ .attr('id', 'nv-edge-clip-' + id)
63
+ .append('rect');
64
+
65
+ wrap.select('#nv-edge-clip-' + id + ' rect')
66
+ .attr('width', availableWidth)
67
+ .attr('height', availableHeight);
68
+
69
+ g .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + id + ')' : '');
70
+ scatterWrap
71
+ .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + id + ')' : '');
72
+
73
+
74
+
75
+
76
+ var groups = wrap.select('.nv-groups').selectAll('.nv-group')
77
+ .data(function(d) { return d }, function(d) { return d.key });
78
+ groups.enter().append('g')
79
+ .style('stroke-opacity', 1e-6)
80
+ .style('fill-opacity', 1e-6);
81
+ d3.transition(groups.exit())
82
+ .style('stroke-opacity', 1e-6)
83
+ .style('fill-opacity', 1e-6)
84
+ .remove();
85
+ groups
86
+ .attr('class', function(d,i) { return 'nv-group nv-series-' + i })
87
+ .classed('hover', function(d) { return d.hover })
88
+ .style('fill', function(d,i){ return color(d, i) })
89
+ .style('stroke', function(d,i){ return color(d, i) })
90
+ d3.transition(groups)
91
+ .style('stroke-opacity', 1)
92
+ .style('fill-opacity', .5)
93
+
94
+
95
+ var paths = groups.selectAll('path')
96
+ .data(function(d, i) { return [d.values] });
97
+ paths.enter().append('path')
98
+ .attr('class', 'nv-line')
99
+ .attr('d', d3.svg.line()
100
+ .interpolate(interpolate)
101
+ .x(function(d,i) { return x0(getX(d,i)) })
102
+ .y(function(d,i) { return y0(getY(d,i)) })
103
+ );
104
+ d3.transition(groups.exit().selectAll('path'))
105
+ .attr('d', d3.svg.line()
106
+ .interpolate(interpolate)
107
+ .x(function(d,i) { return x(getX(d,i)) })
108
+ .y(function(d,i) { return y(getY(d,i)) })
109
+ )
110
+ .remove(); // redundant? line is already being removed
111
+ d3.transition(paths)
112
+ .attr('d', d3.svg.line()
113
+ .interpolate(interpolate)
114
+ .x(function(d,i) { return x(getX(d,i)) })
115
+ .y(function(d,i) { return y(getY(d,i)) })
116
+ );
117
+
118
+
119
+ //store old scales for use in transitions on update, to animate from old to new positions
120
+ x0 = x.copy();
121
+ y0 = y.copy();
122
+
123
+ });
124
+
125
+ return chart;
126
+ }
127
+
128
+
129
+ chart.dispatch = scatter.dispatch;
130
+
131
+ d3.rebind(chart, scatter, 'interactive', 'size', 'xScale', 'yScale', 'zScale', 'xDomain', 'yDomain', 'sizeDomain', 'forceX', 'forceY', 'forceSize', 'clipVoronoi', 'clipRadius');
132
+
133
+ chart.margin = function(_) {
134
+ if (!arguments.length) return margin;
135
+ margin = _;
136
+ return chart;
137
+ };
138
+
139
+ chart.width = function(_) {
140
+ if (!arguments.length) return width;
141
+ width = _;
142
+ return chart;
143
+ };
144
+
145
+ chart.height = function(_) {
146
+ if (!arguments.length) return height;
147
+ height = _;
148
+ return chart;
149
+ };
150
+
151
+ chart.x = function(_) {
152
+ if (!arguments.length) return getX;
153
+ getX = _;
154
+ scatter.x(_);
155
+ return chart;
156
+ };
157
+
158
+ chart.y = function(_) {
159
+ if (!arguments.length) return getY;
160
+ getY = _;
161
+ scatter.y(_);
162
+ return chart;
163
+ };
164
+
165
+ chart.clipEdge = function(_) {
166
+ if (!arguments.length) return clipEdge;
167
+ clipEdge = _;
168
+ return chart;
169
+ };
170
+
171
+ chart.color = function(_) {
172
+ if (!arguments.length) return color;
173
+ color = nv.utils.getColor(_);
174
+ scatter.color(color);
175
+ return chart;
176
+ };
177
+
178
+ chart.id = function(_) {
179
+ if (!arguments.length) return id;
180
+ id = _;
181
+ return chart;
182
+ };
183
+
184
+ chart.interpolate = function(_) {
185
+ if (!arguments.length) return interpolate;
186
+ interpolate = _;
187
+ return chart;
188
+ };
189
+
190
+ chart.defined = function(_) {
191
+ if (!arguments.length) return defined;
192
+ defined = _;
193
+ return chart;
194
+ };
195
+
196
+ return chart;
197
+ }