picky-statistics 4.5.0 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (607) hide show
  1. data/lib/picky-statistics.rb +4 -2
  2. data/lib/picky-statistics/application/app.rb +10 -4
  3. data/lib/picky-statistics/application/javascripts/crossfilter.v1.min.js +1 -0
  4. data/lib/picky-statistics/application/javascripts/d3.v2.min.js +4 -0
  5. data/lib/picky-statistics/application/javascripts/helpers.js +258 -0
  6. data/lib/picky-statistics/application/javascripts/statistics.js +203 -63
  7. data/lib/picky-statistics/application/stylesheets/statistics.css +137 -71
  8. data/lib/picky-statistics/application/views/index.haml +42 -33
  9. data/lib/picky-statistics/logfile_reader.rb +106 -0
  10. data/spec/lib/picky-statistics/logfile_reader_spec.rb +57 -0
  11. metadata +12 -604
  12. data/lib/picky-statistics/application/javascripts/d3/LICENSE +0 -26
  13. data/lib/picky-statistics/application/javascripts/d3/Makefile +0 -268
  14. data/lib/picky-statistics/application/javascripts/d3/README.md +0 -51
  15. data/lib/picky-statistics/application/javascripts/d3/d3.chart.js +0 -984
  16. data/lib/picky-statistics/application/javascripts/d3/d3.chart.min.js +0 -1
  17. data/lib/picky-statistics/application/javascripts/d3/d3.csv.js +0 -92
  18. data/lib/picky-statistics/application/javascripts/d3/d3.csv.min.js +0 -1
  19. data/lib/picky-statistics/application/javascripts/d3/d3.geo.js +0 -938
  20. data/lib/picky-statistics/application/javascripts/d3/d3.geo.min.js +0 -1
  21. data/lib/picky-statistics/application/javascripts/d3/d3.geom.js +0 -835
  22. data/lib/picky-statistics/application/javascripts/d3/d3.geom.min.js +0 -1
  23. data/lib/picky-statistics/application/javascripts/d3/d3.js +0 -4690
  24. data/lib/picky-statistics/application/javascripts/d3/d3.layout.js +0 -1891
  25. data/lib/picky-statistics/application/javascripts/d3/d3.layout.min.js +0 -1
  26. data/lib/picky-statistics/application/javascripts/d3/d3.min.js +0 -2
  27. data/lib/picky-statistics/application/javascripts/d3/d3.time.js +0 -687
  28. data/lib/picky-statistics/application/javascripts/d3/d3.time.min.js +0 -1
  29. data/lib/picky-statistics/application/javascripts/d3/examples/albers/albers.html +0 -168
  30. data/lib/picky-statistics/application/javascripts/d3/examples/area/area-radial.html +0 -48
  31. data/lib/picky-statistics/application/javascripts/d3/examples/area/area.html +0 -113
  32. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-alternating.html +0 -50
  33. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-ggplot2.html +0 -68
  34. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-multiples.html +0 -117
  35. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-orientations.html +0 -63
  36. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-transition.html +0 -153
  37. data/lib/picky-statistics/application/javascripts/d3/examples/azimuthal/azimuthal.css +0 -21
  38. data/lib/picky-statistics/application/javascripts/d3/examples/azimuthal/azimuthal.html +0 -99
  39. data/lib/picky-statistics/application/javascripts/d3/examples/azimuthal/azimuthal.js +0 -29
  40. data/lib/picky-statistics/application/javascripts/d3/examples/bar/bar-hierarchy.html +0 -223
  41. data/lib/picky-statistics/application/javascripts/d3/examples/bar/bar.html +0 -101
  42. data/lib/picky-statistics/application/javascripts/d3/examples/bar/sample-data.csv +0 -53
  43. data/lib/picky-statistics/application/javascripts/d3/examples/bonne/bonne.html +0 -159
  44. data/lib/picky-statistics/application/javascripts/d3/examples/box/box.css +0 -4
  45. data/lib/picky-statistics/application/javascripts/d3/examples/box/box.html +0 -19
  46. data/lib/picky-statistics/application/javascripts/d3/examples/box/box.js +0 -68
  47. data/lib/picky-statistics/application/javascripts/d3/examples/brush/brush-ordinal.html +0 -92
  48. data/lib/picky-statistics/application/javascripts/d3/examples/brush/brush-x.html +0 -92
  49. data/lib/picky-statistics/application/javascripts/d3/examples/brush/brush-y.html +0 -91
  50. data/lib/picky-statistics/application/javascripts/d3/examples/brush/brush.html +0 -98
  51. data/lib/picky-statistics/application/javascripts/d3/examples/bubble/bubble.css +0 -8
  52. data/lib/picky-statistics/application/javascripts/d3/examples/bubble/bubble.html +0 -14
  53. data/lib/picky-statistics/application/javascripts/d3/examples/bubble/bubble.js +0 -46
  54. data/lib/picky-statistics/application/javascripts/d3/examples/bullet/bullet.css +0 -10
  55. data/lib/picky-statistics/application/javascripts/d3/examples/bullet/bullet.html +0 -18
  56. data/lib/picky-statistics/application/javascripts/d3/examples/bullet/bullet.js +0 -53
  57. data/lib/picky-statistics/application/javascripts/d3/examples/bullet/bullets.json +0 -7
  58. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-radial.css +0 -9
  59. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-radial.html +0 -15
  60. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-radial.js +0 -50
  61. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-treemap.css +0 -14
  62. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-treemap.html +0 -16
  63. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-treemap.js +0 -53
  64. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/packages.js +0 -49
  65. data/lib/picky-statistics/application/javascripts/d3/examples/button.css +0 -35
  66. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/calendar.css +0 -15
  67. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/dji-area.html +0 -120
  68. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/dji.csv +0 -5233
  69. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/dji.html +0 -15
  70. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/dji.js +0 -65
  71. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/vix.csv +0 -5231
  72. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/vix.html +0 -15
  73. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/vix.js +0 -65
  74. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/cartogram.css +0 -20
  75. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/cartogram.html +0 -15
  76. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/cartogram.js +0 -51
  77. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/demers.css +0 -9
  78. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/demers.html +0 -16
  79. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/demers.js +0 -79
  80. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/dorling.css +0 -9
  81. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/dorling.html +0 -16
  82. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/dorling.js +0 -80
  83. data/lib/picky-statistics/application/javascripts/d3/examples/chord/chord-flare.html +0 -109
  84. data/lib/picky-statistics/application/javascripts/d3/examples/chord/chord.css +0 -9
  85. data/lib/picky-statistics/application/javascripts/d3/examples/chord/chord.html +0 -14
  86. data/lib/picky-statistics/application/javascripts/d3/examples/chord/chord.js +0 -98
  87. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth-area.html +0 -51
  88. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth-bounds.html +0 -46
  89. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth.css +0 -16
  90. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth.html +0 -15
  91. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth.js +0 -38
  92. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/unemployment.json +0 -1
  93. data/lib/picky-statistics/application/javascripts/d3/examples/clock/clock.css +0 -23
  94. data/lib/picky-statistics/application/javascripts/d3/examples/clock/clock.html +0 -17
  95. data/lib/picky-statistics/application/javascripts/d3/examples/clock/clock.js +0 -87
  96. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster-radial.html +0 -14
  97. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster-radial.js +0 -39
  98. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster.css +0 -15
  99. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster.html +0 -14
  100. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster.js +0 -39
  101. data/lib/picky-statistics/application/javascripts/d3/examples/contour/contour.html +0 -108
  102. data/lib/picky-statistics/application/javascripts/d3/examples/crimea/crimea-stacked-area.html +0 -109
  103. data/lib/picky-statistics/application/javascripts/d3/examples/crimea/crimea-stacked-bar.html +0 -98
  104. data/lib/picky-statistics/application/javascripts/d3/examples/crimea/crimea.csv +0 -24
  105. data/lib/picky-statistics/application/javascripts/d3/examples/custom/custom.html +0 -83
  106. data/lib/picky-statistics/application/javascripts/d3/examples/data/README.md +0 -13
  107. data/lib/picky-statistics/application/javascripts/d3/examples/data/faithful.json +0 -8
  108. data/lib/picky-statistics/application/javascripts/d3/examples/data/flare-imports.json +0 -222
  109. data/lib/picky-statistics/application/javascripts/d3/examples/data/flare.json +0 -380
  110. data/lib/picky-statistics/application/javascripts/d3/examples/data/morley.csv +0 -101
  111. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.csv +0 -2
  112. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.html +0 -5
  113. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.json +0 -1
  114. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.txt +0 -1
  115. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.xml +0 -4
  116. data/lib/picky-statistics/application/javascripts/d3/examples/data/stocks.csv +0 -807
  117. data/lib/picky-statistics/application/javascripts/d3/examples/data/unemployment.csv +0 -1709
  118. data/lib/picky-statistics/application/javascripts/d3/examples/data/us-borders.json +0 -1
  119. data/lib/picky-statistics/application/javascripts/d3/examples/data/us-counties.json +0 -3216
  120. data/lib/picky-statistics/application/javascripts/d3/examples/data/us-state-centroids.json +0 -54
  121. data/lib/picky-statistics/application/javascripts/d3/examples/data/us-states.json +0 -54
  122. data/lib/picky-statistics/application/javascripts/d3/examples/data/world-countries.json +0 -179
  123. data/lib/picky-statistics/application/javascripts/d3/examples/delaunay/delaunay.html +0 -44
  124. data/lib/picky-statistics/application/javascripts/d3/examples/donut/donut.html +0 -124
  125. data/lib/picky-statistics/application/javascripts/d3/examples/dot/dot.html +0 -103
  126. data/lib/picky-statistics/application/javascripts/d3/examples/drag/drag.html +0 -44
  127. data/lib/picky-statistics/application/javascripts/d3/examples/force/README +0 -10
  128. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-bounds.html +0 -70
  129. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-cluster.html +0 -249
  130. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-collapsible.html +0 -144
  131. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-dynamic.html +0 -118
  132. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-map.html +0 -104
  133. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-multi-foci.html +0 -68
  134. data/lib/picky-statistics/application/javascripts/d3/examples/force/force.css +0 -9
  135. data/lib/picky-statistics/application/javascripts/d3/examples/force/force.html +0 -14
  136. data/lib/picky-statistics/application/javascripts/d3/examples/force/force.js +0 -50
  137. data/lib/picky-statistics/application/javascripts/d3/examples/force/miserables.json +0 -1
  138. data/lib/picky-statistics/application/javascripts/d3/examples/great-arc/great-arc.html +0 -78
  139. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-data-key.html +0 -60
  140. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-data-nested-key.html +0 -75
  141. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-data-nested.html +0 -77
  142. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-data.html +0 -46
  143. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-event.html +0 -53
  144. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-node-key.html +0 -25
  145. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-order.html +0 -25
  146. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-sort.html +0 -75
  147. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-transform.html +0 -41
  148. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-transition-undefined.html +0 -43
  149. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-transition.html +0 -47
  150. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-webkit-transition.html +0 -64
  151. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/select-enter-add.html +0 -29
  152. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/selectAll-enter-add.html +0 -20
  153. data/lib/picky-statistics/application/javascripts/d3/examples/histogram/histogram.html +0 -80
  154. data/lib/picky-statistics/application/javascripts/d3/examples/horizon/horizon.css +0 -9
  155. data/lib/picky-statistics/application/javascripts/d3/examples/horizon/horizon.html +0 -25
  156. data/lib/picky-statistics/application/javascripts/d3/examples/horizon/horizon.js +0 -43
  157. data/lib/picky-statistics/application/javascripts/d3/examples/horizon/unemployment.json +0 -1
  158. data/lib/picky-statistics/application/javascripts/d3/examples/hull/hull.html +0 -75
  159. data/lib/picky-statistics/application/javascripts/d3/examples/kde/kde.css +0 -9
  160. data/lib/picky-statistics/application/javascripts/d3/examples/kde/kde.html +0 -14
  161. data/lib/picky-statistics/application/javascripts/d3/examples/kde/kde.js +0 -40
  162. data/lib/picky-statistics/application/javascripts/d3/examples/line/line.css +0 -22
  163. data/lib/picky-statistics/application/javascripts/d3/examples/line/line.html +0 -11
  164. data/lib/picky-statistics/application/javascripts/d3/examples/line/line.js +0 -63
  165. data/lib/picky-statistics/application/javascripts/d3/examples/marimekko/marimekko.html +0 -116
  166. data/lib/picky-statistics/application/javascripts/d3/examples/marimekko/marimekko.json +0 -18
  167. data/lib/picky-statistics/application/javascripts/d3/examples/marker/marker.html +0 -169
  168. data/lib/picky-statistics/application/javascripts/d3/examples/mercator/mercator.html +0 -133
  169. data/lib/picky-statistics/application/javascripts/d3/examples/moire/moire.html +0 -53
  170. data/lib/picky-statistics/application/javascripts/d3/examples/node-canvas/us-counties.js +0 -70
  171. data/lib/picky-statistics/application/javascripts/d3/examples/pack/pack.css +0 -15
  172. data/lib/picky-statistics/application/javascripts/d3/examples/pack/pack.html +0 -14
  173. data/lib/picky-statistics/application/javascripts/d3/examples/pack/pack.js +0 -33
  174. data/lib/picky-statistics/application/javascripts/d3/examples/parallel/cars.csv +0 -407
  175. data/lib/picky-statistics/application/javascripts/d3/examples/parallel/parallel.html +0 -134
  176. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-icicle-zoom.html +0 -59
  177. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-icicle.html +0 -45
  178. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-sunburst-zoom.html +0 -72
  179. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-sunburst.html +0 -21
  180. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-sunburst.js +0 -72
  181. data/lib/picky-statistics/application/javascripts/d3/examples/pie/pie-transition.html +0 -69
  182. data/lib/picky-statistics/application/javascripts/d3/examples/pie/pie.html +0 -51
  183. data/lib/picky-statistics/application/javascripts/d3/examples/population/population.css +0 -28
  184. data/lib/picky-statistics/application/javascripts/d3/examples/population/population.csv +0 -571
  185. data/lib/picky-statistics/application/javascripts/d3/examples/population/population.html +0 -13
  186. data/lib/picky-statistics/application/javascripts/d3/examples/population/population.js +0 -126
  187. data/lib/picky-statistics/application/javascripts/d3/examples/qq/qq.css +0 -18
  188. data/lib/picky-statistics/application/javascripts/d3/examples/qq/qq.html +0 -21
  189. data/lib/picky-statistics/application/javascripts/d3/examples/qq/qq.js +0 -66
  190. data/lib/picky-statistics/application/javascripts/d3/examples/qq/stats.js +0 -28
  191. data/lib/picky-statistics/application/javascripts/d3/examples/qq/turkers.json +0 -1
  192. data/lib/picky-statistics/application/javascripts/d3/examples/quadtree/quadtree.html +0 -114
  193. data/lib/picky-statistics/application/javascripts/d3/examples/showreel/showreel.html +0 -661
  194. data/lib/picky-statistics/application/javascripts/d3/examples/sizzle/sizzle.html +0 -27
  195. data/lib/picky-statistics/application/javascripts/d3/examples/sort/sort.css +0 -4
  196. data/lib/picky-statistics/application/javascripts/d3/examples/sort/sort.html +0 -12
  197. data/lib/picky-statistics/application/javascripts/d3/examples/sort/sort.js +0 -112
  198. data/lib/picky-statistics/application/javascripts/d3/examples/spline/spline.css +0 -30
  199. data/lib/picky-statistics/application/javascripts/d3/examples/spline/spline.html +0 -14
  200. data/lib/picky-statistics/application/javascripts/d3/examples/spline/spline.js +0 -113
  201. data/lib/picky-statistics/application/javascripts/d3/examples/splom/flowers.json +0 -1
  202. data/lib/picky-statistics/application/javascripts/d3/examples/splom/splom.css +0 -49
  203. data/lib/picky-statistics/application/javascripts/d3/examples/splom/splom.html +0 -13
  204. data/lib/picky-statistics/application/javascripts/d3/examples/splom/splom.js +0 -119
  205. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stack.css +0 -7
  206. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stack.html +0 -22
  207. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stack.js +0 -119
  208. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stream.css +0 -3
  209. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stream.html +0 -19
  210. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stream.js +0 -42
  211. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stream_layers.js +0 -33
  212. data/lib/picky-statistics/application/javascripts/d3/examples/superformula/dot.html +0 -104
  213. data/lib/picky-statistics/application/javascripts/d3/examples/superformula/explorer.html +0 -120
  214. data/lib/picky-statistics/application/javascripts/d3/examples/superformula/superformula.html +0 -70
  215. data/lib/picky-statistics/application/javascripts/d3/examples/superformula/superformula.js +0 -98
  216. data/lib/picky-statistics/application/javascripts/d3/examples/symbol-map/symbol-map.html +0 -67
  217. data/lib/picky-statistics/application/javascripts/d3/examples/touch/touch.html +0 -65
  218. data/lib/picky-statistics/application/javascripts/d3/examples/transform/test.html +0 -85
  219. data/lib/picky-statistics/application/javascripts/d3/examples/transform/transform.html +0 -60
  220. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree-dynamic.html +0 -111
  221. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree-interactive.html +0 -172
  222. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree-radial.html +0 -14
  223. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree-radial.js +0 -40
  224. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree.css +0 -15
  225. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree.html +0 -14
  226. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree.js +0 -39
  227. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap-svg.html +0 -22
  228. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap-svg.js +0 -34
  229. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap.css +0 -8
  230. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap.html +0 -22
  231. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap.js +0 -53
  232. data/lib/picky-statistics/application/javascripts/d3/examples/voroboids/boid.js +0 -235
  233. data/lib/picky-statistics/application/javascripts/d3/examples/voroboids/voroboids.css +0 -15
  234. data/lib/picky-statistics/application/javascripts/d3/examples/voroboids/voroboids.html +0 -14
  235. data/lib/picky-statistics/application/javascripts/d3/examples/voroboids/voroboids.js +0 -65
  236. data/lib/picky-statistics/application/javascripts/d3/examples/voronoi/voronoi.css +0 -16
  237. data/lib/picky-statistics/application/javascripts/d3/examples/voronoi/voronoi.html +0 -15
  238. data/lib/picky-statistics/application/javascripts/d3/examples/voronoi/voronoi.js +0 -34
  239. data/lib/picky-statistics/application/javascripts/d3/examples/zoom-pan/zoom-pan-transform.html +0 -96
  240. data/lib/picky-statistics/application/javascripts/d3/examples/zoom-pan/zoom-pan.html +0 -120
  241. data/lib/picky-statistics/application/javascripts/d3/examples/zoom/dji.csv +0 -5233
  242. data/lib/picky-statistics/application/javascripts/d3/examples/zoom/zoom.html +0 -162
  243. data/lib/picky-statistics/application/javascripts/d3/lib/colorbrewer/LICENSE +0 -38
  244. data/lib/picky-statistics/application/javascripts/d3/lib/colorbrewer/colorbrewer.css +0 -1327
  245. data/lib/picky-statistics/application/javascripts/d3/lib/colorbrewer/colorbrewer.js +0 -32
  246. data/lib/picky-statistics/application/javascripts/d3/lib/jit/LICENSE +0 -27
  247. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/LICENSE +0 -25
  248. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  249. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  250. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_flat_10_000000_40x100.png +0 -0
  251. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  252. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  253. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  254. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  255. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  256. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  257. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
  258. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_228ef1_256x240.png +0 -0
  259. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_ef8c08_256x240.png +0 -0
  260. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_ffd27a_256x240.png +0 -0
  261. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
  262. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/jquery-ui.css +0 -318
  263. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/jquery-ui.min.js +0 -83
  264. data/lib/picky-statistics/application/javascripts/d3/lib/jquery/LICENSE +0 -20
  265. data/lib/picky-statistics/application/javascripts/d3/lib/jquery/jquery.js +0 -6883
  266. data/lib/picky-statistics/application/javascripts/d3/lib/jquery/jquery.min.js +0 -166
  267. data/lib/picky-statistics/application/javascripts/d3/lib/polymaps/LICENSE +0 -28
  268. data/lib/picky-statistics/application/javascripts/d3/lib/protovis/LICENSE +0 -27
  269. data/lib/picky-statistics/application/javascripts/d3/lib/science/LICENSE +0 -26
  270. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.js +0 -225
  271. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.lin.js +0 -27
  272. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.lin.min.js +0 -1
  273. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.min.js +0 -1
  274. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.stats.js +0 -720
  275. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.stats.min.js +0 -1
  276. data/lib/picky-statistics/application/javascripts/d3/lib/sizzle/LICENSE +0 -24
  277. data/lib/picky-statistics/application/javascripts/d3/lib/sizzle/sizzle.js +0 -1376
  278. data/lib/picky-statistics/application/javascripts/d3/lib/sizzle/sizzle.min.js +0 -28
  279. data/lib/picky-statistics/application/javascripts/d3/package.json +0 -28
  280. data/lib/picky-statistics/application/javascripts/d3/src/behavior/behavior.js +0 -1
  281. data/lib/picky-statistics/application/javascripts/d3/src/behavior/drag.js +0 -125
  282. data/lib/picky-statistics/application/javascripts/d3/src/behavior/zoom.js +0 -242
  283. data/lib/picky-statistics/application/javascripts/d3/src/chart/box.js +0 -297
  284. data/lib/picky-statistics/application/javascripts/d3/src/chart/bullet.js +0 -237
  285. data/lib/picky-statistics/application/javascripts/d3/src/chart/chart.js +0 -1
  286. data/lib/picky-statistics/application/javascripts/d3/src/chart/horizon.js +0 -203
  287. data/lib/picky-statistics/application/javascripts/d3/src/chart/qq.js +0 -245
  288. data/lib/picky-statistics/application/javascripts/d3/src/compat/date.js +0 -3
  289. data/lib/picky-statistics/application/javascripts/d3/src/compat/style.js +0 -9
  290. data/lib/picky-statistics/application/javascripts/d3/src/core/array.js +0 -29
  291. data/lib/picky-statistics/application/javascripts/d3/src/core/ascending.js +0 -3
  292. data/lib/picky-statistics/application/javascripts/d3/src/core/bisect.js +0 -38
  293. data/lib/picky-statistics/application/javascripts/d3/src/core/collapse.js +0 -3
  294. data/lib/picky-statistics/application/javascripts/d3/src/core/core.js +0 -1
  295. data/lib/picky-statistics/application/javascripts/d3/src/core/descending.js +0 -3
  296. data/lib/picky-statistics/application/javascripts/d3/src/core/dispatch.js +0 -60
  297. data/lib/picky-statistics/application/javascripts/d3/src/core/ease.js +0 -128
  298. data/lib/picky-statistics/application/javascripts/d3/src/core/entries.js +0 -5
  299. data/lib/picky-statistics/application/javascripts/d3/src/core/event.js +0 -6
  300. data/lib/picky-statistics/application/javascripts/d3/src/core/extent.js +0 -21
  301. data/lib/picky-statistics/application/javascripts/d3/src/core/first.js +0 -13
  302. data/lib/picky-statistics/application/javascripts/d3/src/core/format.js +0 -100
  303. data/lib/picky-statistics/application/javascripts/d3/src/core/formatPrefix.js +0 -20
  304. data/lib/picky-statistics/application/javascripts/d3/src/core/functor.js +0 -3
  305. data/lib/picky-statistics/application/javascripts/d3/src/core/hsl.js +0 -63
  306. data/lib/picky-statistics/application/javascripts/d3/src/core/html.js +0 -10
  307. data/lib/picky-statistics/application/javascripts/d3/src/core/interpolate.js +0 -183
  308. data/lib/picky-statistics/application/javascripts/d3/src/core/json.js +0 -5
  309. data/lib/picky-statistics/application/javascripts/d3/src/core/keys.js +0 -5
  310. data/lib/picky-statistics/application/javascripts/d3/src/core/last.js +0 -13
  311. data/lib/picky-statistics/application/javascripts/d3/src/core/max.js +0 -14
  312. data/lib/picky-statistics/application/javascripts/d3/src/core/mean.js +0 -13
  313. data/lib/picky-statistics/application/javascripts/d3/src/core/median.js +0 -5
  314. data/lib/picky-statistics/application/javascripts/d3/src/core/merge.js +0 -3
  315. data/lib/picky-statistics/application/javascripts/d3/src/core/min.js +0 -14
  316. data/lib/picky-statistics/application/javascripts/d3/src/core/nest.js +0 -87
  317. data/lib/picky-statistics/application/javascripts/d3/src/core/noop.js +0 -1
  318. data/lib/picky-statistics/application/javascripts/d3/src/core/ns.js +0 -17
  319. data/lib/picky-statistics/application/javascripts/d3/src/core/number.js +0 -3
  320. data/lib/picky-statistics/application/javascripts/d3/src/core/permute.js +0 -7
  321. data/lib/picky-statistics/application/javascripts/d3/src/core/quantile.js +0 -8
  322. data/lib/picky-statistics/application/javascripts/d3/src/core/random.js +0 -15
  323. data/lib/picky-statistics/application/javascripts/d3/src/core/range.js +0 -21
  324. data/lib/picky-statistics/application/javascripts/d3/src/core/rebind.js +0 -16
  325. data/lib/picky-statistics/application/javascripts/d3/src/core/requote.js +0 -5
  326. data/lib/picky-statistics/application/javascripts/d3/src/core/rgb.js +0 -287
  327. data/lib/picky-statistics/application/javascripts/d3/src/core/round.js +0 -5
  328. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-append.js +0 -15
  329. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-attr.js +0 -44
  330. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-call.js +0 -13
  331. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-classed.js +0 -61
  332. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-data.js +0 -110
  333. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-each.js +0 -9
  334. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-empty.js +0 -3
  335. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-enter-select.js +0 -24
  336. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-enter.js +0 -11
  337. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-filter.js +0 -26
  338. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-html.js +0 -6
  339. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-insert.js +0 -20
  340. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-map.js +0 -5
  341. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-node.js +0 -9
  342. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-on.js +0 -34
  343. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-order.js +0 -11
  344. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-property.js +0 -23
  345. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-remove.js +0 -9
  346. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-root.js +0 -18
  347. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-select.js +0 -30
  348. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-selectAll.js +0 -24
  349. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-sort.js +0 -12
  350. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-style.js +0 -26
  351. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-text.js +0 -6
  352. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-transition.js +0 -14
  353. data/lib/picky-statistics/application/javascripts/d3/src/core/selection.js +0 -25
  354. data/lib/picky-statistics/application/javascripts/d3/src/core/split.js +0 -21
  355. data/lib/picky-statistics/application/javascripts/d3/src/core/sum.js +0 -14
  356. data/lib/picky-statistics/application/javascripts/d3/src/core/text.js +0 -10
  357. data/lib/picky-statistics/application/javascripts/d3/src/core/this.js +0 -3
  358. data/lib/picky-statistics/application/javascripts/d3/src/core/timer.js +0 -104
  359. data/lib/picky-statistics/application/javascripts/d3/src/core/transform.js +0 -58
  360. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-attr.js +0 -23
  361. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-delay.js +0 -6
  362. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-duration.js +0 -6
  363. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-each.js +0 -9
  364. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-remove.js +0 -6
  365. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-select.js +0 -22
  366. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-selectAll.js +0 -22
  367. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-style.js +0 -14
  368. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-text.js +0 -7
  369. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-transition.js +0 -3
  370. data/lib/picky-statistics/application/javascripts/d3/src/core/transition.js +0 -125
  371. data/lib/picky-statistics/application/javascripts/d3/src/core/transpose.js +0 -3
  372. data/lib/picky-statistics/application/javascripts/d3/src/core/uninterpolate.js +0 -9
  373. data/lib/picky-statistics/application/javascripts/d3/src/core/values.js +0 -5
  374. data/lib/picky-statistics/application/javascripts/d3/src/core/xhr.js +0 -10
  375. data/lib/picky-statistics/application/javascripts/d3/src/core/xml.js +0 -10
  376. data/lib/picky-statistics/application/javascripts/d3/src/core/zip.js +0 -13
  377. data/lib/picky-statistics/application/javascripts/d3/src/csv/csv.js +0 -5
  378. data/lib/picky-statistics/application/javascripts/d3/src/csv/format.js +0 -13
  379. data/lib/picky-statistics/application/javascripts/d3/src/csv/parse.js +0 -73
  380. data/lib/picky-statistics/application/javascripts/d3/src/end.js +0 -1
  381. data/lib/picky-statistics/application/javascripts/d3/src/externs.js +0 -6
  382. data/lib/picky-statistics/application/javascripts/d3/src/geo/albers.js +0 -126
  383. data/lib/picky-statistics/application/javascripts/d3/src/geo/azimuthal.js +0 -80
  384. data/lib/picky-statistics/application/javascripts/d3/src/geo/bonne.js +0 -70
  385. data/lib/picky-statistics/application/javascripts/d3/src/geo/bounds.js +0 -83
  386. data/lib/picky-statistics/application/javascripts/d3/src/geo/circle.js +0 -146
  387. data/lib/picky-statistics/application/javascripts/d3/src/geo/equirectangular.js +0 -36
  388. data/lib/picky-statistics/application/javascripts/d3/src/geo/geo.js +0 -3
  389. data/lib/picky-statistics/application/javascripts/d3/src/geo/greatArc.js +0 -80
  390. data/lib/picky-statistics/application/javascripts/d3/src/geo/greatCircle.js +0 -1
  391. data/lib/picky-statistics/application/javascripts/d3/src/geo/mercator.js +0 -36
  392. data/lib/picky-statistics/application/javascripts/d3/src/geo/path.js +0 -271
  393. data/lib/picky-statistics/application/javascripts/d3/src/geo/type.js +0 -5
  394. data/lib/picky-statistics/application/javascripts/d3/src/geom/contour.js +0 -78
  395. data/lib/picky-statistics/application/javascripts/d3/src/geom/delaunay.js +0 -31
  396. data/lib/picky-statistics/application/javascripts/d3/src/geom/geom.js +0 -1
  397. data/lib/picky-statistics/application/javascripts/d3/src/geom/hull.js +0 -98
  398. data/lib/picky-statistics/application/javascripts/d3/src/geom/polygon.js +0 -88
  399. data/lib/picky-statistics/application/javascripts/d3/src/geom/quadtree.js +0 -129
  400. data/lib/picky-statistics/application/javascripts/d3/src/geom/voronoi.js +0 -409
  401. data/lib/picky-statistics/application/javascripts/d3/src/layout/bundle.js +0 -57
  402. data/lib/picky-statistics/application/javascripts/d3/src/layout/chord.js +0 -153
  403. data/lib/picky-statistics/application/javascripts/d3/src/layout/cluster.js +0 -78
  404. data/lib/picky-statistics/application/javascripts/d3/src/layout/force.js +0 -342
  405. data/lib/picky-statistics/application/javascripts/d3/src/layout/hierarchy.js +0 -120
  406. data/lib/picky-statistics/application/javascripts/d3/src/layout/histogram.js +0 -102
  407. data/lib/picky-statistics/application/javascripts/d3/src/layout/layout.js +0 -1
  408. data/lib/picky-statistics/application/javascripts/d3/src/layout/pack.js +0 -203
  409. data/lib/picky-statistics/application/javascripts/d3/src/layout/partition.js +0 -48
  410. data/lib/picky-statistics/application/javascripts/d3/src/layout/pie.js +0 -95
  411. data/lib/picky-statistics/application/javascripts/d3/src/layout/stack.js +0 -237
  412. data/lib/picky-statistics/application/javascripts/d3/src/layout/tree.js +0 -237
  413. data/lib/picky-statistics/application/javascripts/d3/src/layout/treemap.js +0 -217
  414. data/lib/picky-statistics/application/javascripts/d3/src/package.js +0 -18
  415. data/lib/picky-statistics/application/javascripts/d3/src/scale/bilinear.js +0 -7
  416. data/lib/picky-statistics/application/javascripts/d3/src/scale/category.js +0 -54
  417. data/lib/picky-statistics/application/javascripts/d3/src/scale/linear.js +0 -111
  418. data/lib/picky-statistics/application/javascripts/d3/src/scale/log.js +0 -85
  419. data/lib/picky-statistics/application/javascripts/d3/src/scale/nice.js +0 -24
  420. data/lib/picky-statistics/application/javascripts/d3/src/scale/ordinal.js +0 -81
  421. data/lib/picky-statistics/application/javascripts/d3/src/scale/polylinear.js +0 -16
  422. data/lib/picky-statistics/application/javascripts/d3/src/scale/pow.js +0 -54
  423. data/lib/picky-statistics/application/javascripts/d3/src/scale/quantile.js +0 -43
  424. data/lib/picky-statistics/application/javascripts/d3/src/scale/quantize.js +0 -36
  425. data/lib/picky-statistics/application/javascripts/d3/src/scale/scale.js +0 -10
  426. data/lib/picky-statistics/application/javascripts/d3/src/scale/sqrt.js +0 -3
  427. data/lib/picky-statistics/application/javascripts/d3/src/start.js +0 -1
  428. data/lib/picky-statistics/application/javascripts/d3/src/svg/arc.js +0 -95
  429. data/lib/picky-statistics/application/javascripts/d3/src/svg/area-radial.js +0 -10
  430. data/lib/picky-statistics/application/javascripts/d3/src/svg/area.js +0 -89
  431. data/lib/picky-statistics/application/javascripts/d3/src/svg/axis.js +0 -200
  432. data/lib/picky-statistics/application/javascripts/d3/src/svg/brush.js +0 -334
  433. data/lib/picky-statistics/application/javascripts/d3/src/svg/chord.js +0 -99
  434. data/lib/picky-statistics/application/javascripts/d3/src/svg/diagonal-radial.js +0 -22
  435. data/lib/picky-statistics/application/javascripts/d3/src/svg/diagonal.js +0 -38
  436. data/lib/picky-statistics/application/javascripts/d3/src/svg/line-radial.js +0 -22
  437. data/lib/picky-statistics/application/javascripts/d3/src/svg/line.js +0 -415
  438. data/lib/picky-statistics/application/javascripts/d3/src/svg/mouse.js +0 -29
  439. data/lib/picky-statistics/application/javascripts/d3/src/svg/svg.js +0 -1
  440. data/lib/picky-statistics/application/javascripts/d3/src/svg/symbol.js +0 -98
  441. data/lib/picky-statistics/application/javascripts/d3/src/svg/touches.js +0 -9
  442. data/lib/picky-statistics/application/javascripts/d3/src/time/day.js +0 -7
  443. data/lib/picky-statistics/application/javascripts/d3/src/time/days.js +0 -11
  444. data/lib/picky-statistics/application/javascripts/d3/src/time/format-iso.js +0 -13
  445. data/lib/picky-statistics/application/javascripts/d3/src/time/format-utc.js +0 -53
  446. data/lib/picky-statistics/application/javascripts/d3/src/time/format.js +0 -327
  447. data/lib/picky-statistics/application/javascripts/d3/src/time/hour.js +0 -8
  448. data/lib/picky-statistics/application/javascripts/d3/src/time/hours.js +0 -11
  449. data/lib/picky-statistics/application/javascripts/d3/src/time/minute.js +0 -5
  450. data/lib/picky-statistics/application/javascripts/d3/src/time/minutes.js +0 -11
  451. data/lib/picky-statistics/application/javascripts/d3/src/time/month.js +0 -7
  452. data/lib/picky-statistics/application/javascripts/d3/src/time/months.js +0 -11
  453. data/lib/picky-statistics/application/javascripts/d3/src/time/range.js +0 -16
  454. data/lib/picky-statistics/application/javascripts/d3/src/time/scale-utc.js +0 -36
  455. data/lib/picky-statistics/application/javascripts/d3/src/time/scale.js +0 -118
  456. data/lib/picky-statistics/application/javascripts/d3/src/time/second.js +0 -5
  457. data/lib/picky-statistics/application/javascripts/d3/src/time/seconds.js +0 -7
  458. data/lib/picky-statistics/application/javascripts/d3/src/time/time.js +0 -3
  459. data/lib/picky-statistics/application/javascripts/d3/src/time/week.js +0 -9
  460. data/lib/picky-statistics/application/javascripts/d3/src/time/weeks.js +0 -11
  461. data/lib/picky-statistics/application/javascripts/d3/src/time/year.js +0 -7
  462. data/lib/picky-statistics/application/javascripts/d3/src/time/years.js +0 -11
  463. data/lib/picky-statistics/application/javascripts/d3/test/core/ascending-test.js +0 -47
  464. data/lib/picky-statistics/application/javascripts/d3/test/core/bisect-test.js +0 -103
  465. data/lib/picky-statistics/application/javascripts/d3/test/core/descending-test.js +0 -47
  466. data/lib/picky-statistics/application/javascripts/d3/test/core/dispatch-test.js +0 -129
  467. data/lib/picky-statistics/application/javascripts/d3/test/core/ease-test.js +0 -129
  468. data/lib/picky-statistics/application/javascripts/d3/test/core/entries-test.js +0 -43
  469. data/lib/picky-statistics/application/javascripts/d3/test/core/extent-test.js +0 -51
  470. data/lib/picky-statistics/application/javascripts/d3/test/core/first-test.js +0 -42
  471. data/lib/picky-statistics/application/javascripts/d3/test/core/format-test.js +0 -239
  472. data/lib/picky-statistics/application/javascripts/d3/test/core/formatPrefix-test.js +0 -108
  473. data/lib/picky-statistics/application/javascripts/d3/test/core/functor-test.js +0 -29
  474. data/lib/picky-statistics/application/javascripts/d3/test/core/hsl-test.js +0 -82
  475. data/lib/picky-statistics/application/javascripts/d3/test/core/html-test.js +0 -37
  476. data/lib/picky-statistics/application/javascripts/d3/test/core/interpolate-test.js +0 -209
  477. data/lib/picky-statistics/application/javascripts/d3/test/core/json-test.js +0 -37
  478. data/lib/picky-statistics/application/javascripts/d3/test/core/keys-test.js +0 -31
  479. data/lib/picky-statistics/application/javascripts/d3/test/core/last-test.js +0 -42
  480. data/lib/picky-statistics/application/javascripts/d3/test/core/max-test.js +0 -51
  481. data/lib/picky-statistics/application/javascripts/d3/test/core/mean-test.js +0 -43
  482. data/lib/picky-statistics/application/javascripts/d3/test/core/median-test.js +0 -43
  483. data/lib/picky-statistics/application/javascripts/d3/test/core/merge-test.js +0 -27
  484. data/lib/picky-statistics/application/javascripts/d3/test/core/min-test.js +0 -50
  485. data/lib/picky-statistics/application/javascripts/d3/test/core/nest-test.js +0 -236
  486. data/lib/picky-statistics/application/javascripts/d3/test/core/ns-test.js +0 -58
  487. data/lib/picky-statistics/application/javascripts/d3/test/core/permute-test.js +0 -53
  488. data/lib/picky-statistics/application/javascripts/d3/test/core/quantile-test.js +0 -50
  489. data/lib/picky-statistics/application/javascripts/d3/test/core/range-test.js +0 -93
  490. data/lib/picky-statistics/application/javascripts/d3/test/core/rebind-test.js +0 -52
  491. data/lib/picky-statistics/application/javascripts/d3/test/core/requote-test.js +0 -53
  492. data/lib/picky-statistics/application/javascripts/d3/test/core/rgb-test.js +0 -89
  493. data/lib/picky-statistics/application/javascripts/d3/test/core/round-test.js +0 -70
  494. data/lib/picky-statistics/application/javascripts/d3/test/core/select-test.js +0 -42
  495. data/lib/picky-statistics/application/javascripts/d3/test/core/selectAll-test.js +0 -46
  496. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-append-test.js +0 -123
  497. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-attr-test.js +0 -153
  498. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-call-test.js +0 -71
  499. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-classed-test.js +0 -219
  500. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-data-test.js +0 -168
  501. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-each-test.js +0 -83
  502. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-empty-test.js +0 -51
  503. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-filter-test.js +0 -70
  504. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-html-test.js +0 -121
  505. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-insert-test.js +0 -136
  506. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-map-test.js +0 -47
  507. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-node-test.js +0 -50
  508. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-on-test.js +0 -95
  509. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-order-test.js +0 -32
  510. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-property-test.js +0 -91
  511. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-remove-test.js +0 -39
  512. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-select-test.js +0 -125
  513. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-selectAll-test.js +0 -128
  514. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-sort-test.js +0 -59
  515. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-style-test.js +0 -100
  516. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-test.js +0 -35
  517. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-text-test.js +0 -109
  518. data/lib/picky-statistics/application/javascripts/d3/test/core/split-test.js +0 -34
  519. data/lib/picky-statistics/application/javascripts/d3/test/core/sum-test.js +0 -47
  520. data/lib/picky-statistics/application/javascripts/d3/test/core/text-test.js +0 -48
  521. data/lib/picky-statistics/application/javascripts/d3/test/core/timer-test.js +0 -62
  522. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-attr.js +0 -54
  523. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-attrTween.js +0 -67
  524. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-call.js +0 -33
  525. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-delay.js +0 -41
  526. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-duration.js +0 -41
  527. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-each.js +0 -166
  528. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-id.js +0 -20
  529. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-remove.js +0 -46
  530. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-select.js +0 -63
  531. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-selectAll.js +0 -59
  532. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-style.js +0 -49
  533. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-styleTween.js +0 -73
  534. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-text.js +0 -30
  535. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-time.js +0 -36
  536. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-transition.js +0 -60
  537. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-tween.js +0 -71
  538. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test.js +0 -66
  539. data/lib/picky-statistics/application/javascripts/d3/test/core/transpose-test.js +0 -32
  540. data/lib/picky-statistics/application/javascripts/d3/test/core/values-test.js +0 -35
  541. data/lib/picky-statistics/application/javascripts/d3/test/core/version-test.js +0 -18
  542. data/lib/picky-statistics/application/javascripts/d3/test/core/xhr-test.js +0 -56
  543. data/lib/picky-statistics/application/javascripts/d3/test/core/xml-test.js +0 -48
  544. data/lib/picky-statistics/application/javascripts/d3/test/core/zip-test.js +0 -32
  545. data/lib/picky-statistics/application/javascripts/d3/test/csv/csv-test.js +0 -38
  546. data/lib/picky-statistics/application/javascripts/d3/test/csv/format-test.js +0 -39
  547. data/lib/picky-statistics/application/javascripts/d3/test/csv/parse-test.js +0 -101
  548. data/lib/picky-statistics/application/javascripts/d3/test/env-assert.js +0 -96
  549. data/lib/picky-statistics/application/javascripts/d3/test/env-fragment.js +0 -8
  550. data/lib/picky-statistics/application/javascripts/d3/test/env-xhr.js +0 -56
  551. data/lib/picky-statistics/application/javascripts/d3/test/env.js +0 -13
  552. data/lib/picky-statistics/application/javascripts/d3/test/geo/albers-test.js +0 -57
  553. data/lib/picky-statistics/application/javascripts/d3/test/geo/azimuthal-test.js +0 -261
  554. data/lib/picky-statistics/application/javascripts/d3/test/geo/bonne-test.js +0 -116
  555. data/lib/picky-statistics/application/javascripts/d3/test/geo/equirectangular-test.js +0 -50
  556. data/lib/picky-statistics/application/javascripts/d3/test/geo/greatArc-test.js +0 -41
  557. data/lib/picky-statistics/application/javascripts/d3/test/geo/mercator-test.js +0 -57
  558. data/lib/picky-statistics/application/javascripts/d3/test/geo/path-test.js +0 -25
  559. data/lib/picky-statistics/application/javascripts/d3/test/geom/polygon-test.js +0 -57
  560. data/lib/picky-statistics/application/javascripts/d3/test/layout/cluster-test.js +0 -39
  561. data/lib/picky-statistics/application/javascripts/d3/test/layout/hierarchy-test.js +0 -30
  562. data/lib/picky-statistics/application/javascripts/d3/test/layout/histogram-test.js +0 -91
  563. data/lib/picky-statistics/application/javascripts/d3/test/layout/pack-test.js +0 -67
  564. data/lib/picky-statistics/application/javascripts/d3/test/layout/partition-test.js +0 -50
  565. data/lib/picky-statistics/application/javascripts/d3/test/layout/tree-test.js +0 -41
  566. data/lib/picky-statistics/application/javascripts/d3/test/layout/treemap-test.js +0 -190
  567. data/lib/picky-statistics/application/javascripts/d3/test/scale/category-test.js +0 -74
  568. data/lib/picky-statistics/application/javascripts/d3/test/scale/linear-test.js +0 -243
  569. data/lib/picky-statistics/application/javascripts/d3/test/scale/log-test.js +0 -266
  570. data/lib/picky-statistics/application/javascripts/d3/test/scale/ordinal-test.js +0 -207
  571. data/lib/picky-statistics/application/javascripts/d3/test/scale/pow-test.js +0 -263
  572. data/lib/picky-statistics/application/javascripts/d3/test/scale/quantile-test.js +0 -64
  573. data/lib/picky-statistics/application/javascripts/d3/test/scale/quantize-test.js +0 -69
  574. data/lib/picky-statistics/application/javascripts/d3/test/scale/sqrt-test.js +0 -256
  575. data/lib/picky-statistics/application/javascripts/d3/test/svg/arc-test.js +0 -147
  576. data/lib/picky-statistics/application/javascripts/d3/test/svg/area-radial-test.js +0 -200
  577. data/lib/picky-statistics/application/javascripts/d3/test/svg/area-test.js +0 -192
  578. data/lib/picky-statistics/application/javascripts/d3/test/svg/axis-test.js +0 -353
  579. data/lib/picky-statistics/application/javascripts/d3/test/svg/line-radial-test.js +0 -125
  580. data/lib/picky-statistics/application/javascripts/d3/test/svg/line-test.js +0 -189
  581. data/lib/picky-statistics/application/javascripts/d3/test/svg/symbol-test.js +0 -96
  582. data/lib/picky-statistics/application/javascripts/d3/test/time/day-test.js +0 -65
  583. data/lib/picky-statistics/application/javascripts/d3/test/time/days-test.js +0 -105
  584. data/lib/picky-statistics/application/javascripts/d3/test/time/format-test.js +0 -467
  585. data/lib/picky-statistics/application/javascripts/d3/test/time/hour-test.js +0 -103
  586. data/lib/picky-statistics/application/javascripts/d3/test/time/hours-test.js +0 -135
  587. data/lib/picky-statistics/application/javascripts/d3/test/time/minute-test.js +0 -43
  588. data/lib/picky-statistics/application/javascripts/d3/test/time/minutes-test.js +0 -101
  589. data/lib/picky-statistics/application/javascripts/d3/test/time/month-test.js +0 -53
  590. data/lib/picky-statistics/application/javascripts/d3/test/time/months-test.js +0 -105
  591. data/lib/picky-statistics/application/javascripts/d3/test/time/scale-test.js +0 -525
  592. data/lib/picky-statistics/application/javascripts/d3/test/time/second-test.js +0 -41
  593. data/lib/picky-statistics/application/javascripts/d3/test/time/seconds-test.js +0 -101
  594. data/lib/picky-statistics/application/javascripts/d3/test/time/week-test.js +0 -59
  595. data/lib/picky-statistics/application/javascripts/d3/test/time/weeks-test.js +0 -105
  596. data/lib/picky-statistics/application/javascripts/d3/test/time/year-test.js +0 -41
  597. data/lib/picky-statistics/application/javascripts/d3/test/time/years-test.js +0 -73
  598. data/lib/picky-statistics/application/javascripts/full_live.js +0 -60
  599. data/lib/picky-statistics/application/javascripts/graph.js +0 -83
  600. data/lib/picky-statistics/application/javascripts/jquery-1.4.4.min.js +0 -167
  601. data/lib/picky-statistics/application/javascripts/jquery.sparkline-1.6.min.js +0 -94
  602. data/lib/picky-statistics/application/javascripts/results.js +0 -86
  603. data/lib/picky-statistics/application/javascripts/rickshaw.js +0 -1
  604. data/lib/picky-statistics/statistics/count.rb +0 -70
  605. data/lib/picky-statistics/statistics/logfile_reader.rb +0 -143
  606. data/spec/lib/picky-statistics/statistics/count_spec.rb +0 -15
  607. data/spec/lib/picky-statistics/statistics/logfile_reader_spec.rb +0 -47
@@ -1,1891 +0,0 @@
1
- (function(){d3.layout = {};
2
- // Implements hierarchical edge bundling using Holten's algorithm. For each
3
- // input link, a path is computed that travels through the tree, up the parent
4
- // hierarchy to the least common ancestor, and then back down to the destination
5
- // node. Each path is simply an array of nodes.
6
- d3.layout.bundle = function() {
7
- return function(links) {
8
- var paths = [],
9
- i = -1,
10
- n = links.length;
11
- while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
12
- return paths;
13
- };
14
- };
15
-
16
- function d3_layout_bundlePath(link) {
17
- var start = link.source,
18
- end = link.target,
19
- lca = d3_layout_bundleLeastCommonAncestor(start, end),
20
- points = [start];
21
- while (start !== lca) {
22
- start = start.parent;
23
- points.push(start);
24
- }
25
- var k = points.length;
26
- while (end !== lca) {
27
- points.splice(k, 0, end);
28
- end = end.parent;
29
- }
30
- return points;
31
- }
32
-
33
- function d3_layout_bundleAncestors(node) {
34
- var ancestors = [],
35
- parent = node.parent;
36
- while (parent != null) {
37
- ancestors.push(node);
38
- node = parent;
39
- parent = parent.parent;
40
- }
41
- ancestors.push(node);
42
- return ancestors;
43
- }
44
-
45
- function d3_layout_bundleLeastCommonAncestor(a, b) {
46
- if (a === b) return a;
47
- var aNodes = d3_layout_bundleAncestors(a),
48
- bNodes = d3_layout_bundleAncestors(b),
49
- aNode = aNodes.pop(),
50
- bNode = bNodes.pop(),
51
- sharedNode = null;
52
- while (aNode === bNode) {
53
- sharedNode = aNode;
54
- aNode = aNodes.pop();
55
- bNode = bNodes.pop();
56
- }
57
- return sharedNode;
58
- }
59
- d3.layout.chord = function() {
60
- var chord = {},
61
- chords,
62
- groups,
63
- matrix,
64
- n,
65
- padding = 0,
66
- sortGroups,
67
- sortSubgroups,
68
- sortChords;
69
-
70
- function relayout() {
71
- var subgroups = {},
72
- groupSums = [],
73
- groupIndex = d3.range(n),
74
- subgroupIndex = [],
75
- k,
76
- x,
77
- x0,
78
- i,
79
- j;
80
-
81
- chords = [];
82
- groups = [];
83
-
84
- // Compute the sum.
85
- k = 0, i = -1; while (++i < n) {
86
- x = 0, j = -1; while (++j < n) {
87
- x += matrix[i][j];
88
- }
89
- groupSums.push(x);
90
- subgroupIndex.push(d3.range(n));
91
- k += x;
92
- }
93
-
94
- // Sort groups…
95
- if (sortGroups) {
96
- groupIndex.sort(function(a, b) {
97
- return sortGroups(groupSums[a], groupSums[b]);
98
- });
99
- }
100
-
101
- // Sort subgroups…
102
- if (sortSubgroups) {
103
- subgroupIndex.forEach(function(d, i) {
104
- d.sort(function(a, b) {
105
- return sortSubgroups(matrix[i][a], matrix[i][b]);
106
- });
107
- });
108
- }
109
-
110
- // Convert the sum to scaling factor for [0, 2pi].
111
- // TODO Allow start and end angle to be specified.
112
- // TODO Allow padding to be specified as percentage?
113
- k = (2 * Math.PI - padding * n) / k;
114
-
115
- // Compute the start and end angle for each group and subgroup.
116
- // Note: Opera has a bug reordering object literal properties!
117
- x = 0, i = -1; while (++i < n) {
118
- x0 = x, j = -1; while (++j < n) {
119
- var di = groupIndex[i],
120
- dj = subgroupIndex[di][j],
121
- v = matrix[di][dj],
122
- a0 = x,
123
- a1 = x += v * k;
124
- subgroups[di + "-" + dj] = {
125
- index: di,
126
- subindex: dj,
127
- startAngle: a0,
128
- endAngle: a1,
129
- value: v
130
- };
131
- }
132
- groups.push({
133
- index: di,
134
- startAngle: x0,
135
- endAngle: x,
136
- value: (x - x0) / k
137
- });
138
- x += padding;
139
- }
140
-
141
- // Generate chords for each (non-empty) subgroup-subgroup link.
142
- i = -1; while (++i < n) {
143
- j = i - 1; while (++j < n) {
144
- var source = subgroups[i + "-" + j],
145
- target = subgroups[j + "-" + i];
146
- if (source.value || target.value) {
147
- chords.push(source.value < target.value
148
- ? {source: target, target: source}
149
- : {source: source, target: target});
150
- }
151
- }
152
- }
153
-
154
- if (sortChords) resort();
155
- }
156
-
157
- function resort() {
158
- chords.sort(function(a, b) {
159
- return sortChords(
160
- (a.source.value + a.target.value) / 2,
161
- (b.source.value + b.target.value) / 2);
162
- });
163
- }
164
-
165
- chord.matrix = function(x) {
166
- if (!arguments.length) return matrix;
167
- n = (matrix = x) && matrix.length;
168
- chords = groups = null;
169
- return chord;
170
- };
171
-
172
- chord.padding = function(x) {
173
- if (!arguments.length) return padding;
174
- padding = x;
175
- chords = groups = null;
176
- return chord;
177
- };
178
-
179
- chord.sortGroups = function(x) {
180
- if (!arguments.length) return sortGroups;
181
- sortGroups = x;
182
- chords = groups = null;
183
- return chord;
184
- };
185
-
186
- chord.sortSubgroups = function(x) {
187
- if (!arguments.length) return sortSubgroups;
188
- sortSubgroups = x;
189
- chords = null;
190
- return chord;
191
- };
192
-
193
- chord.sortChords = function(x) {
194
- if (!arguments.length) return sortChords;
195
- sortChords = x;
196
- if (chords) resort();
197
- return chord;
198
- };
199
-
200
- chord.chords = function() {
201
- if (!chords) relayout();
202
- return chords;
203
- };
204
-
205
- chord.groups = function() {
206
- if (!groups) relayout();
207
- return groups;
208
- };
209
-
210
- return chord;
211
- };
212
- // A rudimentary force layout using Gauss-Seidel.
213
- d3.layout.force = function() {
214
- var force = {},
215
- event = d3.dispatch("tick"),
216
- size = [1, 1],
217
- drag,
218
- alpha,
219
- friction = .9,
220
- linkDistance = d3_layout_forceLinkDistance,
221
- linkStrength = d3_layout_forceLinkStrength,
222
- charge = -30,
223
- gravity = .1,
224
- theta = .8,
225
- interval,
226
- nodes = [],
227
- links = [],
228
- distances,
229
- strengths,
230
- charges;
231
-
232
- function repulse(node) {
233
- return function(quad, x1, y1, x2, y2) {
234
- if (quad.point !== node) {
235
- var dx = quad.cx - node.x,
236
- dy = quad.cy - node.y,
237
- dn = 1 / Math.sqrt(dx * dx + dy * dy);
238
-
239
- /* Barnes-Hut criterion. */
240
- if ((x2 - x1) * dn < theta) {
241
- var k = quad.charge * dn * dn;
242
- node.px -= dx * k;
243
- node.py -= dy * k;
244
- return true;
245
- }
246
-
247
- if (quad.point && isFinite(dn)) {
248
- var k = quad.pointCharge * dn * dn;
249
- node.px -= dx * k;
250
- node.py -= dy * k;
251
- }
252
- }
253
- return !quad.charge;
254
- };
255
- }
256
-
257
- function tick() {
258
- var n = nodes.length,
259
- m = links.length,
260
- q,
261
- i, // current index
262
- o, // current object
263
- s, // current source
264
- t, // current target
265
- l, // current distance
266
- k, // current force
267
- x, // x-distance
268
- y; // y-distance
269
-
270
- // gauss-seidel relaxation for links
271
- for (i = 0; i < m; ++i) {
272
- o = links[i];
273
- s = o.source;
274
- t = o.target;
275
- x = t.x - s.x;
276
- y = t.y - s.y;
277
- if (l = (x * x + y * y)) {
278
- l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
279
- x *= l;
280
- y *= l;
281
- t.x -= x * (k = s.weight / (t.weight + s.weight));
282
- t.y -= y * k;
283
- s.x += x * (k = 1 - k);
284
- s.y += y * k;
285
- }
286
- }
287
-
288
- // apply gravity forces
289
- if (k = alpha * gravity) {
290
- x = size[0] / 2;
291
- y = size[1] / 2;
292
- i = -1; if (k) while (++i < n) {
293
- o = nodes[i];
294
- o.x += (x - o.x) * k;
295
- o.y += (y - o.y) * k;
296
- }
297
- }
298
-
299
- // compute quadtree center of mass and apply charge forces
300
- if (charge) {
301
- d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);
302
- i = -1; while (++i < n) {
303
- if (!(o = nodes[i]).fixed) {
304
- q.visit(repulse(o));
305
- }
306
- }
307
- }
308
-
309
- // position verlet integration
310
- i = -1; while (++i < n) {
311
- o = nodes[i];
312
- if (o.fixed) {
313
- o.x = o.px;
314
- o.y = o.py;
315
- } else {
316
- o.x -= (o.px - (o.px = o.x)) * friction;
317
- o.y -= (o.py - (o.py = o.y)) * friction;
318
- }
319
- }
320
-
321
- event.tick({type: "tick", alpha: alpha});
322
-
323
- // simulated annealing, basically
324
- return (alpha *= .99) < .005;
325
- }
326
-
327
- force.nodes = function(x) {
328
- if (!arguments.length) return nodes;
329
- nodes = x;
330
- return force;
331
- };
332
-
333
- force.links = function(x) {
334
- if (!arguments.length) return links;
335
- links = x;
336
- return force;
337
- };
338
-
339
- force.size = function(x) {
340
- if (!arguments.length) return size;
341
- size = x;
342
- return force;
343
- };
344
-
345
- force.linkDistance = function(x) {
346
- if (!arguments.length) return linkDistance;
347
- linkDistance = d3.functor(x);
348
- return force;
349
- };
350
-
351
- // For backwards-compatibility.
352
- force.distance = force.linkDistance;
353
-
354
- force.linkStrength = function(x) {
355
- if (!arguments.length) return linkStrength;
356
- linkStrength = d3.functor(x);
357
- return force;
358
- };
359
-
360
- force.friction = function(x) {
361
- if (!arguments.length) return friction;
362
- friction = x;
363
- return force;
364
- };
365
-
366
- force.charge = function(x) {
367
- if (!arguments.length) return charge;
368
- charge = typeof x === "function" ? x : +x;
369
- return force;
370
- };
371
-
372
- force.gravity = function(x) {
373
- if (!arguments.length) return gravity;
374
- gravity = x;
375
- return force;
376
- };
377
-
378
- force.theta = function(x) {
379
- if (!arguments.length) return theta;
380
- theta = x;
381
- return force;
382
- };
383
-
384
- force.start = function() {
385
- var i,
386
- j,
387
- n = nodes.length,
388
- m = links.length,
389
- w = size[0],
390
- h = size[1],
391
- neighbors,
392
- o;
393
-
394
- for (i = 0; i < n; ++i) {
395
- (o = nodes[i]).index = i;
396
- o.weight = 0;
397
- }
398
-
399
- distances = [];
400
- strengths = [];
401
- for (i = 0; i < m; ++i) {
402
- o = links[i];
403
- if (typeof o.source == "number") o.source = nodes[o.source];
404
- if (typeof o.target == "number") o.target = nodes[o.target];
405
- distances[i] = linkDistance.call(this, o, i);
406
- strengths[i] = linkStrength.call(this, o, i);
407
- ++o.source.weight;
408
- ++o.target.weight;
409
- }
410
-
411
- for (i = 0; i < n; ++i) {
412
- o = nodes[i];
413
- if (isNaN(o.x)) o.x = position("x", w);
414
- if (isNaN(o.y)) o.y = position("y", h);
415
- if (isNaN(o.px)) o.px = o.x;
416
- if (isNaN(o.py)) o.py = o.y;
417
- }
418
-
419
- charges = [];
420
- if (typeof charge === "function") {
421
- for (i = 0; i < n; ++i) {
422
- charges[i] = +charge.call(this, nodes[i], i);
423
- }
424
- } else {
425
- for (i = 0; i < n; ++i) {
426
- charges[i] = charge;
427
- }
428
- }
429
-
430
- // initialize node position based on first neighbor
431
- function position(dimension, size) {
432
- var neighbors = neighbor(i),
433
- j = -1,
434
- m = neighbors.length,
435
- x;
436
- while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x;
437
- return Math.random() * size;
438
- }
439
-
440
- // initialize neighbors lazily
441
- function neighbor() {
442
- if (!neighbors) {
443
- neighbors = [];
444
- for (j = 0; j < n; ++j) {
445
- neighbors[j] = [];
446
- }
447
- for (j = 0; j < m; ++j) {
448
- var o = links[j];
449
- neighbors[o.source.index].push(o.target);
450
- neighbors[o.target.index].push(o.source);
451
- }
452
- }
453
- return neighbors[i];
454
- }
455
-
456
- return force.resume();
457
- };
458
-
459
- force.resume = function() {
460
- alpha = .1;
461
- d3.timer(tick);
462
- return force;
463
- };
464
-
465
- force.stop = function() {
466
- alpha = 0;
467
- return force;
468
- };
469
-
470
- // use `node.call(force.drag)` to make nodes draggable
471
- force.drag = function() {
472
- if (!drag) drag = d3.behavior.drag()
473
- .origin(Object)
474
- .on("dragstart", dragstart)
475
- .on("drag", d3_layout_forceDrag)
476
- .on("dragend", d3_layout_forceDragEnd);
477
-
478
- this.on("mouseover.force", d3_layout_forceDragOver)
479
- .on("mouseout.force", d3_layout_forceDragOut)
480
- .call(drag);
481
- };
482
-
483
- function dragstart(d) {
484
- d3_layout_forceDragOver(d3_layout_forceDragNode = d);
485
- d3_layout_forceDragForce = force;
486
- }
487
-
488
- return d3.rebind(force, event, "on");
489
- };
490
-
491
- var d3_layout_forceDragForce,
492
- d3_layout_forceDragNode;
493
-
494
- function d3_layout_forceDragOver(d) {
495
- d.fixed |= 2;
496
- }
497
-
498
- function d3_layout_forceDragOut(d) {
499
- if (d !== d3_layout_forceDragNode) d.fixed &= 1;
500
- }
501
-
502
- function d3_layout_forceDragEnd() {
503
- d3_layout_forceDrag();
504
- d3_layout_forceDragNode.fixed &= 1;
505
- d3_layout_forceDragForce = d3_layout_forceDragNode = null;
506
- }
507
-
508
- function d3_layout_forceDrag() {
509
- d3_layout_forceDragNode.px = d3.event.x;
510
- d3_layout_forceDragNode.py = d3.event.y;
511
- d3_layout_forceDragForce.resume(); // restart annealing
512
- }
513
-
514
- function d3_layout_forceAccumulate(quad, alpha, charges) {
515
- var cx = 0,
516
- cy = 0;
517
- quad.charge = 0;
518
- if (!quad.leaf) {
519
- var nodes = quad.nodes,
520
- n = nodes.length,
521
- i = -1,
522
- c;
523
- while (++i < n) {
524
- c = nodes[i];
525
- if (c == null) continue;
526
- d3_layout_forceAccumulate(c, alpha, charges);
527
- quad.charge += c.charge;
528
- cx += c.charge * c.cx;
529
- cy += c.charge * c.cy;
530
- }
531
- }
532
- if (quad.point) {
533
- // jitter internal nodes that are coincident
534
- if (!quad.leaf) {
535
- quad.point.x += Math.random() - .5;
536
- quad.point.y += Math.random() - .5;
537
- }
538
- var k = alpha * charges[quad.point.index];
539
- quad.charge += quad.pointCharge = k;
540
- cx += k * quad.point.x;
541
- cy += k * quad.point.y;
542
- }
543
- quad.cx = cx / quad.charge;
544
- quad.cy = cy / quad.charge;
545
- }
546
-
547
- function d3_layout_forceLinkDistance(link) {
548
- return 20;
549
- }
550
-
551
- function d3_layout_forceLinkStrength(link) {
552
- return 1;
553
- }
554
- d3.layout.partition = function() {
555
- var hierarchy = d3.layout.hierarchy(),
556
- size = [1, 1]; // width, height
557
-
558
- function position(node, x, dx, dy) {
559
- var children = node.children;
560
- node.x = x;
561
- node.y = node.depth * dy;
562
- node.dx = dx;
563
- node.dy = dy;
564
- if (children && (n = children.length)) {
565
- var i = -1,
566
- n,
567
- c,
568
- d;
569
- dx = node.value ? dx / node.value : 0;
570
- while (++i < n) {
571
- position(c = children[i], x, d = c.value * dx, dy);
572
- x += d;
573
- }
574
- }
575
- }
576
-
577
- function depth(node) {
578
- var children = node.children,
579
- d = 0;
580
- if (children && (n = children.length)) {
581
- var i = -1,
582
- n;
583
- while (++i < n) d = Math.max(d, depth(children[i]));
584
- }
585
- return 1 + d;
586
- }
587
-
588
- function partition(d, i) {
589
- var nodes = hierarchy.call(this, d, i);
590
- position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
591
- return nodes;
592
- }
593
-
594
- partition.size = function(x) {
595
- if (!arguments.length) return size;
596
- size = x;
597
- return partition;
598
- };
599
-
600
- return d3_layout_hierarchyRebind(partition, hierarchy);
601
- };
602
- d3.layout.pie = function() {
603
- var value = Number,
604
- sort = d3_layout_pieSortByValue,
605
- startAngle = 0,
606
- endAngle = 2 * Math.PI;
607
-
608
- function pie(data, i) {
609
-
610
- // Compute the numeric values for each data element.
611
- var values = data.map(function(d, i) { return +value.call(pie, d, i); });
612
-
613
- // Compute the start angle.
614
- var a = +(typeof startAngle === "function"
615
- ? startAngle.apply(this, arguments)
616
- : startAngle);
617
-
618
- // Compute the angular scale factor: from value to radians.
619
- var k = ((typeof endAngle === "function"
620
- ? endAngle.apply(this, arguments)
621
- : endAngle) - startAngle)
622
- / d3.sum(values);
623
-
624
- // Optionally sort the data.
625
- var index = d3.range(data.length);
626
- if (sort != null) index.sort(sort === d3_layout_pieSortByValue
627
- ? function(i, j) { return values[j] - values[i]; }
628
- : function(i, j) { return sort(data[i], data[j]); });
629
-
630
- // Compute the arcs!
631
- var arcs = index.map(function(i) {
632
- return {
633
- data: data[i],
634
- value: d = values[i],
635
- startAngle: a,
636
- endAngle: a += d * k
637
- };
638
- });
639
-
640
- // Return the arcs in the original data's order.
641
- return data.map(function(d, i) {
642
- return arcs[index[i]];
643
- });
644
- }
645
-
646
- /**
647
- * Specifies the value function *x*, which returns a nonnegative numeric value
648
- * for each datum. The default value function is `Number`. The value function
649
- * is passed two arguments: the current datum and the current index.
650
- */
651
- pie.value = function(x) {
652
- if (!arguments.length) return value;
653
- value = x;
654
- return pie;
655
- };
656
-
657
- /**
658
- * Specifies a sort comparison operator *x*. The comparator is passed two data
659
- * elements from the data array, a and b; it returns a negative value if a is
660
- * less than b, a positive value if a is greater than b, and zero if a equals
661
- * b.
662
- */
663
- pie.sort = function(x) {
664
- if (!arguments.length) return sort;
665
- sort = x;
666
- return pie;
667
- };
668
-
669
- /**
670
- * Specifies the overall start angle of the pie chart. Defaults to 0. The
671
- * start angle can be specified either as a constant or as a function; in the
672
- * case of a function, it is evaluated once per array (as opposed to per
673
- * element).
674
- */
675
- pie.startAngle = function(x) {
676
- if (!arguments.length) return startAngle;
677
- startAngle = x;
678
- return pie;
679
- };
680
-
681
- /**
682
- * Specifies the overall end angle of the pie chart. Defaults to 2π. The
683
- * end angle can be specified either as a constant or as a function; in the
684
- * case of a function, it is evaluated once per array (as opposed to per
685
- * element).
686
- */
687
- pie.endAngle = function(x) {
688
- if (!arguments.length) return endAngle;
689
- endAngle = x;
690
- return pie;
691
- };
692
-
693
- return pie;
694
- };
695
-
696
- var d3_layout_pieSortByValue = {};
697
- // data is two-dimensional array of x,y; we populate y0
698
- d3.layout.stack = function() {
699
- var values = Object,
700
- order = d3_layout_stackOrders["default"],
701
- offset = d3_layout_stackOffsets["zero"],
702
- out = d3_layout_stackOut,
703
- x = d3_layout_stackX,
704
- y = d3_layout_stackY;
705
-
706
- function stack(data, index) {
707
-
708
- // Convert series to canonical two-dimensional representation.
709
- var series = data.map(function(d, i) {
710
- return values.call(stack, d, i);
711
- });
712
-
713
- // Convert each series to canonical [[x,y]] representation.
714
- var points = series.map(function(d, i) {
715
- return d.map(function(v, i) {
716
- return [x.call(stack, v, i), y.call(stack, v, i)];
717
- });
718
- });
719
-
720
- // Compute the order of series, and permute them.
721
- var orders = order.call(stack, points, index);
722
- series = d3.permute(series, orders);
723
- points = d3.permute(points, orders);
724
-
725
- // Compute the baseline…
726
- var offsets = offset.call(stack, points, index);
727
-
728
- // And propagate it to other series.
729
- var n = series.length,
730
- m = series[0].length,
731
- i,
732
- j,
733
- o;
734
- for (j = 0; j < m; ++j) {
735
- out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
736
- for (i = 1; i < n; ++i) {
737
- out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
738
- }
739
- }
740
-
741
- return data;
742
- }
743
-
744
- stack.values = function(x) {
745
- if (!arguments.length) return values;
746
- values = x;
747
- return stack;
748
- };
749
-
750
- stack.order = function(x) {
751
- if (!arguments.length) return order;
752
- order = typeof x === "function" ? x : d3_layout_stackOrders[x];
753
- return stack;
754
- };
755
-
756
- stack.offset = function(x) {
757
- if (!arguments.length) return offset;
758
- offset = typeof x === "function" ? x : d3_layout_stackOffsets[x];
759
- return stack;
760
- };
761
-
762
- stack.x = function(z) {
763
- if (!arguments.length) return x;
764
- x = z;
765
- return stack;
766
- };
767
-
768
- stack.y = function(z) {
769
- if (!arguments.length) return y;
770
- y = z;
771
- return stack;
772
- };
773
-
774
- stack.out = function(z) {
775
- if (!arguments.length) return out;
776
- out = z;
777
- return stack;
778
- };
779
-
780
- return stack;
781
- }
782
-
783
- function d3_layout_stackX(d) {
784
- return d.x;
785
- }
786
-
787
- function d3_layout_stackY(d) {
788
- return d.y;
789
- }
790
-
791
- function d3_layout_stackOut(d, y0, y) {
792
- d.y0 = y0;
793
- d.y = y;
794
- }
795
-
796
- var d3_layout_stackOrders = {
797
-
798
- "inside-out": function(data) {
799
- var n = data.length,
800
- i,
801
- j,
802
- max = data.map(d3_layout_stackMaxIndex),
803
- sums = data.map(d3_layout_stackReduceSum),
804
- index = d3.range(n).sort(function(a, b) { return max[a] - max[b]; }),
805
- top = 0,
806
- bottom = 0,
807
- tops = [],
808
- bottoms = [];
809
- for (i = 0; i < n; ++i) {
810
- j = index[i];
811
- if (top < bottom) {
812
- top += sums[j];
813
- tops.push(j);
814
- } else {
815
- bottom += sums[j];
816
- bottoms.push(j);
817
- }
818
- }
819
- return bottoms.reverse().concat(tops);
820
- },
821
-
822
- "reverse": function(data) {
823
- return d3.range(data.length).reverse();
824
- },
825
-
826
- "default": function(data) {
827
- return d3.range(data.length);
828
- }
829
-
830
- };
831
-
832
- var d3_layout_stackOffsets = {
833
-
834
- "silhouette": function(data) {
835
- var n = data.length,
836
- m = data[0].length,
837
- sums = [],
838
- max = 0,
839
- i,
840
- j,
841
- o,
842
- y0 = [];
843
- for (j = 0; j < m; ++j) {
844
- for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
845
- if (o > max) max = o;
846
- sums.push(o);
847
- }
848
- for (j = 0; j < m; ++j) {
849
- y0[j] = (max - sums[j]) / 2;
850
- }
851
- return y0;
852
- },
853
-
854
- "wiggle": function(data) {
855
- var n = data.length,
856
- x = data[0],
857
- m = x.length,
858
- max = 0,
859
- i,
860
- j,
861
- k,
862
- s1,
863
- s2,
864
- s3,
865
- dx,
866
- o,
867
- o0,
868
- y0 = [];
869
- y0[0] = o = o0 = 0;
870
- for (j = 1; j < m; ++j) {
871
- for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
872
- for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
873
- for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
874
- s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
875
- }
876
- s2 += s3 * data[i][j][1];
877
- }
878
- y0[j] = o -= s1 ? s2 / s1 * dx : 0;
879
- if (o < o0) o0 = o;
880
- }
881
- for (j = 0; j < m; ++j) y0[j] -= o0;
882
- return y0;
883
- },
884
-
885
- "expand": function(data) {
886
- var n = data.length,
887
- m = data[0].length,
888
- k = 1 / n,
889
- i,
890
- j,
891
- o,
892
- y0 = [];
893
- for (j = 0; j < m; ++j) {
894
- for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
895
- if (o) for (i = 0; i < n; i++) data[i][j][1] /= o;
896
- else for (i = 0; i < n; i++) data[i][j][1] = k;
897
- }
898
- for (j = 0; j < m; ++j) y0[j] = 0;
899
- return y0;
900
- },
901
-
902
- "zero": function(data) {
903
- var j = -1,
904
- m = data[0].length,
905
- y0 = [];
906
- while (++j < m) y0[j] = 0;
907
- return y0;
908
- }
909
-
910
- };
911
-
912
- function d3_layout_stackMaxIndex(array) {
913
- var i = 1,
914
- j = 0,
915
- v = array[0][1],
916
- k,
917
- n = array.length;
918
- for (; i < n; ++i) {
919
- if ((k = array[i][1]) > v) {
920
- j = i;
921
- v = k;
922
- }
923
- }
924
- return j;
925
- }
926
-
927
- function d3_layout_stackReduceSum(d) {
928
- return d.reduce(d3_layout_stackSum, 0);
929
- }
930
-
931
- function d3_layout_stackSum(p, d) {
932
- return p + d[1];
933
- }
934
- d3.layout.histogram = function() {
935
- var frequency = true,
936
- valuer = Number,
937
- ranger = d3_layout_histogramRange,
938
- binner = d3_layout_histogramBinSturges;
939
-
940
- function histogram(data, i) {
941
- var bins = [],
942
- values = data.map(valuer, this),
943
- range = ranger.call(this, values, i),
944
- thresholds = binner.call(this, range, values, i),
945
- bin,
946
- i = -1,
947
- n = values.length,
948
- m = thresholds.length - 1,
949
- k = frequency ? 1 : 1 / n,
950
- x;
951
-
952
- // Initialize the bins.
953
- while (++i < m) {
954
- bin = bins[i] = [];
955
- bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
956
- bin.y = 0;
957
- }
958
-
959
- // Fill the bins, ignoring values outside the range.
960
- i = -1; while(++i < n) {
961
- x = values[i];
962
- if ((x >= range[0]) && (x <= range[1])) {
963
- bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
964
- bin.y += k;
965
- bin.push(data[i]);
966
- }
967
- }
968
-
969
- return bins;
970
- }
971
-
972
- // Specifies how to extract a value from the associated data. The default
973
- // value function is `Number`, which is equivalent to the identity function.
974
- histogram.value = function(x) {
975
- if (!arguments.length) return valuer;
976
- valuer = x;
977
- return histogram;
978
- };
979
-
980
- // Specifies the range of the histogram. Values outside the specified range
981
- // will be ignored. The argument `x` may be specified either as a two-element
982
- // array representing the minimum and maximum value of the range, or as a
983
- // function that returns the range given the array of values and the current
984
- // index `i`. The default range is the extent (minimum and maximum) of the
985
- // values.
986
- histogram.range = function(x) {
987
- if (!arguments.length) return ranger;
988
- ranger = d3.functor(x);
989
- return histogram;
990
- };
991
-
992
- // Specifies how to bin values in the histogram. The argument `x` may be
993
- // specified as a number, in which case the range of values will be split
994
- // uniformly into the given number of bins. Or, `x` may be an array of
995
- // threshold values, defining the bins; the specified array must contain the
996
- // rightmost (upper) value, thus specifying n + 1 values for n bins. Or, `x`
997
- // may be a function which is evaluated, being passed the range, the array of
998
- // values, and the current index `i`, returning an array of thresholds. The
999
- // default bin function will divide the values into uniform bins using
1000
- // Sturges' formula.
1001
- histogram.bins = function(x) {
1002
- if (!arguments.length) return binner;
1003
- binner = typeof x === "number"
1004
- ? function(range) { return d3_layout_histogramBinFixed(range, x); }
1005
- : d3.functor(x);
1006
- return histogram;
1007
- };
1008
-
1009
- // Specifies whether the histogram's `y` value is a count (frequency) or a
1010
- // probability (density). The default value is true.
1011
- histogram.frequency = function(x) {
1012
- if (!arguments.length) return frequency;
1013
- frequency = !!x;
1014
- return histogram;
1015
- };
1016
-
1017
- return histogram;
1018
- };
1019
-
1020
- function d3_layout_histogramBinSturges(range, values) {
1021
- return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
1022
- }
1023
-
1024
- function d3_layout_histogramBinFixed(range, n) {
1025
- var x = -1,
1026
- b = +range[0],
1027
- m = (range[1] - b) / n,
1028
- f = [];
1029
- while (++x <= n) f[x] = m * x + b;
1030
- return f;
1031
- }
1032
-
1033
- function d3_layout_histogramRange(values) {
1034
- return [d3.min(values), d3.max(values)];
1035
- }
1036
- d3.layout.hierarchy = function() {
1037
- var sort = d3_layout_hierarchySort,
1038
- children = d3_layout_hierarchyChildren,
1039
- value = d3_layout_hierarchyValue;
1040
-
1041
- // Recursively compute the node depth and value.
1042
- // Also converts the data representation into a standard hierarchy structure.
1043
- function recurse(data, depth, nodes) {
1044
- var childs = children.call(hierarchy, data, depth),
1045
- node = d3_layout_hierarchyInline ? data : {data: data};
1046
- node.depth = depth;
1047
- nodes.push(node);
1048
- if (childs && (n = childs.length)) {
1049
- var i = -1,
1050
- n,
1051
- c = node.children = [],
1052
- v = 0,
1053
- j = depth + 1;
1054
- while (++i < n) {
1055
- d = recurse(childs[i], j, nodes);
1056
- d.parent = node;
1057
- c.push(d);
1058
- v += d.value;
1059
- }
1060
- if (sort) c.sort(sort);
1061
- if (value) node.value = v;
1062
- } else if (value) {
1063
- node.value = +value.call(hierarchy, data, depth) || 0;
1064
- }
1065
- return node;
1066
- }
1067
-
1068
- // Recursively re-evaluates the node value.
1069
- function revalue(node, depth) {
1070
- var children = node.children,
1071
- v = 0;
1072
- if (children && (n = children.length)) {
1073
- var i = -1,
1074
- n,
1075
- j = depth + 1;
1076
- while (++i < n) v += revalue(children[i], j);
1077
- } else if (value) {
1078
- v = +value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth) || 0;
1079
- }
1080
- if (value) node.value = v;
1081
- return v;
1082
- }
1083
-
1084
- function hierarchy(d) {
1085
- var nodes = [];
1086
- recurse(d, 0, nodes);
1087
- return nodes;
1088
- }
1089
-
1090
- hierarchy.sort = function(x) {
1091
- if (!arguments.length) return sort;
1092
- sort = x;
1093
- return hierarchy;
1094
- };
1095
-
1096
- hierarchy.children = function(x) {
1097
- if (!arguments.length) return children;
1098
- children = x;
1099
- return hierarchy;
1100
- };
1101
-
1102
- hierarchy.value = function(x) {
1103
- if (!arguments.length) return value;
1104
- value = x;
1105
- return hierarchy;
1106
- };
1107
-
1108
- // Re-evaluates the `value` property for the specified hierarchy.
1109
- hierarchy.revalue = function(root) {
1110
- revalue(root, 0);
1111
- return root;
1112
- };
1113
-
1114
- return hierarchy;
1115
- };
1116
-
1117
- // A method assignment helper for hierarchy subclasses.
1118
- function d3_layout_hierarchyRebind(object, hierarchy) {
1119
- d3.rebind(object, hierarchy, "sort", "children", "value");
1120
-
1121
- // Add an alias for links, for convenience.
1122
- object.links = d3_layout_hierarchyLinks;
1123
-
1124
- // If the new API is used, enabling inlining.
1125
- object.nodes = function(d) {
1126
- d3_layout_hierarchyInline = true;
1127
- return (object.nodes = object)(d);
1128
- };
1129
-
1130
- return object;
1131
- }
1132
-
1133
- function d3_layout_hierarchyChildren(d) {
1134
- return d.children;
1135
- }
1136
-
1137
- function d3_layout_hierarchyValue(d) {
1138
- return d.value;
1139
- }
1140
-
1141
- function d3_layout_hierarchySort(a, b) {
1142
- return b.value - a.value;
1143
- }
1144
-
1145
- // Returns an array source+target objects for the specified nodes.
1146
- function d3_layout_hierarchyLinks(nodes) {
1147
- return d3.merge(nodes.map(function(parent) {
1148
- return (parent.children || []).map(function(child) {
1149
- return {source: parent, target: child};
1150
- });
1151
- }));
1152
- }
1153
-
1154
- // For backwards-compatibility, don't enable inlining by default.
1155
- var d3_layout_hierarchyInline = false;
1156
- d3.layout.pack = function() {
1157
- var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort),
1158
- size = [1, 1];
1159
-
1160
- function pack(d, i) {
1161
- var nodes = hierarchy.call(this, d, i),
1162
- root = nodes[0];
1163
-
1164
- // Recursively compute the layout.
1165
- root.x = 0;
1166
- root.y = 0;
1167
- d3_layout_packTree(root);
1168
-
1169
- // Scale the layout to fit the requested size.
1170
- var w = size[0],
1171
- h = size[1],
1172
- k = 1 / Math.max(2 * root.r / w, 2 * root.r / h);
1173
- d3_layout_packTransform(root, w / 2, h / 2, k);
1174
-
1175
- return nodes;
1176
- }
1177
-
1178
- pack.size = function(x) {
1179
- if (!arguments.length) return size;
1180
- size = x;
1181
- return pack;
1182
- };
1183
-
1184
- return d3_layout_hierarchyRebind(pack, hierarchy);
1185
- };
1186
-
1187
- function d3_layout_packSort(a, b) {
1188
- return a.value - b.value;
1189
- }
1190
-
1191
- function d3_layout_packInsert(a, b) {
1192
- var c = a._pack_next;
1193
- a._pack_next = b;
1194
- b._pack_prev = a;
1195
- b._pack_next = c;
1196
- c._pack_prev = b;
1197
- }
1198
-
1199
- function d3_layout_packSplice(a, b) {
1200
- a._pack_next = b;
1201
- b._pack_prev = a;
1202
- }
1203
-
1204
- function d3_layout_packIntersects(a, b) {
1205
- var dx = b.x - a.x,
1206
- dy = b.y - a.y,
1207
- dr = a.r + b.r;
1208
- return (dr * dr - dx * dx - dy * dy) > .001; // within epsilon
1209
- }
1210
-
1211
- function d3_layout_packCircle(nodes) {
1212
- var xMin = Infinity,
1213
- xMax = -Infinity,
1214
- yMin = Infinity,
1215
- yMax = -Infinity,
1216
- n = nodes.length,
1217
- a, b, c, j, k;
1218
-
1219
- function bound(node) {
1220
- xMin = Math.min(node.x - node.r, xMin);
1221
- xMax = Math.max(node.x + node.r, xMax);
1222
- yMin = Math.min(node.y - node.r, yMin);
1223
- yMax = Math.max(node.y + node.r, yMax);
1224
- }
1225
-
1226
- // Create node links.
1227
- nodes.forEach(d3_layout_packLink);
1228
-
1229
- // Create first node.
1230
- a = nodes[0];
1231
- a.x = -a.r;
1232
- a.y = 0;
1233
- bound(a);
1234
-
1235
- // Create second node.
1236
- if (n > 1) {
1237
- b = nodes[1];
1238
- b.x = b.r;
1239
- b.y = 0;
1240
- bound(b);
1241
-
1242
- // Create third node and build chain.
1243
- if (n > 2) {
1244
- c = nodes[2];
1245
- d3_layout_packPlace(a, b, c);
1246
- bound(c);
1247
- d3_layout_packInsert(a, c);
1248
- a._pack_prev = c;
1249
- d3_layout_packInsert(c, b);
1250
- b = a._pack_next;
1251
-
1252
- // Now iterate through the rest.
1253
- for (var i = 3; i < n; i++) {
1254
- d3_layout_packPlace(a, b, c = nodes[i]);
1255
-
1256
- // Search for the closest intersection.
1257
- var isect = 0, s1 = 1, s2 = 1;
1258
- for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
1259
- if (d3_layout_packIntersects(j, c)) {
1260
- isect = 1;
1261
- break;
1262
- }
1263
- }
1264
- if (isect == 1) {
1265
- for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
1266
- if (d3_layout_packIntersects(k, c)) {
1267
- if (s2 < s1) {
1268
- isect = -1;
1269
- j = k;
1270
- }
1271
- break;
1272
- }
1273
- }
1274
- }
1275
-
1276
- // Update node chain.
1277
- if (isect == 0) {
1278
- d3_layout_packInsert(a, c);
1279
- b = c;
1280
- bound(c);
1281
- } else if (isect > 0) {
1282
- d3_layout_packSplice(a, j);
1283
- b = j;
1284
- i--;
1285
- } else { // isect < 0
1286
- d3_layout_packSplice(j, b);
1287
- a = j;
1288
- i--;
1289
- }
1290
- }
1291
- }
1292
- }
1293
-
1294
- // Re-center the circles and return the encompassing radius.
1295
- var cx = (xMin + xMax) / 2,
1296
- cy = (yMin + yMax) / 2,
1297
- cr = 0;
1298
- for (var i = 0; i < n; i++) {
1299
- var node = nodes[i];
1300
- node.x -= cx;
1301
- node.y -= cy;
1302
- cr = Math.max(cr, node.r + Math.sqrt(node.x * node.x + node.y * node.y));
1303
- }
1304
-
1305
- // Remove node links.
1306
- nodes.forEach(d3_layout_packUnlink);
1307
-
1308
- return cr;
1309
- }
1310
-
1311
- function d3_layout_packLink(node) {
1312
- node._pack_next = node._pack_prev = node;
1313
- }
1314
-
1315
- function d3_layout_packUnlink(node) {
1316
- delete node._pack_next;
1317
- delete node._pack_prev;
1318
- }
1319
-
1320
- function d3_layout_packTree(node) {
1321
- var children = node.children;
1322
- if (children && children.length) {
1323
- children.forEach(d3_layout_packTree);
1324
- node.r = d3_layout_packCircle(children);
1325
- } else {
1326
- node.r = Math.sqrt(node.value);
1327
- }
1328
- }
1329
-
1330
- function d3_layout_packTransform(node, x, y, k) {
1331
- var children = node.children;
1332
- node.x = (x += k * node.x);
1333
- node.y = (y += k * node.y);
1334
- node.r *= k;
1335
- if (children) {
1336
- var i = -1, n = children.length;
1337
- while (++i < n) d3_layout_packTransform(children[i], x, y, k);
1338
- }
1339
- }
1340
-
1341
- function d3_layout_packPlace(a, b, c) {
1342
- var db = a.r + c.r,
1343
- dx = b.x - a.x,
1344
- dy = b.y - a.y;
1345
- if (db && (dx || dy)) {
1346
- var da = b.r + c.r,
1347
- dc = Math.sqrt(dx * dx + dy * dy),
1348
- cos = Math.max(-1, Math.min(1, (db * db + dc * dc - da * da) / (2 * db * dc))),
1349
- theta = Math.acos(cos),
1350
- x = cos * (db /= dc),
1351
- y = Math.sin(theta) * db;
1352
- c.x = a.x + x * dx + y * dy;
1353
- c.y = a.y + x * dy - y * dx;
1354
- } else {
1355
- c.x = a.x + db;
1356
- c.y = a.y;
1357
- }
1358
- }
1359
- // Implements a hierarchical layout using the cluster (or dendogram) algorithm.
1360
- d3.layout.cluster = function() {
1361
- var hierarchy = d3.layout.hierarchy().sort(null).value(null),
1362
- separation = d3_layout_treeSeparation,
1363
- size = [1, 1]; // width, height
1364
-
1365
- function cluster(d, i) {
1366
- var nodes = hierarchy.call(this, d, i),
1367
- root = nodes[0],
1368
- previousNode,
1369
- x = 0,
1370
- kx,
1371
- ky;
1372
-
1373
- // First walk, computing the initial x & y values.
1374
- d3_layout_treeVisitAfter(root, function(node) {
1375
- var children = node.children;
1376
- if (children && children.length) {
1377
- node.x = d3_layout_clusterX(children);
1378
- node.y = d3_layout_clusterY(children);
1379
- } else {
1380
- node.x = previousNode ? x += separation(node, previousNode) : 0;
1381
- node.y = 0;
1382
- previousNode = node;
1383
- }
1384
- });
1385
-
1386
- // Compute the left-most, right-most, and depth-most nodes for extents.
1387
- var left = d3_layout_clusterLeft(root),
1388
- right = d3_layout_clusterRight(root),
1389
- x0 = left.x - separation(left, right) / 2,
1390
- x1 = right.x + separation(right, left) / 2;
1391
-
1392
- // Second walk, normalizing x & y to the desired size.
1393
- d3_layout_treeVisitAfter(root, function(node) {
1394
- node.x = (node.x - x0) / (x1 - x0) * size[0];
1395
- node.y = (1 - node.y / root.y) * size[1];
1396
- });
1397
-
1398
- return nodes;
1399
- }
1400
-
1401
- cluster.separation = function(x) {
1402
- if (!arguments.length) return separation;
1403
- separation = x;
1404
- return cluster;
1405
- };
1406
-
1407
- cluster.size = function(x) {
1408
- if (!arguments.length) return size;
1409
- size = x;
1410
- return cluster;
1411
- };
1412
-
1413
- return d3_layout_hierarchyRebind(cluster, hierarchy);
1414
- };
1415
-
1416
- function d3_layout_clusterY(children) {
1417
- return 1 + d3.max(children, function(child) {
1418
- return child.y;
1419
- });
1420
- }
1421
-
1422
- function d3_layout_clusterX(children) {
1423
- return children.reduce(function(x, child) {
1424
- return x + child.x;
1425
- }, 0) / children.length;
1426
- }
1427
-
1428
- function d3_layout_clusterLeft(node) {
1429
- var children = node.children;
1430
- return children && children.length ? d3_layout_clusterLeft(children[0]) : node;
1431
- }
1432
-
1433
- function d3_layout_clusterRight(node) {
1434
- var children = node.children, n;
1435
- return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;
1436
- }
1437
- // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
1438
- d3.layout.tree = function() {
1439
- var hierarchy = d3.layout.hierarchy().sort(null).value(null),
1440
- separation = d3_layout_treeSeparation,
1441
- size = [1, 1]; // width, height
1442
-
1443
- function tree(d, i) {
1444
- var nodes = hierarchy.call(this, d, i),
1445
- root = nodes[0];
1446
-
1447
- function firstWalk(node, previousSibling) {
1448
- var children = node.children,
1449
- layout = node._tree;
1450
- if (children && (n = children.length)) {
1451
- var n,
1452
- firstChild = children[0],
1453
- previousChild,
1454
- ancestor = firstChild,
1455
- child,
1456
- i = -1;
1457
- while (++i < n) {
1458
- child = children[i];
1459
- firstWalk(child, previousChild);
1460
- ancestor = apportion(child, previousChild, ancestor);
1461
- previousChild = child;
1462
- }
1463
- d3_layout_treeShift(node);
1464
- var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim);
1465
- if (previousSibling) {
1466
- layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
1467
- layout.mod = layout.prelim - midpoint;
1468
- } else {
1469
- layout.prelim = midpoint;
1470
- }
1471
- } else {
1472
- if (previousSibling) {
1473
- layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
1474
- }
1475
- }
1476
- }
1477
-
1478
- function secondWalk(node, x) {
1479
- node.x = node._tree.prelim + x;
1480
- var children = node.children;
1481
- if (children && (n = children.length)) {
1482
- var i = -1,
1483
- n;
1484
- x += node._tree.mod;
1485
- while (++i < n) {
1486
- secondWalk(children[i], x);
1487
- }
1488
- }
1489
- }
1490
-
1491
- function apportion(node, previousSibling, ancestor) {
1492
- if (previousSibling) {
1493
- var vip = node,
1494
- vop = node,
1495
- vim = previousSibling,
1496
- vom = node.parent.children[0],
1497
- sip = vip._tree.mod,
1498
- sop = vop._tree.mod,
1499
- sim = vim._tree.mod,
1500
- som = vom._tree.mod,
1501
- shift;
1502
- while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
1503
- vom = d3_layout_treeLeft(vom);
1504
- vop = d3_layout_treeRight(vop);
1505
- vop._tree.ancestor = node;
1506
- shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip);
1507
- if (shift > 0) {
1508
- d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift);
1509
- sip += shift;
1510
- sop += shift;
1511
- }
1512
- sim += vim._tree.mod;
1513
- sip += vip._tree.mod;
1514
- som += vom._tree.mod;
1515
- sop += vop._tree.mod;
1516
- }
1517
- if (vim && !d3_layout_treeRight(vop)) {
1518
- vop._tree.thread = vim;
1519
- vop._tree.mod += sim - sop;
1520
- }
1521
- if (vip && !d3_layout_treeLeft(vom)) {
1522
- vom._tree.thread = vip;
1523
- vom._tree.mod += sip - som;
1524
- ancestor = node;
1525
- }
1526
- }
1527
- return ancestor;
1528
- }
1529
-
1530
- // Initialize temporary layout variables.
1531
- d3_layout_treeVisitAfter(root, function(node, previousSibling) {
1532
- node._tree = {
1533
- ancestor: node,
1534
- prelim: 0,
1535
- mod: 0,
1536
- change: 0,
1537
- shift: 0,
1538
- number: previousSibling ? previousSibling._tree.number + 1 : 0
1539
- };
1540
- });
1541
-
1542
- // Compute the layout using Buchheim et al.'s algorithm.
1543
- firstWalk(root);
1544
- secondWalk(root, -root._tree.prelim);
1545
-
1546
- // Compute the left-most, right-most, and depth-most nodes for extents.
1547
- var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost),
1548
- right = d3_layout_treeSearch(root, d3_layout_treeRightmost),
1549
- deep = d3_layout_treeSearch(root, d3_layout_treeDeepest),
1550
- x0 = left.x - separation(left, right) / 2,
1551
- x1 = right.x + separation(right, left) / 2,
1552
- y1 = deep.depth || 1;
1553
-
1554
- // Clear temporary layout variables; transform x and y.
1555
- d3_layout_treeVisitAfter(root, function(node) {
1556
- node.x = (node.x - x0) / (x1 - x0) * size[0];
1557
- node.y = node.depth / y1 * size[1];
1558
- delete node._tree;
1559
- });
1560
-
1561
- return nodes;
1562
- }
1563
-
1564
- tree.separation = function(x) {
1565
- if (!arguments.length) return separation;
1566
- separation = x;
1567
- return tree;
1568
- };
1569
-
1570
- tree.size = function(x) {
1571
- if (!arguments.length) return size;
1572
- size = x;
1573
- return tree;
1574
- };
1575
-
1576
- return d3_layout_hierarchyRebind(tree, hierarchy);
1577
- };
1578
-
1579
- function d3_layout_treeSeparation(a, b) {
1580
- return a.parent == b.parent ? 1 : 2;
1581
- }
1582
-
1583
- // function d3_layout_treeSeparationRadial(a, b) {
1584
- // return (a.parent == b.parent ? 1 : 2) / a.depth;
1585
- // }
1586
-
1587
- function d3_layout_treeLeft(node) {
1588
- var children = node.children;
1589
- return children && children.length ? children[0] : node._tree.thread;
1590
- }
1591
-
1592
- function d3_layout_treeRight(node) {
1593
- var children = node.children,
1594
- n;
1595
- return children && (n = children.length) ? children[n - 1] : node._tree.thread;
1596
- }
1597
-
1598
- function d3_layout_treeSearch(node, compare) {
1599
- var children = node.children;
1600
- if (children && (n = children.length)) {
1601
- var child,
1602
- n,
1603
- i = -1;
1604
- while (++i < n) {
1605
- if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
1606
- node = child;
1607
- }
1608
- }
1609
- }
1610
- return node;
1611
- }
1612
-
1613
- function d3_layout_treeRightmost(a, b) {
1614
- return a.x - b.x;
1615
- }
1616
-
1617
- function d3_layout_treeLeftmost(a, b) {
1618
- return b.x - a.x;
1619
- }
1620
-
1621
- function d3_layout_treeDeepest(a, b) {
1622
- return a.depth - b.depth;
1623
- }
1624
-
1625
- function d3_layout_treeVisitAfter(node, callback) {
1626
- function visit(node, previousSibling) {
1627
- var children = node.children;
1628
- if (children && (n = children.length)) {
1629
- var child,
1630
- previousChild = null,
1631
- i = -1,
1632
- n;
1633
- while (++i < n) {
1634
- child = children[i];
1635
- visit(child, previousChild);
1636
- previousChild = child;
1637
- }
1638
- }
1639
- callback(node, previousSibling);
1640
- }
1641
- visit(node, null);
1642
- }
1643
-
1644
- function d3_layout_treeShift(node) {
1645
- var shift = 0,
1646
- change = 0,
1647
- children = node.children,
1648
- i = children.length,
1649
- child;
1650
- while (--i >= 0) {
1651
- child = children[i]._tree;
1652
- child.prelim += shift;
1653
- child.mod += shift;
1654
- shift += child.shift + (change += child.change);
1655
- }
1656
- }
1657
-
1658
- function d3_layout_treeMove(ancestor, node, shift) {
1659
- ancestor = ancestor._tree;
1660
- node = node._tree;
1661
- var change = shift / (node.number - ancestor.number);
1662
- ancestor.change += change;
1663
- node.change -= change;
1664
- node.shift += shift;
1665
- node.prelim += shift;
1666
- node.mod += shift;
1667
- }
1668
-
1669
- function d3_layout_treeAncestor(vim, node, ancestor) {
1670
- return vim._tree.ancestor.parent == node.parent
1671
- ? vim._tree.ancestor
1672
- : ancestor;
1673
- }
1674
- // Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
1675
- // Modified to support a target aspect ratio by Jeff Heer
1676
- d3.layout.treemap = function() {
1677
- var hierarchy = d3.layout.hierarchy(),
1678
- round = Math.round,
1679
- size = [1, 1], // width, height
1680
- padding = null,
1681
- pad = d3_layout_treemapPadNull,
1682
- sticky = false,
1683
- stickies,
1684
- ratio = 0.5 * (1 + Math.sqrt(5)); // golden ratio
1685
-
1686
- // Compute the area for each child based on value & scale.
1687
- function scale(children, k) {
1688
- var i = -1,
1689
- n = children.length,
1690
- child,
1691
- area;
1692
- while (++i < n) {
1693
- area = (child = children[i]).value * (k < 0 ? 0 : k);
1694
- child.area = isNaN(area) || area <= 0 ? 0 : area;
1695
- }
1696
- }
1697
-
1698
- // Recursively arranges the specified node's children into squarified rows.
1699
- function squarify(node) {
1700
- var children = node.children;
1701
- if (children && children.length) {
1702
- var rect = pad(node),
1703
- row = [],
1704
- remaining = children.slice(), // copy-on-write
1705
- child,
1706
- best = Infinity, // the best row score so far
1707
- score, // the current row score
1708
- u = Math.min(rect.dx, rect.dy), // initial orientation
1709
- n;
1710
- scale(remaining, rect.dx * rect.dy / node.value);
1711
- row.area = 0;
1712
- while ((n = remaining.length) > 0) {
1713
- row.push(child = remaining[n - 1]);
1714
- row.area += child.area;
1715
- if ((score = worst(row, u)) <= best) { // continue with this orientation
1716
- remaining.pop();
1717
- best = score;
1718
- } else { // abort, and try a different orientation
1719
- row.area -= row.pop().area;
1720
- position(row, u, rect, false);
1721
- u = Math.min(rect.dx, rect.dy);
1722
- row.length = row.area = 0;
1723
- best = Infinity;
1724
- }
1725
- }
1726
- if (row.length) {
1727
- position(row, u, rect, true);
1728
- row.length = row.area = 0;
1729
- }
1730
- children.forEach(squarify);
1731
- }
1732
- }
1733
-
1734
- // Recursively resizes the specified node's children into existing rows.
1735
- // Preserves the existing layout!
1736
- function stickify(node) {
1737
- var children = node.children;
1738
- if (children && children.length) {
1739
- var rect = pad(node),
1740
- remaining = children.slice(), // copy-on-write
1741
- child,
1742
- row = [];
1743
- scale(remaining, rect.dx * rect.dy / node.value);
1744
- row.area = 0;
1745
- while (child = remaining.pop()) {
1746
- row.push(child);
1747
- row.area += child.area;
1748
- if (child.z != null) {
1749
- position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);
1750
- row.length = row.area = 0;
1751
- }
1752
- }
1753
- children.forEach(stickify);
1754
- }
1755
- }
1756
-
1757
- // Computes the score for the specified row, as the worst aspect ratio.
1758
- function worst(row, u) {
1759
- var s = row.area,
1760
- r,
1761
- rmax = 0,
1762
- rmin = Infinity,
1763
- i = -1,
1764
- n = row.length;
1765
- while (++i < n) {
1766
- if (!(r = row[i].area)) continue;
1767
- if (r < rmin) rmin = r;
1768
- if (r > rmax) rmax = r;
1769
- }
1770
- s *= s;
1771
- u *= u;
1772
- return s
1773
- ? Math.max((u * rmax * ratio) / s, s / (u * rmin * ratio))
1774
- : Infinity;
1775
- }
1776
-
1777
- // Positions the specified row of nodes. Modifies `rect`.
1778
- function position(row, u, rect, flush) {
1779
- var i = -1,
1780
- n = row.length,
1781
- x = rect.x,
1782
- y = rect.y,
1783
- v = u ? round(row.area / u) : 0,
1784
- o;
1785
- if (u == rect.dx) { // horizontal subdivision
1786
- if (flush || v > rect.dy) v = v ? rect.dy : 0; // over+underflow
1787
- while (++i < n) {
1788
- o = row[i];
1789
- o.x = x;
1790
- o.y = y;
1791
- o.dy = v;
1792
- x += o.dx = v ? round(o.area / v) : 0;
1793
- }
1794
- o.z = true;
1795
- o.dx += rect.x + rect.dx - x; // rounding error
1796
- rect.y += v;
1797
- rect.dy -= v;
1798
- } else { // vertical subdivision
1799
- if (flush || v > rect.dx) v = v ? rect.dx : 0; // over+underflow
1800
- while (++i < n) {
1801
- o = row[i];
1802
- o.x = x;
1803
- o.y = y;
1804
- o.dx = v;
1805
- y += o.dy = v ? round(o.area / v) : 0;
1806
- }
1807
- o.z = false;
1808
- o.dy += rect.y + rect.dy - y; // rounding error
1809
- rect.x += v;
1810
- rect.dx -= v;
1811
- }
1812
- }
1813
-
1814
- function treemap(d) {
1815
- var nodes = stickies || hierarchy(d),
1816
- root = nodes[0];
1817
- root.x = 0;
1818
- root.y = 0;
1819
- root.dx = size[0];
1820
- root.dy = size[1];
1821
- if (stickies) hierarchy.revalue(root);
1822
- scale([root], root.dx * root.dy / root.value);
1823
- (stickies ? stickify : squarify)(root);
1824
- if (sticky) stickies = nodes;
1825
- return nodes;
1826
- }
1827
-
1828
- treemap.size = function(x) {
1829
- if (!arguments.length) return size;
1830
- size = x;
1831
- return treemap;
1832
- };
1833
-
1834
- treemap.padding = function(x) {
1835
- if (!arguments.length) return padding;
1836
-
1837
- function padFunction(node) {
1838
- var p = x.call(treemap, node, node.depth);
1839
- return p == null
1840
- ? d3_layout_treemapPadNull(node)
1841
- : d3_layout_treemapPad(node, typeof p === "number" ? [p, p, p, p] : p);
1842
- }
1843
-
1844
- function padConstant(node) {
1845
- return d3_layout_treemapPad(node, x);
1846
- }
1847
-
1848
- var type;
1849
- pad = (padding = x) == null ? d3_layout_treemapPadNull
1850
- : (type = typeof x) === "function" ? padFunction
1851
- : type === "number" ? (x = [x, x, x, x], padConstant)
1852
- : padConstant;
1853
- return treemap;
1854
- };
1855
-
1856
- treemap.round = function(x) {
1857
- if (!arguments.length) return round != Number;
1858
- round = x ? Math.round : Number;
1859
- return treemap;
1860
- };
1861
-
1862
- treemap.sticky = function(x) {
1863
- if (!arguments.length) return sticky;
1864
- sticky = x;
1865
- stickies = null;
1866
- return treemap;
1867
- };
1868
-
1869
- treemap.ratio = function(x) {
1870
- if (!arguments.length) return ratio;
1871
- ratio = x;
1872
- return treemap;
1873
- };
1874
-
1875
- return d3_layout_hierarchyRebind(treemap, hierarchy);
1876
- };
1877
-
1878
- function d3_layout_treemapPadNull(node) {
1879
- return {x: node.x, y: node.y, dx: node.dx, dy: node.dy};
1880
- }
1881
-
1882
- function d3_layout_treemapPad(node, padding) {
1883
- var x = node.x + padding[3],
1884
- y = node.y + padding[0],
1885
- dx = node.dx - padding[1] - padding[3],
1886
- dy = node.dy - padding[0] - padding[2];
1887
- if (dx < 0) { x += dx / 2; dx = 0; }
1888
- if (dy < 0) { y += dy / 2; dy = 0; }
1889
- return {x: x, y: y, dx: dx, dy: dy};
1890
- }
1891
- })();