rubyvis 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (461) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +8 -1
  3. data/Manifest.txt +100 -416
  4. data/README.txt +5 -2
  5. data/examples/barley/barley.rb +79 -0
  6. data/examples/crimea/crimea.rb +37 -0
  7. data/examples/crimea/crimea_line.rb +47 -0
  8. data/examples/second.rb +2 -2
  9. data/examples/third.rb +16 -0
  10. data/lib/rubyvis.rb +2 -1
  11. data/lib/rubyvis/color/color.rb +170 -169
  12. data/lib/rubyvis/color/colors.rb +4 -4
  13. data/lib/rubyvis/color/ramp.rb +1 -0
  14. data/lib/rubyvis/format.rb +2 -2
  15. data/lib/rubyvis/format/date.rb +9 -2
  16. data/lib/rubyvis/format/number.rb +3 -3
  17. data/lib/rubyvis/internals.rb +13 -13
  18. data/lib/rubyvis/javascript_behaviour.rb +3 -3
  19. data/lib/rubyvis/label.rb +1 -0
  20. data/lib/rubyvis/mark.rb +178 -169
  21. data/lib/rubyvis/mark/anchor.rb +4 -4
  22. data/lib/rubyvis/mark/area.rb +93 -5
  23. data/lib/rubyvis/mark/bar.rb +1 -1
  24. data/lib/rubyvis/mark/label.rb +2 -2
  25. data/lib/rubyvis/mark/line.rb +11 -5
  26. data/lib/rubyvis/mark/panel.rb +13 -11
  27. data/lib/rubyvis/mark/rule.rb +2 -2
  28. data/lib/rubyvis/property.rb +3 -2
  29. data/lib/rubyvis/scale.rb +4 -4
  30. data/lib/rubyvis/scale/linear.rb +2 -2
  31. data/lib/rubyvis/scale/ordinal.rb +41 -41
  32. data/lib/rubyvis/scale/quantitative.rb +212 -200
  33. data/lib/rubyvis/scene/svg_bar.rb +21 -21
  34. data/lib/rubyvis/scene/svg_label.rb +34 -34
  35. data/lib/rubyvis/scene/svg_line.rb +185 -0
  36. data/lib/rubyvis/scene/svg_panel.rb +36 -30
  37. data/lib/rubyvis/scene/svg_rule.rb +18 -19
  38. data/lib/rubyvis/scene/svg_scene.rb +33 -30
  39. data/lib/rubyvis/sceneelement.rb +5 -1
  40. data/lib/rubyvis/transform.rb +2 -2
  41. data/spec/mark_spec.rb +6 -6
  42. data/spec/scale_linear_datetime_spec.rb +52 -0
  43. data/spec/scale_linear_spec.rb +0 -10
  44. data/vendor/{protovis-r3.3.js → protovis/protovis-r3.3.js} +0 -0
  45. data/vendor/{src → protovis/src}/behavior/Behavior.js +0 -0
  46. data/vendor/{src → protovis/src}/behavior/Drag.js +0 -0
  47. data/vendor/{src → protovis/src}/behavior/Pan.js +0 -0
  48. data/vendor/{src → protovis/src}/behavior/Point.js +0 -0
  49. data/vendor/{src → protovis/src}/behavior/Resize.js +0 -0
  50. data/vendor/{src → protovis/src}/behavior/Select.js +0 -0
  51. data/vendor/{src → protovis/src}/behavior/Zoom.js +0 -0
  52. data/vendor/{src → protovis/src}/color/Color.js +0 -0
  53. data/vendor/{src → protovis/src}/color/Colors.js +0 -0
  54. data/vendor/{src → protovis/src}/color/Ramp.js +0 -0
  55. data/vendor/{src → protovis/src}/data/Arrays.js +0 -0
  56. data/vendor/{src → protovis/src}/data/Dom.js +0 -0
  57. data/vendor/{src → protovis/src}/data/Flatten.js +0 -0
  58. data/vendor/{src → protovis/src}/data/Histogram.js +0 -0
  59. data/vendor/{src → protovis/src}/data/LinearScale.js +0 -0
  60. data/vendor/{src → protovis/src}/data/LogScale.js +0 -0
  61. data/vendor/{src → protovis/src}/data/Nest.js +0 -0
  62. data/vendor/{src → protovis/src}/data/Numbers.js +0 -0
  63. data/vendor/{src → protovis/src}/data/Objects.js +0 -0
  64. data/vendor/{src → protovis/src}/data/OrdinalScale.js +0 -0
  65. data/vendor/{src → protovis/src}/data/QuantileScale.js +0 -0
  66. data/vendor/{src → protovis/src}/data/QuantitativeScale.js +0 -0
  67. data/vendor/{src → protovis/src}/data/RootScale.js +0 -0
  68. data/vendor/{src → protovis/src}/data/Scale.js +0 -0
  69. data/vendor/{src → protovis/src}/data/Transform.js +0 -0
  70. data/vendor/{src → protovis/src}/data/Tree.js +0 -0
  71. data/vendor/{src → protovis/src}/data/Vector.js +0 -0
  72. data/vendor/{src → protovis/src}/geo/Geo.js +0 -0
  73. data/vendor/{src → protovis/src}/geo/GeoScale.js +0 -0
  74. data/vendor/{src → protovis/src}/geo/LatLng.js +0 -0
  75. data/vendor/{src → protovis/src}/geo/Projection.js +0 -0
  76. data/vendor/{src → protovis/src}/geo/Projections.js +0 -0
  77. data/vendor/{src → protovis/src}/lang/Array.js +0 -0
  78. data/vendor/{src → protovis/src}/lang/init.js +0 -0
  79. data/vendor/{src → protovis/src}/layout/Arc.js +0 -0
  80. data/vendor/{src → protovis/src}/layout/Bullet.js +0 -0
  81. data/vendor/{src → protovis/src}/layout/Cluster.js +0 -0
  82. data/vendor/{src → protovis/src}/layout/Force.js +0 -0
  83. data/vendor/{src → protovis/src}/layout/Grid.js +0 -0
  84. data/vendor/{src → protovis/src}/layout/Hierarchy.js +0 -0
  85. data/vendor/{src → protovis/src}/layout/Horizon.js +0 -0
  86. data/vendor/{src → protovis/src}/layout/Indent.js +0 -0
  87. data/vendor/{src → protovis/src}/layout/Layout.js +0 -0
  88. data/vendor/{src → protovis/src}/layout/Matrix.js +0 -0
  89. data/vendor/{src → protovis/src}/layout/Network.js +0 -0
  90. data/vendor/{src → protovis/src}/layout/Pack.js +0 -0
  91. data/vendor/{src → protovis/src}/layout/Partition.js +0 -0
  92. data/vendor/{src → protovis/src}/layout/Rollup.js +0 -0
  93. data/vendor/{src → protovis/src}/layout/Stack.js +0 -0
  94. data/vendor/{src → protovis/src}/layout/Tree.js +0 -0
  95. data/vendor/{src → protovis/src}/layout/Treemap.js +0 -0
  96. data/vendor/{src → protovis/src}/mark/Anchor.js +0 -0
  97. data/vendor/{src → protovis/src}/mark/Area.js +0 -0
  98. data/vendor/{src → protovis/src}/mark/Bar.js +0 -0
  99. data/vendor/{src → protovis/src}/mark/Dot.js +0 -0
  100. data/vendor/{src → protovis/src}/mark/Ease.js +0 -0
  101. data/vendor/{src → protovis/src}/mark/Image.js +0 -0
  102. data/vendor/{src → protovis/src}/mark/Label.js +0 -0
  103. data/vendor/{src → protovis/src}/mark/Line.js +0 -0
  104. data/vendor/{src → protovis/src}/mark/Mark.js +0 -0
  105. data/vendor/{src → protovis/src}/mark/Panel.js +0 -0
  106. data/vendor/{src → protovis/src}/mark/Rule.js +0 -0
  107. data/vendor/{src → protovis/src}/mark/Transient.js +0 -0
  108. data/vendor/{src → protovis/src}/mark/Transition.js +0 -0
  109. data/vendor/{src → protovis/src}/mark/Wedge.js +0 -0
  110. data/vendor/{src → protovis/src}/physics/BoundConstraint.js +0 -0
  111. data/vendor/{src → protovis/src}/physics/ChargeForce.js +0 -0
  112. data/vendor/{src → protovis/src}/physics/CollisionConstraint.js +0 -0
  113. data/vendor/{src → protovis/src}/physics/Constraint.js +0 -0
  114. data/vendor/{src → protovis/src}/physics/DragForce.js +0 -0
  115. data/vendor/{src → protovis/src}/physics/Force.js +0 -0
  116. data/vendor/{src → protovis/src}/physics/Particle.js +0 -0
  117. data/vendor/{src → protovis/src}/physics/PositionConstraint.js +0 -0
  118. data/vendor/{src → protovis/src}/physics/Quadtree.js +0 -0
  119. data/vendor/{src → protovis/src}/physics/Simulation.js +0 -0
  120. data/vendor/{src → protovis/src}/physics/SpringForce.js +0 -0
  121. data/vendor/{src → protovis/src}/pv-internals.js +0 -0
  122. data/vendor/{src → protovis/src}/pv.js +0 -0
  123. data/vendor/{src → protovis/src}/scene/SvgArea.js +0 -0
  124. data/vendor/{src → protovis/src}/scene/SvgBar.js +0 -0
  125. data/vendor/{src → protovis/src}/scene/SvgCurve.js +0 -0
  126. data/vendor/{src → protovis/src}/scene/SvgDot.js +0 -0
  127. data/vendor/{src → protovis/src}/scene/SvgImage.js +0 -0
  128. data/vendor/{src → protovis/src}/scene/SvgLabel.js +0 -0
  129. data/vendor/{src → protovis/src}/scene/SvgLine.js +0 -0
  130. data/vendor/{src → protovis/src}/scene/SvgPanel.js +0 -0
  131. data/vendor/{src → protovis/src}/scene/SvgRule.js +0 -0
  132. data/vendor/{src → protovis/src}/scene/SvgScene.js +0 -0
  133. data/vendor/{src → protovis/src}/scene/SvgWedge.js +0 -0
  134. data/vendor/{src → protovis/src}/text/DateFormat.js +0 -0
  135. data/vendor/{src → protovis/src}/text/Format.js +0 -0
  136. data/vendor/{src → protovis/src}/text/NumberFormat.js +0 -0
  137. data/vendor/{src → protovis/src}/text/TimeFormat.js +0 -0
  138. metadata +132 -426
  139. metadata.gz.sig +2 -0
  140. data/examples/crimea-line.rb +0 -64
  141. data/vendor/FUTURE +0 -62
  142. data/vendor/Makefile +0 -138
  143. data/vendor/TODO +0 -22
  144. data/vendor/examples/antibiotics/antibiotics-scatter.html +0 -113
  145. data/vendor/examples/antibiotics/antibiotics.html +0 -140
  146. data/vendor/examples/antibiotics/antibiotics.js +0 -20
  147. data/vendor/examples/barley/barley.html +0 -102
  148. data/vendor/examples/barley/barley.js +0 -122
  149. data/vendor/examples/cars/cars.html +0 -90
  150. data/vendor/examples/cars/cars.js +0 -408
  151. data/vendor/examples/clock/clock.html +0 -91
  152. data/vendor/examples/crimea/crimea-grouped-bar.html +0 -65
  153. data/vendor/examples/crimea/crimea-line.html +0 -61
  154. data/vendor/examples/crimea/crimea-stacked-area.html +0 -61
  155. data/vendor/examples/crimea/crimea-stacked-bar.html +0 -60
  156. data/vendor/examples/crimea/crimea.html +0 -100
  157. data/vendor/examples/crimea/crimea.js +0 -33
  158. data/vendor/examples/downloadify/LICENSE.txt +0 -22
  159. data/vendor/examples/downloadify/download.png +0 -0
  160. data/vendor/examples/downloadify/downloadify.html +0 -57
  161. data/vendor/examples/downloadify/downloadify.min.js +0 -3
  162. data/vendor/examples/downloadify/downloadify.swf +0 -0
  163. data/vendor/examples/downloadify/swfobject.js +0 -4
  164. data/vendor/examples/ex.css +0 -17
  165. data/vendor/examples/eyes/eyes.html +0 -53
  166. data/vendor/examples/eyes/matrix.html +0 -44
  167. data/vendor/examples/flowers/flowers.html +0 -109
  168. data/vendor/examples/flowers/flowers.js +0 -154
  169. data/vendor/examples/group-stack/group-stack.html +0 -79
  170. data/vendor/examples/group-stack/headcount.js +0 -23
  171. data/vendor/examples/hotel/hotel.html +0 -76
  172. data/vendor/examples/hotel/hotel.js +0 -245
  173. data/vendor/examples/jobs/jobs.html +0 -71
  174. data/vendor/examples/jobs/jobs.js +0 -1024
  175. data/vendor/examples/jquery-1.4.2.min.js +0 -154
  176. data/vendor/examples/nba/nba.html +0 -83
  177. data/vendor/examples/nba/nba.js +0 -53
  178. data/vendor/examples/nba/nba2.html +0 -82
  179. data/vendor/examples/sankey/gdp2009.js +0 -184
  180. data/vendor/examples/sankey/sankey.html +0 -77
  181. data/vendor/examples/slider/cell.html +0 -112
  182. data/vendor/examples/slider/cell.js +0 -31
  183. data/vendor/examples/slider/horizon.html +0 -85
  184. data/vendor/examples/slider/jquery-ui-1.8rc3.custom.min.js +0 -71
  185. data/vendor/examples/slider/slider.html +0 -50
  186. data/vendor/examples/slider/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  187. data/vendor/examples/slider/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  188. data/vendor/examples/slider/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  189. data/vendor/examples/slider/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  190. data/vendor/examples/slider/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  191. data/vendor/examples/slider/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  192. data/vendor/examples/slider/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  193. data/vendor/examples/slider/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  194. data/vendor/examples/slider/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  195. data/vendor/examples/slider/ui-lightness/images/ui-icons_222222_256x240.png +0 -2
  196. data/vendor/examples/slider/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -2
  197. data/vendor/examples/slider/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -2
  198. data/vendor/examples/slider/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -2
  199. data/vendor/examples/slider/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -2
  200. data/vendor/examples/slider/ui-lightness/jquery-ui-1.8rc3.custom.css +0 -302
  201. data/vendor/examples/tipsy/jquery.tipsy.js +0 -198
  202. data/vendor/examples/tipsy/tipsy-bar.html +0 -65
  203. data/vendor/examples/tipsy/tipsy-line.html +0 -67
  204. data/vendor/examples/tipsy/tipsy.css +0 -12
  205. data/vendor/examples/tipsy/tipsy.gif +0 -0
  206. data/vendor/examples/tipsy/tipsy.js +0 -66
  207. data/vendor/examples/weather/weather.html +0 -86
  208. data/vendor/examples/weather/weather.js +0 -42
  209. data/vendor/examples/wheat/wheat.html +0 -130
  210. data/vendor/examples/wheat/wheat.js +0 -70
  211. data/vendor/lib/google-compiler/COPYING +0 -202
  212. data/vendor/lib/google-compiler/README +0 -224
  213. data/vendor/lib/google-compiler/compiler-20100201.jar +0 -0
  214. data/vendor/protovis-d3.3.js +0 -15726
  215. data/vendor/test1.html +0 -30
  216. data/vendor/tests/behavior/drag-events.html +0 -47
  217. data/vendor/tests/behavior/drag.html +0 -32
  218. data/vendor/tests/behavior/drag2.html +0 -33
  219. data/vendor/tests/behavior/point-area-stacked.html +0 -73
  220. data/vendor/tests/behavior/point-area-stacked2.html +0 -70
  221. data/vendor/tests/behavior/point-area.html +0 -67
  222. data/vendor/tests/behavior/point-bar.html +0 -62
  223. data/vendor/tests/behavior/point-dot.html +0 -60
  224. data/vendor/tests/behavior/point-line.html +0 -62
  225. data/vendor/tests/behavior/point-lines-grid.html +0 -65
  226. data/vendor/tests/behavior/point-lines.html +0 -61
  227. data/vendor/tests/behavior/point-wedge.html +0 -43
  228. data/vendor/tests/behavior/resize.html +0 -69
  229. data/vendor/tests/behavior/select.html +0 -37
  230. data/vendor/tests/bzr.js +0 -62
  231. data/vendor/tests/center.js +0 -13
  232. data/vendor/tests/data/deviation.html +0 -54
  233. data/vendor/tests/data/histogram-discrete.html +0 -50
  234. data/vendor/tests/data/histogram.html +0 -56
  235. data/vendor/tests/data/log-adjusted.html +0 -48
  236. data/vendor/tests/data/log-ceil.html +0 -48
  237. data/vendor/tests/data/log-floor.html +0 -48
  238. data/vendor/tests/data/log-symmetric.html +0 -48
  239. data/vendor/tests/data/log.html +0 -48
  240. data/vendor/tests/data/max-index.html +0 -36
  241. data/vendor/tests/data/max.html +0 -36
  242. data/vendor/tests/data/min-index.html +0 -36
  243. data/vendor/tests/data/min.html +0 -36
  244. data/vendor/tests/data/ordinal-split-banded.html +0 -45
  245. data/vendor/tests/data/ordinal-split-banded2.html +0 -45
  246. data/vendor/tests/data/ordinal-split-flush.html +0 -51
  247. data/vendor/tests/data/ordinal-split.html +0 -51
  248. data/vendor/tests/data/range.html +0 -105
  249. data/vendor/tests/data/scale-date.html +0 -46
  250. data/vendor/tests/data/scale-date2.html +0 -38
  251. data/vendor/tests/data/scale-date3.html +0 -38
  252. data/vendor/tests/data/scale-date4.html +0 -38
  253. data/vendor/tests/data/scale-degenerate.html +0 -143
  254. data/vendor/tests/data/scale-linear.html +0 -59
  255. data/vendor/tests/data/scale-log.html +0 -60
  256. data/vendor/tests/data/scale-log2.html +0 -60
  257. data/vendor/tests/data/scale-log3.html +0 -60
  258. data/vendor/tests/data/scale-log4.html +0 -60
  259. data/vendor/tests/data/scale-log5.html +0 -60
  260. data/vendor/tests/data/scale-log6.html +0 -60
  261. data/vendor/tests/data/scale-quantile.html +0 -47
  262. data/vendor/tests/data/scale-quantile2.html +0 -50
  263. data/vendor/tests/data/scale-quantile3.html +0 -48
  264. data/vendor/tests/data/scale-root.html +0 -60
  265. data/vendor/tests/data/scale-root2.html +0 -39
  266. data/vendor/tests/data/scale-tick-format.html +0 -54
  267. data/vendor/tests/data/scale-ticks.html +0 -45
  268. data/vendor/tests/data/sum.html +0 -42
  269. data/vendor/tests/data/variance.html +0 -42
  270. data/vendor/tests/diamond.js +0 -40
  271. data/vendor/tests/flare-imports.js +0 -222
  272. data/vendor/tests/flare.js +0 -284
  273. data/vendor/tests/geo/countries-hires.js +0 -257
  274. data/vendor/tests/geo/countries-lores.js +0 -197
  275. data/vendor/tests/geo/population.js +0 -250
  276. data/vendor/tests/geo/scale-aitoff.html +0 -58
  277. data/vendor/tests/geo/scale-gall-peters.html +0 -56
  278. data/vendor/tests/geo/scale-hammer.html +0 -58
  279. data/vendor/tests/geo/scale-identity.html +0 -56
  280. data/vendor/tests/geo/scale-mercator.html +0 -56
  281. data/vendor/tests/geo/scale-sinusoidal.html +0 -57
  282. data/vendor/tests/geo/scale-smart-domain.html +0 -58
  283. data/vendor/tests/geo/scale.html +0 -55
  284. data/vendor/tests/geo/scale2.html +0 -40
  285. data/vendor/tests/geo/us-states.js +0 -61
  286. data/vendor/tests/heatmap.js +0 -63
  287. data/vendor/tests/lang/globals.html +0 -41
  288. data/vendor/tests/lang/init.html +0 -31
  289. data/vendor/tests/layers.js +0 -28
  290. data/vendor/tests/layout/arc-directed.html +0 -33
  291. data/vendor/tests/layout/arc-radial.html +0 -36
  292. data/vendor/tests/layout/arc-undirected.html +0 -32
  293. data/vendor/tests/layout/arc.html +0 -33
  294. data/vendor/tests/layout/arc2.html +0 -32
  295. data/vendor/tests/layout/bullet-multiples.html +0 -60
  296. data/vendor/tests/layout/bullet.html +0 -45
  297. data/vendor/tests/layout/bullets.js +0 -37
  298. data/vendor/tests/layout/cluster-fill-group.html +0 -24
  299. data/vendor/tests/layout/cluster-fill.html +0 -28
  300. data/vendor/tests/layout/cluster-partition-radial-fill.html +0 -43
  301. data/vendor/tests/layout/cluster-radial-fill-radius.html +0 -26
  302. data/vendor/tests/layout/cluster-radial-fill.html +0 -29
  303. data/vendor/tests/layout/cluster-radial-group-fill.html +0 -30
  304. data/vendor/tests/layout/cluster-radial-radius.html +0 -30
  305. data/vendor/tests/layout/cluster-radial.html +0 -28
  306. data/vendor/tests/layout/cluster-radial2.html +0 -33
  307. data/vendor/tests/layout/cluster.html +0 -34
  308. data/vendor/tests/layout/cluster2.html +0 -32
  309. data/vendor/tests/layout/force-toggle.html +0 -46
  310. data/vendor/tests/layout/force.html +0 -45
  311. data/vendor/tests/layout/force2.html +0 -58
  312. data/vendor/tests/layout/force3.html +0 -41
  313. data/vendor/tests/layout/force4.html +0 -45
  314. data/vendor/tests/layout/force5.html +0 -53
  315. data/vendor/tests/layout/grid-cols.html +0 -31
  316. data/vendor/tests/layout/grid-heatmap.html +0 -25
  317. data/vendor/tests/layout/grid-rows.html +0 -31
  318. data/vendor/tests/layout/grid.html +0 -34
  319. data/vendor/tests/layout/horizon-color.html +0 -31
  320. data/vendor/tests/layout/horizon.html +0 -31
  321. data/vendor/tests/layout/indent-toggle.html +0 -62
  322. data/vendor/tests/layout/indent.html +0 -25
  323. data/vendor/tests/layout/indent2.html +0 -33
  324. data/vendor/tests/layout/matrix-sort.html +0 -28
  325. data/vendor/tests/layout/matrix.html +0 -35
  326. data/vendor/tests/layout/network.html +0 -43
  327. data/vendor/tests/layout/pack-bubble.html +0 -45
  328. data/vendor/tests/layout/pack.html +0 -26
  329. data/vendor/tests/layout/pack2.html +0 -32
  330. data/vendor/tests/layout/partition-fill.html +0 -27
  331. data/vendor/tests/layout/partition-fill2.html +0 -22
  332. data/vendor/tests/layout/partition-fill3.html +0 -27
  333. data/vendor/tests/layout/partition-radial-fill-radius.html +0 -25
  334. data/vendor/tests/layout/partition-radial-fill.html +0 -26
  335. data/vendor/tests/layout/partition-radial-fill2.html +0 -23
  336. data/vendor/tests/layout/partition-radial-fill3.html +0 -29
  337. data/vendor/tests/layout/partition-radial-radius.html +0 -29
  338. data/vendor/tests/layout/partition-radial.html +0 -30
  339. data/vendor/tests/layout/partition-radial2.html +0 -33
  340. data/vendor/tests/layout/partition.html +0 -33
  341. data/vendor/tests/layout/partition2.html +0 -32
  342. data/vendor/tests/layout/rollup.html +0 -50
  343. data/vendor/tests/layout/stack-empty.html +0 -27
  344. data/vendor/tests/layout/stack-expand.html +0 -41
  345. data/vendor/tests/layout/stack-reverse.html +0 -42
  346. data/vendor/tests/layout/stack-right.html +0 -42
  347. data/vendor/tests/layout/stack-rule.html +0 -61
  348. data/vendor/tests/layout/stack-visible.html +0 -43
  349. data/vendor/tests/layout/stack.html +0 -53
  350. data/vendor/tests/layout/tree-radial.html +0 -31
  351. data/vendor/tests/layout/tree-radial2.html +0 -34
  352. data/vendor/tests/layout/tree-toggle.html +0 -36
  353. data/vendor/tests/layout/tree.html +0 -31
  354. data/vendor/tests/layout/tree2.html +0 -35
  355. data/vendor/tests/layout/treemap-hierarchy.html +0 -40
  356. data/vendor/tests/layout/treemap-margin.html +0 -26
  357. data/vendor/tests/layout/treemap-round.html +0 -40
  358. data/vendor/tests/layout/treemap-slice.html +0 -34
  359. data/vendor/tests/layout/treemap.html +0 -37
  360. data/vendor/tests/life.js +0 -212
  361. data/vendor/tests/mark/anchor.html +0 -25
  362. data/vendor/tests/mark/area-anchor-chain.html +0 -42
  363. data/vendor/tests/mark/area-anchor-line.html +0 -57
  364. data/vendor/tests/mark/area-anchor-stack.html +0 -35
  365. data/vendor/tests/mark/area-anchor.html +0 -43
  366. data/vendor/tests/mark/area-anchor2.html +0 -33
  367. data/vendor/tests/mark/area-cardinal.html +0 -57
  368. data/vendor/tests/mark/area-monotone.html +0 -57
  369. data/vendor/tests/mark/area-segmented-basis.html +0 -30
  370. data/vendor/tests/mark/area-segmented-cardinal.html +0 -30
  371. data/vendor/tests/mark/area-segmented-monotone.html +0 -30
  372. data/vendor/tests/mark/area-segmented-step.html +0 -44
  373. data/vendor/tests/mark/area-segmented.html +0 -29
  374. data/vendor/tests/mark/area-stacked-cardinal.html +0 -54
  375. data/vendor/tests/mark/area-stacked-monotone.html +0 -54
  376. data/vendor/tests/mark/area-stacked.html +0 -53
  377. data/vendor/tests/mark/area-step.html +0 -43
  378. data/vendor/tests/mark/area-zero.html +0 -32
  379. data/vendor/tests/mark/area.html +0 -57
  380. data/vendor/tests/mark/bar-anchor-stack.html +0 -51
  381. data/vendor/tests/mark/bar-anchor.html +0 -44
  382. data/vendor/tests/mark/bar-column-grouped.html +0 -63
  383. data/vendor/tests/mark/bar-column-stacked.html +0 -56
  384. data/vendor/tests/mark/bar-column.html +0 -54
  385. data/vendor/tests/mark/bar-grouped.html +0 -63
  386. data/vendor/tests/mark/bar-stacked.html +0 -57
  387. data/vendor/tests/mark/bar.html +0 -54
  388. data/vendor/tests/mark/cursor.html +0 -41
  389. data/vendor/tests/mark/def-type.html +0 -23
  390. data/vendor/tests/mark/dot-anchor.html +0 -33
  391. data/vendor/tests/mark/dot-radius.html +0 -22
  392. data/vendor/tests/mark/dot-stroke.html +0 -43
  393. data/vendor/tests/mark/dot.html +0 -52
  394. data/vendor/tests/mark/dot2.html +0 -61
  395. data/vendor/tests/mark/ease.html +0 -90
  396. data/vendor/tests/mark/event-dblclick.html +0 -30
  397. data/vendor/tests/mark/event-prototype.html +0 -45
  398. data/vendor/tests/mark/event-render.html +0 -45
  399. data/vendor/tests/mark/event.html +0 -24
  400. data/vendor/tests/mark/image-color-inherit.html +0 -33
  401. data/vendor/tests/mark/image-color.html +0 -35
  402. data/vendor/tests/mark/image-color2.html +0 -35
  403. data/vendor/tests/mark/image-heatmap.html +0 -29
  404. data/vendor/tests/mark/image.html +0 -32
  405. data/vendor/tests/mark/label-break.html +0 -54
  406. data/vendor/tests/mark/label-decoration.html +0 -22
  407. data/vendor/tests/mark/label-events.html +0 -32
  408. data/vendor/tests/mark/line-anchor.html +0 -42
  409. data/vendor/tests/mark/line-basis.html +0 -54
  410. data/vendor/tests/mark/line-brownian.html +0 -57
  411. data/vendor/tests/mark/line-cardinal.html +0 -77
  412. data/vendor/tests/mark/line-catmull-rom.html +0 -78
  413. data/vendor/tests/mark/line-curve.html +0 -65
  414. data/vendor/tests/mark/line-eccentricity.html +0 -39
  415. data/vendor/tests/mark/line-fill.html +0 -24
  416. data/vendor/tests/mark/line-join.html +0 -51
  417. data/vendor/tests/mark/line-monotone-non-monotone.html +0 -53
  418. data/vendor/tests/mark/line-monotone-two-way.html +0 -61
  419. data/vendor/tests/mark/line-monotone.html +0 -53
  420. data/vendor/tests/mark/line-polar.html +0 -36
  421. data/vendor/tests/mark/line-segmented-basis.html +0 -57
  422. data/vendor/tests/mark/line-segmented-cardinal.html +0 -80
  423. data/vendor/tests/mark/line-segmented-join.html +0 -52
  424. data/vendor/tests/mark/line-segmented-monotone.html +0 -56
  425. data/vendor/tests/mark/line-segmented-polar.html +0 -30
  426. data/vendor/tests/mark/line-segmented-step.html +0 -41
  427. data/vendor/tests/mark/line-segmented-step2.html +0 -32
  428. data/vendor/tests/mark/line-segmented.html +0 -30
  429. data/vendor/tests/mark/line-step.html +0 -39
  430. data/vendor/tests/mark/line-tension.html +0 -59
  431. data/vendor/tests/mark/line.html +0 -51
  432. data/vendor/tests/mark/panel-anchor.html +0 -37
  433. data/vendor/tests/mark/panel-anchor2.html +0 -31
  434. data/vendor/tests/mark/panel-anchor3.html +0 -22
  435. data/vendor/tests/mark/panel-anchor4.html +0 -28
  436. data/vendor/tests/mark/panel-anchor5.html +0 -28
  437. data/vendor/tests/mark/panel-append.html +0 -29
  438. data/vendor/tests/mark/panel-canvas.html +0 -107
  439. data/vendor/tests/mark/panel-fill.html +0 -50
  440. data/vendor/tests/mark/panel-mouse.html +0 -53
  441. data/vendor/tests/mark/panel-transform.html +0 -67
  442. data/vendor/tests/mark/property-cast.html +0 -24
  443. data/vendor/tests/mark/render-partial.html +0 -42
  444. data/vendor/tests/mark/rule-anchor.html +0 -29
  445. data/vendor/tests/mark/title.html +0 -41
  446. data/vendor/tests/mark/transition-anchor.html +0 -47
  447. data/vendor/tests/mark/transition-wedge.html +0 -47
  448. data/vendor/tests/mark/transition.html +0 -106
  449. data/vendor/tests/mark/wedge-donut.html +0 -35
  450. data/vendor/tests/mark/wedge-implied.html +0 -42
  451. data/vendor/tests/mark/wedge-pie.html +0 -37
  452. data/vendor/tests/mark/wedge-ring.html +0 -27
  453. data/vendor/tests/miserables.js +0 -348
  454. data/vendor/tests/physics/dorling.html +0 -70
  455. data/vendor/tests/physics/simulation.html +0 -56
  456. data/vendor/tests/social.js +0 -28
  457. data/vendor/tests/stanford.png +0 -0
  458. data/vendor/tests/style.css +0 -5
  459. data/vendor/tests/testify.css +0 -29
  460. data/vendor/tests/testify.js +0 -16
  461. data/vendor/tests/text/format-number.html +0 -75
@@ -2,11 +2,11 @@ module Rubyvis
2
2
  def self.Anchor(target)
3
3
  Rubyvis::Anchor.new(target)
4
4
  end
5
-
5
+
6
6
  class Anchor < Mark
7
7
  @properties=Mark.properties.dup
8
- attr_accessor_dsl :name, :text_align, :text_baseline
9
-
8
+ attr_accessor_dsl :name
9
+
10
10
  def initialize(target)
11
11
  super()
12
12
  self.target=target
@@ -17,4 +17,4 @@ module Rubyvis
17
17
  return self
18
18
  end
19
19
  end
20
- end
20
+ end
@@ -3,14 +3,96 @@ module Rubyvis
3
3
  Rubyvis::Area
4
4
  end
5
5
  module AreaPrototype
6
+ def fixed
7
+ {
8
+ # :line_width=> true,
9
+ :line_join=> true,
10
+ # :stroke_style=> true,
11
+ # :fill_style=> true,
12
+ :segmented=> true,
13
+ :interpolate=> true,
14
+ :tension=> true
15
+ }
16
+ end
17
+ def area_build_instance(s)
18
+
19
+ binds = self.binds
20
+
21
+ # Handle fixed properties on secondary instances. */
22
+ if (self.index)
23
+ fixed = @binds.fixed;
24
+ #/* Determine which properties are fixed. */
25
+ if (!fixed)
26
+ binds.fixed=[]
27
+ fixed = binds.fixed
28
+ filter=lambda {|prop|
29
+ if prop.fixed
30
+ fixed.push(prop)
31
+ return false
32
+ else
33
+ return true
34
+ end
35
+ }
36
+ # p binds.required
37
+ binds.required = binds.required.find_all(&filter)
38
+ # p binds.required
39
+ if (!self.scene[0].segmented)
40
+ binds.optional = binds.optional.find_all(&filter)
41
+ end
42
+ end
43
+
44
+ # p binds.required
45
+
46
+
47
+ #/* Copy fixed property values from the first instance. */
48
+ fixed.each {|prop|
49
+ name=prop.name
50
+ s[name]=self.scene[0][name]
51
+ }
52
+ # p binds.fixed
53
+ #/* Evaluate all properties on the first instance. */
54
+ else
55
+ binds.required = binds._required;
56
+ binds.optional = binds._optional;
57
+ binds.fixed = nil;
58
+
59
+ end
60
+ # pp binds
61
+ mark_build_instance(s)
62
+ end
63
+
64
+
65
+
66
+ def area_bind
67
+ mark_bind()
68
+ binds = self.binds
69
+
70
+ required = binds.required
71
+ optional = binds.optional
72
+ optional.size.times {|i|
73
+ prop = optional[i]
74
+
75
+ prop.fixed = fixed.include? prop.name
76
+ if (prop.name == "segmented")
77
+ required.push(prop)
78
+ end
79
+ }
80
+ optional.delete_if {|v| v.name=='segmented'}
81
+ # Cache the original arrays so they can be restored on build. */
82
+ @binds._required = required;
83
+ @binds._optional = optional;
84
+ end
85
+
86
+
6
87
  def area_anchor(name)
7
88
  scene=nil
8
- self.anchor(name).interpolate(lambda {
9
- self.scene.target[self.index].interpolate
89
+ anchor=mark_anchor(name)
90
+ anchor.interpolate(lambda {
91
+ self.scene.target[self.index].interpolate
10
92
  }).eccentricity(lambda {
11
- self.scene.target[self.index].eccentricity
93
+ self.scene.target[self.index].eccentricity
12
94
  }).tension(lambda {
13
- self.scene.target[self.index].tension
95
+ self.scene.target[self.index].tension
14
96
  })
15
97
  end
16
98
  end
@@ -21,6 +103,12 @@ module Rubyvis
21
103
  def type
22
104
  'area'
23
105
  end
106
+ def bind
107
+ area_bind
108
+ end
109
+ def build_instance(s)
110
+ area_build_instance(s)
111
+ end
24
112
  def self.defaults
25
113
  Area.new.extend(Mark.defaults).line_width(1.5).fill_style(pv.Colors.category20.by(pv.parent)).interpolate('linear').tension(0.7)
26
114
  end
@@ -33,4 +121,4 @@ module Rubyvis
33
121
  super(s)
34
122
  end
35
123
  end
36
- end
124
+ end
@@ -13,4 +13,4 @@ module Rubyvis
13
13
  Bar.new.extend(Mark.defaults).line_width(1.5).fill_style(Rubyvis.Colors.category20().by(Rubyvis.parent))
14
14
  end
15
15
  end
16
- end
16
+ end
@@ -2,7 +2,7 @@ module Rubyvis
2
2
  def self.Label
3
3
  Rubyvis::Label
4
4
  end
5
-
5
+
6
6
  class Label < Mark
7
7
  @properties=Mark.properties.dup
8
8
  attr_accessor_dsl :text, :font, :text_angle, :text_style, :text_align, :text_baseline, :text_margin, :text_decoration, :text_shadow
@@ -13,4 +13,4 @@ module Rubyvis
13
13
  Label.new.extend(Mark.defaults).events('none').text(lambda{|x| x}).font("10px sans-serif").text_angle(0).text_style(pv.color('black')).text_align('left').text_baseline('bottom').text_margin(3)
14
14
  end
15
15
  end
16
- end
16
+ end
@@ -3,12 +3,12 @@ module Rubyvis
3
3
  Rubyvis::Line
4
4
  end
5
5
  module LinePrototype
6
- include AreaPrototype
6
+ include AreaPrototype
7
7
  def line_anchor(name)
8
8
  area_anchor(name).text_align(lambda {|d|
9
- {'left'=>'right','bottom'=>'center','top'=>'center','center'=>'center','right'=>'left'}[d]
9
+ {'left'=>'right','bottom'=>'center', 'top'=>'center','center'=>'center','right'=>'left'}[d]
10
10
  }).text_baseline(lambda{|d|
11
- {'top'=>'bottom','right'=>'middle','left'=>'middle','center'=>'middle','bottom'=>'top'}[d]
11
+ {'top'=>'bottom','right'=>'middle', 'left'=>'middle','center'=>'middle','bottom'=>'top'}[d]
12
12
  })
13
13
  end
14
14
  end
@@ -16,15 +16,21 @@ module Rubyvis
16
16
  include AreaPrototype
17
17
  include LinePrototype
18
18
  @properties=Mark.properties.dup
19
- attr_accessor_dsl :line_width, :line_join, :stroke_style, :fill_style, :segmented, :interporale, :eccentricity, :tension
19
+ attr_accessor_dsl :line_width, :line_join, :stroke_style, :fill_style, :segmented, :interpolate, :eccentricity, :tension
20
20
  def type
21
21
  "line"
22
22
  end
23
23
  def anchor(name)
24
24
  line_anchor(name)
25
25
  end
26
+ def bind(*args)
27
+ area_bind(*args)
28
+ end
29
+ def build_instance(*args)
30
+ area_build_instance(*args)
31
+ end
26
32
  def defaults
27
33
  Line.new.extend(Rubyvis::Mark).line_join('miter').line_width(1.5).stroke_style(RubyVis::Color.category10().by(pv.parent)).interpolate('linear').eccentricity(0).tension(7)
28
34
  end
29
35
  end
30
- end
36
+ end
@@ -1,7 +1,7 @@
1
1
  module Rubyvis
2
2
  def self.Panel
3
3
  Rubyvis::Panel
4
- end
4
+ end
5
5
  class Panel < Bar
6
6
  def type
7
7
  "panel"
@@ -20,13 +20,13 @@ module Rubyvis
20
20
  @children.each do |c|
21
21
  out << (" "*level)+"- #{c.type} (#{c.object_id}) proto:#{c.proto.object_id} target:#{c.target.object_id}"
22
22
  if c.respond_to? :children and c.children
23
- out <<c.children_inspect(level+1)
23
+ out << c.children_inspect(level+1)
24
24
  end
25
25
  end
26
26
  out
27
-
27
+
28
28
  end
29
-
29
+
30
30
  def self.defaults
31
31
  Panel.new.extend(Bar.defaults).fill_style(nil).overflow('visible')
32
32
  end
@@ -38,7 +38,7 @@ module Rubyvis
38
38
  children.push(child)
39
39
  child
40
40
  end
41
-
41
+
42
42
  attr_reader :_canvas
43
43
  def bind
44
44
  super
@@ -57,7 +57,7 @@ module Rubyvis
57
57
  child=children[i]
58
58
  child.scene=s.children[i]
59
59
  child.scale=scale
60
- child.build()
60
+ child.build
61
61
  }
62
62
  n.times {|i|
63
63
  child=children[i]
@@ -66,7 +66,9 @@ module Rubyvis
66
66
  child.scale=nil
67
67
  }
68
68
  s.children=s.children[0,n]
69
+
69
70
  end
71
+
70
72
  def to_svg
71
73
  @_canvas.sort.map {|v|
72
74
  bar = REXML::Formatters::Default.new
@@ -92,7 +94,7 @@ module Rubyvis
92
94
  w=Rubyvis.css(c,'height')
93
95
  s.height=h-s.top-s.bottom
94
96
  end
95
-
97
+
96
98
  else
97
99
  @_canvas||={}
98
100
  cache=@_canvas
@@ -102,11 +104,11 @@ module Rubyvis
102
104
  end
103
105
  s.canvas=c
104
106
  end
105
-
107
+
106
108
  s.transform=Rubyvis.Transform.identity if (s.transform.nil?)
107
109
  super(s)
108
-
110
+
109
111
  end
110
-
112
+
111
113
  end
112
- end
114
+ end
@@ -12,7 +12,7 @@ module Rubyvis
12
12
  def type
13
13
  'rule'
14
14
  end
15
-
15
+
16
16
  def anchor(name)
17
17
  line_anchor(name)
18
18
  end
@@ -29,4 +29,4 @@ module Rubyvis
29
29
  super(s)
30
30
  end
31
31
  end
32
- end
32
+ end
@@ -1,11 +1,12 @@
1
1
  module Rubyvis
2
2
  class Property
3
- attr_accessor :name, :id, :value, :_type
3
+ attr_accessor :name, :id, :value, :_type, :fixed
4
4
  def initialize(opts=Hash.new)
5
5
  @id=opts[:id]
6
6
  @name=opts[:name]
7
7
  @value=opts[:value]
8
8
  @_type=opts[:_type]
9
+ @fixed=opts[:fixed]
9
10
  end
10
11
  end
11
- end
12
+ end
data/lib/rubyvis/scale.rb CHANGED
@@ -11,7 +11,7 @@ module Rubyvis
11
11
  end
12
12
  def self.ordinal(*args)
13
13
  Ordinal.new(*args)
14
- end
14
+ end
15
15
  def self.interpolator(start,_end)
16
16
  if start.is_a? Numeric
17
17
  return lambda {|t| t*(_end-start)+start}
@@ -22,9 +22,9 @@ module Rubyvis
22
22
  a=start.a*(1-t)+_end.a*t
23
23
  a=0 if a<1e-5
24
24
  return (start.a == 0) ? Rubyvis.rgb(_end.r, _end.g, _end.b, a) : ((_end.a == 0) ? pv.rgb(start.r, start.g, start.b, a) : Rubyvis.rgb(
25
- (start.r * (1 - t) + _end.r * t).round,
26
- (start.g * (1 - t) + _end.g * t).round,
27
- (start.b * (1 - t) + _end.b * t).round, a))
25
+ (start.r * (1 - t) + _end.r * t).round,
26
+ (start.g * (1 - t) + _end.g * t).round,
27
+ (start.b * (1 - t) + _end.b * t).round, a))
28
28
  }
29
29
  end
30
30
  end
@@ -1,5 +1,5 @@
1
1
  module Rubyvis
2
-
2
+
3
3
  class Scale::Linear < Rubyvis::Scale::Quantitative
4
- end
4
+ end
5
5
  end
@@ -1,52 +1,52 @@
1
1
  module Rubyvis
2
2
  class Scale::Ordinal
3
3
  include Rubyvis::Scale
4
-
5
- def initialize(*args)
6
- @d=[] # domain
7
- @i={}
8
- @r=[]
9
- @band=0
10
- domain(*args)
11
- end
12
- def scale(x)
13
- if @i[x].nil?
14
- @d.push(x)
15
- @i[x]=@d.size-1
16
- end
17
- @r[@i[x] % @r.size]
4
+
5
+ def initialize(*args)
6
+ @d=[] # domain
7
+ @i={}
8
+ @r=[]
9
+ @band=0
10
+ domain(*args)
11
+ end
12
+ def scale(x)
13
+ if @i[x].nil?
14
+ @d.push(x)
15
+ @i[x]=@d.size-1
18
16
  end
19
- def domain(*arguments)
20
- array,f=arguments[0],arguments[1]
21
- if(arguments.size>0)
22
- array= (array.is_a? Array) ? ((arguments.size>1) ? array.map(&f) : array) : arguments.dup
23
- @d=array.uniq
24
- i=pv.numerate(d)
25
- return self
26
- end
27
- @d
17
+ @r[@i[x] % @r.size]
18
+ end
19
+ def domain(*arguments)
20
+ array,f=arguments[0],arguments[1]
21
+ if(arguments.size>0)
22
+ array= (array.is_a? Array) ? ((arguments.size>1) ? array.map(&f) : array) : arguments.dup
23
+ @d=array.uniq
24
+ i=pv.numerate(d)
25
+ return self
28
26
  end
29
- def range(*arguments)
30
- array, f = arguments[0],arguments[1]
31
- if(arguments.size>0)
27
+ @d
28
+ end
29
+ def range(*arguments)
30
+ array, f = arguments[0],arguments[1]
31
+ if(arguments.size>0)
32
32
  @r=(array.is_a? Array) ? ((arguments.size>1) ? array.map(&f) : array) : arguments.dup
33
- if @r[0].is_a? String
34
- @r=@r.map {|i| pv.color(i)}
35
- end
36
- self
33
+ if @r[0].is_a? String
34
+ @r=@r.map {|i| pv.color(i)}
37
35
  end
38
- @r
39
- end
40
- def split(min,max)
41
- step=(max-min).quo(domain().size)
42
- @r=pv.range(min+step.quo(2),max,step)
43
36
  self
44
37
  end
45
- def by(*arguments)
46
- f,dummy=arguments
47
- t=self
48
- by=lambda { t.scale(f.js_apply(self,arguments))}
49
- by
50
- end
38
+ @r
39
+ end
40
+ def split(min,max)
41
+ step=(max-min).quo(domain().size)
42
+ @r=pv.range(min+step.quo(2),max,step)
43
+ self
44
+ end
45
+ def by(*arguments)
46
+ f,dummy=arguments
47
+ t=self
48
+ by=lambda {t.scale(f.js_apply(self,arguments))}
49
+ by
51
50
  end
51
+ end
52
52
  end
@@ -2,201 +2,213 @@ module Rubyvis
2
2
  class Scale::Quantitative
3
3
  include Rubyvis::Scale
4
4
  attr_reader :l
5
- def initialize(*args)
6
- @d=[0,1] # domain
7
- @l=[0,1] # transformed domain
8
- @r=[0,1] # default range
9
- @i=[Rubyvis.identity] # default interpolator
10
- @type=:to_f # default type
11
- @n=false
12
- @f=Rubyvis.identity # default forward transformation
13
- @g=Rubyvis.identity
14
- @tick_format=lambda {|x| x.to_f}
15
- domain(*args)
16
- end
17
- def new_date(x=nil)
18
- x.nil? ? Date.today : DateTime.civil(x)
19
- end
20
-
21
- def scale(x)
22
- j=Rubyvis.search(@d,x)
23
- j=-j-2 if (j<0)
24
- j=[0,[@i.size-1,j].min].max
25
- # p @l
26
- # puts "Primero #{j}: #{@f.call(x) - @l[j]}"
27
- # puts "Segundo #{(@l[j + 1] - @l[j])}"
28
- @i[j].call((@f.call(x) - @l[j]) .quo(@l[j + 1] - @l[j]));
29
- end
30
- def [](x)
31
- scale(x)
32
- end
33
- def transform(forward, inverse)
34
- @f=lambda {|x| @n ? -forward.call(-x) : forward.call(x); }
35
- @g=lambda {|y| @n ? -inverse.call(-y) : inverse.call(y); }
5
+ def initialize(*args)
6
+ @d=[0,1] # domain
7
+ @l=[0,1] # transformed domain
8
+ @r=[0,1] # default range
9
+ @i=[Rubyvis.identity] # default interpolator
10
+ @type=:to_f # default type
11
+ @n=false
12
+ @f=Rubyvis.identity # default forward transformation
13
+ @g=Rubyvis.identity
14
+ @tick_format=lambda {|x| x.to_f}
15
+ domain(*args)
16
+ end
17
+ def new_date(x=nil)
18
+ x.nil? ? Time.new() : Time.at(x)
19
+ end
20
+
21
+ def scale(x)
22
+ x=x.to_f
23
+ j=Rubyvis.search(@d, x)
24
+ j=-j-2 if (j<0)
25
+ j=[0,[@i.size-1,j].min].max
26
+ # p @l
27
+ # puts "Primero #{j}: #{@f.call(x) - @l[j]}"
28
+ # puts "Segundo #{(@l[j + 1] - @l[j])}"
29
+ @i[j].call((@f.call(x) - @l[j]) .quo(@l[j + 1] - @l[j]));
30
+ end
31
+ def [](x)
32
+ scale(x)
33
+ end
34
+ def transform(forward, inverse)
35
+ @f=lambda {|x| @n ? -forward.call(-x) : forward.call(x); }
36
+ @g=lambda {|y| @n ? -inverse.call(-y) : inverse.call(y); }
37
+ @l=@d.map{|v| @f.call(v)}
38
+ self
39
+ end
40
+
41
+
42
+ def domain(*arguments)
43
+ array,min,max=arguments
44
+ o=nil
45
+ if (arguments.size>0)
46
+ if array.is_a? Array
47
+ min = pv.identity if (arguments.size < 2)
48
+ max = min if (arguments.size < 3)
49
+ o = [array[0]].min if array.size>0
50
+ @d = array.size>0 ? [Rubyvis.min(array, min), Rubyvis.max(array, max)] : []
51
+ else
52
+ o = array
53
+ @d = arguments.map {|i| i.to_f}
54
+ end
55
+
56
+ if !@d.size
57
+ @d = [-Infinity, Infinity];
58
+ elsif (@d.size == 1)
59
+ @d = [@d.first, @d.first]
60
+ end
61
+
62
+ @n = (@d.first.to_f<0 or @d.last.to_f<0)
36
63
  @l=@d.map{|v| @f.call(v)}
37
- self
64
+
65
+ @type = (o.is_a? Time) ? :time : :number;
66
+ return self
38
67
  end
39
-
40
-
41
- def domain(*arguments)
42
- array,min,max=arguments
43
- if (arguments.size>0)
44
- if array.is_a? Array
45
- min = pv.identity if (arguments.size < 2)
46
- max = min if (arguments.size < 3)
47
- o = array.size>0 && [array[0]].min
48
- @d = array.size ? [Rubyvis.min(array, min), Rubyvis.max(array, max)] : [];
49
- else
50
- o = array;
51
- @d = arguments.map {|i| i.to_f}
52
- end
53
- if !@d.size
54
- @d = [-Infinity, Infinity];
55
- elsif (@d.size == 1)
56
- @d = [@d.first, @d.first]
57
- end
58
- @n = (@d.first<0 or @d.last<0)
59
- @l=@d.map{|v| @f.call(v)}
60
- @type = (o.is_a? Date) ? new_date : :to_f;
61
- return self
68
+ # TODO: Fix this.
69
+ @d.map{|v|
70
+ case @type
71
+ when :number
72
+ v.to_f
73
+ when :time
74
+ Time.at(v)
75
+ else
76
+ v
62
77
  end
63
- # TODO: Fix this.
64
- @d.map{|v|
65
- case @type
66
- when :to_f
67
- v.to_f
68
- when :to_date
69
- Date.new(v)
70
- else
71
- v
72
- end
73
- }
74
- end
75
-
76
-
77
- def range(*arguments)
78
- if (arguments.size>0)
79
- @r = arguments.dup
80
- if (@r.size==0)
81
- @r = [-Infinity, Infinity];
82
- elsif (@r.size == 1)
83
- @r = [@r[0], @r[0]]
84
- end
85
- @i=(@r.size-1).times.map do |j|
86
- Rubyvis::Scale.interpolator(@r[j], @r[j + 1]);
87
- end
88
- return self
78
+ }
79
+ end
80
+
81
+
82
+ def range(*arguments)
83
+ if (arguments.size>0)
84
+ @r = arguments.dup
85
+ if (@r.size==0)
86
+ @r = [-Infinity, Infinity];
87
+ elsif (@r.size == 1)
88
+ @r = [@r[0], @r[0]]
89
89
  end
90
- @r
91
- end
92
-
93
- def invert(y)
94
- j=Rubyvis.search(@r, y)
95
- j=-j-2 if j<0
96
- j = [0, [@i.size - 1, j].min].max
97
-
98
- @g.call(@l[j] + (y - @r[j]).quo(@r[j + 1] - @r[j]) * (@l[j + 1] - @l[j]));
90
+ @i=(@r.size-1).times.map do |j|
91
+ Rubyvis::Scale.interpolator(@r[j], @r[j + 1]);
92
+ end
93
+ return self
99
94
  end
95
+ @r
96
+ end
97
+
98
+ def invert(y)
99
+ j=Rubyvis.search(@r, y)
100
+ j=-j-2 if j<0
101
+ j = [0, [@i.size - 1, j].min].max
100
102
 
101
- def type(v=nil)
102
- return @type if v.nil?
103
- case @type
104
- when Numeric
105
- v.to_f
106
- when Date
107
- raise "Not implemented yet"
108
- end
103
+ val=@g.call(@l[j] + (y - @r[j]).quo(@r[j + 1] - @r[j]) * (@l[j + 1] - @l[j]))
104
+ @type==:time ? Time.at(val) : val
105
+ end
106
+
107
+ def type(v=nil)
108
+ return @type if v.nil?
109
+ case @type
110
+ when Numeric
111
+ v.to_f
112
+ when Date
113
+ raise "Not implemented yet"
109
114
  end
110
- # TODO: FIX this func
111
- def ticks(*arguments)
112
- m = arguments[0]
113
- start = @d.first
114
- _end = @d.last
115
- reverse = _end < start
116
- min = reverse ? _end : start
117
- max = reverse ? start : _end
118
- span = max - min
119
-
120
- # Special case: empty, invalid or infinite span.
121
- if (!span or (span.is_a? Float and span.infinite?))
122
- @tick_format= Rubyvis.Format.date("%x") if (@type == newDate)
123
- return [type(min)];
124
- end
125
- # From here, �chaos!
126
- #/* Special case: dates. */
127
- if (@type == new_date)
128
- #/* Floor the date d given the precision p. */
129
- lambda do |d,p|
130
- case(p)
115
+ end
116
+ def ticks_floor(d,prec)
117
+ ar=d.to_a
118
+ #p ar
119
+ # [ sec, min, hour, day, month, year, wday, yday, isdst, zone ]
120
+ case(prec)
131
121
  when 31536e6
132
- d.setMonth(0);
122
+ ar[4]=1
133
123
  when 2592e6
134
- d.setDate(1);
124
+ ar[3]=1
135
125
  when 6048e5
136
- if (p == 6048e5)
137
- d.setDate(d.getDate() - d.getDay());
138
- end
126
+ ar[3]=ar[3]-ar[6] if (prec == 6048e5)
139
127
  when 864e5
140
- d.setHours(0);
128
+ ar[2]=0
141
129
  when 36e5
142
- d.setMinutes(0);
130
+ ar[1]=0
143
131
  when 6e4
144
- d.setSeconds(0);
132
+ ar[0]=0
145
133
  when 1e3
146
- d.setMilliseconds(0);
147
- end
148
- end
149
-
150
- precision, format, increment, step = 1,1,1,1
151
- if (span >= 3 * 31536e6)
152
- precision = 31536e6;
153
- format = "%Y";
154
- increment = lambda {|d| d.setFullYear(d.getFullYear() + step); };
155
- elsif (span >= 3 * 2592e6)
134
+ # do nothing
135
+ end
136
+ to_date(ar)
137
+ end
138
+
139
+ def to_date(d)
140
+
141
+ Time.utc(*d)
142
+ end
143
+ # TODO: FIX this func
144
+ def ticks(*arguments)
145
+ m = arguments[0]
146
+ start = @d.first
147
+ _end = @d.last
148
+ reverse = _end < start
149
+ min = reverse ? _end : start
150
+ max = reverse ? start : _end
151
+ span = max - min
152
+ # Special case: empty, invalid or infinite span.
153
+ if (!span or (span.is_a? Float and span.infinite?))
154
+ @tick_format= Rubyvis.Format.date("%x") if (@type == newDate)
155
+ return [type(min)];
156
+ end
157
+ # From here, �chaos!
158
+ #/* Special case: dates. */
159
+ if (@type == :time)
160
+ #/* Floor the date d given the precision p. */
161
+ precision, format, increment, step = 1,1,1,1
162
+ if (span >= 3 * 31536e6 / 1000.0)
163
+ precision = 31536e6
164
+ format = "%Y"
165
+ increment = lambda {|d| Time.at(d.to_f+(step*365*24*60*60)) }
166
+ elsif (span >= 3 * 2592e6 / 1000.0)
156
167
  precision = 2592e6;
157
168
  format = "%m/%Y";
158
- increment = lambda {|d| d.setMonth(d.getMonth() + step); };
159
- elsif (span >= 3 * 6048e5)
169
+ increment = lambda {|d| Time.at(d.to_f+(step*30*24*60*60)) }
170
+ elsif (span >= 3 * 6048e5 / 1000.0)
160
171
  precision = 6048e5;
161
172
  format = "%m/%d";
162
- increment = lambda {|d| d.setDate(d.getDate() + 7 * step); };
163
- elsif (span >= 3 * 864e5)
173
+ increment = lambda {|d| Time.at(d.to_f+(step*7*24*60*60)) }
174
+ elsif (span >= 3 * 864e5 / 1000.0)
164
175
  precision = 864e5;
165
176
  format = "%m/%d";
166
- increment = lambda {|d| d.setDate(d.getDate() + step); };
167
- elsif (span >= 3 * 36e5)
177
+ increment = lambda {|d| Time.at(d.to_f+(step*24*60*60)) }
178
+ elsif (span >= 3 * 36e5 / 1000.0)
168
179
  precision = 36e5;
169
180
  format = "%I:%M %p";
170
- increment = lambda {|d| d.setHours(d.getHours() + step); };
171
- elsif (span >= 3 * 6e4)
181
+ increment = lambda {|d| Time.at(d.to_f+(step*60*60)) }
182
+ elsif (span >= 3 * 6e4 / 1000.0 )
172
183
  precision = 6e4;
173
184
  format = "%I:%M %p";
174
- increment = lambda {|d| d.setMinutes(d.getMinutes() + step); };
175
- elsif (span >= 3 * 1e3)
185
+ increment = lambda {|d| Time.at(d.to_f+(step*60)) }
186
+ elsif (span >= 3 * 1e3 / 1000.0)
176
187
  precision = 1e3;
177
188
  format = "%I:%M:%S";
178
- increment = lambda {|d| d.setSeconds(d.getSeconds() + step); };
179
- else
189
+ increment = lambda {|d| Time.at(d.to_f+(step)) }
190
+ else
180
191
  precision = 1;
181
192
  format = "%S.%Qs";
182
- increment = lambda {|d| d.setTime(d.getTime() + step); };
183
- end
184
- @tick_format = pv.Format.date(format);
185
-
186
- date = Date.new(min)
187
- dates = []
188
- #floor(date, precision);
189
-
190
- # If we'd generate too many ticks, skip some!.
191
- n = span.quo(precision)
192
- if (n > 10)
193
+ increment = lambda {|d| Time.at(d.to_f+(step/1000.0)) }
194
+ end
195
+
196
+ @tick_format = pv.Format.date(format);
197
+ date = Time.at(min.to_f)
198
+ dates = []
199
+ date = ticks_floor(date,precision)
200
+ # If we'd generate too many ticks, skip some!.
201
+ n = span / (precision/1000.0)
202
+ if (n > 10)
193
203
  case (precision)
194
204
  when 36e5
195
205
  step = (n > 20) ? 6 : 3;
196
206
  date.setHours(Math.floor(date.getHours() / step) * step);
197
207
  when 2592e6
198
208
  step = 3; # seasons
199
- date.setMonth(Math.floor(date.getMonth() / step) * step);
209
+ ar=date.to_a
210
+ ar[4]=(date.month/step.to_f).floor*step
211
+ date=to_date(ar)
200
212
  when 6e4
201
213
  step = (n > 30) ? 15 : ((n > 15) ? 10 : 5);
202
214
  date.setMinutes(Math.floor(date.getMinutes() / step) * step);
@@ -215,49 +227,49 @@ module Rubyvis
215
227
  end
216
228
  date.setFullYear((date.getFullYear().quo(step)).floor * step);
217
229
  end
218
- end
219
-
230
+ end
231
+
220
232
  while (true)
221
- increment(date);
222
- break if (date > max)
223
- dates.push(Date.new(date));
233
+ date=increment.call(date)
234
+ break if (date.to_f > max.to_f)
235
+ dates.push(date)
224
236
  end
225
237
  return reverse ? dates.reverse() : dates;
226
- end
227
-
228
- # Normal case: numbers.
229
- m = 10 if (arguments.size==0)
230
-
231
- step = pv.log_floor(span.quo(m), 10)
232
- err = m.quo(span.quo(step))
233
- if (err <= 0.15)
234
- step = step*10
235
- elsif (err <= 0.35)
236
- step = step*5
237
- elsif (err <= 0.75)
238
- step = step*2
239
- end
240
- start = (min.quo(step)).ceil * step
241
- _end = (max.quo(step)).floor * step
242
- @tick_format= pv.Format.number().fraction_digits([0, -(pv.log(step, 10) + 0.01).floor].max);
243
- ticks = pv.range(start, _end + step, step);
244
- return reverse ? ticks.reverse() : ticks;
245
238
  end
246
- def nice
247
- if (@d.size!=2)
248
- return self;
249
- end
250
- start=@d.first
251
- _end=@d[@d.size-1]
252
- reverse=_end<start
253
- min=reverse ? _end : start
254
- max = reverse ? start : _end
255
- span=max-min
256
- return self if(!span or span.infinite?)
257
- step=10**((Math::log(span).quo(Math::log(10))).round-1)
258
- @d=[(min.quo(step)).floor*step, (max.quo(step)).ceil*step]
259
- @d.reverse if reverse
260
- @l=@d.map {|v| @f.call(v)}
239
+
240
+ # Normal case: numbers.
241
+ m = 10 if (arguments.size==0)
242
+
243
+ step = pv.log_floor(span.quo(m), 10)
244
+ err = m.quo(span.quo(step))
245
+ if (err <= 0.15)
246
+ step = step*10
247
+ elsif (err <= 0.35)
248
+ step = step*5
249
+ elsif (err <= 0.75)
250
+ step = step*2
251
+ end
252
+ start = (min.quo(step)).ceil * step
253
+ _end = (max.quo(step)).floor * step
254
+ @tick_format= pv.Format.number().fraction_digits([0, -(pv.log(step, 10) + 0.01).floor].max);
255
+ ticks = pv.range(start, _end + step, step);
256
+ return reverse ? ticks.reverse() : ticks;
257
+ end
258
+ def nice
259
+ if (@d.size!=2)
260
+ return self;
261
261
  end
262
+ start=@d.first
263
+ _end=@d[@d.size-1]
264
+ reverse=_end<start
265
+ min=reverse ? _end : start
266
+ max = reverse ? start : _end
267
+ span=max-min
268
+ return self if(!span or span.infinite?)
269
+ step=10**((Math::log(span).quo(Math::log(10))).round-1)
270
+ @d=[(min.quo(step)).floor*step, (max.quo(step)).ceil*step]
271
+ @d.reverse if reverse
272
+ @l=@d.map {|v| @f.call(v)}
262
273
  end
274
+ end
263
275
  end