rubyvis 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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