picky-statistics 4.0.0pre3 → 4.0.0pre5

Sign up to get free protection for your applications and to get access to all the features.
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 @@
1
+ (function(){function a(a){return[0,a.length-1]}function b(a){return[d3.quantile(a,.25),d3.quantile(a,.5),d3.quantile(a,.75)]}function c(a){return a.ranges}function d(a){return a.markers}function e(a){return a.measures}function f(a){return function(b){return"translate("+a(b)+",0)"}}function g(a){var b=a(0);return function(c){return Math.abs(a(c)-b)}}function j(a){return a[0]}function k(a){return a[1]}function l(a,b){var c=b.length-1;return b=b.slice().sort(d3.ascending),d3.range(a).map(function(d){return b[~~(d*c/a)]})}function m(a){return a.x}function n(a){return a.y}d3.chart={},d3.chart.box=function(){function k(a){a.each(function(a,b){a=a.map(g).sort(d3.ascending);var k=d3.select(this),l=a.length,m=a[0],n=a[l-1],o=a.quartiles=i(a),p=h&&h.call(this,a,b),q=p&&p.map(function(b){return a[b]}),r=p?d3.range(0,p[0]).concat(d3.range(p[1]+1,l)):d3.range(l),s=d3.scale.linear().domain(f&&f.call(this,a,b)||[m,n]).range([d,0]),t=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(s.range());this.__chart__=s;var u=k.selectAll("line.center").data(q?[q]:[]);u.enter().insert("svg:line","rect").attr("class","center").attr("x1",c/2).attr("y1",function(a){return t(a[0])}).attr("x2",c/2).attr("y2",function(a){return t(a[1])}).style("opacity",1e-6).transition().duration(e).style("opacity",1).attr("y1",function(a){return s(a[0])}).attr("y2",function(a){return s(a[1])}),u.transition().duration(e).style("opacity",1).attr("y1",function(a){return s(a[0])}).attr("y2",function(a){return s(a[1])}),u.exit().transition().duration(e).style("opacity",1e-6).attr("y1",function(a){return s(a[0])}).attr("y2",function(a){return s(a[1])}).remove();var v=k.selectAll("rect.box").data([o]);v.enter().append("svg:rect").attr("class","box").attr("x",0).attr("y",function(a){return t(a[2])}).attr("width",c).attr("height",function(a){return t(a[0])-t(a[2])}).transition().duration(e).attr("y",function(a){return s(a[2])}).attr("height",function(a){return s(a[0])-s(a[2])}),v.transition().duration(e).attr("y",function(a){return s(a[2])}).attr("height",function(a){return s(a[0])-s(a[2])});var w=k.selectAll("line.median").data([o[1]]);w.enter().append("svg:line").attr("class","median").attr("x1",0).attr("y1",t).attr("x2",c).attr("y2",t).transition().duration(e).attr("y1",s).attr("y2",s),w.transition().duration(e).attr("y1",s).attr("y2",s);var x=k.selectAll("line.whisker").data(q||[]);x.enter().insert("svg:line","circle, text").attr("class","whisker").attr("x1",0).attr("y1",t).attr("x2",c).attr("y2",t).style("opacity",1e-6).transition().duration(e).attr("y1",s).attr("y2",s).style("opacity",1),x.transition().duration(e).attr("y1",s).attr("y2",s).style("opacity",1),x.exit().transition().duration(e).attr("y1",s).attr("y2",s).style("opacity",1e-6).remove();var y=k.selectAll("circle.outlier").data(r,Number);y.enter().insert("svg:circle","text").attr("class","outlier").attr("r",5).attr("cx",c/2).attr("cy",function(b){return t(a[b])}).style("opacity",1e-6).transition().duration(e).attr("cy",function(b){return s(a[b])}).style("opacity",1),y.transition().duration(e).attr("cy",function(b){return s(a[b])}).style("opacity",1),y.exit().transition().duration(e).attr("cy",function(b){return s(a[b])}).style("opacity",1e-6).remove();var z=j||s.tickFormat(8),A=k.selectAll("text.box").data(o);A.enter().append("svg:text").attr("class","box").attr("dy",".3em").attr("dx",function(a,b){return b&1?6:-6}).attr("x",function(a,b){return b&1?c:0}).attr("y",t).attr("text-anchor",function(a,b){return b&1?"start":"end"}).text(z).transition().duration(e).attr("y",s),A.transition().duration(e).text(z).attr("y",s);var B=k.selectAll("text.whisker").data(q||[]);B.enter().append("svg:text").attr("class","whisker").attr("dy",".3em").attr("dx",6).attr("x",c).attr("y",t).text(z).style("opacity",1e-6).transition().duration(e).attr("y",s).style("opacity",1),B.transition().duration(e).text(z).attr("y",s).style("opacity",1),B.exit().transition().duration(e).attr("y",s).style("opacity",1e-6).remove()}),d3.timer.flush()}var c=1,d=1,e=0,f=null,g=Number,h=a,i=b,j=null;return k.width=function(a){return arguments.length?(c=a,k):c},k.height=function(a){return arguments.length?(d=a,k):d},k.tickFormat=function(a){return arguments.length?(j=a,k):j},k.duration=function(a){return arguments.length?(e=a,k):e},k.domain=function(a){return arguments.length?(f=a==null?a:d3.functor(a),k):f},k.value=function(a){return arguments.length?(g=a,k):g},k.whiskers=function(a){return arguments.length?(h=a,k):h},k.quartiles=function(a){return arguments.length?(i=a,k):i},k},d3.chart.bullet=function(){function o(a){a.each(function(a,c){var d=i.call(this,a,c).slice().sort(d3.descending),e=j.call(this,a,c).slice().sort(d3.descending),o=k.call(this,a,c).slice().sort(d3.descending),p=d3.select(this),q=d3.scale.linear().domain([0,Math.max(d[0],e[0],o[0])]).range(b?[l,0]:[0,l]),r=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(q.range());this.__chart__=q;var s=g(r),t=g(q),u=p.selectAll("rect.range").data(d);u.enter().append("svg:rect").attr("class",function(a,b){return"range s"+b}).attr("width",s).attr("height",m).attr("x",b?r:0).transition().duration(h).attr("width",t).attr("x",b?q:0),u.transition().duration(h).attr("x",b?q:0).attr("width",t).attr("height",m);var v=p.selectAll("rect.measure").data(o);v.enter().append("svg:rect").attr("class",function(a,b){return"measure s"+b}).attr("width",s).attr("height",m/3).attr("x",b?r:0).attr("y",m/3).transition().duration(h).attr("width",t).attr("x",b?q:0),v.transition().duration(h).attr("width",t).attr("height",m/3).attr("x",b?q:0).attr("y",m/3);var w=p.selectAll("line.marker").data(e);w.enter().append("svg:line").attr("class","marker").attr("x1",r).attr("x2",r).attr("y1",m/6).attr("y2",m*5/6).transition().duration(h).attr("x1",q).attr("x2",q),w.transition().duration(h).attr("x1",q).attr("x2",q).attr("y1",m/6).attr("y2",m*5/6);var x=n||q.tickFormat(8),y=p.selectAll("g.tick").data(q.ticks(8),function(a){return this.textContent||x(a)}),z=y.enter().append("svg:g").attr("class","tick").attr("transform",f(r)).style("opacity",1e-6);z.append("svg:line").attr("y1",m).attr("y2",m*7/6),z.append("svg:text").attr("text-anchor","middle").attr("dy","1em").attr("y",m*7/6).text(x),z.transition().duration(h).attr("transform",f(q)).style("opacity",1);var A=y.transition().duration(h).attr("transform",f(q)).style("opacity",1);A.select("line").attr("y1",m).attr("y2",m*7/6),A.select("text").attr("y",m*7/6),y.exit().transition().duration(h).attr("transform",f(q)).style("opacity",1e-6).remove()}),d3.timer.flush()}var a="left",b=!1,h=0,i=c,j=d,k=e,l=380,m=30,n=null;return o.orient=function(c){return arguments.length?(a=c,b=a=="right"||a=="bottom",o):a},o.ranges=function(a){return arguments.length?(i=a,o):i},o.markers=function(a){return arguments.length?(j=a,o):j},o.measures=function(a){return arguments.length?(k=a,o):k},o.width=function(a){return arguments.length?(l=a,o):l},o.height=function(a){return arguments.length?(m=a,o):m},o.tickFormat=function(a){return arguments.length?(n=a,o):n},o.duration=function(a){return arguments.length?(h=a,o):h},o},d3.chart.horizon=function(){function n(j){j.each(function(j,k){var n=d3.select(this),o=2*a+1,p=Infinity,q=-Infinity,r=-Infinity,s,t,u,v=j.map(function(a,b){var c=d.call(this,a,b),f=e.call(this,a,b);return c<p&&(p=c),c>q&&(q=c),-f>r&&(r=-f),f>r&&(r=f),[c,f]}),z=d3.scale.linear().domain([p,q]).range([0,f]),A=d3.scale.linear().domain([0,r]).range([0,g*a]);this.__chart__?(s=this.__chart__.x,t=this.__chart__.y,u=this.__chart__.id):(s=d3.scale.linear().domain([0,Infinity]).range(z.range()),t=d3.scale.linear().domain([0,Infinity]).range(A.range()),u=++i);var B=n.selectAll("defs").data([v]),C=B.enter().append("svg:defs");C.append("svg:clipPath").attr("id","d3_chart_horizon_clip"+u).append("svg:rect").attr("width",f).attr("height",g),B.select("rect").transition().duration(l).attr("width",f).attr("height",g),C.append("svg:path").attr("id","d3_chart_horizon_path"+u).attr("d",h.interpolate(c).x(function(a){return s(a[0])}).y0(g*a).y1(function(b){return g*a-t(b[1])})).transition().duration(l).attr("d",h.x(function(a){return z(a[0])}).y1(function(b){return g*a-A(b[1])})),B.select("path").transition().duration(l).attr("d",h),n.selectAll("g").data([null]).enter().append("svg:g").attr("clip-path","url(#d3_chart_horizon_clip"+u+")");var D=b=="offset"?function(b){return"translate(0,"+(b+(b<0)-a)*g+")"}:function(b){return(b<0?"scale(1,-1)":"")+"translate(0,"+(b-a)*g+")"},E=n.select("g").selectAll("use").data(d3.range(-1,-a-1,-1).concat(d3.range(1,a+1)),Number);E.enter().append("svg:use").attr("xlink:href","#d3_chart_horizon_path"+u).attr("transform",function(a){return D(a+(a>0?1:-1))}).style("fill",m).transition().duration(l).attr("transform",D),E.transition().duration(l).attr("transform",D).style("fill",m),E.exit().transition().duration(l).attr("transform",D).remove(),this.__chart__={x:z,y:A,id:u}}),d3.timer.flush()}var a=1,b="offset",c="linear",d=j,e=k,f=960,g=40,l=0,m=d3.scale.linear().domain([-1,0,1]).range(["#d62728","#fff","#1f77b4"]);return n.duration=function(a){return arguments.length?(l=+a,n):l},n.bands=function(b){return arguments.length?(a=+b,m.domain([-a,0,a]),n):a},n.mode=function(a){return arguments.length?(b=a+"",n):b},n.colors=function(a){return arguments.length?(m.range(a),n):m.range()},n.interpolate=function(a){return arguments.length?(c=a+"",n):c},n.x=function(a){return arguments.length?(d=a,n):d},n.y=function(a){return arguments.length?(e=a,n):e},n.width=function(a){return arguments.length?(f=+a,n):f},n.height=function(a){return arguments.length?(g=+a,n):g},n};var h=d3.svg.area(),i=0;d3.chart.qq=function(){function i(i){i.each(function(i,j){var k=d3.select(this),m=l(f,g.call(this,i,j)),n=l(f,h.call(this,i,j)),o=d&&d.call(this,i,j)||[d3.min(m),d3.max(m)],p=d&&d.call(this,i,j)||[d3.min(n),d3.max(n)],q,r,s=d3.scale.linear().domain(o).range([0,a]),t=d3.scale.linear().domain(p).range([b,0]);this.__chart__?(q=this.__chart__.x,r=this.__chart__.y):(q=d3.scale.linear().domain([0,Infinity]).range(s.range()),r=d3.scale.linear().domain([0,Infinity]).range(t.range())),this.__chart__={x:s,y:t};var u=k.selectAll("line.diagonal").data([null]);u.enter().append("svg:line").attr("class","diagonal").attr("x1",s(p[0])).attr("y1",t(o[0])).attr("x2",s(p[1])).attr("y2",t(o[1])),u.transition().duration(c).attr("x1",s(p[0])).attr("y1",t(o[0])).attr("x2",s(p[1])).attr("y2",t(o[1]));var v=k.selectAll("circle").data(d3.range(f).map(function(a){return{x:m[a],y:n[a]}}));v.enter().append("svg:circle").attr("class","quantile").attr("r",4.5).attr("cx",function(a){return q(a.x)}).attr("cy",function(a){return r(a.y)}).style("opacity",1e-6).transition().duration(c).attr("cx",function(a){return s(a.x)}).attr("cy",function(a){return t(a.y)}).style("opacity",1),v.transition().duration(c).attr("cx",function(a){return s(a.x)}).attr("cy",function(a){return t(a.y)}).style("opacity",1),v.exit().transition().duration(c).attr("cx",function(a){return s(a.x)}).attr("cy",function(a){return t(a.y)}).style("opacity",1e-6).remove();var w=e||s.tickFormat(4),z=e||t.tickFormat(4),A=function(a){return"translate("+s(a)+","+b+")"},B=function(a){return"translate(0,"+t(a)+")"},C=k.selectAll("g.x.tick").data(s.ticks(4),function(a){return this.textContent||w(a)}),D=C.enter().append("svg:g").attr("class","x tick").attr("transform",function(a){return"translate("+q(a)+","+b+")"}).style("opacity",1e-6);D.append("svg:line").attr("y1",0).attr("y2",-6),D.append("svg:text").attr("text-anchor","middle").attr("dy","1em").text(w),D.transition().duration(c).attr("transform",A).style("opacity",1),C.transition().duration(c).attr("transform",A).style("opacity",1),C.exit().transition().duration(c).attr("transform",A).style("opacity",1e-6).remove();var E=k.selectAll("g.y.tick").data(t.ticks(4),function(a){return this.textContent||z(a)}),F=E.enter().append("svg:g").attr("class","y tick").attr("transform",function(a){return"translate(0,"+r(a)+")"}).style("opacity",1e-6);F.append("svg:line").attr("x1",0).attr("x2",6),F.append("svg:text").attr("text-anchor","end").attr("dx","-.5em").attr("dy",".3em").text(z),F.transition().duration(c).attr("transform",B).style("opacity",1),E.transition().duration(c).attr("transform",B).style("opacity",1),E.exit().transition().duration(c).attr("transform",B).style("opacity",1e-6).remove()})}var a=1,b=1,c=0,d=null,e=null,f=100,g=m,h=n;return i.width=function(b){return arguments.length?(a=b,i):a},i.height=function(a){return arguments.length?(b=a,i):b},i.duration=function(a){return arguments.length?(c=a,i):c},i.domain=function(a){return arguments.length?(d=a==null?a:d3.functor(a),i):d},i.count=function(a){return arguments.length?(f=a,i):f},i.x=function(a){return arguments.length?(g=a,i):g},i.y=function(a){return arguments.length?(h=a,i):h},i.tickFormat=function(a){return arguments.length?(e=a,i):e},i}})();
@@ -0,0 +1,92 @@
1
+ (function(){d3.csv = function(url, callback) {
2
+ d3.text(url, "text/csv", function(text) {
3
+ callback(text && d3.csv.parse(text));
4
+ });
5
+ };
6
+ d3.csv.parse = function(text) {
7
+ var header;
8
+ return d3.csv.parseRows(text, function(row, i) {
9
+ if (i) {
10
+ var o = {}, j = -1, m = header.length;
11
+ while (++j < m) o[header[j]] = row[j];
12
+ return o;
13
+ } else {
14
+ header = row;
15
+ return null;
16
+ }
17
+ });
18
+ };
19
+
20
+ d3.csv.parseRows = function(text, f) {
21
+ var EOL = {}, // sentinel value for end-of-line
22
+ EOF = {}, // sentinel value for end-of-file
23
+ rows = [], // output rows
24
+ re = /\r\n|[,\r\n]/g, // field separator regex
25
+ n = 0, // the current line number
26
+ t, // the current token
27
+ eol; // is the current token followed by EOL?
28
+
29
+ re.lastIndex = 0; // work-around bug in FF 3.6
30
+
31
+ /** @private Returns the next token. */
32
+ function token() {
33
+ if (re.lastIndex >= text.length) return EOF; // special case: end of file
34
+ if (eol) { eol = false; return EOL; } // special case: end of line
35
+
36
+ // special case: quotes
37
+ var j = re.lastIndex;
38
+ if (text.charCodeAt(j) === 34) {
39
+ var i = j;
40
+ while (i++ < text.length) {
41
+ if (text.charCodeAt(i) === 34) {
42
+ if (text.charCodeAt(i + 1) !== 34) break;
43
+ i++;
44
+ }
45
+ }
46
+ re.lastIndex = i + 2;
47
+ var c = text.charCodeAt(i + 1);
48
+ if (c === 13) {
49
+ eol = true;
50
+ if (text.charCodeAt(i + 2) === 10) re.lastIndex++;
51
+ } else if (c === 10) {
52
+ eol = true;
53
+ }
54
+ return text.substring(j + 1, i).replace(/""/g, "\"");
55
+ }
56
+
57
+ // common case
58
+ var m = re.exec(text);
59
+ if (m) {
60
+ eol = m[0].charCodeAt(0) !== 44;
61
+ return text.substring(j, m.index);
62
+ }
63
+ re.lastIndex = text.length;
64
+ return text.substring(j);
65
+ }
66
+
67
+ while ((t = token()) !== EOF) {
68
+ var a = [];
69
+ while ((t !== EOL) && (t !== EOF)) {
70
+ a.push(t);
71
+ t = token();
72
+ }
73
+ if (f && !(a = f(a, n++))) continue;
74
+ rows.push(a);
75
+ }
76
+
77
+ return rows;
78
+ };
79
+ d3.csv.format = function(rows) {
80
+ return rows.map(d3_csv_formatRow).join("\n");
81
+ };
82
+
83
+ function d3_csv_formatRow(row) {
84
+ return row.map(d3_csv_formatValue).join(",");
85
+ }
86
+
87
+ function d3_csv_formatValue(text) {
88
+ return /[",\n]/.test(text)
89
+ ? "\"" + text.replace(/\"/g, "\"\"") + "\""
90
+ : text;
91
+ }
92
+ })();
@@ -0,0 +1 @@
1
+ (function(){function a(a){return a.map(b).join(",")}function b(a){return/[",\n]/.test(a)?'"'+a.replace(/\"/g,'""')+'"':a}d3.csv=function(a,b){d3.text(a,"text/csv",function(a){b(a&&d3.csv.parse(a))})},d3.csv.parse=function(a){var b;return d3.csv.parseRows(a,function(a,c){if(c){var d={},e=-1,f=b.length;while(++e<f)d[b[e]]=a[e];return d}return b=a,null})},d3.csv.parseRows=function(a,b){function j(){if(f.lastIndex>=a.length)return d;if(i)return i=!1,c;var b=f.lastIndex;if(a.charCodeAt(b)===34){var e=b;while(e++<a.length)if(a.charCodeAt(e)===34){if(a.charCodeAt(e+1)!==34)break;e++}f.lastIndex=e+2;var g=a.charCodeAt(e+1);return g===13?(i=!0,a.charCodeAt(e+2)===10&&f.lastIndex++):g===10&&(i=!0),a.substring(b+1,e).replace(/""/g,'"')}var h=f.exec(a);return h?(i=h[0].charCodeAt(0)!==44,a.substring(b,h.index)):(f.lastIndex=a.length,a.substring(b))}var c={},d={},e=[],f=/\r\n|[,\r\n]/g,g=0,h,i;f.lastIndex=0;while((h=j())!==d){var k=[];while(h!==c&&h!==d)k.push(h),h=j();if(b&&!(k=b(k,g++)))continue;e.push(k)}return e},d3.csv.format=function(b){return b.map(a).join("\n")}})();
@@ -0,0 +1,938 @@
1
+ (function(){d3.geo = {};
2
+
3
+ var d3_geo_radians = Math.PI / 180;
4
+ // TODO clip input coordinates on opposite hemisphere
5
+ d3.geo.azimuthal = function() {
6
+ var mode = "orthographic", // or stereographic, gnomonic, equidistant or equalarea
7
+ origin,
8
+ scale = 200,
9
+ translate = [480, 250],
10
+ x0,
11
+ y0,
12
+ cy0,
13
+ sy0;
14
+
15
+ function azimuthal(coordinates) {
16
+ var x1 = coordinates[0] * d3_geo_radians - x0,
17
+ y1 = coordinates[1] * d3_geo_radians,
18
+ cx1 = Math.cos(x1),
19
+ sx1 = Math.sin(x1),
20
+ cy1 = Math.cos(y1),
21
+ sy1 = Math.sin(y1),
22
+ cc = mode !== "orthographic" ? sy0 * sy1 + cy0 * cy1 * cx1 : null,
23
+ c,
24
+ k = mode === "stereographic" ? 1 / (1 + cc)
25
+ : mode === "gnomonic" ? 1 / cc
26
+ : mode === "equidistant" ? (c = Math.acos(cc), c ? c / Math.sin(c) : 0)
27
+ : mode === "equalarea" ? Math.sqrt(2 / (1 + cc))
28
+ : 1,
29
+ x = k * cy1 * sx1,
30
+ y = k * (sy0 * cy1 * cx1 - cy0 * sy1);
31
+ return [
32
+ scale * x + translate[0],
33
+ scale * y + translate[1]
34
+ ];
35
+ }
36
+
37
+ azimuthal.invert = function(coordinates) {
38
+ var x = (coordinates[0] - translate[0]) / scale,
39
+ y = (coordinates[1] - translate[1]) / scale,
40
+ p = Math.sqrt(x * x + y * y),
41
+ c = mode === "stereographic" ? 2 * Math.atan(p)
42
+ : mode === "gnomonic" ? Math.atan(p)
43
+ : mode === "equidistant" ? p
44
+ : mode === "equalarea" ? 2 * Math.asin(.5 * p)
45
+ : Math.asin(p),
46
+ sc = Math.sin(c),
47
+ cc = Math.cos(c);
48
+ return [
49
+ (x0 + Math.atan2(x * sc, p * cy0 * cc + y * sy0 * sc)) / d3_geo_radians,
50
+ Math.asin(cc * sy0 - (p ? (y * sc * cy0) / p : 0)) / d3_geo_radians
51
+ ];
52
+ };
53
+
54
+ azimuthal.mode = function(x) {
55
+ if (!arguments.length) return mode;
56
+ mode = x + "";
57
+ return azimuthal;
58
+ };
59
+
60
+ azimuthal.origin = function(x) {
61
+ if (!arguments.length) return origin;
62
+ origin = x;
63
+ x0 = origin[0] * d3_geo_radians;
64
+ y0 = origin[1] * d3_geo_radians;
65
+ cy0 = Math.cos(y0);
66
+ sy0 = Math.sin(y0);
67
+ return azimuthal;
68
+ };
69
+
70
+ azimuthal.scale = function(x) {
71
+ if (!arguments.length) return scale;
72
+ scale = +x;
73
+ return azimuthal;
74
+ };
75
+
76
+ azimuthal.translate = function(x) {
77
+ if (!arguments.length) return translate;
78
+ translate = [+x[0], +x[1]];
79
+ return azimuthal;
80
+ };
81
+
82
+ return azimuthal.origin([0, 0]);
83
+ };
84
+ // Derived from Tom Carden's Albers implementation for Protovis.
85
+ // http://gist.github.com/476238
86
+ // http://mathworld.wolfram.com/AlbersEqual-AreaConicProjection.html
87
+
88
+ d3.geo.albers = function() {
89
+ var origin = [-98, 38],
90
+ parallels = [29.5, 45.5],
91
+ scale = 1000,
92
+ translate = [480, 250],
93
+ lng0, // d3_geo_radians * origin[0]
94
+ n,
95
+ C,
96
+ p0;
97
+
98
+ function albers(coordinates) {
99
+ var t = n * (d3_geo_radians * coordinates[0] - lng0),
100
+ p = Math.sqrt(C - 2 * n * Math.sin(d3_geo_radians * coordinates[1])) / n;
101
+ return [
102
+ scale * p * Math.sin(t) + translate[0],
103
+ scale * (p * Math.cos(t) - p0) + translate[1]
104
+ ];
105
+ }
106
+
107
+ albers.invert = function(coordinates) {
108
+ var x = (coordinates[0] - translate[0]) / scale,
109
+ y = (coordinates[1] - translate[1]) / scale,
110
+ p0y = p0 + y,
111
+ t = Math.atan2(x, p0y),
112
+ p = Math.sqrt(x * x + p0y * p0y);
113
+ return [
114
+ (lng0 + t / n) / d3_geo_radians,
115
+ Math.asin((C - p * p * n * n) / (2 * n)) / d3_geo_radians
116
+ ];
117
+ };
118
+
119
+ function reload() {
120
+ var phi1 = d3_geo_radians * parallels[0],
121
+ phi2 = d3_geo_radians * parallels[1],
122
+ lat0 = d3_geo_radians * origin[1],
123
+ s = Math.sin(phi1),
124
+ c = Math.cos(phi1);
125
+ lng0 = d3_geo_radians * origin[0];
126
+ n = .5 * (s + Math.sin(phi2));
127
+ C = c * c + 2 * n * s;
128
+ p0 = Math.sqrt(C - 2 * n * Math.sin(lat0)) / n;
129
+ return albers;
130
+ }
131
+
132
+ albers.origin = function(x) {
133
+ if (!arguments.length) return origin;
134
+ origin = [+x[0], +x[1]];
135
+ return reload();
136
+ };
137
+
138
+ albers.parallels = function(x) {
139
+ if (!arguments.length) return parallels;
140
+ parallels = [+x[0], +x[1]];
141
+ return reload();
142
+ };
143
+
144
+ albers.scale = function(x) {
145
+ if (!arguments.length) return scale;
146
+ scale = +x;
147
+ return albers;
148
+ };
149
+
150
+ albers.translate = function(x) {
151
+ if (!arguments.length) return translate;
152
+ translate = [+x[0], +x[1]];
153
+ return albers;
154
+ };
155
+
156
+ return reload();
157
+ };
158
+
159
+ // A composite projection for the United States, 960x500. The set of standard
160
+ // parallels for each region comes from USGS, which is published here:
161
+ // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
162
+ // TODO allow the composite projection to be rescaled?
163
+ d3.geo.albersUsa = function() {
164
+ var lower48 = d3.geo.albers();
165
+
166
+ var alaska = d3.geo.albers()
167
+ .origin([-160, 60])
168
+ .parallels([55, 65]);
169
+
170
+ var hawaii = d3.geo.albers()
171
+ .origin([-160, 20])
172
+ .parallels([8, 18]);
173
+
174
+ var puertoRico = d3.geo.albers()
175
+ .origin([-60, 10])
176
+ .parallels([8, 18]);
177
+
178
+ function albersUsa(coordinates) {
179
+ var lon = coordinates[0],
180
+ lat = coordinates[1];
181
+ return (lat > 50 ? alaska
182
+ : lon < -140 ? hawaii
183
+ : lat < 21 ? puertoRico
184
+ : lower48)(coordinates);
185
+ }
186
+
187
+ albersUsa.scale = function(x) {
188
+ if (!arguments.length) return lower48.scale();
189
+ lower48.scale(x);
190
+ alaska.scale(x * .6);
191
+ hawaii.scale(x);
192
+ puertoRico.scale(x * 1.5);
193
+ return albersUsa.translate(lower48.translate());
194
+ };
195
+
196
+ albersUsa.translate = function(x) {
197
+ if (!arguments.length) return lower48.translate();
198
+ var dz = lower48.scale() / 1000,
199
+ dx = x[0],
200
+ dy = x[1];
201
+ lower48.translate(x);
202
+ alaska.translate([dx - 400 * dz, dy + 170 * dz]);
203
+ hawaii.translate([dx - 190 * dz, dy + 200 * dz]);
204
+ puertoRico.translate([dx + 580 * dz, dy + 430 * dz]);
205
+ return albersUsa;
206
+ };
207
+
208
+ return albersUsa.scale(lower48.scale());
209
+ };
210
+ d3.geo.bonne = function() {
211
+ var scale = 200,
212
+ translate = [480, 250],
213
+ x0, // origin longitude in radians
214
+ y0, // origin latitude in radians
215
+ y1, // parallel latitude in radians
216
+ c1; // cot(y1)
217
+
218
+ function bonne(coordinates) {
219
+ var x = coordinates[0] * d3_geo_radians - x0,
220
+ y = coordinates[1] * d3_geo_radians - y0;
221
+ if (y1) {
222
+ var p = c1 + y1 - y, E = x * Math.cos(y) / p;
223
+ x = p * Math.sin(E);
224
+ y = p * Math.cos(E) - c1;
225
+ } else {
226
+ x *= Math.cos(y);
227
+ y *= -1;
228
+ }
229
+ return [
230
+ scale * x + translate[0],
231
+ scale * y + translate[1]
232
+ ];
233
+ }
234
+
235
+ bonne.invert = function(coordinates) {
236
+ var x = (coordinates[0] - translate[0]) / scale,
237
+ y = (coordinates[1] - translate[1]) / scale;
238
+ if (y1) {
239
+ var c = c1 + y, p = Math.sqrt(x * x + c * c);
240
+ y = c1 + y1 - p;
241
+ x = x0 + p * Math.atan2(x, c) / Math.cos(y);
242
+ } else {
243
+ y *= -1;
244
+ x /= Math.cos(y);
245
+ }
246
+ return [
247
+ x / d3_geo_radians,
248
+ y / d3_geo_radians
249
+ ];
250
+ };
251
+
252
+ // 90° for Werner, 0° for Sinusoidal
253
+ bonne.parallel = function(x) {
254
+ if (!arguments.length) return y1 / d3_geo_radians;
255
+ c1 = 1 / Math.tan(y1 = x * d3_geo_radians);
256
+ return bonne;
257
+ };
258
+
259
+ bonne.origin = function(x) {
260
+ if (!arguments.length) return [x0 / d3_geo_radians, y0 / d3_geo_radians];
261
+ x0 = x[0] * d3_geo_radians;
262
+ y0 = x[1] * d3_geo_radians;
263
+ return bonne;
264
+ };
265
+
266
+ bonne.scale = function(x) {
267
+ if (!arguments.length) return scale;
268
+ scale = +x;
269
+ return bonne;
270
+ };
271
+
272
+ bonne.translate = function(x) {
273
+ if (!arguments.length) return translate;
274
+ translate = [+x[0], +x[1]];
275
+ return bonne;
276
+ };
277
+
278
+ return bonne.origin([0, 0]).parallel(45);
279
+ };
280
+ d3.geo.equirectangular = function() {
281
+ var scale = 500,
282
+ translate = [480, 250];
283
+
284
+ function equirectangular(coordinates) {
285
+ var x = coordinates[0] / 360,
286
+ y = -coordinates[1] / 360;
287
+ return [
288
+ scale * x + translate[0],
289
+ scale * y + translate[1]
290
+ ];
291
+ }
292
+
293
+ equirectangular.invert = function(coordinates) {
294
+ var x = (coordinates[0] - translate[0]) / scale,
295
+ y = (coordinates[1] - translate[1]) / scale;
296
+ return [
297
+ 360 * x,
298
+ -360 * y
299
+ ];
300
+ };
301
+
302
+ equirectangular.scale = function(x) {
303
+ if (!arguments.length) return scale;
304
+ scale = +x;
305
+ return equirectangular;
306
+ };
307
+
308
+ equirectangular.translate = function(x) {
309
+ if (!arguments.length) return translate;
310
+ translate = [+x[0], +x[1]];
311
+ return equirectangular;
312
+ };
313
+
314
+ return equirectangular;
315
+ };
316
+ d3.geo.mercator = function() {
317
+ var scale = 500,
318
+ translate = [480, 250];
319
+
320
+ function mercator(coordinates) {
321
+ var x = coordinates[0] / 360,
322
+ y = -(Math.log(Math.tan(Math.PI / 4 + coordinates[1] * d3_geo_radians / 2)) / d3_geo_radians) / 360;
323
+ return [
324
+ scale * x + translate[0],
325
+ scale * Math.max(-.5, Math.min(.5, y)) + translate[1]
326
+ ];
327
+ }
328
+
329
+ mercator.invert = function(coordinates) {
330
+ var x = (coordinates[0] - translate[0]) / scale,
331
+ y = (coordinates[1] - translate[1]) / scale;
332
+ return [
333
+ 360 * x,
334
+ 2 * Math.atan(Math.exp(-360 * y * d3_geo_radians)) / d3_geo_radians - 90
335
+ ];
336
+ };
337
+
338
+ mercator.scale = function(x) {
339
+ if (!arguments.length) return scale;
340
+ scale = +x;
341
+ return mercator;
342
+ };
343
+
344
+ mercator.translate = function(x) {
345
+ if (!arguments.length) return translate;
346
+ translate = [+x[0], +x[1]];
347
+ return mercator;
348
+ };
349
+
350
+ return mercator;
351
+ };
352
+ function d3_geo_type(types, defaultValue) {
353
+ return function(object) {
354
+ return object && object.type in types ? types[object.type](object) : defaultValue;
355
+ };
356
+ }
357
+ /**
358
+ * Returns a function that, given a GeoJSON object (e.g., a feature), returns
359
+ * the corresponding SVG path. The function can be customized by overriding the
360
+ * projection. Point features are mapped to circles with a default radius of
361
+ * 4.5px; the radius can be specified either as a constant or a function that
362
+ * is evaluated per object.
363
+ */
364
+ d3.geo.path = function() {
365
+ var pointRadius = 4.5,
366
+ pointCircle = d3_path_circle(pointRadius),
367
+ projection = d3.geo.albersUsa();
368
+
369
+ function path(d, i) {
370
+ if (typeof pointRadius === "function") {
371
+ pointCircle = d3_path_circle(pointRadius.apply(this, arguments));
372
+ }
373
+ return pathType(d) || null;
374
+ }
375
+
376
+ function project(coordinates) {
377
+ return projection(coordinates).join(",");
378
+ }
379
+
380
+ var pathType = d3_geo_type({
381
+
382
+ FeatureCollection: function(o) {
383
+ var path = [],
384
+ features = o.features,
385
+ i = -1, // features.index
386
+ n = features.length;
387
+ while (++i < n) path.push(pathType(features[i].geometry));
388
+ return path.join("");
389
+ },
390
+
391
+ Feature: function(o) {
392
+ return pathType(o.geometry);
393
+ },
394
+
395
+ Point: function(o) {
396
+ return "M" + project(o.coordinates) + pointCircle;
397
+ },
398
+
399
+ MultiPoint: function(o) {
400
+ var path = [],
401
+ coordinates = o.coordinates,
402
+ i = -1, // coordinates.index
403
+ n = coordinates.length;
404
+ while (++i < n) path.push("M", project(coordinates[i]), pointCircle);
405
+ return path.join("");
406
+ },
407
+
408
+ LineString: function(o) {
409
+ var path = ["M"],
410
+ coordinates = o.coordinates,
411
+ i = -1, // coordinates.index
412
+ n = coordinates.length;
413
+ while (++i < n) path.push(project(coordinates[i]), "L");
414
+ path.pop();
415
+ return path.join("");
416
+ },
417
+
418
+ MultiLineString: function(o) {
419
+ var path = [],
420
+ coordinates = o.coordinates,
421
+ i = -1, // coordinates.index
422
+ n = coordinates.length,
423
+ subcoordinates, // coordinates[i]
424
+ j, // subcoordinates.index
425
+ m; // subcoordinates.length
426
+ while (++i < n) {
427
+ subcoordinates = coordinates[i];
428
+ j = -1;
429
+ m = subcoordinates.length;
430
+ path.push("M");
431
+ while (++j < m) path.push(project(subcoordinates[j]), "L");
432
+ path.pop();
433
+ }
434
+ return path.join("");
435
+ },
436
+
437
+ Polygon: function(o) {
438
+ var path = [],
439
+ coordinates = o.coordinates,
440
+ i = -1, // coordinates.index
441
+ n = coordinates.length,
442
+ subcoordinates, // coordinates[i]
443
+ j, // subcoordinates.index
444
+ m; // subcoordinates.length
445
+ while (++i < n) {
446
+ subcoordinates = coordinates[i];
447
+ j = -1;
448
+ if ((m = subcoordinates.length - 1) > 0) {
449
+ path.push("M");
450
+ while (++j < m) path.push(project(subcoordinates[j]), "L");
451
+ path[path.length - 1] = "Z";
452
+ }
453
+ }
454
+ return path.join("");
455
+ },
456
+
457
+ MultiPolygon: function(o) {
458
+ var path = [],
459
+ coordinates = o.coordinates,
460
+ i = -1, // coordinates index
461
+ n = coordinates.length,
462
+ subcoordinates, // coordinates[i]
463
+ j, // subcoordinates index
464
+ m, // subcoordinates.length
465
+ subsubcoordinates, // subcoordinates[j]
466
+ k, // subsubcoordinates index
467
+ p; // subsubcoordinates.length
468
+ while (++i < n) {
469
+ subcoordinates = coordinates[i];
470
+ j = -1;
471
+ m = subcoordinates.length;
472
+ while (++j < m) {
473
+ subsubcoordinates = subcoordinates[j];
474
+ k = -1;
475
+ if ((p = subsubcoordinates.length - 1) > 0) {
476
+ path.push("M");
477
+ while (++k < p) path.push(project(subsubcoordinates[k]), "L");
478
+ path[path.length - 1] = "Z";
479
+ }
480
+ }
481
+ }
482
+ return path.join("");
483
+ },
484
+
485
+ GeometryCollection: function(o) {
486
+ var path = [],
487
+ geometries = o.geometries,
488
+ i = -1, // geometries index
489
+ n = geometries.length;
490
+ while (++i < n) path.push(pathType(geometries[i]));
491
+ return path.join("");
492
+ }
493
+
494
+ });
495
+
496
+ var areaType = path.area = d3_geo_type({
497
+
498
+ FeatureCollection: function(o) {
499
+ var area = 0,
500
+ features = o.features,
501
+ i = -1, // features.index
502
+ n = features.length;
503
+ while (++i < n) area += areaType(features[i]);
504
+ return area;
505
+ },
506
+
507
+ Feature: function(o) {
508
+ return areaType(o.geometry);
509
+ },
510
+
511
+ Polygon: function(o) {
512
+ return polygonArea(o.coordinates);
513
+ },
514
+
515
+ MultiPolygon: function(o) {
516
+ var sum = 0,
517
+ coordinates = o.coordinates,
518
+ i = -1, // coordinates index
519
+ n = coordinates.length;
520
+ while (++i < n) sum += polygonArea(coordinates[i]);
521
+ return sum;
522
+ },
523
+
524
+ GeometryCollection: function(o) {
525
+ var sum = 0,
526
+ geometries = o.geometries,
527
+ i = -1, // geometries index
528
+ n = geometries.length;
529
+ while (++i < n) sum += areaType(geometries[i]);
530
+ return sum;
531
+ }
532
+
533
+ }, 0);
534
+
535
+ function polygonArea(coordinates) {
536
+ var sum = area(coordinates[0]), // exterior ring
537
+ i = 0, // coordinates.index
538
+ n = coordinates.length;
539
+ while (++i < n) sum -= area(coordinates[i]); // holes
540
+ return sum;
541
+ }
542
+
543
+ function polygonCentroid(coordinates) {
544
+ var polygon = d3.geom.polygon(coordinates[0].map(projection)), // exterior ring
545
+ area = polygon.area(),
546
+ centroid = polygon.centroid(area < 0 ? (area *= -1, 1) : -1),
547
+ x = centroid[0],
548
+ y = centroid[1],
549
+ z = area,
550
+ i = 0, // coordinates index
551
+ n = coordinates.length;
552
+ while (++i < n) {
553
+ polygon = d3.geom.polygon(coordinates[i].map(projection)); // holes
554
+ area = polygon.area();
555
+ centroid = polygon.centroid(area < 0 ? (area *= -1, 1) : -1);
556
+ x -= centroid[0];
557
+ y -= centroid[1];
558
+ z -= area;
559
+ }
560
+ return [x, y, 6 * z]; // weighted centroid
561
+ }
562
+
563
+ var centroidType = path.centroid = d3_geo_type({
564
+
565
+ // TODO FeatureCollection
566
+ // TODO Point
567
+ // TODO MultiPoint
568
+ // TODO LineString
569
+ // TODO MultiLineString
570
+ // TODO GeometryCollection
571
+
572
+ Feature: function(o) {
573
+ return centroidType(o.geometry);
574
+ },
575
+
576
+ Polygon: function(o) {
577
+ var centroid = polygonCentroid(o.coordinates);
578
+ return [centroid[0] / centroid[2], centroid[1] / centroid[2]];
579
+ },
580
+
581
+ MultiPolygon: function(o) {
582
+ var area = 0,
583
+ coordinates = o.coordinates,
584
+ centroid,
585
+ x = 0,
586
+ y = 0,
587
+ z = 0,
588
+ i = -1, // coordinates index
589
+ n = coordinates.length;
590
+ while (++i < n) {
591
+ centroid = polygonCentroid(coordinates[i]);
592
+ x += centroid[0];
593
+ y += centroid[1];
594
+ z += centroid[2];
595
+ }
596
+ return [x / z, y / z];
597
+ }
598
+
599
+ });
600
+
601
+ function area(coordinates) {
602
+ return Math.abs(d3.geom.polygon(coordinates.map(projection)).area());
603
+ }
604
+
605
+ path.projection = function(x) {
606
+ projection = x;
607
+ return path;
608
+ };
609
+
610
+ path.pointRadius = function(x) {
611
+ if (typeof x === "function") pointRadius = x;
612
+ else {
613
+ pointRadius = +x;
614
+ pointCircle = d3_path_circle(pointRadius);
615
+ }
616
+ return path;
617
+ };
618
+
619
+ return path;
620
+ };
621
+
622
+ function d3_path_circle(radius) {
623
+ return "m0," + radius
624
+ + "a" + radius + "," + radius + " 0 1,1 0," + (-2 * radius)
625
+ + "a" + radius + "," + radius + " 0 1,1 0," + (+2 * radius)
626
+ + "z";
627
+ }
628
+ /**
629
+ * Given a GeoJSON object, returns the corresponding bounding box. The bounding
630
+ * box is represented by a two-dimensional array: [[left, bottom], [right,
631
+ * top]], where left is the minimum longitude, bottom is the minimum latitude,
632
+ * right is maximum longitude, and top is the maximum latitude.
633
+ */
634
+ d3.geo.bounds = function(feature) {
635
+ var left = Infinity,
636
+ bottom = Infinity,
637
+ right = -Infinity,
638
+ top = -Infinity;
639
+ d3_geo_bounds(feature, function(x, y) {
640
+ if (x < left) left = x;
641
+ if (x > right) right = x;
642
+ if (y < bottom) bottom = y;
643
+ if (y > top) top = y;
644
+ });
645
+ return [[left, bottom], [right, top]];
646
+ };
647
+
648
+ function d3_geo_bounds(o, f) {
649
+ if (o.type in d3_geo_boundsTypes) d3_geo_boundsTypes[o.type](o, f);
650
+ }
651
+
652
+ var d3_geo_boundsTypes = {
653
+ Feature: d3_geo_boundsFeature,
654
+ FeatureCollection: d3_geo_boundsFeatureCollection,
655
+ GeometryCollection: d3_geo_boundsGeometryCollection,
656
+ LineString: d3_geo_boundsLineString,
657
+ MultiLineString: d3_geo_boundsMultiLineString,
658
+ MultiPoint: d3_geo_boundsLineString,
659
+ MultiPolygon: d3_geo_boundsMultiPolygon,
660
+ Point: d3_geo_boundsPoint,
661
+ Polygon: d3_geo_boundsPolygon
662
+ };
663
+
664
+ function d3_geo_boundsFeature(o, f) {
665
+ d3_geo_bounds(o.geometry, f);
666
+ }
667
+
668
+ function d3_geo_boundsFeatureCollection(o, f) {
669
+ for (var a = o.features, i = 0, n = a.length; i < n; i++) {
670
+ d3_geo_bounds(a[i].geometry, f);
671
+ }
672
+ }
673
+
674
+ function d3_geo_boundsGeometryCollection(o, f) {
675
+ for (var a = o.geometries, i = 0, n = a.length; i < n; i++) {
676
+ d3_geo_bounds(a[i], f);
677
+ }
678
+ }
679
+
680
+ function d3_geo_boundsLineString(o, f) {
681
+ for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
682
+ f.apply(null, a[i]);
683
+ }
684
+ }
685
+
686
+ function d3_geo_boundsMultiLineString(o, f) {
687
+ for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
688
+ for (var b = a[i], j = 0, m = b.length; j < m; j++) {
689
+ f.apply(null, b[j]);
690
+ }
691
+ }
692
+ }
693
+
694
+ function d3_geo_boundsMultiPolygon(o, f) {
695
+ for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
696
+ for (var b = a[i][0], j = 0, m = b.length; j < m; j++) {
697
+ f.apply(null, b[j]);
698
+ }
699
+ }
700
+ }
701
+
702
+ function d3_geo_boundsPoint(o, f) {
703
+ f.apply(null, o.coordinates);
704
+ }
705
+
706
+ function d3_geo_boundsPolygon(o, f) {
707
+ for (var a = o.coordinates[0], i = 0, n = a.length; i < n; i++) {
708
+ f.apply(null, a[i]);
709
+ }
710
+ }
711
+ // TODO breakAtDateLine?
712
+
713
+ d3.geo.circle = function() {
714
+ var origin = [0, 0],
715
+ degrees = 90 - 1e-2,
716
+ radians = degrees * d3_geo_radians,
717
+ arc = d3.geo.greatArc().target(Object);
718
+
719
+ function circle() {
720
+ // TODO render a circle as a Polygon
721
+ }
722
+
723
+ function visible(point) {
724
+ return arc.distance(point) < radians;
725
+ }
726
+
727
+ circle.clip = function(d) {
728
+ arc.source(typeof origin === "function" ? origin.apply(this, arguments) : origin);
729
+ return clipType(d);
730
+ };
731
+
732
+ var clipType = d3_geo_type({
733
+
734
+ FeatureCollection: function(o) {
735
+ var features = o.features.map(clipType).filter(Object);
736
+ return features && (o = Object.create(o), o.features = features, o);
737
+ },
738
+
739
+ Feature: function(o) {
740
+ var geometry = clipType(o.geometry);
741
+ return geometry && (o = Object.create(o), o.geometry = geometry, o);
742
+ },
743
+
744
+ Point: function(o) {
745
+ return visible(o.coordinates) && o;
746
+ },
747
+
748
+ MultiPoint: function(o) {
749
+ var coordinates = o.coordinates.filter(visible);
750
+ return coordinates.length && {
751
+ type: o.type,
752
+ coordinates: coordinates
753
+ };
754
+ },
755
+
756
+ LineString: function(o) {
757
+ var coordinates = clip(o.coordinates);
758
+ return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o);
759
+ },
760
+
761
+ MultiLineString: function(o) {
762
+ var coordinates = o.coordinates.map(clip).filter(function(d) { return d.length; });
763
+ return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o);
764
+ },
765
+
766
+ Polygon: function(o) {
767
+ var coordinates = o.coordinates.map(clip);
768
+ return coordinates[0].length && (o = Object.create(o), o.coordinates = coordinates, o);
769
+ },
770
+
771
+ MultiPolygon: function(o) {
772
+ var coordinates = o.coordinates.map(function(d) { return d.map(clip); }).filter(function(d) { return d[0].length; });
773
+ return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o);
774
+ },
775
+
776
+ GeometryCollection: function(o) {
777
+ var geometries = o.geometries.map(clipType).filter(Object);
778
+ return geometries.length && (o = Object.create(o), o.geometries = geometries, o);
779
+ }
780
+
781
+ });
782
+
783
+ function clip(coordinates) {
784
+ var i = -1,
785
+ n = coordinates.length,
786
+ clipped = [],
787
+ p0,
788
+ p1,
789
+ p2,
790
+ d0,
791
+ d1;
792
+
793
+ while (++i < n) {
794
+ d1 = arc.distance(p2 = coordinates[i]);
795
+ if (d1 < radians) {
796
+ if (p1) clipped.push(d3_geo_greatArcInterpolate(p1, p2)((d0 - radians) / (d0 - d1)));
797
+ clipped.push(p2);
798
+ p0 = p1 = null;
799
+ } else {
800
+ p1 = p2;
801
+ if (!p0 && clipped.length) {
802
+ clipped.push(d3_geo_greatArcInterpolate(clipped[clipped.length - 1], p1)((radians - d0) / (d1 - d0)));
803
+ p0 = p1;
804
+ }
805
+ }
806
+ d0 = d1;
807
+ }
808
+
809
+ if (p1 && clipped.length) {
810
+ d1 = arc.distance(p2 = clipped[0]);
811
+ clipped.push(d3_geo_greatArcInterpolate(p1, p2)((d0 - radians) / (d0 - d1)));
812
+ }
813
+
814
+ return resample(clipped);
815
+ }
816
+
817
+ // Resample coordinates, creating great arcs between each.
818
+ function resample(coordinates) {
819
+ var i = 0,
820
+ n = coordinates.length,
821
+ j,
822
+ m,
823
+ resampled = n ? [coordinates[0]] : coordinates,
824
+ resamples,
825
+ origin = arc.source();
826
+
827
+ while (++i < n) {
828
+ resamples = arc.source(coordinates[i - 1])(coordinates[i]).coordinates;
829
+ for (j = 0, m = resamples.length; ++j < m;) resampled.push(resamples[j]);
830
+ }
831
+
832
+ arc.source(origin);
833
+ return resampled;
834
+ }
835
+
836
+ circle.origin = function(x) {
837
+ if (!arguments.length) return origin;
838
+ origin = x;
839
+ return circle;
840
+ };
841
+
842
+ circle.angle = function(x) {
843
+ if (!arguments.length) return degrees;
844
+ radians = (degrees = +x) * d3_geo_radians;
845
+ return circle;
846
+ };
847
+
848
+ // Precision is specified in degrees.
849
+ circle.precision = function(x) {
850
+ if (!arguments.length) return arc.precision();
851
+ arc.precision(x);
852
+ return circle;
853
+ };
854
+
855
+ return circle;
856
+ }
857
+ d3.geo.greatArc = function() {
858
+ var source = d3_geo_greatArcSource,
859
+ target = d3_geo_greatArcTarget,
860
+ precision = 6 * d3_geo_radians;
861
+
862
+ function greatArc() {
863
+ var a = typeof source === "function" ? source.apply(this, arguments) : source,
864
+ b = typeof target === "function" ? target.apply(this, arguments) : target,
865
+ i = d3_geo_greatArcInterpolate(a, b),
866
+ dt = precision / i.d,
867
+ t = 0,
868
+ coordinates = [a];
869
+ while ((t += dt) < 1) coordinates.push(i(t));
870
+ coordinates.push(b);
871
+ return {
872
+ type: "LineString",
873
+ coordinates: coordinates
874
+ };
875
+ }
876
+
877
+ // Length returned in radians; multiply by radius for distance.
878
+ greatArc.distance = function() {
879
+ var a = typeof source === "function" ? source.apply(this, arguments) : source,
880
+ b = typeof target === "function" ? target.apply(this, arguments) : target;
881
+ return d3_geo_greatArcInterpolate(a, b).d;
882
+ };
883
+
884
+ greatArc.source = function(x) {
885
+ if (!arguments.length) return source;
886
+ source = x;
887
+ return greatArc;
888
+ };
889
+
890
+ greatArc.target = function(x) {
891
+ if (!arguments.length) return target;
892
+ target = x;
893
+ return greatArc;
894
+ };
895
+
896
+ // Precision is specified in degrees.
897
+ greatArc.precision = function(x) {
898
+ if (!arguments.length) return precision / d3_geo_radians;
899
+ precision = x * d3_geo_radians;
900
+ return greatArc;
901
+ };
902
+
903
+ return greatArc;
904
+ };
905
+
906
+ function d3_geo_greatArcSource(d) {
907
+ return d.source;
908
+ }
909
+
910
+ function d3_geo_greatArcTarget(d) {
911
+ return d.target;
912
+ }
913
+
914
+ function d3_geo_greatArcInterpolate(a, b) {
915
+ var x0 = a[0] * d3_geo_radians, cx0 = Math.cos(x0), sx0 = Math.sin(x0),
916
+ y0 = a[1] * d3_geo_radians, cy0 = Math.cos(y0), sy0 = Math.sin(y0),
917
+ x1 = b[0] * d3_geo_radians, cx1 = Math.cos(x1), sx1 = Math.sin(x1),
918
+ y1 = b[1] * d3_geo_radians, cy1 = Math.cos(y1), sy1 = Math.sin(y1),
919
+ d = interpolate.d = Math.acos(Math.max(-1, Math.min(1, sy0 * sy1 + cy0 * cy1 * Math.cos(x1 - x0)))),
920
+ sd = Math.sin(d);
921
+
922
+ // From http://williams.best.vwh.net/avform.htm#Intermediate
923
+ function interpolate(t) {
924
+ var A = Math.sin(d - (t *= d)) / sd,
925
+ B = Math.sin(t) / sd,
926
+ x = A * cy0 * cx0 + B * cy1 * cx1,
927
+ y = A * cy0 * sx0 + B * cy1 * sx1,
928
+ z = A * sy0 + B * sy1;
929
+ return [
930
+ Math.atan2(y, x) / d3_geo_radians,
931
+ Math.atan2(z, Math.sqrt(x * x + y * y)) / d3_geo_radians
932
+ ];
933
+ }
934
+
935
+ return interpolate;
936
+ }
937
+ d3.geo.greatCircle = d3.geo.circle;
938
+ })();