picky-statistics 4.0.0pre3 → 4.0.0pre5

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 (596) hide show
  1. data/lib/picky-statistics/application/javascripts/d3/LICENSE +26 -0
  2. data/lib/picky-statistics/application/javascripts/d3/Makefile +268 -0
  3. data/lib/picky-statistics/application/javascripts/d3/README.md +51 -0
  4. data/lib/picky-statistics/application/javascripts/d3/d3.chart.js +984 -0
  5. data/lib/picky-statistics/application/javascripts/d3/d3.chart.min.js +1 -0
  6. data/lib/picky-statistics/application/javascripts/d3/d3.csv.js +92 -0
  7. data/lib/picky-statistics/application/javascripts/d3/d3.csv.min.js +1 -0
  8. data/lib/picky-statistics/application/javascripts/d3/d3.geo.js +938 -0
  9. data/lib/picky-statistics/application/javascripts/d3/d3.geo.min.js +1 -0
  10. data/lib/picky-statistics/application/javascripts/d3/d3.geom.js +835 -0
  11. data/lib/picky-statistics/application/javascripts/d3/d3.geom.min.js +1 -0
  12. data/lib/picky-statistics/application/javascripts/d3/d3.js +4690 -0
  13. data/lib/picky-statistics/application/javascripts/d3/d3.layout.js +1891 -0
  14. data/lib/picky-statistics/application/javascripts/d3/d3.layout.min.js +1 -0
  15. data/lib/picky-statistics/application/javascripts/d3/d3.min.js +2 -0
  16. data/lib/picky-statistics/application/javascripts/d3/d3.time.js +687 -0
  17. data/lib/picky-statistics/application/javascripts/d3/d3.time.min.js +1 -0
  18. data/lib/picky-statistics/application/javascripts/d3/examples/albers/albers.html +168 -0
  19. data/lib/picky-statistics/application/javascripts/d3/examples/area/area-radial.html +48 -0
  20. data/lib/picky-statistics/application/javascripts/d3/examples/area/area.html +113 -0
  21. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-alternating.html +50 -0
  22. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-ggplot2.html +68 -0
  23. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-multiples.html +117 -0
  24. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-orientations.html +63 -0
  25. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-transition.html +153 -0
  26. data/lib/picky-statistics/application/javascripts/d3/examples/azimuthal/azimuthal.css +21 -0
  27. data/lib/picky-statistics/application/javascripts/d3/examples/azimuthal/azimuthal.html +99 -0
  28. data/lib/picky-statistics/application/javascripts/d3/examples/azimuthal/azimuthal.js +29 -0
  29. data/lib/picky-statistics/application/javascripts/d3/examples/bar/bar-hierarchy.html +223 -0
  30. data/lib/picky-statistics/application/javascripts/d3/examples/bar/bar.html +101 -0
  31. data/lib/picky-statistics/application/javascripts/d3/examples/bar/sample-data.csv +53 -0
  32. data/lib/picky-statistics/application/javascripts/d3/examples/bonne/bonne.html +159 -0
  33. data/lib/picky-statistics/application/javascripts/d3/examples/box/box.css +4 -0
  34. data/lib/picky-statistics/application/javascripts/d3/examples/box/box.html +19 -0
  35. data/lib/picky-statistics/application/javascripts/d3/examples/box/box.js +68 -0
  36. data/lib/picky-statistics/application/javascripts/d3/examples/brush/brush-ordinal.html +92 -0
  37. data/lib/picky-statistics/application/javascripts/d3/examples/brush/brush-x.html +92 -0
  38. data/lib/picky-statistics/application/javascripts/d3/examples/brush/brush-y.html +91 -0
  39. data/lib/picky-statistics/application/javascripts/d3/examples/brush/brush.html +98 -0
  40. data/lib/picky-statistics/application/javascripts/d3/examples/bubble/bubble.css +8 -0
  41. data/lib/picky-statistics/application/javascripts/d3/examples/bubble/bubble.html +14 -0
  42. data/lib/picky-statistics/application/javascripts/d3/examples/bubble/bubble.js +46 -0
  43. data/lib/picky-statistics/application/javascripts/d3/examples/bullet/bullet.css +10 -0
  44. data/lib/picky-statistics/application/javascripts/d3/examples/bullet/bullet.html +18 -0
  45. data/lib/picky-statistics/application/javascripts/d3/examples/bullet/bullet.js +53 -0
  46. data/lib/picky-statistics/application/javascripts/d3/examples/bullet/bullets.json +7 -0
  47. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-radial.css +9 -0
  48. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-radial.html +15 -0
  49. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-radial.js +50 -0
  50. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-treemap.css +14 -0
  51. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-treemap.html +16 -0
  52. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-treemap.js +53 -0
  53. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/packages.js +49 -0
  54. data/lib/picky-statistics/application/javascripts/d3/examples/button.css +35 -0
  55. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/calendar.css +15 -0
  56. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/dji-area.html +120 -0
  57. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/dji.csv +5233 -0
  58. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/dji.html +15 -0
  59. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/dji.js +65 -0
  60. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/vix.csv +5231 -0
  61. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/vix.html +15 -0
  62. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/vix.js +65 -0
  63. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/cartogram.css +20 -0
  64. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/cartogram.html +15 -0
  65. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/cartogram.js +51 -0
  66. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/demers.css +9 -0
  67. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/demers.html +16 -0
  68. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/demers.js +79 -0
  69. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/dorling.css +9 -0
  70. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/dorling.html +16 -0
  71. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/dorling.js +80 -0
  72. data/lib/picky-statistics/application/javascripts/d3/examples/chord/chord-flare.html +109 -0
  73. data/lib/picky-statistics/application/javascripts/d3/examples/chord/chord.css +9 -0
  74. data/lib/picky-statistics/application/javascripts/d3/examples/chord/chord.html +14 -0
  75. data/lib/picky-statistics/application/javascripts/d3/examples/chord/chord.js +98 -0
  76. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth-area.html +51 -0
  77. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth-bounds.html +46 -0
  78. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth.css +16 -0
  79. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth.html +15 -0
  80. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth.js +38 -0
  81. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/unemployment.json +1 -0
  82. data/lib/picky-statistics/application/javascripts/d3/examples/clock/clock.css +23 -0
  83. data/lib/picky-statistics/application/javascripts/d3/examples/clock/clock.html +17 -0
  84. data/lib/picky-statistics/application/javascripts/d3/examples/clock/clock.js +87 -0
  85. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster-radial.html +14 -0
  86. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster-radial.js +39 -0
  87. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster.css +15 -0
  88. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster.html +14 -0
  89. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster.js +39 -0
  90. data/lib/picky-statistics/application/javascripts/d3/examples/contour/contour.html +108 -0
  91. data/lib/picky-statistics/application/javascripts/d3/examples/crimea/crimea-stacked-area.html +109 -0
  92. data/lib/picky-statistics/application/javascripts/d3/examples/crimea/crimea-stacked-bar.html +98 -0
  93. data/lib/picky-statistics/application/javascripts/d3/examples/crimea/crimea.csv +24 -0
  94. data/lib/picky-statistics/application/javascripts/d3/examples/custom/custom.html +83 -0
  95. data/lib/picky-statistics/application/javascripts/d3/examples/data/README.md +13 -0
  96. data/lib/picky-statistics/application/javascripts/d3/examples/data/faithful.json +8 -0
  97. data/lib/picky-statistics/application/javascripts/d3/examples/data/flare-imports.json +222 -0
  98. data/lib/picky-statistics/application/javascripts/d3/examples/data/flare.json +380 -0
  99. data/lib/picky-statistics/application/javascripts/d3/examples/data/morley.csv +101 -0
  100. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.csv +2 -0
  101. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.html +5 -0
  102. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.json +1 -0
  103. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.txt +1 -0
  104. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.xml +4 -0
  105. data/lib/picky-statistics/application/javascripts/d3/examples/data/stocks.csv +807 -0
  106. data/lib/picky-statistics/application/javascripts/d3/examples/data/unemployment.csv +1709 -0
  107. data/lib/picky-statistics/application/javascripts/d3/examples/data/us-borders.json +1 -0
  108. data/lib/picky-statistics/application/javascripts/d3/examples/data/us-counties.json +3216 -0
  109. data/lib/picky-statistics/application/javascripts/d3/examples/data/us-state-centroids.json +54 -0
  110. data/lib/picky-statistics/application/javascripts/d3/examples/data/us-states.json +54 -0
  111. data/lib/picky-statistics/application/javascripts/d3/examples/data/world-countries.json +179 -0
  112. data/lib/picky-statistics/application/javascripts/d3/examples/delaunay/delaunay.html +44 -0
  113. data/lib/picky-statistics/application/javascripts/d3/examples/donut/donut.html +124 -0
  114. data/lib/picky-statistics/application/javascripts/d3/examples/dot/dot.html +103 -0
  115. data/lib/picky-statistics/application/javascripts/d3/examples/drag/drag.html +44 -0
  116. data/lib/picky-statistics/application/javascripts/d3/examples/force/README +10 -0
  117. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-bounds.html +70 -0
  118. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-cluster.html +249 -0
  119. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-collapsible.html +144 -0
  120. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-dynamic.html +118 -0
  121. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-map.html +104 -0
  122. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-multi-foci.html +68 -0
  123. data/lib/picky-statistics/application/javascripts/d3/examples/force/force.css +9 -0
  124. data/lib/picky-statistics/application/javascripts/d3/examples/force/force.html +14 -0
  125. data/lib/picky-statistics/application/javascripts/d3/examples/force/force.js +50 -0
  126. data/lib/picky-statistics/application/javascripts/d3/examples/force/miserables.json +1 -0
  127. data/lib/picky-statistics/application/javascripts/d3/examples/great-arc/great-arc.html +78 -0
  128. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-data-key.html +60 -0
  129. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-data-nested-key.html +75 -0
  130. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-data-nested.html +77 -0
  131. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-data.html +46 -0
  132. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-event.html +53 -0
  133. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-node-key.html +25 -0
  134. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-order.html +25 -0
  135. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-sort.html +75 -0
  136. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-transform.html +41 -0
  137. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-transition-undefined.html +43 -0
  138. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-transition.html +47 -0
  139. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-webkit-transition.html +64 -0
  140. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/select-enter-add.html +29 -0
  141. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/selectAll-enter-add.html +20 -0
  142. data/lib/picky-statistics/application/javascripts/d3/examples/histogram/histogram.html +80 -0
  143. data/lib/picky-statistics/application/javascripts/d3/examples/horizon/horizon.css +9 -0
  144. data/lib/picky-statistics/application/javascripts/d3/examples/horizon/horizon.html +25 -0
  145. data/lib/picky-statistics/application/javascripts/d3/examples/horizon/horizon.js +43 -0
  146. data/lib/picky-statistics/application/javascripts/d3/examples/horizon/unemployment.json +1 -0
  147. data/lib/picky-statistics/application/javascripts/d3/examples/hull/hull.html +75 -0
  148. data/lib/picky-statistics/application/javascripts/d3/examples/kde/kde.css +9 -0
  149. data/lib/picky-statistics/application/javascripts/d3/examples/kde/kde.html +14 -0
  150. data/lib/picky-statistics/application/javascripts/d3/examples/kde/kde.js +40 -0
  151. data/lib/picky-statistics/application/javascripts/d3/examples/line/line.css +22 -0
  152. data/lib/picky-statistics/application/javascripts/d3/examples/line/line.html +11 -0
  153. data/lib/picky-statistics/application/javascripts/d3/examples/line/line.js +63 -0
  154. data/lib/picky-statistics/application/javascripts/d3/examples/marimekko/marimekko.html +116 -0
  155. data/lib/picky-statistics/application/javascripts/d3/examples/marimekko/marimekko.json +18 -0
  156. data/lib/picky-statistics/application/javascripts/d3/examples/marker/marker.html +169 -0
  157. data/lib/picky-statistics/application/javascripts/d3/examples/mercator/mercator.html +133 -0
  158. data/lib/picky-statistics/application/javascripts/d3/examples/moire/moire.html +53 -0
  159. data/lib/picky-statistics/application/javascripts/d3/examples/node-canvas/us-counties.js +70 -0
  160. data/lib/picky-statistics/application/javascripts/d3/examples/pack/pack.css +15 -0
  161. data/lib/picky-statistics/application/javascripts/d3/examples/pack/pack.html +14 -0
  162. data/lib/picky-statistics/application/javascripts/d3/examples/pack/pack.js +33 -0
  163. data/lib/picky-statistics/application/javascripts/d3/examples/parallel/cars.csv +407 -0
  164. data/lib/picky-statistics/application/javascripts/d3/examples/parallel/parallel.html +134 -0
  165. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-icicle-zoom.html +59 -0
  166. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-icicle.html +45 -0
  167. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-sunburst-zoom.html +72 -0
  168. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-sunburst.html +21 -0
  169. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-sunburst.js +72 -0
  170. data/lib/picky-statistics/application/javascripts/d3/examples/pie/pie-transition.html +69 -0
  171. data/lib/picky-statistics/application/javascripts/d3/examples/pie/pie.html +51 -0
  172. data/lib/picky-statistics/application/javascripts/d3/examples/population/population.css +28 -0
  173. data/lib/picky-statistics/application/javascripts/d3/examples/population/population.csv +571 -0
  174. data/lib/picky-statistics/application/javascripts/d3/examples/population/population.html +13 -0
  175. data/lib/picky-statistics/application/javascripts/d3/examples/population/population.js +126 -0
  176. data/lib/picky-statistics/application/javascripts/d3/examples/qq/qq.css +18 -0
  177. data/lib/picky-statistics/application/javascripts/d3/examples/qq/qq.html +21 -0
  178. data/lib/picky-statistics/application/javascripts/d3/examples/qq/qq.js +66 -0
  179. data/lib/picky-statistics/application/javascripts/d3/examples/qq/stats.js +28 -0
  180. data/lib/picky-statistics/application/javascripts/d3/examples/qq/turkers.json +1 -0
  181. data/lib/picky-statistics/application/javascripts/d3/examples/quadtree/quadtree.html +114 -0
  182. data/lib/picky-statistics/application/javascripts/d3/examples/showreel/showreel.html +661 -0
  183. data/lib/picky-statistics/application/javascripts/d3/examples/sizzle/sizzle.html +27 -0
  184. data/lib/picky-statistics/application/javascripts/d3/examples/sort/sort.css +4 -0
  185. data/lib/picky-statistics/application/javascripts/d3/examples/sort/sort.html +12 -0
  186. data/lib/picky-statistics/application/javascripts/d3/examples/sort/sort.js +112 -0
  187. data/lib/picky-statistics/application/javascripts/d3/examples/spline/spline.css +30 -0
  188. data/lib/picky-statistics/application/javascripts/d3/examples/spline/spline.html +14 -0
  189. data/lib/picky-statistics/application/javascripts/d3/examples/spline/spline.js +113 -0
  190. data/lib/picky-statistics/application/javascripts/d3/examples/splom/flowers.json +1 -0
  191. data/lib/picky-statistics/application/javascripts/d3/examples/splom/splom.css +49 -0
  192. data/lib/picky-statistics/application/javascripts/d3/examples/splom/splom.html +13 -0
  193. data/lib/picky-statistics/application/javascripts/d3/examples/splom/splom.js +119 -0
  194. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stack.css +7 -0
  195. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stack.html +22 -0
  196. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stack.js +119 -0
  197. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stream.css +3 -0
  198. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stream.html +19 -0
  199. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stream.js +42 -0
  200. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stream_layers.js +33 -0
  201. data/lib/picky-statistics/application/javascripts/d3/examples/superformula/dot.html +104 -0
  202. data/lib/picky-statistics/application/javascripts/d3/examples/superformula/explorer.html +120 -0
  203. data/lib/picky-statistics/application/javascripts/d3/examples/superformula/superformula.html +70 -0
  204. data/lib/picky-statistics/application/javascripts/d3/examples/superformula/superformula.js +98 -0
  205. data/lib/picky-statistics/application/javascripts/d3/examples/symbol-map/symbol-map.html +67 -0
  206. data/lib/picky-statistics/application/javascripts/d3/examples/touch/touch.html +65 -0
  207. data/lib/picky-statistics/application/javascripts/d3/examples/transform/test.html +85 -0
  208. data/lib/picky-statistics/application/javascripts/d3/examples/transform/transform.html +60 -0
  209. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree-dynamic.html +111 -0
  210. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree-interactive.html +172 -0
  211. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree-radial.html +14 -0
  212. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree-radial.js +40 -0
  213. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree.css +15 -0
  214. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree.html +14 -0
  215. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree.js +39 -0
  216. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap-svg.html +22 -0
  217. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap-svg.js +34 -0
  218. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap.css +8 -0
  219. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap.html +22 -0
  220. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap.js +53 -0
  221. data/lib/picky-statistics/application/javascripts/d3/examples/voroboids/boid.js +235 -0
  222. data/lib/picky-statistics/application/javascripts/d3/examples/voroboids/voroboids.css +15 -0
  223. data/lib/picky-statistics/application/javascripts/d3/examples/voroboids/voroboids.html +14 -0
  224. data/lib/picky-statistics/application/javascripts/d3/examples/voroboids/voroboids.js +65 -0
  225. data/lib/picky-statistics/application/javascripts/d3/examples/voronoi/voronoi.css +16 -0
  226. data/lib/picky-statistics/application/javascripts/d3/examples/voronoi/voronoi.html +15 -0
  227. data/lib/picky-statistics/application/javascripts/d3/examples/voronoi/voronoi.js +34 -0
  228. data/lib/picky-statistics/application/javascripts/d3/examples/zoom-pan/zoom-pan-transform.html +96 -0
  229. data/lib/picky-statistics/application/javascripts/d3/examples/zoom-pan/zoom-pan.html +120 -0
  230. data/lib/picky-statistics/application/javascripts/d3/examples/zoom/dji.csv +5233 -0
  231. data/lib/picky-statistics/application/javascripts/d3/examples/zoom/zoom.html +162 -0
  232. data/lib/picky-statistics/application/javascripts/d3/lib/colorbrewer/LICENSE +38 -0
  233. data/lib/picky-statistics/application/javascripts/d3/lib/colorbrewer/colorbrewer.css +1327 -0
  234. data/lib/picky-statistics/application/javascripts/d3/lib/colorbrewer/colorbrewer.js +32 -0
  235. data/lib/picky-statistics/application/javascripts/d3/lib/jit/LICENSE +27 -0
  236. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/LICENSE +25 -0
  237. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  238. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  239. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_flat_10_000000_40x100.png +0 -0
  240. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  241. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  242. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  243. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  244. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  245. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  246. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
  247. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_228ef1_256x240.png +0 -0
  248. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_ef8c08_256x240.png +0 -0
  249. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_ffd27a_256x240.png +0 -0
  250. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
  251. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/jquery-ui.css +318 -0
  252. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/jquery-ui.min.js +83 -0
  253. data/lib/picky-statistics/application/javascripts/d3/lib/jquery/LICENSE +20 -0
  254. data/lib/picky-statistics/application/javascripts/d3/lib/jquery/jquery.js +6883 -0
  255. data/lib/picky-statistics/application/javascripts/d3/lib/jquery/jquery.min.js +166 -0
  256. data/lib/picky-statistics/application/javascripts/d3/lib/polymaps/LICENSE +28 -0
  257. data/lib/picky-statistics/application/javascripts/d3/lib/protovis/LICENSE +27 -0
  258. data/lib/picky-statistics/application/javascripts/d3/lib/science/LICENSE +26 -0
  259. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.js +225 -0
  260. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.lin.js +27 -0
  261. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.lin.min.js +1 -0
  262. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.min.js +1 -0
  263. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.stats.js +720 -0
  264. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.stats.min.js +1 -0
  265. data/lib/picky-statistics/application/javascripts/d3/lib/sizzle/LICENSE +24 -0
  266. data/lib/picky-statistics/application/javascripts/d3/lib/sizzle/sizzle.js +1376 -0
  267. data/lib/picky-statistics/application/javascripts/d3/lib/sizzle/sizzle.min.js +28 -0
  268. data/lib/picky-statistics/application/javascripts/d3/package.json +28 -0
  269. data/lib/picky-statistics/application/javascripts/d3/src/behavior/behavior.js +1 -0
  270. data/lib/picky-statistics/application/javascripts/d3/src/behavior/drag.js +125 -0
  271. data/lib/picky-statistics/application/javascripts/d3/src/behavior/zoom.js +242 -0
  272. data/lib/picky-statistics/application/javascripts/d3/src/chart/box.js +297 -0
  273. data/lib/picky-statistics/application/javascripts/d3/src/chart/bullet.js +237 -0
  274. data/lib/picky-statistics/application/javascripts/d3/src/chart/chart.js +1 -0
  275. data/lib/picky-statistics/application/javascripts/d3/src/chart/horizon.js +203 -0
  276. data/lib/picky-statistics/application/javascripts/d3/src/chart/qq.js +245 -0
  277. data/lib/picky-statistics/application/javascripts/d3/src/compat/date.js +3 -0
  278. data/lib/picky-statistics/application/javascripts/d3/src/compat/style.js +9 -0
  279. data/lib/picky-statistics/application/javascripts/d3/src/core/array.js +29 -0
  280. data/lib/picky-statistics/application/javascripts/d3/src/core/ascending.js +3 -0
  281. data/lib/picky-statistics/application/javascripts/d3/src/core/bisect.js +38 -0
  282. data/lib/picky-statistics/application/javascripts/d3/src/core/collapse.js +3 -0
  283. data/lib/picky-statistics/application/javascripts/d3/src/core/core.js +1 -0
  284. data/lib/picky-statistics/application/javascripts/d3/src/core/descending.js +3 -0
  285. data/lib/picky-statistics/application/javascripts/d3/src/core/dispatch.js +60 -0
  286. data/lib/picky-statistics/application/javascripts/d3/src/core/ease.js +128 -0
  287. data/lib/picky-statistics/application/javascripts/d3/src/core/entries.js +5 -0
  288. data/lib/picky-statistics/application/javascripts/d3/src/core/event.js +6 -0
  289. data/lib/picky-statistics/application/javascripts/d3/src/core/extent.js +21 -0
  290. data/lib/picky-statistics/application/javascripts/d3/src/core/first.js +13 -0
  291. data/lib/picky-statistics/application/javascripts/d3/src/core/format.js +100 -0
  292. data/lib/picky-statistics/application/javascripts/d3/src/core/formatPrefix.js +20 -0
  293. data/lib/picky-statistics/application/javascripts/d3/src/core/functor.js +3 -0
  294. data/lib/picky-statistics/application/javascripts/d3/src/core/hsl.js +63 -0
  295. data/lib/picky-statistics/application/javascripts/d3/src/core/html.js +10 -0
  296. data/lib/picky-statistics/application/javascripts/d3/src/core/interpolate.js +183 -0
  297. data/lib/picky-statistics/application/javascripts/d3/src/core/json.js +5 -0
  298. data/lib/picky-statistics/application/javascripts/d3/src/core/keys.js +5 -0
  299. data/lib/picky-statistics/application/javascripts/d3/src/core/last.js +13 -0
  300. data/lib/picky-statistics/application/javascripts/d3/src/core/max.js +14 -0
  301. data/lib/picky-statistics/application/javascripts/d3/src/core/mean.js +13 -0
  302. data/lib/picky-statistics/application/javascripts/d3/src/core/median.js +5 -0
  303. data/lib/picky-statistics/application/javascripts/d3/src/core/merge.js +3 -0
  304. data/lib/picky-statistics/application/javascripts/d3/src/core/min.js +14 -0
  305. data/lib/picky-statistics/application/javascripts/d3/src/core/nest.js +87 -0
  306. data/lib/picky-statistics/application/javascripts/d3/src/core/noop.js +1 -0
  307. data/lib/picky-statistics/application/javascripts/d3/src/core/ns.js +17 -0
  308. data/lib/picky-statistics/application/javascripts/d3/src/core/number.js +3 -0
  309. data/lib/picky-statistics/application/javascripts/d3/src/core/permute.js +7 -0
  310. data/lib/picky-statistics/application/javascripts/d3/src/core/quantile.js +8 -0
  311. data/lib/picky-statistics/application/javascripts/d3/src/core/random.js +15 -0
  312. data/lib/picky-statistics/application/javascripts/d3/src/core/range.js +21 -0
  313. data/lib/picky-statistics/application/javascripts/d3/src/core/rebind.js +16 -0
  314. data/lib/picky-statistics/application/javascripts/d3/src/core/requote.js +5 -0
  315. data/lib/picky-statistics/application/javascripts/d3/src/core/rgb.js +287 -0
  316. data/lib/picky-statistics/application/javascripts/d3/src/core/round.js +5 -0
  317. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-append.js +15 -0
  318. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-attr.js +44 -0
  319. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-call.js +13 -0
  320. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-classed.js +61 -0
  321. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-data.js +110 -0
  322. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-each.js +9 -0
  323. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-empty.js +3 -0
  324. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-enter-select.js +24 -0
  325. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-enter.js +11 -0
  326. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-filter.js +26 -0
  327. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-html.js +6 -0
  328. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-insert.js +20 -0
  329. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-map.js +5 -0
  330. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-node.js +9 -0
  331. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-on.js +34 -0
  332. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-order.js +11 -0
  333. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-property.js +23 -0
  334. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-remove.js +9 -0
  335. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-root.js +18 -0
  336. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-select.js +30 -0
  337. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-selectAll.js +24 -0
  338. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-sort.js +12 -0
  339. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-style.js +26 -0
  340. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-text.js +6 -0
  341. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-transition.js +14 -0
  342. data/lib/picky-statistics/application/javascripts/d3/src/core/selection.js +25 -0
  343. data/lib/picky-statistics/application/javascripts/d3/src/core/split.js +21 -0
  344. data/lib/picky-statistics/application/javascripts/d3/src/core/sum.js +14 -0
  345. data/lib/picky-statistics/application/javascripts/d3/src/core/text.js +10 -0
  346. data/lib/picky-statistics/application/javascripts/d3/src/core/this.js +3 -0
  347. data/lib/picky-statistics/application/javascripts/d3/src/core/timer.js +104 -0
  348. data/lib/picky-statistics/application/javascripts/d3/src/core/transform.js +58 -0
  349. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-attr.js +23 -0
  350. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-delay.js +6 -0
  351. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-duration.js +6 -0
  352. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-each.js +9 -0
  353. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-remove.js +6 -0
  354. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-select.js +22 -0
  355. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-selectAll.js +22 -0
  356. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-style.js +14 -0
  357. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-text.js +7 -0
  358. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-transition.js +3 -0
  359. data/lib/picky-statistics/application/javascripts/d3/src/core/transition.js +125 -0
  360. data/lib/picky-statistics/application/javascripts/d3/src/core/transpose.js +3 -0
  361. data/lib/picky-statistics/application/javascripts/d3/src/core/uninterpolate.js +9 -0
  362. data/lib/picky-statistics/application/javascripts/d3/src/core/values.js +5 -0
  363. data/lib/picky-statistics/application/javascripts/d3/src/core/xhr.js +10 -0
  364. data/lib/picky-statistics/application/javascripts/d3/src/core/xml.js +10 -0
  365. data/lib/picky-statistics/application/javascripts/d3/src/core/zip.js +13 -0
  366. data/lib/picky-statistics/application/javascripts/d3/src/csv/csv.js +5 -0
  367. data/lib/picky-statistics/application/javascripts/d3/src/csv/format.js +13 -0
  368. data/lib/picky-statistics/application/javascripts/d3/src/csv/parse.js +73 -0
  369. data/lib/picky-statistics/application/javascripts/d3/src/end.js +1 -0
  370. data/lib/picky-statistics/application/javascripts/d3/src/externs.js +6 -0
  371. data/lib/picky-statistics/application/javascripts/d3/src/geo/albers.js +126 -0
  372. data/lib/picky-statistics/application/javascripts/d3/src/geo/azimuthal.js +80 -0
  373. data/lib/picky-statistics/application/javascripts/d3/src/geo/bonne.js +70 -0
  374. data/lib/picky-statistics/application/javascripts/d3/src/geo/bounds.js +83 -0
  375. data/lib/picky-statistics/application/javascripts/d3/src/geo/circle.js +146 -0
  376. data/lib/picky-statistics/application/javascripts/d3/src/geo/equirectangular.js +36 -0
  377. data/lib/picky-statistics/application/javascripts/d3/src/geo/geo.js +3 -0
  378. data/lib/picky-statistics/application/javascripts/d3/src/geo/greatArc.js +80 -0
  379. data/lib/picky-statistics/application/javascripts/d3/src/geo/greatCircle.js +1 -0
  380. data/lib/picky-statistics/application/javascripts/d3/src/geo/mercator.js +36 -0
  381. data/lib/picky-statistics/application/javascripts/d3/src/geo/path.js +271 -0
  382. data/lib/picky-statistics/application/javascripts/d3/src/geo/type.js +5 -0
  383. data/lib/picky-statistics/application/javascripts/d3/src/geom/contour.js +78 -0
  384. data/lib/picky-statistics/application/javascripts/d3/src/geom/delaunay.js +31 -0
  385. data/lib/picky-statistics/application/javascripts/d3/src/geom/geom.js +1 -0
  386. data/lib/picky-statistics/application/javascripts/d3/src/geom/hull.js +98 -0
  387. data/lib/picky-statistics/application/javascripts/d3/src/geom/polygon.js +88 -0
  388. data/lib/picky-statistics/application/javascripts/d3/src/geom/quadtree.js +129 -0
  389. data/lib/picky-statistics/application/javascripts/d3/src/geom/voronoi.js +409 -0
  390. data/lib/picky-statistics/application/javascripts/d3/src/layout/bundle.js +57 -0
  391. data/lib/picky-statistics/application/javascripts/d3/src/layout/chord.js +153 -0
  392. data/lib/picky-statistics/application/javascripts/d3/src/layout/cluster.js +78 -0
  393. data/lib/picky-statistics/application/javascripts/d3/src/layout/force.js +342 -0
  394. data/lib/picky-statistics/application/javascripts/d3/src/layout/hierarchy.js +120 -0
  395. data/lib/picky-statistics/application/javascripts/d3/src/layout/histogram.js +102 -0
  396. data/lib/picky-statistics/application/javascripts/d3/src/layout/layout.js +1 -0
  397. data/lib/picky-statistics/application/javascripts/d3/src/layout/pack.js +203 -0
  398. data/lib/picky-statistics/application/javascripts/d3/src/layout/partition.js +48 -0
  399. data/lib/picky-statistics/application/javascripts/d3/src/layout/pie.js +95 -0
  400. data/lib/picky-statistics/application/javascripts/d3/src/layout/stack.js +237 -0
  401. data/lib/picky-statistics/application/javascripts/d3/src/layout/tree.js +237 -0
  402. data/lib/picky-statistics/application/javascripts/d3/src/layout/treemap.js +217 -0
  403. data/lib/picky-statistics/application/javascripts/d3/src/package.js +18 -0
  404. data/lib/picky-statistics/application/javascripts/d3/src/scale/bilinear.js +7 -0
  405. data/lib/picky-statistics/application/javascripts/d3/src/scale/category.js +54 -0
  406. data/lib/picky-statistics/application/javascripts/d3/src/scale/linear.js +111 -0
  407. data/lib/picky-statistics/application/javascripts/d3/src/scale/log.js +85 -0
  408. data/lib/picky-statistics/application/javascripts/d3/src/scale/nice.js +24 -0
  409. data/lib/picky-statistics/application/javascripts/d3/src/scale/ordinal.js +81 -0
  410. data/lib/picky-statistics/application/javascripts/d3/src/scale/polylinear.js +16 -0
  411. data/lib/picky-statistics/application/javascripts/d3/src/scale/pow.js +54 -0
  412. data/lib/picky-statistics/application/javascripts/d3/src/scale/quantile.js +43 -0
  413. data/lib/picky-statistics/application/javascripts/d3/src/scale/quantize.js +36 -0
  414. data/lib/picky-statistics/application/javascripts/d3/src/scale/scale.js +10 -0
  415. data/lib/picky-statistics/application/javascripts/d3/src/scale/sqrt.js +3 -0
  416. data/lib/picky-statistics/application/javascripts/d3/src/start.js +1 -0
  417. data/lib/picky-statistics/application/javascripts/d3/src/svg/arc.js +95 -0
  418. data/lib/picky-statistics/application/javascripts/d3/src/svg/area-radial.js +10 -0
  419. data/lib/picky-statistics/application/javascripts/d3/src/svg/area.js +89 -0
  420. data/lib/picky-statistics/application/javascripts/d3/src/svg/axis.js +200 -0
  421. data/lib/picky-statistics/application/javascripts/d3/src/svg/brush.js +334 -0
  422. data/lib/picky-statistics/application/javascripts/d3/src/svg/chord.js +99 -0
  423. data/lib/picky-statistics/application/javascripts/d3/src/svg/diagonal-radial.js +22 -0
  424. data/lib/picky-statistics/application/javascripts/d3/src/svg/diagonal.js +38 -0
  425. data/lib/picky-statistics/application/javascripts/d3/src/svg/line-radial.js +22 -0
  426. data/lib/picky-statistics/application/javascripts/d3/src/svg/line.js +415 -0
  427. data/lib/picky-statistics/application/javascripts/d3/src/svg/mouse.js +29 -0
  428. data/lib/picky-statistics/application/javascripts/d3/src/svg/svg.js +1 -0
  429. data/lib/picky-statistics/application/javascripts/d3/src/svg/symbol.js +98 -0
  430. data/lib/picky-statistics/application/javascripts/d3/src/svg/touches.js +9 -0
  431. data/lib/picky-statistics/application/javascripts/d3/src/time/day.js +7 -0
  432. data/lib/picky-statistics/application/javascripts/d3/src/time/days.js +11 -0
  433. data/lib/picky-statistics/application/javascripts/d3/src/time/format-iso.js +13 -0
  434. data/lib/picky-statistics/application/javascripts/d3/src/time/format-utc.js +53 -0
  435. data/lib/picky-statistics/application/javascripts/d3/src/time/format.js +327 -0
  436. data/lib/picky-statistics/application/javascripts/d3/src/time/hour.js +8 -0
  437. data/lib/picky-statistics/application/javascripts/d3/src/time/hours.js +11 -0
  438. data/lib/picky-statistics/application/javascripts/d3/src/time/minute.js +5 -0
  439. data/lib/picky-statistics/application/javascripts/d3/src/time/minutes.js +11 -0
  440. data/lib/picky-statistics/application/javascripts/d3/src/time/month.js +7 -0
  441. data/lib/picky-statistics/application/javascripts/d3/src/time/months.js +11 -0
  442. data/lib/picky-statistics/application/javascripts/d3/src/time/range.js +16 -0
  443. data/lib/picky-statistics/application/javascripts/d3/src/time/scale-utc.js +36 -0
  444. data/lib/picky-statistics/application/javascripts/d3/src/time/scale.js +118 -0
  445. data/lib/picky-statistics/application/javascripts/d3/src/time/second.js +5 -0
  446. data/lib/picky-statistics/application/javascripts/d3/src/time/seconds.js +7 -0
  447. data/lib/picky-statistics/application/javascripts/d3/src/time/time.js +3 -0
  448. data/lib/picky-statistics/application/javascripts/d3/src/time/week.js +9 -0
  449. data/lib/picky-statistics/application/javascripts/d3/src/time/weeks.js +11 -0
  450. data/lib/picky-statistics/application/javascripts/d3/src/time/year.js +7 -0
  451. data/lib/picky-statistics/application/javascripts/d3/src/time/years.js +11 -0
  452. data/lib/picky-statistics/application/javascripts/d3/test/core/ascending-test.js +47 -0
  453. data/lib/picky-statistics/application/javascripts/d3/test/core/bisect-test.js +103 -0
  454. data/lib/picky-statistics/application/javascripts/d3/test/core/descending-test.js +47 -0
  455. data/lib/picky-statistics/application/javascripts/d3/test/core/dispatch-test.js +129 -0
  456. data/lib/picky-statistics/application/javascripts/d3/test/core/ease-test.js +129 -0
  457. data/lib/picky-statistics/application/javascripts/d3/test/core/entries-test.js +43 -0
  458. data/lib/picky-statistics/application/javascripts/d3/test/core/extent-test.js +51 -0
  459. data/lib/picky-statistics/application/javascripts/d3/test/core/first-test.js +42 -0
  460. data/lib/picky-statistics/application/javascripts/d3/test/core/format-test.js +239 -0
  461. data/lib/picky-statistics/application/javascripts/d3/test/core/formatPrefix-test.js +108 -0
  462. data/lib/picky-statistics/application/javascripts/d3/test/core/functor-test.js +29 -0
  463. data/lib/picky-statistics/application/javascripts/d3/test/core/hsl-test.js +82 -0
  464. data/lib/picky-statistics/application/javascripts/d3/test/core/html-test.js +37 -0
  465. data/lib/picky-statistics/application/javascripts/d3/test/core/interpolate-test.js +209 -0
  466. data/lib/picky-statistics/application/javascripts/d3/test/core/json-test.js +37 -0
  467. data/lib/picky-statistics/application/javascripts/d3/test/core/keys-test.js +31 -0
  468. data/lib/picky-statistics/application/javascripts/d3/test/core/last-test.js +42 -0
  469. data/lib/picky-statistics/application/javascripts/d3/test/core/max-test.js +51 -0
  470. data/lib/picky-statistics/application/javascripts/d3/test/core/mean-test.js +43 -0
  471. data/lib/picky-statistics/application/javascripts/d3/test/core/median-test.js +43 -0
  472. data/lib/picky-statistics/application/javascripts/d3/test/core/merge-test.js +27 -0
  473. data/lib/picky-statistics/application/javascripts/d3/test/core/min-test.js +50 -0
  474. data/lib/picky-statistics/application/javascripts/d3/test/core/nest-test.js +236 -0
  475. data/lib/picky-statistics/application/javascripts/d3/test/core/ns-test.js +58 -0
  476. data/lib/picky-statistics/application/javascripts/d3/test/core/permute-test.js +53 -0
  477. data/lib/picky-statistics/application/javascripts/d3/test/core/quantile-test.js +50 -0
  478. data/lib/picky-statistics/application/javascripts/d3/test/core/range-test.js +93 -0
  479. data/lib/picky-statistics/application/javascripts/d3/test/core/rebind-test.js +52 -0
  480. data/lib/picky-statistics/application/javascripts/d3/test/core/requote-test.js +53 -0
  481. data/lib/picky-statistics/application/javascripts/d3/test/core/rgb-test.js +89 -0
  482. data/lib/picky-statistics/application/javascripts/d3/test/core/round-test.js +70 -0
  483. data/lib/picky-statistics/application/javascripts/d3/test/core/select-test.js +42 -0
  484. data/lib/picky-statistics/application/javascripts/d3/test/core/selectAll-test.js +46 -0
  485. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-append-test.js +123 -0
  486. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-attr-test.js +153 -0
  487. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-call-test.js +71 -0
  488. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-classed-test.js +219 -0
  489. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-data-test.js +168 -0
  490. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-each-test.js +83 -0
  491. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-empty-test.js +51 -0
  492. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-filter-test.js +70 -0
  493. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-html-test.js +121 -0
  494. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-insert-test.js +136 -0
  495. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-map-test.js +47 -0
  496. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-node-test.js +50 -0
  497. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-on-test.js +95 -0
  498. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-order-test.js +32 -0
  499. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-property-test.js +91 -0
  500. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-remove-test.js +39 -0
  501. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-select-test.js +125 -0
  502. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-selectAll-test.js +128 -0
  503. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-sort-test.js +59 -0
  504. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-style-test.js +100 -0
  505. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-test.js +35 -0
  506. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-text-test.js +109 -0
  507. data/lib/picky-statistics/application/javascripts/d3/test/core/split-test.js +34 -0
  508. data/lib/picky-statistics/application/javascripts/d3/test/core/sum-test.js +47 -0
  509. data/lib/picky-statistics/application/javascripts/d3/test/core/text-test.js +48 -0
  510. data/lib/picky-statistics/application/javascripts/d3/test/core/timer-test.js +62 -0
  511. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-attr.js +54 -0
  512. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-attrTween.js +67 -0
  513. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-call.js +33 -0
  514. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-delay.js +41 -0
  515. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-duration.js +41 -0
  516. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-each.js +166 -0
  517. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-id.js +20 -0
  518. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-remove.js +46 -0
  519. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-select.js +63 -0
  520. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-selectAll.js +59 -0
  521. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-style.js +49 -0
  522. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-styleTween.js +73 -0
  523. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-text.js +30 -0
  524. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-time.js +36 -0
  525. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-transition.js +60 -0
  526. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-tween.js +71 -0
  527. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test.js +66 -0
  528. data/lib/picky-statistics/application/javascripts/d3/test/core/transpose-test.js +32 -0
  529. data/lib/picky-statistics/application/javascripts/d3/test/core/values-test.js +35 -0
  530. data/lib/picky-statistics/application/javascripts/d3/test/core/version-test.js +18 -0
  531. data/lib/picky-statistics/application/javascripts/d3/test/core/xhr-test.js +56 -0
  532. data/lib/picky-statistics/application/javascripts/d3/test/core/xml-test.js +48 -0
  533. data/lib/picky-statistics/application/javascripts/d3/test/core/zip-test.js +32 -0
  534. data/lib/picky-statistics/application/javascripts/d3/test/csv/csv-test.js +38 -0
  535. data/lib/picky-statistics/application/javascripts/d3/test/csv/format-test.js +39 -0
  536. data/lib/picky-statistics/application/javascripts/d3/test/csv/parse-test.js +101 -0
  537. data/lib/picky-statistics/application/javascripts/d3/test/env-assert.js +96 -0
  538. data/lib/picky-statistics/application/javascripts/d3/test/env-fragment.js +8 -0
  539. data/lib/picky-statistics/application/javascripts/d3/test/env-xhr.js +56 -0
  540. data/lib/picky-statistics/application/javascripts/d3/test/env.js +13 -0
  541. data/lib/picky-statistics/application/javascripts/d3/test/geo/albers-test.js +57 -0
  542. data/lib/picky-statistics/application/javascripts/d3/test/geo/azimuthal-test.js +261 -0
  543. data/lib/picky-statistics/application/javascripts/d3/test/geo/bonne-test.js +116 -0
  544. data/lib/picky-statistics/application/javascripts/d3/test/geo/equirectangular-test.js +50 -0
  545. data/lib/picky-statistics/application/javascripts/d3/test/geo/greatArc-test.js +41 -0
  546. data/lib/picky-statistics/application/javascripts/d3/test/geo/mercator-test.js +57 -0
  547. data/lib/picky-statistics/application/javascripts/d3/test/geo/path-test.js +25 -0
  548. data/lib/picky-statistics/application/javascripts/d3/test/geom/polygon-test.js +57 -0
  549. data/lib/picky-statistics/application/javascripts/d3/test/layout/cluster-test.js +39 -0
  550. data/lib/picky-statistics/application/javascripts/d3/test/layout/hierarchy-test.js +30 -0
  551. data/lib/picky-statistics/application/javascripts/d3/test/layout/histogram-test.js +91 -0
  552. data/lib/picky-statistics/application/javascripts/d3/test/layout/pack-test.js +67 -0
  553. data/lib/picky-statistics/application/javascripts/d3/test/layout/partition-test.js +50 -0
  554. data/lib/picky-statistics/application/javascripts/d3/test/layout/tree-test.js +41 -0
  555. data/lib/picky-statistics/application/javascripts/d3/test/layout/treemap-test.js +190 -0
  556. data/lib/picky-statistics/application/javascripts/d3/test/scale/category-test.js +74 -0
  557. data/lib/picky-statistics/application/javascripts/d3/test/scale/linear-test.js +243 -0
  558. data/lib/picky-statistics/application/javascripts/d3/test/scale/log-test.js +266 -0
  559. data/lib/picky-statistics/application/javascripts/d3/test/scale/ordinal-test.js +207 -0
  560. data/lib/picky-statistics/application/javascripts/d3/test/scale/pow-test.js +263 -0
  561. data/lib/picky-statistics/application/javascripts/d3/test/scale/quantile-test.js +64 -0
  562. data/lib/picky-statistics/application/javascripts/d3/test/scale/quantize-test.js +69 -0
  563. data/lib/picky-statistics/application/javascripts/d3/test/scale/sqrt-test.js +256 -0
  564. data/lib/picky-statistics/application/javascripts/d3/test/svg/arc-test.js +147 -0
  565. data/lib/picky-statistics/application/javascripts/d3/test/svg/area-radial-test.js +200 -0
  566. data/lib/picky-statistics/application/javascripts/d3/test/svg/area-test.js +192 -0
  567. data/lib/picky-statistics/application/javascripts/d3/test/svg/axis-test.js +353 -0
  568. data/lib/picky-statistics/application/javascripts/d3/test/svg/line-radial-test.js +125 -0
  569. data/lib/picky-statistics/application/javascripts/d3/test/svg/line-test.js +189 -0
  570. data/lib/picky-statistics/application/javascripts/d3/test/svg/symbol-test.js +96 -0
  571. data/lib/picky-statistics/application/javascripts/d3/test/time/day-test.js +65 -0
  572. data/lib/picky-statistics/application/javascripts/d3/test/time/days-test.js +105 -0
  573. data/lib/picky-statistics/application/javascripts/d3/test/time/format-test.js +467 -0
  574. data/lib/picky-statistics/application/javascripts/d3/test/time/hour-test.js +103 -0
  575. data/lib/picky-statistics/application/javascripts/d3/test/time/hours-test.js +135 -0
  576. data/lib/picky-statistics/application/javascripts/d3/test/time/minute-test.js +43 -0
  577. data/lib/picky-statistics/application/javascripts/d3/test/time/minutes-test.js +101 -0
  578. data/lib/picky-statistics/application/javascripts/d3/test/time/month-test.js +53 -0
  579. data/lib/picky-statistics/application/javascripts/d3/test/time/months-test.js +105 -0
  580. data/lib/picky-statistics/application/javascripts/d3/test/time/scale-test.js +525 -0
  581. data/lib/picky-statistics/application/javascripts/d3/test/time/second-test.js +41 -0
  582. data/lib/picky-statistics/application/javascripts/d3/test/time/seconds-test.js +101 -0
  583. data/lib/picky-statistics/application/javascripts/d3/test/time/week-test.js +59 -0
  584. data/lib/picky-statistics/application/javascripts/d3/test/time/weeks-test.js +105 -0
  585. data/lib/picky-statistics/application/javascripts/d3/test/time/year-test.js +41 -0
  586. data/lib/picky-statistics/application/javascripts/d3/test/time/years-test.js +73 -0
  587. data/lib/picky-statistics/application/javascripts/full_live.js +60 -0
  588. data/lib/picky-statistics/application/javascripts/graph.js +83 -0
  589. data/lib/picky-statistics/application/javascripts/results.js +86 -0
  590. data/lib/picky-statistics/application/javascripts/rickshaw.js +1 -0
  591. data/lib/picky-statistics/application/javascripts/statistics.js +30 -55
  592. data/lib/picky-statistics/application/stylesheets/statistics.css +83 -27
  593. data/lib/picky-statistics/application/views/index.haml +29 -39
  594. data/lib/picky-statistics/statistics/logfile_reader.rb +43 -32
  595. data/spec/lib/picky-statistics/statistics/logfile_reader_spec.rb +28 -25
  596. metadata +596 -6
@@ -0,0 +1,1891 @@
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
+ })();